git subrepo clone https://github.com/mailcow/mailcow-dockerized.git mailcow/src/mailcow-dockerized
subrepo: subdir: "mailcow/src/mailcow-dockerized"
merged: "a832becb"
upstream: origin: "https://github.com/mailcow/mailcow-dockerized.git"
branch: "master"
commit: "a832becb"
git-subrepo: version: "0.4.3"
origin: "???"
commit: "???"
Change-Id: If5be2d621a211e164c9b6577adaa7884449f16b5
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/ajax/container_ctrl.php b/mailcow/src/mailcow-dockerized/data/web/inc/ajax/container_ctrl.php
new file mode 100644
index 0000000..f0e220f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/ajax/container_ctrl.php
@@ -0,0 +1,52 @@
+<?php
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';
+if (!isset($_SESSION['mailcow_cc_role']) || $_SESSION['mailcow_cc_role'] != 'admin') {
+ exit();
+}
+
+if (preg_match('/^[a-z\-]{0,}-mailcow/', $_GET['service'])) {
+ if ($_GET['action'] == "start") {
+ header('Content-Type: text/html; charset=utf-8');
+ $retry = 0;
+ while (docker('info', $_GET['service'])['State']['Running'] != 1 && $retry <= 3) {
+ $response = docker('post', $_GET['service'], 'start');
+ $response = json_decode($response, true);
+ $last_response = ($response['type'] == "success") ? '<b><span class="pull-right text-success">OK</span></b>' : '<b><span class="pull-right text-danger">Error: ' . $response['msg'] . '</span></b>';
+ if ($response['type'] == "success") {
+ break;
+ }
+ usleep(1500000);
+ $retry++;
+ }
+ echo (!isset($last_response)) ? '<b><span class="pull-right text-warning">Already running</span></b>' : $last_response;
+ }
+ if ($_GET['action'] == "stop") {
+ header('Content-Type: text/html; charset=utf-8');
+ $retry = 0;
+ while (docker('info', $_GET['service'])['State']['Running'] == 1 && $retry <= 3) {
+ $response = docker('post', $_GET['service'], 'stop');
+ $response = json_decode($response, true);
+ $last_response = ($response['type'] == "success") ? '<b><span class="pull-right text-success">OK</span></b>' : '<b><span class="pull-right text-danger">Error: ' . $response['msg'] . '</span></b>';
+ if ($response['type'] == "success") {
+ break;
+ }
+ usleep(1500000);
+ $retry++;
+ }
+ echo (!isset($last_response)) ? '<b><span class="pull-right text-warning">Not running</span></b>' : $last_response;
+ }
+ if ($_GET['action'] == "restart") {
+ header('Content-Type: text/html; charset=utf-8');
+ $response = docker('post', $_GET['service'], 'restart');
+ $response = json_decode($response, true);
+ $last_response = ($response['type'] == "success") ? '<b><span class="pull-right text-success">OK</span></b>' : '<b><span class="pull-right text-danger">Error: ' . $response['msg'] . '</span></b>';
+ echo (!isset($last_response)) ? '<b><span class="pull-right text-warning">Cannot restart container</span></b>' : $last_response;
+ }
+ if ($_GET['action'] == "logs") {
+ $lines = (empty($_GET['lines']) || !is_numeric($_GET['lines'])) ? 1000 : $_GET['lines'];
+ header('Content-Type: text/plain; charset=utf-8');
+ print_r(preg_split('/\n/', docker('logs', $_GET['service'], $lines)));
+ }
+}
+
+?>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/ajax/destroy_tfa_auth.php b/mailcow/src/mailcow-dockerized/data/web/inc/ajax/destroy_tfa_auth.php
new file mode 100644
index 0000000..72c7f1e
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/ajax/destroy_tfa_auth.php
@@ -0,0 +1,6 @@
+<?php
+session_start();
+unset($_SESSION['pending_mailcow_cc_username']);
+unset($_SESSION['pending_mailcow_cc_role']);
+unset($_SESSION['pending_tfa_method']);
+?>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/ajax/dns_diagnostics.php b/mailcow/src/mailcow-dockerized/data/web/inc/ajax/dns_diagnostics.php
new file mode 100644
index 0000000..928a4e4
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/ajax/dns_diagnostics.php
@@ -0,0 +1,481 @@
+<?php
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/spf.inc.php';
+
+define('state_good', '<span class="glyphicon glyphicon-ok text-success"></span>');
+define('state_missing', '<span class="glyphicon glyphicon-remove text-danger"></span>');
+define('state_nomatch', "?");
+define('state_optional', " <sup>2</sup>");
+
+if (isset($_SESSION['mailcow_cc_role']) && ($_SESSION['mailcow_cc_role'] == "admin"|| $_SESSION['mailcow_cc_role'] == "domainadmin")) {
+
+$domains = mailbox('get', 'domains');
+$alias_domains = array();
+foreach($domains as $dn) {
+ $alias_domains = array_merge($alias_domains, mailbox('get', 'alias_domains', $dn));
+}
+$domains = array_merge($domains, $alias_domains);
+
+if (isset($_GET['domain'])) {
+ if (is_valid_domain_name($_GET['domain'])) {
+ if (in_array($_GET['domain'], $domains)) {
+ $domain = $_GET['domain'];
+ }
+ else {
+ echo "No such domain in context";
+ exit();
+ }
+ }
+ else {
+ echo "Invalid domain name";
+ exit();
+ }
+}
+
+$ch = curl_init('http://ip4.mailcow.email');
+curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
+curl_setopt($ch, CURLOPT_VERBOSE, false);
+curl_setopt($ch, CURLOPT_HEADER, false);
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
+$ip = curl_exec($ch);
+curl_close($ch);
+
+$ch = curl_init('http://ip6.mailcow.email');
+curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V6);
+curl_setopt($ch, CURLOPT_VERBOSE, false);
+curl_setopt($ch, CURLOPT_HEADER, false);
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
+$ip6 = curl_exec($ch);
+curl_close($ch);
+
+$ptr = implode('.', array_reverse(explode('.', $ip))) . '.in-addr.arpa';
+if (!empty($ip6)) {
+ $ip6_full = str_replace('::', str_repeat(':', 9-substr_count($ip6, ':')), $ip6);
+ $ip6_full = str_replace('::', ':0:', $ip6_full);
+ $ip6_full = str_replace('::', ':0:', $ip6_full);
+ $ptr6 = '';
+ foreach (explode(':', $ip6_full) as $part) {
+ $ptr6 .= str_pad($part, 4, '0', STR_PAD_LEFT);
+ }
+ $ptr6 = implode('.', array_reverse(str_split($ptr6, 1))) . '.ip6.arpa';
+}
+
+$https_port = strpos($_SERVER['HTTP_HOST'], ':');
+if ($https_port === FALSE) {
+ $https_port = 443;
+}
+else {
+ $https_port = substr($_SERVER['HTTP_HOST'], $https_port+1);
+}
+
+if (!isset($autodiscover_config['sieve'])) {
+ $autodiscover_config['sieve'] = array('server' => $mailcow_hostname, 'port' => array_pop(explode(':', getenv('SIEVE_PORT'))));
+}
+
+// Init records array
+$spf_link = '<a href="https://en.wikipedia.org/wiki/Sender_Policy_Framework" target="_blank">SPF Record Syntax</a><br />';
+$dmarc_link = '<a href="https://www.kitterman.com/dmarc/assistant.html" target="_blank">DMARC Assistant</a>';
+
+$records = array();
+if ($_SESSION['mailcow_cc_role'] == "admin") {
+ $records[] = array(
+ $mailcow_hostname,
+ 'A',
+ $ip
+ );
+ $records[] = array(
+ $ptr,
+ 'PTR',
+ $mailcow_hostname
+ );
+ if (!empty($ip6)) {
+ $records[] = array(
+ $mailcow_hostname,
+ 'AAAA',
+ expand_ipv6($ip6)
+ );
+ $records[] = array(
+ $ptr6,
+ 'PTR',
+ $mailcow_hostname
+ );
+ }
+ $records[] = array(
+ '_25._tcp.'.$autodiscover_config['smtp']['server'],
+ 'TLSA',
+ generate_tlsa_digest($autodiscover_config['smtp']['server'], 25, 1)
+ );
+ if (!in_array($domain, $alias_domains)) {
+ $records[] = array(
+ '_'.$https_port.
+ '._tcp.'.$mailcow_hostname,
+ 'TLSA',
+ generate_tlsa_digest($mailcow_hostname, $https_port)
+ );
+ $records[] = array(
+ '_'.$autodiscover_config['pop3']['tlsport'].
+ '._tcp.'.$autodiscover_config['pop3']['server'],
+ 'TLSA',
+ generate_tlsa_digest($autodiscover_config['pop3']['server'], $autodiscover_config['pop3']['tlsport'], 1)
+ );
+ $records[] = array(
+ '_'.$autodiscover_config['imap']['tlsport'].
+ '._tcp.'.$autodiscover_config['imap']['server'],
+ 'TLSA',
+ generate_tlsa_digest($autodiscover_config['imap']['server'], $autodiscover_config['imap']['tlsport'], 1)
+ );
+ $records[] = array(
+ '_'.$autodiscover_config['smtp']['port'].
+ '._tcp.'.$autodiscover_config['smtp']['server'],
+ 'TLSA',
+ generate_tlsa_digest($autodiscover_config['smtp']['server'], $autodiscover_config['smtp']['port'])
+ );
+ $records[] = array(
+ '_'.$autodiscover_config['smtp']['tlsport'].
+ '._tcp.'.$autodiscover_config['smtp']['server'],
+ 'TLSA',
+ generate_tlsa_digest($autodiscover_config['smtp']['server'], $autodiscover_config['smtp']['tlsport'], 1)
+ );
+ $records[] = array(
+ '_'.$autodiscover_config['imap']['port'].
+ '._tcp.'.$autodiscover_config['imap']['server'],
+ 'TLSA',
+ generate_tlsa_digest($autodiscover_config['imap']['server'], $autodiscover_config['imap']['port'])
+ );
+ $records[] = array(
+ '_'.$autodiscover_config['pop3']['port'].
+ '._tcp.'.$autodiscover_config['pop3']['server'],
+ 'TLSA',
+ generate_tlsa_digest($autodiscover_config['pop3']['server'], $autodiscover_config['pop3']['port'])
+ );
+ $records[] = array(
+ '_'.$autodiscover_config['sieve']['port'].
+ '._tcp.'.$autodiscover_config['sieve']['server'],
+ 'TLSA',
+ generate_tlsa_digest($autodiscover_config['sieve']['server'], $autodiscover_config['sieve']['port'], 1)
+ );
+ }
+}
+$records[] = array(
+ $domain,
+ 'MX',
+ $mailcow_hostname
+);
+if (!in_array($domain, $alias_domains)) {
+ $records[] = array(
+ 'autodiscover.'.$domain,
+ 'CNAME',
+ $mailcow_hostname
+ );
+ $records[] = array(
+ '_autodiscover._tcp.'.$domain,
+ 'SRV',
+ $mailcow_hostname.
+ ' '.$https_port
+ );
+ $records[] = array(
+ 'autoconfig.'.$domain,
+ 'CNAME',
+ $mailcow_hostname
+ );
+}
+$records[] = array(
+ $domain,
+ 'TXT',
+ $spf_link,
+ state_optional
+);
+$records[] = array(
+ '_dmarc.'.$domain,
+ 'TXT',
+ $dmarc_link,
+ state_optional
+);
+
+if (!empty($dkim = dkim('details', $domain))) {
+ $records[] = array(
+ $dkim['dkim_selector'] . '._domainkey.' . $domain,
+ 'TXT',
+ $dkim['dkim_txt']
+ );
+}
+if (!in_array($domain, $alias_domains)) {
+ $current_records = dns_get_record('_pop3._tcp.' . $domain, DNS_SRV);
+ if (count($current_records) == 0 || $current_records[0]['target'] != '') {
+ if ($autodiscover_config['pop3']['tlsport'] != '110') {
+ $records[] = array(
+ '_pop3._tcp.' . $domain,
+ 'SRV',
+ $autodiscover_config['pop3']['server'] . ' ' . $autodiscover_config['pop3']['tlsport']
+ );
+ }
+ }
+ else {
+ $records[] = array(
+ '_pop3._tcp.' . $domain,
+ 'SRV',
+ '. 0'
+ );
+ }
+ $current_records = dns_get_record('_pop3s._tcp.' . $domain, DNS_SRV);
+ if (count($current_records) == 0 || $current_records[0]['target'] != '') {
+ if ($autodiscover_config['pop3']['port'] != '995') {
+ $records[] = array(
+ '_pop3s._tcp.' . $domain,
+ 'SRV',
+ $autodiscover_config['pop3']['server'] . ' ' . $autodiscover_config['pop3']['port']
+ );
+ }
+ }
+ else {
+ $records[] = array(
+ '_pop3s._tcp.' . $domain,
+ 'SRV',
+ '. 0'
+ );
+ }
+ if ($autodiscover_config['imap']['tlsport'] != '143') {
+ $records[] = array(
+ '_imap._tcp.' . $domain,
+ 'SRV',
+ $autodiscover_config['imap']['server'] . ' ' . $autodiscover_config['imap']['tlsport']
+ );
+ }
+ if ($autodiscover_config['imap']['port'] != '993') {
+ $records[] = array(
+ '_imaps._tcp.' . $domain,
+ 'SRV',
+ $autodiscover_config['imap']['server'] . ' ' . $autodiscover_config['imap']['port']
+ );
+ }
+ if ($autodiscover_config['smtp']['tlsport'] != '587') {
+ $records[] = array(
+ '_submission._tcp.' . $domain,
+ 'SRV',
+ $autodiscover_config['smtp']['server'] . ' ' . $autodiscover_config['smtp']['tlsport']
+ );
+ }
+ if ($autodiscover_config['smtp']['port'] != '465') {
+ $records[] = array(
+ '_smtps._tcp.' . $domain,
+ 'SRV',
+ $autodiscover_config['smtp']['server'] . ' ' . $autodiscover_config['smtp']['port']
+ );
+ }
+ if ($autodiscover_config['sieve']['port'] != '4190') {
+ $records[] = array(
+ '_sieve._tcp.' . $domain,
+ 'SRV',
+ $autodiscover_config['sieve']['server'] . ' ' . $autodiscover_config['sieve']['port']
+ );
+ }
+}
+
+$record_types = array(
+ 'A' => DNS_A,
+ 'AAAA' => DNS_AAAA,
+ 'CNAME' => DNS_CNAME,
+ 'MX' => DNS_MX,
+ 'PTR' => DNS_PTR,
+ 'SRV' => DNS_SRV,
+ 'TXT' => DNS_TXT,
+);
+$data_field = array(
+ 'A' => 'ip',
+ 'AAAA' => 'ipv6',
+ 'CNAME' => 'target',
+ 'MX' => 'target',
+ 'PTR' => 'target',
+ 'SRV' => 'data',
+ 'TLSA' => 'data',
+ 'TXT' => 'txt',
+);
+
+?>
+<div class="table-responsive" id="dnstable">
+ <table class="table table-striped">
+ <tr>
+ <th><?=$lang['diagnostics']['dns_records_name'];?></th>
+ <th><?=$lang['diagnostics']['dns_records_type'];?></th>
+ <th><?=$lang['diagnostics']['dns_records_data'];?></th>
+ <th><?=$lang['diagnostics']['dns_records_status'];?></th>
+ </tr>
+<?php
+foreach ($records as &$record) {
+ $record[1] = strtoupper($record[1]);
+ $state = state_missing;
+ if ($record[1] == 'TLSA') {
+ $currents = dns_get_record($record[0], 52, $_, $_, TRUE);
+ foreach ($currents as &$current) {
+ $current['type'] = 'TLSA';
+ $current['cert_usage'] = hexdec(bin2hex($current['data']{0}));
+ $current['selector'] = hexdec(bin2hex($current['data']{1}));
+ $current['match_type'] = hexdec(bin2hex($current['data']{2}));
+ $current['cert_data'] = bin2hex(substr($current['data'], 3));
+ $current['data'] = $current['cert_usage'] . ' ' . $current['selector'] . ' ' . $current['match_type'] . ' ' . $current['cert_data'];
+ }
+ unset($current);
+ }
+ else {
+ $currents = dns_get_record($record[0], $record_types[$record[1]]);
+ if ($record[0] == $mailcow_hostname && ($record[1] == "A" || $record[1] == "AAAA")) {
+ if (!empty(dns_get_record($record[0], DNS_CNAME))) {
+ $currents[0]['ip'] = state_missing . ' <b>(CNAME)</b>';
+ $currents[0]['ipv6'] = state_missing . ' <b>(CNAME)</b>';
+ }
+ }
+ if ($record[1] == 'SRV') {
+ foreach ($currents as &$current) {
+ if ($current['target'] == '') {
+ $current['target'] = '.';
+ $current['port'] = '0';
+ }
+ $current['data'] = $current['target'] . ' ' . $current['port'];
+ }
+ unset($current);
+ }
+ elseif ($record[1] == 'TXT') {
+ foreach ($currents as &$current) {
+ unset($current);
+ }
+ unset($current);
+ }
+ elseif ($record[1] == 'AAAA') {
+ foreach ($currents as &$current) {
+ $current['ipv6'] = expand_ipv6($current['ipv6']);
+ }
+ }
+ }
+
+ if ($record[1] == 'CNAME' && count($currents) == 0) {
+ // A and AAAA are also valid instead of CNAME
+ $a = dns_get_record($record[0], DNS_A);
+ $cname = dns_get_record($record[2], DNS_A);
+ if (count($a) > 0 && count($cname) > 0) {
+ if ($a[0]['ip'] == $cname[0]['ip']) {
+ $currents = array(array('host' => $record[0], 'class' => 'IN', 'type' => 'CNAME', 'target' => $record[2]));
+ $aaaa = dns_get_record($record[0], DNS_AAAA);
+ $cname = dns_get_record($record[2], DNS_AAAA);
+ if (count($aaaa) == 0 || count($cname) == 0 || expand_ipv6($aaaa[0]['ipv6']) != expand_ipv6($cname[0]['ipv6'])) {
+ $currents[0]['target'] = expand_ipv6($aaaa[0]['ipv6']) . ' <sup>1</sup>';
+ }
+ }
+ else {
+ $currents = array(array('host' => $record[0], 'class' => 'IN', 'type' => 'CNAME', 'target' => $a[0]['ip'] . ' <sup>1</sup>'));
+ }
+ }
+ }
+
+ foreach ($currents as &$current) {
+ if ($current['type'] == 'TXT' &&
+ stripos($current['txt'], 'v=dmarc') === 0 &&
+ $record[2] == $dmarc_link) {
+ $current['txt'] = str_replace(' ', '', $current['txt']);
+ $state = $current[$data_field[$current['type']]] . state_optional;
+ }
+ elseif ($current['type'] == 'TXT' &&
+ stripos($current['txt'], 'v=spf') === 0 &&
+ $record[2] == $spf_link) {
+ $state = state_nomatch;
+ $rslt = get_spf_allowed_hosts($record[0]);
+ if(in_array($ip, $rslt) && in_array(expand_ipv6($ip6), $rslt)){
+ $state = state_good;
+ }
+ $state .= '<br />' . $current[$data_field[$current['type']]].state_optional;
+ }
+ elseif ($current['type'] == 'TXT' &&
+ stripos($current['txt'], 'v=dkim') === 0 &&
+ stripos($record[2], 'v=dkim') === 0) {
+ preg_match('/v=DKIM1;.*k=rsa;.*p=([^;]*).*/i', $current[$data_field[$current['type']]], $dkim_matches_current);
+ preg_match('/v=DKIM1;.*k=rsa;.*p=([^;]*).*/i', $record[2], $dkim_matches_good);
+ if ($dkim_matches_current[1] == $dkim_matches_good[1]) {
+ $state = state_good;
+ }
+ }
+ elseif ($current['type'] != 'TXT' &&
+ isset($data_field[$current['type']]) && $state != state_good) {
+ $state = state_nomatch;
+ if ($current[$data_field[$current['type']]] == $record[2]) {
+ $state = state_good;
+ }
+ }
+ }
+ unset($current);
+
+ if (isset($record[3]) &&
+ $record[3] == state_optional &&
+ ($state == state_missing || $state == state_nomatch)) {
+ $state = state_optional;
+ }
+
+ if ($state == state_nomatch) {
+ $state = array();
+ foreach ($currents as $current) {
+ $state[] = $current[$data_field[$current['type']]];
+ }
+ $state = implode('<br />', $state);
+ }
+ echo sprintf('<tr>
+ <td>%s</td>
+ <td>%s</td>
+ <td class="dns-found">%s</td>
+ <td class="dns-recommended">%s</td>
+ </tr>', $record[0], $record[1], $record[2], $state);
+ $record[3] = explode('<br />', $state);
+}
+unset($record);
+
+$dns_data = sprintf("\$ORIGIN %s.\n", $domain);
+foreach ($records as $record) {
+ if ($domain == substr($record[0], -strlen($domain))) {
+ $label = substr($record[0], 0, -strlen($domain)-1);
+ $val = $record[2];
+ if (strlen($label) == 0) {
+ $label = "@";
+ }
+ $vals = array();
+ if (strpos($val, "<a") !== FALSE) {
+ if(is_array($record[3]) && count($record[3]) == 1 && $record[3][0] == state_optional) {
+ $record[3][0] = "**TODO**";
+ $label = ';' . $label;
+ }
+ foreach ($record[3] as $val) {
+ $val = str_replace(state_optional, '', $val);
+ $val = str_replace(state_good, '', $val);
+ if (strlen($val) > 0) {
+ $vals[] = sprintf("%s\tIN\t%s\t%s\n", $label, $record[1], $val);
+ }
+ }
+ }
+ else {
+ $vals[] = sprintf("%s\tIN\t%s\t%s\n", $label, $record[1], $val);
+ }
+ foreach ($vals as $val) {
+ $dns_data .= str_replace($domain, $domain . '.', $val);
+ }
+ }
+}
+
+?>
+ </table>
+ <a id='download-zonefile' data-zonefile="<?=base64_encode($dns_data);?>" download='<?=$_GET['domain'];?>.txt' type='text/csv'>Download</a>
+ <script>
+ var zonefile_dl_link = document.getElementById('download-zonefile');
+ var zonefile = atob(zonefile_dl_link.getAttribute('data-zonefile'));
+ var data = new Blob([zonefile]);
+ var download_zonefile_link = document.getElementById('download-zonefile');
+ download_zonefile_link.href = URL.createObjectURL(data);
+ </script>
+</div>
+<p class="help-block">
+<sup>1</sup> <?=$lang['diagnostics']['cname_from_a'];?><br />
+<sup>2</sup> <?=$lang['diagnostics']['optional'];?>
+</p>
+<?php
+} else {
+ echo "Session invalid";
+ exit();
+}
+?>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/ajax/qitem_details.php b/mailcow/src/mailcow-dockerized/data/web/inc/ajax/qitem_details.php
new file mode 100644
index 0000000..35e599c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/ajax/qitem_details.php
@@ -0,0 +1,206 @@
+<?php
+header("Content-Type: application/json");
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';
+
+function rrmdir($src) {
+ $dir = opendir($src);
+ while(false !== ( $file = readdir($dir)) ) {
+ if (( $file != '.' ) && ( $file != '..' )) {
+ $full = $src . '/' . $file;
+ if ( is_dir($full) ) {
+ rrmdir($full);
+ }
+ else {
+ unlink($full);
+ }
+ }
+ }
+ closedir($dir);
+ rmdir($src);
+}
+
+function addAddresses(&$list, $mail, $headerName) {
+ $addresses = $mail->getAddresses($headerName);
+ foreach ($addresses as $address) {
+ if (filter_var($address['address'], FILTER_VALIDATE_EMAIL)) {
+ $list[] = array('address' => $address['address'], 'type' => $headerName);
+ }
+ }
+}
+
+if (!empty($_GET['hash']) && ctype_alnum($_GET['hash'])) {
+ $mailc = quarantine('hash_details', $_GET['hash']);
+ if ($mailc === false) {
+ echo json_encode(array('error' => 'Message invalid'));
+ exit;
+ }
+ if (strlen($mailc['msg']) > 10485760) {
+ echo json_encode(array('error' => 'Message size exceeds 10 MiB.'));
+ exit;
+ }
+ if (!empty($mailc['msg'])) {
+ // Init message array
+ $data = array();
+ // Init parser
+ $mail_parser = new PhpMimeMailParser\Parser();
+ $html2text = new Html2Text\Html2Text();
+ // Load msg to parser
+ $mail_parser->setText($mailc['msg']);
+ // Get mail recipients
+ {
+ $recipientsList = array();
+ addAddresses($recipientsList, $mail_parser, 'to');
+ addAddresses($recipientsList, $mail_parser, 'cc');
+ addAddresses($recipientsList, $mail_parser, 'bcc');
+ $recipientsList[] = array('address' => $mailc['rcpt'], 'type' => 'smtp');
+ $data['recipients'] = $recipientsList;
+ }
+ // Get from
+ $data['header_from'] = $mail_parser->getHeader('from');
+ $data['env_from'] = $mailc['sender'];
+ // Get rspamd score
+ $data['score'] = $mailc['score'];
+ // Get rspamd action
+ $data['action'] = $mailc['action'];
+ // Get rspamd symbols
+ $data['symbols'] = json_decode($mailc['symbols']);
+ // Get fuzzy hashes
+ $data['fuzzy_hashes'] = json_decode($mailc['fuzzy_hashes']);
+ $data['subject'] = mb_convert_encoding($mail_parser->getHeader('subject'), "UTF-8", "auto");
+ (empty($data['subject'])) ? $data['subject'] = '-' : null;
+ echo json_encode($data);
+ }
+}
+elseif (!empty($_GET['id']) && ctype_alnum($_GET['id'])) {
+ if (!isset($_SESSION['mailcow_cc_role'])) {
+ echo json_encode(array('error' => 'Access denied'));
+ exit();
+ }
+ $tmpdir = '/tmp/' . $_GET['id'] . '/';
+ $mailc = quarantine('details', $_GET['id']);
+ if ($mailc === false) {
+ echo json_encode(array('error' => 'Access denied'));
+ exit;
+ }
+ if (strlen($mailc['msg']) > 10485760) {
+ echo json_encode(array('error' => 'Message size exceeds 10 MiB.'));
+ exit;
+ }
+ if (!empty($mailc['msg'])) {
+ if (isset($_GET['quick_release'])) {
+ $hash = hash('sha256', $mailc['id'] . $mailc['qid']);
+ header('Location: /qhandler/release/' . $hash);
+ exit;
+ }
+ if (isset($_GET['quick_delete'])) {
+ $hash = hash('sha256', $mailc['id'] . $mailc['qid']);
+ header('Location: /qhandler/delete/' . $hash);
+ exit;
+ }
+ // Init message array
+ $data = array();
+ // Init parser
+ $mail_parser = new PhpMimeMailParser\Parser();
+ $html2text = new Html2Text\Html2Text();
+ // Load msg to parser
+ $mail_parser->setText($mailc['msg']);
+
+ // Get mail recipients
+ {
+ $recipientsList = array();
+ addAddresses($recipientsList, $mail_parser, 'to');
+ addAddresses($recipientsList, $mail_parser, 'cc');
+ addAddresses($recipientsList, $mail_parser, 'bcc');
+ $recipientsList[] = array('address' => $mailc['rcpt'], 'type' => 'smtp');
+ $data['recipients'] = $recipientsList;
+ }
+ // Get from
+ $data['header_from'] = $mail_parser->getHeader('from');
+ $data['env_from'] = $mailc['sender'];
+ // Get rspamd score
+ $data['score'] = $mailc['score'];
+ // Get rspamd action
+ $data['action'] = $mailc['action'];
+ // Get rspamd symbols
+ $data['symbols'] = json_decode($mailc['symbols']);
+ // Get fuzzy hashes
+ $data['fuzzy_hashes'] = json_decode($mailc['fuzzy_hashes']);
+ // Get text/plain content
+ $data['text_plain'] = $mail_parser->getMessageBody('text');
+ // Get html content and convert to text
+ $data['text_html'] = $html2text->convert($mail_parser->getMessageBody('html'));
+ if (empty($data['text_plain']) && empty($data['text_html'])) {
+ // Failed to parse content, try raw
+ $text = trim(substr($mailc['msg'], strpos($mailc['msg'], "\r\n\r\n") + 1));
+ // Only return html->text
+ $data['text_plain'] = 'Parser failed, assuming HTML';
+ $data['text_html'] = $html2text->convert($text);
+ }
+ (empty($data['text_plain'])) ? $data['text_plain'] = '-' : null;
+ // Get subject
+ $data['subject'] = $mail_parser->getHeader('subject');
+ $data['subject'] = mb_convert_encoding($mail_parser->getHeader('subject'), "UTF-8", "auto");
+ (empty($data['subject'])) ? $data['subject'] = '-' : null;
+ // Get attachments
+ if (is_dir($tmpdir)) {
+ rrmdir($tmpdir);
+ }
+ mkdir('/tmp/' . $_GET['id']);
+ $mail_parser->saveAttachments($tmpdir, true);
+ $atts = $mail_parser->getAttachments(true);
+ if (count($atts) > 0) {
+ foreach ($atts as $key => $val) {
+ $data['attachments'][$key] = array(
+ // Index
+ // 0 => file name
+ // 1 => mime type
+ // 2 => file size
+ // 3 => vt link by sha256
+ $val->getFilename(),
+ $val->getContentType(),
+ filesize($tmpdir . $val->getFilename()),
+ 'https://www.virustotal.com/file/' . hash_file('SHA256', $tmpdir . $val->getFilename()) . '/analysis/'
+ );
+ }
+ }
+ if (isset($_GET['eml'])) {
+ $dl_filename = filter_var($data['subject'], FILTER_SANITIZE_STRING);
+ $dl_filename = strlen($dl_filename) > 30 ? substr($dl_filename,0,30) : $dl_filename;
+ header('Pragma: public');
+ header('Expires: 0');
+ header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
+ header('Cache-Control: private', false);
+ header('Content-Type: message/rfc822');
+ header('Content-Disposition: attachment; filename="'. $dl_filename . '.eml";');
+ header('Content-Transfer-Encoding: binary');
+ header('Content-Length: ' . strlen($mailc['msg']));
+ echo $mailc['msg'];
+ exit;
+ }
+ if (isset($_GET['att'])) {
+ if ($_SESSION['acl']['quarantine_attachments'] == 0) {
+ exit(json_encode('Forbidden'));
+ }
+ $dl_id = intval($_GET['att']);
+ $dl_filename = filter_var($data['attachments'][$dl_id][0], FILTER_SANITIZE_STRING);
+ $dl_filename_short = strlen($dl_filename) > 20 ? substr($dl_filename, 0, 20) : $dl_filename;
+ $dl_filename_extension = pathinfo($tmpdir . $dl_filename)['extension'];
+ $dl_filename_short = preg_replace('/\.' . $dl_filename_extension . '$/', '', $dl_filename_short);
+ if (!is_dir($tmpdir . $dl_filename) && file_exists($tmpdir . $dl_filename)) {
+ header('Pragma: public');
+ header('Expires: 0');
+ header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
+ header('Cache-Control: private', false);
+ header('Content-Type: ' . $data['attachments'][$dl_id][1]);
+ header('Content-Disposition: attachment; filename="'. $dl_filename_short . '.' . $dl_filename_extension . '";');
+ header('Content-Transfer-Encoding: binary');
+ header('Content-Length: ' . $data['attachments'][$dl_id][2]);
+ readfile($tmpdir . $dl_filename);
+ exit;
+ }
+ }
+ echo json_encode($data);
+ }
+
+}
+?>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/ajax/qr_gen.php b/mailcow/src/mailcow-dockerized/data/web/inc/ajax/qr_gen.php
new file mode 100644
index 0000000..267d65a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/ajax/qr_gen.php
@@ -0,0 +1,10 @@
+<?php
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';
+header('Content-Type: text/plain');
+if (!isset($_SESSION['mailcow_cc_role'])) {
+ exit();
+}
+if (isset($_GET['token']) && ctype_alnum($_GET['token'])) {
+ echo $tfa->getQRCodeImageAsDataUri($_SESSION['mailcow_cc_username'], $_GET['token']);
+}
+?>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/ajax/show_rspamd_global_filters.php b/mailcow/src/mailcow-dockerized/data/web/inc/ajax/show_rspamd_global_filters.php
new file mode 100644
index 0000000..7c7affe
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/ajax/show_rspamd_global_filters.php
@@ -0,0 +1,3 @@
+<?php
+session_start();
+$_SESSION['show_rspamd_global_filters'] = true;
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/ajax/sieve_validation.php b/mailcow/src/mailcow-dockerized/data/web/inc/ajax/sieve_validation.php
new file mode 100644
index 0000000..eb421b4
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/ajax/sieve_validation.php
@@ -0,0 +1,22 @@
+<?php
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';
+header('Content-Type: application/json');
+if (!isset($_SESSION['mailcow_cc_role'])) {
+ exit();
+}
+if (isset($_GET['script'])) {
+ $sieve = new Sieve\SieveParser();
+ try {
+ if (empty($_GET['script'])) {
+ echo json_encode(array('type' => 'danger', 'msg' => $lang['danger']['script_empty']));
+ exit();
+ }
+ $sieve->parse($_GET['script']);
+ }
+ catch (Exception $e) {
+ echo json_encode(array('type' => 'danger', 'msg' => $e->getMessage()));
+ exit();
+ }
+ echo json_encode(array('type' => 'success', 'msg' => $lang['add']['validation_success']));
+}
+?>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/ajax/syncjob_logs.php b/mailcow/src/mailcow-dockerized/data/web/inc/ajax/syncjob_logs.php
new file mode 100644
index 0000000..9c521ae
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/ajax/syncjob_logs.php
@@ -0,0 +1,14 @@
+<?php
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';
+header('Content-Type: text/plain');
+if (!isset($_SESSION['mailcow_cc_role'])) {
+ exit();
+}
+
+if (isset($_GET['id']) && is_numeric($_GET['id'])) {
+ if ($details = mailbox('get', 'syncjob_details', intval($_GET['id']))) {
+ echo (empty($details['log'])) ? '-' : $details['log'];
+ }
+}
+
+?>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/ajax/transport_check.php b/mailcow/src/mailcow-dockerized/data/web/inc/ajax/transport_check.php
new file mode 100644
index 0000000..7921687
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/ajax/transport_check.php
@@ -0,0 +1,143 @@
+<?php
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/vars.inc.php';
+use PHPMailer\PHPMailer\PHPMailer;
+use PHPMailer\PHPMailer\SMTP;
+use PHPMailer\PHPMailer\Exception;
+
+error_reporting(0);
+if (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == "admin") {
+ $transport_id = intval($_GET['transport_id']);
+ $transport_type = $_GET['transport_type'];
+ if (isset($_GET['mail_from']) && filter_var($_GET['mail_from'], FILTER_VALIDATE_EMAIL)) {
+ $mail_from = $_GET['mail_from'];
+ }
+ else {
+ $mail_from = "relay@example.org";
+ }
+ if ($transport_type == 'transport-map') {
+ $transport_details = transport('details', $transport_id);
+ $nexthop = $transport_details['nexthop'];
+ }
+ elseif ($transport_type == 'sender-dependent') {
+ $transport_details = relayhost('details', $transport_id);
+ $nexthop = $transport_details['hostname'];
+ }
+ if (!empty($transport_details)) {
+ // Remove [ and ]
+ $hostname_w_port = preg_replace('/\[|\]/', '', $nexthop);
+ preg_match('/\[.+\](:.+)/', $nexthop, $hostname_port_match);
+ preg_match('/\[\d\.\d\.\d\.\d\](:.+)/', $nexthop, $ipv4_port_match);
+ $has_bracket_and_port = (isset($hostname_port_match[1])) ? true : false;
+ $is_ipv4_and_has_port = (isset($ipv4_port_match[1])) ? true : false;
+ $skip_lookup_mx = strpos($nexthop, '[');
+ // Explode to hostname and port
+ if ($has_bracket_and_port) {
+ $port = substr($hostname_w_port, strrpos($hostname_w_port, ':') + 1);
+ $hostname = preg_replace('/'. preg_quote(':' . $port, '/') . '$/', '', $hostname_w_port);
+ if (filter_var($hostname, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
+ $hostname = '[' . $hostname . ']:';
+ }
+ }
+ else {
+ if ($is_ipv4_and_has_port) {
+ $port = substr($hostname_w_port, strrpos($hostname_w_port, ':') + 1);
+ $hostname = preg_replace('/'. preg_quote(':' . $port, '/') . '$/', '', $hostname_w_port);
+ }
+ if (filter_var($hostname_w_port, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
+ $hostname = $hostname_w_port;
+ $port = null;
+ }
+ elseif (filter_var($hostname_w_port, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
+ $hostname = '[' . $hostname_w_port . ']';
+ $port = null;
+ }
+ else {
+ $hostname = preg_replace('/'. preg_quote(':' . $port, '/') . '$/', '', $hostname_w_port);
+ $port = null;
+ }
+ }
+ // Try to get MX if host is not [host]
+ if ($skip_lookup_mx === false) {
+ getmxrr($hostname, $mx_records, $mx_weight);
+ if (!empty($mx_records)) {
+ for ($i = 0; $i < count($mx_records); $i++) {
+ $mxs[$mx_records[$i]] = $mx_weight[$i];
+ }
+ asort ($mxs);
+ $records = array_keys($mxs);
+ echo 'Using first matched primary MX for "' . $hostname . '": ';
+ $hostname = $records[0];
+ echo $hostname . '<br>';
+ }
+ else {
+ echo 'No MX records for ' . $hostname . ' were found in DNS, skipping and using hostname as next-hop.<br>';
+ }
+ }
+ // Use port 25 if no port was given
+ $port = (empty($port)) ? 25 : $port;
+ $username = $transport_details['username'];
+ $password = $transport_details['password'];
+
+ $mail = new PHPMailer;
+ $mail->Timeout = 15;
+ $mail->SMTPOptions = array(
+ 'ssl' => array(
+ 'verify_peer' => false,
+ 'verify_peer_name' => false,
+ 'allow_self_signed' => true
+ )
+ );
+ $mail->SMTPDebug = 3;
+ // smtp: and smtp_enforced_tls: do not support wrapped tls, todo?
+ // change postfix map to detect wrapped tls or add a checkbox to toggle wrapped tls
+ // if ($port == 465) {
+ // $mail->SMTPSecure = "ssl";
+ // }
+ $mail->Debugoutput = function($str, $level) {
+ foreach(preg_split("/((\r?\n)|(\r\n?)|\n)/", $str) as $line){
+ if (empty($line)) { continue; }
+ if (preg_match("/SERVER \-\> CLIENT: 2\d\d.+/i", $line)) {
+ echo '<span style="color:darkgreen;font-weight:bold">' . htmlspecialchars($line) . '</span><br>';
+ }
+ elseif (preg_match("/SERVER \-\> CLIENT: 3\d\d.+/i", $line)) {
+ echo '<span style="color:lightgreen;font-weight:bold">' . htmlspecialchars($line) . '</span><br>';
+ }
+ elseif (preg_match("/SERVER \-\> CLIENT: 4\d\d.+/i", $line)) {
+ echo '<span style="color:yellow;font-weight:bold">' . htmlspecialchars($line) . '</span><br>';
+ }
+ elseif (preg_match("/SERVER \-\> CLIENT: 5\d\d.+/i", $line)) {
+ echo '<span style="color:red;font-weight:bold">' . htmlspecialchars($line) . '</span><br>';
+ }
+ elseif (preg_match("/CLIENT \-\> SERVER:.+/i", $line)) {
+ echo '<span style="color:#999;font-weight:bold">' . htmlspecialchars($line) . '</span><br>';
+ }
+ elseif (preg_match("/^(?!SERVER|CLIENT|Connection:|\)).+$/i", $line)) {
+ echo '<span> ↪ ' . htmlspecialchars($line) . '</span><br>';
+ }
+ else {
+ echo htmlspecialchars($line) . '<br>';
+ }
+ }
+ };
+ $mail->isSMTP();
+ $mail->Host = $hostname;
+ if (!empty($username)) {
+ $mail->SMTPAuth = true;
+ $mail->Username = $username;
+ $mail->Password = $password;
+ }
+ $mail->Port = $port;
+ $mail->setFrom($mail_from, 'Mailer');
+ $mail->Subject = 'A subject for a SMTP test';
+ $mail->addAddress($RELAY_TO, 'Joe Null');
+ $mail->Body = 'This is our test body';
+ $mail->send();
+ }
+ else {
+ echo "Unknown transport.";
+ }
+}
+else {
+ echo "Permission denied.";
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/footer.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/footer.inc.php
new file mode 100644
index 0000000..8738cc6
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/footer.inc.php
@@ -0,0 +1,308 @@
+<?php
+require_once $_SERVER['DOCUMENT_ROOT'] . '/modals/footer.php';
+logger();
+
+$hash = $js_minifier->getDataHash();
+$JSPath = '/tmp/' . $hash . '.js';
+if(!file_exists($JSPath)) {
+ $js_minifier->minify($JSPath);
+ cleanupJS($hash);
+}
+?>
+<script src="/cache/<?=basename($JSPath)?>"></script>
+<script>
+<?php
+$lang_footer = json_encode($lang['footer']);
+$lang_acl = json_encode($lang['acl']);
+$lang_tfa = json_encode($lang['tfa']);
+$lang_fido2 = json_encode($lang['fido2']);
+echo "var lang_footer = ". $lang_footer . ";\n";
+echo "var lang_acl = ". $lang_acl . ";\n";
+echo "var lang_tfa = ". $lang_tfa . ";\n";
+echo "var lang_fido2 = ". $lang_fido2 . ";\n";
+echo "var docker_timeout = ". $DOCKER_TIMEOUT * 1000 . ";\n";
+?>
+$(window).scroll(function() {
+ sessionStorage.scrollTop = $(this).scrollTop();
+});
+// Select language and reopen active URL without POST
+function setLang(sel) {
+ $.post( "<?= $_SERVER['REQUEST_URI']; ?>", {lang: sel} );
+ window.location.href = window.location.pathname + window.location.search;
+}
+// FIDO2 functions
+function arrayBufferToBase64(buffer) {
+ let binary = '';
+ let bytes = new Uint8Array(buffer);
+ let len = bytes.byteLength;
+ for (let i = 0; i < len; i++) {
+ binary += String.fromCharCode( bytes[ i ] );
+ }
+ return window.btoa(binary);
+}
+function recursiveBase64StrToArrayBuffer(obj) {
+ let prefix = '=?BINARY?B?';
+ let suffix = '?=';
+ if (typeof obj === 'object') {
+ for (let key in obj) {
+ if (typeof obj[key] === 'string') {
+ let str = obj[key];
+ if (str.substring(0, prefix.length) === prefix && str.substring(str.length - suffix.length) === suffix) {
+ str = str.substring(prefix.length, str.length - suffix.length);
+ let binary_string = window.atob(str);
+ let len = binary_string.length;
+ let bytes = new Uint8Array(len);
+ for (let i = 0; i < len; i++) {
+ bytes[i] = binary_string.charCodeAt(i);
+ }
+ obj[key] = bytes.buffer;
+ }
+ } else {
+ recursiveBase64StrToArrayBuffer(obj[key]);
+ }
+ }
+ }
+}
+$(window).load(function() {
+ $(".overlay").hide();
+});
+$(document).ready(function() {
+ $(document).on('shown.bs.modal', function(e) {
+ modal_id = $(e.relatedTarget).data('target');
+ $(modal_id).attr("aria-hidden","false");
+ });
+ // TFA, CSRF, Alerts in footer.inc.php
+ // Other general functions in mailcow.js
+ <?php
+ $alertbox_log_parser = alertbox_log_parser($_SESSION);
+ if (is_array($alertbox_log_parser)) {
+ foreach($alertbox_log_parser as $log) {
+ $alerts[$log['type']][] = $log['msg'];
+ }
+ foreach($alerts as $alert_type => $alert_msg) {
+ ?>
+ mailcow_alert_box(<?=json_encode(implode('<hr class="alert-hr">', $alert_msg));?>, <?=$alert_type;?>);
+ <?php
+ }
+ unset($_SESSION['return']);
+ }
+ ?>
+ // Confirm TFA modal
+ <?php if (isset($_SESSION['pending_tfa_method'])):?>
+ $('#ConfirmTFAModal').modal({
+ backdrop: 'static',
+ keyboard: false
+ });
+ $('#u2f_status_auth').html('<p><span class="glyphicon glyphicon-refresh glyphicon-spin"></span> ' + lang_tfa.init_u2f + '</p>');
+ $('#ConfirmTFAModal').on('shown.bs.modal', function(){
+ $(this).find('input[name=token]').focus();
+ // If U2F
+ if(document.getElementById("u2f_auth_data") !== null) {
+ $.ajax({
+ type: "GET",
+ cache: false,
+ dataType: 'script',
+ url: "/api/v1/get/u2f-authentication/<?= (isset($_SESSION['pending_mailcow_cc_username'])) ? rawurlencode($_SESSION['pending_mailcow_cc_username']) : null; ?>",
+ complete: function(data){
+ $('#u2f_status_auth').html(lang_tfa.waiting_usb_auth);
+ data;
+ setTimeout(function() {
+ console.log("Ready to authenticate");
+ u2f.sign(appId, challenge, registeredKeys, function(data) {
+ var form = document.getElementById('u2f_auth_form');
+ var auth = document.getElementById('u2f_auth_data');
+ console.log("Authenticate callback", data);
+ auth.value = JSON.stringify(data);
+ form.submit();
+ });
+ }, 1000);
+ }
+ });
+ }
+ });
+ $('#ConfirmTFAModal').on('hidden.bs.modal', function(){
+ $.ajax({
+ type: "GET",
+ cache: false,
+ dataType: 'script',
+ url: '/inc/ajax/destroy_tfa_auth.php',
+ complete: function(data){
+ window.location = window.location.href.split("#")[0];
+ }
+ });
+ });
+ <?php endif; ?>
+ // Validate FIDO2
+ $("#fido2-login").click(function(){
+ $('#fido2-alerts').html();
+ if (!window.fetch || !navigator.credentials || !navigator.credentials.create) {
+ window.alert('Browser not supported.');
+ return;
+ }
+ window.fetch("/api/v1/get/fido2-get-args", {method:'GET',cache:'no-cache'}).then(function(response) {
+ return response.json();
+ }).then(function(json) {
+ if (json.success === false) {
+ throw new Error();
+ }
+ recursiveBase64StrToArrayBuffer(json);
+ return json;
+ }).then(function(getCredentialArgs) {
+ return navigator.credentials.get(getCredentialArgs);
+ }).then(function(cred) {
+ return {
+ id: cred.rawId ? arrayBufferToBase64(cred.rawId) : null,
+ clientDataJSON: cred.response.clientDataJSON ? arrayBufferToBase64(cred.response.clientDataJSON) : null,
+ authenticatorData: cred.response.authenticatorData ? arrayBufferToBase64(cred.response.authenticatorData) : null,
+ signature : cred.response.signature ? arrayBufferToBase64(cred.response.signature) : null
+ };
+ }).then(JSON.stringify).then(function(AuthenticatorAttestationResponse) {
+ return window.fetch("/api/v1/process/fido2-args", {method:'POST', body: AuthenticatorAttestationResponse, cache:'no-cache'});
+ }).then(function(response) {
+ return response.json();
+ }).then(function(json) {
+ if (json.success) {
+ window.location = window.location.href.split("#")[0];
+ } else {
+ throw new Error();
+ }
+ }).catch(function(err) {
+ if (typeof err.message === 'undefined') {
+ mailcow_alert_box(lang_fido2.fido2_validation_failed, "danger");
+ } else {
+ mailcow_alert_box(lang_fido2.fido2_validation_failed + ":<br><i>" + err.message + "</i>", "danger");
+ }
+ });
+ });
+ // Set TFA/FIDO2
+ $("#register-fido2").click(function(){
+ $("option:selected").prop("selected", false);
+ if (!window.fetch || !navigator.credentials || !navigator.credentials.create) {
+ window.alert('Browser not supported.');
+ return;
+ }
+ window.fetch("/api/v1/get/fido2-registration/<?= (isset($_SESSION['mailcow_cc_username'])) ? rawurlencode($_SESSION['mailcow_cc_username']) : null; ?>", {method:'GET',cache:'no-cache'}).then(function(response) {
+ return response.json();
+ }).then(function(json) {
+ if (json.success === false) {
+ throw new Error(json.msg);
+ }
+ recursiveBase64StrToArrayBuffer(json);
+ return json;
+ }).then(function(createCredentialArgs) {
+ console.log(createCredentialArgs);
+ return navigator.credentials.create(createCredentialArgs);
+ }).then(function(cred) {
+ return {
+ clientDataJSON: cred.response.clientDataJSON ? arrayBufferToBase64(cred.response.clientDataJSON) : null,
+ attestationObject: cred.response.attestationObject ? arrayBufferToBase64(cred.response.attestationObject) : null
+ };
+ }).then(JSON.stringify).then(function(AuthenticatorAttestationResponse) {
+ return window.fetch("/api/v1/add/fido2-registration", {method:'POST', body: AuthenticatorAttestationResponse, cache:'no-cache'});
+ }).then(function(response) {
+ return response.json();
+ }).then(function(json) {
+ if (json.success) {
+ window.location = window.location.href.split("#")[0];
+ } else {
+ throw new Error(json.msg);
+ }
+ }).catch(function(err) {
+ $('#fido2-alerts').html('<span class="text-danger"><b>' + err.message + '</b></span>');
+ });
+ });
+ $('#selectTFA').change(function () {
+ if ($(this).val() == "yubi_otp") {
+ $('#YubiOTPModal').modal('show');
+ $("option:selected").prop("selected", false);
+ }
+ if ($(this).val() == "totp") {
+ $('#TOTPModal').modal('show');
+ request_token = $('#tfa-qr-img').data('totp-secret');
+ $.ajax({
+ url: '/inc/ajax/qr_gen.php',
+ data: {
+ token: request_token,
+ },
+ }).done(function (result) {
+ $("#tfa-qr-img").attr("src", result);
+ });
+ $("option:selected").prop("selected", false);
+ }
+ if ($(this).val() == "u2f") {
+ $('#U2FModal').modal('show');
+ $("option:selected").prop("selected", false);
+ $("#start_u2f_register").click(function(){
+ $('#u2f_return_code').html('');
+ $('#u2f_return_code').hide();
+ $('#u2f_status_reg').html('<p><span class="glyphicon glyphicon-refresh glyphicon-spin"></span> ' + lang_tfa.init_u2f + '</p>');
+ $.ajax({
+ type: "GET",
+ cache: false,
+ dataType: 'script',
+ url: "/api/v1/get/u2f-registration/<?= (isset($_SESSION['mailcow_cc_username'])) ? rawurlencode($_SESSION['mailcow_cc_username']) : null; ?>",
+ complete: function(data){
+ data;
+ setTimeout(function() {
+ console.log("Ready to register");
+ $('#u2f_status_reg').html(lang_tfa.waiting_usb_register);
+ u2f.register(appId, registerRequests, registeredKeys, function(deviceResponse) {
+ var form = document.getElementById('u2f_reg_form');
+ var reg = document.getElementById('u2f_register_data');
+ console.log("Register callback: ", data);
+ if (deviceResponse.errorCode && deviceResponse.errorCode != 0) {
+ var u2f_return_code = document.getElementById('u2f_return_code');
+ u2f_return_code.style.display = u2f_return_code.style.display === 'none' ? '' : null;
+ if (deviceResponse.errorCode == "4") {
+ deviceResponse.errorCode = "4 - The presented device is not eligible for this request. For a registration request this may mean that the token is already registered, and for a sign request it may mean that the token does not know the presented key handle";
+ }
+ else if (deviceResponse.errorCode == "5") {
+ deviceResponse.errorCode = "5 - Timeout reached before request could be satisfied.";
+ }
+ u2f_return_code.innerHTML = lang_tfa.error_code + ': ' + deviceResponse.errorCode + ' ' + lang_tfa.reload_retry;
+ return;
+ }
+ reg.value = JSON.stringify(deviceResponse);
+ form.submit();
+ });
+ }, 1000);
+ }
+ });
+ });
+ }
+ if ($(this).val() == "none") {
+ $('#DisableTFAModal').modal('show');
+ $("option:selected").prop("selected", false);
+ }
+ });
+
+ // Reload after session timeout
+ var session_lifetime = <?=((int)$SESSION_LIFETIME * 1000) + 15000;?>;
+ <?php
+ if (isset($_SESSION['mailcow_cc_username'])):
+ ?>
+ setTimeout(function() {
+ location.reload();
+ }, session_lifetime);
+ <?php
+ endif;
+ ?>
+
+ // CSRF
+ $('<input type="hidden" value="<?= $_SESSION['CSRF']['TOKEN']; ?>">').attr('name', 'csrf_token').appendTo('form');
+ if (sessionStorage.scrollTop != "undefined") {
+ $(window).scrollTop(sessionStorage.scrollTop);
+ }
+});
+</script>
+
+ <div class="container footer">
+ <?php if (!empty($UI_TEXTS['ui_footer'])) { ?>
+ <hr><span class="rot-enc"><?=str_rot13($UI_TEXTS['ui_footer']);?></span>
+ <?php } ?>
+ </div>
+</body>
+</html>
+<?php
+$stmt = null;
+$pdo = null;
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/functions.acl.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/functions.acl.inc.php
new file mode 100644
index 0000000..ffce9f4
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/functions.acl.inc.php
@@ -0,0 +1,226 @@
+<?php
+function acl($_action, $_scope = null, $_data = null) {
+ global $pdo;
+ global $lang;
+ $_data_log = $_data;
+ switch ($_action) {
+ case 'edit':
+ switch ($_scope) {
+ case 'user':
+ if (!is_array($_data['username'])) {
+ $usernames = array();
+ $usernames[] = $_data['username'];
+ }
+ else {
+ $usernames = $_data['username'];
+ }
+ foreach ($usernames as $username) {
+ // Cast to array for single selections
+ $acls = (array)$_data['user_acl'];
+ // Create associative array from index array
+ // All set items are given 1 as value
+ foreach ($acls as $acl_key => $acl_val) {
+ $acl_post[$acl_val] = 1;
+ }
+ // Users cannot change their own ACL
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)
+ || ($_SESSION['mailcow_cc_role'] != 'admin' && $_SESSION['mailcow_cc_role'] != 'domainadmin')) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ // Read all available acl options by calling acl(get)
+ // Set all available acl options we cannot find in the post data to 0, else 1
+ $is_now = acl('get', 'user', $username);
+ if (!empty($is_now)) {
+ foreach ($is_now as $acl_now_name => $acl_now_val) {
+ $set_acls[$acl_now_name] = (isset($acl_post[$acl_now_name])) ? 1 : 0;
+ }
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'Cannot determine current ACL'
+ );
+ continue;
+ }
+ foreach ($set_acls as $set_acl_key => $set_acl_val) {
+ $stmt = $pdo->prepare("UPDATE `user_acl` SET " . $set_acl_key . " = " . intval($set_acl_val) . "
+ WHERE `username` = :username");
+ $stmt->execute(array(
+ ':username' => $username,
+ ));
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => array('acl_saved', $username)
+ );
+ }
+ break;
+ case 'domainadmin':
+ if ($_SESSION['mailcow_cc_role'] != 'admin') {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ if (!is_array($_data['username'])) {
+ $usernames = array();
+ $usernames[] = $_data['username'];
+ }
+ else {
+ $usernames = $_data['username'];
+ }
+ foreach ($usernames as $username) {
+ // Cast to array for single selections
+ $acls = (array)$_data['da_acl'];
+ // Create associative array from index array
+ // All set items are given 1 as value
+ foreach ($acls as $acl_key => $acl_val) {
+ $acl_post[$acl_val] = 1;
+ }
+ // Users cannot change their own ACL
+ if ($_SESSION['mailcow_cc_role'] != 'admin') {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ // Read all available acl options by calling acl(get)
+ // Set all available acl options we cannot find in the post data to 0, else 1
+ $is_now = acl('get', 'domainadmin', $username);
+ if (!empty($is_now)) {
+ foreach ($is_now as $acl_now_name => $acl_now_val) {
+ $set_acls[$acl_now_name] = (isset($acl_post[$acl_now_name])) ? 1 : 0;
+ }
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'Cannot determine current ACL'
+ );
+ continue;
+ }
+ foreach ($set_acls as $set_acl_key => $set_acl_val) {
+ $stmt = $pdo->prepare("UPDATE `da_acl` SET " . $set_acl_key . " = " . intval($set_acl_val) . "
+ WHERE `username` = :username");
+ $stmt->execute(array(
+ ':username' => $username,
+ ));
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => array('acl_saved', $username)
+ );
+ }
+ break;
+ }
+ break;
+ case 'get':
+ switch ($_scope) {
+ case 'user':
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT * FROM `user_acl` WHERE `username` = :username");
+ $stmt->execute(array(':username' => $_data));
+ $data = $stmt->fetch(PDO::FETCH_ASSOC);
+ if ($_SESSION['mailcow_cc_role'] == 'domainadmin') {
+ // Domain admins cannot see, add or remove user ACLs they don't have access to by themselves
+ // Editing a user will use acl("get", "user") to determine granted ACLs and therefore block unallowed access escalation via form editing
+ $self_da_acl = acl('get', 'domainadmin', $_SESSION['mailcow_cc_username']);
+ foreach ($self_da_acl as $self_da_acl_key => $self_da_acl_val) {
+ if ($self_da_acl_val == 0) {
+ unset($data[$self_da_acl_key]);
+ }
+ }
+ }
+ if (!empty($data)) {
+ unset($data['username']);
+ return $data;
+ }
+ else {
+ return false;
+ }
+ break;
+ case 'domainadmin':
+ if ($_SESSION['mailcow_cc_role'] != 'admin' && $_SESSION['mailcow_cc_role'] != 'domainadmin') {
+ return false;
+ }
+ if ($_SESSION['mailcow_cc_role'] == 'domainadmin' && $_SESSION['mailcow_cc_username'] != $_data) {
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT * FROM `da_acl` WHERE `username` = :username");
+ $stmt->execute(array(':username' => $_data));
+ $data = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (!empty($data)) {
+ unset($data['username']);
+ return $data;
+ }
+ else {
+ return false;
+ }
+ break;
+ }
+ break;
+ case 'to_session':
+ if (!isset($_SESSION['mailcow_cc_role'])) {
+ return false;
+ }
+ unset($_SESSION['acl']);
+ $username = strtolower(trim($_SESSION['mailcow_cc_username']));
+ // Admins get access to all modules
+ if ($_SESSION['mailcow_cc_role'] == 'admin' ||
+ (isset($_SESSION["dual-login"]["role"]) && $_SESSION["dual-login"]["role"] == 'admin')) {
+ $stmt = $pdo->query("SHOW COLUMNS FROM `user_acl` WHERE `Field` != 'username';");
+ $acl_all = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while ($row = array_shift($acl_all)) {
+ $acl['acl'][$row['Field']] = 1;
+ }
+ $stmt = $pdo->query("SHOW COLUMNS FROM `da_acl` WHERE `Field` != 'username';");
+ $acl_all = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while ($row = array_shift($acl_all)) {
+ $acl['acl'][$row['Field']] = 1;
+ }
+ }
+ elseif ($_SESSION['mailcow_cc_role'] == 'domainadmin' ||
+ (isset($_SESSION["dual-login"]["role"]) && $_SESSION["dual-login"]["role"] == 'domainadmin')) {
+ // Read all exting user_acl modules and set to 1
+ $stmt = $pdo->query("SHOW COLUMNS FROM `user_acl` WHERE `Field` != 'username';");
+ $acl_all = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while ($row = array_shift($acl_all)) {
+ $acl['acl'][$row['Field']] = 1;
+ }
+ // Read da_acl rules for current user, OVERWRITE overlapping modules
+ // This prevents access to a users sync jobs, when a domain admins was not given access to sync jobs
+ $stmt = $pdo->prepare("SELECT * FROM `da_acl` WHERE `username` = :username");
+ $stmt->execute(array(':username' => (isset($_SESSION["dual-login"]["username"])) ? $_SESSION["dual-login"]["username"] : $username));
+ $acl_user = $stmt->fetch(PDO::FETCH_ASSOC);
+ foreach ($acl_user as $acl_user_key => $acl_user_val) {
+ $acl['acl'][$acl_user_key] = $acl_user_val;
+ }
+ unset($acl['acl']['username']);
+ }
+ elseif ($_SESSION['mailcow_cc_role'] == 'user') {
+ $stmt = $pdo->prepare("SELECT * FROM `user_acl` WHERE `username` = :username");
+ $stmt->execute(array(':username' => $username));
+ $acl['acl'] = $stmt->fetch(PDO::FETCH_ASSOC);
+ unset($acl['acl']['username']);
+ }
+ if (!empty($acl)) {
+ $_SESSION = array_merge($_SESSION, $acl);
+ }
+ break;
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/functions.address_rewriting.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/functions.address_rewriting.inc.php
new file mode 100644
index 0000000..51cdd73
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/functions.address_rewriting.inc.php
@@ -0,0 +1,430 @@
+<?php
+function bcc($_action, $_data = null, $attr = null) {
+ global $pdo;
+ global $lang;
+ if ($_SESSION['mailcow_cc_role'] != "admin" && $_SESSION['mailcow_cc_role'] != "domainadmin") {
+ return false;
+ }
+ switch ($_action) {
+ case 'add':
+ if (!isset($_SESSION['acl']['bcc_maps']) || $_SESSION['acl']['bcc_maps'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $local_dest = strtolower(trim($_data['local_dest']));
+ $bcc_dest = $_data['bcc_dest'];
+ $active = intval($_data['active']);
+ $type = $_data['type'];
+ if ($type != 'sender' && $type != 'rcpt') {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => 'invalid_bcc_map_type'
+ );
+ return false;
+ }
+ if (empty($bcc_dest)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => 'bcc_empty'
+ );
+ return false;
+ }
+ if (is_valid_domain_name($local_dest)) {
+ if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $local_dest)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $domain = idn_to_ascii($local_dest, 0, INTL_IDNA_VARIANT_UTS46);
+ $local_dest_sane = '@' . idn_to_ascii($local_dest, 0, INTL_IDNA_VARIANT_UTS46);
+ }
+ elseif (filter_var($local_dest, FILTER_VALIDATE_EMAIL)) {
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $local_dest)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $domain = mailbox('get', 'mailbox_details', $local_dest)['domain'];
+ if (empty($domain)) {
+ return false;
+ }
+ $local_dest_sane = $local_dest;
+ }
+ else {
+ return false;
+ }
+ if (!filter_var($bcc_dest, FILTER_VALIDATE_EMAIL)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => array('bcc_must_be_email', htmlspecialchars($bcc_dest))
+ );
+ return false;
+ }
+
+ $stmt = $pdo->prepare("SELECT `id` FROM `bcc_maps`
+ WHERE `local_dest` = :local_dest AND `type` = :type");
+ $stmt->execute(array(':local_dest' => $local_dest_sane, ':type' => $type));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+
+ if ($num_results != 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => array('bcc_exists', htmlspecialchars($local_dest_sane), $type)
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("INSERT INTO `bcc_maps` (`local_dest`, `bcc_dest`, `domain`, `active`, `type`) VALUES
+ (:local_dest, :bcc_dest, :domain, :active, :type)");
+ $stmt->execute(array(
+ ':local_dest' => $local_dest_sane,
+ ':bcc_dest' => $bcc_dest,
+ ':domain' => $domain,
+ ':active' => $active,
+ ':type' => $type
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => 'bcc_saved'
+ );
+ break;
+ case 'edit':
+ if (!isset($_SESSION['acl']['bcc_maps']) || $_SESSION['acl']['bcc_maps'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $ids = (array)$_data['id'];
+ foreach ($ids as $id) {
+ $is_now = bcc('details', $id);
+ if (!empty($is_now)) {
+ $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];
+ $bcc_dest = (!empty($_data['bcc_dest'])) ? $_data['bcc_dest'] : $is_now['bcc_dest'];
+ $local_dest = $is_now['local_dest'];
+ $type = (!empty($_data['type'])) ? $_data['type'] : $is_now['type'];
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $active = intval($_data['active']);
+ if (!filter_var($bcc_dest, FILTER_VALIDATE_EMAIL)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => array('bcc_must_be_email', $bcc_dest)
+ );
+ continue;
+ }
+ if (empty($bcc_dest)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => array('bcc_must_be_email', $bcc_dest)
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("SELECT `id` FROM `bcc_maps`
+ WHERE `local_dest` = :local_dest AND `type` = :type");
+ $stmt->execute(array(':local_dest' => $local_dest, ':type' => $type));
+ $id_now = $stmt->fetch(PDO::FETCH_ASSOC)['id'];
+
+ if (isset($id_now) && $id_now != $id) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => array('bcc_exists', htmlspecialchars($local_dest), $type)
+ );
+ continue;
+ }
+
+ $stmt = $pdo->prepare("UPDATE `bcc_maps` SET `bcc_dest` = :bcc_dest, `active` = :active, `type` = :type WHERE `id`= :id");
+ $stmt->execute(array(
+ ':bcc_dest' => $bcc_dest,
+ ':active' => $active,
+ ':type' => $type,
+ ':id' => $id
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => array('bcc_edited', $bcc_dest)
+ );
+ }
+ break;
+ case 'details':
+ $bccdata = array();
+ $id = intval($_data);
+
+ $stmt = $pdo->prepare("SELECT `id`,
+ `local_dest`,
+ `bcc_dest`,
+ `active`,
+ `type`,
+ `created`,
+ `domain`,
+ `modified` FROM `bcc_maps`
+ WHERE `id` = :id");
+ $stmt->execute(array(':id' => $id));
+ $bccdata = $stmt->fetch(PDO::FETCH_ASSOC);
+
+ if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $bccdata['domain'])) {
+ $bccdata = null;
+ return false;
+ }
+ return $bccdata;
+ break;
+ case 'get':
+ $bccdata = array();
+ $all_items = array();
+ $id = intval($_data);
+
+ $stmt = $pdo->query("SELECT `id`, `domain` FROM `bcc_maps`");
+ $all_items = $stmt->fetchAll(PDO::FETCH_ASSOC);
+
+ foreach ($all_items as $i) {
+ if (hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $i['domain'])) {
+ $bccdata[] = $i['id'];
+ }
+ }
+ $all_items = null;
+ return $bccdata;
+ break;
+ case 'delete':
+ if (!isset($_SESSION['acl']['bcc_maps']) || $_SESSION['acl']['bcc_maps'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $ids = (array)$_data['id'];
+ foreach ($ids as $id) {
+ if (!is_numeric($id)) {
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT `domain` FROM `bcc_maps` WHERE id = :id");
+ $stmt->execute(array(':id' => $id));
+ $domain = $stmt->fetch(PDO::FETCH_ASSOC)['domain'];
+ if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("DELETE FROM `bcc_maps` WHERE `id`= :id");
+ $stmt->execute(array(':id' => $id));
+
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => array('bcc_deleted', $id)
+ );
+ }
+ break;
+ }
+}
+
+function recipient_map($_action, $_data = null, $attr = null) {
+ global $pdo;
+ global $lang;
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ return false;
+ }
+ switch ($_action) {
+ case 'add':
+ $old_dest = strtolower(trim($_data['recipient_map_old']));
+ if (substr($old_dest, 0, 1) == '@') {
+ $old_dest = substr($old_dest, 1);
+ }
+ $new_dest = strtolower(trim($_data['recipient_map_new']));
+ $active = intval($_data['active']);
+ if (is_valid_domain_name($old_dest)) {
+ $old_dest_sane = '@' . idn_to_ascii($old_dest, 0, INTL_IDNA_VARIANT_UTS46);
+ }
+ elseif (filter_var($old_dest, FILTER_VALIDATE_EMAIL)) {
+ $old_dest_sane = $old_dest;
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => array('invalid_recipient_map_old', htmlspecialchars($old_dest))
+ );
+ return false;
+ }
+ if (!filter_var($new_dest, FILTER_VALIDATE_EMAIL)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => array('invalid_recipient_map_new', htmlspecialchars($new_dest))
+ );
+ return false;
+ }
+ $rmaps = recipient_map('get');
+ foreach ($rmaps as $rmap) {
+ if (recipient_map('details', $rmap)['recipient_map_old'] == $old_dest_sane) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => array('recipient_map_entry_exists', htmlspecialchars($old_dest_sane))
+ );
+ return false;
+ }
+ }
+ $stmt = $pdo->prepare("INSERT INTO `recipient_maps` (`old_dest`, `new_dest`, `active`) VALUES
+ (:old_dest, :new_dest, :active)");
+ $stmt->execute(array(
+ ':old_dest' => $old_dest_sane,
+ ':new_dest' => $new_dest,
+ ':active' => $active
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => array('recipient_map_entry_saved', htmlspecialchars($old_dest_sane))
+ );
+ break;
+ case 'edit':
+ $ids = (array)$_data['id'];
+ foreach ($ids as $id) {
+ $is_now = recipient_map('details', $id);
+ if (!empty($is_now)) {
+ $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];
+ $new_dest = (!empty($_data['recipient_map_new'])) ? $_data['recipient_map_new'] : $is_now['recipient_map_new'];
+ $old_dest = (!empty($_data['recipient_map_old'])) ? $_data['recipient_map_old'] : $is_now['recipient_map_old'];
+ if (substr($old_dest, 0, 1) == '@') {
+ $old_dest = substr($old_dest, 1);
+ }
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ if (is_valid_domain_name($old_dest)) {
+ $old_dest_sane = '@' . idn_to_ascii($old_dest, 0, INTL_IDNA_VARIANT_UTS46);
+ }
+ elseif (filter_var($old_dest, FILTER_VALIDATE_EMAIL)) {
+ $old_dest_sane = $old_dest;
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => array('invalid_recipient_map_old', htmlspecialchars($old_dest))
+ );
+ continue;
+ }
+ if (!filter_var($new_dest, FILTER_VALIDATE_EMAIL)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => array('invalid_recipient_map_new', htmlspecialchars($new_dest))
+ );
+ continue;
+ }
+ $rmaps = recipient_map('get');
+ foreach ($rmaps as $rmap) {
+ if ($rmap == $id) { continue; }
+ if (recipient_map('details', $rmap)['recipient_map_old'] == $old_dest_sane) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => array('recipient_map_entry_exists', htmlspecialchars($old_dest_sane))
+ );
+ return false;
+ }
+ }
+ $stmt = $pdo->prepare("UPDATE `recipient_maps` SET
+ `old_dest` = :old_dest,
+ `new_dest` = :new_dest,
+ `active` = :active
+ WHERE `id`= :id");
+ $stmt->execute(array(
+ ':old_dest' => $old_dest_sane,
+ ':new_dest' => $new_dest,
+ ':active' => $active,
+ ':id' => $id
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => array('recipient_map_entry_saved', htmlspecialchars($old_dest_sane))
+ );
+ }
+ break;
+ case 'details':
+ $mapdata = array();
+ $id = intval($_data);
+
+ $stmt = $pdo->prepare("SELECT `id`,
+ `old_dest` AS `recipient_map_old`,
+ `new_dest` AS `recipient_map_new`,
+ `active`,
+ `created`,
+ `modified` FROM `recipient_maps`
+ WHERE `id` = :id");
+ $stmt->execute(array(':id' => $id));
+ $mapdata = $stmt->fetch(PDO::FETCH_ASSOC);
+
+ return $mapdata;
+ break;
+ case 'get':
+ $mapdata = array();
+ $all_items = array();
+ $id = intval($_data);
+
+ $stmt = $pdo->query("SELECT `id` FROM `recipient_maps`");
+ $all_items = $stmt->fetchAll(PDO::FETCH_ASSOC);
+
+ foreach ($all_items as $i) {
+ $mapdata[] = $i['id'];
+ }
+ $all_items = null;
+ return $mapdata;
+ break;
+ case 'delete':
+ $ids = (array)$_data['id'];
+ foreach ($ids as $id) {
+ if (!is_numeric($id)) {
+ return false;
+ }
+ $stmt = $pdo->prepare("DELETE FROM `recipient_maps` WHERE `id`= :id");
+ $stmt->execute(array(':id' => $id));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => array('recipient_map_entry_deleted', htmlspecialchars($id))
+ );
+ }
+ break;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/functions.admin.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/functions.admin.inc.php
new file mode 100644
index 0000000..bb0400e
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/functions.admin.inc.php
@@ -0,0 +1,282 @@
+<?php
+function admin($_action, $_data = null) {
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ global $pdo;
+ global $lang;
+ $_data_log = $_data;
+ !isset($_data_log['password']) ?: $_data_log['password'] = '*';
+ !isset($_data_log['password2']) ?: $_data_log['password2'] = '*';
+ switch ($_action) {
+ case 'add':
+ $username = strtolower(trim($_data['username']));
+ $password = $_data['password'];
+ $password2 = $_data['password2'];
+ $active = intval($_data['active']);
+ if (!ctype_alnum(str_replace(array('_', '.', '-'), '', $username)) || empty ($username) || $username == 'API') {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('username_invalid', $username)
+ );
+ return false;
+ }
+
+ $stmt = $pdo->prepare("SELECT `username` FROM `admin`
+ WHERE `username` = :username");
+ $stmt->execute(array(':username' => $username));
+ $num_results[] = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+
+ $stmt = $pdo->prepare("SELECT `username` FROM `domain_admins`
+ WHERE `username` = :username");
+ $stmt->execute(array(':username' => $username));
+ $num_results[] = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+
+ foreach ($num_results as $num_results_each) {
+ if ($num_results_each != 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('object_exists', htmlspecialchars($username))
+ );
+ return false;
+ }
+ }
+ if (!empty($password) && !empty($password2)) {
+ if (!preg_match('/' . $GLOBALS['PASSWD_REGEP'] . '/', $password)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'password_complexity'
+ );
+ return false;
+ }
+ if ($password != $password2) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'password_mismatch'
+ );
+ return false;
+ }
+ $password_hashed = hash_password($password);
+ $stmt = $pdo->prepare("INSERT INTO `admin` (`username`, `password`, `superadmin`, `active`)
+ VALUES (:username, :password_hashed, '1', :active)");
+ $stmt->execute(array(
+ ':username' => $username,
+ ':password_hashed' => $password_hashed,
+ ':active' => $active
+ ));
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'password_empty'
+ );
+ return false;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('admin_added', htmlspecialchars($username))
+ );
+ break;
+ case 'edit':
+ if (!is_array($_data['username'])) {
+ $usernames = array();
+ $usernames[] = $_data['username'];
+ }
+ else {
+ $usernames = $_data['username'];
+ }
+ foreach ($usernames as $username) {
+ $is_now = admin('details', $username);
+ if (!empty($is_now)) {
+ $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];
+ $username_new = (!empty($_data['username_new'])) ? $_data['username_new'] : $is_now['username'];
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $password = $_data['password'];
+ $password2 = $_data['password2'];
+ if ($active == 0) {
+ $left_active = 0;
+ foreach (admin('get') as $admin) {
+ $left_active = $left_active + admin('details', $admin)['active'];
+ }
+ if ($left_active == 1) {
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'no_active_admin'
+ );
+ continue;
+ }
+ }
+ if (!ctype_alnum(str_replace(array('_', '.', '-'), '', $username_new))) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('username_invalid', $username_new)
+ );
+ continue;
+ }
+ if ($username_new != $username) {
+ if (!empty(admin('details', $username_new)['username'])) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('username_invalid', $username_new)
+ );
+ continue;
+ }
+ }
+ if (!empty($password) && !empty($password2)) {
+ if (!preg_match('/' . $GLOBALS['PASSWD_REGEP'] . '/', $password)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'password_complexity'
+ );
+ continue;
+ }
+ if ($password != $password2) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'password_mismatch'
+ );
+ continue;
+ }
+ $password_hashed = hash_password($password);
+ $stmt = $pdo->prepare("UPDATE `admin` SET `username` = :username_new, `active` = :active, `password` = :password_hashed WHERE `username` = :username");
+ $stmt->execute(array(
+ ':password_hashed' => $password_hashed,
+ ':username_new' => $username_new,
+ ':username' => $username,
+ ':active' => $active
+ ));
+ if (isset($_data['disable_tfa'])) {
+ $stmt = $pdo->prepare("UPDATE `tfa` SET `active` = '0' WHERE `username` = :username");
+ $stmt->execute(array(':username' => $username));
+ }
+ else {
+ $stmt = $pdo->prepare("UPDATE `tfa` SET `username` = :username_new WHERE `username` = :username");
+ $stmt->execute(array(':username_new' => $username_new, ':username' => $username));
+ }
+ }
+ else {
+ $stmt = $pdo->prepare("UPDATE `admin` SET `username` = :username_new, `active` = :active WHERE `username` = :username");
+ $stmt->execute(array(
+ ':username_new' => $username_new,
+ ':username' => $username,
+ ':active' => $active
+ ));
+ if (isset($_data['disable_tfa'])) {
+ $stmt = $pdo->prepare("UPDATE `tfa` SET `active` = '0' WHERE `username` = :username");
+ $stmt->execute(array(':username' => $username));
+ }
+ else {
+ $stmt = $pdo->prepare("UPDATE `tfa` SET `username` = :username_new WHERE `username` = :username");
+ $stmt->execute(array(':username_new' => $username_new, ':username' => $username));
+ }
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('admin_modified', htmlspecialchars($username))
+ );
+ }
+ return true;
+ break;
+ case 'delete':
+ $usernames = (array)$_data['username'];
+ foreach ($usernames as $username) {
+ if ($_SESSION['mailcow_cc_username'] == $username) {
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'cannot_delete_self'
+ );
+ continue;
+ }
+ if (empty(admin('details', $username))) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('username_invalid', $username)
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("DELETE FROM `admin` WHERE `username` = :username");
+ $stmt->execute(array(
+ ':username' => $username,
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `domain_admins` WHERE `username` = :username");
+ $stmt->execute(array(
+ ':username' => $username,
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `tfa` WHERE `username` = :username");
+ $stmt->execute(array(
+ ':username' => $username,
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `fido2` WHERE `username` = :username");
+ $stmt->execute(array(
+ ':username' => $username,
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('admin_removed', htmlspecialchars($username))
+ );
+ }
+ break;
+ case 'get':
+ $admins = array();
+ $stmt = $pdo->query("SELECT `username` FROM `admin` WHERE `superadmin` = '1'");
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while ($row = array_shift($rows)) {
+ $admins[] = $row['username'];
+ }
+ return $admins;
+ break;
+ case 'details':
+ $admindata = array();
+ $stmt = $pdo->prepare("SELECT
+ `tfa`.`active` AS `tfa_active`,
+ `admin`.`username`,
+ `admin`.`created`,
+ `admin`.`active` AS `active`
+ FROM `admin`
+ LEFT OUTER JOIN `tfa` ON `tfa`.`username`=`admin`.`username`
+ WHERE `admin`.`username`= :admin AND `superadmin` = '1'");
+ $stmt->execute(array(
+ ':admin' => $_data
+ ));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (empty($row)) {
+ return false;
+ }
+ $admindata['username'] = $row['username'];
+ $admindata['tfa_active'] = (is_null($row['tfa_active'])) ? 0 : $row['tfa_active'];
+ $admindata['tfa_active_int'] = (is_null($row['tfa_active'])) ? 0 : $row['tfa_active'];
+ $admindata['active'] = $row['active'];
+ $admindata['active_int'] = $row['active'];
+ $admindata['created'] = $row['created'];
+ return $admindata;
+ break;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/functions.app_passwd.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/functions.app_passwd.inc.php
new file mode 100644
index 0000000..c4b0026
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/functions.app_passwd.inc.php
@@ -0,0 +1,204 @@
+<?php
+function app_passwd($_action, $_data = null) {
+ global $pdo;
+ global $lang;
+ $_data_log = $_data;
+ !isset($_data_log['app_passwd']) ?: $_data_log['app_passwd'] = '*';
+ !isset($_data_log['app_passwd2']) ?: $_data_log['app_passwd2'] = '*';
+ if (isset($_data['username']) && filter_var($_data['username'], FILTER_VALIDATE_EMAIL)) {
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data['username'])) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ else {
+ $username = $_data['username'];
+ }
+ }
+ else {
+ $username = $_SESSION['mailcow_cc_username'];
+ }
+ switch ($_action) {
+ case 'add':
+ $app_name = trim($_data['app_name']);
+ $password = $_data['app_passwd'];
+ $password2 = $_data['app_passwd2'];
+ $active = intval($_data['active']);
+ $domain = mailbox('get', 'mailbox_details', $username)['domain'];
+ if (empty($domain)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ if (!preg_match('/' . $GLOBALS['PASSWD_REGEP'] . '/', $password)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'password_complexity'
+ );
+ return false;
+ }
+ if ($password != $password2) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'password_mismatch'
+ );
+ return false;
+ }
+ $password_hashed = hash_password($password);
+ if (empty($app_name)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'app_name_empty'
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("INSERT INTO `app_passwd` (`name`, `mailbox`, `domain`, `password`, `active`)
+ VALUES (:app_name, :mailbox, :domain, :password, :active)");
+ $stmt->execute(array(
+ ':app_name' => $app_name,
+ ':mailbox' => $username,
+ ':domain' => $domain,
+ ':password' => $password_hashed,
+ ':active' => $active
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'app_passwd_added'
+ );
+ break;
+ case 'edit':
+ $ids = (array)$_data['id'];
+ foreach ($ids as $id) {
+ $is_now = app_passwd('details', $id);
+ if (!empty($is_now)) {
+ $app_name = (!empty($_data['app_name'])) ? $_data['app_name'] : $is_now['name'];
+ $password = (!empty($_data['password'])) ? $_data['password'] : null;
+ $password2 = (!empty($_data['password2'])) ? $_data['password2'] : null;
+ $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('app_passwd_id_invalid', $id)
+ );
+ continue;
+ }
+ $app_name = trim($app_name);
+ if (!empty($password) && !empty($password2)) {
+ if (!preg_match('/' . $GLOBALS['PASSWD_REGEP'] . '/', $password)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'password_complexity'
+ );
+ continue;
+ }
+ if ($password != $password2) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'password_mismatch'
+ );
+ continue;
+ }
+ $password_hashed = hash_password($password);
+ $stmt = $pdo->prepare("UPDATE `app_passwd` SET
+ `password` = :password_hashed
+ WHERE `mailbox` = :username AND `id` = :id");
+ $stmt->execute(array(
+ ':password_hashed' => $password_hashed,
+ ':username' => $username,
+ ':id' => $id
+ ));
+ }
+ $stmt = $pdo->prepare("UPDATE `app_passwd` SET
+ `name` = :app_name,
+ `mailbox` = :username,
+ `active` = :active
+ WHERE `id` = :id");
+ $stmt->execute(array(
+ ':app_name' => $app_name,
+ ':username' => $username,
+ ':active' => $active,
+ ':id' => $id
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('object_modified', htmlspecialchars($ids))
+ );
+ }
+ break;
+ case 'delete':
+ $ids = (array)$_data['id'];
+ foreach ($ids as $id) {
+ $stmt = $pdo->prepare("SELECT `mailbox` FROM `app_passwd` WHERE `id` = :id");
+ $stmt->execute(array(':id' => $id));
+ $mailbox = $stmt->fetch(PDO::FETCH_ASSOC)['mailbox'];
+ if (empty($mailbox)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'app_passwd_id_invalid'
+ );
+ return false;
+ }
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $mailbox)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("DELETE FROM `app_passwd` WHERE `id`= :id");
+ $stmt->execute(array(':id' => $id));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('app_passwd_removed', htmlspecialchars($id))
+ );
+ }
+ break;
+ case 'get':
+ $app_passwds = array();
+ $stmt = $pdo->prepare("SELECT `id`, `name` FROM `app_passwd` WHERE `mailbox` = :username");
+ $stmt->execute(array(':username' => $username));
+ $app_passwds = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ return $app_passwds;
+ break;
+ case 'details':
+ $app_passwd_data = array();
+ $stmt = $pdo->prepare("SELECT `id`,
+ `name`,
+ `mailbox`,
+ `domain`,
+ `created`,
+ `modified`,
+ `active`
+ FROM `app_passwd`
+ WHERE `id` = :id");
+ $stmt->execute(array(':id' => $_data['id']));
+ $app_passwd_data = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (empty($app_passwd_data)) {
+ return false;
+ }
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $app_passwd_data['mailbox'])) {
+ $app_passwd_data = array();
+ return false;
+ }
+ return $app_passwd_data;
+ break;
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/functions.customize.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/functions.customize.inc.php
new file mode 100644
index 0000000..f4c74d8
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/functions.customize.inc.php
@@ -0,0 +1,252 @@
+<?php
+function customize($_action, $_item, $_data = null) {
+ global $redis;
+ global $lang;
+ switch ($_action) {
+ case 'add':
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_item, $_data),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ switch ($_item) {
+ case 'main_logo':
+ if (in_array($_data['main_logo']['type'], array('image/gif', 'image/jpeg', 'image/pjpeg', 'image/x-png', 'image/png', 'image/svg+xml'))) {
+ try {
+ if (file_exists($_data['main_logo']['tmp_name']) !== true) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_item, $_data),
+ 'msg' => 'img_tmp_missing'
+ );
+ return false;
+ }
+ $image = new Imagick($_data['main_logo']['tmp_name']);
+ if ($image->valid() !== true) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_item, $_data),
+ 'msg' => 'img_invalid'
+ );
+ return false;
+ }
+ $image->destroy();
+ }
+ catch (ImagickException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_item, $_data),
+ 'msg' => 'img_invalid'
+ );
+ return false;
+ }
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_item, $_data),
+ 'msg' => 'invalid_mime_type'
+ );
+ return false;
+ }
+ try {
+ $redis->Set('MAIN_LOGO', 'data:' . $_data['main_logo']['type'] . ';base64,' . base64_encode(file_get_contents($_data['main_logo']['tmp_name'])));
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_item, $_data),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_item, $_data),
+ 'msg' => 'upload_success'
+ );
+ break;
+ }
+ break;
+ case 'edit':
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_item, $_data),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ switch ($_item) {
+ case 'app_links':
+ $apps = (array)$_data['app'];
+ $links = (array)$_data['href'];
+ $out = array();
+ if (count($apps) == count($links)) {
+ for ($i = 0; $i < count($apps); $i++) {
+ $out[] = array($apps[$i] => $links[$i]);
+ }
+ try {
+ $redis->set('APP_LINKS', json_encode($out));
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_item, $_data),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_item, $_data),
+ 'msg' => 'app_links'
+ );
+ break;
+ case 'ui_texts':
+ $title_name = $_data['title_name'];
+ $main_name = $_data['main_name'];
+ $apps_name = $_data['apps_name'];
+ $help_text = $_data['help_text'];
+ $ui_footer = $_data['ui_footer'];
+ $ui_announcement_text = $_data['ui_announcement_text'];
+ $ui_announcement_type = (in_array($_data['ui_announcement_type'], array('info', 'warning', 'danger'))) ? $_data['ui_announcement_type'] : false;
+ $ui_announcement_active = (!empty($_data['ui_announcement_active']) ? 1 : 0);
+ try {
+ $redis->set('TITLE_NAME', htmlspecialchars($title_name));
+ $redis->set('MAIN_NAME', htmlspecialchars($main_name));
+ $redis->set('APPS_NAME', htmlspecialchars($apps_name));
+ $redis->set('HELP_TEXT', $help_text);
+ $redis->set('UI_FOOTER', $ui_footer);
+ $redis->set('UI_ANNOUNCEMENT_TEXT', $ui_announcement_text);
+ $redis->set('UI_ANNOUNCEMENT_TYPE', $ui_announcement_type);
+ $redis->set('UI_ANNOUNCEMENT_ACTIVE', $ui_announcement_active);
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_item, $_data),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_item, $_data),
+ 'msg' => 'ui_texts'
+ );
+ break;
+ }
+ break;
+ case 'delete':
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_item, $_data),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ switch ($_item) {
+ case 'main_logo':
+ try {
+ if ($redis->del('MAIN_LOGO')) {
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_item, $_data),
+ 'msg' => 'reset_main_logo'
+ );
+ return true;
+ }
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_item, $_data),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ break;
+ }
+ break;
+ case 'get':
+ switch ($_item) {
+ case 'app_links':
+ try {
+ $app_links = json_decode($redis->get('APP_LINKS'), true);
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_item, $_data),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ return ($app_links) ? $app_links : false;
+ break;
+ case 'main_logo':
+ try {
+ return $redis->get('MAIN_LOGO');
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_item, $_data),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ break;
+ case 'ui_texts':
+ try {
+ $data['title_name'] = ($title_name = $redis->get('TITLE_NAME')) ? $title_name : 'mailcow UI';
+ $data['main_name'] = ($main_name = $redis->get('MAIN_NAME')) ? $main_name : 'mailcow UI';
+ $data['apps_name'] = ($apps_name = $redis->get('APPS_NAME')) ? $apps_name : 'mailcow Apps';
+ $data['help_text'] = ($help_text = $redis->get('HELP_TEXT')) ? $help_text : false;
+ if (!empty($redis->get('UI_IMPRESS'))) {
+ $redis->set('UI_FOOTER', $redis->get('UI_IMPRESS'));
+ $redis->del('UI_IMPRESS');
+ }
+ $data['ui_footer'] = ($ui_footer = $redis->get('UI_FOOTER')) ? $ui_footer : false;
+ $data['ui_announcement_text'] = ($ui_announcement_text = $redis->get('UI_ANNOUNCEMENT_TEXT')) ? $ui_announcement_text : false;
+ $data['ui_announcement_type'] = ($ui_announcement_type = $redis->get('UI_ANNOUNCEMENT_TYPE')) ? $ui_announcement_type : false;
+ $data['ui_announcement_active'] = ($redis->get('UI_ANNOUNCEMENT_ACTIVE') == 1) ? 1 : 0;
+ return $data;
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_item, $_data),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ break;
+ case 'main_logo_specs':
+ try {
+ $image = new Imagick();
+ $img_data = explode('base64,', customize('get', 'main_logo'));
+ if ($img_data[1]) {
+ $image->readImageBlob(base64_decode($img_data[1]));
+ }
+ return $image->identifyImage();
+ }
+ catch (ImagickException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_item, $_data),
+ 'msg' => 'imagick_exception'
+ );
+ return false;
+ }
+ break;
+ }
+ break;
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/functions.dkim.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/functions.dkim.inc.php
new file mode 100644
index 0000000..2a19ff0
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/functions.dkim.inc.php
@@ -0,0 +1,325 @@
+<?php
+
+function dkim($_action, $_data = null, $privkey = false) {
+ global $redis;
+ global $lang;
+ switch ($_action) {
+ case 'add':
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, ),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $key_length = intval($_data['key_size']);
+ $dkim_selector = (isset($_data['dkim_selector'])) ? $_data['dkim_selector'] : 'dkim';
+ $domains = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['domains']));
+ $domains = array_filter($domains);
+ foreach ($domains as $domain) {
+ if (!is_valid_domain_name($domain) || !is_numeric($key_length)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $privkey),
+ 'msg' => array('dkim_domain_or_sel_invalid', $domain)
+ );
+ continue;
+ }
+ if ($redis->hGet('DKIM_PUB_KEYS', $domain)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $privkey),
+ 'msg' => array('dkim_domain_or_sel_invalid', $domain)
+ );
+ continue;
+ }
+ if (!ctype_alnum(str_replace(['-', '_'], '', $dkim_selector))) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $privkey),
+ 'msg' => array('dkim_domain_or_sel_invalid', $domain)
+ );
+ continue;
+ }
+ $config = array(
+ "digest_alg" => "sha256",
+ "private_key_bits" => $key_length,
+ "private_key_type" => OPENSSL_KEYTYPE_RSA,
+ );
+ if ($keypair_ressource = openssl_pkey_new($config)) {
+ $key_details = openssl_pkey_get_details($keypair_ressource);
+ $pubKey = implode(array_slice(
+ array_filter(
+ explode(PHP_EOL, $key_details['key'])
+ ), 1, -1)
+ );
+ // Save public key and selector to redis
+ try {
+ $redis->hSet('DKIM_PUB_KEYS', $domain, $pubKey);
+ $redis->hSet('DKIM_SELECTORS', $domain, $dkim_selector);
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $privkey),
+ 'msg' => array('redis_error', $e)
+ );
+ continue;
+ }
+ // Export private key and save private key to redis
+ openssl_pkey_export($keypair_ressource, $privKey);
+ if (isset($privKey) && !empty($privKey)) {
+ try {
+ $redis->hSet('DKIM_PRIV_KEYS', $dkim_selector . '.' . $domain, trim($privKey));
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $privkey),
+ 'msg' => array('redis_error', $e)
+ );
+ continue;
+ }
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data, $privkey),
+ 'msg' => array('dkim_added', $domain)
+ );
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $privkey),
+ 'msg' => array('dkim_domain_or_sel_invalid', $domain)
+ );
+ continue;
+ }
+ }
+ break;
+ case 'duplicate':
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $privkey),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $from_domain = $_data['from_domain'];
+ $from_domain_dkim = dkim('details', $from_domain, true);
+ if (empty($from_domain_dkim)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $privkey),
+ 'msg' => array('dkim_domain_or_sel_invalid', $from_domain)
+ );
+ continue;
+ }
+ $to_domains = (array)$_data['to_domain'];
+ $to_domains = array_filter($to_domains);
+ foreach ($to_domains as $to_domain) {
+ try {
+ $redis->hSet('DKIM_PUB_KEYS', $to_domain, $from_domain_dkim['pubkey']);
+ $redis->hSet('DKIM_SELECTORS', $to_domain, $from_domain_dkim['dkim_selector']);
+ $redis->hSet('DKIM_PRIV_KEYS', $from_domain_dkim['dkim_selector'] . '.' . $to_domain, base64_decode(trim($from_domain_dkim['privkey'])));
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $privkey),
+ 'msg' => array('redis_error', $e)
+ );
+ continue;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data, $privkey),
+ 'msg' => array('dkim_duplicated', $from_domain, $to_domain)
+ );
+ }
+ break;
+ case 'import':
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $privkey),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $private_key_input = trim($_data['private_key_file']);
+ $overwrite_existing = intval($_data['overwrite_existing']);
+ $private_key_normalized = preg_replace('~\r\n?~', "\n", $private_key_input);
+ $private_key = openssl_pkey_get_private($private_key_normalized);
+ if ($ssl_error = openssl_error_string()) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $privkey),
+ 'msg' => array('private_key_error', $ssl_error)
+ );
+ return false;
+ }
+ // Explode by nl
+ $pem_public_key_array = explode(PHP_EOL, trim(openssl_pkey_get_details($private_key)['key']));
+ // Remove first and last line/item
+ array_shift($pem_public_key_array);
+ array_pop($pem_public_key_array);
+ // Implode as single string
+ $pem_public_key = implode('', $pem_public_key_array);
+ $dkim_selector = (isset($_data['dkim_selector'])) ? $_data['dkim_selector'] : 'dkim';
+ $domain = $_data['domain'];
+ if (!is_valid_domain_name($domain)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $privkey),
+ 'msg' => array('dkim_domain_or_sel_invalid', $domain)
+ );
+ return false;
+ }
+ if ($redis->hGet('DKIM_PUB_KEYS', $domain)) {
+ if ($overwrite_existing == 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $privkey),
+ 'msg' => array('dkim_domain_or_sel_exists', $domain)
+ );
+ return false;
+ }
+ }
+ if (!ctype_alnum($dkim_selector)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $privkey),
+ 'msg' => array('dkim_domain_or_sel_invalid', $domain)
+ );
+ return false;
+ }
+ try {
+ dkim('delete', $domain);
+ $redis->hSet('DKIM_PUB_KEYS', $domain, $pem_public_key);
+ $redis->hSet('DKIM_SELECTORS', $domain, $dkim_selector);
+ $redis->hSet('DKIM_PRIV_KEYS', $dkim_selector . '.' . $domain, $private_key_normalized);
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $privkey),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ unset($private_key_normalized);
+ unset($private_key);
+ unset($private_key_input);
+ try {
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $privkey),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data, $privkey),
+ 'msg' => array('dkim_added', $domain)
+ );
+ return true;
+ break;
+ case 'details':
+ if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data) && $_SESSION['mailcow_cc_role'] != "admin") {
+ return false;
+ }
+ $dkimdata = array();
+ if ($redis_dkim_key_data = $redis->hGet('DKIM_PUB_KEYS', $_data)) {
+ $dkimdata['pubkey'] = $redis_dkim_key_data;
+ if (strlen($dkimdata['pubkey']) < 391) {
+ $dkimdata['length'] = "1024";
+ }
+ elseif (strlen($dkimdata['pubkey']) < 736) {
+ $dkimdata['length'] = "2048";
+ }
+ elseif (strlen($dkimdata['pubkey']) < 1416) {
+ $dkimdata['length'] = "4096";
+ }
+ else {
+ $dkimdata['length'] = ">= 8192";
+ }
+ if ($GLOBALS['SPLIT_DKIM_255'] === true) {
+ $dkim_txt_tmp = str_split('v=DKIM1;k=rsa;t=s;s=email;p=' . $redis_dkim_key_data, 255);
+ $dkimdata['dkim_txt'] = sprintf('"%s"', implode('" "', $dkim_txt_tmp ) );
+ }
+ else {
+ $dkimdata['dkim_txt'] = 'v=DKIM1;k=rsa;t=s;s=email;p=' . $redis_dkim_key_data;
+ }
+ $dkimdata['dkim_selector'] = $redis->hGet('DKIM_SELECTORS', $_data);
+ if ($GLOBALS['SHOW_DKIM_PRIV_KEYS'] || $privkey == true) {
+ $dkimdata['privkey'] = base64_encode($redis->hGet('DKIM_PRIV_KEYS', $dkimdata['dkim_selector'] . '.' . $_data));
+ }
+ else {
+ $dkimdata['privkey'] = '';
+ }
+ }
+ return $dkimdata;
+ break;
+ case 'blind':
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $privkey),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $blinddkim = array();
+ foreach ($redis->hKeys('DKIM_PUB_KEYS') as $redis_dkim_domain) {
+ $blinddkim[] = $redis_dkim_domain;
+ }
+ return array_diff($blinddkim, array_merge(mailbox('get', 'domains'), mailbox('get', 'alias_domains')));
+ break;
+ case 'delete':
+ $domains = (array)$_data['domains'];
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $privkey),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ foreach ($domains as $domain) {
+ if (!is_valid_domain_name($domain)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $privkey),
+ 'msg' => array('dkim_domain_or_sel_invalid', $domain)
+ );
+ continue;
+ }
+ try {
+ $selector = $redis->hGet('DKIM_SELECTORS', $domain);
+ $redis->hDel('DKIM_PUB_KEYS', $domain);
+ $redis->hDel('DKIM_PRIV_KEYS', $selector . '.' . $domain);
+ $redis->hDel('DKIM_SELECTORS', $domain);
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $privkey),
+ 'msg' => array('redis_error', $e)
+ );
+ continue;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data, $privkey),
+ 'msg' => array('dkim_removed', htmlspecialchars($domain))
+ );
+ }
+ break;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/functions.docker.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/functions.docker.inc.php
new file mode 100644
index 0000000..e47f5e2
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/functions.docker.inc.php
@@ -0,0 +1,150 @@
+<?php
+function docker($action, $service_name = null, $attr1 = null, $attr2 = null, $extra_headers = null) {
+ global $DOCKER_TIMEOUT;
+ $curl = curl_init();
+ curl_setopt($curl, CURLOPT_HTTPHEADER,array('Content-Type: application/json' ));
+ // We are using our mail certificates for dockerapi, the names will not match, the certs are trusted anyway
+ curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
+ curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
+ switch($action) {
+ case 'get_id':
+ curl_setopt($curl, CURLOPT_URL, 'https://dockerapi:443/containers/json');
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($curl, CURLOPT_POST, 0);
+ curl_setopt($curl, CURLOPT_TIMEOUT, $DOCKER_TIMEOUT);
+ $response = curl_exec($curl);
+ if ($response === false) {
+ $err = curl_error($curl);
+ curl_close($curl);
+ return $err;
+ }
+ else {
+ curl_close($curl);
+ $containers = json_decode($response, true);
+ if (!empty($containers)) {
+ foreach ($containers as $container) {
+ if (isset($container['Config']['Labels']['com.docker.compose.service'])
+ && $container['Config']['Labels']['com.docker.compose.service'] == $service_name
+ && strtolower($container['Config']['Labels']['com.docker.compose.project']) == strtolower(getenv('COMPOSE_PROJECT_NAME'))) {
+ return trim($container['Id']);
+ }
+ }
+ }
+ }
+ return false;
+ case 'containers':
+ curl_setopt($curl, CURLOPT_URL, 'https://dockerapi:443/containers/json');
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($curl, CURLOPT_POST, 0);
+ curl_setopt($curl, CURLOPT_TIMEOUT, $DOCKER_TIMEOUT);
+ $response = curl_exec($curl);
+ if ($response === false) {
+ $err = curl_error($curl);
+ curl_close($curl);
+ return $err;
+ }
+ else {
+ curl_close($curl);
+ $containers = json_decode($response, true);
+ if (!empty($containers)) {
+ foreach ($containers as $container) {
+ if (strtolower($container['Config']['Labels']['com.docker.compose.project']) == strtolower(getenv('COMPOSE_PROJECT_NAME'))) {
+ $out[$container['Config']['Labels']['com.docker.compose.service']]['State'] = $container['State'];
+ $out[$container['Config']['Labels']['com.docker.compose.service']]['Config'] = $container['Config'];
+ }
+ }
+ }
+ return (!empty($out)) ? $out : false;
+ }
+ return false;
+ break;
+ case 'info':
+ if (empty($service_name)) {
+ curl_setopt($curl, CURLOPT_URL, 'https://dockerapi:443/containers/json');
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($curl, CURLOPT_POST, 0);
+ curl_setopt($curl, CURLOPT_TIMEOUT, $DOCKER_TIMEOUT);
+ }
+ else {
+ $container_id = docker('get_id', $service_name);
+ if (ctype_xdigit($container_id)) {
+ curl_setopt($curl, CURLOPT_URL, 'https://dockerapi:443/containers/' . $container_id . '/json');
+ }
+ else {
+ return false;
+ }
+ }
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($curl, CURLOPT_POST, 0);
+ curl_setopt($curl, CURLOPT_TIMEOUT, $DOCKER_TIMEOUT);
+ $response = curl_exec($curl);
+ if ($response === false) {
+ $err = curl_error($curl);
+ curl_close($curl);
+ return $err;
+ }
+ else {
+ curl_close($curl);
+ $decoded_response = json_decode($response, true);
+ if (!empty($decoded_response)) {
+ if (empty($service_name)) {
+ foreach ($decoded_response as $container) {
+ if (isset($container['Config']['Labels']['com.docker.compose.project'])
+ && strtolower($container['Config']['Labels']['com.docker.compose.project']) == strtolower(getenv('COMPOSE_PROJECT_NAME'))) {
+ unset($container['Config']['Env']);
+ $out[$container['Config']['Labels']['com.docker.compose.service']]['State'] = $container['State'];
+ $out[$container['Config']['Labels']['com.docker.compose.service']]['Config'] = $container['Config'];
+ }
+ }
+ }
+ else {
+ if (isset($decoded_response['Config']['Labels']['com.docker.compose.project'])
+ && strtolower($decoded_response['Config']['Labels']['com.docker.compose.project']) == strtolower(getenv('COMPOSE_PROJECT_NAME'))) {
+ unset($container['Config']['Env']);
+ $out[$decoded_response['Config']['Labels']['com.docker.compose.service']]['State'] = $decoded_response['State'];
+ $out[$decoded_response['Config']['Labels']['com.docker.compose.service']]['Config'] = $decoded_response['Config'];
+ }
+ }
+ }
+ if (empty($response)) {
+ return true;
+ }
+ else {
+ return (!empty($out)) ? $out : false;
+ }
+ }
+ break;
+ case 'post':
+ if (!empty($attr1)) {
+ $container_id = docker('get_id', $service_name);
+ if (ctype_xdigit($container_id) && ctype_alnum($attr1)) {
+ curl_setopt($curl, CURLOPT_URL, 'https://dockerapi:443/containers/' . $container_id . '/' . $attr1);
+ curl_setopt($curl, CURLOPT_POST, 1);
+ curl_setopt($curl, CURLOPT_TIMEOUT, $DOCKER_TIMEOUT);
+ if (!empty($attr2)) {
+ curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($attr2));
+ }
+ if (!empty($extra_headers) && is_array($extra_headers)) {
+ curl_setopt($curl, CURLOPT_HTTPHEADER, $extra_headers);
+ }
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+ $response = curl_exec($curl);
+ if ($response === false) {
+ $err = curl_error($curl);
+ curl_close($curl);
+ return $err;
+ }
+ else {
+ curl_close($curl);
+ if (empty($response)) {
+ return true;
+ }
+ else {
+ return $response;
+ }
+ }
+ }
+ }
+ break;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/functions.domain_admin.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/functions.domain_admin.inc.php
new file mode 100644
index 0000000..206b371
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/functions.domain_admin.inc.php
@@ -0,0 +1,458 @@
+<?php
+function domain_admin($_action, $_data = null) {
+ global $pdo;
+ global $lang;
+ $_data_log = $_data;
+ !isset($_data_log['password']) ?: $_data_log['password'] = '*';
+ !isset($_data_log['password2']) ?: $_data_log['password2'] = '*';
+ !isset($_data_log['user_old_pass']) ?: $_data_log['user_old_pass'] = '*';
+ !isset($_data_log['user_new_pass']) ?: $_data_log['user_new_pass'] = '*';
+ !isset($_data_log['user_new_pass2']) ?: $_data_log['user_new_pass2'] = '*';
+ switch ($_action) {
+ case 'add':
+ $username = strtolower(trim($_data['username']));
+ $password = $_data['password'];
+ $password2 = $_data['password2'];
+ $domains = (array)$_data['domains'];
+ $active = intval($_data['active']);
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ if (empty($domains)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'domain_invalid'
+ );
+ return false;
+ }
+ if (!ctype_alnum(str_replace(array('_', '.', '-'), '', $username)) || empty ($username) || $username == 'API') {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('username_invalid', $username)
+ );
+ return false;
+ }
+
+ $stmt = $pdo->prepare("SELECT `username` FROM `mailbox`
+ WHERE `username` = :username");
+ $stmt->execute(array(':username' => $username));
+ $num_results[] = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+
+ $stmt = $pdo->prepare("SELECT `username` FROM `admin`
+ WHERE `username` = :username");
+ $stmt->execute(array(':username' => $username));
+ $num_results[] = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+
+ $stmt = $pdo->prepare("SELECT `username` FROM `domain_admins`
+ WHERE `username` = :username");
+ $stmt->execute(array(':username' => $username));
+ $num_results[] = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+
+ foreach ($num_results as $num_results_each) {
+ if ($num_results_each != 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('object_exists', htmlspecialchars($username))
+ );
+ return false;
+ }
+ }
+ if (!empty($password) && !empty($password2)) {
+ if (!preg_match('/' . $GLOBALS['PASSWD_REGEP'] . '/', $password)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'password_complexity'
+ );
+ return false;
+ }
+ if ($password != $password2) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'password_mismatch'
+ );
+ return false;
+ }
+ $password_hashed = hash_password($password);
+ $valid_domains = 0;
+ foreach ($domains as $domain) {
+ if (!is_valid_domain_name($domain) || mailbox('get', 'domain_details', $domain) === false) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('domain_invalid', htmlspecialchars($domain))
+ );
+ continue;
+ }
+ $valid_domains++;
+ $stmt = $pdo->prepare("INSERT INTO `domain_admins` (`username`, `domain`, `created`, `active`)
+ VALUES (:username, :domain, :created, :active)");
+ $stmt->execute(array(
+ ':username' => $username,
+ ':domain' => $domain,
+ ':created' => date('Y-m-d H:i:s'),
+ ':active' => $active
+ ));
+ }
+ if ($valid_domains != 0) {
+ $stmt = $pdo->prepare("INSERT INTO `admin` (`username`, `password`, `superadmin`, `active`)
+ VALUES (:username, :password_hashed, '0', :active)");
+ $stmt->execute(array(
+ ':username' => $username,
+ ':password_hashed' => $password_hashed,
+ ':active' => $active
+ ));
+ }
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'password_empty'
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("INSERT INTO `da_acl` (`username`) VALUES (:username)");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('domain_admin_added', htmlspecialchars($username))
+ );
+ break;
+ case 'edit':
+ if ($_SESSION['mailcow_cc_role'] != "admin" && $_SESSION['mailcow_cc_role'] != "domainadmin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ // Administrator
+ if ($_SESSION['mailcow_cc_role'] == "admin") {
+ if (!is_array($_data['username'])) {
+ $usernames = array();
+ $usernames[] = $_data['username'];
+ }
+ else {
+ $usernames = $_data['username'];
+ }
+ foreach ($usernames as $username) {
+ $is_now = domain_admin('details', $username);
+ $domains = (isset($_data['domains'])) ? (array)$_data['domains'] : null;
+ if (!empty($is_now)) {
+ $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];
+ $domains = (!empty($domains)) ? $domains : $is_now['selected_domains'];
+ $username_new = (!empty($_data['username_new'])) ? $_data['username_new'] : $is_now['username'];
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $password = $_data['password'];
+ $password2 = $_data['password2'];
+ if (!empty($domains)) {
+ foreach ($domains as $domain) {
+ if (!is_valid_domain_name($domain) || mailbox('get', 'domain_details', $domain) === false) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('domain_invalid', htmlspecialchars($domain))
+ );
+ continue 2;
+ }
+ }
+ }
+ if (!ctype_alnum(str_replace(array('_', '.', '-'), '', $username_new))) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('username_invalid', $username_new)
+ );
+ continue;
+ }
+ if ($username_new != $username) {
+ if (!empty(domain_admin('details', $username_new)['username'])) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('username_invalid', $username_new)
+ );
+ continue;
+ }
+ }
+ $stmt = $pdo->prepare("DELETE FROM `domain_admins` WHERE `username` = :username");
+ $stmt->execute(array(
+ ':username' => $username,
+ ));
+ $stmt = $pdo->prepare("UPDATE `da_acl` SET `username` = :username_new WHERE `username` = :username");
+ $stmt->execute(array(
+ ':username_new' => $username_new,
+ ':username' => $username
+ ));
+ if (!empty($domains)) {
+ foreach ($domains as $domain) {
+ $stmt = $pdo->prepare("INSERT INTO `domain_admins` (`username`, `domain`, `created`, `active`)
+ VALUES (:username_new, :domain, :created, :active)");
+ $stmt->execute(array(
+ ':username_new' => $username_new,
+ ':domain' => $domain,
+ ':created' => date('Y-m-d H:i:s'),
+ ':active' => $active
+ ));
+ }
+ }
+ if (!empty($password) && !empty($password2)) {
+ if (!preg_match('/' . $GLOBALS['PASSWD_REGEP'] . '/', $password)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'password_complexity'
+ );
+ continue;
+ }
+ if ($password != $password2) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'password_mismatch'
+ );
+ continue;
+ }
+ $password_hashed = hash_password($password);
+ $stmt = $pdo->prepare("UPDATE `admin` SET `username` = :username_new, `active` = :active, `password` = :password_hashed WHERE `username` = :username");
+ $stmt->execute(array(
+ ':password_hashed' => $password_hashed,
+ ':username_new' => $username_new,
+ ':username' => $username,
+ ':active' => $active
+ ));
+ if (isset($_data['disable_tfa'])) {
+ $stmt = $pdo->prepare("UPDATE `tfa` SET `active` = '0' WHERE `username` = :username");
+ $stmt->execute(array(':username' => $username));
+ }
+ else {
+ $stmt = $pdo->prepare("UPDATE `tfa` SET `username` = :username_new WHERE `username` = :username");
+ $stmt->execute(array(':username_new' => $username_new, ':username' => $username));
+ }
+ }
+ else {
+ $stmt = $pdo->prepare("UPDATE `admin` SET `username` = :username_new, `active` = :active WHERE `username` = :username");
+ $stmt->execute(array(
+ ':username_new' => $username_new,
+ ':username' => $username,
+ ':active' => $active
+ ));
+ if (isset($_data['disable_tfa'])) {
+ $stmt = $pdo->prepare("UPDATE `tfa` SET `active` = '0' WHERE `username` = :username");
+ $stmt->execute(array(':username' => $username));
+ }
+ else {
+ $stmt = $pdo->prepare("UPDATE `tfa` SET `username` = :username_new WHERE `username` = :username");
+ $stmt->execute(array(':username_new' => $username_new, ':username' => $username));
+ }
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('domain_admin_modified', htmlspecialchars($username))
+ );
+ }
+ return true;
+ }
+ // Domain administrator
+ // Can only edit itself
+ elseif ($_SESSION['mailcow_cc_role'] == "domainadmin") {
+ $username = $_SESSION['mailcow_cc_username'];
+ $password_old = $_data['user_old_pass'];
+ $password_new = $_data['user_new_pass'];
+ $password_new2 = $_data['user_new_pass2'];
+
+ $stmt = $pdo->prepare("SELECT `password` FROM `admin`
+ WHERE `username` = :user");
+ $stmt->execute(array(':user' => $username));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (!verify_hash($row['password'], $password_old)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ if (!empty($password_new2) && !empty($password_new)) {
+ if ($password_new2 != $password_new) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'password_mismatch'
+ );
+ return false;
+ }
+ if (!preg_match('/' . $GLOBALS['PASSWD_REGEP'] . '/', $password_new)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'password_complexity'
+ );
+ return false;
+ }
+ $password_hashed = hash_password($password_new);
+ $stmt = $pdo->prepare("UPDATE `admin` SET `password` = :password_hashed WHERE `username` = :username");
+ $stmt->execute(array(
+ ':password_hashed' => $password_hashed,
+ ':username' => $username
+ ));
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('domain_admin_modified', htmlspecialchars($username))
+ );
+ }
+ break;
+ case 'delete':
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $usernames = (array)$_data['username'];
+ foreach ($usernames as $username) {
+ if (empty(domain_admin('details', $username))) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('username_invalid', $username)
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("DELETE FROM `domain_admins` WHERE `username` = :username");
+ $stmt->execute(array(
+ ':username' => $username,
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `admin` WHERE `username` = :username");
+ $stmt->execute(array(
+ ':username' => $username,
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `da_acl` WHERE `username` = :username");
+ $stmt->execute(array(
+ ':username' => $username,
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `tfa` WHERE `username` = :username");
+ $stmt->execute(array(
+ ':username' => $username,
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `fido2` WHERE `username` = :username");
+ $stmt->execute(array(
+ ':username' => $username,
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('domain_admin_removed', htmlspecialchars($username))
+ );
+ }
+ break;
+ case 'get':
+ $domainadmins = array();
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $stmt = $pdo->query("SELECT DISTINCT
+ `username`
+ FROM `domain_admins`
+ WHERE `username` IN (
+ SELECT `username` FROM `admin`
+ WHERE `superadmin`!='1'
+ )");
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while ($row = array_shift($rows)) {
+ $domainadmins[] = $row['username'];
+ }
+ return $domainadmins;
+ break;
+ case 'details':
+ $domainadmindata = array();
+ if ($_SESSION['mailcow_cc_role'] == "domainadmin" && $_data != $_SESSION['mailcow_cc_username']) {
+ return false;
+ }
+ elseif ($_SESSION['mailcow_cc_role'] != "admin" || !isset($_data)) {
+ return false;
+ }
+ if (!ctype_alnum(str_replace(array('_', '.', '-'), '', $_data))) {
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT
+ `tfa`.`active` AS `tfa_active`,
+ `domain_admins`.`username`,
+ `domain_admins`.`created`,
+ `domain_admins`.`active` AS `active`
+ FROM `domain_admins`
+ LEFT OUTER JOIN `tfa` ON `tfa`.`username`=`domain_admins`.`username`
+ WHERE `domain_admins`.`username`= :domain_admin");
+ $stmt->execute(array(
+ ':domain_admin' => $_data
+ ));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (empty($row)) {
+ return false;
+ }
+ $domainadmindata['username'] = $row['username'];
+ $domainadmindata['tfa_active'] = (is_null($row['tfa_active'])) ? 0 : $row['tfa_active'];
+ $domainadmindata['tfa_active_int'] = (is_null($row['tfa_active'])) ? 0 : $row['tfa_active'];
+ $domainadmindata['active'] = $row['active'];
+ $domainadmindata['active_int'] = $row['active'];
+ $domainadmindata['created'] = $row['created'];
+ // GET SELECTED
+ $stmt = $pdo->prepare("SELECT `domain` FROM `domain`
+ WHERE `domain` IN (
+ SELECT `domain` FROM `domain_admins`
+ WHERE `username`= :domain_admin)");
+ $stmt->execute(array(':domain_admin' => $_data));
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while($row = array_shift($rows)) {
+ $domainadmindata['selected_domains'][] = $row['domain'];
+ }
+ // GET UNSELECTED
+ $stmt = $pdo->prepare("SELECT `domain` FROM `domain`
+ WHERE `domain` NOT IN (
+ SELECT `domain` FROM `domain_admins`
+ WHERE `username`= :domain_admin)");
+ $stmt->execute(array(':domain_admin' => $_data));
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while($row = array_shift($rows)) {
+ $domainadmindata['unselected_domains'][] = $row['domain'];
+ }
+ if (!isset($domainadmindata['unselected_domains'])) {
+ $domainadmindata['unselected_domains'] = "";
+ }
+
+ return $domainadmindata;
+ break;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/functions.fail2ban.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/functions.fail2ban.inc.php
new file mode 100644
index 0000000..6f6b024
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/functions.fail2ban.inc.php
@@ -0,0 +1,332 @@
+<?php
+function fail2ban($_action, $_data = null) {
+ global $redis;
+ $_data_log = $_data;
+ switch ($_action) {
+ case 'get':
+ $f2b_options = array();
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ return false;
+ }
+ try {
+ $f2b_options = json_decode($redis->Get('F2B_OPTIONS'), true);
+ $f2b_options['regex'] = json_decode($redis->Get('F2B_REGEX'), true);
+ $wl = $redis->hGetAll('F2B_WHITELIST');
+ if (is_array($wl)) {
+ foreach ($wl as $key => $value) {
+ $tmp_wl_data[] = $key;
+ }
+ if (isset($tmp_wl_data)) {
+ natsort($tmp_wl_data);
+ $f2b_options['whitelist'] = implode(PHP_EOL, $tmp_wl_data);
+ }
+ else {
+ $f2b_options['whitelist'] = "";
+ }
+ }
+ else {
+ $f2b_options['whitelist'] = "";
+ }
+ $bl = $redis->hGetAll('F2B_BLACKLIST');
+ if (is_array($bl)) {
+ foreach ($bl as $key => $value) {
+ $tmp_bl_data[] = $key;
+ }
+ if (isset($tmp_bl_data)) {
+ natsort($tmp_bl_data);
+ $f2b_options['blacklist'] = implode(PHP_EOL, $tmp_bl_data);
+ }
+ else {
+ $f2b_options['blacklist'] = "";
+ }
+ }
+ else {
+ $f2b_options['blacklist'] = "";
+ }
+ $pb = $redis->hGetAll('F2B_PERM_BANS');
+ if (is_array($pb)) {
+ foreach ($pb as $key => $value) {
+ $f2b_options['perm_bans'][] = $key;
+ }
+ }
+ else {
+ $f2b_options['perm_bans'] = "";
+ }
+ $active_bans = $redis->hGetAll('F2B_ACTIVE_BANS');
+ $queue_unban = $redis->hGetAll('F2B_QUEUE_UNBAN');
+ if (is_array($active_bans)) {
+ foreach ($active_bans as $network => $banned_until) {
+ $queued_for_unban = (isset($queue_unban[$network]) && $queue_unban[$network] == 1) ? 1 : 0;
+ $difference = $banned_until - time();
+ $f2b_options['active_bans'][] = array(
+ 'queued_for_unban' => $queued_for_unban,
+ 'network' => $network,
+ 'banned_until' => sprintf('%02dh %02dm %02ds', ($difference/3600), ($difference/60%60), $difference%60)
+ );
+ }
+ }
+ else {
+ $f2b_options['active_bans'] = "";
+ }
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ return $f2b_options;
+ break;
+ case 'edit':
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ // Start to read actions, if any
+ if (isset($_data['action'])) {
+ // Reset regex filters
+ if ($_data['action'] == "reset-regex") {
+ try {
+ $redis->Del('F2B_REGEX');
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ // Rules will also be recreated on log events, but rules may seem empty for a second in the UI
+ docker('post', 'netfilter-mailcow', 'restart');
+ $fail_count = 0;
+ $regex_result = json_decode($redis->Get('F2B_REGEX'), true);
+ while (empty($regex_result) && $fail_count < 10) {
+ $regex_result = json_decode($redis->Get('F2B_REGEX'), true);
+ $fail_count++;
+ sleep(1);
+ }
+ if ($fail_count >= 10) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('reset_f2b_regex')
+ );
+ return false;
+ }
+ }
+ elseif ($_data['action'] == "edit-regex") {
+ if (!empty($_data['regex'])) {
+ $rule_id = 1;
+ $regex_array = array();
+ foreach($_data['regex'] as $regex) {
+ $regex_array[$rule_id] = $regex;
+ $rule_id++;
+ }
+ if (!empty($regex_array)) {
+ $redis->Set('F2B_REGEX', json_encode($regex_array, JSON_UNESCAPED_SLASHES));
+ }
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => print_r($_data, true)
+ );
+ return false;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('object_modified', htmlspecialchars($network))
+ );
+ return true;
+ }
+
+ // Start actions in dependency of network
+ if (!empty($_data['network'])) {
+ $networks = (array)$_data['network'];
+ foreach ($networks as $network) {
+ // Unban network
+ if ($_data['action'] == "unban") {
+ if (valid_network($network)) {
+ try {
+ $redis->hSet('F2B_QUEUE_UNBAN', $network, 1);
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('redis_error', $e)
+ );
+ continue;
+ }
+ }
+ }
+ // Whitelist network
+ elseif ($_data['action'] == "whitelist") {
+ if (empty($network)) { continue; }
+ if (valid_network($network)) {
+ try {
+ $redis->hSet('F2B_WHITELIST', $network, 1);
+ $redis->hDel('F2B_BLACKLIST', $network, 1);
+ $redis->hSet('F2B_QUEUE_UNBAN', $network, 1);
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('redis_error', $e)
+ );
+ continue;
+ }
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('network_host_invalid', $network)
+ );
+ continue;
+ }
+ }
+ // Blacklist network
+ elseif ($_data['action'] == "blacklist") {
+ if (empty($network)) { continue; }
+ if (valid_network($network) && !in_array($network, array(
+ '0.0.0.0',
+ '0.0.0.0/0',
+ getenv('IPV4_NETWORK') . '0/24',
+ getenv('IPV4_NETWORK') . '0',
+ getenv('IPV6_NETWORK')
+ ))) {
+ try {
+ $redis->hSet('F2B_BLACKLIST', $network, 1);
+ $redis->hDel('F2B_WHITELIST', $network, 1);
+ //$response = docker('post', 'netfilter-mailcow', 'restart');
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('redis_error', $e)
+ );
+ continue;
+ }
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('network_host_invalid', $network)
+ );
+ continue;
+ }
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('object_modified', htmlspecialchars($network))
+ );
+ }
+ return true;
+ }
+ }
+ // Start default edit without specific action
+ $is_now = fail2ban('get');
+ if (!empty($is_now)) {
+ $ban_time = intval((isset($_data['ban_time'])) ? $_data['ban_time'] : $is_now['ban_time']);
+ $max_attempts = intval((isset($_data['max_attempts'])) ? $_data['max_attempts'] : $is_now['max_attempts']);
+ $retry_window = intval((isset($_data['retry_window'])) ? $_data['retry_window'] : $is_now['retry_window']);
+ $netban_ipv4 = intval((isset($_data['netban_ipv4'])) ? $_data['netban_ipv4'] : $is_now['netban_ipv4']);
+ $netban_ipv6 = intval((isset($_data['netban_ipv6'])) ? $_data['netban_ipv6'] : $is_now['netban_ipv6']);
+ $wl = (isset($_data['whitelist'])) ? $_data['whitelist'] : $is_now['whitelist'];
+ $bl = (isset($_data['blacklist'])) ? $_data['blacklist'] : $is_now['blacklist'];
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $f2b_options = array();
+ $f2b_options['ban_time'] = ($ban_time < 60) ? 60 : $ban_time;
+ $f2b_options['netban_ipv4'] = ($netban_ipv4 < 8) ? 8 : $netban_ipv4;
+ $f2b_options['netban_ipv6'] = ($netban_ipv6 < 8) ? 8 : $netban_ipv6;
+ $f2b_options['netban_ipv4'] = ($netban_ipv4 > 32) ? 32 : $netban_ipv4;
+ $f2b_options['netban_ipv6'] = ($netban_ipv6 > 128) ? 128 : $netban_ipv6;
+ $f2b_options['max_attempts'] = ($max_attempts < 1) ? 1 : $max_attempts;
+ $f2b_options['retry_window'] = ($retry_window < 1) ? 1 : $retry_window;
+ try {
+ $redis->Set('F2B_OPTIONS', json_encode($f2b_options));
+ $redis->Del('F2B_WHITELIST');
+ $redis->Del('F2B_BLACKLIST');
+ if(!empty($wl)) {
+ $wl_array = array_map('trim', preg_split( "/( |,|;|\n)/", $wl));
+ $wl_array = array_filter($wl_array);
+ if (is_array($wl_array)) {
+ foreach ($wl_array as $wl_item) {
+ if (valid_network($wl_item) || valid_hostname($wl_item)) {
+ $redis->hSet('F2B_WHITELIST', $wl_item, 1);
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('network_host_invalid', $wl_item)
+ );
+ continue;
+ }
+ }
+ }
+ }
+ if(!empty($bl)) {
+ $bl_array = array_map('trim', preg_split( "/( |,|;|\n)/", $bl));
+ $bl_array = array_filter($bl_array);
+ if (is_array($bl_array)) {
+ foreach ($bl_array as $bl_item) {
+ if (valid_network($bl_item) && !in_array($bl_item, array(
+ '0.0.0.0',
+ '0.0.0.0/0',
+ getenv('IPV4_NETWORK') . '0/24',
+ getenv('IPV4_NETWORK') . '0',
+ getenv('IPV6_NETWORK')
+ ))) {
+ $redis->hSet('F2B_BLACKLIST', $bl_item, 1);
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('network_host_invalid', $bl_item)
+ );
+ continue;
+ }
+ }
+ }
+ }
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'f2b_modified'
+ );
+ break;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/functions.fwdhost.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/functions.fwdhost.inc.php
new file mode 100644
index 0000000..5c511f4
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/functions.fwdhost.inc.php
@@ -0,0 +1,183 @@
+<?php
+function fwdhost($_action, $_data = null) {
+ require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/spf.inc.php';
+ global $redis;
+ global $lang;
+ $_data_log = $_data;
+ switch ($_action) {
+ case 'add':
+ global $lang;
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $source = $_data['hostname'];
+ $host = trim($_data['hostname']);
+ $filter_spam = (isset($_data['filter_spam']) && $_data['filter_spam'] == 1) ? 1 : 0;
+ if (preg_match('/^[0-9a-fA-F:\/]+$/', $host)) { // IPv6 address
+ $hosts = array($host);
+ }
+ elseif (preg_match('/^[0-9\.\/]+$/', $host)) { // IPv4 address
+ $hosts = array($host);
+ }
+ else {
+ $hosts = get_outgoing_hosts_best_guess($host);
+ }
+ if (empty($hosts)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('invalid_host', htmlspecialchars($host))
+ );
+ return false;
+ }
+ foreach ($hosts as $host) {
+ try {
+ $redis->hSet('WHITELISTED_FWD_HOST', $host, $source);
+ if ($filter_spam == 0) {
+ $redis->hSet('KEEP_SPAM', $host, 1);
+ }
+ elseif ($redis->hGet('KEEP_SPAM', $host)) {
+ $redis->hDel('KEEP_SPAM', $host);
+ }
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('forwarding_host_added', htmlspecialchars(implode(', ', $hosts)))
+ );
+ break;
+ case 'edit':
+ global $lang;
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $fwdhosts = (array)$_data['fwdhost'];
+ foreach ($fwdhosts as $fwdhost) {
+ $is_now = fwdhost('details', $fwdhost);
+ if (!empty($is_now)) {
+ $keep_spam = (isset($_data['keep_spam'])) ? $_data['keep_spam'] : $is_now['keep_spam'];
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ try {
+ if ($keep_spam == 1) {
+ $redis->hSet('KEEP_SPAM', $fwdhost, 1);
+ }
+ else {
+ $redis->hDel('KEEP_SPAM', $fwdhost);
+ }
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('redis_error', $e)
+ );
+ continue;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('object_modified', htmlspecialchars($fwdhost))
+ );
+ }
+ break;
+ case 'delete':
+ $hosts = (array)$_data['forwardinghost'];
+ foreach ($hosts as $host) {
+ try {
+ $redis->hDel('WHITELISTED_FWD_HOST', $host);
+ $redis->hDel('KEEP_SPAM', $host);
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('redis_error', $e)
+ );
+ continue;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('forwarding_host_removed', htmlspecialchars($host))
+ );
+ }
+ break;
+ case 'get':
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ return false;
+ }
+ $fwdhostsdata = array();
+ try {
+ $fwd_hosts = $redis->hGetAll('WHITELISTED_FWD_HOST');
+ if (!empty($fwd_hosts)) {
+ foreach ($fwd_hosts as $fwd_host => $source) {
+ $keep_spam = ($redis->hGet('KEEP_SPAM', $fwd_host)) ? "yes" : "no";
+ $fwdhostsdata[] = array(
+ 'host' => $fwd_host,
+ 'source' => $source,
+ 'keep_spam' => $keep_spam
+ );
+ }
+ }
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ return $fwdhostsdata;
+ break;
+ case 'details':
+ $fwdhostdetails = array();
+ if (!isset($_data) || empty($_data)) {
+ return false;
+ }
+ try {
+ if ($source = $redis->hGet('WHITELISTED_FWD_HOST', $_data)) {
+ $fwdhostdetails['host'] = $_data;
+ $fwdhostdetails['source'] = $source;
+ $fwdhostdetails['keep_spam'] = ($redis->hGet('KEEP_SPAM', $_data)) ? "yes" : "no";
+ }
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ return $fwdhostdetails;
+ break;
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/functions.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/functions.inc.php
new file mode 100644
index 0000000..e3f2882
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/functions.inc.php
@@ -0,0 +1,1951 @@
+<?php
+use PHPMailer\PHPMailer\PHPMailer;
+use PHPMailer\PHPMailer\SMTP;
+use PHPMailer\PHPMailer\Exception;
+function is_valid_regex($exp) {
+ return @preg_match($exp, '') !== false;
+}
+function isset_has_content($var) {
+ if (isset($var) && $var != "") {
+ return true;
+ }
+ else {
+ return false;
+ }
+}
+// Validates ips and cidrs
+function valid_network($network) {
+ if (filter_var($network, FILTER_VALIDATE_IP)) {
+ return true;
+ }
+ $parts = explode('/', $network);
+ if (count($parts) != 2) {
+ return false;
+ }
+ $ip = $parts[0];
+ $netmask = $parts[1];
+ if (!preg_match("/^\d+$/", $netmask)){
+ return false;
+ }
+ $netmask = intval($parts[1]);
+ if ($netmask < 0) {
+ return false;
+ }
+ if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
+ return $netmask <= 32;
+ }
+ if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
+ return $netmask <= 128;
+ }
+ return false;
+}
+function valid_hostname($hostname) {
+ return filter_var($hostname, FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME);
+}
+// Thanks to https://stackoverflow.com/a/49373789
+// Validates exact ip matches and ip-in-cidr, ipv4 and ipv6
+function ip_acl($ip, $networks) {
+ foreach($networks as $network) {
+ if (filter_var($network, FILTER_VALIDATE_IP)) {
+ if ($ip == $network) {
+ return true;
+ }
+ else {
+ continue;
+ }
+ }
+ $ipb = inet_pton($ip);
+ $iplen = strlen($ipb);
+ if (strlen($ipb) < 4) {
+ continue;
+ }
+ $ar = explode('/', $network);
+ $ip1 = $ar[0];
+ $ip1b = inet_pton($ip1);
+ $ip1len = strlen($ip1b);
+ if ($ip1len != $iplen) {
+ continue;
+ }
+ if (count($ar)>1) {
+ $bits=(int)($ar[1]);
+ }
+ else {
+ $bits = $iplen * 8;
+ }
+ for ($c=0; $bits>0; $c++) {
+ $bytemask = ($bits < 8) ? 0xff ^ ((1 << (8-$bits))-1) : 0xff;
+ if (((ord($ipb[$c]) ^ ord($ip1b[$c])) & $bytemask) != 0) {
+ continue 2;
+ }
+ $bits-=8;
+ }
+ return true;
+ }
+ return false;
+}
+function hash_password($password) {
+ // default_pass_scheme is determined in vars.inc.php (or corresponding local file)
+ // in case default pass scheme is not defined, falling back to BLF-CRYPT.
+ global $default_pass_scheme;
+ $pw_hash = NULL;
+ switch (strtoupper($default_pass_scheme)) {
+ case "SSHA":
+ $salt_str = bin2hex(openssl_random_pseudo_bytes(8));
+ $pw_hash = "{SSHA}".base64_encode(hash('sha1', $password . $salt_str, true) . $salt_str);
+ break;
+ case "SSHA256":
+ $salt_str = bin2hex(openssl_random_pseudo_bytes(8));
+ $pw_hash = "{SSHA256}".base64_encode(hash('sha256', $password . $salt_str, true) . $salt_str);
+ break;
+ case "SSHA512":
+ $salt_str = bin2hex(openssl_random_pseudo_bytes(8));
+ $pw_hash = "{SSHA512}".base64_encode(hash('sha512', $password . $salt_str, true) . $salt_str);
+ break;
+ case "BLF-CRYPT":
+ default:
+ $pw_hash = "{BLF-CRYPT}" . password_hash($password, PASSWORD_BCRYPT);
+ break;
+ }
+ return $pw_hash;
+}
+function last_login($user) {
+ global $pdo;
+ $stmt = $pdo->prepare('SELECT `remote`, `time` FROM `logs`
+ WHERE JSON_EXTRACT(`call`, "$[0]") = "check_login"
+ AND JSON_EXTRACT(`call`, "$[1]") = :user
+ AND `type` = "success" ORDER BY `time` DESC LIMIT 1');
+ $stmt->execute(array(':user' => $user));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (!empty($row)) {
+ return $row;
+ }
+ else {
+ return false;
+ }
+}
+function flush_memcached() {
+ try {
+ $m = new Memcached();
+ $m->addServer('memcached', 11211);
+ $m->flush();
+ }
+ catch ( Exception $e ) {
+ // Dunno
+ }
+}
+function sys_mail($_data) {
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $excludes = $_data['mass_exclude'];
+ $includes = $_data['mass_include'];
+ $mailboxes = array();
+ $mass_from = $_data['mass_from'];
+ $mass_text = $_data['mass_text'];
+ $mass_html = $_data['mass_html'];
+ $mass_subject = $_data['mass_subject'];
+ if (!filter_var($mass_from, FILTER_VALIDATE_EMAIL)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__),
+ 'msg' => 'from_invalid'
+ );
+ return false;
+ }
+ if (empty($mass_subject)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__),
+ 'msg' => 'subject_empty'
+ );
+ return false;
+ }
+ if (empty($mass_text)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__),
+ 'msg' => 'text_empty'
+ );
+ return false;
+ }
+ $domains = array_merge(mailbox('get', 'domains'), mailbox('get', 'alias_domains'));
+ foreach ($domains as $domain) {
+ foreach (mailbox('get', 'mailboxes', $domain) as $mailbox) {
+ $mailboxes[] = $mailbox;
+ }
+ }
+ if (!empty($includes)) {
+ $rcpts = array_intersect($mailboxes, $includes);
+ }
+ elseif (!empty($excludes)) {
+ $rcpts = array_diff($mailboxes, $excludes);
+ }
+ else {
+ $rcpts = $mailboxes;
+ }
+ if (!empty($rcpts)) {
+ ini_set('max_execution_time', 0);
+ ini_set('max_input_time', 0);
+ $mail = new PHPMailer;
+ $mail->Timeout = 10;
+ $mail->SMTPOptions = array(
+ 'ssl' => array(
+ 'verify_peer' => false,
+ 'verify_peer_name' => false,
+ 'allow_self_signed' => true
+ )
+ );
+ $mail->isSMTP();
+ $mail->Host = 'dovecot-mailcow';
+ $mail->SMTPAuth = false;
+ $mail->Port = 24;
+ $mail->setFrom($mass_from);
+ $mail->Subject = $mass_subject;
+ $mail->CharSet ="UTF-8";
+ if (!empty($mass_html)) {
+ $mail->Body = $mass_html;
+ $mail->AltBody = $mass_text;
+ }
+ else {
+ $mail->Body = $mass_text;
+ }
+ $mail->XMailer = 'MooMassMail';
+ foreach ($rcpts as $rcpt) {
+ $mail->AddAddress($rcpt);
+ if (!$mail->send()) {
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__),
+ 'msg' => 'Mailer error (RCPT "' . htmlspecialchars($rcpt) . '"): ' . str_replace('https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting', '', $mail->ErrorInfo)
+ );
+ }
+ $mail->ClearAllRecipients();
+ }
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__),
+ 'msg' => 'Mass mail job completed, sent ' . count($rcpts) . ' mails'
+ );
+}
+function logger($_data = false) {
+ /*
+ logger() will be called as last function
+ To manually log a message, logger needs to be called like below.
+
+ logger(array(
+ 'return' => array(
+ array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__),
+ 'msg' => $err
+ )
+ )
+ ));
+
+ These messages will not be printed as alert box.
+ To do so, push them to $_SESSION['return'] and do not call logger as they will be included automatically:
+
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $user, '*'),
+ 'msg' => $err
+ );
+ */
+ global $pdo;
+ if (!$_data) {
+ $_data = $_SESSION;
+ }
+ if (!empty($_data['return'])) {
+ $task = substr(strtoupper(md5(uniqid(rand(), true))), 0, 6);
+ foreach ($_data['return'] as $return) {
+ $type = $return['type'];
+ $msg = json_encode($return['msg'], JSON_UNESCAPED_UNICODE);
+ $call = json_encode($return['log'], JSON_UNESCAPED_UNICODE);
+ if (!empty($_SESSION["dual-login"]["username"])) {
+ $user = $_SESSION["dual-login"]["username"] . ' => ' . $_SESSION['mailcow_cc_username'];
+ $role = $_SESSION["dual-login"]["role"] . ' => ' . $_SESSION['mailcow_cc_role'];
+ }
+ elseif (!empty($_SESSION['mailcow_cc_username'])) {
+ $user = $_SESSION['mailcow_cc_username'];
+ $role = $_SESSION['mailcow_cc_role'];
+ }
+ else {
+ $user = 'unauthenticated';
+ $role = 'unauthenticated';
+ }
+ // We cannot log when logs is missing...
+ try {
+ $stmt = $pdo->prepare("INSERT INTO `logs` (`type`, `task`, `msg`, `call`, `user`, `role`, `remote`, `time`) VALUES
+ (:type, :task, :msg, :call, :user, :role, :remote, UNIX_TIMESTAMP())");
+ $stmt->execute(array(
+ ':type' => $type,
+ ':task' => $task,
+ ':call' => $call,
+ ':msg' => $msg,
+ ':user' => $user,
+ ':role' => $role,
+ ':remote' => get_remote_ip()
+ ));
+ }
+ catch (Exception $e) {
+ // Do nothing
+ }
+ }
+ }
+ else {
+ return true;
+ }
+}
+function hasDomainAccess($username, $role, $domain) {
+ global $pdo;
+ if (!filter_var($username, FILTER_VALIDATE_EMAIL) && !ctype_alnum(str_replace(array('_', '.', '-'), '', $username))) {
+ return false;
+ }
+ if (empty($domain) || !is_valid_domain_name($domain)) {
+ return false;
+ }
+ if ($role != 'admin' && $role != 'domainadmin') {
+ return false;
+ }
+ if ($role == 'admin') {
+ $stmt = $pdo->prepare("SELECT `domain` FROM `domain`
+ WHERE `domain` = :domain");
+ $stmt->execute(array(':domain' => $domain));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ $stmt = $pdo->prepare("SELECT `alias_domain` FROM `alias_domain`
+ WHERE `alias_domain` = :domain");
+ $stmt->execute(array(':domain' => $domain));
+ $num_results = $num_results + count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ return true;
+ }
+ }
+ elseif ($role == 'domainadmin') {
+ $stmt = $pdo->prepare("SELECT `domain` FROM `domain_admins`
+ WHERE (
+ `active`='1'
+ AND `username` = :username
+ AND (`domain` = :domain1 OR `domain` = (SELECT `target_domain` FROM `alias_domain` WHERE `alias_domain` = :domain2))
+ )");
+ $stmt->execute(array(':username' => $username, ':domain1' => $domain, ':domain2' => $domain));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if (!empty($num_results)) {
+ return true;
+ }
+ }
+ return false;
+}
+function hasMailboxObjectAccess($username, $role, $object) {
+ global $pdo;
+ if (empty($username) || empty($role) || empty($object)) {
+ return false;
+ }
+ if (!filter_var(html_entity_decode(rawurldecode($username)), FILTER_VALIDATE_EMAIL) && !ctype_alnum(str_replace(array('_', '.', '-'), '', $username))) {
+ return false;
+ }
+ if ($role != 'admin' && $role != 'domainadmin' && $role != 'user') {
+ return false;
+ }
+ if ($username == $object) {
+ return true;
+ }
+ $stmt = $pdo->prepare("SELECT `domain` FROM `mailbox` WHERE `username` = :object");
+ $stmt->execute(array(':object' => $object));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (isset($row['domain']) && hasDomainAccess($username, $role, $row['domain'])) {
+ return true;
+ }
+ return false;
+}
+function hasAliasObjectAccess($username, $role, $object) {
+ global $pdo;
+ if (!filter_var(html_entity_decode(rawurldecode($username)), FILTER_VALIDATE_EMAIL) && !ctype_alnum(str_replace(array('_', '.', '-'), '', $username))) {
+ return false;
+ }
+ if ($role != 'admin' && $role != 'domainadmin' && $role != 'user') {
+ return false;
+ }
+ if ($username == $object) {
+ return true;
+ }
+ $stmt = $pdo->prepare("SELECT `domain` FROM `alias` WHERE `address` = :object");
+ $stmt->execute(array(':object' => $object));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (isset($row['domain']) && hasDomainAccess($username, $role, $row['domain'])) {
+ return true;
+ }
+ return false;
+}
+function pem_to_der($pem_key) {
+ // Need to remove BEGIN/END PUBLIC KEY
+ $lines = explode("\n", trim($pem_key));
+ unset($lines[count($lines)-1]);
+ unset($lines[0]);
+ return base64_decode(implode('', $lines));
+}
+function expand_ipv6($ip) {
+ $hex = unpack("H*hex", inet_pton($ip));
+ $ip = substr(preg_replace("/([A-f0-9]{4})/", "$1:", $hex['hex']), 0, -1);
+ return $ip;
+}
+function generate_tlsa_digest($hostname, $port, $starttls = null) {
+ if (!is_valid_domain_name($hostname)) {
+ return "Not a valid hostname";
+ }
+ if (empty($starttls)) {
+ $context = stream_context_create(array("ssl" => array("capture_peer_cert" => true, 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true)));
+ $stream = stream_socket_client('ssl://' . $hostname . ':' . $port, $error_nr, $error_msg, 5, STREAM_CLIENT_CONNECT, $context);
+ if (!$stream) {
+ $error_msg = isset($error_msg) ? $error_msg : '-';
+ return $error_nr . ': ' . $error_msg;
+ }
+ }
+ else {
+ $stream = stream_socket_client('tcp://' . $hostname . ':' . $port, $error_nr, $error_msg, 5);
+ if (!$stream) {
+ return $error_nr . ': ' . $error_msg;
+ }
+ $banner = fread($stream, 512 );
+ if (preg_match("/^220/i", $banner)) { // SMTP
+ fwrite($stream,"HELO tlsa.generator.local\r\n");
+ fread($stream, 512);
+ fwrite($stream,"STARTTLS\r\n");
+ fread($stream, 512);
+ }
+ elseif (preg_match("/imap.+starttls/i", $banner)) { // IMAP
+ fwrite($stream,"A1 STARTTLS\r\n");
+ fread($stream, 512);
+ }
+ elseif (preg_match("/^\+OK/", $banner)) { // POP3
+ fwrite($stream,"STLS\r\n");
+ fread($stream, 512);
+ }
+ elseif (preg_match("/^OK/m", $banner)) { // Sieve
+ fwrite($stream,"STARTTLS\r\n");
+ fread($stream, 512);
+ }
+ else {
+ return 'Unknown banner: "' . htmlspecialchars(trim($banner)) . '"';
+ }
+ // Upgrade connection
+ stream_set_blocking($stream, true);
+ stream_context_set_option($stream, 'ssl', 'capture_peer_cert', true);
+ stream_context_set_option($stream, 'ssl', 'verify_peer', false);
+ stream_context_set_option($stream, 'ssl', 'verify_peer_name', false);
+ stream_context_set_option($stream, 'ssl', 'allow_self_signed', true);
+ stream_socket_enable_crypto($stream, true, STREAM_CRYPTO_METHOD_ANY_CLIENT);
+ stream_set_blocking($stream, false);
+ }
+ $params = stream_context_get_params($stream);
+ if (!empty($params['options']['ssl']['peer_certificate'])) {
+ $key_resource = openssl_pkey_get_public($params['options']['ssl']['peer_certificate']);
+ // We cannot get ['rsa']['n'], the binary data would contain BEGIN/END PUBLIC KEY
+ $key_data = openssl_pkey_get_details($key_resource)['key'];
+ return '3 1 1 ' . openssl_digest(pem_to_der($key_data), 'sha256');
+ }
+ else {
+ return 'Error: Cannot read peer certificate';
+ }
+}
+function alertbox_log_parser($_data){
+ global $lang;
+ if (isset($_data['return'])) {
+ foreach ($_data['return'] as $return) {
+ // Get type
+ $type = $return['type'];
+ // If a lang[type][msg] string exists, use it as message
+ if (is_string($lang[$return['type']][$return['msg']])) {
+ $msg = $lang[$return['type']][$return['msg']];
+ }
+ // If msg is an array, use first element as language string and run printf on it with remaining array elements
+ elseif (is_array($return['msg'])) {
+ $msg = array_shift($return['msg']);
+ $msg = vsprintf(
+ $lang[$return['type']][$msg],
+ $return['msg']
+ );
+ }
+ // If none applies, use msg as returned message
+ else {
+ $msg = $return['msg'];
+ }
+ $log_array[] = array('msg' => $msg, 'type' => json_encode($type));
+ }
+ if (!empty($log_array)) {
+ return $log_array;
+ }
+ }
+ return false;
+}
+function verify_hash($hash, $password) {
+ if (preg_match('/^{SSHA256}/i', $hash)) {
+ // Remove tag if any
+ $hash = preg_replace('/^{SSHA256}/i', '', $hash);
+ // Decode hash
+ $dhash = base64_decode($hash);
+ // Get first 32 bytes of binary which equals a SHA256 hash
+ $ohash = substr($dhash, 0, 32);
+ // Remove SHA256 hash from decoded hash to get original salt string
+ $osalt = str_replace($ohash, '', $dhash);
+ // Check single salted SHA256 hash against extracted hash
+ if (hash_equals(hash('sha256', $password . $osalt, true), $ohash)) {
+ return true;
+ }
+ }
+ elseif (preg_match('/^{SSHA}/i', $hash)) {
+ // Remove tag if any
+ $hash = preg_replace('/^{SSHA}/i', '', $hash);
+ // Decode hash
+ $dhash = base64_decode($hash);
+ // Get first 20 bytes of binary which equals a SSHA hash
+ $ohash = substr($dhash, 0, 20);
+ // Remove SSHA hash from decoded hash to get original salt string
+ $osalt = str_replace($ohash, '', $dhash);
+ // Check single salted SSHA hash against extracted hash
+ if (hash_equals(hash('sha1', $password . $osalt, true), $ohash)) {
+ return true;
+ }
+ }
+ elseif (preg_match('/^{PLAIN-MD5}/i', $hash)) {
+ $hash = preg_replace('/^{PLAIN-MD5}/i', '', $hash);
+ if (md5($password) == $hash) {
+ return true;
+ }
+ }
+ elseif (preg_match('/^{SHA512-CRYPT}/i', $hash)) {
+ // Remove tag if any
+ $hash = preg_replace('/^{SHA512-CRYPT}/i', '', $hash);
+ // Decode hash
+ preg_match('/\\$6\\$(.*)\\$(.*)/i', $hash, $hash_array);
+ $osalt = $hash_array[1];
+ $ohash = $hash_array[2];
+ if (hash_equals(crypt($password, '$6$' . $osalt . '$'), $hash)) {
+ return true;
+ }
+ }
+ elseif (preg_match('/^{SSHA512}/i', $hash)) {
+ $hash = preg_replace('/^{SSHA512}/i', '', $hash);
+ // Decode hash
+ $dhash = base64_decode($hash);
+ // Get first 64 bytes of binary which equals a SHA512 hash
+ $ohash = substr($dhash, 0, 64);
+ // Remove SHA512 hash from decoded hash to get original salt string
+ $osalt = str_replace($ohash, '', $dhash);
+ // Check single salted SHA512 hash against extracted hash
+ if (hash_equals(hash('sha512', $password . $osalt, true), $ohash)) {
+ return true;
+ }
+ }
+ elseif (preg_match('/^{MD5-CRYPT}/i', $hash)) {
+ $hash = preg_replace('/^{MD5-CRYPT}/i', '', $hash);
+ if (password_verify($password, $hash)) {
+ return true;
+ }
+ }
+ elseif (preg_match('/^{BLF-CRYPT}/i', $hash)) {
+ $hash = preg_replace('/^{BLF-CRYPT}/i', '', $hash);
+ if (password_verify($password, $hash)) {
+ return true;
+ }
+ }
+ return false;
+}
+function check_login($user, $pass) {
+ global $pdo;
+ global $redis;
+ global $imap_server;
+ if (!filter_var($user, FILTER_VALIDATE_EMAIL) && !ctype_alnum(str_replace(array('_', '.', '-'), '', $user))) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $user, '*'),
+ 'msg' => 'malformed_username'
+ );
+ return false;
+ }
+ $user = strtolower(trim($user));
+ $stmt = $pdo->prepare("SELECT `password` FROM `admin`
+ WHERE `superadmin` = '1'
+ AND `active` = '1'
+ AND `username` = :user");
+ $stmt->execute(array(':user' => $user));
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ foreach ($rows as $row) {
+ if (verify_hash($row['password'], $pass)) {
+ if (get_tfa($user)['name'] != "none") {
+ $_SESSION['pending_mailcow_cc_username'] = $user;
+ $_SESSION['pending_mailcow_cc_role'] = "admin";
+ $_SESSION['pending_tfa_method'] = get_tfa($user)['name'];
+ unset($_SESSION['ldelay']);
+ $_SESSION['return'][] = array(
+ 'type' => 'info',
+ 'log' => array(__FUNCTION__, $user, '*'),
+ 'msg' => 'awaiting_tfa_confirmation'
+ );
+ return "pending";
+ }
+ else {
+ unset($_SESSION['ldelay']);
+ // Reactivate TFA if it was set to "deactivate TFA for next login"
+ $stmt = $pdo->prepare("UPDATE `tfa` SET `active`='1' WHERE `username` = :user");
+ $stmt->execute(array(':user' => $user));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $user, '*'),
+ 'msg' => array('logged_in_as', $user)
+ );
+ return "admin";
+ }
+ }
+ }
+ $stmt = $pdo->prepare("SELECT `password` FROM `admin`
+ WHERE `superadmin` = '0'
+ AND `active`='1'
+ AND `username` = :user");
+ $stmt->execute(array(':user' => $user));
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ foreach ($rows as $row) {
+ if (verify_hash($row['password'], $pass) !== false) {
+ if (get_tfa($user)['name'] != "none") {
+ $_SESSION['pending_mailcow_cc_username'] = $user;
+ $_SESSION['pending_mailcow_cc_role'] = "domainadmin";
+ $_SESSION['pending_tfa_method'] = get_tfa($user)['name'];
+ unset($_SESSION['ldelay']);
+ $_SESSION['return'][] = array(
+ 'type' => 'info',
+ 'log' => array(__FUNCTION__, $user, '*'),
+ 'msg' => 'awaiting_tfa_confirmation'
+ );
+ return "pending";
+ }
+ else {
+ unset($_SESSION['ldelay']);
+ // Reactivate TFA if it was set to "deactivate TFA for next login"
+ $stmt = $pdo->prepare("UPDATE `tfa` SET `active`='1' WHERE `username` = :user");
+ $stmt->execute(array(':user' => $user));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $user, '*'),
+ 'msg' => array('logged_in_as', $user)
+ );
+ return "domainadmin";
+ }
+ }
+ }
+ $stmt = $pdo->prepare("SELECT `password` FROM `mailbox`
+ INNER JOIN domain on mailbox.domain = domain.domain
+ WHERE `kind` NOT REGEXP 'location|thing|group'
+ AND `mailbox`.`active`='1'
+ AND `domain`.`active`='1'
+ AND `username` = :user");
+ $stmt->execute(array(':user' => $user));
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ foreach ($rows as $row) {
+ if (verify_hash($row['password'], $pass) !== false) {
+ unset($_SESSION['ldelay']);
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $user, '*'),
+ 'msg' => array('logged_in_as', $user)
+ );
+ return "user";
+ }
+ }
+ if (!isset($_SESSION['ldelay'])) {
+ $_SESSION['ldelay'] = "0";
+ $redis->publish("F2B_CHANNEL", "mailcow UI: Invalid password for " . $user . " by " . $_SERVER['REMOTE_ADDR']);
+ error_log("mailcow UI: Invalid password for " . $user . " by " . $_SERVER['REMOTE_ADDR']);
+ }
+ elseif (!isset($_SESSION['mailcow_cc_username'])) {
+ $_SESSION['ldelay'] = $_SESSION['ldelay']+0.5;
+ $redis->publish("F2B_CHANNEL", "mailcow UI: Invalid password for " . $user . " by " . $_SERVER['REMOTE_ADDR']);
+ error_log("mailcow UI: Invalid password for " . $user . " by " . $_SERVER['REMOTE_ADDR']);
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $user, '*'),
+ 'msg' => 'login_failed'
+ );
+ sleep($_SESSION['ldelay']);
+ return false;
+}
+function formatBytes($size, $precision = 2) {
+ if(!is_numeric($size)) {
+ return "0";
+ }
+ $base = log($size, 1024);
+ $suffixes = array(' Byte', ' KiB', ' MiB', ' GiB', ' TiB');
+ if ($size == "0") {
+ return "0";
+ }
+ return round(pow(1024, $base - floor($base)), $precision) . $suffixes[floor($base)];
+}
+function update_sogo_static_view() {
+ if (getenv('SKIP_SOGO') == "y") {
+ return true;
+ }
+ global $pdo;
+ global $lang;
+ $stmt = $pdo->query("SELECT 'OK' FROM INFORMATION_SCHEMA.TABLES
+ WHERE TABLE_NAME = 'sogo_view'");
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $stmt = $pdo->query("REPLACE INTO _sogo_static_view (`c_uid`, `domain`, `c_name`, `c_password`, `c_cn`, `mail`, `aliases`, `ad_aliases`, `ext_acl`, `kind`, `multiple_bookings`)
+ SELECT `c_uid`, `domain`, `c_name`, `c_password`, `c_cn`, `mail`, `aliases`, `ad_aliases`, `ext_acl`, `kind`, `multiple_bookings` from sogo_view");
+ $stmt = $pdo->query("DELETE FROM _sogo_static_view WHERE `c_uid` NOT IN (SELECT `username` FROM `mailbox` WHERE `active` = '1');");
+ }
+ flush_memcached();
+}
+function edit_user_account($_data) {
+ global $lang;
+ global $pdo;
+ $_data_log = $_data;
+ !isset($_data_log['user_new_pass']) ?: $_data_log['user_new_pass'] = '*';
+ !isset($_data_log['user_new_pass2']) ?: $_data_log['user_new_pass2'] = '*';
+ !isset($_data_log['user_old_pass']) ?: $_data_log['user_old_pass'] = '*';
+ $username = $_SESSION['mailcow_cc_username'];
+ $role = $_SESSION['mailcow_cc_role'];
+ $password_old = $_data['user_old_pass'];
+ if (filter_var($username, FILTER_VALIDATE_EMAIL === false) || $role != 'user') {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ if (isset($_data['user_new_pass']) && isset($_data['user_new_pass2'])) {
+ $password_new = $_data['user_new_pass'];
+ $password_new2 = $_data['user_new_pass2'];
+ }
+ $stmt = $pdo->prepare("SELECT `password` FROM `mailbox`
+ WHERE `kind` NOT REGEXP 'location|thing|group'
+ AND `username` = :user");
+ $stmt->execute(array(':user' => $username));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (!verify_hash($row['password'], $password_old)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ if (isset($password_new) && isset($password_new2)) {
+ if (!empty($password_new2) && !empty($password_new)) {
+ if ($password_new2 != $password_new) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_data_log),
+ 'msg' => 'password_mismatch'
+ );
+ return false;
+ }
+ if (!preg_match('/' . $GLOBALS['PASSWD_REGEP'] . '/', $password_new)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_data_log),
+ 'msg' => 'password_complexity'
+ );
+ return false;
+ }
+ $password_hashed = hash_password($password_new);
+ try {
+ $stmt = $pdo->prepare("UPDATE `mailbox` SET `password` = :password_hashed, `attributes` = JSON_SET(`attributes`, '$.force_pw_update', '0') WHERE `username` = :username");
+ $stmt->execute(array(
+ ':password_hashed' => $password_hashed,
+ ':username' => $username
+ ));
+ }
+ catch (PDOException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_data_log),
+ 'msg' => array('mysql_error', $e)
+ );
+ return false;
+ }
+ }
+ }
+ update_sogo_static_view();
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_data_log),
+ 'msg' => array('mailbox_modified', htmlspecialchars($username))
+ );
+}
+function user_get_alias_details($username) {
+ global $pdo;
+ $data['direct_aliases'] = false;
+ $data['shared_aliases'] = false;
+ if ($_SESSION['mailcow_cc_role'] == "user") {
+ $username = $_SESSION['mailcow_cc_username'];
+ }
+ if (!filter_var($username, FILTER_VALIDATE_EMAIL)) {
+ return false;
+ }
+ $data['address'] = $username;
+ $stmt = $pdo->prepare("SELECT `address` AS `shared_aliases`, `public_comment` FROM `alias`
+ WHERE `goto` REGEXP :username_goto
+ AND `address` NOT LIKE '@%'
+ AND `goto` != :username_goto2
+ AND `address` != :username_address");
+ $stmt->execute(array(
+ ':username_goto' => '(^|,)'.$username.'($|,)',
+ ':username_goto2' => $username,
+ ':username_address' => $username
+ ));
+ $run = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while ($row = array_shift($run)) {
+ $data['shared_aliases'][$row['shared_aliases']]['public_comment'] = htmlspecialchars($row['public_comment']);
+
+ //$data['shared_aliases'][] = $row['shared_aliases'];
+ }
+
+ $stmt = $pdo->prepare("SELECT `address` AS `direct_aliases`, `public_comment` FROM `alias`
+ WHERE `goto` = :username_goto
+ AND `address` NOT LIKE '@%'
+ AND `address` != :username_address");
+ $stmt->execute(
+ array(
+ ':username_goto' => $username,
+ ':username_address' => $username
+ ));
+ $run = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while ($row = array_shift($run)) {
+ $data['direct_aliases'][$row['direct_aliases']]['public_comment'] = htmlspecialchars($row['public_comment']);
+ }
+ $stmt = $pdo->prepare("SELECT CONCAT(local_part, '@', alias_domain) AS `ad_alias`, `alias_domain` FROM `mailbox`
+ LEFT OUTER JOIN `alias_domain` on `target_domain` = `domain`
+ WHERE `username` = :username ;");
+ $stmt->execute(array(':username' => $username));
+ $run = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while ($row = array_shift($run)) {
+ if (empty($row['ad_alias'])) {
+ continue;
+ }
+ $data['direct_aliases'][$row['ad_alias']]['public_comment'] = '↪ ' . $row['alias_domain'];
+ }
+ $stmt = $pdo->prepare("SELECT IFNULL(GROUP_CONCAT(`send_as` SEPARATOR ', '), '✘') AS `send_as` FROM `sender_acl` WHERE `logged_in_as` = :username AND `send_as` NOT LIKE '@%';");
+ $stmt->execute(array(':username' => $username));
+ $run = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while ($row = array_shift($run)) {
+ $data['aliases_also_send_as'] = $row['send_as'];
+ }
+ $stmt = $pdo->prepare("SELECT CONCAT_WS(', ', IFNULL(GROUP_CONCAT(DISTINCT `send_as` SEPARATOR ', '), '✘'), GROUP_CONCAT(DISTINCT CONCAT('@',`alias_domain`) SEPARATOR ', ')) AS `send_as` FROM `sender_acl` LEFT JOIN `alias_domain` ON `alias_domain`.`target_domain` = TRIM(LEADING '@' FROM `send_as`) WHERE `logged_in_as` = :username AND `send_as` LIKE '@%';");
+ $stmt->execute(array(':username' => $username));
+ $run = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while ($row = array_shift($run)) {
+ $data['aliases_send_as_all'] = $row['send_as'];
+ }
+ $stmt = $pdo->prepare("SELECT IFNULL(GROUP_CONCAT(`address` SEPARATOR ', '), '✘') as `address` FROM `alias` WHERE `goto` REGEXP :username AND `address` LIKE '@%';");
+ $stmt->execute(array(':username' => '(^|,)'.$username.'($|,)'));
+ $run = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while ($row = array_shift($run)) {
+ $data['is_catch_all'] = $row['address'];
+ }
+ return $data;
+}
+function is_valid_domain_name($domain_name) {
+ if (empty($domain_name)) {
+ return false;
+ }
+ $domain_name = idn_to_ascii($domain_name, 0, INTL_IDNA_VARIANT_UTS46);
+ return (preg_match("/^([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i", $domain_name)
+ && preg_match("/^.{1,253}$/", $domain_name)
+ && preg_match("/^[^\.]{1,63}(\.[^\.]{1,63})*$/", $domain_name));
+}
+function set_tfa($_data) {
+ global $pdo;
+ global $yubi;
+ global $u2f;
+ global $tfa;
+ $_data_log = $_data;
+ !isset($_data_log['confirm_password']) ?: $_data_log['confirm_password'] = '*';
+ $username = $_SESSION['mailcow_cc_username'];
+ if ($_SESSION['mailcow_cc_role'] != "domainadmin" &&
+ $_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT `password` FROM `admin`
+ WHERE `username` = :user");
+ $stmt->execute(array(':user' => $username));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (!verify_hash($row['password'], $_data["confirm_password"])) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+
+ switch ($_data["tfa_method"]) {
+ case "yubi_otp":
+ $key_id = (!isset($_data["key_id"])) ? 'unidentified' : $_data["key_id"];
+ $yubico_id = $_data['yubico_id'];
+ $yubico_key = $_data['yubico_key'];
+ $yubi = new Auth_Yubico($yubico_id, $yubico_key);
+ if (!$yubi) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ if (!ctype_alnum($_data["otp_token"]) || strlen($_data["otp_token"]) != 44) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_data_log),
+ 'msg' => 'tfa_token_invalid'
+ );
+ return false;
+ }
+ $yauth = $yubi->verify($_data["otp_token"]);
+ if (PEAR::isError($yauth)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_data_log),
+ 'msg' => array('yotp_verification_failed', $yauth->getMessage())
+ );
+ return false;
+ }
+ try {
+ // We could also do a modhex translation here
+ $yubico_modhex_id = substr($_data["otp_token"], 0, 12);
+ $stmt = $pdo->prepare("DELETE FROM `tfa`
+ WHERE `username` = :username
+ AND (`authmech` != 'yubi_otp')
+ OR (`authmech` = 'yubi_otp' AND `secret` LIKE :modhex)");
+ $stmt->execute(array(':username' => $username, ':modhex' => '%' . $yubico_modhex_id));
+ $stmt = $pdo->prepare("INSERT INTO `tfa` (`key_id`, `username`, `authmech`, `active`, `secret`) VALUES
+ (:key_id, :username, 'yubi_otp', '1', :secret)");
+ $stmt->execute(array(':key_id' => $key_id, ':username' => $username, ':secret' => $yubico_id . ':' . $yubico_key . ':' . $yubico_modhex_id));
+ }
+ catch (PDOException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_data_log),
+ 'msg' => array('mysql_error', $e)
+ );
+ return false;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_data_log),
+ 'msg' => array('object_modified', htmlspecialchars($username))
+ );
+ break;
+ case "u2f":
+ $key_id = (!isset($_data["key_id"])) ? 'unidentified' : $_data["key_id"];
+ try {
+ $reg = $u2f->doRegister(json_decode($_SESSION['regReq']), json_decode($_data['token']));
+ $stmt = $pdo->prepare("DELETE FROM `tfa` WHERE `username` = :username AND `authmech` != 'u2f'");
+ $stmt->execute(array(':username' => $username));
+ $stmt = $pdo->prepare("INSERT INTO `tfa` (`username`, `key_id`, `authmech`, `keyHandle`, `publicKey`, `certificate`, `counter`, `active`) VALUES (?, ?, 'u2f', ?, ?, ?, ?, '1')");
+ $stmt->execute(array($username, $key_id, $reg->keyHandle, $reg->publicKey, $reg->certificate, $reg->counter));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_data_log),
+ 'msg' => array('object_modified', $username)
+ );
+ $_SESSION['regReq'] = null;
+ }
+ catch (Exception $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_data_log),
+ 'msg' => array('u2f_verification_failed', $e->getMessage())
+ );
+ $_SESSION['regReq'] = null;
+ return false;
+ }
+ break;
+ case "totp":
+ $key_id = (!isset($_data["key_id"])) ? 'unidentified' : $_data["key_id"];
+ if ($tfa->verifyCode($_POST['totp_secret'], $_POST['totp_confirm_token']) === true) {
+ $stmt = $pdo->prepare("DELETE FROM `tfa` WHERE `username` = :username");
+ $stmt->execute(array(':username' => $username));
+ $stmt = $pdo->prepare("INSERT INTO `tfa` (`username`, `key_id`, `authmech`, `secret`, `active`) VALUES (?, ?, 'totp', ?, '1')");
+ $stmt->execute(array($username, $key_id, $_POST['totp_secret']));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_data_log),
+ 'msg' => array('object_modified', $username)
+ );
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_data_log),
+ 'msg' => 'totp_verification_failed'
+ );
+ }
+ break;
+ case "none":
+ $stmt = $pdo->prepare("DELETE FROM `tfa` WHERE `username` = :username");
+ $stmt->execute(array(':username' => $username));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_data_log),
+ 'msg' => array('object_modified', htmlspecialchars($username))
+ );
+ break;
+ }
+}
+function fido2($_data) {
+ global $pdo;
+ $_data_log = $_data;
+ // Not logging registration data, only actions
+ // Silent errors for "get" requests
+ switch ($_data["action"]) {
+ case "register":
+ $username = $_SESSION['mailcow_cc_username'];
+ if ($_SESSION['mailcow_cc_role'] != "domainadmin" &&
+ $_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_data["action"]),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("INSERT INTO `fido2` (`username`, `rpId`, `credentialPublicKey`, `certificateChain`, `certificate`, `certificateIssuer`, `certificateSubject`, `signatureCounter`, `AAGUID`, `credentialId`)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
+ $stmt->execute(array(
+ $username,
+ $_data['registration']->rpId,
+ $_data['registration']->credentialPublicKey,
+ $_data['registration']->certificateChain,
+ $_data['registration']->certificate,
+ $_data['registration']->certificateIssuer,
+ $_data['registration']->certificateSubject,
+ $_data['registration']->signatureCounter,
+ $_data['registration']->AAGUID,
+ $_data['registration']->credentialId)
+ );
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_data["action"]),
+ 'msg' => array('object_modified', $username)
+ );
+ break;
+ case "get_user_cids":
+ // Used to exclude existing CredentialIds while registering
+ $username = $_SESSION['mailcow_cc_username'];
+ if ($_SESSION['mailcow_cc_role'] != "domainadmin" &&
+ $_SESSION['mailcow_cc_role'] != "admin") {
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT `credentialId` FROM `fido2` WHERE `username` = :username");
+ $stmt->execute(array(':username' => $username));
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while($row = array_shift($rows)) {
+ $cids[] = $row['credentialId'];
+ }
+ return $cids;
+ break;
+ case "get_all_cids":
+ // Only needed when using fido2 with username
+ $stmt = $pdo->query("SELECT `credentialId` FROM `fido2`");
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while($row = array_shift($rows)) {
+ $cids[] = $row['credentialId'];
+ }
+ return $cids;
+ break;
+ case "get_by_b64cid":
+ if (!isset($_data['cid']) || empty($_data['cid'])) {
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT `certificateSubject`, `username`, `credentialPublicKey`, SHA2(`credentialId`, 256) AS `cid` FROM `fido2` WHERE TO_BASE64(`credentialId`) = :cid");
+ $stmt->execute(array(':cid' => $_data['cid']));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (empty($row) || empty($row['credentialPublicKey']) || empty($row['username'])) {
+ return false;
+ }
+ $data['pub_key'] = $row['credentialPublicKey'];
+ $data['username'] = $row['username'];
+ $data['subject'] = $row['certificateSubject'];
+ $data['cid'] = $row['cid'];
+ return $data;
+ break;
+ case "get_friendly_names":
+ $username = $_SESSION['mailcow_cc_username'];
+ if ($_SESSION['mailcow_cc_role'] != "domainadmin" &&
+ $_SESSION['mailcow_cc_role'] != "admin") {
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT SHA2(`credentialId`, 256) AS `cid`, `created`, `certificateSubject`, `friendlyName` FROM `fido2` WHERE `username` = :username");
+ $stmt->execute(array(':username' => $username));
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while($row = array_shift($rows)) {
+ $fns[] = array(
+ "subject" => (empty($row['certificateSubject']) ? 'Unknown (' . $row['created'] . ')' : $row['certificateSubject']),
+ "fn" => $row['friendlyName'],
+ "cid" => $row['cid']
+ );
+ }
+ return $fns;
+ break;
+ case "unset_fido2_key":
+ $username = $_SESSION['mailcow_cc_username'];
+ if ($_SESSION['mailcow_cc_role'] != "domainadmin" &&
+ $_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_data["action"]),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("DELETE FROM `fido2` WHERE `username` = :username AND SHA2(`credentialId`, 256) = :cid");
+ $stmt->execute(array(
+ ':username' => $username,
+ ':cid' => $_data['post_data']['unset_fido2_key']
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_data_log),
+ 'msg' => array('object_modified', htmlspecialchars($username))
+ );
+ break;
+ case "edit_fn":
+ $username = $_SESSION['mailcow_cc_username'];
+ if ($_SESSION['mailcow_cc_role'] != "domainadmin" &&
+ $_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_data["action"]),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("UPDATE `fido2` SET `friendlyName` = :friendlyName WHERE SHA2(`credentialId`, 256) = :cid AND `username` = :username");
+ $stmt->execute(array(
+ ':username' => $username,
+ ':friendlyName' => $_data['fido2_attrs']['fido2_fn'],
+ ':cid' => $_data['fido2_attrs']['fido2_cid']
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_data_log),
+ 'msg' => array('object_modified', htmlspecialchars($username))
+ );
+ break;
+ }
+}
+function unset_tfa_key($_data) {
+ // Can only unset own keys
+ // Needs at least one key left
+ global $pdo;
+ global $lang;
+ $_data_log = $_data;
+ $id = intval($_data['unset_tfa_key']);
+ $username = $_SESSION['mailcow_cc_username'];
+ if ($_SESSION['mailcow_cc_role'] != "domainadmin" &&
+ $_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ try {
+ if (!is_numeric($id)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT COUNT(*) AS `keys` FROM `tfa`
+ WHERE `username` = :username AND `active` = '1'");
+ $stmt->execute(array(':username' => $username));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+ if ($row['keys'] == "1") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_data_log),
+ 'msg' => 'last_key'
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("DELETE FROM `tfa` WHERE `username` = :username AND `id` = :id");
+ $stmt->execute(array(':username' => $username, ':id' => $id));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_data_log),
+ 'msg' => array('object_modified', $username)
+ );
+ }
+ catch (PDOException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_data_log),
+ 'msg' => array('mysql_error', $e)
+ );
+ return false;
+ }
+}
+function get_tfa($username = null) {
+ global $pdo;
+ if (isset($_SESSION['mailcow_cc_username'])) {
+ $username = $_SESSION['mailcow_cc_username'];
+ }
+ elseif (empty($username)) {
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT * FROM `tfa`
+ WHERE `username` = :username AND `active` = '1'");
+ $stmt->execute(array(':username' => $username));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+
+ switch ($row["authmech"]) {
+ case "yubi_otp":
+ $data['name'] = "yubi_otp";
+ $data['pretty'] = "Yubico OTP";
+ $stmt = $pdo->prepare("SELECT `id`, `key_id`, RIGHT(`secret`, 12) AS 'modhex' FROM `tfa` WHERE `authmech` = 'yubi_otp' AND `username` = :username");
+ $stmt->execute(array(
+ ':username' => $username,
+ ));
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while($row = array_shift($rows)) {
+ $data['additional'][] = $row;
+ }
+ return $data;
+ break;
+ case "u2f":
+ $data['name'] = "u2f";
+ $data['pretty'] = "Fido U2F";
+ $stmt = $pdo->prepare("SELECT `id`, `key_id` FROM `tfa` WHERE `authmech` = 'u2f' AND `username` = :username");
+ $stmt->execute(array(
+ ':username' => $username,
+ ));
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while($row = array_shift($rows)) {
+ $data['additional'][] = $row;
+ }
+ return $data;
+ break;
+ case "hotp":
+ $data['name'] = "hotp";
+ $data['pretty'] = "HMAC-based OTP";
+ return $data;
+ break;
+ case "totp":
+ $data['name'] = "totp";
+ $data['pretty'] = "Time-based OTP";
+ $stmt = $pdo->prepare("SELECT `id`, `key_id`, `secret` FROM `tfa` WHERE `authmech` = 'totp' AND `username` = :username");
+ $stmt->execute(array(
+ ':username' => $username,
+ ));
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while($row = array_shift($rows)) {
+ $data['additional'][] = $row;
+ }
+ return $data;
+ break;
+ default:
+ $data['name'] = 'none';
+ $data['pretty'] = "-";
+ return $data;
+ break;
+ }
+}
+function verify_tfa_login($username, $token) {
+ global $pdo;
+ global $yubi;
+ global $u2f;
+ global $tfa;
+ $stmt = $pdo->prepare("SELECT `authmech` FROM `tfa`
+ WHERE `username` = :username AND `active` = '1'");
+ $stmt->execute(array(':username' => $username));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+
+ switch ($row["authmech"]) {
+ case "yubi_otp":
+ if (!ctype_alnum($token) || strlen($token) != 44) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $username, '*'),
+ 'msg' => array('yotp_verification_failed', 'token length error')
+ );
+ return false;
+ }
+ $yubico_modhex_id = substr($token, 0, 12);
+ $stmt = $pdo->prepare("SELECT `id`, `secret` FROM `tfa`
+ WHERE `username` = :username
+ AND `authmech` = 'yubi_otp'
+ AND `active`='1'
+ AND `secret` LIKE :modhex");
+ $stmt->execute(array(':username' => $username, ':modhex' => '%' . $yubico_modhex_id));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+ $yubico_auth = explode(':', $row['secret']);
+ $yubi = new Auth_Yubico($yubico_auth[0], $yubico_auth[1]);
+ $yauth = $yubi->verify($token);
+ if (PEAR::isError($yauth)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $username, '*'),
+ 'msg' => array('yotp_verification_failed', $yauth->getMessage())
+ );
+ return false;
+ }
+ else {
+ $_SESSION['tfa_id'] = $row['id'];
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $username, '*'),
+ 'msg' => 'verified_yotp_login'
+ );
+ return true;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $username, '*'),
+ 'msg' => array('yotp_verification_failed', 'unknown')
+ );
+ return false;
+ break;
+ case "u2f":
+ try {
+ $reg = $u2f->doAuthenticate(json_decode($_SESSION['authReq']), get_u2f_registrations($username), json_decode($token));
+ $stmt = $pdo->prepare("SELECT `id` FROM `tfa` WHERE `keyHandle` = ?");
+ $stmt->execute(array($reg->keyHandle));
+ $row_key_id = $stmt->fetch(PDO::FETCH_ASSOC);
+ $_SESSION['tfa_id'] = $row_key_id['id'];
+ $_SESSION['authReq'] = null;
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $username, '*'),
+ 'msg' => 'verified_u2f_login'
+ );
+ return true;
+ }
+ catch (Exception $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $username, '*'),
+ 'msg' => array('u2f_verification_failed', $e->getMessage())
+ );
+ $_SESSION['regReq'] = null;
+ return false;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $username, '*'),
+ 'msg' => array('u2f_verification_failed', 'unknown')
+ );
+ return false;
+ break;
+ case "hotp":
+ return false;
+ break;
+ case "totp":
+ try {
+ $stmt = $pdo->prepare("SELECT `id`, `secret` FROM `tfa`
+ WHERE `username` = :username
+ AND `authmech` = 'totp'
+ AND `active`='1'");
+ $stmt->execute(array(':username' => $username));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+ if ($tfa->verifyCode($row['secret'], $_POST['token']) === true) {
+ $_SESSION['tfa_id'] = $row['id'];
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $username, '*'),
+ 'msg' => 'verified_totp_login'
+ );
+ return true;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $username, '*'),
+ 'msg' => 'totp_verification_failed'
+ );
+ return false;
+ }
+ catch (PDOException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $username, '*'),
+ 'msg' => array('mysql_error', $e)
+ );
+ return false;
+ }
+ break;
+ default:
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $username, '*'),
+ 'msg' => 'unknown_tfa_method'
+ );
+ return false;
+ break;
+ }
+ return false;
+}
+function admin_api($access, $action, $data = null) {
+ global $pdo;
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ if ($access !== "ro" && $access !== "rw") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__),
+ 'msg' => 'invalid access type'
+ );
+ return false;
+ }
+ if ($action == "edit") {
+ $active = (!empty($data['active'])) ? 1 : 0;
+ $skip_ip_check = (isset($data['skip_ip_check'])) ? 1 : 0;
+ $allow_from = array_map('trim', preg_split( "/( |,|;|\n)/", $data['allow_from']));
+ foreach ($allow_from as $key => $val) {
+ if (empty($val)) {
+ unset($allow_from[$key]);
+ continue;
+ }
+ if (valid_network($val) !== true) {
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $data),
+ 'msg' => array('ip_invalid', htmlspecialchars($allow_from[$key]))
+ );
+ unset($allow_from[$key]);
+ continue;
+ }
+ }
+ $allow_from = implode(',', array_unique(array_filter($allow_from)));
+ if (empty($allow_from) && $skip_ip_check == 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $data),
+ 'msg' => 'ip_list_empty'
+ );
+ return false;
+ }
+ $api_key = implode('-', array(
+ strtoupper(bin2hex(random_bytes(3))),
+ strtoupper(bin2hex(random_bytes(3))),
+ strtoupper(bin2hex(random_bytes(3))),
+ strtoupper(bin2hex(random_bytes(3))),
+ strtoupper(bin2hex(random_bytes(3)))
+ ));
+ $stmt = $pdo->query("SELECT `api_key` FROM `api` WHERE `access` = '" . $access . "'");
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if (empty($num_results)) {
+ $stmt = $pdo->prepare("INSERT INTO `api` (`api_key`, `skip_ip_check`, `active`, `allow_from`, `access`)
+ VALUES (:api_key, :skip_ip_check, :active, :allow_from, :access);");
+ $stmt->execute(array(
+ ':api_key' => $api_key,
+ ':skip_ip_check' => $skip_ip_check,
+ ':active' => $active,
+ ':allow_from' => $allow_from,
+ ':access' => $access
+ ));
+ }
+ else {
+ if ($skip_ip_check == 0) {
+ $stmt = $pdo->prepare("UPDATE `api` SET `skip_ip_check` = :skip_ip_check,
+ `active` = :active,
+ `allow_from` = :allow_from
+ WHERE `access` = :access;");
+ $stmt->execute(array(
+ ':active' => $active,
+ ':skip_ip_check' => $skip_ip_check,
+ ':allow_from' => $allow_from,
+ ':access' => $access
+ ));
+ }
+ else {
+ $stmt = $pdo->prepare("UPDATE `api` SET `skip_ip_check` = :skip_ip_check,
+ `active` = :active
+ WHERE `access` = :access;");
+ $stmt->execute(array(
+ ':active' => $active,
+ ':skip_ip_check' => $skip_ip_check,
+ ':access' => $access
+ ));
+ }
+ }
+ }
+ elseif ($action == "regen_key") {
+ $api_key = implode('-', array(
+ strtoupper(bin2hex(random_bytes(3))),
+ strtoupper(bin2hex(random_bytes(3))),
+ strtoupper(bin2hex(random_bytes(3))),
+ strtoupper(bin2hex(random_bytes(3))),
+ strtoupper(bin2hex(random_bytes(3)))
+ ));
+ $stmt = $pdo->prepare("UPDATE `api` SET `api_key` = :api_key WHERE `access` = :access");
+ $stmt->execute(array(
+ ':api_key' => $api_key,
+ ':access' => $access
+ ));
+ }
+ elseif ($action == "get") {
+ $stmt = $pdo->query("SELECT * FROM `api` WHERE `access` = '" . $access . "'");
+ $apidata = $stmt->fetch(PDO::FETCH_ASSOC);
+ $apidata['allow_from'] = str_replace(',', PHP_EOL, $apidata['allow_from']);
+ return $apidata;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $data),
+ 'msg' => 'admin_api_modified'
+ );
+}
+function license($action, $data = null) {
+ global $pdo;
+ global $redis;
+ global $lang;
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ switch ($action) {
+ case "verify":
+ // Keep result until revalidate button is pressed or session expired
+ $stmt = $pdo->query("SELECT `version` FROM `versions` WHERE `application` = 'GUID'");
+ $versions = $stmt->fetch(PDO::FETCH_ASSOC);
+ $post = array('guid' => $versions['version']);
+ $curl = curl_init('https://verify.mailcow.email');
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
+ curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
+ $response = curl_exec($curl);
+ curl_close($curl);
+ $json_return = json_decode($response, true);
+ if ($response && $json_return) {
+ if ($json_return['response'] === "ok") {
+ $_SESSION['gal']['valid'] = "true";
+ $_SESSION['gal']['c'] = $json_return['c'];
+ $_SESSION['gal']['s'] = $json_return['s'];
+ if ($json_return['m'] == 'NoMoore') {
+ $_SESSION['gal']['m'] = '🐄';
+ }
+ else {
+ $_SESSION['gal']['m'] = str_repeat('🐄', substr_count($json_return['m'], 'o'));
+ }
+ }
+ elseif ($json_return['response'] === "invalid") {
+ $_SESSION['gal']['valid'] = "false";
+ $_SESSION['gal']['c'] = $lang['mailbox']['no'];
+ $_SESSION['gal']['s'] = $lang['mailbox']['no'];
+ $_SESSION['gal']['m'] = $lang['mailbox']['no'];
+ }
+ }
+ else {
+ $_SESSION['gal']['valid'] = "false";
+ $_SESSION['gal']['c'] = $lang['danger']['temp_error'];
+ $_SESSION['gal']['s'] = $lang['danger']['temp_error'];
+ $_SESSION['gal']['m'] = $lang['danger']['temp_error'];
+ }
+ try {
+ // json_encode needs "true"/"false" instead of true/false, to not encode it to 0 or 1
+ $redis->Set('LICENSE_STATUS_CACHE', json_encode($_SESSION['gal']));
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ return $_SESSION['gal']['valid'];
+ break;
+ case "guid":
+ $stmt = $pdo->query("SELECT `version` FROM `versions` WHERE `application` = 'GUID'");
+ $versions = $stmt->fetch(PDO::FETCH_ASSOC);
+ return $versions['version'];
+ break;
+ }
+}
+function rspamd_ui($action, $data = null) {
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ switch ($action) {
+ case "edit":
+ $rspamd_ui_pass = $data['rspamd_ui_pass'];
+ $rspamd_ui_pass2 = $data['rspamd_ui_pass2'];
+ if (empty($rspamd_ui_pass) || empty($rspamd_ui_pass2)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, '*', '*'),
+ 'msg' => 'password_empty'
+ );
+ return false;
+ }
+ if ($rspamd_ui_pass != $rspamd_ui_pass2) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, '*', '*'),
+ 'msg' => 'password_mismatch'
+ );
+ return false;
+ }
+ if (strlen($rspamd_ui_pass) < 6) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, '*', '*'),
+ 'msg' => 'rspamd_ui_pw_length'
+ );
+ return false;
+ }
+ $docker_return = docker('post', 'rspamd-mailcow', 'exec', array('cmd' => 'rspamd', 'task' => 'worker_password', 'raw' => $rspamd_ui_pass), array('Content-Type: application/json'));
+ if ($docker_return_array = json_decode($docker_return, true)) {
+ if ($docker_return_array['type'] == 'success') {
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, '*', '*'),
+ 'msg' => 'rspamd_ui_pw_set'
+ );
+ return true;
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => $docker_return_array['type'],
+ 'log' => array(__FUNCTION__, '*', '*'),
+ 'msg' => $docker_return_array['msg']
+ );
+ return false;
+ }
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, '*', '*'),
+ 'msg' => 'unknown'
+ );
+ return false;
+ }
+ break;
+ }
+}
+function get_u2f_registrations($username) {
+ global $pdo;
+ $sel = $pdo->prepare("SELECT * FROM `tfa` WHERE `authmech` = 'u2f' AND `username` = ? AND `active` = '1'");
+ $sel->execute(array($username));
+ return $sel->fetchAll(PDO::FETCH_OBJ);
+}
+function get_logs($application, $lines = false) {
+ if ($lines === false) {
+ $lines = $GLOBALS['LOG_LINES'] - 1;
+ }
+ elseif(is_numeric($lines) && $lines >= 1) {
+ $lines = abs(intval($lines) - 1);
+ }
+ else {
+ list ($from, $to) = explode('-', $lines);
+ $from = intval($from);
+ $to = intval($to);
+ if ($from < 1 || $to < $from) { return false; }
+ }
+ global $redis;
+ global $pdo;
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ return false;
+ }
+ // SQL
+ if ($application == "mailcow-ui") {
+ if (isset($from) && isset($to)) {
+ $stmt = $pdo->prepare("SELECT * FROM `logs` ORDER BY `id` DESC LIMIT :from, :to");
+ $stmt->execute(array(
+ ':from' => $from - 1,
+ ':to' => $to
+ ));
+ $data = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ }
+ else {
+ $stmt = $pdo->prepare("SELECT * FROM `logs` ORDER BY `id` DESC LIMIT :lines");
+ $stmt->execute(array(
+ ':lines' => $lines + 1,
+ ));
+ $data = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ }
+ if (is_array($data)) {
+ return $data;
+ }
+ }
+ // Redis
+ if ($application == "dovecot-mailcow") {
+ if (isset($from) && isset($to)) {
+ $data = $redis->lRange('DOVECOT_MAILLOG', $from - 1, $to - 1);
+ }
+ else {
+ $data = $redis->lRange('DOVECOT_MAILLOG', 0, $lines);
+ }
+ if ($data) {
+ foreach ($data as $json_line) {
+ $data_array[] = json_decode($json_line, true);
+ }
+ return $data_array;
+ }
+ }
+ if ($application == "postfix-mailcow") {
+ if (isset($from) && isset($to)) {
+ $data = $redis->lRange('POSTFIX_MAILLOG', $from - 1, $to - 1);
+ }
+ else {
+ $data = $redis->lRange('POSTFIX_MAILLOG', 0, $lines);
+ }
+ if ($data) {
+ foreach ($data as $json_line) {
+ $data_array[] = json_decode($json_line, true);
+ }
+ return $data_array;
+ }
+ }
+ if ($application == "sogo-mailcow") {
+ if (isset($from) && isset($to)) {
+ $data = $redis->lRange('SOGO_LOG', $from - 1, $to - 1);
+ }
+ else {
+ $data = $redis->lRange('SOGO_LOG', 0, $lines);
+ }
+ if ($data) {
+ foreach ($data as $json_line) {
+ $data_array[] = json_decode($json_line, true);
+ }
+ return $data_array;
+ }
+ }
+ if ($application == "watchdog-mailcow") {
+ if (isset($from) && isset($to)) {
+ $data = $redis->lRange('WATCHDOG_LOG', $from - 1, $to - 1);
+ }
+ else {
+ $data = $redis->lRange('WATCHDOG_LOG', 0, $lines);
+ }
+ if ($data) {
+ foreach ($data as $json_line) {
+ $data_array[] = json_decode($json_line, true);
+ }
+ return $data_array;
+ }
+ }
+ if ($application == "acme-mailcow") {
+ if (isset($from) && isset($to)) {
+ $data = $redis->lRange('ACME_LOG', $from - 1, $to - 1);
+ }
+ else {
+ $data = $redis->lRange('ACME_LOG', 0, $lines);
+ }
+ if ($data) {
+ foreach ($data as $json_line) {
+ $data_array[] = json_decode($json_line, true);
+ }
+ return $data_array;
+ }
+ }
+ if ($application == "ratelimited") {
+ if (isset($from) && isset($to)) {
+ $data = $redis->lRange('RL_LOG', $from - 1, $to - 1);
+ }
+ else {
+ $data = $redis->lRange('RL_LOG', 0, $lines);
+ }
+ if ($data) {
+ foreach ($data as $json_line) {
+ $data_array[] = json_decode($json_line, true);
+ }
+ return $data_array;
+ }
+ }
+ if ($application == "api-mailcow") {
+ if (isset($from) && isset($to)) {
+ $data = $redis->lRange('API_LOG', $from - 1, $to - 1);
+ }
+ else {
+ $data = $redis->lRange('API_LOG', 0, $lines);
+ }
+ if ($data) {
+ foreach ($data as $json_line) {
+ $data_array[] = json_decode($json_line, true);
+ }
+ return $data_array;
+ }
+ }
+ if ($application == "netfilter-mailcow") {
+ if (isset($from) && isset($to)) {
+ $data = $redis->lRange('NETFILTER_LOG', $from - 1, $to - 1);
+ }
+ else {
+ $data = $redis->lRange('NETFILTER_LOG', 0, $lines);
+ }
+ if ($data) {
+ foreach ($data as $json_line) {
+ $data_array[] = json_decode($json_line, true);
+ }
+ return $data_array;
+ }
+ }
+ if ($application == "autodiscover-mailcow") {
+ if (isset($from) && isset($to)) {
+ $data = $redis->lRange('AUTODISCOVER_LOG', $from - 1, $to - 1);
+ }
+ else {
+ $data = $redis->lRange('AUTODISCOVER_LOG', 0, $lines);
+ }
+ if ($data) {
+ foreach ($data as $json_line) {
+ $data_array[] = json_decode($json_line, true);
+ }
+ return $data_array;
+ }
+ }
+ if ($application == "rspamd-history") {
+ $curl = curl_init();
+ curl_setopt($curl, CURLOPT_UNIX_SOCKET_PATH, '/var/lib/rspamd/rspamd.sock');
+ if (!is_numeric($lines)) {
+ list ($from, $to) = explode('-', $lines);
+ curl_setopt($curl, CURLOPT_URL,"http://rspamd/history?from=" . intval($from) . "&to=" . intval($to));
+ }
+ else {
+ curl_setopt($curl, CURLOPT_URL,"http://rspamd/history?to=" . intval($lines));
+ }
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
+ $history = curl_exec($curl);
+ if (!curl_errno($curl)) {
+ $data_array = json_decode($history, true);
+ curl_close($curl);
+ return $data_array['rows'];
+ }
+ curl_close($curl);
+ return false;
+ }
+ if ($application == "rspamd-stats") {
+ $curl = curl_init();
+ curl_setopt($curl, CURLOPT_UNIX_SOCKET_PATH, '/var/lib/rspamd/rspamd.sock');
+ curl_setopt($curl, CURLOPT_URL,"http://rspamd/stat");
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
+ $stats = curl_exec($curl);
+ if (!curl_errno($curl)) {
+ $data_array = json_decode($stats, true);
+ curl_close($curl);
+ return $data_array;
+ }
+ curl_close($curl);
+ return false;
+ }
+ return false;
+}
+function getGUID() {
+ if (function_exists('com_create_guid')) {
+ return com_create_guid();
+ }
+ mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up.
+ $charid = strtoupper(md5(uniqid(rand(), true)));
+ $hyphen = chr(45);// "-"
+ return substr($charid, 0, 8).$hyphen
+ .substr($charid, 8, 4).$hyphen
+ .substr($charid,12, 4).$hyphen
+ .substr($charid,16, 4).$hyphen
+ .substr($charid,20,12);
+}
+function solr_status() {
+ $curl = curl_init();
+ $endpoint = 'http://solr:8983/solr/admin/cores';
+ $params = array(
+ 'action' => 'STATUS',
+ 'core' => 'dovecot-fts',
+ 'indexInfo' => 'true'
+ );
+ $url = $endpoint . '?' . http_build_query($params);
+ curl_setopt($curl, CURLOPT_URL, $url);
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($curl, CURLOPT_POST, 0);
+ curl_setopt($curl, CURLOPT_TIMEOUT, 10);
+ $response_core = curl_exec($curl);
+ if ($response_core === false) {
+ $err = curl_error($curl);
+ curl_close($curl);
+ return false;
+ }
+ else {
+ curl_close($curl);
+ $curl = curl_init();
+ $status_core = json_decode($response_core, true);
+ $url = 'http://solr:8983/solr/admin/info/system';
+ curl_setopt($curl, CURLOPT_URL, $url);
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($curl, CURLOPT_POST, 0);
+ curl_setopt($curl, CURLOPT_TIMEOUT, 10);
+ $response_sysinfo = curl_exec($curl);
+ if ($response_sysinfo === false) {
+ $err = curl_error($curl);
+ curl_close($curl);
+ return false;
+ }
+ else {
+ curl_close($curl);
+ $status_sysinfo = json_decode($response_sysinfo, true);
+ $status = array_merge($status_core, $status_sysinfo);
+ return (!empty($status['status']['dovecot-fts']) && !empty($status['jvm']['memory'])) ? $status : false;
+ }
+ return (!empty($status['status']['dovecot-fts'])) ? $status['status']['dovecot-fts'] : false;
+ }
+ return false;
+}
+
+function cleanupJS($ignore = '', $folder = '/tmp/*.js') {
+ $now = time();
+ foreach (glob($folder) as $filename) {
+ if(strpos($filename, $ignore) !== false) {
+ continue;
+ }
+ if (is_file($filename)) {
+ if ($now - filemtime($filename) >= 60 * 60) {
+ unlink($filename);
+ }
+ }
+ }
+}
+
+function cleanupCSS($ignore = '', $folder = '/tmp/*.css') {
+ $now = time();
+ foreach (glob($folder) as $filename) {
+ if(strpos($filename, $ignore) !== false) {
+ continue;
+ }
+ if (is_file($filename)) {
+ if ($now - filemtime($filename) >= 60 * 60) {
+ unlink($filename);
+ }
+ }
+ }
+}
+
+?>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/functions.mailbox.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/functions.mailbox.inc.php
new file mode 100644
index 0000000..fff4190
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/functions.mailbox.inc.php
@@ -0,0 +1,4272 @@
+<?php
+function mailbox($_action, $_type, $_data = null, $_extra = null) {
+ global $pdo;
+ global $redis;
+ global $lang;
+ global $MAILBOX_DEFAULT_ATTRIBUTES;
+ $_data_log = $_data;
+ !isset($_data_log['password']) ?: $_data_log['password'] = '*';
+ !isset($_data_log['password2']) ?: $_data_log['password2'] = '*';
+ switch ($_action) {
+ case 'add':
+ switch ($_type) {
+ case 'time_limited_alias':
+ if (!isset($_SESSION['acl']['spam_alias']) || $_SESSION['acl']['spam_alias'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ if (isset($_data['username']) && filter_var($_data['username'], FILTER_VALIDATE_EMAIL)) {
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data['username'])) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ else {
+ $username = $_data['username'];
+ }
+ }
+ else {
+ $username = $_SESSION['mailcow_cc_username'];
+ }
+ if (!is_numeric($_data["validity"]) || $_data["validity"] > 672) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'validity_missing'
+ );
+ return false;
+ }
+ $domain = mailbox('get', 'mailbox_details', $username)['domain'];
+ if (!is_valid_domain_name($domain)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'domain_invalid'
+ );
+ return false;
+ }
+ $validity = strtotime("+".$_data["validity"]." hour");
+ $letters = 'abcefghijklmnopqrstuvwxyz1234567890';
+ $random_name = substr(str_shuffle($letters), 0, 24);
+ $stmt = $pdo->prepare("INSERT INTO `spamalias` (`address`, `goto`, `validity`) VALUES
+ (:address, :goto, :validity)");
+ $stmt->execute(array(
+ ':address' => $random_name . '@' . $domain,
+ ':goto' => $username,
+ ':validity' => $validity
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('mailbox_modified', $username)
+ );
+ break;
+ case 'global_filter':
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $sieve = new Sieve\SieveParser();
+ $script_data = $_data['script_data'];
+ $script_data = str_replace("\r\n", "\n", $script_data); // windows -> unix
+ $script_data = str_replace("\r", "\n", $script_data); // remaining -> unix
+ $filter_type = $_data['filter_type'];
+ try {
+ $sieve->parse($script_data);
+ }
+ catch (Exception $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('sieve_error', $e->getMessage())
+ );
+ return false;
+ }
+ if ($filter_type == 'prefilter') {
+ try {
+ if (file_exists('/global_sieve/before')) {
+ $filter_handle = fopen('/global_sieve/before', 'w');
+ if (!$filter_handle) {
+ throw new Exception($lang['danger']['file_open_error']);
+ }
+ fwrite($filter_handle, $script_data);
+ fclose($filter_handle);
+ }
+ $restart_response = json_decode(docker('post', 'dovecot-mailcow', 'restart'), true);
+ if ($restart_response['type'] == "success") {
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'dovecot_restart_success'
+ );
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'dovecot_restart_failed'
+ );
+ }
+ }
+ catch (Exception $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('global_filter_write_error', htmlspecialchars($e->getMessage()))
+ );
+ return false;
+ }
+ }
+ elseif ($filter_type == 'postfilter') {
+ try {
+ if (file_exists('/global_sieve/after')) {
+ $filter_handle = fopen('/global_sieve/after', 'w');
+ if (!$filter_handle) {
+ throw new Exception($lang['danger']['file_open_error']);
+ }
+ fwrite($filter_handle, $script_data);
+ fclose($filter_handle);
+ }
+ $restart_response = json_decode(docker('post', 'dovecot-mailcow', 'restart'), true);
+ if ($restart_response['type'] == "success") {
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'dovecot_restart_success'
+ );
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'dovecot_restart_failed'
+ );
+ }
+ }
+ catch (Exception $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('global_filter_write_error', htmlspecialchars($e->getMessage()))
+ );
+ return false;
+ }
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'invalid_filter_type'
+ );
+ return false;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'global_filter_written'
+ );
+ return true;
+ case 'filter':
+ $sieve = new Sieve\SieveParser();
+ if (!isset($_SESSION['acl']['filters']) || $_SESSION['acl']['filters'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ if (isset($_data['username']) && filter_var($_data['username'], FILTER_VALIDATE_EMAIL)) {
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data['username'])) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ else {
+ $username = $_data['username'];
+ }
+ }
+ elseif ($_SESSION['mailcow_cc_role'] == "user") {
+ $username = $_SESSION['mailcow_cc_username'];
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'no_user_defined'
+ );
+ return false;
+ }
+ $active = intval($_data['active']);
+ $script_data = $_data['script_data'];
+ $script_desc = $_data['script_desc'];
+ $filter_type = $_data['filter_type'];
+ if (empty($script_data)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'script_empty'
+ );
+ return false;
+ }
+ try {
+ $sieve->parse($script_data);
+ }
+ catch (Exception $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('sieve_error', $e->getMessage())
+ );
+ return false;
+ }
+ if (empty($script_data) || empty($script_desc)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'value_missing'
+ );
+ return false;
+ }
+ if ($filter_type != 'postfilter' && $filter_type != 'prefilter') {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'filter_type'
+ );
+ return false;
+ }
+ if (!empty($active)) {
+ $script_name = 'active';
+ $stmt = $pdo->prepare("UPDATE `sieve_filters` SET `script_name` = 'inactive' WHERE `username` = :username AND `filter_type` = :filter_type");
+ $stmt->execute(array(
+ ':username' => $username,
+ ':filter_type' => $filter_type
+ ));
+ }
+ else {
+ $script_name = 'inactive';
+ }
+ $stmt = $pdo->prepare("INSERT INTO `sieve_filters` (`username`, `script_data`, `script_desc`, `script_name`, `filter_type`)
+ VALUES (:username, :script_data, :script_desc, :script_name, :filter_type)");
+ $stmt->execute(array(
+ ':username' => $username,
+ ':script_data' => $script_data,
+ ':script_desc' => $script_desc,
+ ':script_name' => $script_name,
+ ':filter_type' => $filter_type
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('mailbox_modified', $username)
+ );
+ break;
+ case 'syncjob':
+ if (!isset($_SESSION['acl']['syncjobs']) || $_SESSION['acl']['syncjobs'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ if (isset($_data['username']) && filter_var($_data['username'], FILTER_VALIDATE_EMAIL)) {
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data['username'])) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ else {
+ $username = $_data['username'];
+ }
+ }
+ elseif ($_SESSION['mailcow_cc_role'] == "user") {
+ $username = $_SESSION['mailcow_cc_username'];
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'no_user_defined'
+ );
+ return false;
+ }
+ $active = intval($_data['active']);
+ $subscribeall = intval($_data['subscribeall']);
+ $delete2duplicates = intval($_data['delete2duplicates']);
+ $delete1 = intval($_data['delete1']);
+ $delete2 = intval($_data['delete2']);
+ $timeout1 = intval($_data['timeout1']);
+ $timeout2 = intval($_data['timeout2']);
+ $skipcrossduplicates = intval($_data['skipcrossduplicates']);
+ $automap = intval($_data['automap']);
+ $port1 = $_data['port1'];
+ $host1 = strtolower($_data['host1']);
+ $password1 = $_data['password1'];
+ $exclude = $_data['exclude'];
+ $maxage = $_data['maxage'];
+ $maxbytespersecond = $_data['maxbytespersecond'];
+ $subfolder2 = $_data['subfolder2'];
+ $user1 = $_data['user1'];
+ $mins_interval = $_data['mins_interval'];
+ $enc1 = $_data['enc1'];
+ $custom_params = (empty(trim($_data['custom_params']))) ? '' : trim($_data['custom_params']);
+ // Workaround, fixme
+ if (strpos($custom_params, 'pipemess')) {
+ $custom_params = '';
+ }
+ if (empty($subfolder2)) {
+ $subfolder2 = "";
+ }
+ if (!isset($maxage) || !filter_var($maxage, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 32000)))) {
+ $maxage = "0";
+ }
+ if (!isset($timeout1) || !filter_var($timeout1, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 32000)))) {
+ $timeout1 = "600";
+ }
+ if (!isset($timeout2) || !filter_var($timeout2, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 32000)))) {
+ $timeout2 = "600";
+ }
+ if (!isset($maxbytespersecond) || !filter_var($maxbytespersecond, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 125000000)))) {
+ $maxbytespersecond = "0";
+ }
+ if (!filter_var($port1, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 65535)))) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ if (!filter_var($mins_interval, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 43800)))) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ // if (!is_valid_domain_name($host1)) {
+ // $_SESSION['return'][] = array(
+ // 'type' => 'danger',
+ // 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ // 'msg' => 'access_denied'
+ // );
+ // return false;
+ // }
+ if ($enc1 != "TLS" && $enc1 != "SSL" && $enc1 != "PLAIN") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ if (@preg_match("/" . $exclude . "/", null) === false) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT '1' FROM `imapsync`
+ WHERE `user2` = :user2 AND `user1` = :user1 AND `host1` = :host1");
+ $stmt->execute(array(':user1' => $user1, ':user2' => $username, ':host1' => $host1));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('object_exists', htmlspecialchars($host1 . ' / ' . $user1))
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("INSERT INTO `imapsync` (`user2`, `exclude`, `delete1`, `delete2`, `timeout1`, `timeout2`, `automap`, `skipcrossduplicates`, `maxbytespersecond`, `subscribeall`, `maxage`, `subfolder2`, `host1`, `authmech1`, `user1`, `password1`, `mins_interval`, `port1`, `enc1`, `delete2duplicates`, `custom_params`, `active`)
+ VALUES (:user2, :exclude, :delete1, :delete2, :timeout1, :timeout2, :automap, :skipcrossduplicates, :maxbytespersecond, :subscribeall, :maxage, :subfolder2, :host1, :authmech1, :user1, :password1, :mins_interval, :port1, :enc1, :delete2duplicates, :custom_params, :active)");
+ $stmt->execute(array(
+ ':user2' => $username,
+ ':custom_params' => $custom_params,
+ ':exclude' => $exclude,
+ ':maxage' => $maxage,
+ ':delete1' => $delete1,
+ ':delete2' => $delete2,
+ ':timeout1' => $timeout1,
+ ':timeout2' => $timeout2,
+ ':automap' => $automap,
+ ':skipcrossduplicates' => $skipcrossduplicates,
+ ':maxbytespersecond' => $maxbytespersecond,
+ ':subscribeall' => $subscribeall,
+ ':subfolder2' => $subfolder2,
+ ':host1' => $host1,
+ ':authmech1' => 'PLAIN',
+ ':user1' => $user1,
+ ':password1' => $password1,
+ ':mins_interval' => $mins_interval,
+ ':port1' => $port1,
+ ':enc1' => $enc1,
+ ':delete2duplicates' => $delete2duplicates,
+ ':active' => $active,
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('mailbox_modified', $username)
+ );
+ break;
+ case 'domain':
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $domain = idn_to_ascii(strtolower(trim($_data['domain'])), 0, INTL_IDNA_VARIANT_UTS46);
+ $description = $_data['description'];
+ if (empty($description)) {
+ $description = $domain;
+ }
+ $aliases = $_data['aliases'];
+ $mailboxes = $_data['mailboxes'];
+ $defquota = $_data['defquota'];
+ $maxquota = $_data['maxquota'];
+ $restart_sogo = $_data['restart_sogo'];
+ $quota = $_data['quota'];
+ if ($defquota > $maxquota) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'mailbox_defquota_exceeds_mailbox_maxquota'
+ );
+ return false;
+ }
+ if ($maxquota > $quota) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'mailbox_quota_exceeds_domain_quota'
+ );
+ return false;
+ }
+ if ($defquota == "0" || empty($defquota)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'defquota_empty'
+ );
+ return false;
+ }
+ if ($maxquota == "0" || empty($maxquota)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'maxquota_empty'
+ );
+ return false;
+ }
+ $active = intval($_data['active']);
+ $relay_all_recipients = intval($_data['relay_all_recipients']);
+ $relay_unknown_only = intval($_data['relay_unknown_only']);
+ $backupmx = intval($_data['backupmx']);
+ $gal = intval($_data['gal']);
+ if ($relay_all_recipients == 1) {
+ $backupmx = '1';
+ }
+ if ($relay_unknown_only == 1) {
+ $backupmx = 1;
+ $relay_all_recipients = 1;
+ }
+ if (!is_valid_domain_name($domain)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'domain_invalid'
+ );
+ return false;
+ }
+ foreach (array($quota, $maxquota, $mailboxes, $aliases) as $data) {
+ if (!is_numeric($data)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('object_is_not_numeric', htmlspecialchars($data))
+ );
+ return false;
+ }
+ }
+ $stmt = $pdo->prepare("SELECT `domain` FROM `domain`
+ WHERE `domain` = :domain");
+ $stmt->execute(array(':domain' => $domain));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ $stmt = $pdo->prepare("SELECT `alias_domain` FROM `alias_domain`
+ WHERE `alias_domain` = :domain");
+ $stmt->execute(array(':domain' => $domain));
+ $num_results = $num_results + count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('domain_exists', htmlspecialchars($domain))
+ );
+ return false;
+ }
+ if ($domain == getenv('MAILCOW_HOSTNAME')) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'domain_cannot_match_hostname'
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("DELETE FROM `sender_acl` WHERE `external` = 1 AND `send_as` LIKE :domain");
+ $stmt->execute(array(
+ ':domain' => '%@' . $domain
+ ));
+ $stmt = $pdo->prepare("INSERT INTO `domain` (`domain`, `description`, `aliases`, `mailboxes`, `defquota`, `maxquota`, `quota`, `backupmx`, `gal`, `active`, `relay_unknown_only`, `relay_all_recipients`)
+ VALUES (:domain, :description, :aliases, :mailboxes, :defquota, :maxquota, :quota, :backupmx, :gal, :active, :relay_unknown_only, :relay_all_recipients)");
+ $stmt->execute(array(
+ ':domain' => $domain,
+ ':description' => $description,
+ ':aliases' => $aliases,
+ ':mailboxes' => $mailboxes,
+ ':defquota' => $defquota,
+ ':maxquota' => $maxquota,
+ ':quota' => $quota,
+ ':backupmx' => $backupmx,
+ ':gal' => $gal,
+ ':active' => $active,
+ ':relay_unknown_only' => $relay_unknown_only,
+ ':relay_all_recipients' => $relay_all_recipients
+ ));
+ try {
+ $redis->hSet('DOMAIN_MAP', $domain, 1);
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ if (!empty(intval($_data['rl_value']))) {
+ ratelimit('edit', 'domain', array('rl_value' => $_data['rl_value'], 'rl_frame' => $_data['rl_frame'], 'object' => $domain));
+ }
+ if (!empty($restart_sogo)) {
+ $restart_response = json_decode(docker('post', 'sogo-mailcow', 'restart'), true);
+ if ($restart_response['type'] == "success") {
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('domain_added', htmlspecialchars($domain))
+ );
+ return true;
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'domain_added_sogo_failed'
+ );
+ return false;
+ }
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('domain_added', htmlspecialchars($domain))
+ );
+ return true;
+ break;
+ case 'alias':
+ $addresses = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['address']));
+ $gotos = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['goto']));
+ $active = intval($_data['active']);
+ $sogo_visible = intval($_data['sogo_visible']);
+ $goto_null = intval($_data['goto_null']);
+ $goto_spam = intval($_data['goto_spam']);
+ $goto_ham = intval($_data['goto_ham']);
+ $private_comment = $_data['private_comment'];
+ $public_comment = $_data['public_comment'];
+ if (strlen($private_comment) > 160 | strlen($public_comment) > 160){
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'comment_too_long'
+ );
+ return false;
+ }
+ if (empty($addresses[0])) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'alias_empty'
+ );
+ return false;
+ }
+ if (empty($gotos[0]) && ($goto_null + $goto_spam + $goto_ham == 0)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'goto_empty'
+ );
+ return false;
+ }
+ if ($goto_null == "1") {
+ $goto = "null@localhost";
+ }
+ elseif ($goto_spam == "1") {
+ $goto = "spam@localhost";
+ }
+ elseif ($goto_ham == "1") {
+ $goto = "ham@localhost";
+ }
+ else {
+ foreach ($gotos as $i => &$goto) {
+ if (empty($goto)) {
+ continue;
+ }
+ $goto_domain = idn_to_ascii(substr(strstr($goto, '@'), 1), 0, INTL_IDNA_VARIANT_UTS46);
+ $goto_local_part = strstr($goto, '@', true);
+ $goto = $goto_local_part.'@'.$goto_domain;
+ $stmt = $pdo->prepare("SELECT `username` FROM `mailbox`
+ WHERE `kind` REGEXP 'location|thing|group'
+ AND `username`= :goto");
+ $stmt->execute(array(':goto' => $goto));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('goto_invalid', htmlspecialchars($goto))
+ );
+ unset($gotos[$i]);
+ continue;
+ }
+ if (!filter_var($goto, FILTER_VALIDATE_EMAIL) === true) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('goto_invalid', htmlspecialchars($goto))
+ );
+ unset($gotos[$i]);
+ continue;
+ }
+ }
+ $gotos = array_filter($gotos);
+ if (empty($gotos)) { return false; }
+ $goto = implode(",", $gotos);
+ }
+ foreach ($addresses as $address) {
+ if (empty($address)) {
+ continue;
+ }
+ if (in_array($address, $gotos)) {
+ continue;
+ }
+ $domain = idn_to_ascii(substr(strstr($address, '@'), 1), 0, INTL_IDNA_VARIANT_UTS46);
+ $local_part = strstr($address, '@', true);
+ $address = $local_part.'@'.$domain;
+ $domaindata = mailbox('get', 'domain_details', $domain);
+ if (is_array($domaindata) && $domaindata['aliases_left'] == "0") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'max_alias_exceeded'
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT `address` FROM `alias`
+ WHERE `address`= :address OR `address` IN (
+ SELECT `username` FROM `mailbox`, `alias_domain`
+ WHERE (
+ `alias_domain`.`alias_domain` = :address_d
+ AND `mailbox`.`username` = CONCAT(:address_l, '@', alias_domain.target_domain)))");
+ $stmt->execute(array(
+ ':address' => $address,
+ ':address_l' => $local_part,
+ ':address_d' => $domain
+ ));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('is_alias_or_mailbox', htmlspecialchars($address))
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("SELECT `domain` FROM `domain`
+ WHERE `domain`= :domain1 OR `domain` = (SELECT `target_domain` FROM `alias_domain` WHERE `alias_domain` = :domain2)");
+ $stmt->execute(array(':domain1' => $domain, ':domain2' => $domain));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results == 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('domain_not_found', htmlspecialchars($domain))
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("SELECT `address` FROM `spamalias`
+ WHERE `address`= :address");
+ $stmt->execute(array(':address' => $address));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('is_spam_alias', htmlspecialchars($address))
+ );
+ continue;
+ }
+ if ((!filter_var($address, FILTER_VALIDATE_EMAIL) === true) && !empty($local_part)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('alias_invalid', $address)
+ );
+ continue;
+ }
+ if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("INSERT INTO `alias` (`address`, `public_comment`, `private_comment`, `goto`, `domain`, `sogo_visible`, `active`)
+ VALUES (:address, :public_comment, :private_comment, :goto, :domain, :sogo_visible, :active)");
+ if (!filter_var($address, FILTER_VALIDATE_EMAIL) === true) {
+ $stmt->execute(array(
+ ':address' => '@'.$domain,
+ ':public_comment' => $public_comment,
+ ':private_comment' => $private_comment,
+ ':address' => '@'.$domain,
+ ':goto' => $goto,
+ ':domain' => $domain,
+ ':sogo_visible' => $sogo_visible,
+ ':active' => $active
+ ));
+ }
+ else {
+ $stmt->execute(array(
+ ':address' => $address,
+ ':public_comment' => $public_comment,
+ ':private_comment' => $private_comment,
+ ':goto' => $goto,
+ ':domain' => $domain,
+ ':sogo_visible' => $sogo_visible,
+ ':active' => $active
+ ));
+ }
+ $id = $pdo->lastInsertId();
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('alias_added', $address, $id)
+ );
+ }
+ break;
+ case 'alias_domain':
+ $active = intval($_data['active']);
+ $alias_domains = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['alias_domain']));
+ $alias_domains = array_filter($alias_domains);
+ $target_domain = idn_to_ascii(strtolower(trim($_data['target_domain'])), 0, INTL_IDNA_VARIANT_UTS46);
+ if (!isset($_SESSION['acl']['alias_domains']) || $_SESSION['acl']['alias_domains'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ if (!is_valid_domain_name($target_domain)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'target_domain_invalid'
+ );
+ return false;
+ }
+ if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $target_domain)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ foreach ($alias_domains as $i => $alias_domain) {
+ $alias_domain = idn_to_ascii(strtolower(trim($alias_domain)), 0, INTL_IDNA_VARIANT_UTS46);
+ if (!is_valid_domain_name($alias_domain)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('alias_domain_invalid', htmlspecialchars(alias_domain))
+ );
+ continue;
+ }
+ if ($alias_domain == $target_domain) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('aliasd_targetd_identical', htmlspecialchars($target_domain))
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("SELECT `domain` FROM `domain`
+ WHERE `domain`= :target_domain");
+ $stmt->execute(array(':target_domain' => $target_domain));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results == 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('targetd_not_found', htmlspecialchars($target_domain))
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("SELECT `domain` FROM `domain`
+ WHERE `domain`= :target_domain AND `backupmx` = '1'");
+ $stmt->execute(array(':target_domain' => $target_domain));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results == 1) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('targetd_relay_domain', htmlspecialchars($target_domain))
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("SELECT `alias_domain` FROM `alias_domain` WHERE `alias_domain`= :alias_domain
+ UNION
+ SELECT `domain` FROM `domain` WHERE `domain`= :alias_domain_in_domain");
+ $stmt->execute(array(':alias_domain' => $alias_domain, ':alias_domain_in_domain' => $alias_domain));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('alias_domain_invalid', $alias_domain)
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("DELETE FROM `sender_acl` WHERE `external` = 1 AND `send_as` LIKE :domain");
+ $stmt->execute(array(
+ ':domain' => '%@' . $domain
+ ));
+ $stmt = $pdo->prepare("INSERT INTO `alias_domain` (`alias_domain`, `target_domain`, `active`)
+ VALUES (:alias_domain, :target_domain, :active)");
+ $stmt->execute(array(
+ ':alias_domain' => $alias_domain,
+ ':target_domain' => $target_domain,
+ ':active' => $active
+ ));
+ try {
+ $redis->hSet('DOMAIN_MAP', $alias_domain, 1);
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ if (!empty(intval($_data['rl_value']))) {
+ ratelimit('edit', 'domain', array('rl_value' => $_data['rl_value'], 'rl_frame' => $_data['rl_frame'], 'object' => $alias_domain));
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('aliasd_added', htmlspecialchars($alias_domain))
+ );
+ }
+ break;
+ case 'mailbox':
+ $local_part = strtolower(trim($_data['local_part']));
+ $domain = idn_to_ascii(strtolower(trim($_data['domain'])), 0, INTL_IDNA_VARIANT_UTS46);
+ $username = $local_part . '@' . $domain;
+ if (!filter_var($username, FILTER_VALIDATE_EMAIL)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'mailbox_invalid'
+ );
+ return false;
+ }
+ if (empty($_data['local_part'])) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'mailbox_invalid'
+ );
+ return false;
+ }
+ $password = $_data['password'];
+ $password2 = $_data['password2'];
+ $name = ltrim(rtrim($_data['name'], '>'), '<');
+ $quota_m = intval($_data['quota']);
+ if ((!isset($_SESSION['acl']['unlimited_quota']) || $_SESSION['acl']['unlimited_quota'] != "1") && $quota_m === 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'unlimited_quota_acl'
+ );
+ return false;
+ }
+ if (empty($name)) {
+ $name = $local_part;
+ }
+ $active = intval($_data['active']);
+ $force_pw_update = (isset($_data['force_pw_update'])) ? intval($_data['force_pw_update']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['force_pw_update']);
+ $tls_enforce_in = (isset($_data['tls_enforce_in'])) ? intval($_data['tls_enforce_in']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['tls_enforce_in']);
+ $tls_enforce_out = (isset($_data['tls_enforce_out'])) ? intval($_data['tls_enforce_out']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['tls_enforce_out']);
+ $sogo_access = (isset($_data['sogo_access'])) ? intval($_data['sogo_access']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['sogo_access']);
+ $imap_access = (isset($_data['imap_access'])) ? intval($_data['imap_access']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['imap_access']);
+ $pop3_access = (isset($_data['pop3_access'])) ? intval($_data['pop3_access']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['pop3_access']);
+ $smtp_access = (isset($_data['smtp_access'])) ? intval($_data['smtp_access']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['smtp_access']);
+ $quarantine_notification = (isset($_data['quarantine_notification'])) ? strval($_data['quarantine_notification']) : strval($MAILBOX_DEFAULT_ATTRIBUTES['quarantine_notification']);
+ $quarantine_category = (isset($_data['quarantine_category'])) ? strval($_data['quarantine_category']) : strval($MAILBOX_DEFAULT_ATTRIBUTES['quarantine_category']);
+ $quota_b = ($quota_m * 1048576);
+ $mailbox_attrs = json_encode(
+ array(
+ 'force_pw_update' => strval($force_pw_update),
+ 'tls_enforce_in' => strval($tls_enforce_in),
+ 'tls_enforce_out' => strval($tls_enforce_out),
+ 'sogo_access' => strval($sogo_access),
+ 'imap_access' => strval($imap_access),
+ 'pop3_access' => strval($pop3_access),
+ 'smtp_access' => strval($smtp_access),
+ 'mailbox_format' => strval($MAILBOX_DEFAULT_ATTRIBUTES['mailbox_format']),
+ 'quarantine_notification' => strval($quarantine_notification),
+ 'quarantine_category' => strval($quarantine_category)
+ )
+ );
+ if (!is_valid_domain_name($domain)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'domain_invalid'
+ );
+ return false;
+ }
+ if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT `mailboxes`, `maxquota`, `quota` FROM `domain`
+ WHERE `domain` = :domain");
+ $stmt->execute(array(':domain' => $domain));
+ $DomainData = $stmt->fetch(PDO::FETCH_ASSOC);
+ $stmt = $pdo->prepare("SELECT
+ COUNT(*) as count,
+ COALESCE(ROUND(SUM(`quota`)/1048576), 0) as `quota`
+ FROM `mailbox`
+ WHERE `kind` NOT REGEXP 'location|thing|group'
+ AND `domain` = :domain");
+ $stmt->execute(array(':domain' => $domain));
+ $MailboxData = $stmt->fetch(PDO::FETCH_ASSOC);
+ $stmt = $pdo->prepare("SELECT `local_part` FROM `mailbox` WHERE `local_part` = :local_part and `domain`= :domain");
+ $stmt->execute(array(':local_part' => $local_part, ':domain' => $domain));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('object_exists', htmlspecialchars($username))
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT `address` FROM `alias` WHERE address= :username");
+ $stmt->execute(array(':username' => $username));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('is_alias', htmlspecialchars($username))
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT `address` FROM `spamalias` WHERE `address`= :username");
+ $stmt->execute(array(':username' => $username));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('is_spam_alias', htmlspecialchars($username))
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT `domain` FROM `domain` WHERE `domain`= :domain");
+ $stmt->execute(array(':domain' => $domain));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results == 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('domain_not_found', htmlspecialchars($domain))
+ );
+ return false;
+ }
+ if (!empty($password) && !empty($password2)) {
+ if (!preg_match('/' . $GLOBALS['PASSWD_REGEP'] . '/', $password)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'password_complexity'
+ );
+ return false;
+ }
+ if ($password != $password2) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'password_mismatch'
+ );
+ return false;
+ }
+ // support pre hashed passwords
+ if (preg_match('/^({SSHA256}|{SSHA}|{SHA512-CRYPT}|{SSHA512}|{MD5-CRYPT}|{PLAIN-MD5})/i', $password)) {
+ $password_hashed = $password;
+ }
+ else {
+ $password_hashed = hash_password($password);
+ }
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'password_empty'
+ );
+ return false;
+ }
+ if ($MailboxData['count'] >= $DomainData['mailboxes']) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('max_mailbox_exceeded', $MailboxData['count'], $DomainData['mailboxes'])
+ );
+ return false;
+ }
+ if ($quota_m > $DomainData['maxquota']) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('mailbox_quota_exceeded', $DomainData['maxquota'])
+ );
+ return false;
+ }
+ if (($MailboxData['quota'] + $quota_m) > $DomainData['quota']) {
+ $quota_left_m = ($DomainData['quota'] - $MailboxData['quota']);
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('mailbox_quota_left_exceeded', $quota_left_m)
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("INSERT INTO `mailbox` (`username`, `password`, `name`, `quota`, `local_part`, `domain`, `attributes`, `active`)
+ VALUES (:username, :password_hashed, :name, :quota_b, :local_part, :domain, :mailbox_attrs, :active)");
+ $stmt->execute(array(
+ ':username' => $username,
+ ':password_hashed' => $password_hashed,
+ ':name' => $name,
+ ':quota_b' => $quota_b,
+ ':local_part' => $local_part,
+ ':domain' => $domain,
+ ':mailbox_attrs' => $mailbox_attrs,
+ ':active' => $active
+ ));
+ $stmt = $pdo->prepare("INSERT INTO `quota2` (`username`, `bytes`, `messages`)
+ VALUES (:username, '0', '0') ON DUPLICATE KEY UPDATE `bytes` = '0', `messages` = '0';");
+ $stmt->execute(array(':username' => $username));
+ $stmt = $pdo->prepare("INSERT INTO `quota2replica` (`username`, `bytes`, `messages`)
+ VALUES (:username, '0', '0') ON DUPLICATE KEY UPDATE `bytes` = '0', `messages` = '0';");
+ $stmt->execute(array(':username' => $username));
+ $stmt = $pdo->prepare("INSERT INTO `alias` (`address`, `goto`, `domain`, `active`)
+ VALUES (:username1, :username2, :domain, :active)");
+ $stmt->execute(array(
+ ':username1' => $username,
+ ':username2' => $username,
+ ':domain' => $domain,
+ ':active' => $active
+ ));
+ $stmt = $pdo->prepare("INSERT INTO `user_acl` (`username`) VALUES (:username)");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('mailbox_added', htmlspecialchars($username))
+ );
+ break;
+ case 'resource':
+ $domain = idn_to_ascii(strtolower(trim($_data['domain'])), 0, INTL_IDNA_VARIANT_UTS46);
+ $description = $_data['description'];
+ $local_part = preg_replace('/[^\da-z]/i', '', preg_quote($description, '/'));
+ $name = $local_part . '@' . $domain;
+ $kind = $_data['kind'];
+ $multiple_bookings = intval($_data['multiple_bookings']);
+ $active = intval($_data['active']);
+ if (!filter_var($name, FILTER_VALIDATE_EMAIL)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'resource_invalid'
+ );
+ return false;
+ }
+ if (empty($description)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'description_invalid'
+ );
+ return false;
+ }
+ if (!isset($multiple_bookings) || $multiple_bookings < -1) {
+ $multiple_bookings = -1;
+ }
+ if ($kind != 'location' && $kind != 'group' && $kind != 'thing') {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'resource_invalid'
+ );
+ return false;
+ }
+ if (!is_valid_domain_name($domain)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'domain_invalid'
+ );
+ return false;
+ }
+ if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT `username` FROM `mailbox` WHERE `username` = :name");
+ $stmt->execute(array(':name' => $name));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('object_exists', htmlspecialchars($name))
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT `address` FROM `alias` WHERE address= :name");
+ $stmt->execute(array(':name' => $name));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('is_alias', htmlspecialchars($name))
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT `address` FROM `spamalias` WHERE `address`= :name");
+ $stmt->execute(array(':name' => $name));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('is_spam_alias', htmlspecialchars($name))
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT `domain` FROM `domain` WHERE `domain`= :domain");
+ $stmt->execute(array(':domain' => $domain));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results == 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('domain_not_found', htmlspecialchars($domain))
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("INSERT INTO `mailbox` (`username`, `password`, `name`, `quota`, `local_part`, `domain`, `active`, `multiple_bookings`, `kind`)
+ VALUES (:name, 'RESOURCE', :description, 0, :local_part, :domain, :active, :multiple_bookings, :kind)");
+ $stmt->execute(array(
+ ':name' => $name,
+ ':description' => $description,
+ ':local_part' => $local_part,
+ ':domain' => $domain,
+ ':active' => $active,
+ ':kind' => $kind,
+ ':multiple_bookings' => $multiple_bookings
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('resource_added', htmlspecialchars($name))
+ );
+ break;
+ }
+ break;
+ case 'edit':
+ switch ($_type) {
+ case 'alias_domain':
+ $alias_domains = (array)$_data['alias_domain'];
+ foreach ($alias_domains as $alias_domain) {
+ $alias_domain = idn_to_ascii(strtolower(trim($alias_domain)), 0, INTL_IDNA_VARIANT_UTS46);
+ $is_now = mailbox('get', 'alias_domain_details', $alias_domain);
+ if (!empty($is_now)) {
+ $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];
+ $target_domain = (!empty($_data['target_domain'])) ? idn_to_ascii(strtolower(trim($_data['target_domain'])), 0, INTL_IDNA_VARIANT_UTS46) : $is_now['target_domain'];
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('alias_domain_invalid', htmlspecialchars($alias_domain))
+ );
+ continue;
+ }
+ if (!is_valid_domain_name($target_domain)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('target_domain_invalid', htmlspecialchars($target_domain))
+ );
+ continue;
+ }
+ if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $target_domain)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ if (empty(mailbox('get', 'domain_details', $target_domain)) || !empty(mailbox('get', 'alias_domain_details', $target_domain))) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('target_domain_invalid', htmlspecialchars($target_domain))
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("UPDATE `alias_domain` SET
+ `target_domain` = :target_domain,
+ `active` = :active
+ WHERE `alias_domain` = :alias_domain");
+ $stmt->execute(array(
+ ':alias_domain' => $alias_domain,
+ ':target_domain' => $target_domain,
+ ':active' => $active
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('aliasd_modified', htmlspecialchars($alias_domain))
+ );
+ }
+ break;
+ case 'tls_policy':
+ if (!is_array($_data['username'])) {
+ $usernames = array();
+ $usernames[] = $_data['username'];
+ }
+ else {
+ $usernames = $_data['username'];
+ }
+ if (!isset($_SESSION['acl']['tls_policy']) || $_SESSION['acl']['tls_policy'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ foreach ($usernames as $username) {
+ if (!filter_var($username, FILTER_VALIDATE_EMAIL) || !hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $is_now = mailbox('get', 'tls_policy', $username);
+ if (!empty($is_now)) {
+ $tls_enforce_in = (isset($_data['tls_enforce_in'])) ? intval($_data['tls_enforce_in']) : $is_now['tls_enforce_in'];
+ $tls_enforce_out = (isset($_data['tls_enforce_out'])) ? intval($_data['tls_enforce_out']) : $is_now['tls_enforce_out'];
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("UPDATE `mailbox`
+ SET `attributes` = JSON_SET(`attributes`, '$.tls_enforce_out', :tls_out),
+ `attributes` = JSON_SET(`attributes`, '$.tls_enforce_in', :tls_in)
+ WHERE `username` = :username");
+ $stmt->execute(array(
+ ':tls_out' => intval($tls_enforce_out),
+ ':tls_in' => intval($tls_enforce_in),
+ ':username' => $username
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('mailbox_modified', $username)
+ );
+ }
+ break;
+ case 'quarantine_notification':
+ if (!is_array($_data['username'])) {
+ $usernames = array();
+ $usernames[] = $_data['username'];
+ }
+ else {
+ $usernames = $_data['username'];
+ }
+ if (!isset($_SESSION['acl']['quarantine_notification']) || $_SESSION['acl']['quarantine_notification'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ foreach ($usernames as $username) {
+ if (!filter_var($username, FILTER_VALIDATE_EMAIL) || !hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $is_now = mailbox('get', 'quarantine_notification', $username);
+ if (!empty($is_now)) {
+ $quarantine_notification = (isset($_data['quarantine_notification'])) ? $_data['quarantine_notification'] : $is_now['quarantine_notification'];
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ if (!in_array($quarantine_notification, array('never', 'hourly', 'daily', 'weekly'))) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("UPDATE `mailbox`
+ SET `attributes` = JSON_SET(`attributes`, '$.quarantine_notification', :quarantine_notification)
+ WHERE `username` = :username");
+ $stmt->execute(array(
+ ':quarantine_notification' => $quarantine_notification,
+ ':username' => $username
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('mailbox_modified', $username)
+ );
+ }
+ break;
+ case 'quarantine_category':
+ if (!is_array($_data['username'])) {
+ $usernames = array();
+ $usernames[] = $_data['username'];
+ }
+ else {
+ $usernames = $_data['username'];
+ }
+ if (!isset($_SESSION['acl']['quarantine_category']) || $_SESSION['acl']['quarantine_category'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ foreach ($usernames as $username) {
+ if (!filter_var($username, FILTER_VALIDATE_EMAIL) || !hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $is_now = mailbox('get', 'quarantine_category', $username);
+ if (!empty($is_now)) {
+ $quarantine_category = (isset($_data['quarantine_category'])) ? $_data['quarantine_category'] : $is_now['quarantine_category'];
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ if (!in_array($quarantine_category, array('add_header', 'reject', 'all'))) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("UPDATE `mailbox`
+ SET `attributes` = JSON_SET(`attributes`, '$.quarantine_category', :quarantine_category)
+ WHERE `username` = :username");
+ $stmt->execute(array(
+ ':quarantine_category' => $quarantine_category,
+ ':username' => $username
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('mailbox_modified', $username)
+ );
+ }
+ break;
+ case 'spam_score':
+ if (!is_array($_data['username'])) {
+ $usernames = array();
+ $usernames[] = $_data['username'];
+ }
+ else {
+ $usernames = $_data['username'];
+ }
+ if (!isset($_SESSION['acl']['spam_score']) || $_SESSION['acl']['spam_score'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ foreach ($usernames as $username) {
+ if ($_data['spam_score'] == "default") {
+ $stmt = $pdo->prepare("DELETE FROM `filterconf` WHERE `object` = :username
+ AND (`option` = 'lowspamlevel' OR `option` = 'highspamlevel')");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('mailbox_modified', $username)
+ );
+ continue;
+ }
+ $lowspamlevel = explode(',', $_data['spam_score'])[0];
+ $highspamlevel = explode(',', $_data['spam_score'])[1];
+ if (!is_numeric($lowspamlevel) || !is_numeric($highspamlevel)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'Invalid spam score, format must be "1,2" where first is low and second is high spam value.'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("DELETE FROM `filterconf` WHERE `object` = :username
+ AND (`option` = 'lowspamlevel' OR `option` = 'highspamlevel')");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("INSERT INTO `filterconf` (`object`, `option`, `value`)
+ VALUES (:username, 'highspamlevel', :highspamlevel)");
+ $stmt->execute(array(
+ ':username' => $username,
+ ':highspamlevel' => $highspamlevel
+ ));
+ $stmt = $pdo->prepare("INSERT INTO `filterconf` (`object`, `option`, `value`)
+ VALUES (:username, 'lowspamlevel', :lowspamlevel)");
+ $stmt->execute(array(
+ ':username' => $username,
+ ':lowspamlevel' => $lowspamlevel
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('mailbox_modified', $username)
+ );
+ }
+ break;
+ case 'time_limited_alias':
+ if (!isset($_SESSION['acl']['spam_alias']) || $_SESSION['acl']['spam_alias'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ if (!is_array($_data['address'])) {
+ $addresses = array();
+ $addresses[] = $_data['address'];
+ }
+ else {
+ $addresses = $_data['address'];
+ }
+ foreach ($addresses as $address) {
+ $stmt = $pdo->prepare("SELECT `goto` FROM `spamalias` WHERE `address` = :address");
+ $stmt->execute(array(':address' => $address));
+ $goto = $stmt->fetch(PDO::FETCH_ASSOC)['goto'];
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $goto)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ if (empty($_data['validity'])) {
+ continue;
+ }
+ $validity = round((int)time() + ($_data['validity'] * 3600));
+ $stmt = $pdo->prepare("UPDATE `spamalias` SET `validity` = :validity WHERE
+ `address` = :address");
+ $stmt->execute(array(
+ ':address' => $address,
+ ':validity' => $validity
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('mailbox_modified', htmlspecialchars(implode(', ', $usernames)))
+ );
+ }
+ break;
+ case 'delimiter_action':
+ if (!is_array($_data['username'])) {
+ $usernames = array();
+ $usernames[] = $_data['username'];
+ }
+ else {
+ $usernames = $_data['username'];
+ }
+ if (!isset($_SESSION['acl']['delimiter_action']) || $_SESSION['acl']['delimiter_action'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ foreach ($usernames as $username) {
+ if (!filter_var($username, FILTER_VALIDATE_EMAIL) || !hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ if (isset($_data['tagged_mail_handler']) && $_data['tagged_mail_handler'] == "subject") {
+ try {
+ $redis->hSet('RCPT_WANTS_SUBJECT_TAG', $username, 1);
+ $redis->hDel('RCPT_WANTS_SUBFOLDER_TAG', $username);
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('redis_error', $e)
+ );
+ continue;
+ }
+ }
+ else if (isset($_data['tagged_mail_handler']) && $_data['tagged_mail_handler'] == "subfolder") {
+ try {
+ $redis->hSet('RCPT_WANTS_SUBFOLDER_TAG', $username, 1);
+ $redis->hDel('RCPT_WANTS_SUBJECT_TAG', $username);
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('redis_error', $e)
+ );
+ continue;
+ }
+ }
+ else {
+ try {
+ $redis->hDel('RCPT_WANTS_SUBJECT_TAG', $username);
+ $redis->hDel('RCPT_WANTS_SUBFOLDER_TAG', $username);
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('redis_error', $e)
+ );
+ continue;
+ }
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('mailbox_modified', $username)
+ );
+ }
+ break;
+ case 'syncjob':
+ if (!is_array($_data['id'])) {
+ $ids = array();
+ $ids[] = $_data['id'];
+ }
+ else {
+ $ids = $_data['id'];
+ }
+ if (!isset($_SESSION['acl']['syncjobs']) || $_SESSION['acl']['syncjobs'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ foreach ($ids as $id) {
+ $is_now = mailbox('get', 'syncjob_details', $id, array('with_password'));
+ if (!empty($is_now)) {
+ $username = $is_now['user2'];
+ $user1 = (!empty($_data['user1'])) ? $_data['user1'] : $is_now['user1'];
+ $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];
+ $last_run = (isset($_data['last_run'])) ? NULL : $is_now['last_run'];
+ $delete2duplicates = (isset($_data['delete2duplicates'])) ? intval($_data['delete2duplicates']) : $is_now['delete2duplicates'];
+ $subscribeall = (isset($_data['subscribeall'])) ? intval($_data['subscribeall']) : $is_now['subscribeall'];
+ $delete1 = (isset($_data['delete1'])) ? intval($_data['delete1']) : $is_now['delete1'];
+ $delete2 = (isset($_data['delete2'])) ? intval($_data['delete2']) : $is_now['delete2'];
+ $automap = (isset($_data['automap'])) ? intval($_data['automap']) : $is_now['automap'];
+ $skipcrossduplicates = (isset($_data['skipcrossduplicates'])) ? intval($_data['skipcrossduplicates']) : $is_now['skipcrossduplicates'];
+ $port1 = (!empty($_data['port1'])) ? $_data['port1'] : $is_now['port1'];
+ $password1 = (!empty($_data['password1'])) ? $_data['password1'] : $is_now['password1'];
+ $host1 = (!empty($_data['host1'])) ? $_data['host1'] : $is_now['host1'];
+ $subfolder2 = (isset($_data['subfolder2'])) ? $_data['subfolder2'] : $is_now['subfolder2'];
+ $enc1 = (!empty($_data['enc1'])) ? $_data['enc1'] : $is_now['enc1'];
+ $mins_interval = (!empty($_data['mins_interval'])) ? $_data['mins_interval'] : $is_now['mins_interval'];
+ $exclude = (isset($_data['exclude'])) ? $_data['exclude'] : $is_now['exclude'];
+ $custom_params = (isset($_data['custom_params'])) ? $_data['custom_params'] : $is_now['custom_params'];
+ $maxage = (isset($_data['maxage']) && $_data['maxage'] != "") ? intval($_data['maxage']) : $is_now['maxage'];
+ $maxbytespersecond = (isset($_data['maxbytespersecond']) && $_data['maxbytespersecond'] != "") ? intval($_data['maxbytespersecond']) : $is_now['maxbytespersecond'];
+ $timeout1 = (isset($_data['timeout1']) && $_data['timeout1'] != "") ? intval($_data['timeout1']) : $is_now['timeout1'];
+ $timeout2 = (isset($_data['timeout2']) && $_data['timeout2'] != "") ? intval($_data['timeout2']) : $is_now['timeout2'];
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ if (strpos($custom_params, 'pipemess')) {
+ $custom_params = '';
+ }
+ if (empty($subfolder2)) {
+ $subfolder2 = "";
+ }
+ if (!isset($maxage) || !filter_var($maxage, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 32000)))) {
+ $maxage = "0";
+ }
+ if (!isset($timeout1) || !filter_var($timeout1, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 32000)))) {
+ $timeout1 = "600";
+ }
+ if (!isset($timeout2) || !filter_var($timeout2, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 32000)))) {
+ $timeout2 = "600";
+ }
+ if (!isset($maxbytespersecond) || !filter_var($maxbytespersecond, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 125000000)))) {
+ $maxbytespersecond = "0";
+ }
+ if (!filter_var($port1, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 65535)))) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ if (!filter_var($mins_interval, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 43800)))) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ if (!is_valid_domain_name($host1)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ if ($enc1 != "TLS" && $enc1 != "SSL" && $enc1 != "PLAIN") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ if (@preg_match("/" . $exclude . "/", null) === false) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("UPDATE `imapsync` SET `delete1` = :delete1,
+ `delete2` = :delete2,
+ `automap` = :automap,
+ `skipcrossduplicates` = :skipcrossduplicates,
+ `maxage` = :maxage,
+ `maxbytespersecond` = :maxbytespersecond,
+ `subfolder2` = :subfolder2,
+ `exclude` = :exclude,
+ `host1` = :host1,
+ `last_run` = :last_run,
+ `user1` = :user1,
+ `password1` = :password1,
+ `mins_interval` = :mins_interval,
+ `port1` = :port1,
+ `enc1` = :enc1,
+ `delete2duplicates` = :delete2duplicates,
+ `custom_params` = :custom_params,
+ `timeout1` = :timeout1,
+ `timeout2` = :timeout2,
+ `subscribeall` = :subscribeall,
+ `active` = :active
+ WHERE `id` = :id");
+ $stmt->execute(array(
+ ':delete1' => $delete1,
+ ':delete2' => $delete2,
+ ':automap' => $automap,
+ ':skipcrossduplicates' => $skipcrossduplicates,
+ ':id' => $id,
+ ':exclude' => $exclude,
+ ':maxage' => $maxage,
+ ':maxbytespersecond' => $maxbytespersecond,
+ ':subfolder2' => $subfolder2,
+ ':host1' => $host1,
+ ':user1' => $user1,
+ ':password1' => $password1,
+ ':last_run' => $last_run,
+ ':mins_interval' => $mins_interval,
+ ':port1' => $port1,
+ ':enc1' => $enc1,
+ ':delete2duplicates' => $delete2duplicates,
+ ':custom_params' => $custom_params,
+ ':timeout1' => $timeout1,
+ ':timeout2' => $timeout2,
+ ':subscribeall' => $subscribeall,
+ ':active' => $active,
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('mailbox_modified', $username)
+ );
+ }
+ break;
+ case 'filter':
+ if (!isset($_SESSION['acl']['filters']) || $_SESSION['acl']['filters'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $sieve = new Sieve\SieveParser();
+ if (!is_array($_data['id'])) {
+ $ids = array();
+ $ids[] = $_data['id'];
+ }
+ else {
+ $ids = $_data['id'];
+ }
+ foreach ($ids as $id) {
+ $is_now = mailbox('get', 'filter_details', $id);
+ if (!empty($is_now)) {
+ $username = $is_now['username'];
+ $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];
+ $script_desc = (!empty($_data['script_desc'])) ? $_data['script_desc'] : $is_now['script_desc'];
+ $script_data = (!empty($_data['script_data'])) ? $_data['script_data'] : $is_now['script_data'];
+ $filter_type = (!empty($_data['filter_type'])) ? $_data['filter_type'] : $is_now['filter_type'];
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ try {
+ $sieve->parse($script_data);
+ }
+ catch (Exception $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('sieve_error', $e->getMessage())
+ );
+ continue;
+ }
+ if ($filter_type != 'postfilter' && $filter_type != 'prefilter') {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'filter_type'
+ );
+ continue;
+ }
+ if ($active == '1') {
+ $script_name = 'active';
+ $stmt = $pdo->prepare("UPDATE `sieve_filters`
+ SET `script_name` = 'inactive'
+ WHERE `username` = :username
+ AND `filter_type` = :filter_type");
+ $stmt->execute(array(
+ ':username' => $username,
+ ':filter_type' => $filter_type
+ ));
+ }
+ else {
+ $script_name = 'inactive';
+ }
+ $stmt = $pdo->prepare("UPDATE `sieve_filters` SET `script_desc` = :script_desc, `script_data` = :script_data, `script_name` = :script_name, `filter_type` = :filter_type
+ WHERE `id` = :id");
+ $stmt->execute(array(
+ ':script_desc' => $script_desc,
+ ':script_data' => $script_data,
+ ':script_name' => $script_name,
+ ':filter_type' => $filter_type,
+ ':id' => $id
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('mailbox_modified', $username)
+ );
+ }
+ break;
+ case 'alias':
+ if (!is_array($_data['id'])) {
+ $ids = array();
+ $ids[] = $_data['id'];
+ }
+ else {
+ $ids = $_data['id'];
+ }
+ foreach ($ids as $id) {
+ $is_now = mailbox('get', 'alias_details', $id);
+ if (!empty($is_now)) {
+ $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];
+ $sogo_visible = (isset($_data['sogo_visible'])) ? intval($_data['sogo_visible']) : $is_now['sogo_visible'];
+ $goto_null = (isset($_data['goto_null'])) ? intval($_data['goto_null']) : 0;
+ $goto_spam = (isset($_data['goto_spam'])) ? intval($_data['goto_spam']) : 0;
+ $goto_ham = (isset($_data['goto_ham'])) ? intval($_data['goto_ham']) : 0;
+ $public_comment = (isset($_data['public_comment'])) ? $_data['public_comment'] : $is_now['public_comment'];
+ $private_comment = (isset($_data['private_comment'])) ? $_data['private_comment'] : $is_now['private_comment'];
+ $goto = (!empty($_data['goto'])) ? $_data['goto'] : $is_now['goto'];
+ $address = (!empty($_data['address'])) ? $_data['address'] : $is_now['address'];
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('alias_invalid', $address)
+ );
+ continue;
+ }
+ $domain = idn_to_ascii(substr(strstr($address, '@'), 1), 0, INTL_IDNA_VARIANT_UTS46);
+ if ($is_now['address'] != $address) {
+ $local_part = strstr($address, '@', true);
+ $address = $local_part.'@'.$domain;
+ if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ if ((!filter_var($address, FILTER_VALIDATE_EMAIL) === true) && !empty($local_part)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('alias_invalid', $address)
+ );
+ continue;
+ }
+ if (strtolower($is_now['address']) != strtolower($address)) {
+ $stmt = $pdo->prepare("SELECT `address` FROM `alias`
+ WHERE `address`= :address OR `address` IN (
+ SELECT `username` FROM `mailbox`, `alias_domain`
+ WHERE (
+ `alias_domain`.`alias_domain` = :address_d
+ AND `mailbox`.`username` = CONCAT(:address_l, '@', alias_domain.target_domain)))");
+ $stmt->execute(array(
+ ':address' => $address,
+ ':address_l' => $local_part,
+ ':address_d' => $domain
+ ));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('is_alias_or_mailbox', htmlspecialchars($address))
+ );
+ continue;
+ }
+ }
+ $stmt = $pdo->prepare("SELECT `domain` FROM `domain`
+ WHERE `domain`= :domain1 OR `domain` = (SELECT `target_domain` FROM `alias_domain` WHERE `alias_domain` = :domain2)");
+ $stmt->execute(array(':domain1' => $domain, ':domain2' => $domain));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results == 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('domain_not_found', htmlspecialchars($domain))
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("SELECT `address` FROM `spamalias`
+ WHERE `address`= :address");
+ $stmt->execute(array(':address' => $address));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('is_spam_alias', htmlspecialchars($address))
+ );
+ continue;
+ }
+ }
+ if ($goto_null == "1") {
+ $goto = "null@localhost";
+ }
+ elseif ($goto_spam == "1") {
+ $goto = "spam@localhost";
+ }
+ elseif ($goto_ham == "1") {
+ $goto = "ham@localhost";
+ }
+ else {
+ $gotos = array_map('trim', preg_split( "/( |,|;|\n)/", $goto));
+ foreach ($gotos as $i => &$goto) {
+ if (empty($goto)) {
+ continue;
+ }
+ if (!filter_var($goto, FILTER_VALIDATE_EMAIL)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('goto_invalid', $goto)
+ );
+ unset($gotos[$i]);
+ continue;
+ }
+ if ($goto == $address) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'alias_goto_identical'
+ );
+ unset($gotos[$i]);
+ continue;
+ }
+ // Delete from sender_acl to prevent duplicates
+ $stmt = $pdo->prepare("DELETE FROM `sender_acl` WHERE
+ `logged_in_as` = :goto AND
+ `send_as` = :address");
+ $stmt->execute(array(
+ ':goto' => $goto,
+ ':address' => $address
+ ));
+ }
+ $gotos = array_filter($gotos);
+ $goto = implode(",", $gotos);
+ }
+ if (!empty($goto)) {
+ $stmt = $pdo->prepare("UPDATE `alias` SET
+ `address` = :address,
+ `public_comment` = :public_comment,
+ `private_comment` = :private_comment,
+ `domain` = :domain,
+ `goto` = :goto,
+ `sogo_visible`= :sogo_visible,
+ `active`= :active
+ WHERE `id` = :id");
+ $stmt->execute(array(
+ ':address' => $address,
+ ':public_comment' => $public_comment,
+ ':private_comment' => $private_comment,
+ ':domain' => $domain,
+ ':goto' => $goto,
+ ':sogo_visible' => $sogo_visible,
+ ':active' => $active,
+ ':id' => $is_now['id']
+ ));
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('alias_modified', htmlspecialchars($address))
+ );
+ }
+ break;
+ case 'domain':
+ if (!is_array($_data['domain'])) {
+ $domains = array();
+ $domains[] = $_data['domain'];
+ }
+ else {
+ $domains = $_data['domain'];
+ }
+ foreach ($domains as $domain) {
+ $domain = idn_to_ascii($domain, 0, INTL_IDNA_VARIANT_UTS46);
+ if (!is_valid_domain_name($domain)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'domain_invalid'
+ );
+ continue;
+ }
+ if ($_SESSION['mailcow_cc_role'] == "domainadmin" &&
+ hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {
+ $is_now = mailbox('get', 'domain_details', $domain);
+ if (!empty($is_now)) {
+ $gal = (isset($_data['gal'])) ? intval($_data['gal']) : $is_now['gal'];
+ $description = (!empty($_data['description']) && isset($_SESSION['acl']['domain_desc']) && $_SESSION['acl']['domain_desc'] == "1") ? $_data['description'] : $is_now['description'];
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'domain_invalid'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("UPDATE `domain` SET
+ `description` = :description,
+ `gal` = :gal
+ WHERE `domain` = :domain");
+ $stmt->execute(array(
+ ':description' => $description,
+ ':gal' => $gal,
+ ':domain' => $domain
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('domain_modified', htmlspecialchars($domain))
+ );
+ }
+ elseif ($_SESSION['mailcow_cc_role'] == "admin") {
+ $is_now = mailbox('get', 'domain_details', $domain);
+ if (!empty($is_now)) {
+ $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];
+ $backupmx = (isset($_data['backupmx'])) ? intval($_data['backupmx']) : $is_now['backupmx'];
+ $gal = (isset($_data['gal'])) ? intval($_data['gal']) : $is_now['gal'];
+ $relay_all_recipients = (isset($_data['relay_all_recipients'])) ? intval($_data['relay_all_recipients']) : $is_now['relay_all_recipients'];
+ $relay_unknown_only = (isset($_data['relay_unknown_only'])) ? intval($_data['relay_unknown_only']) : $is_now['relay_unknown_only'];
+ $relayhost = (isset($_data['relayhost'])) ? intval($_data['relayhost']) : $is_now['relayhost'];
+ $aliases = (!empty($_data['aliases'])) ? $_data['aliases'] : $is_now['max_num_aliases_for_domain'];
+ $mailboxes = (isset($_data['mailboxes']) && $_data['mailboxes'] != '') ? intval($_data['mailboxes']) : $is_now['max_num_mboxes_for_domain'];
+ $defquota = (isset($_data['defquota']) && $_data['defquota'] != '') ? intval($_data['defquota']) : ($is_now['def_quota_for_mbox'] / 1048576);
+ $maxquota = (!empty($_data['maxquota'])) ? $_data['maxquota'] : ($is_now['max_quota_for_mbox'] / 1048576);
+ $quota = (!empty($_data['quota'])) ? $_data['quota'] : ($is_now['max_quota_for_domain'] / 1048576);
+ $description = (!empty($_data['description'])) ? $_data['description'] : $is_now['description'];
+ if ($relay_all_recipients == '1') {
+ $backupmx = '1';
+ }
+ if ($relay_unknown_only == '1') {
+ $backupmx = '1';
+ $relay_all_recipients = '1';
+ }
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'domain_invalid'
+ );
+ continue;
+ }
+ // todo: should be using api here
+ $stmt = $pdo->prepare("SELECT
+ COUNT(*) AS count,
+ MAX(COALESCE(ROUND(`quota`/1048576), 0)) AS `biggest_mailbox`,
+ COALESCE(ROUND(SUM(`quota`)/1048576), 0) AS `quota_all`
+ FROM `mailbox`
+ WHERE `kind` NOT REGEXP 'location|thing|group'
+ AND domain = :domain");
+ $stmt->execute(array(':domain' => $domain));
+ $MailboxData = $stmt->fetch(PDO::FETCH_ASSOC);
+ // todo: should be using api here
+ $stmt = $pdo->prepare("SELECT COUNT(*) AS `count` FROM `alias`
+ WHERE domain = :domain
+ AND address NOT IN (
+ SELECT `username` FROM `mailbox`
+ )");
+ $stmt->execute(array(':domain' => $domain));
+ $AliasData = $stmt->fetch(PDO::FETCH_ASSOC);
+ if ($defquota > $maxquota) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'mailbox_defquota_exceeds_mailbox_maxquota'
+ );
+ continue;
+ }
+ if ($defquota == "0" || empty($defquota)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'defquota_empty'
+ );
+ continue;
+ }
+ if ($maxquota > $quota) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'mailbox_quota_exceeds_domain_quota'
+ );
+ continue;
+ }
+ if ($maxquota == "0" || empty($maxquota)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'maxquota_empty'
+ );
+ continue;
+ }
+ if ($MailboxData['biggest_mailbox'] > $maxquota) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('max_quota_in_use', $MailboxData['biggest_mailbox'])
+ );
+ continue;
+ }
+ if ($MailboxData['quota_all'] > $quota) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('domain_quota_m_in_use', $MailboxData['quota_all'])
+ );
+ continue;
+ }
+ if ($MailboxData['count'] > $mailboxes) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('mailboxes_in_use', $MailboxData['count'])
+ );
+ continue;
+ }
+ if ($AliasData['count'] > $aliases) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('aliases_in_use', $AliasData['count'])
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("UPDATE `domain` SET
+ `relay_all_recipients` = :relay_all_recipients,
+ `relay_unknown_only` = :relay_unknown_only,
+ `backupmx` = :backupmx,
+ `gal` = :gal,
+ `active` = :active,
+ `quota` = :quota,
+ `defquota` = :defquota,
+ `maxquota` = :maxquota,
+ `relayhost` = :relayhost,
+ `mailboxes` = :mailboxes,
+ `aliases` = :aliases,
+ `description` = :description
+ WHERE `domain` = :domain");
+ $stmt->execute(array(
+ ':relay_all_recipients' => $relay_all_recipients,
+ ':relay_unknown_only' => $relay_unknown_only,
+ ':backupmx' => $backupmx,
+ ':gal' => $gal,
+ ':active' => $active,
+ ':quota' => $quota,
+ ':defquota' => $defquota,
+ ':maxquota' => $maxquota,
+ ':relayhost' => $relayhost,
+ ':mailboxes' => $mailboxes,
+ ':aliases' => $aliases,
+ ':description' => $description,
+ ':domain' => $domain
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('domain_modified', htmlspecialchars($domain))
+ );
+ }
+ }
+ break;
+ case 'mailbox':
+ if (!is_array($_data['username'])) {
+ $usernames = array();
+ $usernames[] = $_data['username'];
+ }
+ else {
+ $usernames = $_data['username'];
+ }
+ foreach ($usernames as $username) {
+ if (!filter_var($username, FILTER_VALIDATE_EMAIL)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('username_invalid', $username)
+ );
+ continue;
+ }
+ $is_now = mailbox('get', 'mailbox_details', $username);
+ if (isset($_data['protocol_access'])) {
+ $_data['imap_access'] = (in_array('imap', $_data['protocol_access'])) ? 1 : 0;
+ $_data['pop3_access'] = (in_array('pop3', $_data['protocol_access'])) ? 1 : 0;
+ $_data['smtp_access'] = (in_array('smtp', $_data['protocol_access'])) ? 1 : 0;
+ }
+ if (!empty($is_now)) {
+ $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];
+ (int)$force_pw_update = (isset($_data['force_pw_update'])) ? intval($_data['force_pw_update']) : intval($is_now['attributes']['force_pw_update']);
+ (int)$sogo_access = (isset($_data['sogo_access']) && isset($_SESSION['acl']['protocol_access']) && $_SESSION['acl']['protocol_access'] == "1") ? intval($_data['sogo_access']) : intval($is_now['attributes']['sogo_access']);
+ (int)$imap_access = (isset($_data['imap_access']) && isset($_SESSION['acl']['protocol_access']) && $_SESSION['acl']['protocol_access'] == "1") ? intval($_data['imap_access']) : intval($is_now['attributes']['imap_access']);
+ (int)$pop3_access = (isset($_data['pop3_access']) && isset($_SESSION['acl']['protocol_access']) && $_SESSION['acl']['protocol_access'] == "1") ? intval($_data['pop3_access']) : intval($is_now['attributes']['pop3_access']);
+ (int)$smtp_access = (isset($_data['smtp_access']) && isset($_SESSION['acl']['protocol_access']) && $_SESSION['acl']['protocol_access'] == "1") ? intval($_data['smtp_access']) : intval($is_now['attributes']['smtp_access']);
+ (int)$quota_m = (isset_has_content($_data['quota'])) ? intval($_data['quota']) : ($is_now['quota'] / 1048576);
+ $name = (!empty($_data['name'])) ? ltrim(rtrim($_data['name'], '>'), '<') : $is_now['name'];
+ $domain = $is_now['domain'];
+ $quota_b = $quota_m * 1048576;
+ $password = (!empty($_data['password'])) ? $_data['password'] : null;
+ $password2 = (!empty($_data['password2'])) ? $_data['password2'] : null;
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ // if already 0 == ok
+ if ((!isset($_SESSION['acl']['unlimited_quota']) || $_SESSION['acl']['unlimited_quota'] != "1") && ($quota_m == 0 && $is_now['quota'] != 0)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'unlimited_quota_acl'
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT `quota`, `maxquota`
+ FROM `domain`
+ WHERE `domain` = :domain");
+ $stmt->execute(array(':domain' => $domain));
+ $DomainData = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ if ($quota_m > $DomainData['maxquota']) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('mailbox_quota_exceeded', $DomainData['maxquota'])
+ );
+ continue;
+ }
+ if (((($is_now['quota_used'] / 1048576) - $quota_m) + $quota_m) > $DomainData['quota']) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('mailbox_quota_left_exceeded', ($is_now['max_new_quota'] / 1048576))
+ );
+ continue;
+ }
+ $extra_acls = array();
+ if (isset($_data['extended_sender_acl'])) {
+ if (!isset($_SESSION['acl']['extend_sender_acl']) || $_SESSION['acl']['extend_sender_acl'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $extra_acls = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['extended_sender_acl']));
+ foreach ($extra_acls as $i => &$extra_acl) {
+ if (empty($extra_acl)) {
+ continue;
+ }
+ if (substr($extra_acl, 0, 1) === "@") {
+ $extra_acl = ltrim($extra_acl, '@');
+ }
+ if (!filter_var($extra_acl, FILTER_VALIDATE_EMAIL) && !is_valid_domain_name($extra_acl)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('extra_acl_invalid', htmlspecialchars($extra_acl))
+ );
+ unset($extra_acls[$i]);
+ continue;
+ }
+ $domains = array_merge(mailbox('get', 'domains'), mailbox('get', 'alias_domains'));
+ if (filter_var($extra_acl, FILTER_VALIDATE_EMAIL)) {
+ $extra_acl_domain = idn_to_ascii(substr(strstr($extra_acl, '@'), 1), 0, INTL_IDNA_VARIANT_UTS46);
+ if (in_array($extra_acl_domain, $domains)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('extra_acl_invalid_domain', $extra_acl_domain)
+ );
+ unset($extra_acls[$i]);
+ continue;
+ }
+ }
+ else {
+ if (in_array($extra_acl, $domains)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('extra_acl_invalid_domain', $extra_acl_domain)
+ );
+ unset($extra_acls[$i]);
+ continue;
+ }
+ $extra_acl = '@' . $extra_acl;
+ }
+ }
+ $extra_acls = array_filter($extra_acls);
+ $extra_acls = array_values($extra_acls);
+ $extra_acls = array_unique($extra_acls);
+ $stmt = $pdo->prepare("DELETE FROM `sender_acl` WHERE `external` = 1 AND `logged_in_as` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ foreach ($extra_acls as $sender_acl_external) {
+ $stmt = $pdo->prepare("INSERT INTO `sender_acl` (`send_as`, `logged_in_as`, `external`)
+ VALUES (:sender_acl, :username, 1)");
+ $stmt->execute(array(
+ ':sender_acl' => $sender_acl_external,
+ ':username' => $username
+ ));
+ }
+ }
+ if (isset($_data['sender_acl'])) {
+ // Get sender_acl items set by admin
+ $sender_acl_admin = array_merge(
+ mailbox('get', 'sender_acl_handles', $username)['sender_acl_domains']['ro'],
+ mailbox('get', 'sender_acl_handles', $username)['sender_acl_addresses']['ro']
+ );
+ // Get sender_acl items from POST array
+ // Set sender_acl_domain_admin to empty array if sender_acl contains "default" to trigger a reset
+ // Delete records from sender_acl if sender_acl contains "*" and set to array("*")
+ $_data['sender_acl'] = (array)$_data['sender_acl'];
+ if (in_array("*", $_data['sender_acl'])) {
+ $sender_acl_domain_admin = array('*');
+ }
+ elseif (array("default") === $_data['sender_acl']) {
+ $sender_acl_domain_admin = array();
+ }
+ else {
+ if (array_search('default', $_data['sender_acl']) !== false){
+ unset($_data['sender_acl'][array_search('default', $_data['sender_acl'])]);
+ }
+ $sender_acl_domain_admin = $_data['sender_acl'];
+ }
+ if (!empty($sender_acl_domain_admin) || !empty($sender_acl_admin)) {
+ // Check items in POST array and skip invalid
+ foreach ($sender_acl_domain_admin as $key => $val) {
+ // Check for invalid domain or email format or not *
+ if (!filter_var($val, FILTER_VALIDATE_EMAIL) && !is_valid_domain_name(ltrim($val, '@')) && $val != '*') {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('sender_acl_invalid', $sender_acl_domain_admin[$key])
+ );
+ unset($sender_acl_domain_admin[$key]);
+ continue;
+ }
+ // Check if user has domain access (if object is domain)
+ $domain = ltrim($sender_acl_domain_admin[$key], '@');
+ if (is_valid_domain_name($domain)) {
+ // Check for- and skip non-mailcow domains
+ $domains = array_merge(mailbox('get', 'domains'), mailbox('get', 'alias_domains'));
+ if (!empty($domains)) {
+ if (!in_array($domain, $domains)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('sender_acl_invalid', $sender_acl_domain_admin[$key])
+ );
+ unset($sender_acl_domain_admin[$key]);
+ continue;
+ }
+ }
+ if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('sender_acl_invalid', $sender_acl_domain_admin[$key])
+ );
+ unset($sender_acl_domain_admin[$key]);
+ continue;
+ }
+ }
+ // Wildcard can only be used if role == admin
+ if ($val == '*' && $_SESSION['mailcow_cc_role'] != 'admin') {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('sender_acl_invalid', $sender_acl_domain_admin[$key])
+ );
+ unset($sender_acl_domain_admin[$key]);
+ continue;
+ }
+ // Check if user has alias access (if object is email)
+ if (filter_var($val, FILTER_VALIDATE_EMAIL)) {
+ if (!hasAliasObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $val)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('sender_acl_invalid', $sender_acl_domain_admin[$key])
+ );
+ unset($sender_acl_domain_admin[$key]);
+ continue;
+ }
+ }
+ }
+ // Merge both arrays
+ $sender_acl_merged = array_merge($sender_acl_domain_admin, $sender_acl_admin);
+ // If merged array still contains "*", set it as only value
+ !in_array('*', $sender_acl_merged) ?: $sender_acl_merged = array('*');
+ $stmt = $pdo->prepare("DELETE FROM `sender_acl` WHERE `external` = 0 AND `logged_in_as` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $fixed_sender_aliases = mailbox('get', 'sender_acl_handles', $username)['fixed_sender_aliases'];
+ foreach ($sender_acl_merged as $sender_acl) {
+ $domain = ltrim($sender_acl, '@');
+ if (is_valid_domain_name($domain)) {
+ $sender_acl = '@' . $domain;
+ }
+ // Don't add if allowed by alias
+ if (in_array($sender_acl, $fixed_sender_aliases)) {
+ continue;
+ }
+ $stmt = $pdo->prepare("INSERT INTO `sender_acl` (`send_as`, `logged_in_as`)
+ VALUES (:sender_acl, :username)");
+ $stmt->execute(array(
+ ':sender_acl' => $sender_acl,
+ ':username' => $username
+ ));
+ }
+ }
+ else {
+ $stmt = $pdo->prepare("DELETE FROM `sender_acl` WHERE `external` = 0 AND `logged_in_as` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ }
+ }
+ if (!empty($password) && !empty($password2)) {
+ if (!preg_match('/' . $GLOBALS['PASSWD_REGEP'] . '/', $password)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'password_complexity'
+ );
+ continue;
+ }
+ if ($password != $password2) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'password_mismatch'
+ );
+ continue;
+ }
+ // support pre hashed passwords
+ if (preg_match('/^({SSHA256}|{SSHA}|{SHA512-CRYPT}|{SSHA512}|{MD5-CRYPT}|{PLAIN-MD5})/i', $password)) {
+ $password_hashed = $password;
+ }
+ else {
+ $password_hashed = hash_password($password);
+ }
+ $stmt = $pdo->prepare("UPDATE `mailbox` SET
+ `password` = :password_hashed
+ WHERE `username` = :username");
+ $stmt->execute(array(
+ ':password_hashed' => $password_hashed,
+ ':username' => $username
+ ));
+ }
+ // We could either set alias = 1 if alias = 2 or tune the Postfix alias table (that's what we did, TODO: to it the other way)
+ $stmt = $pdo->prepare("UPDATE `alias` SET
+ `active` = :active
+ WHERE `address` = :address");
+ $stmt->execute(array(
+ ':address' => $username,
+ ':active' => $active
+ ));
+ $stmt = $pdo->prepare("UPDATE `mailbox` SET
+ `active` = :active,
+ `name`= :name,
+ `quota` = :quota_b,
+ `attributes` = JSON_SET(`attributes`, '$.force_pw_update', :force_pw_update),
+ `attributes` = JSON_SET(`attributes`, '$.sogo_access', :sogo_access),
+ `attributes` = JSON_SET(`attributes`, '$.imap_access', :imap_access),
+ `attributes` = JSON_SET(`attributes`, '$.pop3_access', :pop3_access),
+ `attributes` = JSON_SET(`attributes`, '$.smtp_access', :smtp_access)
+ WHERE `username` = :username");
+ $stmt->execute(array(
+ ':active' => $active,
+ ':name' => $name,
+ ':quota_b' => $quota_b,
+ ':force_pw_update' => $force_pw_update,
+ ':sogo_access' => $sogo_access,
+ ':imap_access' => $imap_access,
+ ':pop3_access' => $pop3_access,
+ ':smtp_access' => $smtp_access,
+ ':username' => $username
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('mailbox_modified', $username)
+ );
+ }
+ break;
+ case 'resource':
+ if (!is_array($_data['name'])) {
+ $names = array();
+ $names[] = $_data['name'];
+ }
+ else {
+ $names = $_data['name'];
+ }
+ foreach ($names as $name) {
+ $is_now = mailbox('get', 'resource_details', $name);
+ if (!empty($is_now)) {
+ $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];
+ $multiple_bookings = (isset($_data['multiple_bookings'])) ? intval($_data['multiple_bookings']) : $is_now['multiple_bookings'];
+ $description = (!empty($_data['description'])) ? $_data['description'] : $is_now['description'];
+ $kind = (!empty($_data['kind'])) ? $_data['kind'] : $is_now['kind'];
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('resource_invalid', htmlspecialchars($name))
+ );
+ continue;
+ }
+ if (!filter_var($name, FILTER_VALIDATE_EMAIL)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('resource_invalid', htmlspecialchars($name))
+ );
+ continue;
+ }
+ if (!isset($multiple_bookings) || $multiple_bookings < -1) {
+ $multiple_bookings = -1;
+ }
+ if (empty($description)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('description_invalid', htmlspecialchars($name))
+ );
+ continue;
+ }
+ if ($kind != 'location' && $kind != 'group' && $kind != 'thing') {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('resource_invalid', htmlspecialchars($name))
+ );
+ continue;
+ }
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $name)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("UPDATE `mailbox` SET
+ `active` = :active,
+ `name`= :description,
+ `kind`= :kind,
+ `multiple_bookings`= :multiple_bookings
+ WHERE `username` = :name");
+ $stmt->execute(array(
+ ':active' => $active,
+ ':description' => $description,
+ ':multiple_bookings' => $multiple_bookings,
+ ':kind' => $kind,
+ ':name' => $name
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('resource_modified', htmlspecialchars($name))
+ );
+ }
+ break;
+ }
+ break;
+ case 'get':
+ switch ($_type) {
+ case 'sender_acl_handles':
+ if ($_SESSION['mailcow_cc_role'] != "admin" && $_SESSION['mailcow_cc_role'] != "domainadmin") {
+ return false;
+ }
+ $data['sender_acl_domains']['ro'] = array();
+ $data['sender_acl_domains']['rw'] = array();
+ $data['sender_acl_domains']['selectable'] = array();
+ $data['sender_acl_addresses']['ro'] = array();
+ $data['sender_acl_addresses']['rw'] = array();
+ $data['sender_acl_addresses']['selectable'] = array();
+ $data['fixed_sender_aliases'] = array();
+ $data['external_sender_aliases'] = array();
+ // Fixed addresses
+ $stmt = $pdo->prepare("SELECT `address` FROM `alias` WHERE `goto` REGEXP :goto AND `address` NOT LIKE '@%'");
+ $stmt->execute(array(':goto' => '(^|,)'.$_data.'($|,)'));
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while ($row = array_shift($rows)) {
+ $data['fixed_sender_aliases'][] = $row['address'];
+ }
+ $stmt = $pdo->prepare("SELECT CONCAT(`local_part`, '@', `alias_domain`.`alias_domain`) AS `alias_domain_alias` FROM `mailbox`, `alias_domain`
+ WHERE `alias_domain`.`target_domain` = `mailbox`.`domain`
+ AND `mailbox`.`username` = :username");
+ $stmt->execute(array(':username' => $_data));
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while ($row = array_shift($rows)) {
+ if (!empty($row['alias_domain_alias'])) {
+ $data['fixed_sender_aliases'][] = $row['alias_domain_alias'];
+ }
+ }
+ // External addresses
+ $stmt = $pdo->prepare("SELECT `send_as` as `send_as_external` FROM `sender_acl` WHERE `logged_in_as` = :logged_in_as AND `external` = '1'");
+ $stmt->execute(array(':logged_in_as' => $_data));
+ $exernal_rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while ($row = array_shift($exernal_rows)) {
+ if (!empty($row['send_as_external'])) {
+ $data['external_sender_aliases'][] = $row['send_as_external'];
+ }
+ }
+ // Return array $data['sender_acl_domains/addresses']['ro'] with read-only objects
+ // Return array $data['sender_acl_domains/addresses']['rw'] with read-write objects (can be deleted)
+ $stmt = $pdo->prepare("SELECT REPLACE(`send_as`, '@', '') AS `send_as` FROM `sender_acl` WHERE `logged_in_as` = :logged_in_as AND `external` = '0' AND (`send_as` LIKE '@%' OR `send_as` = '*')");
+ $stmt->execute(array(':logged_in_as' => $_data));
+ $domain_rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while ($domain_row = array_shift($domain_rows)) {
+ if (is_valid_domain_name($domain_row['send_as']) && !hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain_row['send_as'])) {
+ $data['sender_acl_domains']['ro'][] = $domain_row['send_as'];
+ continue;
+ }
+ if (is_valid_domain_name($domain_row['send_as']) && hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain_row['send_as'])) {
+ $data['sender_acl_domains']['rw'][] = $domain_row['send_as'];
+ continue;
+ }
+ if ($domain_row['send_as'] == '*' && $_SESSION['mailcow_cc_role'] != 'admin') {
+ $data['sender_acl_domains']['ro'][] = $domain_row['send_as'];
+ }
+ if ($domain_row['send_as'] == '*' && $_SESSION['mailcow_cc_role'] == 'admin') {
+ $data['sender_acl_domains']['rw'][] = $domain_row['send_as'];
+ }
+ }
+ $stmt = $pdo->prepare("SELECT `send_as` FROM `sender_acl` WHERE `logged_in_as` = :logged_in_as AND `external` = '0' AND (`send_as` NOT LIKE '@%' AND `send_as` != '*')");
+ $stmt->execute(array(':logged_in_as' => $_data));
+ $address_rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while ($address_row = array_shift($address_rows)) {
+ if (filter_var($address_row['send_as'], FILTER_VALIDATE_EMAIL) && !hasAliasObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $address_row['send_as'])) {
+ $data['sender_acl_addresses']['ro'][] = $address_row['send_as'];
+ continue;
+ }
+ if (filter_var($address_row['send_as'], FILTER_VALIDATE_EMAIL) && hasAliasObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $address_row['send_as'])) {
+ $data['sender_acl_addresses']['rw'][] = $address_row['send_as'];
+ continue;
+ }
+ }
+ $stmt = $pdo->prepare("SELECT `domain` FROM `domain`
+ WHERE `domain` NOT IN (
+ SELECT REPLACE(`send_as`, '@', '') FROM `sender_acl`
+ WHERE `logged_in_as` = :logged_in_as1
+ AND `external` = '0'
+ AND `send_as` LIKE '@%')
+ UNION
+ SELECT '*' FROM `domain`
+ WHERE '*' NOT IN (
+ SELECT `send_as` FROM `sender_acl`
+ WHERE `logged_in_as` = :logged_in_as2
+ AND `external` = '0'
+ )");
+ $stmt->execute(array(
+ ':logged_in_as1' => $_data,
+ ':logged_in_as2' => $_data
+ ));
+ $rows_domain = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while ($row_domain = array_shift($rows_domain)) {
+ if (is_valid_domain_name($row_domain['domain']) && hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row_domain['domain'])) {
+ $data['sender_acl_domains']['selectable'][] = $row_domain['domain'];
+ continue;
+ }
+ if ($row_domain['domain'] == '*' && $_SESSION['mailcow_cc_role'] == 'admin') {
+ $data['sender_acl_domains']['selectable'][] = $row_domain['domain'];
+ continue;
+ }
+ }
+ $stmt = $pdo->prepare("SELECT `address` FROM `alias`
+ WHERE `goto` != :goto
+ AND `address` NOT IN (
+ SELECT `send_as` FROM `sender_acl`
+ WHERE `logged_in_as` = :logged_in_as
+ AND `external` = '0'
+ AND `send_as` NOT LIKE '@%')");
+ $stmt->execute(array(
+ ':logged_in_as' => $_data,
+ ':goto' => $_data
+ ));
+ $rows_mbox = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while ($row = array_shift($rows_mbox)) {
+ // Aliases are not selectable
+ if (in_array($row['address'], $data['fixed_sender_aliases'])) {
+ continue;
+ }
+ if (filter_var($row['address'], FILTER_VALIDATE_EMAIL) && hasAliasObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['address'])) {
+ $data['sender_acl_addresses']['selectable'][] = $row['address'];
+ }
+ }
+ return $data;
+ break;
+ case 'mailboxes':
+ $mailboxes = array();
+ if (isset($_data) && !hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
+ return false;
+ }
+ elseif (isset($_data) && hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
+ $stmt = $pdo->prepare("SELECT `username` FROM `mailbox` WHERE `kind` NOT REGEXP 'location|thing|group' AND `domain` = :domain");
+ $stmt->execute(array(
+ ':domain' => $_data,
+ ));
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while($row = array_shift($rows)) {
+ $mailboxes[] = $row['username'];
+ }
+ }
+ else {
+ $stmt = $pdo->prepare("SELECT `username` FROM `mailbox` WHERE `kind` NOT REGEXP 'location|thing|group' AND (`domain` IN (SELECT `domain` FROM `domain_admins` WHERE `active` = '1' AND `username` = :username) OR 'admin' = :role)");
+ $stmt->execute(array(
+ ':username' => $_SESSION['mailcow_cc_username'],
+ ':role' => $_SESSION['mailcow_cc_role'],
+ ));
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while($row = array_shift($rows)) {
+ $mailboxes[] = $row['username'];
+ }
+ }
+ return $mailboxes;
+ break;
+ case 'tls_policy':
+ $attrs = array();
+ if (isset($_data) && filter_var($_data, FILTER_VALIDATE_EMAIL)) {
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
+ return false;
+ }
+ }
+ else {
+ $_data = $_SESSION['mailcow_cc_username'];
+ }
+ $stmt = $pdo->prepare("SELECT `attributes` FROM `mailbox` WHERE `username` = :username");
+ $stmt->execute(array(':username' => $_data));
+ $attrs = $stmt->fetch(PDO::FETCH_ASSOC);
+ $attrs = json_decode($attrs['attributes'], true);
+ return array(
+ 'tls_enforce_in' => $attrs['tls_enforce_in'],
+ 'tls_enforce_out' => $attrs['tls_enforce_out']
+ );
+ break;
+ case 'quarantine_notification':
+ $attrs = array();
+ if (isset($_data) && filter_var($_data, FILTER_VALIDATE_EMAIL)) {
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
+ return false;
+ }
+ }
+ else {
+ $_data = $_SESSION['mailcow_cc_username'];
+ }
+ $stmt = $pdo->prepare("SELECT `attributes` FROM `mailbox` WHERE `username` = :username");
+ $stmt->execute(array(':username' => $_data));
+ $attrs = $stmt->fetch(PDO::FETCH_ASSOC);
+ $attrs = json_decode($attrs['attributes'], true);
+ return $attrs['quarantine_notification'];
+ break;
+ case 'quarantine_category':
+ $attrs = array();
+ if (isset($_data) && filter_var($_data, FILTER_VALIDATE_EMAIL)) {
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
+ return false;
+ }
+ }
+ else {
+ $_data = $_SESSION['mailcow_cc_username'];
+ }
+ $stmt = $pdo->prepare("SELECT `attributes` FROM `mailbox` WHERE `username` = :username");
+ $stmt->execute(array(':username' => $_data));
+ $attrs = $stmt->fetch(PDO::FETCH_ASSOC);
+ $attrs = json_decode($attrs['attributes'], true);
+ return $attrs['quarantine_category'];
+ break;
+ case 'filters':
+ $filters = array();
+ if (isset($_data) && filter_var($_data, FILTER_VALIDATE_EMAIL)) {
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
+ return false;
+ }
+ }
+ else {
+ $_data = $_SESSION['mailcow_cc_username'];
+ }
+ $stmt = $pdo->prepare("SELECT `id` FROM `sieve_filters` WHERE `username` = :username");
+ $stmt->execute(array(':username' => $_data));
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while($row = array_shift($rows)) {
+ $filters[] = $row['id'];
+ }
+ return $filters;
+ break;
+ case 'global_filter_details':
+ $global_filters = array();
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ return false;
+ }
+ $global_filters['prefilter'] = file_get_contents('/global_sieve/before');
+ $global_filters['postfilter'] = file_get_contents('/global_sieve/after');
+ return $global_filters;
+ break;
+ case 'filter_details':
+ $filter_details = array();
+ if (!is_numeric($_data)) {
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT CASE `script_name` WHEN 'active' THEN 1 ELSE 0 END AS `active`,
+ id,
+ username,
+ filter_type,
+ script_data,
+ script_desc
+ FROM `sieve_filters`
+ WHERE `id` = :id");
+ $stmt->execute(array(':id' => $_data));
+ $filter_details = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $filter_details['username'])) {
+ return false;
+ }
+ return $filter_details;
+ break;
+ case 'active_user_sieve':
+ $filter_details = array();
+ if (isset($_data) && filter_var($_data, FILTER_VALIDATE_EMAIL)) {
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
+ return false;
+ }
+ }
+ else {
+ $_data = $_SESSION['mailcow_cc_username'];
+ }
+ $exec_fields = array(
+ 'cmd' => 'sieve',
+ 'task' => 'list',
+ 'username' => $_data
+ );
+ $filters = docker('post', 'dovecot-mailcow', 'exec', $exec_fields);
+ $filters = array_filter(preg_split("/(\r\n|\n|\r)/",$filters));
+ foreach ($filters as $filter) {
+ if (preg_match('/.+ ACTIVE/i', $filter)) {
+ $exec_fields = array(
+ 'cmd' => 'sieve',
+ 'task' => 'print',
+ 'script_name' => substr($filter, 0, -7),
+ 'username' => $_data
+ );
+ $script = docker('post', 'dovecot-mailcow', 'exec', $exec_fields);
+ // Remove first line
+ return preg_replace('/^.+\n/', '', $script);
+ }
+ }
+ return false;
+ break;
+ case 'syncjob_details':
+ $syncjobdetails = array();
+ if (!is_numeric($_data)) {
+ return false;
+ }
+ if (isset($_extra) && in_array('no_log', $_extra)) {
+ $field_query = $pdo->query('SHOW FIELDS FROM `imapsync` WHERE FIELD NOT IN ("returned_text", "password1")');
+ $fields = $field_query->fetchAll(PDO::FETCH_ASSOC);
+ while($field = array_shift($fields)) {
+ $shown_fields[] = $field['Field'];
+ }
+ $stmt = $pdo->prepare("SELECT " . implode(',', $shown_fields) . ",
+ `active`
+ FROM `imapsync` WHERE id = :id");
+ }
+ elseif (isset($_extra) && in_array('with_password', $_extra)) {
+ $stmt = $pdo->prepare("SELECT *,
+ `active`
+ FROM `imapsync` WHERE id = :id");
+ }
+ else {
+ $field_query = $pdo->query('SHOW FIELDS FROM `imapsync` WHERE FIELD NOT IN ("password1")');
+ $fields = $field_query->fetchAll(PDO::FETCH_ASSOC);
+ while($field = array_shift($fields)) {
+ $shown_fields[] = $field['Field'];
+ }
+ $stmt = $pdo->prepare("SELECT " . implode(',', $shown_fields) . ",
+ `active`
+ FROM `imapsync` WHERE id = :id");
+ }
+ $stmt->execute(array(':id' => $_data));
+ $syncjobdetails = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (!empty($syncjobdetails['returned_text'])) {
+ $syncjobdetails['log'] = $syncjobdetails['returned_text'];
+ }
+ else {
+ $syncjobdetails['log'] = '';
+ }
+ unset($syncjobdetails['returned_text']);
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $syncjobdetails['user2'])) {
+ return false;
+ }
+ return $syncjobdetails;
+ break;
+ case 'syncjobs':
+ $syncjobdata = array();
+ if (isset($_data) && filter_var($_data, FILTER_VALIDATE_EMAIL)) {
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
+ return false;
+ }
+ }
+ else {
+ $_data = $_SESSION['mailcow_cc_username'];
+ }
+ $stmt = $pdo->prepare("SELECT `id` FROM `imapsync` WHERE `user2` = :username");
+ $stmt->execute(array(':username' => $_data));
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while($row = array_shift($rows)) {
+ $syncjobdata[] = $row['id'];
+ }
+ return $syncjobdata;
+ break;
+ case 'spam_score':
+ $curl = curl_init();
+ curl_setopt($curl, CURLOPT_UNIX_SOCKET_PATH, '/var/lib/rspamd/rspamd.sock');
+ curl_setopt($curl, CURLOPT_URL,"http://rspamd/actions");
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
+ $default_actions = curl_exec($curl);
+ if (!curl_errno($curl)) {
+ $data_array = json_decode($default_actions, true);
+ curl_close($curl);
+ foreach ($data_array as $data) {
+ if ($data['action'] == 'reject') {
+ $reject = $data['value'];
+ continue;
+ }
+ elseif ($data['action'] == 'add header') {
+ $add_header = $data['value'];
+ continue;
+ }
+ }
+ if (empty($add_header) || empty($reject)) {
+ // Assume default, set warning
+ $default = "5, 15";
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'Could not determine servers default spam score, assuming default'
+ );
+ }
+ else {
+ $default = $add_header . ', ' . $reject;
+ }
+ }
+ else {
+ // Assume default, set warning
+ $default = "5, 15";
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'Could not determine servers default spam score, assuming default'
+ );
+ }
+ curl_close($curl);
+ $policydata = array();
+ if (isset($_data) && filter_var($_data, FILTER_VALIDATE_EMAIL)) {
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
+ return false;
+ }
+ }
+ else {
+ $_data = $_SESSION['mailcow_cc_username'];
+ }
+ $stmt = $pdo->prepare("SELECT `value` FROM `filterconf` WHERE `object` = :username AND
+ (`option` = 'lowspamlevel' OR `option` = 'highspamlevel')");
+ $stmt->execute(array(':username' => $_data));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if (empty($num_results)) {
+ return $default;
+ }
+ else {
+ $stmt = $pdo->prepare("SELECT `value` FROM `filterconf` WHERE `option` = 'highspamlevel' AND `object` = :username");
+ $stmt->execute(array(':username' => $_data));
+ $highspamlevel = $stmt->fetch(PDO::FETCH_ASSOC);
+ $stmt = $pdo->prepare("SELECT `value` FROM `filterconf` WHERE `option` = 'lowspamlevel' AND `object` = :username");
+ $stmt->execute(array(':username' => $_data));
+ $lowspamlevel = $stmt->fetch(PDO::FETCH_ASSOC);
+ return $lowspamlevel['value'].', '.$highspamlevel['value'];
+ }
+ break;
+ case 'time_limited_aliases':
+ $tladata = array();
+ if (isset($_data) && filter_var($_data, FILTER_VALIDATE_EMAIL)) {
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
+ return false;
+ }
+ }
+ else {
+ $_data = $_SESSION['mailcow_cc_username'];
+ }
+ $stmt = $pdo->prepare("SELECT `address`,
+ `goto`,
+ `validity`
+ FROM `spamalias`
+ WHERE `goto` = :username
+ AND `validity` >= :unixnow");
+ $stmt->execute(array(':username' => $_data, ':unixnow' => time()));
+ $tladata = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ return $tladata;
+ break;
+ case 'delimiter_action':
+ $policydata = array();
+ if (isset($_data) && filter_var($_data, FILTER_VALIDATE_EMAIL)) {
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
+ return false;
+ }
+ }
+ else {
+ $_data = $_SESSION['mailcow_cc_username'];
+ }
+ try {
+ if ($redis->hGet('RCPT_WANTS_SUBJECT_TAG', $_data)) {
+ return "subject";
+ }
+ elseif ($redis->hGet('RCPT_WANTS_SUBFOLDER_TAG', $_data)) {
+ return "subfolder";
+ }
+ else {
+ return "none";
+ }
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ break;
+ case 'resources':
+ $resources = array();
+ if (isset($_data) && !hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
+ return false;
+ }
+ elseif (isset($_data) && hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
+ $stmt = $pdo->prepare("SELECT `username` FROM `mailbox` WHERE `kind` REGEXP 'location|thing|group' AND `domain` = :domain");
+ $stmt->execute(array(
+ ':domain' => $_data,
+ ));
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while($row = array_shift($rows)) {
+ $resources[] = $row['username'];
+ }
+ }
+ else {
+ $stmt = $pdo->prepare("SELECT `username` FROM `mailbox` WHERE `kind` REGEXP 'location|thing|group' AND `domain` IN (SELECT `domain` FROM `domain_admins` WHERE `active` = '1' AND `username` = :username) OR 'admin' = :role");
+ $stmt->execute(array(
+ ':username' => $_SESSION['mailcow_cc_username'],
+ ':role' => $_SESSION['mailcow_cc_role'],
+ ));
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while($row = array_shift($rows)) {
+ $resources[] = $row['username'];
+ }
+ }
+ return $resources;
+ break;
+ case 'alias_domains':
+ $aliasdomains = array();
+ if (isset($_data) && !hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
+ return false;
+ }
+ elseif (isset($_data) && hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
+ $stmt = $pdo->prepare("SELECT `alias_domain` FROM `alias_domain` WHERE `target_domain` = :domain");
+ $stmt->execute(array(
+ ':domain' => $_data,
+ ));
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while($row = array_shift($rows)) {
+ $aliasdomains[] = $row['alias_domain'];
+ }
+ }
+ else {
+ $stmt = $pdo->prepare("SELECT `alias_domain` FROM `alias_domain` WHERE `target_domain` IN (SELECT `domain` FROM `domain_admins` WHERE `active` = '1' AND `username` = :username) OR 'admin' = :role");
+ $stmt->execute(array(
+ ':username' => $_SESSION['mailcow_cc_username'],
+ ':role' => $_SESSION['mailcow_cc_role'],
+ ));
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while($row = array_shift($rows)) {
+ $aliasdomains[] = $row['alias_domain'];
+ }
+ }
+ return $aliasdomains;
+ break;
+ case 'aliases':
+ $aliases = array();
+ if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT `id` FROM `alias` WHERE `address` != `goto` AND `domain` = :domain");
+ $stmt->execute(array(
+ ':domain' => $_data,
+ ));
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while($row = array_shift($rows)) {
+ $aliases[] = $row['id'];
+ }
+ return $aliases;
+ break;
+ case 'alias_details':
+ $aliasdata = array();
+ $stmt = $pdo->prepare("SELECT
+ `id`,
+ `domain`,
+ `goto`,
+ `address`,
+ `public_comment`,
+ `private_comment`,
+ `active`,
+ `sogo_visible`,
+ `created`,
+ `modified`
+ FROM `alias`
+ WHERE (`id` = :id OR `address` = :address) AND `address` != `goto`");
+ $stmt->execute(array(
+ ':id' => $_data,
+ ':address' => $_data,
+ ));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+ $stmt = $pdo->prepare("SELECT `target_domain` FROM `alias_domain` WHERE `alias_domain` = :domain");
+ $stmt->execute(array(
+ ':domain' => $row['domain'],
+ ));
+ $row_alias_domain = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (isset($row_alias_domain['target_domain']) && !empty($row_alias_domain['target_domain'])) {
+ $aliasdata['in_primary_domain'] = $row_alias_domain['target_domain'];
+ }
+ else {
+ $aliasdata['in_primary_domain'] = "";
+ }
+ $aliasdata['id'] = $row['id'];
+ $aliasdata['domain'] = $row['domain'];
+ $aliasdata['public_comment'] = $row['public_comment'];
+ $aliasdata['private_comment'] = $row['private_comment'];
+ $aliasdata['domain'] = $row['domain'];
+ $aliasdata['goto'] = $row['goto'];
+ $aliasdata['address'] = $row['address'];
+ (!filter_var($aliasdata['address'], FILTER_VALIDATE_EMAIL)) ? $aliasdata['is_catch_all'] = 1 : $aliasdata['is_catch_all'] = 0;
+ $aliasdata['active'] = $row['active'];
+ $aliasdata['active_int'] = $row['active'];
+ $aliasdata['sogo_visible'] = $row['sogo_visible'];
+ $aliasdata['sogo_visible_int'] = $row['sogo_visible'];
+ $aliasdata['created'] = $row['created'];
+ $aliasdata['modified'] = $row['modified'];
+ if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $aliasdata['domain'])) {
+ return false;
+ }
+ return $aliasdata;
+ break;
+ case 'alias_domain_details':
+ $aliasdomaindata = array();
+ $rl = ratelimit('get', 'domain', $_data);
+ $stmt = $pdo->prepare("SELECT
+ `alias_domain`,
+ `target_domain`,
+ `active`,
+ `created`,
+ `modified`
+ FROM `alias_domain`
+ WHERE `alias_domain` = :aliasdomain");
+ $stmt->execute(array(
+ ':aliasdomain' => $_data,
+ ));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+ $stmt = $pdo->prepare("SELECT `backupmx` FROM `domain` WHERE `domain` = :target_domain");
+ $stmt->execute(array(
+ ':target_domain' => $row['target_domain']
+ ));
+ $row_parent = $stmt->fetch(PDO::FETCH_ASSOC);
+ $aliasdomaindata['alias_domain'] = $row['alias_domain'];
+ $aliasdomaindata['parent_is_backupmx'] = $row_parent['backupmx'];
+ $aliasdomaindata['target_domain'] = $row['target_domain'];
+ $aliasdomaindata['active'] = $row['active'];
+ $aliasdomaindata['active_int'] = $row['active'];
+ $aliasdomaindata['rl'] = $rl;
+ $aliasdomaindata['created'] = $row['created'];
+ $aliasdomaindata['modified'] = $row['modified'];
+ if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $aliasdomaindata['target_domain'])) {
+ return false;
+ }
+ return $aliasdomaindata;
+ break;
+ case 'domains':
+ $domains = array();
+ if ($_SESSION['mailcow_cc_role'] != "admin" && $_SESSION['mailcow_cc_role'] != "domainadmin") {
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT `domain` FROM `domain`
+ WHERE (`domain` IN (
+ SELECT `domain` from `domain_admins`
+ WHERE (`active`='1' AND `username` = :username))
+ )
+ OR 'admin'= :role");
+ $stmt->execute(array(
+ ':username' => $_SESSION['mailcow_cc_username'],
+ ':role' => $_SESSION['mailcow_cc_role'],
+ ));
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while($row = array_shift($rows)) {
+ $domains[] = $row['domain'];
+ }
+ return $domains;
+ break;
+ case 'domain_details':
+ $domaindata = array();
+ $_data = idn_to_ascii(strtolower(trim($_data)), 0, INTL_IDNA_VARIANT_UTS46);
+ if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT `target_domain` FROM `alias_domain` WHERE `alias_domain` = :domain");
+ $stmt->execute(array(
+ ':domain' => $_data
+ ));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (!empty($row)) {
+ $_data = $row['target_domain'];
+ }
+ $stmt = $pdo->prepare("SELECT
+ `domain`,
+ `description`,
+ `aliases`,
+ `mailboxes`,
+ `defquota`,
+ `maxquota`,
+ `quota`,
+ `relayhost`,
+ `relay_all_recipients`,
+ `relay_unknown_only`,
+ `backupmx`,
+ `gal`,
+ `active`
+ FROM `domain` WHERE `domain`= :domain");
+ $stmt->execute(array(
+ ':domain' => $_data
+ ));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (empty($row)) {
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT COUNT(*) AS `count`,
+ COALESCE(SUM(`quota`), 0) AS `in_use`
+ FROM `mailbox`
+ WHERE `kind` NOT REGEXP 'location|thing|group'
+ AND `domain` = :domain");
+ $stmt->execute(array(':domain' => $row['domain']));
+ $MailboxDataDomain = $stmt->fetch(PDO::FETCH_ASSOC);
+ $stmt = $pdo->prepare("SELECT SUM(bytes) AS `bytes_total`, SUM(messages) AS `msgs_total` FROM `quota2`
+ WHERE `username` IN (
+ SELECT `username` FROM `mailbox`
+ WHERE `domain` = :domain
+ );");
+ $stmt->execute(array(':domain' => $row['domain']));
+ $SumQuotaInUse = $stmt->fetch(PDO::FETCH_ASSOC);
+ $rl = ratelimit('get', 'domain', $_data);
+ $domaindata['max_new_mailbox_quota'] = ($row['quota'] * 1048576) - $MailboxDataDomain['in_use'];
+ if ($domaindata['max_new_mailbox_quota'] > ($row['maxquota'] * 1048576)) {
+ $domaindata['max_new_mailbox_quota'] = ($row['maxquota'] * 1048576);
+ }
+ $domaindata['def_new_mailbox_quota'] = $domaindata['max_new_mailbox_quota'];
+ if ($domaindata['def_new_mailbox_quota'] > ($row['defquota'] * 1048576)) {
+ $domaindata['def_new_mailbox_quota'] = ($row['defquota'] * 1048576);
+ }
+ $domaindata['quota_used_in_domain'] = $MailboxDataDomain['in_use'];
+ if (!empty($SumQuotaInUse['bytes_total'])) {
+ $domaindata['bytes_total'] = $SumQuotaInUse['bytes_total'];
+ }
+ else {
+ $domaindata['bytes_total'] = 0;
+ }
+ if (!empty($SumQuotaInUse['msgs_total'])) {
+ $domaindata['msgs_total'] = $SumQuotaInUse['msgs_total'];
+ }
+ else {
+ $domaindata['msgs_total'] = 0;
+ }
+ $domaindata['mboxes_in_domain'] = $MailboxDataDomain['count'];
+ $domaindata['mboxes_left'] = $row['mailboxes'] - $MailboxDataDomain['count'];
+ $domaindata['domain_name'] = $row['domain'];
+ $domaindata['description'] = $row['description'];
+ $domaindata['max_num_aliases_for_domain'] = $row['aliases'];
+ $domaindata['max_num_mboxes_for_domain'] = $row['mailboxes'];
+ $domaindata['def_quota_for_mbox'] = $row['defquota'] * 1048576;
+ $domaindata['max_quota_for_mbox'] = $row['maxquota'] * 1048576;
+ $domaindata['max_quota_for_domain'] = $row['quota'] * 1048576;
+ $domaindata['relayhost'] = $row['relayhost'];
+ $domaindata['backupmx'] = $row['backupmx'];
+ $domaindata['backupmx_int'] = $row['backupmx'];
+ $domaindata['gal'] = $row['gal'];
+ $domaindata['gal_int'] = $row['gal'];
+ $domaindata['rl'] = $rl;
+ $domaindata['active'] = $row['active'];
+ $domaindata['active_int'] = $row['active'];
+ $domaindata['relay_all_recipients'] = $row['relay_all_recipients'];
+ $domaindata['relay_all_recipients_int'] = $row['relay_all_recipients'];
+ $domaindata['relay_unknown_only'] = $row['relay_unknown_only'];
+ $domaindata['relay_unknown_only_int'] = $row['relay_unknown_only'];
+ $stmt = $pdo->prepare("SELECT COUNT(*) AS `alias_count` FROM `alias`
+ WHERE (`domain`= :domain OR `domain` IN (SELECT `alias_domain` FROM `alias_domain` WHERE `target_domain` = :domain2))
+ AND `address` NOT IN (
+ SELECT `username` FROM `mailbox`
+ )");
+ $stmt->execute(array(
+ ':domain' => $_data,
+ ':domain2' => $_data
+ ));
+ $AliasDataDomain = $stmt->fetch(PDO::FETCH_ASSOC);
+ (isset($AliasDataDomain['alias_count'])) ? $domaindata['aliases_in_domain'] = $AliasDataDomain['alias_count'] : $domaindata['aliases_in_domain'] = "0";
+ $domaindata['aliases_left'] = $row['aliases'] - $AliasDataDomain['alias_count'];
+ if ($_SESSION['mailcow_cc_role'] == "admin")
+ {
+ $stmt = $pdo->prepare("SELECT GROUP_CONCAT(`username` SEPARATOR ', ') AS domain_admins FROM `domain_admins` WHERE `domain` = :domain");
+ $stmt->execute(array(
+ ':domain' => $_data
+ ));
+ $domain_admins = $stmt->fetch(PDO::FETCH_ASSOC);
+ (isset($domain_admins['domain_admins'])) ? $domaindata['domain_admins'] = $domain_admins['domain_admins'] : $domaindata['domain_admins'] = "-";
+ }
+ return $domaindata;
+ break;
+ case 'mailbox_details':
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
+ return false;
+ }
+ $mailboxdata = array();
+ $rl = ratelimit('get', 'mailbox', $_data);
+ $last_imap_login = $redis->Get('last-login/imap/' . $_data);
+ $last_smtp_login = $redis->Get('last-login/smtp/' . $_data);
+ $last_pop3_login = $redis->Get('last-login/pop3/' . $_data);
+ if ($last_imap_login === false || $GLOBALS['SHOW_LAST_LOGIN'] === false) {
+ $last_imap_login = '0';
+ }
+ if ($last_smtp_login === false || $GLOBALS['SHOW_LAST_LOGIN'] === false) {
+ $last_smtp_login = '0';
+ }
+ if ($last_pop3_login === false || $GLOBALS['SHOW_LAST_LOGIN'] === false) {
+ $last_pop3_login = '0';
+ }
+ if (preg_match('/y|yes/i', getenv('MASTER'))) {
+ $stmt = $pdo->prepare("SELECT
+ `domain`.`backupmx`,
+ `mailbox`.`username`,
+ `mailbox`.`name`,
+ `mailbox`.`active`,
+ `mailbox`.`domain`,
+ `mailbox`.`local_part`,
+ `mailbox`.`quota`,
+ `quota2`.`bytes`,
+ `attributes`,
+ `quota2`.`messages`
+ FROM `mailbox`, `quota2`, `domain`
+ WHERE `mailbox`.`kind` NOT REGEXP 'location|thing|group' AND `mailbox`.`username` = `quota2`.`username` AND `domain`.`domain` = `mailbox`.`domain` AND `mailbox`.`username` = :mailbox");
+ }
+ else {
+ $stmt = $pdo->prepare("SELECT
+ `domain`.`backupmx`,
+ `mailbox`.`username`,
+ `mailbox`.`name`,
+ `mailbox`.`active`,
+ `mailbox`.`domain`,
+ `mailbox`.`local_part`,
+ `mailbox`.`quota`,
+ `quota2replica`.`bytes`,
+ `attributes`,
+ `quota2replica`.`messages`
+ FROM `mailbox`, `quota2replica`, `domain`
+ WHERE `mailbox`.`kind` NOT REGEXP 'location|thing|group' AND `mailbox`.`username` = `quota2replica`.`username` AND `domain`.`domain` = `mailbox`.`domain` AND `mailbox`.`username` = :mailbox");
+ }
+ $stmt->execute(array(
+ ':mailbox' => $_data,
+ ));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+ $stmt = $pdo->prepare("SELECT `maxquota`, `quota` FROM `domain` WHERE `domain` = :domain");
+ $stmt->execute(array(':domain' => $row['domain']));
+ $DomainQuota = $stmt->fetch(PDO::FETCH_ASSOC);
+ $stmt = $pdo->prepare("SELECT IFNULL(COUNT(`active`), 0) AS `pushover_active` FROM `pushover` WHERE `username` = :username AND `active` = 1");
+ $stmt->execute(array(':username' => $_data));
+ $PushoverActive = $stmt->fetch(PDO::FETCH_ASSOC);
+ $stmt = $pdo->prepare("SELECT COALESCE(SUM(`quota`), 0) as `in_use` FROM `mailbox` WHERE `kind` NOT REGEXP 'location|thing|group' AND `domain` = :domain AND `username` != :username");
+ $stmt->execute(array(':domain' => $row['domain'], ':username' => $_data));
+ $MailboxUsage = $stmt->fetch(PDO::FETCH_ASSOC);
+ $stmt = $pdo->prepare("SELECT IFNULL(COUNT(`address`), 0) AS `sa_count` FROM `spamalias` WHERE `goto` = :address AND `validity` >= :unixnow");
+ $stmt->execute(array(':address' => $_data, ':unixnow' => time()));
+ $SpamaliasUsage = $stmt->fetch(PDO::FETCH_ASSOC);
+ $mailboxdata['max_new_quota'] = ($DomainQuota['quota'] * 1048576) - $MailboxUsage['in_use'];
+ if ($mailboxdata['max_new_quota'] > ($DomainQuota['maxquota'] * 1048576)) {
+ $mailboxdata['max_new_quota'] = ($DomainQuota['maxquota'] * 1048576);
+ }
+ $mailboxdata['username'] = $row['username'];
+ if (!empty($rl)) {
+ $mailboxdata['rl'] = $rl;
+ $mailboxdata['rl_scope'] = 'mailbox';
+ }
+ else {
+ $mailboxdata['rl'] = ratelimit('get', 'domain', $row['domain']);
+ $mailboxdata['rl_scope'] = 'domain';
+ }
+ $mailboxdata['is_relayed'] = $row['backupmx'];
+ $mailboxdata['name'] = $row['name'];
+ $mailboxdata['last_imap_login'] = $last_imap_login;
+ $mailboxdata['last_smtp_login'] = $last_smtp_login;
+ $mailboxdata['last_pop3_login'] = $last_pop3_login;
+ $mailboxdata['active'] = $row['active'];
+ $mailboxdata['active_int'] = $row['active'];
+ $mailboxdata['domain'] = $row['domain'];
+ $mailboxdata['local_part'] = $row['local_part'];
+ $mailboxdata['quota'] = $row['quota'];
+ $mailboxdata['attributes'] = json_decode($row['attributes'], true);
+ $mailboxdata['quota_used'] = intval($row['bytes']);
+ $mailboxdata['percent_in_use'] = ($row['quota'] == 0) ? '- ' : round((intval($row['bytes']) / intval($row['quota'])) * 100);
+ $mailboxdata['messages'] = $row['messages'];
+ $mailboxdata['spam_aliases'] = $SpamaliasUsage['sa_count'];
+ $mailboxdata['pushover_active'] = ($PushoverActive['pushover_active'] == 1) ? 1 : 0;
+ if ($mailboxdata['percent_in_use'] === '- ') {
+ $mailboxdata['percent_class'] = "info";
+ }
+ elseif ($mailboxdata['percent_in_use'] >= 90) {
+ $mailboxdata['percent_class'] = "danger";
+ }
+ elseif ($mailboxdata['percent_in_use'] >= 75) {
+ $mailboxdata['percent_class'] = "warning";
+ }
+ else {
+ $mailboxdata['percent_class'] = "success";
+ }
+ return $mailboxdata;
+ break;
+ case 'resource_details':
+ $resourcedata = array();
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT
+ `username`,
+ `name`,
+ `kind`,
+ `multiple_bookings`,
+ `local_part`,
+ `active`,
+ `domain`
+ FROM `mailbox` WHERE `kind` REGEXP 'location|thing|group' AND `username` = :resource");
+ $stmt->execute(array(
+ ':resource' => $_data,
+ ));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+ $resourcedata['name'] = $row['username'];
+ $resourcedata['kind'] = $row['kind'];
+ $resourcedata['multiple_bookings'] = $row['multiple_bookings'];
+ $resourcedata['description'] = $row['name'];
+ $resourcedata['active'] = $row['active'];
+ $resourcedata['active_int'] = $row['active'];
+ $resourcedata['domain'] = $row['domain'];
+ $resourcedata['local_part'] = $row['local_part'];
+ if (!isset($resourcedata['domain']) ||
+ (isset($resourcedata['domain']) && !hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $resourcedata['domain']))) {
+ return false;
+ }
+ return $resourcedata;
+ break;
+ }
+ break;
+ case 'delete':
+ switch ($_type) {
+ case 'syncjob':
+ if (!is_array($_data['id'])) {
+ $ids = array();
+ $ids[] = $_data['id'];
+ }
+ else {
+ $ids = $_data['id'];
+ }
+ if (!isset($_SESSION['acl']['syncjobs']) || $_SESSION['acl']['syncjobs'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ foreach ($ids as $id) {
+ if (!is_numeric($id)) {
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT `user2` FROM `imapsync` WHERE id = :id");
+ $stmt->execute(array(':id' => $id));
+ $user2 = $stmt->fetch(PDO::FETCH_ASSOC)['user2'];
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $user2)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("DELETE FROM `imapsync` WHERE `id`= :id");
+ $stmt->execute(array(':id' => $id));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('deleted_syncjob', $id)
+ );
+ }
+ break;
+ case 'filter':
+ if (!is_array($_data['id'])) {
+ $ids = array();
+ $ids[] = $_data['id'];
+ }
+ else {
+ $ids = $_data['id'];
+ }
+ if (!isset($_SESSION['acl']['filters']) || $_SESSION['acl']['filters'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ foreach ($ids as $id) {
+ if (!is_numeric($id)) {
+ continue;
+ }
+ $stmt = $pdo->prepare("SELECT `username` FROM `sieve_filters` WHERE id = :id");
+ $stmt->execute(array(':id' => $id));
+ $usr = $stmt->fetch(PDO::FETCH_ASSOC)['username'];
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $usr)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("DELETE FROM `sieve_filters` WHERE `id`= :id");
+ $stmt->execute(array(':id' => $id));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('delete_filter', $id)
+ );
+ }
+ break;
+ case 'time_limited_alias':
+ if (!is_array($_data['address'])) {
+ $addresses = array();
+ $addresses[] = $_data['address'];
+ }
+ else {
+ $addresses = $_data['address'];
+ }
+ if (!isset($_SESSION['acl']['spam_alias']) || $_SESSION['acl']['spam_alias'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ foreach ($addresses as $address) {
+ $stmt = $pdo->prepare("SELECT `goto` FROM `spamalias` WHERE `address` = :address");
+ $stmt->execute(array(':address' => $address));
+ $goto = $stmt->fetch(PDO::FETCH_ASSOC)['goto'];
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $goto)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("DELETE FROM `spamalias` WHERE `goto` = :username AND `address` = :item");
+ $stmt->execute(array(
+ ':username' => $goto,
+ ':item' => $address
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('mailbox_modified', htmlspecialchars($goto))
+ );
+ }
+ break;
+ case 'eas_cache':
+ if (!is_array($_data['username'])) {
+ $usernames = array();
+ $usernames[] = $_data['username'];
+ }
+ else {
+ $usernames = $_data['username'];
+ }
+ if (!isset($_SESSION['acl']['eas_reset']) || $_SESSION['acl']['eas_reset'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ foreach ($usernames as $username) {
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("DELETE FROM `sogo_cache_folder` WHERE `c_uid` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('eas_reset', htmlspecialchars($username))
+ );
+ }
+ break;
+ case 'sogo_profile':
+ if (!is_array($_data['username'])) {
+ $usernames = array();
+ $usernames[] = $_data['username'];
+ }
+ else {
+ $usernames = $_data['username'];
+ }
+ if (!isset($_SESSION['acl']['sogo_profile_reset']) || $_SESSION['acl']['sogo_profile_reset'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ foreach ($usernames as $username) {
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("DELETE FROM `sogo_user_profile` WHERE `c_uid` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `sogo_cache_folder` WHERE `c_uid` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `sogo_acl` WHERE `c_object` LIKE '%/" . $username . "/%' OR `c_uid` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `sogo_store` WHERE `c_folder_id` IN (SELECT `c_folder_id` FROM `sogo_folder_info` WHERE `c_path2` = :username)");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `sogo_quick_contact` WHERE `c_folder_id` IN (SELECT `c_folder_id` FROM `sogo_folder_info` WHERE `c_path2` = :username)");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `sogo_quick_appointment` WHERE `c_folder_id` IN (SELECT `c_folder_id` FROM `sogo_folder_info` WHERE `c_path2` = :username)");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `sogo_folder_info` WHERE `c_path2` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('sogo_profile_reset', htmlspecialchars($username))
+ );
+ }
+ break;
+ case 'domain':
+ if (!is_array($_data['domain'])) {
+ $domains = array();
+ $domains[] = $_data['domain'];
+ }
+ else {
+ $domains = $_data['domain'];
+ }
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ foreach ($domains as $domain) {
+ if (!is_valid_domain_name($domain)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'domain_invalid'
+ );
+ continue;
+ }
+ $domain = idn_to_ascii(strtolower(trim($domain)), 0, INTL_IDNA_VARIANT_UTS46);
+ $stmt = $pdo->prepare("SELECT `username` FROM `mailbox`
+ WHERE `domain` = :domain");
+ $stmt->execute(array(':domain' => $domain));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0 || !empty($num_results)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('domain_not_empty', $domain)
+ );
+ continue;
+ }
+ $exec_fields = array('cmd' => 'maildir', 'task' => 'cleanup', 'maildir' => $domain);
+ $maildir_gc = json_decode(docker('post', 'dovecot-mailcow', 'exec', $exec_fields), true);
+ if ($maildir_gc['type'] != 'success') {
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'Could not move mail storage to garbage collector: ' . $maildir_gc['msg']
+ );
+ }
+ $stmt = $pdo->prepare("DELETE FROM `domain` WHERE `domain` = :domain");
+ $stmt->execute(array(
+ ':domain' => $domain,
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `domain_admins` WHERE `domain` = :domain");
+ $stmt->execute(array(
+ ':domain' => $domain,
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `alias` WHERE `domain` = :domain");
+ $stmt->execute(array(
+ ':domain' => $domain,
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `alias_domain` WHERE `target_domain` = :domain");
+ $stmt->execute(array(
+ ':domain' => $domain,
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `mailbox` WHERE `domain` = :domain");
+ $stmt->execute(array(
+ ':domain' => $domain,
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `sender_acl` WHERE `logged_in_as` LIKE :domain");
+ $stmt->execute(array(
+ ':domain' => '%@'.$domain,
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `quota2` WHERE `username` LIKE :domain");
+ $stmt->execute(array(
+ ':domain' => '%@'.$domain,
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `pushover` WHERE `username` LIKE :domain");
+ $stmt->execute(array(
+ ':domain' => '%@'.$domain,
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `quota2replica` WHERE `username` LIKE :domain");
+ $stmt->execute(array(
+ ':domain' => '%@'.$domain,
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `spamalias` WHERE `address` LIKE :domain");
+ $stmt->execute(array(
+ ':domain' => '%@'.$domain,
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `filterconf` WHERE `object` = :domain");
+ $stmt->execute(array(
+ ':domain' => $domain,
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `bcc_maps` WHERE `local_dest` = :domain");
+ $stmt->execute(array(
+ ':domain' => $domain,
+ ));
+ $stmt = $pdo->query("DELETE FROM `admin` WHERE `superadmin` = 0 AND `username` NOT IN (SELECT `username`FROM `domain_admins`);");
+ $stmt = $pdo->query("DELETE FROM `da_acl` WHERE `username` NOT IN (SELECT `username`FROM `domain_admins`);");
+ try {
+ $redis->hDel('DOMAIN_MAP', $domain);
+ $redis->hDel('RL_VALUE', $domain);
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('redis_error', $e)
+ );
+ continue;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('domain_removed', htmlspecialchars($domain))
+ );
+ }
+ break;
+ case 'alias':
+ if (!is_array($_data['id'])) {
+ $ids = array();
+ $ids[] = $_data['id'];
+ }
+ else {
+ $ids = $_data['id'];
+ }
+ foreach ($ids as $id) {
+ $alias_data = mailbox('get', 'alias_details', $id);
+ if (empty($alias_data)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("DELETE FROM `alias` WHERE `id` = :id");
+ $stmt->execute(array(
+ ':id' => $alias_data['id']
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `sender_acl` WHERE `send_as` = :alias_address");
+ $stmt->execute(array(
+ ':alias_address' => $alias_data['address']
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('alias_removed', htmlspecialchars($alias_data['address']))
+ );
+ }
+ break;
+ case 'alias_domain':
+ if (!is_array($_data['alias_domain'])) {
+ $alias_domains = array();
+ $alias_domains[] = $_data['alias_domain'];
+ }
+ else {
+ $alias_domains = $_data['alias_domain'];
+ }
+ foreach ($alias_domains as $alias_domain) {
+ if (!is_valid_domain_name($alias_domain)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'domain_invalid'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("SELECT `target_domain` FROM `alias_domain`
+ WHERE `alias_domain`= :alias_domain");
+ $stmt->execute(array(':alias_domain' => $alias_domain));
+ $DomainData = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $DomainData['target_domain'])) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("DELETE FROM `alias_domain` WHERE `alias_domain` = :alias_domain");
+ $stmt->execute(array(
+ ':alias_domain' => $alias_domain,
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `alias` WHERE `domain` = :alias_domain");
+ $stmt->execute(array(
+ ':alias_domain' => $alias_domain,
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `bcc_maps` WHERE `local_dest` = :alias_domain");
+ $stmt->execute(array(
+ ':alias_domain' => $alias_domain,
+ ));
+ try {
+ $redis->hDel('DOMAIN_MAP', $alias_domain);
+ $redis->hDel('RL_VALUE', $domain);
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('redis_error', $e)
+ );
+ continue;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('alias_domain_removed', htmlspecialchars($alias_domain))
+ );
+ }
+ break;
+ case 'mailbox':
+ if (!is_array($_data['username'])) {
+ $usernames = array();
+ $usernames[] = $_data['username'];
+ }
+ else {
+ $usernames = $_data['username'];
+ }
+ foreach ($usernames as $username) {
+ if (!filter_var($username, FILTER_VALIDATE_EMAIL)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $mailbox_details = mailbox('get', 'mailbox_details', $username);
+ if (!empty($mailbox_details['domain']) && !empty($mailbox_details['local_part'])) {
+ $maildir = $mailbox_details['domain'] . '/' . $mailbox_details['local_part'];
+ $exec_fields = array('cmd' => 'maildir', 'task' => 'cleanup', 'maildir' => $maildir);
+ $maildir_gc = json_decode(docker('post', 'dovecot-mailcow', 'exec', $exec_fields), true);
+ if ($maildir_gc['type'] != 'success') {
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'Could not move maildir to garbage collector: ' . $maildir_gc['msg']
+ );
+ }
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'Could not move maildir to garbage collector: variables local_part and/or domain empty'
+ );
+ }
+ if (strtolower(getenv('SKIP_SOLR')) == 'n') {
+ $curl = curl_init();
+ curl_setopt($curl, CURLOPT_URL, 'http://solr:8983/solr/dovecot-fts/update?commit=true');
+ curl_setopt($curl, CURLOPT_HTTPHEADER,array('Content-Type: text/xml'));
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($curl, CURLOPT_POST, 1);
+ curl_setopt($curl, CURLOPT_POSTFIELDS, '<delete><query>user:' . $username . '</query></delete>');
+ curl_setopt($curl, CURLOPT_TIMEOUT, 30);
+ $response = curl_exec($curl);
+ if ($response === false) {
+ $err = curl_error($curl);
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'Could not remove Solr index: ' . print_r($err, true)
+ );
+ }
+ curl_close($curl);
+ }
+ $stmt = $pdo->prepare("DELETE FROM `alias` WHERE `goto` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `pushover` WHERE `username` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `quarantine` WHERE `rcpt` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `quota2` WHERE `username` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `quota2replica` WHERE `username` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `mailbox` WHERE `username` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `sender_acl` WHERE `logged_in_as` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ // fk, better safe than sorry
+ $stmt = $pdo->prepare("DELETE FROM `user_acl` WHERE `username` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `spamalias` WHERE `goto` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `imapsync` WHERE `user2` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `filterconf` WHERE `object` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `sogo_user_profile` WHERE `c_uid` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `sogo_cache_folder` WHERE `c_uid` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `sogo_acl` WHERE `c_object` LIKE '%/" . str_replace('%', '\%', $username) . "/%' OR `c_uid` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `sogo_store` WHERE `c_folder_id` IN (SELECT `c_folder_id` FROM `sogo_folder_info` WHERE `c_path2` = :username)");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `sogo_quick_contact` WHERE `c_folder_id` IN (SELECT `c_folder_id` FROM `sogo_folder_info` WHERE `c_path2` = :username)");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `sogo_quick_appointment` WHERE `c_folder_id` IN (SELECT `c_folder_id` FROM `sogo_folder_info` WHERE `c_path2` = :username)");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `sogo_folder_info` WHERE `c_path2` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `bcc_maps` WHERE `local_dest` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `oauth_access_tokens` WHERE `user_id` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `oauth_refresh_tokens` WHERE `user_id` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `oauth_authorization_codes` WHERE `user_id` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $stmt = $pdo->prepare("SELECT `address`, `goto` FROM `alias`
+ WHERE `goto` REGEXP :username");
+ $stmt->execute(array(':username' => '(^|,)'.$username.'($|,)'));
+ $GotoData = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ foreach ($GotoData as $gotos) {
+ $goto_exploded = explode(',', $gotos['goto']);
+ if (($key = array_search($username, $goto_exploded)) !== false) {
+ unset($goto_exploded[$key]);
+ }
+ $gotos_rebuild = implode(',', $goto_exploded);
+ $stmt = $pdo->prepare("UPDATE `alias` SET
+ `goto` = :goto
+ WHERE `address` = :address");
+ $stmt->execute(array(
+ ':goto' => $gotos_rebuild,
+ ':address' => $gotos['address']
+ ));
+ }
+ try {
+ $redis->hDel('RL_VALUE', $username);
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('redis_error', $e)
+ );
+ continue;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('mailbox_removed', htmlspecialchars($username))
+ );
+ }
+ break;
+ case 'resource':
+ if (!is_array($_data['name'])) {
+ $names = array();
+ $names[] = $_data['name'];
+ }
+ else {
+ $names = $_data['name'];
+ }
+ foreach ($names as $name) {
+ if (!filter_var($name, FILTER_VALIDATE_EMAIL)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $name)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("DELETE FROM `mailbox` WHERE `username` = :username");
+ $stmt->execute(array(
+ ':username' => $name
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `sogo_user_profile` WHERE `c_uid` = :username");
+ $stmt->execute(array(
+ ':username' => $name
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `sogo_cache_folder` WHERE `c_uid` = :username");
+ $stmt->execute(array(
+ ':username' => $name
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `sogo_acl` WHERE `c_object` LIKE '%/" . $name . "/%' OR `c_uid` = :username");
+ $stmt->execute(array(
+ ':username' => $name
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `sogo_store` WHERE `c_folder_id` IN (SELECT `c_folder_id` FROM `sogo_folder_info` WHERE `c_path2` = :username)");
+ $stmt->execute(array(
+ ':username' => $name
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `sogo_quick_contact` WHERE `c_folder_id` IN (SELECT `c_folder_id` FROM `sogo_folder_info` WHERE `c_path2` = :username)");
+ $stmt->execute(array(
+ ':username' => $name
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `sogo_quick_appointment` WHERE `c_folder_id` IN (SELECT `c_folder_id` FROM `sogo_folder_info` WHERE `c_path2` = :username)");
+ $stmt->execute(array(
+ ':username' => $name
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `sogo_folder_info` WHERE `c_path2` = :username");
+ $stmt->execute(array(
+ ':username' => $name
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => array('resource_removed', htmlspecialchars($name))
+ );
+ }
+ break;
+ }
+ break;
+ }
+ if ($_action != 'get' && in_array($_type, array('domain', 'alias', 'alias_domain', 'mailbox', 'resource'))) {
+ update_sogo_static_view();
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/functions.mailq.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/functions.mailq.inc.php
new file mode 100644
index 0000000..f42ab7c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/functions.mailq.inc.php
@@ -0,0 +1,121 @@
+<?php
+function mailq($_action, $_data = null) {
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ function process_mailq_output($returned_output, $_action, $_data) {
+ if ($returned_output !== NULL) {
+ if ($_action == 'cat') {
+ logger(array('return' => array(
+ array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data),
+ 'msg' => 'queue_cat_success'
+ )
+ )));
+ return $returned_output;
+ }
+ else {
+ if (isset($returned_output['type']) && $returned_output['type'] == 'danger') {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data),
+ 'msg' => 'Error: ' . $returned_output['msg']
+ );
+ }
+ if (isset($returned_output['type']) && $returned_output['type'] == 'success') {
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data),
+ 'msg' => 'queue_command_success'
+ );
+ }
+ }
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data),
+ 'msg' => 'unknown'
+ );
+ }
+ }
+ if ($_action == 'get') {
+ $mailq_lines = docker('post', 'postfix-mailcow', 'exec', array('cmd' => 'mailq', 'task' => 'list'));
+ $lines = 0;
+ // Hard limit to 10000 items
+ foreach (preg_split("/((\r?\n)|(\r\n?))/", $mailq_lines) as $mailq_item) if ($lines++ < 10000) {
+ if (empty($mailq_item) || $mailq_item == '1') {
+ continue;
+ }
+ $mq_line = json_decode($mailq_item, true);
+ if ($mq_line !== NULL) {
+ $rcpts = array();
+ foreach ($mq_line['recipients'] as $rcpt) {
+ if (isset($rcpt['delay_reason'])) {
+ $rcpts[] = $rcpt['address'] . ' (' . $rcpt['delay_reason'] . ')';
+ }
+ else {
+ $rcpts[] = $rcpt['address'];
+ }
+ }
+ if (!empty($rcpts)) {
+ $mq_line['recipients'] = $rcpts;
+ }
+ $line[] = $mq_line;
+ }
+ }
+ if (!isset($line) || empty($line)) {
+ return '[]';
+ }
+ else {
+ return json_encode($line);
+ }
+ }
+ elseif ($_action == 'delete') {
+ if (!is_array($_data['qid'])) {
+ $qids = array();
+ $qids[] = $_data['qid'];
+ }
+ else {
+ $qids = $_data['qid'];
+ }
+ $docker_return = docker('post', 'postfix-mailcow', 'exec', array('cmd' => 'mailq', 'task' => 'delete', 'items' => $qids));
+ process_mailq_output(json_decode($docker_return, true), $_action, $_data);
+ }
+ elseif ($_action == 'cat') {
+ if (!is_array($_data['qid'])) {
+ $qids = array();
+ $qids[] = $_data['qid'];
+ }
+ else {
+ $qids = $_data['qid'];
+ }
+ $docker_return = docker('post', 'postfix-mailcow', 'exec', array('cmd' => 'mailq', 'task' => 'cat', 'items' => $qids));
+ return process_mailq_output($docker_return, $_action, $_data);
+ }
+ elseif ($_action == 'edit') {
+ if (in_array($_data['action'], array('hold', 'unhold', 'deliver'))) {
+ if (!is_array($_data['qid'])) {
+ $qids = array();
+ $qids[] = $_data['qid'];
+ }
+ else {
+ $qids = $_data['qid'];
+ }
+ if (!empty($qids)) {
+ $docker_return = docker('post', 'postfix-mailcow', 'exec', array('cmd' => 'mailq', 'task' => $_data['action'], 'items' => $qids));
+ process_mailq_output(json_decode($docker_return, true), $_action, $_data);
+ }
+ }
+ if (in_array($_data['action'], array('flush', 'super_delete'))) {
+ $docker_return = docker('post', 'postfix-mailcow', 'exec', array('cmd' => 'mailq', 'task' => $_data['action']));
+ process_mailq_output(json_decode($docker_return, true), $_action, $_data);
+ }
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/functions.oauth2.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/functions.oauth2.inc.php
new file mode 100644
index 0000000..7bc7dea
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/functions.oauth2.inc.php
@@ -0,0 +1,242 @@
+<?php
+function oauth2($_action, $_type, $_data = null) {
+ global $pdo;
+ global $redis;
+ global $lang;
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ switch ($_action) {
+ case 'add':
+ switch ($_type) {
+ case 'client':
+ $client_id = bin2hex(random_bytes(6));
+ $client_secret = bin2hex(random_bytes(12));
+ $redirect_uri = $_data['redirect_uri'];
+ $scope = 'profile';
+ // For future use
+ // $grant_type = isset($_data['grant_type']) ? $_data['grant_type'] : 'authorization_code';
+ // $scope = isset($_data['scope']) ? $_data['scope'] : 'profile';
+ // if ($grant_type != "authorization_code" && $grant_type != "password") {
+ // $_SESSION['return'][] = array(
+ // 'type' => 'danger',
+ // 'log' => array(__FUNCTION__, $_action, $_type, $_data),
+ // 'msg' => 'access_denied'
+ // );
+ // return false;
+ // }
+ if ($scope != "profile") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data),
+ 'msg' => 'Invalid scope'
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT 'client' FROM `oauth_clients`
+ WHERE `client_id` = :client_id");
+ $stmt->execute(array(':client_id' => $client_id));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data),
+ 'msg' => 'Client ID exists'
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("INSERT INTO `oauth_clients` (`client_id`, `client_secret`, `redirect_uri`, `scope`)
+ VALUES (:client_id, :client_secret, :redirect_uri, :scope)");
+ $stmt->execute(array(
+ ':client_id' => $client_id,
+ ':client_secret' => $client_secret,
+ ':redirect_uri' => $redirect_uri,
+ ':scope' => $scope
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data),
+ 'msg' => 'Added client access'
+ );
+ break;
+ }
+ break;
+ case 'edit':
+ switch ($_type) {
+ case 'client':
+ $ids = (array)$_data['id'];
+ foreach ($ids as $id) {
+ $is_now = oauth2('details', 'client', $id);
+ if (!empty($is_now)) {
+ $redirect_uri = (!empty($_data['redirect_uri'])) ? $_data['redirect_uri'] : $is_now['redirect_uri'];
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ if (isset($_data['revoke_tokens'])) {
+ $stmt = $pdo->prepare("DELETE FROM `oauth_access_tokens`
+ WHERE `client_id` IN (
+ SELECT `client_id` FROM `oauth_clients` WHERE `id` = :id
+ )");
+ $stmt->execute(array(
+ ':id' => $id
+ ));
+ $stmt = $pdo->prepare("DELETE FROM `oauth_refresh_tokens`
+ WHERE `client_id` IN (
+ SELECT `client_id` FROM `oauth_clients` WHERE `id` = :id
+ )");
+ $stmt->execute(array(
+ ':id' => $id
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data),
+ 'msg' => array('object_modified', htmlspecialchars($id))
+ );
+ continue;
+ }
+ if (isset($_data['renew_secret'])) {
+ $client_secret = bin2hex(random_bytes(12));
+ $stmt = $pdo->prepare("UPDATE `oauth_clients` SET `client_secret` = :client_secret WHERE `id` = :id");
+ $stmt->execute(array(
+ ':client_secret' => $client_secret,
+ ':id' => $id
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data),
+ 'msg' => array('object_modified', htmlspecialchars($id))
+ );
+ continue;
+ }
+ if (empty($redirect_uri)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data),
+ 'msg' => 'Redirect/Callback URL cannot be empty'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("UPDATE `oauth_clients` SET
+ `redirect_uri` = :redirect_uri
+ WHERE `id` = :id");
+ $stmt->execute(array(
+ ':id' => $id,
+ ':redirect_uri' => $redirect_uri
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data),
+ 'msg' => array('object_modified', htmlspecialchars($id))
+ );
+ }
+ break;
+ }
+ break;
+ case 'delete':
+ switch ($_type) {
+ case 'client':
+ (array)$ids = $_data['id'];
+ foreach ($ids as $id) {
+ if (!is_numeric($id)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("DELETE FROM `oauth_clients`
+ WHERE `id` = :id");
+ $stmt->execute(array(
+ ':id' => $id
+ ));
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data),
+ 'msg' => array('items_deleted', htmlspecialchars($id))
+ );
+ break;
+ case 'access_token':
+ (array)$access_tokens = $_data['access_token'];
+ foreach ($access_tokens as $access_token) {
+ if (!ctype_alnum($access_token)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("DELETE FROM `oauth_access_tokens`
+ WHERE `access_token` = :access_token");
+ $stmt->execute(array(
+ ':access_token' => $access_token
+ ));
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data),
+ 'msg' => sprintf($lang['success']['items_deleted'], implode(', ', $access_tokens))
+ );
+ break;
+ case 'refresh_token':
+ (array)$refresh_tokens = $_data['refresh_token'];
+ foreach ($refresh_tokens as $refresh_token) {
+ if (!ctype_alnum($refresh_token)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("DELETE FROM `oauth_refresh_tokens` WHERE `refresh_token` = :refresh_token");
+ $stmt->execute(array(
+ ':refresh_token' => $refresh_token
+ ));
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data),
+ 'msg' => sprintf($lang['success']['items_deleted'], implode(', ', $refresh_tokens))
+ );
+ break;
+ }
+ break;
+ case 'get':
+ switch ($_type) {
+ case 'clients':
+ $stmt = $pdo->query("SELECT `id` FROM `oauth_clients`");
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while ($row = array_shift($rows)) {
+ $oauth_clients[] = $row['id'];
+ }
+ return $oauth_clients;
+ break;
+ }
+ break;
+ case 'details':
+ switch ($_type) {
+ case 'client':
+ $stmt = $pdo->prepare("SELECT * FROM `oauth_clients`
+ WHERE `id` = :id");
+ $stmt->execute(array(':id' => $_data));
+ $oauth_client_details = $stmt->fetch(PDO::FETCH_ASSOC);
+ return $oauth_client_details;
+ break;
+ }
+ break;
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/functions.policy.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/functions.policy.inc.php
new file mode 100644
index 0000000..ad29bd2
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/functions.policy.inc.php
@@ -0,0 +1,320 @@
+<?php
+function policy($_action, $_scope, $_data = null) {
+ global $pdo;
+ global $redis;
+ global $lang;
+ $_data_log = $_data;
+ switch ($_action) {
+ case 'add':
+ if (!isset($_SESSION['acl']['spam_policy']) || $_SESSION['acl']['spam_policy'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ switch ($_scope) {
+ case 'domain':
+ $object = $_data['domain'];
+ if (is_valid_domain_name($object)) {
+ if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $object)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $object = idn_to_ascii(strtolower(trim($object)), 0, INTL_IDNA_VARIANT_UTS46);
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ if ($_data['object_list'] == "bl") {
+ $object_list = "blacklist_from";
+ }
+ elseif ($_data['object_list'] == "wl") {
+ $object_list = "whitelist_from";
+ }
+ $object_from = trim(strtolower($_data['object_from']));
+ if (!ctype_alnum(str_replace(array('@', '_', '.', '-', '*'), '', $object_from))) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'policy_list_from_invalid'
+ );
+ return false;
+ }
+ if ($object_list != "blacklist_from" && $object_list != "whitelist_from") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT `object` FROM `filterconf`
+ WHERE (`option` = 'whitelist_from' OR `option` = 'blacklist_from')
+ AND `object` = :object
+ AND `value` = :object_from");
+ $stmt->execute(array(':object' => $object, ':object_from' => $object_from));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'policy_list_from_exists'
+ );
+ return false;
+ }
+
+ $stmt = $pdo->prepare("INSERT INTO `filterconf` (`object`, `option` ,`value`)
+ VALUES (:object, :object_list, :object_from)");
+ $stmt->execute(array(
+ ':object' => $object,
+ ':object_list' => $object_list,
+ ':object_from' => $object_from
+ ));
+
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => array('domain_modified', $object)
+ );
+ break;
+ case 'mailbox':
+ $object = $_data['username'];
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $object)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ if ($_data['object_list'] == "bl") {
+ $object_list = "blacklist_from";
+ }
+ elseif ($_data['object_list'] == "wl") {
+ $object_list = "whitelist_from";
+ }
+ $object_from = trim(strtolower($_data['object_from']));
+ if (!ctype_alnum(str_replace(array('@', '_', '.', '-', '*'), '', $object_from))) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'policy_list_from_invalid'
+ );
+ return false;
+ }
+ if ($object_list != "blacklist_from" && $object_list != "whitelist_from") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT `object` FROM `filterconf`
+ WHERE (`option` = 'whitelist_from' OR `option` = 'blacklist_from')
+ AND `object` = :object
+ AND `value` = :object_from");
+ $stmt->execute(array(':object' => $object, ':object_from' => $object_from));
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'policy_list_from_exists'
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("INSERT INTO `filterconf` (`object`, `option` ,`value`)
+ VALUES (:object, :object_list, :object_from)");
+ $stmt->execute(array(
+ ':object' => $object,
+ ':object_list' => $object_list,
+ ':object_from' => $object_from
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => array('mailbox_modified', $object)
+ );
+ break;
+ }
+ break;
+ case 'delete':
+ if (!isset($_SESSION['acl']['spam_policy']) || $_SESSION['acl']['spam_policy'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ switch ($_scope) {
+ case 'domain':
+ (array)$prefids = $_data['prefid'];
+ foreach ($prefids as $prefid) {
+ if (!is_numeric($prefid)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("SELECT `object` FROM `filterconf` WHERE `prefid` = :prefid");
+ $stmt->execute(array(':prefid' => $prefid));
+ $object = $stmt->fetch(PDO::FETCH_ASSOC)['object'];
+ if (is_valid_domain_name($object)) {
+ if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $object)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $object = idn_to_ascii(strtolower(trim($object)), 0, INTL_IDNA_VARIANT_UTS46);
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ try {
+ $stmt = $pdo->prepare("DELETE FROM `filterconf` WHERE `object` = :object AND `prefid` = :prefid");
+ $stmt->execute(array(
+ ':object' => $object,
+ ':prefid' => $prefid
+ ));
+ }
+ catch (PDOException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => array('mysql_error', $e)
+ );
+ continue;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => array('item_deleted',$prefid)
+ );
+ }
+ break;
+ case 'mailbox':
+ if (!is_array($_data['prefid'])) {
+ $prefids = array();
+ $prefids[] = $_data['prefid'];
+ }
+ else {
+ $prefids = $_data['prefid'];
+ }
+ foreach ($prefids as $prefid) {
+ if (!is_numeric($prefid)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("SELECT `object` FROM `filterconf` WHERE `prefid` = :prefid");
+ $stmt->execute(array(':prefid' => $prefid));
+ $object = $stmt->fetch(PDO::FETCH_ASSOC)['object'];
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $object)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ try {
+ $stmt = $pdo->prepare("DELETE FROM `filterconf` WHERE `object` = :object AND `prefid` = :prefid");
+ $stmt->execute(array(
+ ':object' => $object,
+ ':prefid' => $prefid
+ ));
+ }
+ catch (PDOException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => array('mysql_error', $e)
+ );
+ continue;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => array('items_deleted', implode(', ', $prefids))
+ );
+ }
+ break;
+ }
+ break;
+ case 'get':
+ switch ($_scope) {
+ case 'domain':
+ if (!is_valid_domain_name($_data)) {
+ return false;
+ }
+ else {
+ if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
+ return false;
+ }
+ $_data = idn_to_ascii(strtolower(trim($_data)), 0, INTL_IDNA_VARIANT_UTS46);
+ }
+
+ // WHITELIST
+ $stmt = $pdo->prepare("SELECT `object`, `value`, `prefid` FROM `filterconf` WHERE `option`='whitelist_from' AND (`object` LIKE :object_mail OR `object` = :object_domain)");
+ $stmt->execute(array(':object_mail' => '%@' . $_data, ':object_domain' => $_data));
+ $rows['whitelist'] = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ // BLACKLIST
+ $stmt = $pdo->prepare("SELECT `object`, `value`, `prefid` FROM `filterconf` WHERE `option`='blacklist_from' AND (`object` LIKE :object_mail OR `object` = :object_domain)");
+ $stmt->execute(array(':object_mail' => '%@' . $_data, ':object_domain' => $_data));
+ $rows['blacklist'] = $stmt->fetchAll(PDO::FETCH_ASSOC);
+
+ return $rows;
+ break;
+ case 'mailbox':
+ if (isset($_data) && filter_var($_data, FILTER_VALIDATE_EMAIL)) {
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
+ return false;
+ }
+ }
+ else {
+ $_data = $_SESSION['mailcow_cc_username'];
+ }
+ $domain = mailbox('get', 'mailbox_details', $_data)['domain'];
+ if (empty($domain)) {
+ return false;
+ }
+ // WHITELIST
+ $stmt = $pdo->prepare("SELECT `object`, `value`, `prefid` FROM `filterconf` WHERE `option`='whitelist_from' AND (`object` = :username OR `object` = :domain)");
+ $stmt->execute(array(':username' => $_data, ':domain' => $domain));
+ $rows['whitelist'] = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ // BLACKLIST
+ $stmt = $pdo->prepare("SELECT `object`, `value`, `prefid` FROM `filterconf` WHERE `option`='blacklist_from' AND (`object` = :username OR `object` = :domain)");
+ $stmt->execute(array(':username' => $_data, ':domain' => $domain));
+ $rows['blacklist'] = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ return $rows;
+ break;
+ }
+ break;
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/functions.presets.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/functions.presets.inc.php
new file mode 100644
index 0000000..17aaa3f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/functions.presets.inc.php
@@ -0,0 +1,38 @@
+<?php
+function presets($_action, $_kind) {
+ switch ($_action) {
+ case 'get':
+ if ($_SESSION['mailcow_cc_role'] != "admin" && $_SESSION['mailcow_cc_role'] != "domainadmin") {
+ return false;
+ }
+ $presets = array();
+ $kind = strtolower(trim($_kind));
+ $lang_base = 'admin';
+ $presets_path = __DIR__ . '/presets/' . $kind;
+ if (!in_array($kind, ['rspamd', 'sieve'], true)) {
+ return array();
+ }
+ if ($kind === 'sieve') {
+ $lang_base = 'mailbox';
+ }
+ foreach (glob($presets_path . '/*.yml') as $filename) {
+ $presets[] = getPresetFromFilePath($filename, $lang_base);
+ }
+ return $presets;
+ break;
+ }
+ return array();
+}
+function getPresetFromFilePath($filePath, $lang_base) {
+ global $lang;
+ $preset = Spyc::YAMLLoad($filePath);
+ $preset = ['name' => basename($filePath, '.yml')] + $preset;
+ /* get translated headlines */
+ if (isset($preset['headline']) && strpos($preset['headline'], 'lang.') === 0) {
+ $langTextName = trim(substr($preset['headline'], 5));
+ if (isset($lang[$lang_base][$langTextName])) {
+ $preset['headline'] = $lang[$lang_base][$langTextName];
+ }
+ }
+ return $preset;
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/functions.pushover.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/functions.pushover.inc.php
new file mode 100644
index 0000000..e8d4670
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/functions.pushover.inc.php
@@ -0,0 +1,221 @@
+<?php
+function pushover($_action, $_data = null) {
+ global $pdo;
+ switch ($_action) {
+ case 'edit':
+ if (!isset($_SESSION['acl']['pushover']) || $_SESSION['acl']['pushover'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ if (!is_array($_data['username'])) {
+ $usernames = array();
+ $usernames[] = $_data['username'];
+ }
+ else {
+ $usernames = $_data['username'];
+ }
+ foreach ($usernames as $username) {
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $delete = $_data['delete'];
+ if ($delete == "true") {
+ $stmt = $pdo->prepare("DELETE FROM `pushover` WHERE `username` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data),
+ 'msg' => 'pushover_settings_edited'
+ );
+ continue;
+ }
+ $is_now = pushover('get', $username);
+ if (!empty($is_now)) {
+ $key = (!empty($_data['key'])) ? $_data['key'] : $is_now['key'];
+ $token = (!empty($_data['token'])) ? $_data['token'] : $is_now['token'];
+ $senders = (isset($_data['senders'])) ? $_data['senders'] : $is_now['senders'];
+ $senders_regex = (isset($_data['senders_regex'])) ? $_data['senders_regex'] : $is_now['senders_regex'];
+ $title = (!empty($_data['title'])) ? $_data['title'] : $is_now['title'];
+ $text = (!empty($_data['text'])) ? $_data['text'] : $is_now['text'];
+ $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];
+ $evaluate_x_prio = (isset($_data['evaluate_x_prio'])) ? intval($_data['evaluate_x_prio']) : $is_now['evaluate_x_prio'];
+ $only_x_prio = (isset($_data['only_x_prio'])) ? intval($_data['only_x_prio']) : $is_now['only_x_prio'];
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ if (!empty($senders_regex) && !is_valid_regex($senders_regex)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data),
+ 'msg' => 'Invalid regex'
+ );
+ continue;
+ }
+ $senders = array_map('trim', preg_split( "/( |,|;|\n)/", $senders));
+ foreach ($senders as $i => &$sender) {
+ if (empty($sender)) {
+ continue;
+ }
+ if (!filter_var($sender, FILTER_VALIDATE_EMAIL) === true) {
+ unset($senders[$i]);
+ continue;
+ }
+ $senders[$i] = preg_replace('/\.(?=.*?@gmail\.com$)/', '$1', $sender);
+ }
+ $senders = array_filter($senders);
+ if (empty($senders)) { $senders = ''; }
+ $senders = implode(",", $senders);
+ if (!ctype_alnum($key) || strlen($key) != 30) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_data),
+ 'msg' => 'pushover_key'
+ );
+ continue;
+ }
+ if (!ctype_alnum($token) || strlen($token) != 30) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_data),
+ 'msg' => 'pushover_token'
+ );
+ continue;
+ }
+ $po_attributes = json_encode(
+ array(
+ 'evaluate_x_prio' => strval(intval($evaluate_x_prio)),
+ 'only_x_prio' => strval(intval($only_x_prio))
+ )
+ );
+ $stmt = $pdo->prepare("REPLACE INTO `pushover` (`username`, `key`, `attributes`, `senders_regex`, `senders`, `token`, `title`, `text`, `active`)
+ VALUES (:username, :key, :po_attributes, :senders_regex, :senders, :token, :title, :text, :active)");
+ $stmt->execute(array(
+ ':username' => $username,
+ ':key' => $key,
+ ':po_attributes' => $po_attributes,
+ ':senders_regex' => $senders_regex,
+ ':senders' => $senders,
+ ':token' => $token,
+ ':title' => $title,
+ ':text' => $text,
+ ':active' => $active
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data),
+ 'msg' => 'pushover_settings_edited'
+ );
+ }
+ break;
+ case 'get':
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("SELECT * FROM `pushover` WHERE `username` = :username");
+ $stmt->execute(array(
+ ':username' => $_data
+ ));
+ $data = $stmt->fetch(PDO::FETCH_ASSOC);
+ $data['attributes'] = json_decode($data['attributes'], true);
+ if (empty($data)) {
+ return false;
+ }
+ else {
+ return $data;
+ }
+ break;
+ case 'test':
+ if (!isset($_SESSION['acl']['pushover']) || $_SESSION['acl']['pushover'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ if (!is_array($_data['username'])) {
+ $usernames = array();
+ $usernames[] = $_data['username'];
+ }
+ else {
+ $usernames = $_data['username'];
+ }
+ foreach ($usernames as $username) {
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("SELECT * FROM `pushover`
+ WHERE `username` = :username");
+ $stmt->execute(array(
+ ':username' => $username
+ ));
+ $api_data = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (!empty($api_data)) {
+ $title = (!empty($api_data['title'])) ? $api_data['title'] : 'Mail';
+ $text = (!empty($api_data['text'])) ? $api_data['text'] : 'You\'ve got mail 📧';
+ curl_setopt_array($ch = curl_init(), array(
+ CURLOPT_URL => "https://api.pushover.net/1/users/validate.json",
+ CURLOPT_POSTFIELDS => array(
+ "token" => $api_data['token'],
+ "user" => $api_data['key']
+ ),
+ CURLOPT_SAFE_UPLOAD => true,
+ CURLOPT_RETURNTRANSFER => true,
+ ));
+ $result = curl_exec($ch);
+ $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
+ curl_close($ch);
+ if ($httpcode == 200) {
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data),
+ 'msg' => sprintf('Pushover API OK (%d): %s', $httpcode, $result)
+ );
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data),
+ 'msg' => sprintf('Pushover API ERR (%d): %s', $httpcode, $result)
+ );
+ }
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data),
+ 'msg' => 'pushover_credentials_missing'
+ );
+ return false;
+ }
+ }
+ break;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/functions.quarantine.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/functions.quarantine.inc.php
new file mode 100644
index 0000000..f4f49de
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/functions.quarantine.inc.php
@@ -0,0 +1,841 @@
+<?php
+use PHPMailer\PHPMailer\PHPMailer;
+use PHPMailer\PHPMailer\SMTP;
+use PHPMailer\PHPMailer\Exception;
+function quarantine($_action, $_data = null) {
+ global $pdo;
+ global $redis;
+ global $lang;
+ $_data_log = $_data;
+ switch ($_action) {
+ case 'quick_delete':
+ // Dont return results, just log
+ $hash = trim($_data);
+ if (preg_match("/^([a-f0-9]{64})$/", $hash) === false) {
+ logger(array('return' => array(
+ array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ )
+ )));
+ return false;
+ }
+ $stmt = $pdo->prepare('SELECT `id` FROM `quarantine` LEFT OUTER JOIN `user_acl` ON `user_acl`.`username` = `rcpt`
+ WHERE SHA2(CONCAT(`id`, `qid`), 256) = :hash
+ AND user_acl.quarantine = 1
+ AND rcpt IN (SELECT username FROM mailbox)');
+ $stmt->execute(array(':hash' => $hash));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (empty($row['id']) || !is_numeric($row['id'])) {
+ logger(array('return' => array(
+ array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ )
+ )));
+ return false;
+ }
+ else {
+ $stmt = $pdo->prepare("DELETE FROM `quarantine` WHERE id = :id");
+ $stmt->execute(array(
+ ':id' => $row['id']
+ ));
+ }
+ logger(array('return' => array(
+ array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('item_deleted', $row['id'])
+ )
+ )));
+ break;
+ case 'quick_release':
+ // Dont return results, just log
+ $hash = trim($_data);
+ if (preg_match("/^([a-f0-9]{64})$/", $hash) === false) {
+ logger(array('return' => array(
+ array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ )
+ )));
+ return false;
+ }
+ $stmt = $pdo->prepare('SELECT `id` FROM `quarantine` LEFT OUTER JOIN `user_acl` ON `user_acl`.`username` = `rcpt`
+ WHERE SHA2(CONCAT(`id`, `qid`), 256) = :hash
+ AND `user_acl`.`quarantine` = 1
+ AND `username` IN (SELECT `username` FROM `mailbox`)');
+ $stmt->execute(array(':hash' => $hash));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (empty($row['id']) || !is_numeric($row['id'])) {
+ logger(array('return' => array(
+ array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ )
+ )));
+ return false;
+ }
+ else {
+ $stmt = $pdo->prepare('SELECT `msg`, `qid`, `sender`, `rcpt` FROM `quarantine` WHERE `id` = :id');
+ $stmt->execute(array(':id' => $row['id']));
+ $detail_row = $stmt->fetch(PDO::FETCH_ASSOC);
+ $sender = !empty($detail_row['sender']) ? $detail_row['sender'] : 'sender-unknown@rspamd';
+ if (!empty(gethostbynamel('postfix-mailcow'))) {
+ $postfix = 'postfix-mailcow';
+ }
+ if (!empty(gethostbynamel('postfix'))) {
+ $postfix = 'postfix';
+ }
+ else {
+ logger(array('return' => array(
+ array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('release_send_failed', 'Cannot determine Postfix host')
+ )
+ )));
+ return false;
+ }
+ try {
+ $release_format = $redis->Get('Q_RELEASE_FORMAT');
+ }
+ catch (RedisException $e) {
+ logger(array('return' => array(
+ array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('redis_error', $e)
+ )
+ )));
+ return false;
+ }
+ if ($release_format == 'attachment') {
+ try {
+ $mail = new PHPMailer(true);
+ $mail->isSMTP();
+ $mail->SMTPDebug = 0;
+ $mail->SMTPOptions = array(
+ 'ssl' => array(
+ 'verify_peer' => false,
+ 'verify_peer_name' => false,
+ 'allow_self_signed' => true
+ )
+ );
+ if (!empty(gethostbynamel('postfix-mailcow'))) {
+ $postfix = 'postfix-mailcow';
+ }
+ if (!empty(gethostbynamel('postfix'))) {
+ $postfix = 'postfix';
+ }
+ else {
+ logger(array('return' => array(
+ array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('release_send_failed', 'Cannot determine Postfix host')
+ )
+ )));
+ return false;
+ }
+ $mail->Host = $postfix;
+ $mail->Port = 590;
+ $mail->setFrom($sender);
+ $mail->CharSet = 'UTF-8';
+ $mail->Subject = sprintf($lang['quarantine']['release_subject'], $detail_row['qid']);
+ $mail->addAddress($detail_row['rcpt']);
+ $mail->IsHTML(false);
+ $msg_tmpf = tempnam("/tmp", $detail_row['qid']);
+ file_put_contents($msg_tmpf, $detail_row['msg']);
+ $mail->addAttachment($msg_tmpf, $detail_row['qid'] . '.eml');
+ $mail->Body = sprintf($lang['quarantine']['release_body']);
+ $mail->send();
+ unlink($msg_tmpf);
+ }
+ catch (phpmailerException $e) {
+ unlink($msg_tmpf);
+ logger(array('return' => array(
+ array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('release_send_failed', $e->errorMessage())
+ )
+ )));
+ return false;
+ }
+ }
+ elseif ($release_format == 'raw') {
+ $detail_row['msg'] = preg_replace('/^X-Spam-Flag: (.*)/', 'X-Pre-Release-Spam-Flag $1', $detail_row['msg']);
+ $postfix_talk = array(
+ array('220', 'HELO quarantine' . chr(10)),
+ array('250', 'MAIL FROM: ' . $sender . chr(10)),
+ array('250', 'RCPT TO: ' . $detail_row['rcpt'] . chr(10)),
+ array('250', 'DATA' . chr(10)),
+ array('354', $detail_row['msg'] . chr(10) . '.' . chr(10)),
+ array('250', 'QUIT' . chr(10)),
+ array('221', '')
+ );
+ // Thanks to https://stackoverflow.com/questions/6632399/given-an-email-as-raw-text-how-can-i-send-it-using-php
+ $smtp_connection = fsockopen($postfix, 590, $errno, $errstr, 1);
+ if (!$smtp_connection) {
+ logger(array('return' => array(
+ array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'Cannot connect to Postfix'
+ )
+ )));
+ return false;
+ }
+ for ($i=0; $i < count($postfix_talk); $i++) {
+ $smtp_resource = fgets($smtp_connection, 256);
+ if (substr($smtp_resource, 0, 3) !== $postfix_talk[$i][0]) {
+ $ret = substr($smtp_resource, 0, 3);
+ $ret = (empty($ret)) ? '-' : $ret;
+ logger(array('return' => array(
+ array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'Postfix returned SMTP code ' . $smtp_resource . ', expected ' . $postfix_talk[$i][0]
+ )
+ )));
+ return false;
+ }
+ if ($postfix_talk[$i][1] !== '') {
+ fputs($smtp_connection, $postfix_talk[$i][1]);
+ }
+ }
+ fclose($smtp_connection);
+ }
+ $stmt = $pdo->prepare("DELETE FROM `quarantine` WHERE id = :id");
+ $stmt->execute(array(
+ ':id' => $row['id']
+ ));
+ }
+ logger(array('return' => array(
+ array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('item_released', $hash)
+ )
+ )));
+ break;
+ case 'delete':
+ if (!is_array($_data['id'])) {
+ $ids = array();
+ $ids[] = $_data['id'];
+ }
+ else {
+ $ids = $_data['id'];
+ }
+ if (!isset($_SESSION['acl']['quarantine']) || $_SESSION['acl']['quarantine'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ foreach ($ids as $id) {
+ if (!is_numeric($id)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare('SELECT `rcpt` FROM `quarantine` WHERE `id` = :id');
+ $stmt->execute(array(':id' => $id));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['rcpt']) && $_SESSION['mailcow_cc_role'] != 'admin') {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ else {
+ $stmt = $pdo->prepare("DELETE FROM `quarantine` WHERE `id` = :id");
+ $stmt->execute(array(
+ ':id' => $id
+ ));
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('item_deleted', $id)
+ );
+ }
+ break;
+ case 'edit':
+ if (!isset($_SESSION['acl']['quarantine']) || $_SESSION['acl']['quarantine'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ // Edit settings
+ if ($_data['action'] == 'settings') {
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $retention_size = $_data['retention_size'];
+ if ($_data['release_format'] == 'attachment' || $_data['release_format'] == 'raw') {
+ $release_format = $_data['release_format'];
+ }
+ else {
+ $release_format = 'raw';
+ }
+ $max_size = $_data['max_size'];
+ if ($_data['max_score'] == "") {
+ $max_score = '';
+ }
+ else {
+ $max_score = floatval($_data['max_score']);
+ }
+ $max_age = intval($_data['max_age']);
+ $subject = $_data['subject'];
+ if (!filter_var($_data['bcc'], FILTER_VALIDATE_EMAIL)) {
+ $bcc = '';
+ }
+ else {
+ $bcc = $_data['bcc'];
+ }
+ if (!filter_var($_data['redirect'], FILTER_VALIDATE_EMAIL)) {
+ $redirect = '';
+ }
+ else {
+ $redirect = $_data['redirect'];
+ }
+ if (!filter_var($_data['sender'], FILTER_VALIDATE_EMAIL)) {
+ $sender = '';
+ }
+ else {
+ $sender = $_data['sender'];
+ }
+ $html = $_data['html_tmpl'];
+ if ($max_age <= 0) {
+ $max_age = 365;
+ }
+ $exclude_domains = (array)$_data['exclude_domains'];
+ try {
+ $redis->Set('Q_RETENTION_SIZE', intval($retention_size));
+ $redis->Set('Q_MAX_SIZE', intval($max_size));
+ $redis->Set('Q_MAX_SCORE', $max_score);
+ $redis->Set('Q_MAX_AGE', $max_age);
+ $redis->Set('Q_EXCLUDE_DOMAINS', json_encode($exclude_domains));
+ $redis->Set('Q_RELEASE_FORMAT', $release_format);
+ $redis->Set('Q_SENDER', $sender);
+ $redis->Set('Q_BCC', $bcc);
+ $redis->Set('Q_REDIRECT', $redirect);
+ $redis->Set('Q_SUBJ', $subject);
+ $redis->Set('Q_HTML', $html);
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'saved_settings'
+ );
+ }
+ // Release item
+ elseif ($_data['action'] == 'release' || $_data['action'] == 'learnham') {
+ if (!is_array($_data['id'])) {
+ $ids = array();
+ $ids[] = $_data['id'];
+ }
+ else {
+ $ids = $_data['id'];
+ }
+ foreach ($ids as $id) {
+ if (!is_numeric($id)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare('SELECT `msg`, `action`, `qid`, `sender`, `rcpt` FROM `quarantine` WHERE `id` = :id');
+ $stmt->execute(array(':id' => $id));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['rcpt']) && $_SESSION['mailcow_cc_role'] != 'admin' || empty($row['rcpt'])) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $sender = !empty($row['sender']) ? $row['sender'] : 'sender-unknown@rspamd';
+ if (!empty(gethostbynamel('postfix-mailcow'))) {
+ $postfix = 'postfix-mailcow';
+ }
+ if (!empty(gethostbynamel('postfix'))) {
+ $postfix = 'postfix';
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('release_send_failed', 'Cannot determine Postfix host')
+ );
+ continue;
+ }
+ try {
+ $release_format = $redis->Get('Q_RELEASE_FORMAT');
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ if ($release_format == 'attachment') {
+ try {
+ $mail = new PHPMailer(true);
+ $mail->isSMTP();
+ $mail->SMTPDebug = 0;
+ $mail->SMTPOptions = array(
+ 'ssl' => array(
+ 'verify_peer' => false,
+ 'verify_peer_name' => false,
+ 'allow_self_signed' => true
+ )
+ );
+ if (!empty(gethostbynamel('postfix-mailcow'))) {
+ $postfix = 'postfix-mailcow';
+ }
+ if (!empty(gethostbynamel('postfix'))) {
+ $postfix = 'postfix';
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('release_send_failed', 'Cannot determine Postfix host')
+ );
+ continue;
+ }
+ $mail->Host = $postfix;
+ $mail->Port = 590;
+ $mail->setFrom($sender);
+ $mail->CharSet = 'UTF-8';
+ $mail->Subject = sprintf($lang['quarantine']['release_subject'], $row['qid']);
+ $mail->addAddress($row['rcpt']);
+ $mail->IsHTML(false);
+ $msg_tmpf = tempnam("/tmp", $row['qid']);
+ file_put_contents($msg_tmpf, $row['msg']);
+ $mail->addAttachment($msg_tmpf, $row['qid'] . '.eml');
+ $mail->Body = sprintf($lang['quarantine']['release_body']);
+ $mail->send();
+ unlink($msg_tmpf);
+ }
+ catch (phpmailerException $e) {
+ unlink($msg_tmpf);
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('release_send_failed', $e->errorMessage())
+ );
+ continue;
+ }
+ }
+ elseif ($release_format == 'raw') {
+ $row['msg'] = preg_replace('/^X-Spam-Flag: (.*)/', 'X-Pre-Release-Spam-Flag $1', $row['msg']);
+ $postfix_talk = array(
+ array('220', 'HELO quarantine' . chr(10)),
+ array('250', 'MAIL FROM: ' . $sender . chr(10)),
+ array('250', 'RCPT TO: ' . $row['rcpt'] . chr(10)),
+ array('250', 'DATA' . chr(10)),
+ array('354', str_replace("\n.", '', $row['msg']) . chr(10) . '.' . chr(10)),
+ array('250', 'QUIT' . chr(10)),
+ array('221', '')
+ );
+ // Thanks to https://stackoverflow.com/questions/6632399/given-an-email-as-raw-text-how-can-i-send-it-using-php
+ $smtp_connection = fsockopen($postfix, 590, $errno, $errstr, 1);
+ if (!$smtp_connection) {
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'Cannot connect to Postfix'
+ );
+ return false;
+ }
+ for ($i=0; $i < count($postfix_talk); $i++) {
+ $smtp_resource = fgets($smtp_connection, 256);
+ if (substr($smtp_resource, 0, 3) !== $postfix_talk[$i][0]) {
+ $ret = substr($smtp_resource, 0, 3);
+ $ret = (empty($ret)) ? '-' : $ret;
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'Postfix returned SMTP code ' . $smtp_resource . ', expected ' . $postfix_talk[$i][0]
+ );
+ return false;
+ }
+ if ($postfix_talk[$i][1] !== '') {
+ fputs($smtp_connection, $postfix_talk[$i][1]);
+ }
+ }
+ fclose($smtp_connection);
+ }
+ $stmt = $pdo->prepare("DELETE FROM `quarantine` WHERE `id` = :id");
+ $stmt->execute(array(
+ ':id' => $id
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('item_released', $id)
+ );
+ // Item was released and deleted from quarantine, now learning ham
+ $curl = curl_init();
+ curl_setopt($curl, CURLOPT_UNIX_SOCKET_PATH, '/var/lib/rspamd/rspamd.sock');
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($curl, CURLOPT_POST, 1);
+ curl_setopt($curl, CURLOPT_TIMEOUT, 30);
+ curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: text/plain'));
+ curl_setopt($curl, CURLOPT_URL,"http://rspamd/learnham");
+ curl_setopt($curl, CURLOPT_POSTFIELDS, $row['msg']);
+ $response = curl_exec($curl);
+ if (!curl_errno($curl)) {
+ $response = json_decode($response, true);
+ if (isset($response['error'])) {
+ if (stripos($response['error'], 'already learned') === false) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('ham_learn_error', $response['error'])
+ );
+ continue;
+ }
+ }
+ curl_close($curl);
+ $curl = curl_init();
+ curl_setopt($curl, CURLOPT_UNIX_SOCKET_PATH, '/var/lib/rspamd/rspamd.sock');
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($curl, CURLOPT_POST, 1);
+ curl_setopt($curl, CURLOPT_TIMEOUT, 30);
+ curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: text/plain', 'Flag: 11'));
+ curl_setopt($curl, CURLOPT_URL,"http://rspamd/fuzzydel");
+ curl_setopt($curl, CURLOPT_POSTFIELDS, $row['msg']);
+ // It is most likely not a spam hash, so we ignore any error/warning response
+ // $response = curl_exec($curl);
+ if (!curl_errno($curl)) {
+ curl_close($curl);
+ $curl = curl_init();
+ curl_setopt($curl, CURLOPT_UNIX_SOCKET_PATH, '/var/lib/rspamd/rspamd.sock');
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($curl, CURLOPT_POST, 1);
+ curl_setopt($curl, CURLOPT_TIMEOUT, 30);
+ curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: text/plain', 'Flag: 13'));
+ curl_setopt($curl, CURLOPT_URL,"http://rspamd/fuzzyadd");
+ curl_setopt($curl, CURLOPT_POSTFIELDS, $row['msg']);
+ $response = curl_exec($curl);
+ curl_exec($curl);
+ if (!curl_errno($curl)) {
+ $response = json_decode($response, true);
+ if (isset($response['error'])) {
+ if (stripos($response['error'], 'No content to generate fuzzy') === false) {
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('fuzzy_learn_error', $response['error'])
+ );
+ }
+ }
+ }
+ curl_close($curl);
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('learned_ham', $id)
+ );
+ continue;
+ }
+ else {
+ curl_close($curl);
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('ham_learn_error', 'Curl: ' . curl_strerror(curl_errno($curl)))
+ );
+ continue;
+ }
+ curl_close($curl);
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('ham_learn_error', 'unknown')
+ );
+ continue;
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('ham_learn_error', 'Curl: ' . curl_strerror(curl_errno($curl)))
+ );
+ curl_close($curl);
+ continue;
+ }
+ curl_close($curl);
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('ham_learn_error', 'unknown')
+ );
+ continue;
+ }
+ }
+ elseif ($_data['action'] == 'learnspam') {
+ if (!is_array($_data['id'])) {
+ $ids = array();
+ $ids[] = $_data['id'];
+ }
+ else {
+ $ids = $_data['id'];
+ }
+ foreach ($ids as $id) {
+ if (!is_numeric($id)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare('SELECT `msg`, `rcpt`, `action` FROM `quarantine` WHERE `id` = :id');
+ $stmt->execute(array(':id' => $id));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['rcpt']) && $_SESSION['mailcow_cc_role'] != 'admin' || empty($row['rcpt'])) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ $stmt = $pdo->prepare("DELETE FROM `quarantine` WHERE `id` = :id");
+ $stmt->execute(array(
+ ':id' => $id
+ ));
+ $curl = curl_init();
+ curl_setopt($curl, CURLOPT_UNIX_SOCKET_PATH, '/var/lib/rspamd/rspamd.sock');
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($curl, CURLOPT_POST, 1);
+ curl_setopt($curl, CURLOPT_TIMEOUT, 30);
+ curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: text/plain'));
+ curl_setopt($curl, CURLOPT_URL,"http://rspamd/learnspam");
+ curl_setopt($curl, CURLOPT_POSTFIELDS, $row['msg']);
+ $response = curl_exec($curl);
+ if (!curl_errno($curl)) {
+ $response = json_decode($response, true);
+ if (isset($response['error'])) {
+ if (stripos($response['error'], 'already learned') === false) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('spam_learn_error', $response['error'])
+ );
+ continue;
+ }
+ }
+ curl_close($curl);
+ $curl = curl_init();
+ curl_setopt($curl, CURLOPT_UNIX_SOCKET_PATH, '/var/lib/rspamd/rspamd.sock');
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($curl, CURLOPT_POST, 1);
+ curl_setopt($curl, CURLOPT_TIMEOUT, 30);
+ curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: text/plain', 'Flag: 13'));
+ curl_setopt($curl, CURLOPT_URL,"http://rspamd/fuzzydel");
+ curl_setopt($curl, CURLOPT_POSTFIELDS, $row['msg']);
+ // It is most likely not a spam hash, so we ignore any error/warning response
+ // $response = curl_exec($curl);
+ if (!curl_errno($curl)) {
+ curl_close($curl);
+ $curl = curl_init();
+ curl_setopt($curl, CURLOPT_UNIX_SOCKET_PATH, '/var/lib/rspamd/rspamd.sock');
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($curl, CURLOPT_POST, 1);
+ curl_setopt($curl, CURLOPT_TIMEOUT, 30);
+ curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: text/plain', 'Flag: 11'));
+ curl_setopt($curl, CURLOPT_URL,"http://rspamd/fuzzyadd");
+ curl_setopt($curl, CURLOPT_POSTFIELDS, $row['msg']);
+ $response = curl_exec($curl);
+ curl_exec($curl);
+ if (!curl_errno($curl)) {
+ $response = json_decode($response, true);
+ if (isset($response['error'])) {
+ if (stripos($response['error'], 'No content to generate fuzzy') === false) {
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('fuzzy_learn_error', $response['error'])
+ );
+ }
+ }
+ }
+ curl_close($curl);
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('qlearn_spam', $id)
+ );
+ continue;
+ }
+ else {
+ curl_close($curl);
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('spam_learn_error', 'Curl: ' . curl_strerror(curl_errno($curl)))
+ );
+ continue;
+ }
+ curl_close($curl);
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('spam_learn_error', 'unknown')
+ );
+ continue;
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('spam_learn_error', 'Curl: ' . curl_strerror(curl_errno($curl)))
+ );
+ curl_close($curl);
+ continue;
+ }
+ curl_close($curl);
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('spam_learn_error', 'unknown')
+ );
+ continue;
+ }
+ }
+ return true;
+ break;
+ case 'get':
+ if ($_SESSION['mailcow_cc_role'] == "user") {
+ $stmt = $pdo->prepare('SELECT `id`, `qid`, `subject`, LOCATE("VIRUS_FOUND", `symbols`) AS `virus_flag`, `score`, `rcpt`, `sender`, `action`, UNIX_TIMESTAMP(`created`) AS `created`, `notified` FROM `quarantine` WHERE `rcpt` = :mbox');
+ $stmt->execute(array(':mbox' => $_SESSION['mailcow_cc_username']));
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while($row = array_shift($rows)) {
+ $q_meta[] = $row;
+ }
+ }
+ elseif ($_SESSION['mailcow_cc_role'] == "admin") {
+ $stmt = $pdo->query('SELECT `id`, `qid`, `subject`, LOCATE("VIRUS_FOUND", `symbols`) AS `virus_flag`, `score`, `rcpt`, `sender`, `action`, UNIX_TIMESTAMP(`created`) AS `created`, `notified` FROM `quarantine`');
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while($row = array_shift($rows)) {
+ $q_meta[] = $row;
+ }
+ }
+ else {
+ $domains = array_merge(mailbox('get', 'domains'), mailbox('get', 'alias_domains'));
+ foreach ($domains as $domain) {
+ $stmt = $pdo->prepare('SELECT `id`, `qid`, `subject`, LOCATE("VIRUS_FOUND", `symbols`) AS `virus_flag`, `score`, `rcpt`, `sender`, `action`, UNIX_TIMESTAMP(`created`) AS `created`, `notified` FROM `quarantine` WHERE `rcpt` REGEXP :domain');
+ $stmt->execute(array(':domain' => '@' . $domain . '$'));
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while($row = array_shift($rows)) {
+ $q_meta[] = $row;
+ }
+ }
+ }
+ return $q_meta;
+ break;
+ case 'settings':
+ try {
+ if ($_SESSION['mailcow_cc_role'] == "admin") {
+ $settings['exclude_domains'] = json_decode($redis->Get('Q_EXCLUDE_DOMAINS'), true);
+ }
+ $settings['max_size'] = $redis->Get('Q_MAX_SIZE');
+ $settings['max_score'] = $redis->Get('Q_MAX_SCORE');
+ $settings['max_age'] = $redis->Get('Q_MAX_AGE');
+ $settings['retention_size'] = $redis->Get('Q_RETENTION_SIZE');
+ $settings['release_format'] = $redis->Get('Q_RELEASE_FORMAT');
+ $settings['subject'] = $redis->Get('Q_SUBJ');
+ $settings['sender'] = $redis->Get('Q_SENDER');
+ $settings['bcc'] = $redis->Get('Q_BCC');
+ $settings['redirect'] = $redis->Get('Q_REDIRECT');
+ $settings['html_tmpl'] = htmlspecialchars($redis->Get('Q_HTML'));
+ if (empty($settings['html_tmpl'])) {
+ $settings['html_tmpl'] = htmlspecialchars(file_get_contents("/tpls/quarantine.tpl"));
+ }
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ return $settings;
+ break;
+ case 'details':
+ if (!is_numeric($_data) || empty($_data)) {
+ return false;
+ }
+ $stmt = $pdo->prepare('SELECT * FROM `quarantine` WHERE `id`= :id');
+ $stmt->execute(array(':id' => $_data));
+ $row = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['rcpt']) || $_SESSION['mailcow_cc_role'] == 'admin') {
+ return $row;
+ }
+ logger(array('return' => array(
+ array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ )
+ )));
+ return false;
+ break;
+ case 'hash_details':
+ $hash = trim($_data);
+ if (preg_match("/^([a-f0-9]{64})$/", $hash) === false) {
+ logger(array('return' => array(
+ array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ )
+ )));
+ return false;
+ }
+ $stmt = $pdo->prepare('SELECT * FROM `quarantine` WHERE SHA2(CONCAT(`id`, `qid`), 256) = :hash');
+ $stmt->execute(array(':hash' => $hash));
+ return $stmt->fetch(PDO::FETCH_ASSOC);
+ break;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/functions.quota_notification.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/functions.quota_notification.inc.php
new file mode 100644
index 0000000..9ca5a22
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/functions.quota_notification.inc.php
@@ -0,0 +1,67 @@
+<?php
+function quota_notification($_action, $_data = null) {
+ global $redis;
+ $_data_log = $_data;
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ switch ($_action) {
+ case 'edit':
+ $retention_size = $_data['retention_size'];
+ if ($_data['release_format'] == 'attachment' || $_data['release_format'] == 'raw') {
+ $release_format = $_data['release_format'];
+ }
+ else {
+ $release_format = 'raw';
+ }
+ $subject = $_data['subject'];
+ $sender = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $_data['sender']);
+ if (filter_var($sender, FILTER_VALIDATE_EMAIL) === false) {
+ $sender = '';
+ }
+ $html = $_data['html_tmpl'];
+ try {
+ $redis->Set('QW_SENDER', $sender);
+ $redis->Set('QW_SUBJ', $subject);
+ $redis->Set('QW_HTML', $html);
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'saved_settings'
+ );
+ break;
+ case 'get':
+ try {
+ $settings['subject'] = $redis->Get('QW_SUBJ');
+ $settings['sender'] = $redis->Get('QW_SENDER');
+ $settings['html_tmpl'] = htmlspecialchars($redis->Get('QW_HTML'));
+ if (empty($settings['html_tmpl'])) {
+ $settings['html_tmpl'] = htmlspecialchars(file_get_contents("/tpls/quota.tpl"));
+ }
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ return $settings;
+ break;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/functions.ratelimit.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/functions.ratelimit.inc.php
new file mode 100644
index 0000000..f9e7a71
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/functions.ratelimit.inc.php
@@ -0,0 +1,242 @@
+<?php
+function ratelimit($_action, $_scope, $_data = null) {
+ global $redis;
+ $_data_log = $_data;
+ switch ($_action) {
+ case 'edit':
+ if (!isset($_SESSION['acl']['ratelimit']) || $_SESSION['acl']['ratelimit'] != "1" ) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ switch ($_scope) {
+ case 'domain':
+ if (!is_array($_data['object'])) {
+ $objects = array();
+ $objects[] = $_data['object'];
+ }
+ else {
+ $objects = $_data['object'];
+ }
+ foreach ($objects as $object) {
+ $rl_value = intval($_data['rl_value']);
+ $rl_frame = $_data['rl_frame'];
+ if (!in_array($rl_frame, array('s', 'm', 'h', 'd'))) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'rl_timeframe'
+ );
+ continue;
+ }
+ if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $object)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ if (empty($rl_value)) {
+ try {
+ $redis->hDel('RL_VALUE', $object);
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => array('redis_error', $e)
+ );
+ continue;
+ }
+ }
+ else {
+ try {
+ $redis->hSet('RL_VALUE', $object, $rl_value . ' / 1' . $rl_frame);
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => array('redis_error', $e)
+ );
+ continue;
+ }
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => array('rl_saved', $object)
+ );
+ }
+ break;
+ case 'mailbox':
+ if (!is_array($_data['object'])) {
+ $objects = array();
+ $objects[] = $_data['object'];
+ }
+ else {
+ $objects = $_data['object'];
+ }
+ foreach ($objects as $object) {
+ $rl_value = intval($_data['rl_value']);
+ $rl_frame = $_data['rl_frame'];
+ if (!in_array($rl_frame, array('s', 'm', 'h', 'd'))) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'rl_timeframe'
+ );
+ continue;
+ }
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $object)
+ || ($_SESSION['mailcow_cc_role'] != 'admin' && $_SESSION['mailcow_cc_role'] != 'domainadmin')) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ if (empty($rl_value)) {
+ try {
+ $redis->hDel('RL_VALUE', $object);
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => array('redis_error', $e)
+ );
+ continue;
+ }
+ }
+ else {
+ try {
+ $redis->hSet('RL_VALUE', $object, $rl_value . ' / 1' . $rl_frame);
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => array('redis_error', $e)
+ );
+ continue;
+ }
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => array('rl_saved', $object)
+ );
+ }
+ break;
+ }
+ break;
+ case 'get':
+ switch ($_scope) {
+ case 'domain':
+ if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
+ return false;
+ }
+ try {
+ if ($rl_value = $redis->hGet('RL_VALUE', $_data)) {
+ $rl = explode(' / 1', $rl_value);
+ $data['value'] = $rl[0];
+ $data['frame'] = $rl[1];
+ return $data;
+ }
+ else {
+ return false;
+ }
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ return false;
+ break;
+ case 'mailbox':
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)
+ || ($_SESSION['mailcow_cc_role'] != 'admin' && $_SESSION['mailcow_cc_role'] != 'domainadmin')) {
+ return false;
+ }
+ try {
+ if ($rl_value = $redis->hGet('RL_VALUE', $_data)) {
+ $rl = explode(' / 1', $rl_value);
+ $data['value'] = $rl[0];
+ $data['frame'] = $rl[1];
+ return $data;
+ }
+ else {
+ return false;
+ }
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ return false;
+ break;
+ }
+ break;
+ case 'delete':
+ $data['hash'] = $_data;
+ if ($_SESSION['mailcow_cc_role'] != 'admin' || !preg_match('/^RL[0-9A-Za-z=]+$/i', trim($data['hash']))) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ try {
+ $data_rllog = $redis->lRange('RL_LOG', 0, -1);
+ if ($data_rllog) {
+ foreach ($data_rllog as $json_line) {
+ if (preg_match('/' . $data['hash'] . '/i', $json_line)) {
+ $redis->lRem('RL_LOG', $json_line, 0);
+ }
+ }
+ }
+ if ($redis->type($data['hash']) == Redis::REDIS_HASH) {
+ $redis->delete($data['hash']);
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'hash_deleted'
+ );
+ return true;
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => 'hash_not_found'
+ );
+ return false;
+ }
+ }
+ catch (RedisException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
+ 'msg' => array('redis_error', $e)
+ );
+ return false;
+ }
+ return false;
+ break;
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/functions.rspamd.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/functions.rspamd.inc.php
new file mode 100644
index 0000000..b0ba1f5
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/functions.rspamd.inc.php
@@ -0,0 +1,211 @@
+<?php
+function rsettings($_action, $_data = null) {
+ global $pdo;
+ global $lang;
+ $_data_log = $_data;
+ switch ($_action) {
+ case 'add':
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $content = $_data['content'];
+ $desc = $_data['desc'];
+ $active = intval($_data['active']);
+ if (empty($content)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'map_content_empty'
+ );
+ return false;
+ }
+ $stmt = $pdo->prepare("INSERT INTO `settingsmap` (`content`, `desc`, `active`)
+ VALUES (:content, :desc, :active)");
+ $stmt->execute(array(
+ ':content' => $content,
+ ':desc' => $desc,
+ ':active' => $active
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'settings_map_added'
+ );
+ break;
+ case 'edit':
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $ids = (array)$_data['id'];
+ foreach ($ids as $id) {
+ $is_now = rsettings('details', $id);
+ if (!empty($is_now)) {
+ $content = (!empty($_data['content'])) ? $_data['content'] : $is_now['content'];
+ $desc = (!empty($_data['desc'])) ? $_data['desc'] : $is_now['desc'];
+ $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('settings_map_invalid', $id)
+ );
+ continue;
+ }
+ $content = trim($content);
+ $stmt = $pdo->prepare("UPDATE `settingsmap` SET
+ `content` = :content,
+ `desc` = :desc,
+ `active` = :active
+ WHERE `id` = :id");
+ $stmt->execute(array(
+ ':content' => $content,
+ ':desc' => $desc,
+ ':active' => $active,
+ ':id' => $id
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('object_modified', htmlspecialchars($ids))
+ );
+ }
+ break;
+ case 'delete':
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $ids = (array)$_data['id'];
+ foreach ($ids as $id) {
+ $stmt = $pdo->prepare("DELETE FROM `settingsmap` WHERE `id`= :id");
+ $stmt->execute(array(':id' => $id));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('settings_map_removed', htmlspecialchars($id))
+ );
+ }
+ break;
+ case 'get':
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ return false;
+ }
+ $settingsmaps = array();
+ $stmt = $pdo->query("SELECT `id`, `desc`, `active` FROM `settingsmap`");
+ $settingsmaps = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ return $settingsmaps;
+ break;
+ case 'details':
+ if ($_SESSION['mailcow_cc_role'] != "admin" || !isset($_data)) {
+ return false;
+ }
+ $settingsmapdata = array();
+ $stmt = $pdo->prepare("SELECT `id`,
+ `desc`,
+ `content`,
+ `active`
+ FROM `settingsmap`
+ WHERE `id` = :id");
+ $stmt->execute(array(':id' => $_data));
+ $settingsmapdata = $stmt->fetch(PDO::FETCH_ASSOC);
+ return $settingsmapdata;
+ break;
+ }
+}
+function rspamd_maps($_action, $_data = null) {
+ global $pdo;
+ global $lang;
+ global $RSPAMD_MAPS;
+ $_data_log = $_data;
+ switch ($_action) {
+ case 'edit':
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $maps = (array)$_data['map'];
+ foreach ($maps as $map) {
+ foreach ($RSPAMD_MAPS as $rspamd_map_type) {
+ if (!in_array($map, $rspamd_map_type)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('global_map_invalid', $map)
+ );
+ continue;
+ }
+ }
+ try {
+ if (file_exists('/rspamd_custom_maps/' . $map)) {
+ $map_content = trim($_data['rspamd_map_data']);
+ $map_handle = fopen('/rspamd_custom_maps/' . $map, 'w');
+ if (!$map_handle) {
+ throw new Exception($lang['danger']['file_open_error']);
+ }
+ fwrite($map_handle, $map_content . PHP_EOL);
+ fclose($map_handle);
+ sleep(1.5);
+ touch('/rspamd_custom_maps/' . $map);
+ }
+ }
+ catch (Exception $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('global_map_write_error', htmlspecialchars($map), htmlspecialchars($e->getMessage()))
+ );
+ continue;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('object_modified', htmlspecialchars($map))
+ );
+ }
+ break;
+ }
+}
+function rspamd_actions() {
+ if (isset($_SESSION["mailcow_cc_role"]) && $_SESSION["mailcow_cc_role"] == "admin") {
+ $curl = curl_init();
+ curl_setopt($curl, CURLOPT_UNIX_SOCKET_PATH, '/var/lib/rspamd/rspamd.sock');
+ curl_setopt($curl, CURLOPT_URL,"http://rspamd/stat");
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
+ $data = curl_exec($curl);
+ if ($data) {
+ $return = array();
+ $stats_array = json_decode($data, true)['actions'];
+ $stats_array['soft reject'] = $stats_array['soft reject'] + $stats_array['greylist'];
+ unset($stats_array['greylist']);
+ foreach ($stats_array as $action => $count) {
+ $return[] = array($action, $count);
+ }
+ return $return;
+ }
+ else {
+ return false;
+ }
+ }
+ else {
+ return false;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/functions.tls_policy_maps.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/functions.tls_policy_maps.inc.php
new file mode 100644
index 0000000..9d42b2c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/functions.tls_policy_maps.inc.php
@@ -0,0 +1,172 @@
+<?php
+function tls_policy_maps($_action, $_data = null, $attr = null) {
+ global $pdo;
+ global $lang;
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ return false;
+ }
+ switch ($_action) {
+ case 'add':
+ $dest = idn_to_ascii(trim($_data['dest']), 0, INTL_IDNA_VARIANT_UTS46);
+ $policy = strtolower(trim($_data['policy']));
+ $parameters = (isset($_data['parameters']) && !empty($_data['parameters'])) ? $_data['parameters'] : '';
+ if (empty($dest) || in_array($dest, array('.', '*', '@'))) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => 'tls_policy_map_dest_invalid'
+ );
+ return false;
+ }
+ if (!empty($parameters)) {
+ foreach (explode(' ', $parameters) as $parameter) {
+ if (!preg_match('/(.+)\=(.+)/i', $parameter)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => 'tls_policy_map_parameter_invalid'
+ );
+ return false;
+ }
+ }
+ }
+ $active = intval($_data['active']);
+ $tls_policy_maps = tls_policy_maps('get');
+ foreach ($tls_policy_maps as $tls_policy_map) {
+ if (tls_policy_maps('details', $tls_policy_map)['dest'] == $dest) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => array('tls_policy_map_entry_exists', htmlspecialchars($dest))
+ );
+ return false;
+ }
+ }
+ $stmt = $pdo->prepare("INSERT INTO `tls_policy_override` (`dest`, `policy`, `parameters`, `active`) VALUES
+ (:dest, :policy, :parameters, :active)");
+ $stmt->execute(array(
+ ':dest' => $dest,
+ ':policy' => $policy,
+ ':parameters' => $parameters,
+ ':active' => $active
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => array('tls_policy_map_entry_saved', htmlspecialchars($dest))
+ );
+ break;
+ case 'edit':
+ $ids = (array)$_data['id'];
+ foreach ($ids as $id) {
+ $is_now = tls_policy_maps('details', $id);
+ if (!empty($is_now)) {
+ $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];
+ $dest = (!empty($_data['dest'])) ? $_data['dest'] : $is_now['dest'];
+ $policy = (!empty($_data['policy'])) ? $_data['policy'] : $is_now['policy'];
+ $parameters = (isset($_data['parameters'])) ? $_data['parameters'] : $is_now['parameters'];
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => 'access_denied'
+ );
+ continue;
+ }
+ if (empty($dest) || in_array($dest, array('.', '*', '@'))) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => 'tls_policy_map_dest_invalid'
+ );
+ return false;
+ }
+ if (!empty($parameters)) {
+ foreach (explode(' ', $parameters) as $parameter) {
+ if (!preg_match('/(.+)\=(.+)/i', $parameter)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => 'tls_policy_map_parameter_invalid'
+ );
+ return false;
+ }
+ }
+ }
+ $tls_policy_maps = tls_policy_maps('get');
+ foreach ($tls_policy_maps as $tls_policy_map) {
+ if ($tls_policy_map == $id) { continue; }
+ if (tls_policy_maps('details', $tls_policy_map)['dest'] == $dest) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => array('recipient_map_entry_exists', htmlspecialchars($dest))
+ );
+ return false;
+ }
+ }
+ $stmt = $pdo->prepare("UPDATE `tls_policy_override` SET
+ `dest` = :dest,
+ `policy` = :policy,
+ `parameters` = :parameters,
+ `active` = :active
+ WHERE `id`= :id");
+ $stmt->execute(array(
+ ':dest' => $dest,
+ ':policy' => $policy,
+ ':parameters' => $parameters,
+ ':active' => $active,
+ ':id' => $id
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => array('tls_policy_map_entry_saved', htmlspecialchars($dest))
+ );
+ }
+ break;
+ case 'details':
+ $mapdata = array();
+ $id = intval($_data);
+ $stmt = $pdo->prepare("SELECT `id`,
+ `dest`,
+ `policy`,
+ `parameters`,
+ `active` AS `active`,
+ `created`,
+ `modified` FROM `tls_policy_override`
+ WHERE `id` = :id");
+ $stmt->execute(array(':id' => $id));
+ $mapdata = $stmt->fetch(PDO::FETCH_ASSOC);
+ return $mapdata;
+ break;
+ case 'get':
+ $mapdata = array();
+ $all_items = array();
+ $id = intval($_data);
+ $stmt = $pdo->query("SELECT `id` FROM `tls_policy_override`");
+ $all_items = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ foreach ($all_items as $i) {
+ $mapdata[] = $i['id'];
+ }
+ $all_items = null;
+ return $mapdata;
+ break;
+ case 'delete':
+ $ids = (array)$_data['id'];
+ foreach ($ids as $id) {
+ if (!is_numeric($id)) {
+ return false;
+ }
+ $stmt = $pdo->prepare("DELETE FROM `tls_policy_override` WHERE `id`= :id");
+ $stmt->execute(array(':id' => $id));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+ 'msg' => array('tls_policy_map_entry_deleted', htmlspecialchars($id))
+ );
+ }
+ break;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/functions.transports.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/functions.transports.inc.php
new file mode 100644
index 0000000..7d8031a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/functions.transports.inc.php
@@ -0,0 +1,478 @@
+<?php
+function relayhost($_action, $_data = null) {
+ global $pdo;
+ global $lang;
+ $_data_log = $_data;
+ switch ($_action) {
+ case 'add':
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $hostname = trim($_data['hostname']);
+ $username = str_replace(':', '\:', trim($_data['username']));
+ $password = str_replace(':', '\:', trim($_data['password']));
+ if (empty($hostname)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('invalid_host', htmlspecialchars($host))
+ );
+ return false;
+ }
+ try {
+ $stmt = $pdo->prepare("INSERT INTO `relayhosts` (`hostname`, `username` ,`password`, `active`)
+ VALUES (:hostname, :username, :password, :active)");
+ $stmt->execute(array(
+ ':hostname' => $hostname,
+ ':username' => $username,
+ ':password' => str_replace(':', '\:', $password),
+ ':active' => '1'
+ ));
+ }
+ catch (PDOException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('mysql_error', $e)
+ );
+ return false;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('relayhost_added', htmlspecialchars(implode(', ', $hosts)))
+ );
+ break;
+ case 'edit':
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $ids = (array)$_data['id'];
+ foreach ($ids as $id) {
+ $is_now = relayhost('details', $id);
+ if (!empty($is_now)) {
+ $hostname = (!empty($_data['hostname'])) ? trim($_data['hostname']) : $is_now['hostname'];
+ $username = (isset($_data['username'])) ? trim($_data['username']) : $is_now['username'];
+ $password = (isset($_data['password'])) ? trim($_data['password']) : $is_now['password'];
+ $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('relayhost_invalid', $id)
+ );
+ continue;
+ }
+ try {
+ $stmt = $pdo->prepare("UPDATE `relayhosts` SET
+ `hostname` = :hostname,
+ `username` = :username,
+ `password` = :password,
+ `active` = :active
+ WHERE `id` = :id");
+ $stmt->execute(array(
+ ':id' => $id,
+ ':hostname' => $hostname,
+ ':username' => $username,
+ ':password' => $password,
+ ':active' => $active
+ ));
+ }
+ catch (PDOException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('mysql_error', $e)
+ );
+ continue;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('object_modified', htmlspecialchars(implode(', ', $hostnames)))
+ );
+ }
+ break;
+ case 'delete':
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $ids = (array)$_data['id'];
+ foreach ($ids as $id) {
+ try {
+ $stmt = $pdo->prepare("DELETE FROM `relayhosts` WHERE `id`= :id");
+ $stmt->execute(array(':id' => $id));
+ $stmt = $pdo->prepare("UPDATE `domain` SET `relayhost` = '0' WHERE `relayhost`= :id");
+ $stmt->execute(array(':id' => $id));
+ }
+ catch (PDOException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('mysql_error', $e)
+ );
+ continue;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('relayhost_removed', htmlspecialchars($id))
+ );
+ }
+ break;
+ case 'get':
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ return false;
+ }
+ $relayhosts = array();
+ $stmt = $pdo->query("SELECT `id`, `hostname`, `username` FROM `relayhosts`");
+ $relayhosts = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ return $relayhosts;
+ break;
+ case 'details':
+ if ($_SESSION['mailcow_cc_role'] != "admin" || !isset($_data)) {
+ return false;
+ }
+ $relayhostdata = array();
+ $stmt = $pdo->prepare("SELECT `id`,
+ `hostname`,
+ `username`,
+ `password`,
+ `active`,
+ CONCAT(LEFT(`password`, 3), '...') AS `password_short`
+ FROM `relayhosts`
+ WHERE `id` = :id");
+ $stmt->execute(array(':id' => $_data));
+ $relayhostdata = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (!empty($relayhostdata)) {
+ $stmt = $pdo->prepare("SELECT GROUP_CONCAT(`domain` SEPARATOR ', ') AS `used_by_domains` FROM `domain` WHERE `relayhost` = :id");
+ $stmt->execute(array(':id' => $_data));
+ $used_by_domains = $stmt->fetch(PDO::FETCH_ASSOC)['used_by_domains'];
+ $used_by_domains = (empty($used_by_domains)) ? '' : $used_by_domains;
+ $relayhostdata['used_by_domains'] = $used_by_domains;
+ }
+ return $relayhostdata;
+ break;
+ }
+}
+function transport($_action, $_data = null) {
+ global $pdo;
+ global $lang;
+ $_data_log = $_data;
+ switch ($_action) {
+ case 'add':
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $destinations = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['destination']));
+ $active = intval($_data['active']);
+ $lookup_mx = intval($_data['lookup_mx']);
+ $nexthop = trim($_data['nexthop']);
+ if (filter_var($nexthop, FILTER_VALIDATE_IP)) {
+ $nexthop = '[' . $nexthop . ']';
+ }
+ preg_match('/\[(.+)\].*/', $nexthop, $next_hop_matches);
+ $next_hop_clean = (isset($next_hop_matches[1])) ? $next_hop_matches[1] : $nexthop;
+ $username = str_replace(':', '\:', trim($_data['username']));
+ $password = str_replace(':', '\:', trim($_data['password']));
+ if (empty($nexthop)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('invalid_nexthop')
+ );
+ return false;
+ }
+ $transports = transport('get');
+ if (!empty($transports)) {
+ foreach ($transports as $transport) {
+ $transport_data = transport('details', $transport['id']);
+ $existing_nh[] = $transport_data['nexthop'];
+ preg_match('/\[(.+)\].*/', $transport_data['nexthop'], $existing_clean_nh[]);
+ if (($transport_data['nexthop'] == $nexthop || $transport_data['nexthop'] == $next_hop_clean) && $transport_data['username'] != $username) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'invalid_nexthop_authenticated'
+ );
+ return false;
+ }
+ foreach ($destinations as $d_ix => &$dest) {
+ if (empty($dest)) {
+ unset($destinations[$d_ix]);
+ continue;
+ }
+ if ($transport_data['destination'] == $dest) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('transport_dest_exists', $dest)
+ );
+ unset($destinations[$d_ix]);
+ continue;
+ }
+ // ".domain" is a valid destination, "..domain" is not
+ if (empty($dest) || (is_valid_domain_name(preg_replace('/^' . preg_quote('.', '/') . '/', '', $dest)) === false && $dest != '*' && filter_var($dest, FILTER_VALIDATE_EMAIL) === false)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('invalid_destination', $dest)
+ );
+ unset($destinations[$d_ix]);
+ continue;
+ }
+ }
+ }
+ }
+ $destinations = array_filter(array_values(array_unique($destinations)));
+ if (empty($destinations)) { return false; }
+ if (isset($next_hop_matches[1])) {
+ if (in_array($next_hop_clean, $existing_nh)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('next_hop_interferes', $next_hop_clean, $nexthop)
+ );
+ return false;
+ }
+ }
+ else {
+ foreach ($existing_clean_nh as $existing_clean_nh_each) {
+ if ($existing_clean_nh_each[1] == $nexthop) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('next_hop_interferes_any', $nexthop)
+ );
+ return false;
+ }
+ }
+ }
+ foreach ($destinations as $insert_dest) {
+ $stmt = $pdo->prepare("INSERT INTO `transports` (`nexthop`, `destination`, `username` , `password`, `lookup_mx`, `active`)
+ VALUES (:nexthop, :destination, :username, :password, :lookup_mx, :active)");
+ $stmt->execute(array(
+ ':nexthop' => $nexthop,
+ ':destination' => $insert_dest,
+ ':username' => $username,
+ ':password' => str_replace(':', '\:', $password),
+ ':lookup_mx' => $lookup_mx,
+ ':active' => $active
+ ));
+ }
+ $stmt = $pdo->prepare("UPDATE `transports` SET
+ `username` = :username,
+ `password` = :password
+ WHERE `nexthop` = :nexthop");
+ $stmt->execute(array(
+ ':nexthop' => $nexthop,
+ ':username' => $username,
+ ':password' => $password
+ ));
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('relayhost_added', htmlspecialchars(implode(', ', $hosts)))
+ );
+ break;
+ case 'edit':
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $ids = (array)$_data['id'];
+ foreach ($ids as $id) {
+ $is_now = transport('details', $id);
+ if (!empty($is_now)) {
+ $destination = (!empty($_data['destination'])) ? trim($_data['destination']) : $is_now['destination'];
+ $nexthop = (!empty($_data['nexthop'])) ? trim($_data['nexthop']) : $is_now['nexthop'];
+ $username = (isset($_data['username'])) ? trim($_data['username']) : $is_now['username'];
+ $password = (isset($_data['password'])) ? trim($_data['password']) : $is_now['password'];
+ $lookup_mx = (isset($_data['lookup_mx']) && $_data['lookup_mx'] != '') ? intval($_data['lookup_mx']) : $is_now['lookup_mx'];
+ $active = (isset($_data['active']) && $_data['active'] != '') ? intval($_data['active']) : $is_now['active'];
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('relayhost_invalid', $id)
+ );
+ continue;
+ }
+ preg_match('/\[(.+)\].*/', $nexthop, $next_hop_matches);
+ if (filter_var($nexthop, FILTER_VALIDATE_IP)) {
+ $nexthop = '[' . $nexthop . ']';
+ }
+ $next_hop_clean = (isset($next_hop_matches[1])) ? $next_hop_matches[1] : $nexthop;
+ $transports = transport('get');
+ if (!empty($transports)) {
+ foreach ($transports as $transport) {
+ $transport_data = transport('details', $transport['id']);
+ if ($transport['id'] == $id) {
+ continue;
+ }
+ $existing_nh[] = $transport_data['nexthop'];
+ preg_match('/\[(.+)\].*/', $transport_data['nexthop'], $existing_clean_nh[]);
+ if ($transport_data['destination'] == $destination) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'transport_dest_exists'
+ );
+ return false;
+ }
+ }
+ }
+ if (isset($next_hop_matches[1])) {
+ if (in_array($next_hop_clean, $existing_nh)) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('next_hop_interferes', $next_hop_clean, $nexthop)
+ );
+ return false;
+ }
+ }
+ else {
+ foreach ($existing_clean_nh as $existing_clean_nh_each) {
+ if ($existing_clean_nh_each[1] == $nexthop) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('next_hop_interferes_any', $nexthop)
+ );
+ return false;
+ }
+ }
+ }
+ if (empty($username)) {
+ $password = '';
+ }
+ try {
+ $stmt = $pdo->prepare("UPDATE `transports` SET
+ `destination` = :destination,
+ `nexthop` = :nexthop,
+ `username` = :username,
+ `password` = :password,
+ `lookup_mx` = :lookup_mx,
+ `active` = :active
+ WHERE `id` = :id");
+ $stmt->execute(array(
+ ':id' => $id,
+ ':destination' => $destination,
+ ':nexthop' => $nexthop,
+ ':username' => $username,
+ ':password' => $password,
+ ':lookup_mx' => $lookup_mx,
+ ':active' => $active
+ ));
+ $stmt = $pdo->prepare("UPDATE `transports` SET
+ `username` = :username,
+ `password` = :password
+ WHERE `nexthop` = :nexthop");
+ $stmt->execute(array(
+ ':nexthop' => $nexthop,
+ ':username' => $username,
+ ':password' => $password
+ ));
+ }
+ catch (PDOException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('mysql_error', $e)
+ );
+ continue;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('object_modified', htmlspecialchars(implode(', ', $hostnames)))
+ );
+ }
+ break;
+ case 'delete':
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => 'access_denied'
+ );
+ return false;
+ }
+ $ids = (array)$_data['id'];
+ foreach ($ids as $id) {
+ try {
+ $stmt = $pdo->prepare("DELETE FROM `transports` WHERE `id`= :id");
+ $stmt->execute(array(':id' => $id));
+ }
+ catch (PDOException $e) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('mysql_error', $e)
+ );
+ continue;
+ }
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__, $_action, $_data_log),
+ 'msg' => array('relayhost_removed', htmlspecialchars($id))
+ );
+ }
+ break;
+ case 'get':
+ if ($_SESSION['mailcow_cc_role'] != "admin") {
+ return false;
+ }
+ $transports = array();
+ $stmt = $pdo->query("SELECT `id`, `destination`, `nexthop`, `username` FROM `transports`");
+ $transports = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ return $transports;
+ break;
+ case 'details':
+ if ($_SESSION['mailcow_cc_role'] != "admin" || !isset($_data)) {
+ return false;
+ }
+ $transportdata = array();
+ $stmt = $pdo->prepare("SELECT `id`,
+ `destination`,
+ `nexthop`,
+ `username`,
+ `password`,
+ `active`,
+ `lookup_mx`,
+ CONCAT(LEFT(`password`, 3), '...') AS `password_short`
+ FROM `transports`
+ WHERE `id` = :id");
+ $stmt->execute(array(':id' => $_data));
+ $transportdata = $stmt->fetch(PDO::FETCH_ASSOC);
+ return $transportdata;
+ break;
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/header.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/header.inc.php
new file mode 100644
index 0000000..d2add25
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/header.inc.php
@@ -0,0 +1,148 @@
+<!DOCTYPE html>
+<html lang="<?= $_SESSION['mailcow_locale'] ?>">
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0">
+ <meta name="theme-color" content="#F5D76E"/>
+ <meta http-equiv="Referrer-Policy" content="same-origin">
+ <title><?=$UI_TEXTS['title_name'];?></title>
+ <?php
+ if (preg_match("/mailbox/i", $_SERVER['REQUEST_URI'])) {
+ $css_minifier->add('/web/css/site/mailbox.css');
+ }
+ if (preg_match("/admin/i", $_SERVER['REQUEST_URI'])) {
+ $css_minifier->add('/web/css/site/admin.css');
+ }
+ if (preg_match("/user/i", $_SERVER['REQUEST_URI'])) {
+ $css_minifier->add('/web/css/site/user.css');
+ }
+ if (preg_match("/edit/i", $_SERVER['REQUEST_URI'])) {
+ $css_minifier->add('/web/css/site/edit.css');
+ }
+ if (preg_match("/(quarantine|qhandler)/i", $_SERVER['REQUEST_URI'])) {
+ $css_minifier->add('/web/css/site/quarantine.css');
+ }
+ if (preg_match("/debug/i", $_SERVER['REQUEST_URI'])) {
+ $css_minifier->add('/web/css/site/debug.css');
+ }
+ if ($_SERVER['REQUEST_URI'] == '/') {
+ $css_minifier->add('/web/css/site/index.css');
+ }
+
+ $hash = $css_minifier->getDataHash();
+ $CSSPath = '/tmp/' . $hash . '.css';
+ if(!file_exists($CSSPath)) {
+ $css_minifier->minify($CSSPath);
+ cleanupCSS($hash);
+ }
+ ?>
+ <link rel="stylesheet" href="/cache/<?=basename($CSSPath)?>">
+ <?php if (strtolower(trim($DEFAULT_THEME)) != "lumen") { ?>
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.7/<?= strtolower(trim($DEFAULT_THEME)); ?>/bootstrap.min.css">
+ <?php } ?>
+ <link rel="shortcut icon" href="/favicon.png" type="image/png">
+ <link rel="icon" href="/favicon.png" type="image/png">
+</head>
+<body id="top">
+ <div class="overlay"></div>
+ <nav class="navbar navbar-default navbar-fixed-top" role="navigation">
+ <div class="container-fluid">
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ <a class="navbar-brand" href="/"><img alt="mailcow-logo" src="<?=($main_logo = customize('get', 'main_logo')) ? $main_logo : '/img/cow_mailcow.svg';?>"></a>
+ </div>
+ <div id="navbar" class="navbar-collapse collapse">
+ <ul class="nav navbar-nav navbar-right">
+ <?php
+ if (isset($_SESSION['mailcow_locale'])) {
+ ?>
+ <li class="dropdown<?=(isset($_SESSION['mailcow_locale']) && count($AVAILABLE_LANGUAGES) === 1) ? ' lang-link-disabled"' : '' ?>">
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><span class="lang-sm lang-lbl" lang="<?= $_SESSION['mailcow_locale']; ?>"></span><span class="caret"></span></a>
+ <ul class="dropdown-menu" role="menu">
+ <?php
+ foreach ($AVAILABLE_LANGUAGES as $language) {
+ ?>
+ <li<?= ($_SESSION['mailcow_locale'] == $language) ? ' class="active"' : ''; ?>><a href="?<?= http_build_query(array_merge($_GET, array('lang' => $language))); ?>"><span class="lang-xs lang-lbl-full" lang="<?= $language; ?>"></span></a></li>
+ <?php
+ }
+ ?>
+ </ul>
+ </li>
+ <?php
+ }
+ if (isset($_SESSION['mailcow_cc_role'])) {
+ ?>
+ <li class="dropdown">
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><?= $lang['header']['mailcow_settings']; ?> <span class="caret"></span></a>
+ <ul class="dropdown-menu" role="menu">
+ <?php
+ if (isset($_SESSION['mailcow_cc_role'])) {
+ if ($_SESSION['mailcow_cc_role'] == 'admin') {
+ ?>
+ <li<?= (preg_match("/admin/i", $_SERVER['REQUEST_URI'])) ? ' class="active"' : ''; ?>><a href="/admin"><?= $lang['header']['administration']; ?></a></li>
+ <li<?= (preg_match("/debug/i", $_SERVER['REQUEST_URI'])) ? ' class="active"' : ''; ?>><a href="/debug"><?= $lang['header']['debug']; ?></a></li>
+ <?php
+ }
+ if ($_SESSION['mailcow_cc_role'] == 'admin' || $_SESSION['mailcow_cc_role'] == 'domainadmin') {
+ ?>
+ <li<?= (preg_match("/mailbox/i", $_SERVER['REQUEST_URI'])) ? ' class="active"' : ''; ?>><a href="/mailbox"><?= $lang['header']['mailboxes']; ?></a></li>
+ <?php } if ($_SESSION['mailcow_cc_role'] != 'admin') { ?>
+ <li<?= (preg_match("/user/i", $_SERVER['REQUEST_URI'])) ? ' class="active"' : ''; ?>><a href="/user"><?= $lang['header']['user_settings']; ?></a></li>
+ <?php
+ }
+ }
+ ?>
+ </ul>
+ </li>
+ <?php if (isset($_SESSION['mailcow_cc_role'])) { ?>
+ <li<?= (preg_match("/quarantine/i", $_SERVER['REQUEST_URI'])) ? ' class="active"' : ''; ?>><a href="/quarantine"><span class="glyphicon glyphicon-briefcase"></span> <?= $lang['header']['quarantine']; ?></a></li>
+ <?php } if ($_SESSION['mailcow_cc_role'] == 'admin' && getenv('SKIP_SOGO') != "y") { ?>
+ <li><a href data-toggle="modal" data-container="sogo-mailcow" data-target="#RestartContainer"><span class="glyphicon glyphicon-refresh"></span> <?= $lang['header']['restart_sogo']; ?></a></li>
+ <?php } ?>
+ <li class="dropdown">
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><span class="glyphicon glyphicon-link"></span> <?= $lang['header']['apps']; ?> <span class="caret"></span></a>
+ <ul class="dropdown-menu" role="menu">
+ <?php foreach ($MAILCOW_APPS as $app) {
+ if (getenv('SKIP_SOGO') == "y" && preg_match('/^\/SOGo/i', $app['link'])) { continue; }
+ ?>
+ <li title="<?= htmlspecialchars($app['description']); ?>"><a href="<?= htmlspecialchars($app['link']); ?>"><?= htmlspecialchars($app['name']); ?></a></li>
+ <?php
+ }
+ $app_links = customize('get', 'app_links');
+ if ($app_links) {
+ foreach ($app_links as $row) {
+ foreach ($row as $key => $val) {
+ ?>
+ <li><a href="<?= htmlspecialchars($val); ?>"><?= htmlspecialchars($key); ?></a></li>
+ <?php
+ }
+ }
+ }
+ ?>
+ </ul>
+ </li>
+ <?php } if (!isset($_SESSION['dual-login']) && isset($_SESSION['mailcow_cc_username'])) { ?>
+ <li class="logged-in-as"><a href="#" onclick="logout.submit()"><b class="username-lia"><?= htmlspecialchars($_SESSION['mailcow_cc_username']); ?></b> <span class="glyphicon glyphicon-log-out"></span></a></li>
+ <?php } elseif (isset($_SESSION['dual-login'])) { ?>
+ <li class="logged-in-as"><a href="#" onclick="logout.submit()"><b class="username-lia"><?= htmlspecialchars($_SESSION['mailcow_cc_username']); ?> <span class="text-info">(<?= htmlspecialchars($_SESSION['dual-login']['username']); ?>)</span> </b><span class="glyphicon glyphicon-log-out"></span></a></li>
+ <?php } if (!preg_match('/y|yes/i', getenv('MASTER'))) { ?>
+ <li class="text-warning slave-info">[ slave ]</li>
+ <?php } ?>
+ </ul>
+ </div><!--/.nav-collapse -->
+ </div><!--/.container-fluid -->
+ </nav>
+ <form action="/" method="post" id="logout"><input type="hidden" name="logout"></form>
+ <?php if (!empty($UI_TEXTS['ui_announcement_text']) &&
+ in_array($UI_TEXTS['ui_announcement_type'], array('info', 'warning', 'danger')) &&
+ $UI_TEXTS['ui_announcement_active'] == 1 &&
+ parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) != '/') { ?>
+ <div class="container">
+ <div class="alert alert-<?=$UI_TEXTS['ui_announcement_type'];?>"><?=$UI_TEXTS['ui_announcement_text'];?></div>
+ </div>
+ <?php } ?>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/init_db.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/init_db.inc.php
new file mode 100644
index 0000000..8010bbd
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/init_db.inc.php
@@ -0,0 +1,1268 @@
+<?php
+function init_db_schema() {
+ try {
+ global $pdo;
+
+ $db_version = "28112020_1210";
+
+ $stmt = $pdo->query("SHOW TABLES LIKE 'versions'");
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $stmt = $pdo->query("SELECT `version` FROM `versions` WHERE `application` = 'db_schema'");
+ if ($stmt->fetch(PDO::FETCH_ASSOC)['version'] == $db_version) {
+ return true;
+ }
+ if (!preg_match('/y|yes/i', getenv('MASTER'))) {
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'log' => array(__FUNCTION__),
+ 'msg' => 'Database not initialized: not running db_init on slave.'
+ );
+ return true;
+ }
+ }
+
+ $views = array(
+ "grouped_mail_aliases" => "CREATE VIEW grouped_mail_aliases (username, aliases) AS
+ SELECT goto, IFNULL(GROUP_CONCAT(address ORDER BY address SEPARATOR ' '), '') AS address FROM alias
+ WHERE address!=goto
+ AND active = '1'
+ AND sogo_visible = '1'
+ AND address NOT LIKE '@%'
+ GROUP BY goto;",
+ // START
+ // Unused at the moment - we cannot allow to show a foreign mailbox as sender address in SOGo, as SOGo does not like this
+ // We need to create delegation in SOGo AND set a sender_acl in mailcow to allow to send as user X
+ "grouped_sender_acl" => "CREATE VIEW grouped_sender_acl (username, send_as_acl) AS
+ SELECT logged_in_as, IFNULL(GROUP_CONCAT(send_as SEPARATOR ' '), '') AS send_as_acl FROM sender_acl
+ WHERE send_as NOT LIKE '@%'
+ GROUP BY logged_in_as;",
+ // END
+ "grouped_sender_acl_external" => "CREATE VIEW grouped_sender_acl_external (username, send_as_acl) AS
+ SELECT logged_in_as, IFNULL(GROUP_CONCAT(send_as SEPARATOR ' '), '') AS send_as_acl FROM sender_acl
+ WHERE send_as NOT LIKE '@%' AND external = '1'
+ GROUP BY logged_in_as;",
+ "grouped_domain_alias_address" => "CREATE VIEW grouped_domain_alias_address (username, ad_alias) AS
+ SELECT username, IFNULL(GROUP_CONCAT(local_part, '@', alias_domain SEPARATOR ' '), '') AS ad_alias FROM mailbox
+ LEFT OUTER JOIN alias_domain ON target_domain=domain
+ GROUP BY username;",
+ "sieve_before" => "CREATE VIEW sieve_before (id, username, script_name, script_data) AS
+ SELECT md5(script_data), username, script_name, script_data FROM sieve_filters
+ WHERE filter_type = 'prefilter';",
+ "sieve_after" => "CREATE VIEW sieve_after (id, username, script_name, script_data) AS
+ SELECT md5(script_data), username, script_name, script_data FROM sieve_filters
+ WHERE filter_type = 'postfilter';"
+ );
+
+ $tables = array(
+ "versions" => array(
+ "cols" => array(
+ "application" => "VARCHAR(255) NOT NULL",
+ "version" => "VARCHAR(100) NOT NULL",
+ "created" => "DATETIME(0) NOT NULL DEFAULT NOW(0)",
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("application")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "admin" => array(
+ "cols" => array(
+ "username" => "VARCHAR(255) NOT NULL",
+ "password" => "VARCHAR(255) NOT NULL",
+ "superadmin" => "TINYINT(1) NOT NULL DEFAULT '0'",
+ "created" => "DATETIME(0) NOT NULL DEFAULT NOW(0)",
+ "modified" => "DATETIME ON UPDATE NOW(0)",
+ "active" => "TINYINT(1) NOT NULL DEFAULT '1'"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("username")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "fido2" => array(
+ "cols" => array(
+ "username" => "VARCHAR(255) NOT NULL",
+ "friendlyName" => "VARCHAR(255)",
+ "rpId" => "VARCHAR(255) NOT NULL",
+ "credentialPublicKey" => "TEXT NOT NULL",
+ "certificateChain" => "TEXT",
+ // Can be null for format "none"
+ "certificate" => "TEXT",
+ "certificateIssuer" => "VARCHAR(255)",
+ "certificateSubject" => "VARCHAR(255)",
+ "signatureCounter" => "INT",
+ "AAGUID" => "BLOB",
+ "credentialId" => "BLOB NOT NULL",
+ "created" => "DATETIME(0) NOT NULL DEFAULT NOW(0)",
+ "modified" => "DATETIME ON UPDATE NOW(0)",
+ "active" => "TINYINT(1) NOT NULL DEFAULT '1'"
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "_sogo_static_view" => array(
+ "cols" => array(
+ "c_uid" => "VARCHAR(255) NOT NULL",
+ "domain" => "VARCHAR(255) NOT NULL",
+ "c_name" => "VARCHAR(255) NOT NULL",
+ "c_password" => "VARCHAR(255) NOT NULL DEFAULT ''",
+ "c_cn" => "VARCHAR(255)",
+ "mail" => "VARCHAR(255) NOT NULL",
+ // TODO -> use TEXT and check if SOGo login breaks on empty aliases
+ "aliases" => "TEXT NOT NULL",
+ "ad_aliases" => "VARCHAR(6144) NOT NULL DEFAULT ''",
+ "ext_acl" => "VARCHAR(6144) NOT NULL DEFAULT ''",
+ "kind" => "VARCHAR(100) NOT NULL DEFAULT ''",
+ "multiple_bookings" => "INT NOT NULL DEFAULT -1"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("c_uid")
+ ),
+ "key" => array(
+ "domain" => array("domain")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "relayhosts" => array(
+ "cols" => array(
+ "id" => "INT NOT NULL AUTO_INCREMENT",
+ "hostname" => "VARCHAR(255) NOT NULL",
+ "username" => "VARCHAR(255) NOT NULL",
+ "password" => "VARCHAR(255) NOT NULL",
+ "active" => "TINYINT(1) NOT NULL DEFAULT '1'"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("id")
+ ),
+ "key" => array(
+ "hostname" => array("hostname")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "transports" => array(
+ "cols" => array(
+ "id" => "INT NOT NULL AUTO_INCREMENT",
+ "destination" => "VARCHAR(255) NOT NULL",
+ "nexthop" => "VARCHAR(255) NOT NULL",
+ "username" => "VARCHAR(255) NOT NULL",
+ "password" => "VARCHAR(255) NOT NULL",
+ "lookup_mx" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "active" => "TINYINT(1) NOT NULL DEFAULT '1'"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("id")
+ ),
+ "key" => array(
+ "destination" => array("destination"),
+ "nexthop" => array("nexthop"),
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "alias" => array(
+ "cols" => array(
+ "id" => "INT NOT NULL AUTO_INCREMENT",
+ "address" => "VARCHAR(255) NOT NULL",
+ "goto" => "TEXT NOT NULL",
+ "domain" => "VARCHAR(255) NOT NULL",
+ "created" => "DATETIME(0) NOT NULL DEFAULT NOW(0)",
+ "modified" => "DATETIME ON UPDATE CURRENT_TIMESTAMP",
+ "private_comment" => "TEXT",
+ "public_comment" => "TEXT",
+ "sogo_visible" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "active" => "TINYINT(1) NOT NULL DEFAULT '1'"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("id")
+ ),
+ "unique" => array(
+ "address" => array("address")
+ ),
+ "key" => array(
+ "domain" => array("domain")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "api" => array(
+ "cols" => array(
+ "api_key" => "VARCHAR(255) NOT NULL",
+ "allow_from" => "VARCHAR(512) NOT NULL",
+ "skip_ip_check" => "TINYINT(1) NOT NULL DEFAULT '0'",
+ "created" => "DATETIME(0) NOT NULL DEFAULT NOW(0)",
+ "modified" => "DATETIME ON UPDATE NOW(0)",
+ "access" => "ENUM('ro', 'rw') NOT NULL DEFAULT 'rw'",
+ "active" => "TINYINT(1) NOT NULL DEFAULT '1'"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("api_key")
+ ),
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "sender_acl" => array(
+ "cols" => array(
+ "id" => "INT NOT NULL AUTO_INCREMENT",
+ "logged_in_as" => "VARCHAR(255) NOT NULL",
+ "send_as" => "VARCHAR(255) NOT NULL",
+ "external" => "TINYINT(1) NOT NULL DEFAULT '0'"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("id")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "domain" => array(
+ // Todo: Move some attributes to json
+ "cols" => array(
+ "domain" => "VARCHAR(255) NOT NULL",
+ "description" => "VARCHAR(255)",
+ "aliases" => "INT(10) NOT NULL DEFAULT '0'",
+ "mailboxes" => "INT(10) NOT NULL DEFAULT '0'",
+ "defquota" => "BIGINT(20) NOT NULL DEFAULT '3072'",
+ "maxquota" => "BIGINT(20) NOT NULL DEFAULT '102400'",
+ "quota" => "BIGINT(20) NOT NULL DEFAULT '102400'",
+ "relayhost" => "VARCHAR(255) NOT NULL DEFAULT '0'",
+ "backupmx" => "TINYINT(1) NOT NULL DEFAULT '0'",
+ "gal" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "relay_all_recipients" => "TINYINT(1) NOT NULL DEFAULT '0'",
+ "relay_unknown_only" => "TINYINT(1) NOT NULL DEFAULT '0'",
+ "created" => "DATETIME(0) NOT NULL DEFAULT NOW(0)",
+ "modified" => "DATETIME ON UPDATE CURRENT_TIMESTAMP",
+ "active" => "TINYINT(1) NOT NULL DEFAULT '1'"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("domain")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "tls_policy_override" => array(
+ "cols" => array(
+ "id" => "INT NOT NULL AUTO_INCREMENT",
+ "dest" => "VARCHAR(255) NOT NULL",
+ "policy" => "ENUM('none', 'may', 'encrypt', 'dane', 'dane-only', 'fingerprint', 'verify', 'secure') NOT NULL",
+ "parameters" => "VARCHAR(255) DEFAULT ''",
+ "created" => "DATETIME(0) NOT NULL DEFAULT NOW(0)",
+ "modified" => "DATETIME ON UPDATE CURRENT_TIMESTAMP",
+ "active" => "TINYINT(1) NOT NULL DEFAULT '1'"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("id")
+ ),
+ "unique" => array(
+ "dest" => array("dest")
+ ),
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "quarantine" => array(
+ "cols" => array(
+ "id" => "INT NOT NULL AUTO_INCREMENT",
+ "qid" => "VARCHAR(30) NOT NULL",
+ "subject" => "VARCHAR(500)",
+ "score" => "FLOAT(8,2)",
+ "ip" => "VARCHAR(50)",
+ "action" => "CHAR(20) NOT NULL DEFAULT 'unknown'",
+ "symbols" => "JSON",
+ "fuzzy_hashes" => "JSON",
+ "sender" => "VARCHAR(255) NOT NULL DEFAULT 'unknown'",
+ "rcpt" => "VARCHAR(255)",
+ "msg" => "LONGTEXT",
+ "domain" => "VARCHAR(255)",
+ "notified" => "TINYINT(1) NOT NULL DEFAULT '0'",
+ "created" => "DATETIME(0) NOT NULL DEFAULT NOW(0)",
+ "user" => "VARCHAR(255) NOT NULL DEFAULT 'unknown'",
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("id")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "mailbox" => array(
+ "cols" => array(
+ "username" => "VARCHAR(255) NOT NULL",
+ "password" => "VARCHAR(255) NOT NULL",
+ "name" => "VARCHAR(255)",
+ "description" => "VARCHAR(255)",
+ // mailbox_path_prefix is followed by domain/local_part/
+ "mailbox_path_prefix" => "VARCHAR(150) DEFAULT '/var/vmail/'",
+ "quota" => "BIGINT(20) NOT NULL DEFAULT '102400'",
+ "local_part" => "VARCHAR(255) NOT NULL",
+ "domain" => "VARCHAR(255) NOT NULL",
+ "attributes" => "JSON",
+ "kind" => "VARCHAR(100) NOT NULL DEFAULT ''",
+ "multiple_bookings" => "INT NOT NULL DEFAULT -1",
+ "created" => "DATETIME(0) NOT NULL DEFAULT NOW(0)",
+ "modified" => "DATETIME ON UPDATE CURRENT_TIMESTAMP",
+ "active" => "TINYINT(1) NOT NULL DEFAULT '1'"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("username")
+ ),
+ "key" => array(
+ "domain" => array("domain")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "sieve_filters" => array(
+ "cols" => array(
+ "id" => "INT NOT NULL AUTO_INCREMENT",
+ "username" => "VARCHAR(255) NOT NULL",
+ "script_desc" => "VARCHAR(255) NOT NULL",
+ "script_name" => "ENUM('active','inactive')",
+ "script_data" => "TEXT NOT NULL",
+ "filter_type" => "ENUM('postfilter','prefilter')",
+ "created" => "DATETIME(0) NOT NULL DEFAULT NOW(0)",
+ "modified" => "DATETIME ON UPDATE CURRENT_TIMESTAMP"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("id")
+ ),
+ "key" => array(
+ "username" => array("username"),
+ "script_desc" => array("script_desc")
+ ),
+ "fkey" => array(
+ "fk_username_sieve_global_before" => array(
+ "col" => "username",
+ "ref" => "mailbox.username",
+ "delete" => "CASCADE",
+ "update" => "NO ACTION"
+ )
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "app_passwd" => array(
+ "cols" => array(
+ "id" => "INT NOT NULL AUTO_INCREMENT",
+ "name" => "VARCHAR(255) NOT NULL",
+ "mailbox" => "VARCHAR(255) NOT NULL",
+ "domain" => "VARCHAR(255) NOT NULL",
+ "password" => "VARCHAR(255) NOT NULL",
+ "created" => "DATETIME(0) NOT NULL DEFAULT NOW(0)",
+ "modified" => "DATETIME ON UPDATE CURRENT_TIMESTAMP",
+ "active" => "TINYINT(1) NOT NULL DEFAULT '1'"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("id")
+ ),
+ "key" => array(
+ "mailbox" => array("mailbox"),
+ "password" => array("password"),
+ "domain" => array("domain"),
+ ),
+ "fkey" => array(
+ "fk_username_app_passwd" => array(
+ "col" => "mailbox",
+ "ref" => "mailbox.username",
+ "delete" => "CASCADE",
+ "update" => "NO ACTION"
+ )
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "user_acl" => array(
+ "cols" => array(
+ "username" => "VARCHAR(255) NOT NULL",
+ "spam_alias" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "tls_policy" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "spam_score" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "spam_policy" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "delimiter_action" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "syncjobs" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "eas_reset" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "sogo_profile_reset" => "TINYINT(1) NOT NULL DEFAULT '0'",
+ "pushover" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ // quarantine is for quarantine actions, todo: rename
+ "quarantine" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "quarantine_attachments" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "quarantine_notification" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "quarantine_category" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "app_passwds" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("username")
+ ),
+ "fkey" => array(
+ "fk_username" => array(
+ "col" => "username",
+ "ref" => "mailbox.username",
+ "delete" => "CASCADE",
+ "update" => "NO ACTION"
+ )
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "alias_domain" => array(
+ "cols" => array(
+ "alias_domain" => "VARCHAR(255) NOT NULL",
+ "target_domain" => "VARCHAR(255) NOT NULL",
+ "created" => "DATETIME(0) NOT NULL DEFAULT NOW(0)",
+ "modified" => "DATETIME ON UPDATE CURRENT_TIMESTAMP",
+ "active" => "TINYINT(1) NOT NULL DEFAULT '1'"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("alias_domain")
+ ),
+ "key" => array(
+ "active" => array("active"),
+ "target_domain" => array("target_domain")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "spamalias" => array(
+ "cols" => array(
+ "address" => "VARCHAR(255) NOT NULL",
+ "goto" => "TEXT NOT NULL",
+ "validity" => "INT(11) NOT NULL"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("address")
+ ),
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "filterconf" => array(
+ "cols" => array(
+ "object" => "VARCHAR(255) NOT NULL DEFAULT ''",
+ "option" => "VARCHAR(50) NOT NULL DEFAULT ''",
+ "value" => "VARCHAR(100) NOT NULL DEFAULT ''",
+ "created" => "DATETIME(0) NOT NULL DEFAULT NOW(0)",
+ "modified" => "DATETIME ON UPDATE CURRENT_TIMESTAMP",
+ "prefid" => "INT(11) NOT NULL AUTO_INCREMENT"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("prefid")
+ ),
+ "key" => array(
+ "object" => array("object")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "settingsmap" => array(
+ "cols" => array(
+ "id" => "INT NOT NULL AUTO_INCREMENT",
+ "desc" => "VARCHAR(255) NOT NULL",
+ "content" => "LONGTEXT NOT NULL",
+ "created" => "DATETIME(0) NOT NULL DEFAULT NOW(0)",
+ "modified" => "DATETIME ON UPDATE CURRENT_TIMESTAMP",
+ "active" => "TINYINT(1) NOT NULL DEFAULT '0'"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("id")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "logs" => array(
+ "cols" => array(
+ "id" => "INT NOT NULL AUTO_INCREMENT",
+ "task" => "CHAR(32) NOT NULL DEFAULT '000000'",
+ "type" => "VARCHAR(32) DEFAULT ''",
+ "msg" => "TEXT",
+ "call" => "TEXT",
+ "user" => "VARCHAR(64) NOT NULL",
+ "role" => "VARCHAR(32) NOT NULL",
+ "remote" => "VARCHAR(39) NOT NULL",
+ "time" => "INT(11) NOT NULL"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("id")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "quota2" => array(
+ "cols" => array(
+ "username" => "VARCHAR(255) NOT NULL",
+ "bytes" => "BIGINT(20) NOT NULL DEFAULT '0'",
+ "messages" => "BIGINT(20) NOT NULL DEFAULT '0'"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("username")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "quota2replica" => array(
+ "cols" => array(
+ "username" => "VARCHAR(255) NOT NULL",
+ "bytes" => "BIGINT(20) NOT NULL DEFAULT '0'",
+ "messages" => "BIGINT(20) NOT NULL DEFAULT '0'"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("username")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "domain_admins" => array(
+ "cols" => array(
+ "id" => "INT NOT NULL AUTO_INCREMENT",
+ "username" => "VARCHAR(255) NOT NULL",
+ "domain" => "VARCHAR(255) NOT NULL",
+ "created" => "DATETIME(0) NOT NULL DEFAULT NOW(0)",
+ "active" => "TINYINT(1) NOT NULL DEFAULT '1'"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("id")
+ ),
+ "key" => array(
+ "username" => array("username")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "da_acl" => array(
+ "cols" => array(
+ "username" => "VARCHAR(255) NOT NULL",
+ "syncjobs" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "quarantine" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "login_as" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "sogo_access" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "app_passwds" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "bcc_maps" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "pushover" => "TINYINT(1) NOT NULL DEFAULT '0'",
+ "filters" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "ratelimit" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "spam_policy" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "extend_sender_acl" => "TINYINT(1) NOT NULL DEFAULT '0'",
+ "unlimited_quota" => "TINYINT(1) NOT NULL DEFAULT '0'",
+ "protocol_access" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "smtp_ip_access" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "alias_domains" => "TINYINT(1) NOT NULL DEFAULT '0'",
+ "domain_desc" => "TINYINT(1) NOT NULL DEFAULT '0'"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("username")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "imapsync" => array(
+ "cols" => array(
+ "id" => "INT NOT NULL AUTO_INCREMENT",
+ "user2" => "VARCHAR(255) NOT NULL",
+ "host1" => "VARCHAR(255) NOT NULL",
+ "authmech1" => "ENUM('PLAIN','LOGIN','CRAM-MD5') DEFAULT 'PLAIN'",
+ "regextrans2" => "VARCHAR(255) DEFAULT ''",
+ "authmd51" => "TINYINT(1) NOT NULL DEFAULT 0",
+ "domain2" => "VARCHAR(255) NOT NULL DEFAULT ''",
+ "subfolder2" => "VARCHAR(255) NOT NULL DEFAULT ''",
+ "user1" => "VARCHAR(255) NOT NULL",
+ "password1" => "VARCHAR(255) NOT NULL",
+ "exclude" => "VARCHAR(500) NOT NULL DEFAULT ''",
+ "maxage" => "SMALLINT NOT NULL DEFAULT '0'",
+ "mins_interval" => "SMALLINT UNSIGNED NOT NULL DEFAULT '0'",
+ "maxbytespersecond" => "VARCHAR(50) NOT NULL DEFAULT '0'",
+ "port1" => "SMALLINT UNSIGNED NOT NULL",
+ "enc1" => "ENUM('TLS','SSL','PLAIN') DEFAULT 'TLS'",
+ "delete2duplicates" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "delete1" => "TINYINT(1) NOT NULL DEFAULT '0'",
+ "delete2" => "TINYINT(1) NOT NULL DEFAULT '0'",
+ "automap" => "TINYINT(1) NOT NULL DEFAULT '0'",
+ "skipcrossduplicates" => "TINYINT(1) NOT NULL DEFAULT '0'",
+ "custom_params" => "VARCHAR(512) NOT NULL DEFAULT ''",
+ "timeout1" => "SMALLINT NOT NULL DEFAULT '600'",
+ "timeout2" => "SMALLINT NOT NULL DEFAULT '600'",
+ "subscribeall" => "TINYINT(1) NOT NULL DEFAULT '1'",
+ "is_running" => "TINYINT(1) NOT NULL DEFAULT '0'",
+ "returned_text" => "LONGTEXT",
+ "last_run" => "TIMESTAMP NULL DEFAULT NULL",
+ "created" => "DATETIME(0) NOT NULL DEFAULT NOW(0)",
+ "modified" => "DATETIME ON UPDATE CURRENT_TIMESTAMP",
+ "active" => "TINYINT(1) NOT NULL DEFAULT '0'"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("id")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "bcc_maps" => array(
+ "cols" => array(
+ "id" => "INT NOT NULL AUTO_INCREMENT",
+ "local_dest" => "VARCHAR(255) NOT NULL",
+ "bcc_dest" => "VARCHAR(255) NOT NULL",
+ "domain" => "VARCHAR(255) NOT NULL",
+ "type" => "ENUM('sender','rcpt')",
+ "created" => "DATETIME(0) NOT NULL DEFAULT NOW(0)",
+ "modified" => "DATETIME ON UPDATE CURRENT_TIMESTAMP",
+ "active" => "TINYINT(1) NOT NULL DEFAULT '0'"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("id")
+ ),
+ "key" => array(
+ "local_dest" => array("local_dest"),
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "recipient_maps" => array(
+ "cols" => array(
+ "id" => "INT NOT NULL AUTO_INCREMENT",
+ "old_dest" => "VARCHAR(255) NOT NULL",
+ "new_dest" => "VARCHAR(255) NOT NULL",
+ "created" => "DATETIME(0) NOT NULL DEFAULT NOW(0)",
+ "modified" => "DATETIME ON UPDATE CURRENT_TIMESTAMP",
+ "active" => "TINYINT(1) NOT NULL DEFAULT '0'"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("id")
+ ),
+ "key" => array(
+ "local_dest" => array("old_dest"),
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "tfa" => array(
+ "cols" => array(
+ "id" => "INT NOT NULL AUTO_INCREMENT",
+ "key_id" => "VARCHAR(255) NOT NULL",
+ "username" => "VARCHAR(255) NOT NULL",
+ "authmech" => "ENUM('yubi_otp', 'u2f', 'hotp', 'totp')",
+ "secret" => "VARCHAR(255) DEFAULT NULL",
+ "keyHandle" => "VARCHAR(255) DEFAULT NULL",
+ "publicKey" => "VARCHAR(255) DEFAULT NULL",
+ "counter" => "INT NOT NULL DEFAULT '0'",
+ "certificate" => "TEXT",
+ "active" => "TINYINT(1) NOT NULL DEFAULT '0'"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("id")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "forwarding_hosts" => array(
+ "cols" => array(
+ "host" => "VARCHAR(255) NOT NULL",
+ "source" => "VARCHAR(255) NOT NULL",
+ "filter_spam" => "TINYINT(1) NOT NULL DEFAULT '0'"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("host")
+ ),
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "sogo_acl" => array(
+ "cols" => array(
+ "id" => "INT NOT NULL AUTO_INCREMENT",
+ "c_folder_id" => "INT NOT NULL",
+ "c_object" => "VARCHAR(255) NOT NULL",
+ "c_uid" => "VARCHAR(255) NOT NULL",
+ "c_role" => "VARCHAR(80) NOT NULL"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("id")
+ ),
+ "key" => array(
+ "sogo_acl_c_folder_id_idx" => array("c_folder_id"),
+ "sogo_acl_c_uid_idx" => array("c_uid")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "sogo_alarms_folder" => array(
+ "cols" => array(
+ "id" => "INT NOT NULL AUTO_INCREMENT",
+ "c_path" => "VARCHAR(255) NOT NULL",
+ "c_name" => "VARCHAR(255) NOT NULL",
+ "c_uid" => "VARCHAR(255) NOT NULL",
+ "c_recurrence_id" => "INT(11) DEFAULT NULL",
+ "c_alarm_number" => "INT(11) NOT NULL",
+ "c_alarm_date" => "INT(11) NOT NULL"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("id")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "sogo_cache_folder" => array(
+ "cols" => array(
+ "c_uid" => "VARCHAR(255) NOT NULL",
+ "c_path" => "VARCHAR(255) NOT NULL",
+ "c_parent_path" => "VARCHAR(255) DEFAULT NULL",
+ "c_type" => "TINYINT(3) unsigned NOT NULL",
+ "c_creationdate" => "INT(11) NOT NULL",
+ "c_lastmodified" => "INT(11) NOT NULL",
+ "c_version" => "INT(11) NOT NULL DEFAULT '0'",
+ "c_deleted" => "TINYINT(4) NOT NULL DEFAULT '0'",
+ "c_content" => "LONGTEXT"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("c_uid", "c_path")
+ ),
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "sogo_folder_info" => array(
+ "cols" => array(
+ "c_folder_id" => "BIGINT(20) unsigned NOT NULL AUTO_INCREMENT",
+ "c_path" => "VARCHAR(255) NOT NULL",
+ "c_path1" => "VARCHAR(255) NOT NULL",
+ "c_path2" => "VARCHAR(255) DEFAULT NULL",
+ "c_path3" => "VARCHAR(255) DEFAULT NULL",
+ "c_path4" => "VARCHAR(255) DEFAULT NULL",
+ "c_foldername" => "VARCHAR(255) NOT NULL",
+ "c_location" => "VARCHAR(2048) DEFAULT NULL",
+ "c_quick_location" => "VARCHAR(2048) DEFAULT NULL",
+ "c_acl_location" => "VARCHAR(2048) DEFAULT NULL",
+ "c_folder_type" => "VARCHAR(255) NOT NULL"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("c_path")
+ ),
+ "unique" => array(
+ "c_folder_id" => array("c_folder_id")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "sogo_quick_appointment" => array(
+ "cols" => array(
+ "c_folder_id" => "INT NOT NULL",
+ "c_name" => "VARCHAR(255) NOT NULL",
+ "c_uid" => "VARCHAR(1000) NOT NULL",
+ "c_startdate" => "INT",
+ "c_enddate" => "INT",
+ "c_cycleenddate" => "INT",
+ "c_title" => "VARCHAR(1000) NOT NULL",
+ "c_participants" => "TEXT",
+ "c_isallday" => "INT",
+ "c_iscycle" => "INT",
+ "c_cycleinfo" => "TEXT",
+ "c_classification" => "INT NOT NULL",
+ "c_isopaque" => "INT NOT NULL",
+ "c_status" => "INT NOT NULL",
+ "c_priority" => "INT",
+ "c_location" => "VARCHAR(255)",
+ "c_orgmail" => "VARCHAR(255)",
+ "c_partmails" => "TEXT",
+ "c_partstates" => "TEXT",
+ "c_category" => "VARCHAR(255)",
+ "c_sequence" => "INT",
+ "c_component" => "VARCHAR(10) NOT NULL",
+ "c_nextalarm" => "INT",
+ "c_description" => "TEXT"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("c_folder_id", "c_name")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "sogo_quick_contact" => array(
+ "cols" => array(
+ "c_folder_id" => "INT NOT NULL",
+ "c_name" => "VARCHAR(255) NOT NULL",
+ "c_givenname" => "VARCHAR(255)",
+ "c_cn" => "VARCHAR(255)",
+ "c_sn" => "VARCHAR(255)",
+ "c_screenname" => "VARCHAR(255)",
+ "c_l" => "VARCHAR(255)",
+ "c_mail" => "TEXT",
+ "c_o" => "VARCHAR(500)",
+ "c_ou" => "VARCHAR(255)",
+ "c_telephonenumber" => "VARCHAR(255)",
+ "c_categories" => "VARCHAR(255)",
+ "c_component" => "VARCHAR(10) NOT NULL",
+ "c_hascertificate" => "INT4 DEFAULT 0"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("c_folder_id", "c_name")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "sogo_sessions_folder" => array(
+ "cols" => array(
+ "c_id" => "VARCHAR(255) NOT NULL",
+ "c_value" => "VARCHAR(255) NOT NULL",
+ "c_creationdate" => "INT(11) NOT NULL",
+ "c_lastseen" => "INT(11) NOT NULL"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("c_id")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "sogo_store" => array(
+ "cols" => array(
+ "c_folder_id" => "INT NOT NULL",
+ "c_name" => "VARCHAR(255) NOT NULL",
+ "c_content" => "MEDIUMTEXT NOT NULL",
+ "c_creationdate" => "INT NOT NULL",
+ "c_lastmodified" => "INT NOT NULL",
+ "c_version" => "INT NOT NULL",
+ "c_deleted" => "INT"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("c_folder_id", "c_name")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "pushover" => array(
+ "cols" => array(
+ "username" => "VARCHAR(255) NOT NULL",
+ "key" => "VARCHAR(255) NOT NULL",
+ "token" => "VARCHAR(255) NOT NULL",
+ "attributes" => "JSON",
+ "title" => "TEXT",
+ "text" => "TEXT",
+ "senders" => "TEXT",
+ "senders_regex" => "TEXT",
+ "active" => "TINYINT(1) NOT NULL DEFAULT '1'"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("username")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "sogo_user_profile" => array(
+ "cols" => array(
+ "c_uid" => "VARCHAR(255) NOT NULL",
+ "c_defaults" => "LONGTEXT",
+ "c_settings" => "LONGTEXT"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("c_uid")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "oauth_clients" => array(
+ "cols" => array(
+ "id" => "INT NOT NULL AUTO_INCREMENT",
+ "client_id" => "VARCHAR(80) NOT NULL",
+ "client_secret" => "VARCHAR(80)",
+ "redirect_uri" => "VARCHAR(2000)",
+ "grant_types" => "VARCHAR(80)",
+ "scope" => "VARCHAR(4000)",
+ "user_id" => "VARCHAR(80)"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("client_id")
+ ),
+ "unique" => array(
+ "id" => array("id")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "oauth_access_tokens" => array(
+ "cols" => array(
+ "access_token" => "VARCHAR(40) NOT NULL",
+ "client_id" => "VARCHAR(80) NOT NULL",
+ "user_id" => "VARCHAR(80)",
+ "expires" => "TIMESTAMP NOT NULL",
+ "scope" => "VARCHAR(4000)"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("access_token")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "oauth_authorization_codes" => array(
+ "cols" => array(
+ "authorization_code" => "VARCHAR(40) NOT NULL",
+ "client_id" => "VARCHAR(80) NOT NULL",
+ "user_id" => "VARCHAR(80)",
+ "redirect_uri" => "VARCHAR(2000)",
+ "expires" => "TIMESTAMP NOT NULL",
+ "scope" => "VARCHAR(4000)",
+ "id_token" => "VARCHAR(1000)"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("authorization_code")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ ),
+ "oauth_refresh_tokens" => array(
+ "cols" => array(
+ "refresh_token" => "VARCHAR(40) NOT NULL",
+ "client_id" => "VARCHAR(80) NOT NULL",
+ "user_id" => "VARCHAR(80)",
+ "expires" => "TIMESTAMP NOT NULL",
+ "scope" => "VARCHAR(4000)"
+ ),
+ "keys" => array(
+ "primary" => array(
+ "" => array("refresh_token")
+ )
+ ),
+ "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
+ )
+ );
+
+ foreach ($tables as $table => $properties) {
+ // Migrate to quarantine
+ if ($table == 'quarantine') {
+ $stmt = $pdo->query("SHOW TABLES LIKE 'quarantaine'");
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $stmt = $pdo->query("SHOW TABLES LIKE 'quarantine'");
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results == 0) {
+ $pdo->query("RENAME TABLE `quarantaine` TO `quarantine`");
+ }
+ }
+ }
+ // Migrate tls_enforce_* options
+ if ($table == 'mailbox') {
+ $stmt = $pdo->query("SHOW TABLES LIKE 'mailbox'");
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $stmt = $pdo->query("SHOW COLUMNS FROM `mailbox` LIKE '%tls_enforce%'");
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $stmt = $pdo->query("SELECT `username`, `tls_enforce_in`, `tls_enforce_out` FROM `mailbox`");
+ $tls_options_rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while ($row = array_shift($tls_options_rows)) {
+ $tls_options[$row['username']] = array('tls_enforce_in' => $row['tls_enforce_in'], 'tls_enforce_out' => $row['tls_enforce_out']);
+ }
+ }
+ }
+ }
+ $stmt = $pdo->query("SHOW TABLES LIKE '" . $table . "'");
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $stmt = $pdo->prepare("SELECT CONCAT('ALTER TABLE ', `table_schema`, '.', `table_name`, ' DROP FOREIGN KEY ', `constraint_name`, ';') AS `FKEY_DROP` FROM `information_schema`.`table_constraints`
+ WHERE `constraint_type` = 'FOREIGN KEY' AND `table_name` = :table;");
+ $stmt->execute(array(':table' => $table));
+ $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while ($row = array_shift($rows)) {
+ $pdo->query($row['FKEY_DROP']);
+ }
+ foreach($properties['cols'] as $column => $type) {
+ $stmt = $pdo->query("SHOW COLUMNS FROM `" . $table . "` LIKE '" . $column . "'");
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results == 0) {
+ if (strpos($type, 'AUTO_INCREMENT') !== false) {
+ $type = $type . ' PRIMARY KEY ';
+ // Adding an AUTO_INCREMENT key, need to drop primary keys first, if exists
+ $stmt = $pdo->query("SHOW KEYS FROM `" . $table . "` WHERE Key_name = 'PRIMARY'");
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $pdo->query("ALTER TABLE `" . $table . "` DROP PRIMARY KEY");
+ }
+ }
+ $pdo->query("ALTER TABLE `" . $table . "` ADD `" . $column . "` " . $type);
+ }
+ else {
+ $pdo->query("ALTER TABLE `" . $table . "` MODIFY COLUMN `" . $column . "` " . $type);
+ }
+ }
+ foreach($properties['keys'] as $key_type => $key_content) {
+ if (strtolower($key_type) == 'primary') {
+ foreach ($key_content as $key_values) {
+ $fields = "`" . implode("`, `", $key_values) . "`";
+ $stmt = $pdo->query("SHOW KEYS FROM `" . $table . "` WHERE Key_name = 'PRIMARY'");
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ $is_drop = ($num_results != 0) ? "DROP PRIMARY KEY, " : "";
+ $pdo->query("ALTER TABLE `" . $table . "` " . $is_drop . "ADD PRIMARY KEY (" . $fields . ")");
+ }
+ }
+ if (strtolower($key_type) == 'key') {
+ foreach ($key_content as $key_name => $key_values) {
+ $fields = "`" . implode("`, `", $key_values) . "`";
+ $stmt = $pdo->query("SHOW KEYS FROM `" . $table . "` WHERE Key_name = '" . $key_name . "'");
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ $is_drop = ($num_results != 0) ? "DROP INDEX `" . $key_name . "`, " : "";
+ $pdo->query("ALTER TABLE `" . $table . "` " . $is_drop . "ADD KEY `" . $key_name . "` (" . $fields . ")");
+ }
+ }
+ if (strtolower($key_type) == 'unique') {
+ foreach ($key_content as $key_name => $key_values) {
+ $fields = "`" . implode("`, `", $key_values) . "`";
+ $stmt = $pdo->query("SHOW KEYS FROM `" . $table . "` WHERE Key_name = '" . $key_name . "'");
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ $is_drop = ($num_results != 0) ? "DROP INDEX `" . $key_name . "`, " : "";
+ $pdo->query("ALTER TABLE `" . $table . "` " . $is_drop . "ADD UNIQUE KEY `" . $key_name . "` (" . $fields . ")");
+ }
+ }
+ if (strtolower($key_type) == 'fkey') {
+ foreach ($key_content as $key_name => $key_values) {
+ $fields = "`" . implode("`, `", $key_values) . "`";
+ $stmt = $pdo->query("SHOW KEYS FROM `" . $table . "` WHERE Key_name = '" . $key_name . "'");
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $pdo->query("ALTER TABLE `" . $table . "` DROP INDEX `" . $key_name . "`");
+ }
+ @list($table_ref, $field_ref) = explode('.', $key_values['ref']);
+ $pdo->query("ALTER TABLE `" . $table . "` ADD FOREIGN KEY `" . $key_name . "` (" . $key_values['col'] . ") REFERENCES `" . $table_ref . "` (`" . $field_ref . "`)
+ ON DELETE " . $key_values['delete'] . " ON UPDATE " . $key_values['update']);
+ }
+ }
+ }
+ // Drop all vanished columns
+ $stmt = $pdo->query("SHOW COLUMNS FROM `" . $table . "`");
+ $cols_in_table = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ while ($row = array_shift($cols_in_table)) {
+ if (!array_key_exists($row['Field'], $properties['cols'])) {
+ $pdo->query("ALTER TABLE `" . $table . "` DROP COLUMN `" . $row['Field'] . "`;");
+ }
+ }
+
+ // Step 1: Get all non-primary keys, that currently exist and those that should exist
+ $stmt = $pdo->query("SHOW KEYS FROM `" . $table . "` WHERE `Key_name` != 'PRIMARY'");
+ $keys_in_table = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ $keys_to_exist = array();
+ if (isset($properties['keys']['unique']) && is_array($properties['keys']['unique'])) {
+ foreach ($properties['keys']['unique'] as $key_name => $key_values) {
+ $keys_to_exist[] = $key_name;
+ }
+ }
+ if (isset($properties['keys']['key']) && is_array($properties['keys']['key'])) {
+ foreach ($properties['keys']['key'] as $key_name => $key_values) {
+ $keys_to_exist[] = $key_name;
+ }
+ }
+ // Index for foreign key must exist
+ if (isset($properties['keys']['fkey']) && is_array($properties['keys']['fkey'])) {
+ foreach ($properties['keys']['fkey'] as $key_name => $key_values) {
+ $keys_to_exist[] = $key_name;
+ }
+ }
+ // Step 2: Drop all vanished indexes
+ while ($row = array_shift($keys_in_table)) {
+ if (!in_array($row['Key_name'], $keys_to_exist)) {
+ $pdo->query("ALTER TABLE `" . $table . "` DROP INDEX `" . $row['Key_name'] . "`");
+ }
+ }
+ // Step 3: Drop all vanished primary keys
+ if (!isset($properties['keys']['primary'])) {
+ $stmt = $pdo->query("SHOW KEYS FROM `" . $table . "` WHERE Key_name = 'PRIMARY'");
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results != 0) {
+ $pdo->query("ALTER TABLE `" . $table . "` DROP PRIMARY KEY");
+ }
+ }
+ }
+ else {
+ // Create table if it is missing
+ $sql = "CREATE TABLE IF NOT EXISTS `" . $table . "` (";
+ foreach($properties['cols'] as $column => $type) {
+ $sql .= "`" . $column . "` " . $type . ",";
+ }
+ foreach($properties['keys'] as $key_type => $key_content) {
+ if (strtolower($key_type) == 'primary') {
+ foreach ($key_content as $key_values) {
+ $fields = "`" . implode("`, `", $key_values) . "`";
+ $sql .= "PRIMARY KEY (" . $fields . ")" . ",";
+ }
+ }
+ elseif (strtolower($key_type) == 'key') {
+ foreach ($key_content as $key_name => $key_values) {
+ $fields = "`" . implode("`, `", $key_values) . "`";
+ $sql .= "KEY `" . $key_name . "` (" . $fields . ")" . ",";
+ }
+ }
+ elseif (strtolower($key_type) == 'unique') {
+ foreach ($key_content as $key_name => $key_values) {
+ $fields = "`" . implode("`, `", $key_values) . "`";
+ $sql .= "UNIQUE KEY `" . $key_name . "` (" . $fields . ")" . ",";
+ }
+ }
+ elseif (strtolower($key_type) == 'fkey') {
+ foreach ($key_content as $key_name => $key_values) {
+ @list($table_ref, $field_ref) = explode('.', $key_values['ref']);
+ $sql .= "FOREIGN KEY `" . $key_name . "` (" . $key_values['col'] . ") REFERENCES `" . $table_ref . "` (`" . $field_ref . "`)
+ ON DELETE " . $key_values['delete'] . " ON UPDATE " . $key_values['update'] . ",";
+ }
+ }
+ }
+ $sql = rtrim($sql, ",");
+ $sql .= ") " . $properties['attr'];
+ $pdo->query($sql);
+ }
+ // Reset table attributes
+ $pdo->query("ALTER TABLE `" . $table . "` " . $properties['attr'] . ";");
+
+ }
+
+ // Recreate SQL views
+ foreach ($views as $view => $create) {
+ $pdo->query("DROP VIEW IF EXISTS `" . $view . "`;");
+ $pdo->query($create);
+ }
+
+ // Mitigate imapsync pipemess issue
+ $pdo->query("UPDATE `imapsync` SET `custom_params` = '' WHERE `custom_params` LIKE '%pipemess%';");
+
+ // Inject admin if not exists
+ $stmt = $pdo->query("SELECT NULL FROM `admin`");
+ $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
+ if ($num_results == 0) {
+ $pdo->query("INSERT INTO `admin` (`username`, `password`, `superadmin`, `created`, `modified`, `active`)
+ VALUES ('admin', '{SSHA256}K8eVJ6YsZbQCfuJvSUbaQRLr0HPLz5rC9IAp0PAFl0tmNDBkMDc0NDAyOTAxN2Rk', 1, NOW(), NOW(), 1)");
+ $pdo->query("INSERT INTO `domain_admins` (`username`, `domain`, `created`, `active`)
+ SELECT `username`, 'ALL', NOW(), 1 FROM `admin`
+ WHERE superadmin='1' AND `username` NOT IN (SELECT `username` FROM `domain_admins`);");
+ $pdo->query("DELETE FROM `admin` WHERE `username` NOT IN (SELECT `username` FROM `domain_admins`);");
+ }
+ // Insert new DB schema version
+ $pdo->query("REPLACE INTO `versions` (`application`, `version`) VALUES ('db_schema', '" . $db_version . "');");
+
+ // Fix dangling domain admins
+ $pdo->query("DELETE FROM `admin` WHERE `superadmin` = 0 AND `username` NOT IN (SELECT `username`FROM `domain_admins`);");
+ $pdo->query("DELETE FROM `da_acl` WHERE `username` NOT IN (SELECT `username`FROM `domain_admins`);");
+
+ // Migrate attributes
+ // pushover
+ $pdo->query("UPDATE `pushover` SET `attributes` = '{}' WHERE `attributes` = '' OR `attributes` IS NULL;");
+ $pdo->query("UPDATE `pushover` SET `attributes` = JSON_SET(`attributes`, '$.evaluate_x_prio', \"0\") WHERE JSON_VALUE(`attributes`, '$.evaluate_x_prio') IS NULL;");
+ $pdo->query("UPDATE `pushover` SET `attributes` = JSON_SET(`attributes`, '$.only_x_prio', \"0\") WHERE JSON_VALUE(`attributes`, '$.only_x_prio') IS NULL;");
+ // mailbox
+ $pdo->query("UPDATE `mailbox` SET `attributes` = '{}' WHERE `attributes` = '' OR `attributes` IS NULL;");
+ $pdo->query("UPDATE `mailbox` SET `attributes` = JSON_SET(`attributes`, '$.force_pw_update', \"0\") WHERE JSON_VALUE(`attributes`, '$.force_pw_update') IS NULL;");
+ $pdo->query("UPDATE `mailbox` SET `attributes` = JSON_SET(`attributes`, '$.sogo_access', \"1\") WHERE JSON_VALUE(`attributes`, '$.sogo_access') IS NULL;");
+ $pdo->query("UPDATE `mailbox` SET `attributes` = JSON_SET(`attributes`, '$.imap_access', \"1\") WHERE JSON_VALUE(`attributes`, '$.imap_access') IS NULL;");
+ $pdo->query("UPDATE `mailbox` SET `attributes` = JSON_SET(`attributes`, '$.pop3_access', \"1\") WHERE JSON_VALUE(`attributes`, '$.pop3_access') IS NULL;");
+ $pdo->query("UPDATE `mailbox` SET `attributes` = JSON_SET(`attributes`, '$.smtp_access', \"1\") WHERE JSON_VALUE(`attributes`, '$.smtp_access') IS NULL;");
+ $pdo->query("UPDATE `mailbox` SET `attributes` = JSON_SET(`attributes`, '$.mailbox_format', \"maildir:\") WHERE JSON_VALUE(`attributes`, '$.mailbox_format') IS NULL;");
+ $pdo->query("UPDATE `mailbox` SET `attributes` = JSON_SET(`attributes`, '$.quarantine_notification', \"never\") WHERE JSON_VALUE(`attributes`, '$.quarantine_notification') IS NULL;");
+ $pdo->query("UPDATE `mailbox` SET `attributes` = JSON_SET(`attributes`, '$.quarantine_category', \"reject\") WHERE JSON_VALUE(`attributes`, '$.quarantine_category') IS NULL;");
+ foreach($tls_options as $tls_user => $tls_options) {
+ $stmt = $pdo->prepare("UPDATE `mailbox` SET `attributes` = JSON_SET(`attributes`, '$.tls_enforce_in', :tls_enforce_in),
+ `attributes` = JSON_SET(`attributes`, '$.tls_enforce_out', :tls_enforce_out)
+ WHERE `username` = :username");
+ $stmt->execute(array(':tls_enforce_in' => $tls_options['tls_enforce_in'], ':tls_enforce_out' => $tls_options['tls_enforce_out'], ':username' => $tls_user));
+ }
+ // Set tls_enforce_* if still missing (due to deleted attrs for example)
+ $pdo->query("UPDATE `mailbox` SET `attributes` = JSON_SET(`attributes`, '$.tls_enforce_out', \"1\") WHERE JSON_VALUE(`attributes`, '$.tls_enforce_out') IS NULL;");
+ $pdo->query("UPDATE `mailbox` SET `attributes` = JSON_SET(`attributes`, '$.tls_enforce_in', \"1\") WHERE JSON_VALUE(`attributes`, '$.tls_enforce_in') IS NULL;");
+ // Fix ACL
+ $pdo->query("INSERT INTO `user_acl` (`username`) SELECT `username` FROM `mailbox` WHERE `kind` = '' AND NOT EXISTS (SELECT `username` FROM `user_acl`);");
+ $pdo->query("INSERT INTO `da_acl` (`username`) SELECT DISTINCT `username` FROM `domain_admins` WHERE `username` != 'admin' AND NOT EXISTS (SELECT `username` FROM `da_acl`);");
+ // Fix domain_admins
+ $pdo->query("DELETE FROM `domain_admins` WHERE `domain` = 'ALL';");
+
+ if (php_sapi_name() == "cli") {
+ echo "DB initialization completed" . PHP_EOL;
+ } else {
+ $_SESSION['return'][] = array(
+ 'type' => 'success',
+ 'log' => array(__FUNCTION__),
+ 'msg' => 'db_init_complete'
+ );
+ }
+ }
+ catch (PDOException $e) {
+ if (php_sapi_name() == "cli") {
+ echo "DB initialization failed: " . print_r($e, true) . PHP_EOL;
+ } else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__),
+ 'msg' => array('mysql_error', $e)
+ );
+ }
+ }
+}
+if (php_sapi_name() == "cli") {
+ include '/web/inc/vars.inc.php';
+ // $now = new DateTime();
+ // $mins = $now->getOffset() / 60;
+ // $sgn = ($mins < 0 ? -1 : 1);
+ // $mins = abs($mins);
+ // $hrs = floor($mins / 60);
+ // $mins -= $hrs * 60;
+ // $offset = sprintf('%+d:%02d', $hrs*$sgn, $mins);
+ $dsn = $database_type . ":unix_socket=" . $database_sock . ";dbname=" . $database_name;
+ $opt = [
+ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
+ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
+ PDO::ATTR_EMULATE_PREPARES => false,
+ //PDO::MYSQL_ATTR_INIT_COMMAND => "SET time_zone = '" . $offset . "', group_concat_max_len = 3423543543;",
+ ];
+ $pdo = new PDO($dsn, $database_user, $database_pass, $opt);
+ $stmt = $pdo->query("SELECT COUNT('OK') AS OK_C FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'sogo_view' OR TABLE_NAME = '_sogo_static_view';");
+ $res = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (intval($res['OK_C']) === 2) {
+ // Be more precise when replacing into _sogo_static_view, col orders may change
+ try {
+ $stmt = $pdo->query("REPLACE INTO _sogo_static_view (`c_uid`, `domain`, `c_name`, `c_password`, `c_cn`, `mail`, `aliases`, `ad_aliases`, `ext_acl`, `kind`, `multiple_bookings`)
+ SELECT `c_uid`, `domain`, `c_name`, `c_password`, `c_cn`, `mail`, `aliases`, `ad_aliases`, `ext_acl`, `kind`, `multiple_bookings` from sogo_view");
+ $stmt = $pdo->query("DELETE FROM _sogo_static_view WHERE `c_uid` NOT IN (SELECT `username` FROM `mailbox` WHERE `active` = '1');");
+ echo "Fixed _sogo_static_view" . PHP_EOL;
+ }
+ catch ( Exception $e ) {
+ // Dunno
+ }
+ }
+ try {
+ $m = new Memcached();
+ $m->addServer('memcached', 11211);
+ $m->flush();
+ echo "Cleaned up memcached". PHP_EOL;
+ }
+ catch ( Exception $e ) {
+ // Dunno
+ }
+ init_db_schema();
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/CSSminifierExtended.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/CSSminifierExtended.php
new file mode 100644
index 0000000..125381c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/CSSminifierExtended.php
@@ -0,0 +1,18 @@
+<?php
+
+use MatthiasMullie\Minify\CSS;
+
+class CSSminifierExtended extends CSS {
+
+ public function getDataHash() {
+ return sha1(json_encode($this->accessProtected($this,'data')));
+ }
+
+ private function accessProtected($obj, $prop) {
+ $reflection = new ReflectionClass($obj);
+ $property = $reflection->getProperty($prop);
+ $property->setAccessible(true);
+ return $property->getValue($obj);
+ }
+
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/JSminifierExtended.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/JSminifierExtended.php
new file mode 100644
index 0000000..c891cb8
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/JSminifierExtended.php
@@ -0,0 +1,18 @@
+<?php
+
+use MatthiasMullie\Minify\JS;
+
+class JSminifierExtended extends JS {
+
+ public function getDataHash() {
+ return sha1(json_encode($this->accessProtected($this,'data')));
+ }
+
+ private function accessProtected($obj, $prop) {
+ $reflection = new ReflectionClass($obj);
+ $property = $reflection->getProperty($prop);
+ $property->setAccessible(true);
+ return $property->getValue($obj);
+ }
+
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/AttestationObject.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/AttestationObject.php
new file mode 100644
index 0000000..aeb4e20
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/AttestationObject.php
@@ -0,0 +1,154 @@
+<?php
+
+namespace WebAuthn\Attestation;
+use WebAuthn\WebAuthnException;
+use WebAuthn\CBOR\CborDecoder;
+use WebAuthn\Binary\ByteBuffer;
+
+/**
+ * @author Lukas Buchs
+ * @license https://github.com/lbuchs/WebAuthn/blob/master/LICENSE MIT
+ */
+class AttestationObject {
+ private $_authenticatorData;
+ private $_attestationFormat;
+
+ public function __construct($binary , $allowedFormats) {
+ $enc = CborDecoder::decode($binary);
+ // validation
+ if (!\is_array($enc) || !\array_key_exists('fmt', $enc) || !is_string($enc['fmt'])) {
+ throw new WebAuthnException('invalid attestation format', WebAuthnException::INVALID_DATA);
+ }
+
+ if (!\array_key_exists('attStmt', $enc) || !\is_array($enc['attStmt'])) {
+ throw new WebAuthnException('invalid attestation format (attStmt not available)', WebAuthnException::INVALID_DATA);
+ }
+
+ if (!\array_key_exists('authData', $enc) || !\is_object($enc['authData']) || !($enc['authData'] instanceof ByteBuffer)) {
+ throw new WebAuthnException('invalid attestation format (authData not available)', WebAuthnException::INVALID_DATA);
+ }
+
+ $this->_authenticatorData = new AuthenticatorData($enc['authData']->getBinaryString());
+
+ // Format ok?
+ if (!in_array($enc['fmt'], $allowedFormats)) {
+ throw new WebAuthnException('invalid atttestation format: ' . $enc['fmt'], WebAuthnException::INVALID_DATA);
+ }
+
+ switch ($enc['fmt']) {
+ case 'android-key': $this->_attestationFormat = new Format\AndroidKey($enc, $this->_authenticatorData); break;
+ case 'android-safetynet': $this->_attestationFormat = new Format\AndroidSafetyNet($enc, $this->_authenticatorData); break;
+ case 'apple': $this->_attestationFormat = new Format\Apple($enc, $this->_authenticatorData); break;
+ case 'fido-u2f': $this->_attestationFormat = new Format\U2f($enc, $this->_authenticatorData); break;
+ case 'none': $this->_attestationFormat = new Format\None($enc, $this->_authenticatorData); break;
+ case 'packed': $this->_attestationFormat = new Format\Packed($enc, $this->_authenticatorData); break;
+ case 'tpm': $this->_attestationFormat = new Format\Tpm($enc, $this->_authenticatorData); break;
+ default: throw new WebAuthnException('invalid attestation format: ' . $enc['fmt'], WebAuthnException::INVALID_DATA);
+ }
+ }
+
+ /**
+ * returns the attestation public key in PEM format
+ * @return AuthenticatorData
+ */
+ public function getAuthenticatorData() {
+ return $this->_authenticatorData;
+ }
+
+ /**
+ * returns the certificate chain as PEM
+ * @return string|null
+ */
+ public function getCertificateChain() {
+ return $this->_attestationFormat->getCertificateChain();
+ }
+
+ /**
+ * return the certificate issuer as string
+ * @return string
+ */
+ public function getCertificateIssuer() {
+ $pem = $this->getCertificatePem();
+ $issuer = '';
+ if ($pem) {
+ $certInfo = \openssl_x509_parse($pem);
+ if (\is_array($certInfo) && \is_array($certInfo['issuer'])) {
+ if ($certInfo['issuer']['CN']) {
+ $issuer .= \trim($certInfo['issuer']['CN']);
+ }
+ if ($certInfo['issuer']['O'] || $certInfo['issuer']['OU']) {
+ if ($issuer) {
+ $issuer .= ' (' . \trim($certInfo['issuer']['O'] . ' ' . $certInfo['issuer']['OU']) . ')';
+ } else {
+ $issuer .= \trim($certInfo['issuer']['O'] . ' ' . $certInfo['issuer']['OU']);
+ }
+ }
+ }
+ }
+
+ return $issuer;
+ }
+
+ /**
+ * return the certificate subject as string
+ * @return string
+ */
+ public function getCertificateSubject() {
+ $pem = $this->getCertificatePem();
+ $subject = '';
+ if ($pem) {
+ $certInfo = \openssl_x509_parse($pem);
+ if (\is_array($certInfo) && \is_array($certInfo['subject'])) {
+ if ($certInfo['subject']['CN']) {
+ $subject .= \trim($certInfo['subject']['CN']);
+ }
+ if ($certInfo['subject']['O'] || $certInfo['subject']['OU']) {
+ if ($subject) {
+ $subject .= ' (' . \trim($certInfo['subject']['O'] . ' ' . $certInfo['subject']['OU']) . ')';
+ } else {
+ $subject .= \trim($certInfo['subject']['O'] . ' ' . $certInfo['subject']['OU']);
+ }
+ }
+ }
+ }
+
+ return $subject;
+ }
+
+ /**
+ * returns the key certificate in PEM format
+ * @return string
+ */
+ public function getCertificatePem() {
+ return $this->_attestationFormat->getCertificatePem();
+ }
+
+ /**
+ * checks validity of the signature
+ * @param string $clientDataHash
+ * @return bool
+ * @throws WebAuthnException
+ */
+ public function validateAttestation($clientDataHash) {
+ return $this->_attestationFormat->validateAttestation($clientDataHash);
+ }
+
+ /**
+ * validates the certificate against root certificates
+ * @param array $rootCas
+ * @return boolean
+ * @throws WebAuthnException
+ */
+ public function validateRootCertificate($rootCas) {
+ return $this->_attestationFormat->validateRootCertificate($rootCas);
+ }
+
+ /**
+ * checks if the RpId-Hash is valid
+ * @param string$rpIdHash
+ * @return bool
+ */
+ public function validateRpIdHash($rpIdHash) {
+ return $rpIdHash === $this->_authenticatorData->getRpIdHash();
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/AuthenticatorData.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/AuthenticatorData.php
new file mode 100644
index 0000000..374d9ab
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/AuthenticatorData.php
@@ -0,0 +1,423 @@
+<?php
+
+namespace WebAuthn\Attestation;
+use WebAuthn\WebAuthnException;
+use WebAuthn\CBOR\CborDecoder;
+use WebAuthn\Binary\ByteBuffer;
+
+/**
+ * @author Lukas Buchs
+ * @license https://github.com/lbuchs/WebAuthn/blob/master/LICENSE MIT
+ */
+class AuthenticatorData {
+ protected $_binary;
+ protected $_rpIdHash;
+ protected $_flags;
+ protected $_signCount;
+ protected $_attestedCredentialData;
+ protected $_extensionData;
+
+
+
+ // Cose encoded keys
+ private static $_COSE_KTY = 1;
+ private static $_COSE_ALG = 3;
+
+ // Cose EC2 ES256 P-256 curve
+ private static $_COSE_CRV = -1;
+ private static $_COSE_X = -2;
+ private static $_COSE_Y = -3;
+
+ // Cose RSA PS256
+ private static $_COSE_N = -1;
+ private static $_COSE_E = -2;
+
+ private static $_EC2_TYPE = 2;
+ private static $_EC2_ES256 = -7;
+ private static $_EC2_P256 = 1;
+
+ private static $_RSA_TYPE = 3;
+ private static $_RSA_RS256 = -257;
+
+ /**
+ * Parsing the authenticatorData binary.
+ * @param string $binary
+ * @throws WebAuthnException
+ */
+ public function __construct($binary) {
+ if (!\is_string($binary) || \strlen($binary) < 37) {
+ throw new WebAuthnException('Invalid authenticatorData input', WebAuthnException::INVALID_DATA);
+ }
+ $this->_binary = $binary;
+
+ // Read infos from binary
+ // https://www.w3.org/TR/webauthn/#sec-authenticator-data
+
+ // RP ID
+ $this->_rpIdHash = \substr($binary, 0, 32);
+
+ // flags (1 byte)
+ $flags = \unpack('Cflags', \substr($binary, 32, 1))['flags'];
+ $this->_flags = $this->_readFlags($flags);
+
+ // signature counter: 32-bit unsigned big-endian integer.
+ $this->_signCount = \unpack('Nsigncount', \substr($binary, 33, 4))['signcount'];
+
+ $offset = 37;
+ // https://www.w3.org/TR/webauthn/#sec-attested-credential-data
+ if ($this->_flags->attestedDataIncluded) {
+ $this->_attestedCredentialData = $this->_readAttestData($binary, $offset);
+ }
+
+ if ($this->_flags->extensionDataIncluded) {
+ $this->_readExtensionData(\substr($binary, $offset));
+ }
+ }
+
+ /**
+ * Authenticator Attestation Globally Unique Identifier, a unique number
+ * that identifies the model of the authenticator (not the specific instance
+ * of the authenticator)
+ * The aaguid may be 0 if the user is using a old u2f device and/or if
+ * the browser is using the fido-u2f format.
+ * @return string
+ * @throws WebAuthnException
+ */
+ public function getAAGUID() {
+ if (!($this->_attestedCredentialData instanceof \stdClass)) {
+ throw new WebAuthnException('credential data not included in authenticator data', WebAuthnException::INVALID_DATA);
+ }
+ return $this->_attestedCredentialData->aaguid;
+ }
+
+ /**
+ * returns the authenticatorData as binary
+ * @return string
+ */
+ public function getBinary() {
+ return $this->_binary;
+ }
+
+ /**
+ * returns the credentialId
+ * @return string
+ * @throws WebAuthnException
+ */
+ public function getCredentialId() {
+ if (!($this->_attestedCredentialData instanceof \stdClass)) {
+ throw new WebAuthnException('credential id not included in authenticator data', WebAuthnException::INVALID_DATA);
+ }
+ return $this->_attestedCredentialData->credentialId;
+ }
+
+ /**
+ * returns the public key in PEM format
+ * @return string
+ */
+ public function getPublicKeyPem() {
+ $der = null;
+ switch ($this->_attestedCredentialData->credentialPublicKey->kty) {
+ case self::$_EC2_TYPE: $der = $this->_getEc2Der(); break;
+ case self::$_RSA_TYPE: $der = $this->_getRsaDer(); break;
+ default: throw new WebAuthnException('invalid key type', WebAuthnException::INVALID_DATA);
+ }
+
+ $pem = '-----BEGIN PUBLIC KEY-----' . "\n";
+ $pem .= \chunk_split(\base64_encode($der), 64, "\n");
+ $pem .= '-----END PUBLIC KEY-----' . "\n";
+ return $pem;
+ }
+
+ /**
+ * returns the public key in U2F format
+ * @return string
+ * @throws WebAuthnException
+ */
+ public function getPublicKeyU2F() {
+ if (!($this->_attestedCredentialData instanceof \stdClass)) {
+ throw new WebAuthnException('credential data not included in authenticator data', WebAuthnException::INVALID_DATA);
+ }
+ return "\x04" . // ECC uncompressed
+ $this->_attestedCredentialData->credentialPublicKey->x .
+ $this->_attestedCredentialData->credentialPublicKey->y;
+ }
+
+ /**
+ * returns the SHA256 hash of the relying party id (=hostname)
+ * @return string
+ */
+ public function getRpIdHash() {
+ return $this->_rpIdHash;
+ }
+
+ /**
+ * returns the sign counter
+ * @return int
+ */
+ public function getSignCount() {
+ return $this->_signCount;
+ }
+
+ /**
+ * returns true if the user is present
+ * @return boolean
+ */
+ public function getUserPresent() {
+ return $this->_flags->userPresent;
+ }
+
+ /**
+ * returns true if the user is verified
+ * @return boolean
+ */
+ public function getUserVerified() {
+ return $this->_flags->userVerified;
+ }
+
+ // -----------------------------------------------
+ // PRIVATE
+ // -----------------------------------------------
+
+ /**
+ * Returns DER encoded EC2 key
+ * @return string
+ */
+ private function _getEc2Der() {
+ return $this->_der_sequence(
+ $this->_der_sequence(
+ $this->_der_oid("\x2A\x86\x48\xCE\x3D\x02\x01") . // OID 1.2.840.10045.2.1 ecPublicKey
+ $this->_der_oid("\x2A\x86\x48\xCE\x3D\x03\x01\x07") // 1.2.840.10045.3.1.7 prime256v1
+ ) .
+ $this->_der_bitString($this->getPublicKeyU2F())
+ );
+ }
+
+ /**
+ * Returns DER encoded RSA key
+ * @return string
+ */
+ private function _getRsaDer() {
+ return $this->_der_sequence(
+ $this->_der_sequence(
+ $this->_der_oid("\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01") . // OID 1.2.840.113549.1.1.1 rsaEncryption
+ $this->_der_nullValue()
+ ) .
+ $this->_der_bitString(
+ $this->_der_sequence(
+ $this->_der_unsignedInteger($this->_attestedCredentialData->credentialPublicKey->n) .
+ $this->_der_unsignedInteger($this->_attestedCredentialData->credentialPublicKey->e)
+ )
+ )
+ );
+ }
+
+ /**
+ * reads the flags from flag byte
+ * @param string $binFlag
+ * @return \stdClass
+ */
+ private function _readFlags($binFlag) {
+ $flags = new \stdClass();
+
+ $flags->bit_0 = !!($binFlag & 1);
+ $flags->bit_1 = !!($binFlag & 2);
+ $flags->bit_2 = !!($binFlag & 4);
+ $flags->bit_3 = !!($binFlag & 8);
+ $flags->bit_4 = !!($binFlag & 16);
+ $flags->bit_5 = !!($binFlag & 32);
+ $flags->bit_6 = !!($binFlag & 64);
+ $flags->bit_7 = !!($binFlag & 128);
+
+ // named flags
+ $flags->userPresent = $flags->bit_0;
+ $flags->userVerified = $flags->bit_2;
+ $flags->attestedDataIncluded = $flags->bit_6;
+ $flags->extensionDataIncluded = $flags->bit_7;
+ return $flags;
+ }
+
+ /**
+ * read attested data
+ * @param string $binary
+ * @param int $endOffset
+ * @return \stdClass
+ * @throws WebAuthnException
+ */
+ private function _readAttestData($binary, &$endOffset) {
+ $attestedCData = new \stdClass();
+ if (\strlen($binary) <= 55) {
+ throw new WebAuthnException('Attested data should be present but is missing', WebAuthnException::INVALID_DATA);
+ }
+
+ // The AAGUID of the authenticator
+ $attestedCData->aaguid = \substr($binary, 37, 16);
+
+ //Byte length L of Credential ID, 16-bit unsigned big-endian integer.
+ $length = \unpack('nlength', \substr($binary, 53, 2))['length'];
+ $attestedCData->credentialId = \substr($binary, 55, $length);
+
+ // set end offset
+ $endOffset = 55 + $length;
+
+ // extract public key
+ $attestedCData->credentialPublicKey = $this->_readCredentialPublicKey($binary, 55 + $length, $endOffset);
+
+ return $attestedCData;
+ }
+
+ /**
+ * reads COSE key-encoded elliptic curve public key in EC2 format
+ * @param string $binary
+ * @param int $endOffset
+ * @return \stdClass
+ * @throws WebAuthnException
+ */
+ private function _readCredentialPublicKey($binary, $offset, &$endOffset) {
+ $enc = CborDecoder::decodeInPlace($binary, $offset, $endOffset);
+
+ // COSE key-encoded elliptic curve public key in EC2 format
+ $credPKey = new \stdClass();
+ $credPKey->kty = $enc[self::$_COSE_KTY];
+ $credPKey->alg = $enc[self::$_COSE_ALG];
+
+ switch ($credPKey->alg) {
+ case self::$_EC2_ES256: $this->_readCredentialPublicKeyES256($credPKey, $enc); break;
+ case self::$_RSA_RS256: $this->_readCredentialPublicKeyRS256($credPKey, $enc); break;
+ }
+
+ return $credPKey;
+ }
+
+ /**
+ * extract ES256 informations from cose
+ * @param \stdClass $credPKey
+ * @param \stdClass $enc
+ * @throws WebAuthnException
+ */
+ private function _readCredentialPublicKeyES256(&$credPKey, $enc) {
+ $credPKey->crv = $enc[self::$_COSE_CRV];
+ $credPKey->x = $enc[self::$_COSE_X] instanceof ByteBuffer ? $enc[self::$_COSE_X]->getBinaryString() : null;
+ $credPKey->y = $enc[self::$_COSE_Y] instanceof ByteBuffer ? $enc[self::$_COSE_Y]->getBinaryString() : null;
+ unset ($enc);
+
+ // Validation
+ if ($credPKey->kty !== self::$_EC2_TYPE) {
+ throw new WebAuthnException('public key not in EC2 format', WebAuthnException::INVALID_PUBLIC_KEY);
+ }
+
+ if ($credPKey->alg !== self::$_EC2_ES256) {
+ throw new WebAuthnException('signature algorithm not ES256', WebAuthnException::INVALID_PUBLIC_KEY);
+ }
+
+ if ($credPKey->crv !== self::$_EC2_P256) {
+ throw new WebAuthnException('curve not P-256', WebAuthnException::INVALID_PUBLIC_KEY);
+ }
+
+ if (\strlen($credPKey->x) !== 32) {
+ throw new WebAuthnException('Invalid X-coordinate', WebAuthnException::INVALID_PUBLIC_KEY);
+ }
+
+ if (\strlen($credPKey->y) !== 32) {
+ throw new WebAuthnException('Invalid Y-coordinate', WebAuthnException::INVALID_PUBLIC_KEY);
+ }
+ }
+
+ /**
+ * extract RS256 informations from COSE
+ * @param \stdClass $credPKey
+ * @param \stdClass $enc
+ * @throws WebAuthnException
+ */
+ private function _readCredentialPublicKeyRS256(&$credPKey, $enc) {
+ $credPKey->n = $enc[self::$_COSE_N] instanceof ByteBuffer ? $enc[self::$_COSE_N]->getBinaryString() : null;
+ $credPKey->e = $enc[self::$_COSE_E] instanceof ByteBuffer ? $enc[self::$_COSE_E]->getBinaryString() : null;
+ unset ($enc);
+
+ // Validation
+ if ($credPKey->kty !== self::$_RSA_TYPE) {
+ throw new WebAuthnException('public key not in RSA format', WebAuthnException::INVALID_PUBLIC_KEY);
+ }
+
+ if ($credPKey->alg !== self::$_RSA_RS256) {
+ throw new WebAuthnException('signature algorithm not ES256', WebAuthnException::INVALID_PUBLIC_KEY);
+ }
+
+ if (\strlen($credPKey->n) !== 256) {
+ throw new WebAuthnException('Invalid RSA modulus', WebAuthnException::INVALID_PUBLIC_KEY);
+ }
+
+ if (\strlen($credPKey->e) !== 3) {
+ throw new WebAuthnException('Invalid RSA public exponent', WebAuthnException::INVALID_PUBLIC_KEY);
+ }
+
+ }
+
+ /**
+ * reads cbor encoded extension data.
+ * @param string $binary
+ * @return array
+ * @throws WebAuthnException
+ */
+ private function _readExtensionData($binary) {
+ $ext = CborDecoder::decode($binary);
+ if (!\is_array($ext)) {
+ throw new WebAuthnException('invalid extension data', WebAuthnException::INVALID_DATA);
+ }
+
+ return $ext;
+ }
+
+
+ // ---------------
+ // DER functions
+ // ---------------
+
+ private function _der_length($len) {
+ if ($len < 128) {
+ return \chr($len);
+ }
+ $lenBytes = '';
+ while ($len > 0) {
+ $lenBytes = \chr($len % 256) . $lenBytes;
+ $len = \intdiv($len, 256);
+ }
+ return \chr(0x80 | \strlen($lenBytes)) . $lenBytes;
+ }
+
+ private function _der_sequence($contents) {
+ return "\x30" . $this->_der_length(\strlen($contents)) . $contents;
+ }
+
+ private function _der_oid($encoded) {
+ return "\x06" . $this->_der_length(\strlen($encoded)) . $encoded;
+ }
+
+ private function _der_bitString($bytes) {
+ return "\x03" . $this->_der_length(\strlen($bytes) + 1) . "\x00" . $bytes;
+ }
+
+ private function _der_nullValue() {
+ return "\x05\x00";
+ }
+
+ private function _der_unsignedInteger($bytes) {
+ $len = \strlen($bytes);
+
+ // Remove leading zero bytes
+ for ($i = 0; $i < ($len - 1); $i++) {
+ if (\ord($bytes[$i]) !== 0) {
+ break;
+ }
+ }
+ if ($i !== 0) {
+ $bytes = \substr($bytes, $i);
+ }
+
+ // If most significant bit is set, prefix with another zero to prevent it being seen as negative number
+ if ((\ord($bytes[0]) & 0x80) !== 0) {
+ $bytes = "\x00" . $bytes;
+ }
+
+ return "\x02" . $this->_der_length(\strlen($bytes)) . $bytes;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/Format/AndroidKey.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/Format/AndroidKey.php
new file mode 100644
index 0000000..aa6f1ab
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/Format/AndroidKey.php
@@ -0,0 +1,95 @@
+<?php
+
+namespace WebAuthn\Attestation\Format;
+use WebAuthn\WebAuthnException;
+use WebAuthn\Binary\ByteBuffer;
+
+class AndroidKey extends FormatBase {
+ private $_alg;
+ private $_signature;
+ private $_x5c;
+
+ public function __construct($AttestionObject, \WebAuthn\Attestation\AuthenticatorData $authenticatorData) {
+ parent::__construct($AttestionObject, $authenticatorData);
+
+ // check u2f data
+ $attStmt = $this->_attestationObject['attStmt'];
+
+ if (!\array_key_exists('alg', $attStmt) || $this->_getCoseAlgorithm($attStmt['alg']) === null) {
+ throw new WebAuthnException('unsupported alg: ' . $attStmt['alg'], WebAuthnException::INVALID_DATA);
+ }
+
+ if (!\array_key_exists('sig', $attStmt) || !\is_object($attStmt['sig']) || !($attStmt['sig'] instanceof ByteBuffer)) {
+ throw new WebAuthnException('no signature found', WebAuthnException::INVALID_DATA);
+ }
+
+ if (!\array_key_exists('x5c', $attStmt) || !\is_array($attStmt['x5c']) || \count($attStmt['x5c']) < 1) {
+ throw new WebAuthnException('invalid x5c certificate', WebAuthnException::INVALID_DATA);
+ }
+
+ if (!\is_object($attStmt['x5c'][0]) || !($attStmt['x5c'][0] instanceof ByteBuffer)) {
+ throw new WebAuthnException('invalid x5c certificate', WebAuthnException::INVALID_DATA);
+ }
+
+ $this->_alg = $attStmt['alg'];
+ $this->_signature = $attStmt['sig']->getBinaryString();
+ $this->_x5c = $attStmt['x5c'][0]->getBinaryString();
+
+ if (count($attStmt['x5c']) > 1) {
+ for ($i=1; $i<count($attStmt['x5c']); $i++) {
+ $this->_x5c_chain[] = $attStmt['x5c'][$i]->getBinaryString();
+ }
+ unset ($i);
+ }
+ }
+
+
+ /*
+ * returns the key certificate in PEM format
+ * @return string
+ */
+ public function getCertificatePem() {
+ return $this->_createCertificatePem($this->_x5c);
+ }
+
+ /**
+ * @param string $clientDataHash
+ */
+ public function validateAttestation($clientDataHash) {
+ $publicKey = \openssl_pkey_get_public($this->getCertificatePem());
+
+ if ($publicKey === false) {
+ throw new WebAuthnException('invalid public key: ' . \openssl_error_string(), WebAuthnException::INVALID_PUBLIC_KEY);
+ }
+
+ // Verify that sig is a valid signature over the concatenation of authenticatorData and clientDataHash
+ // using the attestation public key in attestnCert with the algorithm specified in alg.
+ $dataToVerify = $this->_authenticatorData->getBinary();
+ $dataToVerify .= $clientDataHash;
+
+ $coseAlgorithm = $this->_getCoseAlgorithm($this->_alg);
+
+ // check certificate
+ return \openssl_verify($dataToVerify, $this->_signature, $publicKey, $coseAlgorithm->openssl) === 1;
+ }
+
+ /**
+ * validates the certificate against root certificates
+ * @param array $rootCas
+ * @return boolean
+ * @throws WebAuthnException
+ */
+ public function validateRootCertificate($rootCas) {
+ $chainC = $this->_createX5cChainFile();
+ if ($chainC) {
+ $rootCas[] = $chainC;
+ }
+
+ $v = \openssl_x509_checkpurpose($this->getCertificatePem(), -1, $rootCas);
+ if ($v === -1) {
+ throw new WebAuthnException('error on validating root certificate: ' . \openssl_error_string(), WebAuthnException::CERTIFICATE_NOT_TRUSTED);
+ }
+ return $v;
+ }
+}
+
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/Format/AndroidSafetyNet.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/Format/AndroidSafetyNet.php
new file mode 100644
index 0000000..70f4212
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/Format/AndroidSafetyNet.php
@@ -0,0 +1,140 @@
+<?php
+
+
+namespace WebAuthn\Attestation\Format;
+use WebAuthn\WebAuthnException;
+use WebAuthn\Binary\ByteBuffer;
+
+class AndroidSafetyNet extends FormatBase {
+ private $_signature;
+ private $_signedValue;
+ private $_x5c;
+ private $_payload;
+
+ public function __construct($AttestionObject, \WebAuthn\Attestation\AuthenticatorData $authenticatorData) {
+ parent::__construct($AttestionObject, $authenticatorData);
+
+ // check data
+ $attStmt = $this->_attestationObject['attStmt'];
+
+ if (!\array_key_exists('ver', $attStmt) || !$attStmt['ver']) {
+ throw new WebAuthnException('invalid Android Safety Net Format', WebAuthnException::INVALID_DATA);
+ }
+
+ if (!\array_key_exists('response', $attStmt) || !($attStmt['response'] instanceof ByteBuffer)) {
+ throw new WebAuthnException('invalid Android Safety Net Format', WebAuthnException::INVALID_DATA);
+ }
+
+ $response = $attStmt['response']->getBinaryString();
+
+ // Response is a JWS [RFC7515] object in Compact Serialization.
+ // JWSs have three segments separated by two period ('.') characters
+ $parts = \explode('.', $response);
+ unset ($response);
+ if (\count($parts) !== 3) {
+ throw new WebAuthnException('invalid JWS data', WebAuthnException::INVALID_DATA);
+ }
+
+ $header = $this->_base64url_decode($parts[0]);
+ $payload = $this->_base64url_decode($parts[1]);
+ $this->_signature = $this->_base64url_decode($parts[2]);
+ $this->_signedValue = $parts[0] . '.' . $parts[1];
+ unset ($parts);
+
+ $header = \json_decode($header);
+ $payload = \json_decode($payload);
+
+ if (!($header instanceof \stdClass)) {
+ throw new WebAuthnException('invalid JWS header', WebAuthnException::INVALID_DATA);
+ }
+ if (!($payload instanceof \stdClass)) {
+ throw new WebAuthnException('invalid JWS payload', WebAuthnException::INVALID_DATA);
+ }
+
+ if (!$header->x5c || !is_array($header->x5c) || count($header->x5c) === 0) {
+ throw new WebAuthnException('No X.509 signature in JWS Header', WebAuthnException::INVALID_DATA);
+ }
+
+ // algorithm
+ if (!\in_array($header->alg, array('RS256', 'ES256'))) {
+ throw new WebAuthnException('invalid JWS algorithm ' . $header->alg, WebAuthnException::INVALID_DATA);
+ }
+
+ $this->_x5c = \base64_decode($header->x5c[0]);
+ $this->_payload = $payload;
+
+ if (count($header->x5c) > 1) {
+ for ($i=1; $i<count($header->x5c); $i++) {
+ $this->_x5c_chain[] = \base64_decode($header->x5c[$i]);
+ }
+ unset ($i);
+ }
+ }
+
+
+ /*
+ * returns the key certificate in PEM format
+ * @return string
+ */
+ public function getCertificatePem() {
+ return $this->_createCertificatePem($this->_x5c);
+ }
+
+ /**
+ * @param string $clientDataHash
+ */
+ public function validateAttestation($clientDataHash) {
+ $publicKey = \openssl_pkey_get_public($this->getCertificatePem());
+
+ // Verify that the nonce in the response is identical to the Base64 encoding
+ // of the SHA-256 hash of the concatenation of authenticatorData and clientDataHash.
+ if (!$this->_payload->nonce || $this->_payload->nonce !== \base64_encode(\hash('SHA256', $this->_authenticatorData->getBinary() . $clientDataHash, true))) {
+ throw new WebAuthnException('invalid nonce in JWS payload', WebAuthnException::INVALID_DATA);
+ }
+
+ // Verify that attestationCert is issued to the hostname "attest.android.com"
+ $certInfo = \openssl_x509_parse($this->getCertificatePem());
+ if (!\is_array($certInfo) || !$certInfo['subject'] || $certInfo['subject']['CN'] !== 'attest.android.com') {
+ throw new WebAuthnException('invalid certificate CN in JWS (' . $certInfo['subject']['CN']. ')', WebAuthnException::INVALID_DATA);
+ }
+
+ // Verify that the ctsProfileMatch attribute in the payload of response is true.
+ if (!$this->_payload->ctsProfileMatch) {
+ throw new WebAuthnException('invalid ctsProfileMatch in payload', WebAuthnException::INVALID_DATA);
+ }
+
+ // check certificate
+ return \openssl_verify($this->_signedValue, $this->_signature, $publicKey, OPENSSL_ALGO_SHA256) === 1;
+ }
+
+
+ /**
+ * validates the certificate against root certificates
+ * @param array $rootCas
+ * @return boolean
+ * @throws WebAuthnException
+ */
+ public function validateRootCertificate($rootCas) {
+ $chainC = $this->_createX5cChainFile();
+ if ($chainC) {
+ $rootCas[] = $chainC;
+ }
+
+ $v = \openssl_x509_checkpurpose($this->getCertificatePem(), -1, $rootCas);
+ if ($v === -1) {
+ throw new WebAuthnException('error on validating root certificate: ' . \openssl_error_string(), WebAuthnException::CERTIFICATE_NOT_TRUSTED);
+ }
+ return $v;
+ }
+
+
+ /**
+ * decode base64 url
+ * @param string $data
+ * @return string
+ */
+ private function _base64url_decode($data) {
+ return \base64_decode(\strtr($data, '-_', '+/') . \str_repeat('=', 3 - (3 + \strlen($data)) % 4));
+ }
+}
+
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/Format/Apple.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/Format/Apple.php
new file mode 100644
index 0000000..ff563ed
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/Format/Apple.php
@@ -0,0 +1,138 @@
+<?php
+
+
+namespace WebAuthn\Attestation\Format;
+use WebAuthn\WebAuthnException;
+use WebAuthn\Binary\ByteBuffer;
+
+class Apple extends FormatBase {
+ private $_x5c;
+
+ public function __construct($AttestionObject, \WebAuthn\Attestation\AuthenticatorData $authenticatorData) {
+ parent::__construct($AttestionObject, $authenticatorData);
+
+ // check packed data
+ $attStmt = $this->_attestationObject['attStmt'];
+
+
+ // certificate for validation
+ if (\array_key_exists('x5c', $attStmt) && \is_array($attStmt['x5c']) && \count($attStmt['x5c']) > 0) {
+
+ // The attestation certificate attestnCert MUST be the first element in the array
+ $attestnCert = array_shift($attStmt['x5c']);
+
+ if (!($attestnCert instanceof ByteBuffer)) {
+ throw new WebAuthnException('invalid x5c certificate', WebAuthnException::INVALID_DATA);
+ }
+
+ $this->_x5c = $attestnCert->getBinaryString();
+
+ // certificate chain
+ foreach ($attStmt['x5c'] as $chain) {
+ if ($chain instanceof ByteBuffer) {
+ $this->_x5c_chain[] = $chain->getBinaryString();
+ }
+ }
+ } else {
+ throw new WebAuthnException('invalid Apple attestation statement: missing x5c', WebAuthnException::INVALID_DATA);
+ }
+ }
+
+
+ /*
+ * returns the key certificate in PEM format
+ * @return string|null
+ */
+ public function getCertificatePem() {
+ return $this->_createCertificatePem($this->_x5c);
+ }
+
+ /**
+ * @param string $clientDataHash
+ */
+ public function validateAttestation($clientDataHash) {
+ return $this->_validateOverX5c($clientDataHash);
+ }
+
+ /**
+ * validates the certificate against root certificates
+ * @param array $rootCas
+ * @return boolean
+ * @throws WebAuthnException
+ */
+ public function validateRootCertificate($rootCas) {
+ $chainC = $this->_createX5cChainFile();
+ if ($chainC) {
+ $rootCas[] = $chainC;
+ }
+
+ $v = \openssl_x509_checkpurpose($this->getCertificatePem(), -1, $rootCas);
+ if ($v === -1) {
+ throw new WebAuthnException('error on validating root certificate: ' . \openssl_error_string(), WebAuthnException::CERTIFICATE_NOT_TRUSTED);
+ }
+ return $v;
+ }
+
+ /**
+ * validate if x5c is present
+ * @param string $clientDataHash
+ * @return bool
+ * @throws WebAuthnException
+ */
+ protected function _validateOverX5c($clientDataHash) {
+ $publicKey = \openssl_pkey_get_public($this->getCertificatePem());
+
+ if ($publicKey === false) {
+ throw new WebAuthnException('invalid public key: ' . \openssl_error_string(), WebAuthnException::INVALID_PUBLIC_KEY);
+ }
+
+ // Concatenate authenticatorData and clientDataHash to form nonceToHash.
+ $nonceToHash = $this->_authenticatorData->getBinary();
+ $nonceToHash .= $clientDataHash;
+
+ // Perform SHA-256 hash of nonceToHash to produce nonce
+ $nonce = hash('SHA256', $nonceToHash, true);
+
+ $credCert = openssl_x509_read($this->getCertificatePem());
+ if ($credCert === false) {
+ throw new WebAuthnException('invalid x5c certificate: ' . \openssl_error_string(), WebAuthnException::INVALID_DATA);
+ }
+
+ $keyData = openssl_pkey_get_details(openssl_pkey_get_public($credCert));
+ $key = is_array($keyData) && array_key_exists('key', $keyData) ? $keyData['key'] : null;
+
+
+ // Verify that nonce equals the value of the extension with OID ( 1.2.840.113635.100.8.2 ) in credCert.
+ $parsedCredCert = openssl_x509_parse($credCert);
+ $nonceExtension = isset($parsedCredCert['extensions']['1.2.840.113635.100.8.2']) ? $parsedCredCert['extensions']['1.2.840.113635.100.8.2'] : '';
+
+ // nonce padded by ASN.1 string: 30 24 A1 22 04 20
+ // 30 — type tag indicating sequence
+ // 24 — 36 byte following
+ // A1 — Enumerated [1]
+ // 22 — 34 byte following
+ // 04 — type tag indicating octet string
+ // 20 — 32 byte following
+
+ $asn1Padding = "\x30\x24\xA1\x22\x04\x20";
+ if (substr($nonceExtension, 0, strlen($asn1Padding)) === $asn1Padding) {
+ $nonceExtension = substr($nonceExtension, strlen($asn1Padding));
+ }
+
+ if ($nonceExtension !== $nonce) {
+ throw new WebAuthnException('nonce doesn\'t equal the value of the extension with OID 1.2.840.113635.100.8.2', WebAuthnException::INVALID_DATA);
+ }
+
+ // Verify that the credential public key equals the Subject Public Key of credCert.
+ $authKeyData = openssl_pkey_get_details(openssl_pkey_get_public($this->_authenticatorData->getPublicKeyPem()));
+ $authKey = is_array($authKeyData) && array_key_exists('key', $authKeyData) ? $authKeyData['key'] : null;
+
+ if ($key === null || $key !== $authKey) {
+ throw new WebAuthnException('credential public key doesn\'t equal the Subject Public Key of credCert', WebAuthnException::INVALID_DATA);
+ }
+
+ return true;
+ }
+
+}
+
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/Format/FormatBase.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/Format/FormatBase.php
new file mode 100644
index 0000000..a9048b9
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/Format/FormatBase.php
@@ -0,0 +1,183 @@
+<?php
+
+
+namespace WebAuthn\Attestation\Format;
+use WebAuthn\WebAuthnException;
+
+
+abstract class FormatBase {
+ protected $_attestationObject = null;
+ protected $_authenticatorData = null;
+ protected $_x5c_chain = array();
+ protected $_x5c_tempFile = null;
+
+ /**
+ *
+ * @param Array $AttestionObject
+ * @param \WebAuthn\Attestation\AuthenticatorData $authenticatorData
+ */
+ public function __construct($AttestionObject, \WebAuthn\Attestation\AuthenticatorData $authenticatorData) {
+ $this->_attestationObject = $AttestionObject;
+ $this->_authenticatorData = $authenticatorData;
+ }
+
+ /**
+ *
+ */
+ public function __destruct() {
+ // delete X.509 chain certificate file after use
+ if (\is_file($this->_x5c_tempFile)) {
+ \unlink($this->_x5c_tempFile);
+ }
+ }
+
+ /**
+ * returns the certificate chain in PEM format
+ * @return string|null
+ */
+ public function getCertificateChain() {
+ if (\is_file($this->_x5c_tempFile)) {
+ return \file_get_contents($this->_x5c_tempFile);
+ }
+ return null;
+ }
+
+ /**
+ * returns the key X.509 certificate in PEM format
+ * @return string
+ */
+ public function getCertificatePem() {
+ // need to be overwritten
+ return null;
+ }
+
+ /**
+ * checks validity of the signature
+ * @param string $clientDataHash
+ * @return bool
+ * @throws WebAuthnException
+ */
+ public function validateAttestation($clientDataHash) {
+ // need to be overwritten
+ return false;
+ }
+
+ /**
+ * validates the certificate against root certificates
+ * @param array $rootCas
+ * @return boolean
+ * @throws WebAuthnException
+ */
+ public function validateRootCertificate($rootCas) {
+ // need to be overwritten
+ return false;
+ }
+
+
+ /**
+ * create a PEM encoded certificate with X.509 binary data
+ * @param string $x5c
+ * @return string
+ */
+ protected function _createCertificatePem($x5c) {
+ $pem = '-----BEGIN CERTIFICATE-----' . "\n";
+ $pem .= \chunk_split(\base64_encode($x5c), 64, "\n");
+ $pem .= '-----END CERTIFICATE-----' . "\n";
+ return $pem;
+ }
+
+ /**
+ * creates a PEM encoded chain file
+ * @return type
+ */
+ protected function _createX5cChainFile() {
+ $content = '';
+ if (\is_array($this->_x5c_chain) && \count($this->_x5c_chain) > 0) {
+ foreach ($this->_x5c_chain as $x5c) {
+ $certInfo = \openssl_x509_parse($this->_createCertificatePem($x5c));
+ // check if issuer = subject (self signed)
+ if (\is_array($certInfo) && \is_array($certInfo['issuer']) && \is_array($certInfo['subject'])) {
+ $selfSigned = true;
+ foreach ($certInfo['issuer'] as $k => $v) {
+ if ($certInfo['subject'][$k] !== $v) {
+ $selfSigned = false;
+ break;
+ }
+ }
+
+ if (!$selfSigned) {
+ $content .= "\n" . $this->_createCertificatePem($x5c) . "\n";
+ }
+ }
+ }
+ }
+
+ if ($content) {
+ $this->_x5c_tempFile = \sys_get_temp_dir() . '/x5c_chain_' . \base_convert(\rand(), 10, 36) . '.pem';
+ if (\file_put_contents($this->_x5c_tempFile, $content) !== false) {
+ return $this->_x5c_tempFile;
+ }
+ }
+
+ return null;
+ }
+
+
+ /**
+ * returns the name and openssl key for provided cose number.
+ * @param int $coseNumber
+ * @return \stdClass|null
+ */
+ protected function _getCoseAlgorithm($coseNumber) {
+ // https://www.iana.org/assignments/cose/cose.xhtml#algorithms
+ $coseAlgorithms = array(
+ array(
+ 'hash' => 'SHA1',
+ 'openssl' => OPENSSL_ALGO_SHA1,
+ 'cose' => array(
+ -65535 // RS1
+ )),
+
+ array(
+ 'hash' => 'SHA256',
+ 'openssl' => OPENSSL_ALGO_SHA256,
+ 'cose' => array(
+ -257, // RS256
+ -37, // PS256
+ -7, // ES256
+ 5 // HMAC256
+ )),
+
+ array(
+ 'hash' => 'SHA384',
+ 'openssl' => OPENSSL_ALGO_SHA384,
+ 'cose' => array(
+ -258, // RS384
+ -38, // PS384
+ -35, // ES384
+ 6 // HMAC384
+ )),
+
+ array(
+ 'hash' => 'SHA512',
+ 'openssl' => OPENSSL_ALGO_SHA512,
+ 'cose' => array(
+ -259, // RS512
+ -39, // PS512
+ -36, // ES512
+ 7 // HMAC512
+ ))
+ );
+
+ foreach ($coseAlgorithms as $coseAlgorithm) {
+ if (\in_array($coseNumber, $coseAlgorithm['cose'], true)) {
+ $return = new \stdClass();
+ $return->hash = $coseAlgorithm['hash'];
+ $return->openssl = $coseAlgorithm['openssl'];
+ return $return;
+ }
+ }
+
+ return null;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/Format/None.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/Format/None.php
new file mode 100644
index 0000000..1664c55
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/Format/None.php
@@ -0,0 +1,39 @@
+<?php
+
+
+namespace WebAuthn\Attestation\Format;
+use WebAuthn\WebAuthnException;
+
+class None extends FormatBase {
+
+
+ public function __construct($AttestionObject, \WebAuthn\Attestation\AuthenticatorData $authenticatorData) {
+ parent::__construct($AttestionObject, $authenticatorData);
+ }
+
+
+ /*
+ * returns the key certificate in PEM format
+ * @return string
+ */
+ public function getCertificatePem() {
+ return null;
+ }
+
+ /**
+ * @param string $clientDataHash
+ */
+ public function validateAttestation($clientDataHash) {
+ return true;
+ }
+
+ /**
+ * validates the certificate against root certificates
+ * @param array $rootCas
+ * @return boolean
+ * @throws WebAuthnException
+ */
+ public function validateRootCertificate($rootCas) {
+ return true;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/Format/Packed.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/Format/Packed.php
new file mode 100644
index 0000000..f996413
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/Format/Packed.php
@@ -0,0 +1,138 @@
+<?php
+
+
+namespace WebAuthn\Attestation\Format;
+use WebAuthn\WebAuthnException;
+use WebAuthn\Binary\ByteBuffer;
+
+class Packed extends FormatBase {
+ private $_alg;
+ private $_signature;
+ private $_x5c;
+
+ public function __construct($AttestionObject, \WebAuthn\Attestation\AuthenticatorData $authenticatorData) {
+ parent::__construct($AttestionObject, $authenticatorData);
+
+ // check packed data
+ $attStmt = $this->_attestationObject['attStmt'];
+
+ if (!\array_key_exists('alg', $attStmt) || $this->_getCoseAlgorithm($attStmt['alg']) === null) {
+ throw new WebAuthnException('unsupported alg: ' . $attStmt['alg'], WebAuthnException::INVALID_DATA);
+ }
+
+ if (!\array_key_exists('sig', $attStmt) || !\is_object($attStmt['sig']) || !($attStmt['sig'] instanceof ByteBuffer)) {
+ throw new WebAuthnException('no signature found', WebAuthnException::INVALID_DATA);
+ }
+
+ $this->_alg = $attStmt['alg'];
+ $this->_signature = $attStmt['sig']->getBinaryString();
+
+ // certificate for validation
+ if (\array_key_exists('x5c', $attStmt) && \is_array($attStmt['x5c']) && \count($attStmt['x5c']) > 0) {
+
+ // The attestation certificate attestnCert MUST be the first element in the array
+ $attestnCert = array_shift($attStmt['x5c']);
+
+ if (!($attestnCert instanceof ByteBuffer)) {
+ throw new WebAuthnException('invalid x5c certificate', WebAuthnException::INVALID_DATA);
+ }
+
+ $this->_x5c = $attestnCert->getBinaryString();
+
+ // certificate chain
+ foreach ($attStmt['x5c'] as $chain) {
+ if ($chain instanceof ByteBuffer) {
+ $this->_x5c_chain[] = $chain->getBinaryString();
+ }
+ }
+ }
+ }
+
+
+ /*
+ * returns the key certificate in PEM format
+ * @return string|null
+ */
+ public function getCertificatePem() {
+ if (!$this->_x5c) {
+ return null;
+ }
+ return $this->_createCertificatePem($this->_x5c);
+ }
+
+ /**
+ * @param string $clientDataHash
+ */
+ public function validateAttestation($clientDataHash) {
+ if ($this->_x5c) {
+ return $this->_validateOverX5c($clientDataHash);
+ } else {
+ return $this->_validateSelfAttestation($clientDataHash);
+ }
+ }
+
+ /**
+ * validates the certificate against root certificates
+ * @param array $rootCas
+ * @return boolean
+ * @throws WebAuthnException
+ */
+ public function validateRootCertificate($rootCas) {
+ if (!$this->_x5c) {
+ return false;
+ }
+
+ $chainC = $this->_createX5cChainFile();
+ if ($chainC) {
+ $rootCas[] = $chainC;
+ }
+
+ $v = \openssl_x509_checkpurpose($this->getCertificatePem(), -1, $rootCas);
+ if ($v === -1) {
+ throw new WebAuthnException('error on validating root certificate: ' . \openssl_error_string(), WebAuthnException::CERTIFICATE_NOT_TRUSTED);
+ }
+ return $v;
+ }
+
+ /**
+ * validate if x5c is present
+ * @param string $clientDataHash
+ * @return bool
+ * @throws WebAuthnException
+ */
+ protected function _validateOverX5c($clientDataHash) {
+ $publicKey = \openssl_pkey_get_public($this->getCertificatePem());
+
+ if ($publicKey === false) {
+ throw new WebAuthnException('invalid public key: ' . \openssl_error_string(), WebAuthnException::INVALID_PUBLIC_KEY);
+ }
+
+ // Verify that sig is a valid signature over the concatenation of authenticatorData and clientDataHash
+ // using the attestation public key in attestnCert with the algorithm specified in alg.
+ $dataToVerify = $this->_authenticatorData->getBinary();
+ $dataToVerify .= $clientDataHash;
+
+ $coseAlgorithm = $this->_getCoseAlgorithm($this->_alg);
+
+ // check certificate
+ return \openssl_verify($dataToVerify, $this->_signature, $publicKey, $coseAlgorithm->openssl) === 1;
+ }
+
+ /**
+ * validate if self attestation is in use
+ * @param string $clientDataHash
+ * @return bool
+ */
+ protected function _validateSelfAttestation($clientDataHash) {
+ // Verify that sig is a valid signature over the concatenation of authenticatorData and clientDataHash
+ // using the credential public key with alg.
+ $dataToVerify = $this->_authenticatorData->getBinary();
+ $dataToVerify .= $clientDataHash;
+
+ $publicKey = $this->_authenticatorData->getPublicKeyPem();
+
+ // check certificate
+ return \openssl_verify($dataToVerify, $this->_signature, $publicKey, OPENSSL_ALGO_SHA256) === 1;
+ }
+}
+
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/Format/Tpm.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/Format/Tpm.php
new file mode 100644
index 0000000..32bb766
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/Format/Tpm.php
@@ -0,0 +1,179 @@
+<?php
+
+
+namespace WebAuthn\Attestation\Format;
+use WebAuthn\WebAuthnException;
+use WebAuthn\Binary\ByteBuffer;
+
+class Tpm extends FormatBase {
+ private $_TPM_GENERATED_VALUE = "\xFF\x54\x43\x47";
+ private $_TPM_ST_ATTEST_CERTIFY = "\x80\x17";
+ private $_alg;
+ private $_signature;
+ private $_pubArea;
+ private $_x5c;
+
+ /**
+ * @var ByteBuffer
+ */
+ private $_certInfo;
+
+
+ public function __construct($AttestionObject, \WebAuthn\Attestation\AuthenticatorData $authenticatorData) {
+ parent::__construct($AttestionObject, $authenticatorData);
+
+ // check packed data
+ $attStmt = $this->_attestationObject['attStmt'];
+
+ if (!\array_key_exists('ver', $attStmt) || $attStmt['ver'] !== '2.0') {
+ throw new WebAuthnException('invalid tpm version: ' . $attStmt['ver'], WebAuthnException::INVALID_DATA);
+ }
+
+ if (!\array_key_exists('alg', $attStmt) || $this->_getCoseAlgorithm($attStmt['alg']) === null) {
+ throw new WebAuthnException('unsupported alg: ' . $attStmt['alg'], WebAuthnException::INVALID_DATA);
+ }
+
+ if (!\array_key_exists('sig', $attStmt) || !\is_object($attStmt['sig']) || !($attStmt['sig'] instanceof ByteBuffer)) {
+ throw new WebAuthnException('signature not found', WebAuthnException::INVALID_DATA);
+ }
+
+ if (!\array_key_exists('certInfo', $attStmt) || !\is_object($attStmt['certInfo']) || !($attStmt['certInfo'] instanceof ByteBuffer)) {
+ throw new WebAuthnException('certInfo not found', WebAuthnException::INVALID_DATA);
+ }
+
+ if (!\array_key_exists('pubArea', $attStmt) || !\is_object($attStmt['pubArea']) || !($attStmt['pubArea'] instanceof ByteBuffer)) {
+ throw new WebAuthnException('pubArea not found', WebAuthnException::INVALID_DATA);
+ }
+
+ $this->_alg = $attStmt['alg'];
+ $this->_signature = $attStmt['sig']->getBinaryString();
+ $this->_certInfo = $attStmt['certInfo'];
+ $this->_pubArea = $attStmt['pubArea'];
+
+ // certificate for validation
+ if (\array_key_exists('x5c', $attStmt) && \is_array($attStmt['x5c']) && \count($attStmt['x5c']) > 0) {
+
+ // The attestation certificate attestnCert MUST be the first element in the array
+ $attestnCert = array_shift($attStmt['x5c']);
+
+ if (!($attestnCert instanceof ByteBuffer)) {
+ throw new WebAuthnException('invalid x5c certificate', WebAuthnException::INVALID_DATA);
+ }
+
+ $this->_x5c = $attestnCert->getBinaryString();
+
+ // certificate chain
+ foreach ($attStmt['x5c'] as $chain) {
+ if ($chain instanceof ByteBuffer) {
+ $this->_x5c_chain[] = $chain->getBinaryString();
+ }
+ }
+
+ } else {
+ throw new WebAuthnException('no x5c certificate found', WebAuthnException::INVALID_DATA);
+ }
+ }
+
+
+ /*
+ * returns the key certificate in PEM format
+ * @return string|null
+ */
+ public function getCertificatePem() {
+ if (!$this->_x5c) {
+ return null;
+ }
+ return $this->_createCertificatePem($this->_x5c);
+ }
+
+ /**
+ * @param string $clientDataHash
+ */
+ public function validateAttestation($clientDataHash) {
+ return $this->_validateOverX5c($clientDataHash);
+ }
+
+ /**
+ * validates the certificate against root certificates
+ * @param array $rootCas
+ * @return boolean
+ * @throws WebAuthnException
+ */
+ public function validateRootCertificate($rootCas) {
+ if (!$this->_x5c) {
+ return false;
+ }
+
+ $chainC = $this->_createX5cChainFile();
+ if ($chainC) {
+ $rootCas[] = $chainC;
+ }
+
+ $v = \openssl_x509_checkpurpose($this->getCertificatePem(), -1, $rootCas);
+ if ($v === -1) {
+ throw new WebAuthnException('error on validating root certificate: ' . \openssl_error_string(), WebAuthnException::CERTIFICATE_NOT_TRUSTED);
+ }
+ return $v;
+ }
+
+ /**
+ * validate if x5c is present
+ * @param string $clientDataHash
+ * @return bool
+ * @throws WebAuthnException
+ */
+ protected function _validateOverX5c($clientDataHash) {
+ $publicKey = \openssl_pkey_get_public($this->getCertificatePem());
+
+ if ($publicKey === false) {
+ throw new WebAuthnException('invalid public key: ' . \openssl_error_string(), WebAuthnException::INVALID_PUBLIC_KEY);
+ }
+
+ // Concatenate authenticatorData and clientDataHash to form attToBeSigned.
+ $attToBeSigned = $this->_authenticatorData->getBinary();
+ $attToBeSigned .= $clientDataHash;
+
+ // Validate that certInfo is valid:
+
+ // Verify that magic is set to TPM_GENERATED_VALUE.
+ if ($this->_certInfo->getBytes(0, 4) !== $this->_TPM_GENERATED_VALUE) {
+ throw new WebAuthnException('tpm magic not TPM_GENERATED_VALUE', WebAuthnException::INVALID_DATA);
+ }
+
+ // Verify that type is set to TPM_ST_ATTEST_CERTIFY.
+ if ($this->_certInfo->getBytes(4, 2) !== $this->_TPM_ST_ATTEST_CERTIFY) {
+ throw new WebAuthnException('tpm type not TPM_ST_ATTEST_CERTIFY', WebAuthnException::INVALID_DATA);
+ }
+
+ $offset = 6;
+ $qualifiedSigner = $this->_tpmReadLengthPrefixed($this->_certInfo, $offset);
+ $extraData = $this->_tpmReadLengthPrefixed($this->_certInfo, $offset);
+ $coseAlg = $this->_getCoseAlgorithm($this->_alg);
+
+ // Verify that extraData is set to the hash of attToBeSigned using the hash algorithm employed in "alg".
+ if ($extraData->getBinaryString() !== \hash($coseAlg->hash, $attToBeSigned, true)) {
+ throw new WebAuthnException('certInfo:extraData not hash of attToBeSigned', WebAuthnException::INVALID_DATA);
+ }
+
+ // Verify the sig is a valid signature over certInfo using the attestation
+ // public key in aikCert with the algorithm specified in alg.
+ return \openssl_verify($this->_certInfo->getBinaryString(), $this->_signature, $publicKey, $coseAlg->openssl) === 1;
+ }
+
+
+ /**
+ * returns next part of ByteBuffer
+ * @param ByteBuffer $buffer
+ * @param int $offset
+ * @return ByteBuffer
+ */
+ protected function _tpmReadLengthPrefixed(ByteBuffer $buffer, &$offset) {
+ $len = $buffer->getUint16Val($offset);
+ $data = $buffer->getBytes($offset + 2, $len);
+ $offset += (2 + $len);
+
+ return new ByteBuffer($data);
+ }
+
+}
+
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/Format/U2f.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/Format/U2f.php
new file mode 100644
index 0000000..630b154
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Attestation/Format/U2f.php
@@ -0,0 +1,93 @@
+<?php
+
+
+namespace WebAuthn\Attestation\Format;
+use WebAuthn\WebAuthnException;
+use WebAuthn\Binary\ByteBuffer;
+
+class U2f extends FormatBase {
+ private $_alg;
+ private $_signature;
+ private $_x5c;
+
+ public function __construct($AttestionObject, \WebAuthn\Attestation\AuthenticatorData $authenticatorData) {
+ parent::__construct($AttestionObject, $authenticatorData);
+
+ // check u2f data
+ $attStmt = $this->_attestationObject['attStmt'];
+
+ if (!\array_key_exists('alg', $attStmt) || $this->_getCoseAlgorithm($attStmt['alg']) === null) {
+ throw new WebAuthnException('unsupported alg: ' . $attStmt['alg'], WebAuthnException::INVALID_DATA);
+ }
+
+ if (!\array_key_exists('sig', $attStmt) || !\is_object($attStmt['sig']) || !($attStmt['sig'] instanceof ByteBuffer)) {
+ throw new WebAuthnException('no signature found', WebAuthnException::INVALID_DATA);
+ }
+
+ if (!\array_key_exists('x5c', $attStmt) || !\is_array($attStmt['x5c']) || \count($attStmt['x5c']) !== 1) {
+ throw new WebAuthnException('invalid x5c certificate', WebAuthnException::INVALID_DATA);
+ }
+
+ if (!\is_object($attStmt['x5c'][0]) || !($attStmt['x5c'][0] instanceof ByteBuffer)) {
+ throw new WebAuthnException('invalid x5c certificate', WebAuthnException::INVALID_DATA);
+ }
+
+ $this->_alg = $attStmt['alg'];
+ $this->_signature = $attStmt['sig']->getBinaryString();
+ $this->_x5c = $attStmt['x5c'][0]->getBinaryString();
+ }
+
+
+ /*
+ * returns the key certificate in PEM format
+ * @return string
+ */
+ public function getCertificatePem() {
+ $pem = '-----BEGIN CERTIFICATE-----' . "\n";
+ $pem .= \chunk_split(\base64_encode($this->_x5c), 64, "\n");
+ $pem .= '-----END CERTIFICATE-----' . "\n";
+ return $pem;
+ }
+
+ /**
+ * @param string $clientDataHash
+ */
+ public function validateAttestation($clientDataHash) {
+ $publicKey = \openssl_pkey_get_public($this->getCertificatePem());
+
+ if ($publicKey === false) {
+ throw new WebAuthnException('invalid public key: ' . \openssl_error_string(), WebAuthnException::INVALID_PUBLIC_KEY);
+ }
+
+ // Let verificationData be the concatenation of (0x00 || rpIdHash || clientDataHash || credentialId || publicKeyU2F)
+ $dataToVerify = "\x00";
+ $dataToVerify .= $this->_authenticatorData->getRpIdHash();
+ $dataToVerify .= $clientDataHash;
+ $dataToVerify .= $this->_authenticatorData->getCredentialId();
+ $dataToVerify .= $this->_authenticatorData->getPublicKeyU2F();
+
+ $coseAlgorithm = $this->_getCoseAlgorithm($this->_alg);
+
+ // check certificate
+ return \openssl_verify($dataToVerify, $this->_signature, $publicKey, $coseAlgorithm->openssl) === 1;
+ }
+
+ /**
+ * validates the certificate against root certificates
+ * @param array $rootCas
+ * @return boolean
+ * @throws WebAuthnException
+ */
+ public function validateRootCertificate($rootCas) {
+ $chainC = $this->_createX5cChainFile();
+ if ($chainC) {
+ $rootCas[] = $chainC;
+ }
+
+ $v = \openssl_x509_checkpurpose($this->getCertificatePem(), -1, $rootCas);
+ if ($v === -1) {
+ throw new WebAuthnException('error on validating root certificate: ' . \openssl_error_string(), WebAuthnException::CERTIFICATE_NOT_TRUSTED);
+ }
+ return $v;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Binary/ByteBuffer.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Binary/ByteBuffer.php
new file mode 100644
index 0000000..dd0eec7
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/Binary/ByteBuffer.php
@@ -0,0 +1,255 @@
+<?php
+
+
+namespace WebAuthn\Binary;
+use WebAuthn\WebAuthnException;
+
+/**
+ * Modified version of https://github.com/madwizard-thomas/webauthn-server/blob/master/src/Format/ByteBuffer.php
+ * Copyright © 2018 Thomas Bleeker - MIT licensed
+ * Modified by Lukas Buchs
+ * Thanks Thomas for your work!
+ */
+class ByteBuffer implements \JsonSerializable, \Serializable {
+ /**
+ * @var bool
+ */
+ public static $useBase64UrlEncoding = false;
+
+ /**
+ * @var string
+ */
+ private $_data;
+
+ /**
+ * @var int
+ */
+ private $_length;
+
+ public function __construct($binaryData) {
+ $this->_data = $binaryData;
+ $this->_length = \strlen($binaryData);
+ }
+
+
+ // -----------------------
+ // PUBLIC STATIC
+ // -----------------------
+
+ /**
+ * create a ByteBuffer from a base64 url encoded string
+ * @param string $base64url
+ * @return \WebAuthn\Binary\ByteBuffer
+ */
+ public static function fromBase64Url($base64url) {
+ $bin = self::_base64url_decode($base64url);
+ if ($bin === false) {
+ throw new WebAuthnException('ByteBuffer: Invalid base64 url string', WebAuthnException::BYTEBUFFER);
+ }
+ return new ByteBuffer($bin);
+ }
+
+ /**
+ * create a ByteBuffer from a base64 url encoded string
+ * @param string $hex
+ * @return \WebAuthn\Binary\ByteBuffer
+ */
+ public static function fromHex($hex) {
+ $bin = \hex2bin($hex);
+ if ($bin === false) {
+ throw new WebAuthnException('ByteBuffer: Invalid hex string', WebAuthnException::BYTEBUFFER);
+ }
+ return new ByteBuffer($bin);
+ }
+
+ /**
+ * create a random ByteBuffer
+ * @param string $length
+ * @return \WebAuthn\Binary\ByteBuffer
+ */
+ public static function randomBuffer($length) {
+ if (\function_exists('random_bytes')) { // >PHP 7.0
+ return new ByteBuffer(\random_bytes($length));
+
+ } else if (\function_exists('openssl_random_pseudo_bytes')) {
+ return new ByteBuffer(\openssl_random_pseudo_bytes($length));
+
+ } else {
+ throw new WebAuthnException('ByteBuffer: cannot generate random bytes', WebAuthnException::BYTEBUFFER);
+ }
+ }
+
+ // -----------------------
+ // PUBLIC
+ // -----------------------
+
+ public function getBytes($offset, $length) {
+ if ($offset < 0 || $length < 0 || ($offset + $length > $this->_length)) {
+ throw new WebAuthnException('ByteBuffer: Invalid offset or length', WebAuthnException::BYTEBUFFER);
+ }
+ return \substr($this->_data, $offset, $length);
+ }
+
+ public function getByteVal($offset) {
+ if ($offset < 0 || $offset >= $this->_length) {
+ throw new WebAuthnException('ByteBuffer: Invalid offset', WebAuthnException::BYTEBUFFER);
+ }
+ return \ord(\substr($this->_data, $offset, 1));
+ }
+
+ public function getLength() {
+ return $this->_length;
+ }
+
+ public function getUint16Val($offset) {
+ if ($offset < 0 || ($offset + 2) > $this->_length) {
+ throw new WebAuthnException('ByteBuffer: Invalid offset', WebAuthnException::BYTEBUFFER);
+ }
+ return unpack('n', $this->_data, $offset)[1];
+ }
+
+ public function getUint32Val($offset) {
+ if ($offset < 0 || ($offset + 4) > $this->_length) {
+ throw new WebAuthnException('ByteBuffer: Invalid offset', WebAuthnException::BYTEBUFFER);
+ }
+ $val = unpack('N', $this->_data, $offset)[1];
+
+ // Signed integer overflow causes signed negative numbers
+ if ($val < 0) {
+ throw new WebAuthnException('ByteBuffer: Value out of integer range.', WebAuthnException::BYTEBUFFER);
+ }
+ return $val;
+ }
+
+ public function getUint64Val($offset) {
+ if (PHP_INT_SIZE < 8) {
+ throw new WebAuthnException('ByteBuffer: 64-bit values not supported by this system', WebAuthnException::BYTEBUFFER);
+ }
+ if ($offset < 0 || ($offset + 8) > $this->_length) {
+ throw new WebAuthnException('ByteBuffer: Invalid offset', WebAuthnException::BYTEBUFFER);
+ }
+ $val = unpack('J', $this->_data, $offset)[1];
+
+ // Signed integer overflow causes signed negative numbers
+ if ($val < 0) {
+ throw new WebAuthnException('ByteBuffer: Value out of integer range.', WebAuthnException::BYTEBUFFER);
+ }
+
+ return $val;
+ }
+
+ public function getHalfFloatVal($offset) {
+ //FROM spec pseudo decode_half(unsigned char *halfp)
+ $half = $this->getUint16Val($offset);
+
+ $exp = ($half >> 10) & 0x1f;
+ $mant = $half & 0x3ff;
+
+ if ($exp === 0) {
+ $val = $mant * (2 ** -24);
+ } elseif ($exp !== 31) {
+ $val = ($mant + 1024) * (2 ** ($exp - 25));
+ } else {
+ $val = ($mant === 0) ? INF : NAN;
+ }
+
+ return ($half & 0x8000) ? -$val : $val;
+ }
+
+ public function getFloatVal($offset) {
+ if ($offset < 0 || ($offset + 4) > $this->_length) {
+ throw new WebAuthnException('ByteBuffer: Invalid offset', WebAuthnException::BYTEBUFFER);
+ }
+ return unpack('G', $this->_data, $offset)[1];
+ }
+
+ public function getDoubleVal($offset) {
+ if ($offset < 0 || ($offset + 8) > $this->_length) {
+ throw new WebAuthnException('ByteBuffer: Invalid offset', WebAuthnException::BYTEBUFFER);
+ }
+ return unpack('E', $this->_data, $offset)[1];
+ }
+
+ /**
+ * @return string
+ */
+ public function getBinaryString() {
+ return $this->_data;
+ }
+
+ /**
+ * @param string $buffer
+ * @return bool
+ */
+ public function equals($buffer) {
+ return is_string($this->_data) && $this->_data === $buffer->data;
+ }
+
+ /**
+ * @return string
+ */
+ public function getHex() {
+ return \bin2hex($this->_data);
+ }
+
+ /**
+ * @return bool
+ */
+ public function isEmpty() {
+ return $this->_length === 0;
+ }
+
+
+ /**
+ * jsonSerialize interface
+ * return binary data in RFC 1342-Like serialized string
+ * @return \stdClass
+ */
+ public function jsonSerialize() {
+ if (ByteBuffer::$useBase64UrlEncoding) {
+ return self::_base64url_encode($this->_data);
+
+ } else {
+ return '=?BINARY?B?' . \base64_encode($this->_data) . '?=';
+ }
+ }
+
+ /**
+ * Serializable-Interface
+ * @return string
+ */
+ public function serialize() {
+ return \serialize($this->_data);
+ }
+
+ /**
+ * Serializable-Interface
+ * @param string $serialized
+ */
+ public function unserialize($serialized) {
+ $this->_data = \unserialize($serialized);
+ $this->_length = \strlen($this->_data);
+ }
+
+ // -----------------------
+ // PROTECTED STATIC
+ // -----------------------
+
+ /**
+ * base64 url decoding
+ * @param string $data
+ * @return string
+ */
+ protected static function _base64url_decode($data) {
+ return \base64_decode(\strtr($data, '-_', '+/') . \str_repeat('=', 3 - (3 + \strlen($data)) % 4));
+ }
+
+ /**
+ * base64 url encoding
+ * @param string $data
+ * @return string
+ */
+ protected static function _base64url_encode($data) {
+ return \rtrim(\strtr(\base64_encode($data), '+/', '-_'), '=');
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/CBOR/CborDecoder.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/CBOR/CborDecoder.php
new file mode 100644
index 0000000..45626eb
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/CBOR/CborDecoder.php
@@ -0,0 +1,220 @@
+<?php
+
+
+namespace WebAuthn\CBOR;
+use WebAuthn\WebAuthnException;
+use WebAuthn\Binary\ByteBuffer;
+
+/**
+ * Modified version of https://github.com/madwizard-thomas/webauthn-server/blob/master/src/Format/CborDecoder.php
+ * Copyright © 2018 Thomas Bleeker - MIT licensed
+ * Modified by Lukas Buchs
+ * Thanks Thomas for your work!
+ */
+class CborDecoder {
+ const CBOR_MAJOR_UNSIGNED_INT = 0;
+ const CBOR_MAJOR_TEXT_STRING = 3;
+ const CBOR_MAJOR_FLOAT_SIMPLE = 7;
+ const CBOR_MAJOR_NEGATIVE_INT = 1;
+ const CBOR_MAJOR_ARRAY = 4;
+ const CBOR_MAJOR_TAG = 6;
+ const CBOR_MAJOR_MAP = 5;
+ const CBOR_MAJOR_BYTE_STRING = 2;
+
+ /**
+ * @param ByteBuffer|string $bufOrBin
+ * @return mixed
+ * @throws WebAuthnException
+ */
+ public static function decode($bufOrBin) {
+ $buf = $bufOrBin instanceof ByteBuffer ? $bufOrBin : new ByteBuffer($bufOrBin);
+
+ $offset = 0;
+ $result = self::_parseItem($buf, $offset);
+ if ($offset !== $buf->getLength()) {
+ throw new WebAuthnException('Unused bytes after data item.', WebAuthnException::CBOR);
+ }
+ return $result;
+ }
+
+ /**
+ * @param ByteBuffer|string $bufOrBin
+ * @param int $startOffset
+ * @param int|null $endOffset
+ * @return mixed
+ */
+ public static function decodeInPlace($bufOrBin, $startOffset, &$endOffset = null) {
+ $buf = $bufOrBin instanceof ByteBuffer ? $bufOrBin : new ByteBuffer($bufOrBin);
+
+ $offset = $startOffset;
+ $data = self::_parseItem($buf, $offset);
+ $endOffset = $offset;
+ return $data;
+ }
+
+ // ---------------------
+ // protected
+ // ---------------------
+
+ /**
+ * @param ByteBuffer $buf
+ * @param int $offset
+ * @return mixed
+ */
+ protected static function _parseItem(ByteBuffer $buf, &$offset) {
+ $first = $buf->getByteVal($offset++);
+ $type = $first >> 5;
+ $val = $first & 0b11111;
+
+ if ($type === self::CBOR_MAJOR_FLOAT_SIMPLE) {
+ return self::_parseFloatSimple($val, $buf, $offset);
+ }
+
+ $val = self::_parseExtraLength($val, $buf, $offset);
+
+ return self::_parseItemData($type, $val, $buf, $offset);
+ }
+
+ protected static function _parseFloatSimple($val, ByteBuffer $buf, &$offset) {
+ switch ($val) {
+ case 24:
+ $val = $buf->getByteVal($offset);
+ $offset++;
+ return self::_parseSimple($val);
+
+ case 25:
+ $floatValue = $buf->getHalfFloatVal($offset);
+ $offset += 2;
+ return $floatValue;
+
+ case 26:
+ $floatValue = $buf->getFloatVal($offset);
+ $offset += 4;
+ return $floatValue;
+
+ case 27:
+ $floatValue = $buf->getDoubleVal($offset);
+ $offset += 8;
+ return $floatValue;
+
+ case 28:
+ case 29:
+ case 30:
+ throw new WebAuthnException('Reserved value used.', WebAuthnException::CBOR);
+
+ case 31:
+ throw new WebAuthnException('Indefinite length is not supported.', WebAuthnException::CBOR);
+ }
+
+ return self::_parseSimple($val);
+ }
+
+ /**
+ * @param int $val
+ * @return mixed
+ * @throws WebAuthnException
+ */
+ protected static function _parseSimple($val) {
+ if ($val === 20) {
+ return false;
+ }
+ if ($val === 21) {
+ return true;
+ }
+ if ($val === 22) {
+ return null;
+ }
+ throw new WebAuthnException(sprintf('Unsupported simple value %d.', $val), WebAuthnException::CBOR);
+ }
+
+ protected static function _parseExtraLength($val, ByteBuffer $buf, &$offset) {
+ switch ($val) {
+ case 24:
+ $val = $buf->getByteVal($offset);
+ $offset++;
+ break;
+
+ case 25:
+ $val = $buf->getUint16Val($offset);
+ $offset += 2;
+ break;
+
+ case 26:
+ $val = $buf->getUint32Val($offset);
+ $offset += 4;
+ break;
+
+ case 27:
+ $val = $buf->getUint64Val($offset);
+ $offset += 8;
+ break;
+
+ case 28:
+ case 29:
+ case 30:
+ throw new WebAuthnException('Reserved value used.', WebAuthnException::CBOR);
+
+ case 31:
+ throw new WebAuthnException('Indefinite length is not supported.', WebAuthnException::CBOR);
+ }
+
+ return $val;
+ }
+
+ protected static function _parseItemData($type, $val, ByteBuffer $buf, &$offset) {
+ switch ($type) {
+ case self::CBOR_MAJOR_UNSIGNED_INT: // uint
+ return $val;
+
+ case self::CBOR_MAJOR_NEGATIVE_INT:
+ return -1 - $val;
+
+ case self::CBOR_MAJOR_BYTE_STRING:
+ $data = $buf->getBytes($offset, $val);
+ $offset += $val;
+ return new ByteBuffer($data); // bytes
+
+ case self::CBOR_MAJOR_TEXT_STRING:
+ $data = $buf->getBytes($offset, $val);
+ $offset += $val;
+ return $data; // UTF-8
+
+ case self::CBOR_MAJOR_ARRAY:
+ return self::_parseArray($buf, $offset, $val);
+
+ case self::CBOR_MAJOR_MAP:
+ return self::_parseMap($buf, $offset, $val);
+
+ case self::CBOR_MAJOR_TAG:
+ return self::_parseItem($buf, $offset); // 1 embedded data item
+ }
+
+ // This should never be reached
+ throw new WebAuthnException(sprintf('Unknown major type %d.', $type), WebAuthnException::CBOR);
+ }
+
+ protected static function _parseMap(ByteBuffer $buf, &$offset, $count) {
+ $map = array();
+
+ for ($i = 0; $i < $count; $i++) {
+ $mapKey = self::_parseItem($buf, $offset);
+ $mapVal = self::_parseItem($buf, $offset);
+
+ if (!\is_int($mapKey) && !\is_string($mapKey)) {
+ throw new WebAuthnException('Can only use strings or integers as map keys', WebAuthnException::CBOR);
+ }
+
+ $map[$mapKey] = $mapVal; // todo dup
+ }
+ return $map;
+ }
+
+ protected static function _parseArray(ByteBuffer $buf, &$offset, $count) {
+ $arr = array();
+ for ($i = 0; $i < $count; $i++) {
+ $arr[] = self::_parseItem($buf, $offset);
+ }
+
+ return $arr;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/LICENSE b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/LICENSE
new file mode 100644
index 0000000..e24a2b6
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright © 2019 Lukas Buchs
+Copyright © 2018 Thomas Bleeker (CBOR & ByteBuffer part)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/WebAuthn.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/WebAuthn.php
new file mode 100644
index 0000000..950e4e4
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/WebAuthn.php
@@ -0,0 +1,495 @@
+<?php
+
+namespace WebAuthn;
+use WebAuthn\Binary\ByteBuffer;
+require_once 'WebAuthnException.php';
+require_once 'Binary/ByteBuffer.php';
+require_once 'Attestation/AttestationObject.php';
+require_once 'Attestation/AuthenticatorData.php';
+require_once 'Attestation/Format/FormatBase.php';
+require_once 'Attestation/Format/None.php';
+require_once 'Attestation/Format/AndroidKey.php';
+require_once 'Attestation/Format/AndroidSafetyNet.php';
+require_once 'Attestation/Format/Apple.php';
+require_once 'Attestation/Format/Packed.php';
+require_once 'Attestation/Format/Tpm.php';
+require_once 'Attestation/Format/U2f.php';
+require_once 'CBOR/CborDecoder.php';
+
+/**
+ * WebAuthn
+ * @author Lukas Buchs
+ * @license https://github.com/lbuchs/WebAuthn/blob/master/LICENSE MIT
+ */
+class WebAuthn {
+ // relying party
+ private $_rpName;
+ private $_rpId;
+ private $_rpIdHash;
+ private $_challenge;
+ private $_signatureCounter;
+ private $_caFiles;
+ private $_formats;
+
+ /**
+ * Initialize a new WebAuthn server
+ * @param string $rpName the relying party name
+ * @param string $rpId the relying party ID = the domain name
+ * @param bool $useBase64UrlEncoding true to use base64 url encoding for binary data in json objects. Default is a RFC 1342-Like serialized string.
+ * @throws WebAuthnException
+ */
+ public function __construct($rpName, $rpId, $allowedFormats=null, $useBase64UrlEncoding=false) {
+ $this->_rpName = $rpName;
+ $this->_rpId = $rpId;
+ $this->_rpIdHash = \hash('sha256', $rpId, true);
+ ByteBuffer::$useBase64UrlEncoding = !!$useBase64UrlEncoding;
+ $supportedFormats = array('android-key', 'android-safetynet', 'apple', 'fido-u2f', 'none', 'packed', 'tpm');
+
+ if (!\function_exists('\openssl_open')) {
+ throw new WebAuthnException('OpenSSL-Module not installed');;
+ }
+
+ if (!\in_array('SHA256', \array_map('\strtoupper', \openssl_get_md_methods()))) {
+ throw new WebAuthnException('SHA256 not supported by this openssl installation.');
+ }
+
+ // default: all format
+ if (!is_array($allowedFormats)) {
+ $allowedFormats = $supportedFormats;
+ }
+ $this->_formats = $allowedFormats;
+
+ // validate formats
+ $invalidFormats = \array_diff($this->_formats, $supportedFormats);
+ if (!$this->_formats || $invalidFormats) {
+ throw new WebAuthnException('invalid formats on construct: ' . implode(', ', $invalidFormats));
+ }
+ }
+
+ /**
+ * add a root certificate to verify new registrations
+ * @param string $path file path of / directory with root certificates
+ */
+ public function addRootCertificates($path) {
+ if (!\is_array($this->_caFiles)) {
+ $this->_caFiles = array();
+ }
+ $path = \rtrim(\trim($path), '\\/');
+ if (\is_dir($path)) {
+ foreach (\scandir($path) as $ca) {
+ if (\is_file($path . '/' . $ca)) {
+ $this->addRootCertificates($path . '/' . $ca);
+ }
+ }
+ } else if (\is_file($path) && !\in_array(\realpath($path), $this->_caFiles)) {
+ $this->_caFiles[] = \realpath($path);
+ }
+ }
+
+ /**
+ * Returns the generated challenge to save for later validation
+ * @return ByteBuffer
+ */
+ public function getChallenge() {
+ return $this->_challenge;
+ }
+
+ /**
+ * generates the object for a key registration
+ * provide this data to navigator.credentials.create
+ * @param string $userId
+ * @param string $userName
+ * @param string $userDisplayName
+ * @param int $timeout timeout in seconds
+ * @param bool $requireResidentKey true, if the key should be stored by the authentication device
+ * @param bool|string $requireUserVerification indicates that you require user verification and will fail the operation
+ * if the response does not have the UV flag set.
+ * Valid values:
+ * true = required
+ * false = preferred
+ * string 'required' 'preferred' 'discouraged'
+ * @param bool|null $crossPlatformAttachment true for cross-platform devices (eg. fido usb),
+ * false for platform devices (eg. windows hello, android safetynet),
+ * null for both
+ * @param array $excludeCredentialIds a array of ids, which are already registered, to prevent re-registration
+ * @return \stdClass
+ */
+ public function getCreateArgs($userId, $userName, $userDisplayName, $timeout=20, $requireResidentKey=false, $requireUserVerification=false, $crossPlatformAttachment=null, $excludeCredentialIds=array()) {
+
+ // validate User Verification Requirement
+ if (\is_bool($requireUserVerification)) {
+ $requireUserVerification = $requireUserVerification ? 'required' : 'preferred';
+ } else if (\is_string($requireUserVerification) && \in_array(\strtolower($requireUserVerification), ['required', 'preferred', 'discouraged'])) {
+ $requireUserVerification = \strtolower($requireUserVerification);
+ } else {
+ $requireUserVerification = 'preferred';
+ }
+
+ $args = new \stdClass();
+ $args->publicKey = new \stdClass();
+
+ // relying party
+ $args->publicKey->rp = new \stdClass();
+ $args->publicKey->rp->name = $this->_rpName;
+ $args->publicKey->rp->id = $this->_rpId;
+
+ $args->publicKey->authenticatorSelection = new \stdClass();
+ $args->publicKey->authenticatorSelection->userVerification = $requireUserVerification;
+ if ($requireResidentKey) {
+ $args->publicKey->authenticatorSelection->requireResidentKey = true;
+ }
+ if (is_bool($crossPlatformAttachment)) {
+ $args->publicKey->authenticatorSelection->authenticatorAttachment = $crossPlatformAttachment ? 'cross-platform' : 'platform';
+ }
+
+ // user
+ $args->publicKey->user = new \stdClass();
+ $args->publicKey->user->id = new ByteBuffer($userId); // binary
+ $args->publicKey->user->name = $userName;
+ $args->publicKey->user->displayName = $userDisplayName;
+
+ $args->publicKey->pubKeyCredParams = array();
+ $tmp = new \stdClass();
+ $tmp->type = 'public-key';
+ $tmp->alg = -7; // ES256
+ $args->publicKey->pubKeyCredParams[] = $tmp;
+ unset ($tmp);
+
+ $tmp = new \stdClass();
+ $tmp->type = 'public-key';
+ $tmp->alg = -257; // RS256
+ $args->publicKey->pubKeyCredParams[] = $tmp;
+ unset ($tmp);
+
+ // if there are root certificates added, we need direct attestation to validate
+ // against the root certificate. If there are no root-certificates added,
+ // anonymization ca are also accepted, because we can't validate the root anyway.
+ $attestation = 'indirect';
+ if (\is_array($this->_caFiles)) {
+ $attestation = 'direct';
+ }
+
+ $args->publicKey->attestation = \count($this->_formats) === 1 && \in_array('none', $this->_formats) ? 'none' : $attestation;
+ $args->publicKey->extensions = new \stdClass();
+ $args->publicKey->extensions->exts = true;
+ $args->publicKey->timeout = $timeout * 1000; // microseconds
+ $args->publicKey->challenge = $this->_createChallenge(); // binary
+
+ //prevent re-registration by specifying existing credentials
+ $args->publicKey->excludeCredentials = array();
+
+ if (is_array($excludeCredentialIds)) {
+ foreach ($excludeCredentialIds as $id) {
+ $tmp = new \stdClass();
+ $tmp->id = $id instanceof ByteBuffer ? $id : new ByteBuffer($id); // binary
+ $tmp->type = 'public-key';
+ $tmp->transports = array('usb', 'ble', 'nfc', 'internal');
+ $args->publicKey->excludeCredentials[] = $tmp;
+ unset ($tmp);
+ }
+ }
+
+ return $args;
+ }
+
+ /**
+ * generates the object for key validation
+ * Provide this data to navigator.credentials.get
+ * @param array $credentialIds binary
+ * @param int $timeout timeout in seconds
+ * @param bool $allowUsb allow removable USB
+ * @param bool $allowNfc allow Near Field Communication (NFC)
+ * @param bool $allowBle allow Bluetooth
+ * @param bool $allowInternal allow client device-specific transport. These authenticators are not removable from the client device.
+ * @param bool|string $requireUserVerification indicates that you require user verification and will fail the operation
+ * if the response does not have the UV flag set.
+ * Valid values:
+ * true = required
+ * false = preferred
+ * string 'required' 'preferred' 'discouraged'
+ * @return \stdClass
+ */
+ public function getGetArgs($credentialIds=array(), $timeout=20, $allowUsb=true, $allowNfc=true, $allowBle=true, $allowInternal=true, $requireUserVerification=false) {
+
+ // validate User Verification Requirement
+ if (\is_bool($requireUserVerification)) {
+ $requireUserVerification = $requireUserVerification ? 'required' : 'preferred';
+ } else if (\is_string($requireUserVerification) && \in_array(\strtolower($requireUserVerification), ['required', 'preferred', 'discouraged'])) {
+ $requireUserVerification = \strtolower($requireUserVerification);
+ } else {
+ $requireUserVerification = 'preferred';
+ }
+
+ $args = new \stdClass();
+ $args->publicKey = new \stdClass();
+ $args->publicKey->timeout = $timeout * 1000; // microseconds
+ $args->publicKey->challenge = $this->_createChallenge(); // binary
+ $args->publicKey->userVerification = $requireUserVerification;
+ $args->publicKey->rpId = $this->_rpId;
+
+ if (\is_array($credentialIds) && \count($credentialIds) > 0) {
+ $args->publicKey->allowCredentials = array();
+
+ foreach ($credentialIds as $id) {
+ $tmp = new \stdClass();
+ $tmp->id = $id instanceof ByteBuffer ? $id : new ByteBuffer($id); // binary
+ $tmp->transports = array();
+
+ if ($allowUsb) {
+ $tmp->transports[] = 'usb';
+ }
+ if ($allowNfc) {
+ $tmp->transports[] = 'nfc';
+ }
+ if ($allowBle) {
+ $tmp->transports[] = 'ble';
+ }
+ if ($allowInternal) {
+ $tmp->transports[] = 'internal';
+ }
+
+ $tmp->type = 'public-key';
+ $args->publicKey->allowCredentials[] = $tmp;
+ unset ($tmp);
+ }
+ }
+
+ return $args;
+ }
+
+ /**
+ * returns the new signature counter value.
+ * returns null if there is no counter
+ * @return ?int
+ */
+ public function getSignatureCounter() {
+ return \is_int($this->_signatureCounter) ? $this->_signatureCounter : null;
+ }
+
+ /**
+ * process a create request and returns data to save for future logins
+ * @param string $clientDataJSON binary from browser
+ * @param string $attestationObject binary from browser
+ * @param string|ByteBuffer $challenge binary used challange
+ * @param bool $requireUserVerification true, if the device must verify user (e.g. by biometric data or pin)
+ * @param bool $requireUserPresent false, if the device must NOT check user presence (e.g. by pressing a button)
+ * @return \stdClass
+ * @throws WebAuthnException
+ */
+ public function processCreate($clientDataJSON, $attestationObject, $challenge, $requireUserVerification=false, $requireUserPresent=true) {
+ $clientDataHash = \hash('sha256', $clientDataJSON, true);
+ $clientData = \json_decode($clientDataJSON);
+ $challenge = $challenge instanceof ByteBuffer ? $challenge : new ByteBuffer($challenge);
+
+ // security: https://www.w3.org/TR/webauthn/#registering-a-new-credential
+
+ // 2. Let C, the client data claimed as collected during the credential creation,
+ // be the result of running an implementation-specific JSON parser on JSONtext.
+ if (!\is_object($clientData)) {
+ throw new WebAuthnException('invalid client data', WebAuthnException::INVALID_DATA);
+ }
+
+ // 3. Verify that the value of C.type is webauthn.create.
+ if (!\property_exists($clientData, 'type') || $clientData->type !== 'webauthn.create') {
+ throw new WebAuthnException('invalid type', WebAuthnException::INVALID_TYPE);
+ }
+
+ // 4. Verify that the value of C.challenge matches the challenge that was sent to the authenticator in the create() call.
+ if (!\property_exists($clientData, 'challenge') || ByteBuffer::fromBase64Url($clientData->challenge)->getBinaryString() !== $challenge->getBinaryString()) {
+ throw new WebAuthnException('invalid challenge', WebAuthnException::INVALID_CHALLENGE);
+ }
+
+ // 5. Verify that the value of C.origin matches the Relying Party's origin.
+ if (!\property_exists($clientData, 'origin') || !$this->_checkOrigin($clientData->origin)) {
+ throw new WebAuthnException('invalid origin', WebAuthnException::INVALID_ORIGIN);
+ }
+
+ // Attestation
+ $attestationObject = new Attestation\AttestationObject($attestationObject, $this->_formats);
+
+ // 9. Verify that the RP ID hash in authData is indeed the SHA-256 hash of the RP ID expected by the RP.
+ if (!$attestationObject->validateRpIdHash($this->_rpIdHash)) {
+ throw new WebAuthnException('invalid rpId hash', WebAuthnException::INVALID_RELYING_PARTY);
+ }
+
+ // 14. Verify that attStmt is a correct attestation statement, conveying a valid attestation signature
+ if (!$attestationObject->validateAttestation($clientDataHash)) {
+ throw new WebAuthnException('invalid certificate signature', WebAuthnException::INVALID_SIGNATURE);
+ }
+
+ // 15. If validation is successful, obtain a list of acceptable trust anchors
+ if (is_array($this->_caFiles) && !$attestationObject->validateRootCertificate($this->_caFiles)) {
+ throw new WebAuthnException('invalid root certificate', WebAuthnException::CERTIFICATE_NOT_TRUSTED);
+ }
+
+ // 10. Verify that the User Present bit of the flags in authData is set.
+ if ($requireUserPresent && !$attestationObject->getAuthenticatorData()->getUserPresent()) {
+ throw new WebAuthnException('user not present during authentication', WebAuthnException::USER_PRESENT);
+ }
+
+ // 11. If user verification is required for this registration, verify that the User Verified bit of the flags in authData is set.
+ if ($requireUserVerification && !$attestationObject->getAuthenticatorData()->getUserVerified()) {
+ throw new WebAuthnException('user not verificated during authentication', WebAuthnException::USER_VERIFICATED);
+ }
+
+ $signCount = $attestationObject->getAuthenticatorData()->getSignCount();
+ if ($signCount > 0) {
+ $this->_signatureCounter = $signCount;
+ }
+
+ // prepare data to store for future logins
+ $data = new \stdClass();
+ $data->rpId = $this->_rpId;
+ $data->credentialId = $attestationObject->getAuthenticatorData()->getCredentialId();
+ $data->credentialPublicKey = $attestationObject->getAuthenticatorData()->getPublicKeyPem();
+ $data->certificateChain = $attestationObject->getCertificateChain();
+ $data->certificate = $attestationObject->getCertificatePem();
+ $data->certificateIssuer = $attestationObject->getCertificateIssuer();
+ $data->certificateSubject = $attestationObject->getCertificateSubject();
+ $data->signatureCounter = $this->_signatureCounter;
+ $data->AAGUID = $attestationObject->getAuthenticatorData()->getAAGUID();
+ return $data;
+ }
+
+
+ /**
+ * process a get request
+ * @param string $clientDataJSON binary from browser
+ * @param string $authenticatorData binary from browser
+ * @param string $signature binary from browser
+ * @param string $credentialPublicKey string PEM-formated public key from used credentialId
+ * @param string|ByteBuffer $challenge binary from used challange
+ * @param int $prevSignatureCnt signature count value of the last login
+ * @param bool $requireUserVerification true, if the device must verify user (e.g. by biometric data or pin)
+ * @param bool $requireUserPresent true, if the device must check user presence (e.g. by pressing a button)
+ * @return boolean true if get is successful
+ * @throws WebAuthnException
+ */
+ public function processGet($clientDataJSON, $authenticatorData, $signature, $credentialPublicKey, $challenge, $prevSignatureCnt=null, $requireUserVerification=false, $requireUserPresent=true) {
+ $authenticatorObj = new Attestation\AuthenticatorData($authenticatorData);
+ $clientDataHash = \hash('sha256', $clientDataJSON, true);
+ $clientData = \json_decode($clientDataJSON);
+ $challenge = $challenge instanceof ByteBuffer ? $challenge : new ByteBuffer($challenge);
+
+ // https://www.w3.org/TR/webauthn/#verifying-assertion
+
+ // 1. If the allowCredentials option was given when this authentication ceremony was initiated,
+ // verify that credential.id identifies one of the public key credentials that were listed in allowCredentials.
+ // -> TO BE VERIFIED BY IMPLEMENTATION
+
+ // 2. If credential.response.userHandle is present, verify that the user identified
+ // by this value is the owner of the public key credential identified by credential.id.
+ // -> TO BE VERIFIED BY IMPLEMENTATION
+
+ // 3. Using credential’s id attribute (or the corresponding rawId, if base64url encoding is
+ // inappropriate for your use case), look up the corresponding credential public key.
+ // -> TO BE LOOKED UP BY IMPLEMENTATION
+
+ // 5. Let JSONtext be the result of running UTF-8 decode on the value of cData.
+ if (!\is_object($clientData)) {
+ throw new WebAuthnException('invalid client data', WebAuthnException::INVALID_DATA);
+ }
+
+ // 7. Verify that the value of C.type is the string webauthn.get.
+ if (!\property_exists($clientData, 'type') || $clientData->type !== 'webauthn.get') {
+ throw new WebAuthnException('invalid type', WebAuthnException::INVALID_TYPE);
+ }
+
+ // 8. Verify that the value of C.challenge matches the challenge that was sent to the
+ // authenticator in the PublicKeyCredentialRequestOptions passed to the get() call.
+ if (!\property_exists($clientData, 'challenge') || ByteBuffer::fromBase64Url($clientData->challenge)->getBinaryString() !== $challenge->getBinaryString()) {
+ throw new WebAuthnException('invalid challenge', WebAuthnException::INVALID_CHALLENGE);
+ }
+
+ // 9. Verify that the value of C.origin matches the Relying Party's origin.
+ if (!\property_exists($clientData, 'origin') || !$this->_checkOrigin($clientData->origin)) {
+ throw new WebAuthnException('invalid origin', WebAuthnException::INVALID_ORIGIN);
+ }
+
+ // 11. Verify that the rpIdHash in authData is the SHA-256 hash of the RP ID expected by the Relying Party.
+ if ($authenticatorObj->getRpIdHash() !== $this->_rpIdHash) {
+ throw new WebAuthnException('invalid rpId hash', WebAuthnException::INVALID_RELYING_PARTY);
+ }
+
+ // 12. Verify that the User Present bit of the flags in authData is set
+ if ($requireUserPresent && !$authenticatorObj->getUserPresent()) {
+ throw new WebAuthnException('user not present during authentication', WebAuthnException::USER_PRESENT);
+ }
+
+ // 13. If user verification is required for this assertion, verify that the User Verified bit of the flags in authData is set.
+ if ($requireUserVerification && !$authenticatorObj->getUserVerified()) {
+ throw new WebAuthnException('user not verificated during authentication', WebAuthnException::USER_VERIFICATED);
+ }
+
+ // 14. Verify the values of the client extension outputs
+ // (extensions not implemented)
+
+ // 16. Using the credential public key looked up in step 3, verify that sig is a valid signature
+ // over the binary concatenation of authData and hash.
+ $dataToVerify = '';
+ $dataToVerify .= $authenticatorData;
+ $dataToVerify .= $clientDataHash;
+
+ $publicKey = \openssl_pkey_get_public($credentialPublicKey);
+ if ($publicKey === false) {
+ throw new WebAuthnException('public key invalid', WebAuthnException::INVALID_PUBLIC_KEY);
+ }
+
+ if (\openssl_verify($dataToVerify, $signature, $publicKey, OPENSSL_ALGO_SHA256) !== 1) {
+ throw new WebAuthnException('invalid signature', WebAuthnException::INVALID_SIGNATURE);
+ }
+
+ // 17. If the signature counter value authData.signCount is nonzero,
+ // if less than or equal to the signature counter value stored,
+ // is a signal that the authenticator may be cloned
+ $signatureCounter = $authenticatorObj->getSignCount();
+ if ($signatureCounter > 0) {
+ $this->_signatureCounter = $signatureCounter;
+ if ($prevSignatureCnt !== null && $prevSignatureCnt >= $signatureCounter) {
+ throw new WebAuthnException('signature counter not valid', WebAuthnException::SIGNATURE_COUNTER);
+ }
+ }
+
+ return true;
+ }
+
+ // -----------------------------------------------
+ // PRIVATE
+ // -----------------------------------------------
+
+ /**
+ * checks if the origin matchs the RP ID
+ * @param string $origin
+ * @return boolean
+ * @throws WebAuthnException
+ */
+ private function _checkOrigin($origin) {
+ // https://www.w3.org/TR/webauthn/#rp-id
+
+ // The origin's scheme must be https
+ if ($this->_rpId !== 'localhost' && \parse_url($origin, PHP_URL_SCHEME) !== 'https') {
+ return false;
+ }
+
+ // extract host from origin
+ $host = \parse_url($origin, PHP_URL_HOST);
+ $host = \trim($host, '.');
+
+ // The RP ID must be equal to the origin's effective domain, or a registrable
+ // domain suffix of the origin's effective domain.
+ return \preg_match('/' . \preg_quote($this->_rpId) . '$/i', $host) === 1;
+ }
+
+ /**
+ * generates a new challange
+ * @param int $length
+ * @return string
+ * @throws WebAuthnException
+ */
+ private function _createChallenge($length = 32) {
+ if (!$this->_challenge) {
+ $this->_challenge = ByteBuffer::randomBuffer($length);
+ }
+ return $this->_challenge;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/WebAuthnException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/WebAuthnException.php
new file mode 100644
index 0000000..823f7d8
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/WebAuthnException.php
@@ -0,0 +1,27 @@
+<?php
+namespace WebAuthn;
+
+/**
+ * @author Lukas Buchs
+ * @license https://github.com/lbuchs/WebAuthn/blob/master/LICENSE MIT
+ */
+class WebAuthnException extends \Exception {
+ const INVALID_DATA = 1;
+ const INVALID_TYPE = 2;
+ const INVALID_CHALLENGE = 3;
+ const INVALID_ORIGIN = 4;
+ const INVALID_RELYING_PARTY = 5;
+ const INVALID_SIGNATURE = 6;
+ const INVALID_PUBLIC_KEY = 7;
+ const CERTIFICATE_NOT_TRUSTED = 8;
+ const USER_PRESENT = 9;
+ const USER_VERIFICATED = 10;
+ const SIGNATURE_COUNTER = 11;
+ const CRYPTO_STRONG = 13;
+ const BYTEBUFFER = 14;
+ const CBOR = 15;
+
+ public function __construct($message = "", $code = 0, $previous = null) {
+ parent::__construct($message, $code, $previous);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/apple.pem b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/apple.pem
new file mode 100644
index 0000000..8ae6bbf
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/apple.pem
@@ -0,0 +1,48 @@
+ Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number:
+ 68:1d:01:6c:7a:3c:e3:02:25:a5:01:94:28:47:57:71
+
+ Signature Algorithm: ecdsa-with-SHA384
+
+ Issuer:
+ stateOrProvinceName = California
+ organizationName = Apple Inc.
+ commonName = Apple WebAuthn Root CA
+
+ Validity
+ Not Before: Mar 18 18:21:32 2020 GMT
+ Not After : Mar 15 00:00:00 2045 GMT
+
+ Subject:
+ stateOrProvinceName = California
+ organizationName = Apple Inc.
+ commonName = Apple WebAuthn Root CA
+
+ Subject Public Key Info:
+ Public Key Algorithm: id-ecPublicKey
+ ASN1 OID: secp384r1
+
+ X509v3 extensions:
+ X509v3 Basic Constraints: critical
+ CA:TRUE
+ X509v3 Subject Key Identifier:
+ 26:D7:64:D9:C5:78:C2:5A:67:D1:A7:DE:6B:12:D0:1B:63:F1:C6:D7
+ X509v3 Key Usage: critical
+ Certificate Sign, CRL Sign
+
+-----BEGIN CERTIFICATE-----
+MIICEjCCAZmgAwIBAgIQaB0BbHo84wIlpQGUKEdXcTAKBggqhkjOPQQDAzBLMR8w
+HQYDVQQDDBZBcHBsZSBXZWJBdXRobiBSb290IENBMRMwEQYDVQQKDApBcHBsZSBJ
+bmMuMRMwEQYDVQQIDApDYWxpZm9ybmlhMB4XDTIwMDMxODE4MjEzMloXDTQ1MDMx
+NTAwMDAwMFowSzEfMB0GA1UEAwwWQXBwbGUgV2ViQXV0aG4gUm9vdCBDQTETMBEG
+A1UECgwKQXBwbGUgSW5jLjETMBEGA1UECAwKQ2FsaWZvcm5pYTB2MBAGByqGSM49
+AgEGBSuBBAAiA2IABCJCQ2pTVhzjl4Wo6IhHtMSAzO2cv+H9DQKev3//fG59G11k
+xu9eI0/7o6V5uShBpe1u6l6mS19S1FEh6yGljnZAJ+2GNP1mi/YK2kSXIuTHjxA/
+pcoRf7XkOtO4o1qlcaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUJtdk
+2cV4wlpn0afeaxLQG2PxxtcwDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cA
+MGQCMFrZ+9DsJ1PW9hfNdBywZDsWDbWFp28it1d/5w2RPkRX3Bbn/UbDTNLx7Jr3
+jAGGiQIwHFj+dJZYUJR786osByBelJYsVZd2GbHQu209b5RCmGQ21gpSAk9QZW4B
+1bWeT0vT
+-----END CERTIFICATE-----
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/globalSign.pem b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/globalSign.pem
new file mode 100644
index 0000000..407de0f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/globalSign.pem
@@ -0,0 +1,37 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number:
+ 04:00:00:00:00:01:0f:86:26:e6:0d
+ Signature Algorithm: sha1WithRSAEncryption
+ Issuer: OU=GlobalSign Root CA - R2, O=GlobalSign, CN=GlobalSign
+ Validity
+ Not Before: Dec 15 08:00:00 2006 GMT
+ Not After : Dec 15 08:00:00 2021 GMT
+ Subject: OU=GlobalSign Root CA - R2, O=GlobalSign, CN=GlobalSign
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (2048 bit)
+
+-----BEGIN CERTIFICATE-----
+MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
+A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
+Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
+MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
+A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
+v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
+eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
+tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
+C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
+zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
+mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
+V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
+bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
+3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
+J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
+291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
+ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
+AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
+TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
+-----END CERTIFICATE-----
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/googleHardware.pem b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/googleHardware.pem
new file mode 100644
index 0000000..63fe64a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/googleHardware.pem
@@ -0,0 +1,130 @@
+Google Hardware Attestation Root certificate
+----------------------------------------------
+
+https://developer.android.com/training/articles/security-key-attestation.html
+
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number:
+ e8:fa:19:63:14:d2:fa:18
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer: serialNumber = f92009e853b6b045
+ Validity
+ Not Before: May 26 16:28:52 2016 GMT
+ Not After : May 24 16:28:52 2026 GMT
+ Subject: serialNumber = f92009e853b6b045
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (4096 bit)
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Subject Key Identifier:
+ 36:61:E1:00:7C:88:05:09:51:8B:44:6C:47:FF:1A:4C:C9:EA:4F:12
+ X509v3 Authority Key Identifier:
+ keyid:36:61:E1:00:7C:88:05:09:51:8B:44:6C:47:FF:1A:4C:C9:EA:4F:12
+
+ X509v3 Basic Constraints: critical
+ CA:TRUE
+ X509v3 Key Usage: critical
+ Digital Signature, Certificate Sign, CRL Sign
+ X509v3 CRL Distribution Points:
+
+ Full Name:
+ URI:https://android.googleapis.com/attestation/crl/
+
+ Signature Algorithm: sha256WithRSAEncryption
+
+
+-----BEGIN CERTIFICATE-----
+MIIFYDCCA0igAwIBAgIJAOj6GWMU0voYMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV
+BAUTEGY5MjAwOWU4NTNiNmIwNDUwHhcNMTYwNTI2MTYyODUyWhcNMjYwNTI0MTYy
+ODUyWjAbMRkwFwYDVQQFExBmOTIwMDllODUzYjZiMDQ1MIICIjANBgkqhkiG9w0B
+AQEFAAOCAg8AMIICCgKCAgEAr7bHgiuxpwHsK7Qui8xUFmOr75gvMsd/dTEDDJdS
+Sxtf6An7xyqpRR90PL2abxM1dEqlXnf2tqw1Ne4Xwl5jlRfdnJLmN0pTy/4lj4/7
+tv0Sk3iiKkypnEUtR6WfMgH0QZfKHM1+di+y9TFRtv6y//0rb+T+W8a9nsNL/ggj
+nar86461qO0rOs2cXjp3kOG1FEJ5MVmFmBGtnrKpa73XpXyTqRxB/M0n1n/W9nGq
+C4FSYa04T6N5RIZGBN2z2MT5IKGbFlbC8UrW0DxW7AYImQQcHtGl/m00QLVWutHQ
+oVJYnFPlXTcHYvASLu+RhhsbDmxMgJJ0mcDpvsC4PjvB+TxywElgS70vE0XmLD+O
+JtvsBslHZvPBKCOdT0MS+tgSOIfga+z1Z1g7+DVagf7quvmag8jfPioyKvxnK/Eg
+sTUVi2ghzq8wm27ud/mIM7AY2qEORR8Go3TVB4HzWQgpZrt3i5MIlCaY504LzSRi
+igHCzAPlHws+W0rB5N+er5/2pJKnfBSDiCiFAVtCLOZ7gLiMm0jhO2B6tUXHI/+M
+RPjy02i59lINMRRev56GKtcd9qO/0kUJWdZTdA2XoS82ixPvZtXQpUpuL12ab+9E
+aDK8Z4RHJYYfCT3Q5vNAXaiWQ+8PTWm2QgBR/bkwSWc+NpUFgNPN9PvQi8WEg5Um
+AGMCAwEAAaOBpjCBozAdBgNVHQ4EFgQUNmHhAHyIBQlRi0RsR/8aTMnqTxIwHwYD
+VR0jBBgwFoAUNmHhAHyIBQlRi0RsR/8aTMnqTxIwDwYDVR0TAQH/BAUwAwEB/zAO
+BgNVHQ8BAf8EBAMCAYYwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cHM6Ly9hbmRyb2lk
+Lmdvb2dsZWFwaXMuY29tL2F0dGVzdGF0aW9uL2NybC8wDQYJKoZIhvcNAQELBQAD
+ggIBACDIw41L3KlXG0aMiS//cqrG+EShHUGo8HNsw30W1kJtjn6UBwRM6jnmiwfB
+Pb8VA91chb2vssAtX2zbTvqBJ9+LBPGCdw/E53Rbf86qhxKaiAHOjpvAy5Y3m00m
+qC0w/Zwvju1twb4vhLaJ5NkUJYsUS7rmJKHHBnETLi8GFqiEsqTWpG/6ibYCv7rY
+DBJDcR9W62BW9jfIoBQcxUCUJouMPH25lLNcDc1ssqvC2v7iUgI9LeoM1sNovqPm
+QUiG9rHli1vXxzCyaMTjwftkJLkf6724DFhuKug2jITV0QkXvaJWF4nUaHOTNA4u
+JU9WDvZLI1j83A+/xnAJUucIv/zGJ1AMH2boHqF8CY16LpsYgBt6tKxxWH00XcyD
+CdW2KlBCeqbQPcsFmWyWugxdcekhYsAWyoSf818NUsZdBWBaR/OukXrNLfkQ79Iy
+ZohZbvabO/X+MVT3rriAoKc8oE2Uws6DF+60PV7/WIPjNvXySdqspImSN78mflxD
+qwLqRBYkA3I75qppLGG9rp7UCdRjxMl8ZDBld+7yvHVgt1cVzJx9xnyGCC23Uaic
+MDSXYrB4I4WHXPGjxhZuCuPBLTdOLU8YRvMYdEvYebWHMpvwGCF6bAx3JBpIeOQ1
+wDB5y0USicV3YgYGmi+NZfhA4URSh77Yd6uuJOJENRaNVTzk
+-----END CERTIFICATE-----
+
+
+ Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 15352756130135856819 (0xd50ff25ba3f2d6b3)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer:
+ serialNumber = f92009e853b6b045
+ Validity
+ Not Before: Nov 22 20:37:58 2019 GMT
+ Not After : Nov 18 20:37:58 2034 GMT
+ Subject:
+ serialNumber = f92009e853b6b045
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (4096 bit)
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Subject Key Identifier:
+ 36:61:E1:00:7C:88:05:09:51:8B:44:6C:47:FF:1A:4C:C9:EA:4F:12
+ X509v3 Authority Key Identifier:
+ keyid:36:61:E1:00:7C:88:05:09:51:8B:44:6C:47:FF:1A:4C:C9:EA:4F:12
+
+ X509v3 Basic Constraints: critical
+ CA:TRUE
+ X509v3 Key Usage: critical
+ Certificate Sign
+ Signature Algorithm: sha256WithRSAEncryption
+
+
+-----BEGIN CERTIFICATE-----
+MIIFHDCCAwSgAwIBAgIJANUP8luj8tazMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV
+BAUTEGY5MjAwOWU4NTNiNmIwNDUwHhcNMTkxMTIyMjAzNzU4WhcNMzQxMTE4MjAz
+NzU4WjAbMRkwFwYDVQQFExBmOTIwMDllODUzYjZiMDQ1MIICIjANBgkqhkiG9w0B
+AQEFAAOCAg8AMIICCgKCAgEAr7bHgiuxpwHsK7Qui8xUFmOr75gvMsd/dTEDDJdS
+Sxtf6An7xyqpRR90PL2abxM1dEqlXnf2tqw1Ne4Xwl5jlRfdnJLmN0pTy/4lj4/7
+tv0Sk3iiKkypnEUtR6WfMgH0QZfKHM1+di+y9TFRtv6y//0rb+T+W8a9nsNL/ggj
+nar86461qO0rOs2cXjp3kOG1FEJ5MVmFmBGtnrKpa73XpXyTqRxB/M0n1n/W9nGq
+C4FSYa04T6N5RIZGBN2z2MT5IKGbFlbC8UrW0DxW7AYImQQcHtGl/m00QLVWutHQ
+oVJYnFPlXTcHYvASLu+RhhsbDmxMgJJ0mcDpvsC4PjvB+TxywElgS70vE0XmLD+O
+JtvsBslHZvPBKCOdT0MS+tgSOIfga+z1Z1g7+DVagf7quvmag8jfPioyKvxnK/Eg
+sTUVi2ghzq8wm27ud/mIM7AY2qEORR8Go3TVB4HzWQgpZrt3i5MIlCaY504LzSRi
+igHCzAPlHws+W0rB5N+er5/2pJKnfBSDiCiFAVtCLOZ7gLiMm0jhO2B6tUXHI/+M
+RPjy02i59lINMRRev56GKtcd9qO/0kUJWdZTdA2XoS82ixPvZtXQpUpuL12ab+9E
+aDK8Z4RHJYYfCT3Q5vNAXaiWQ+8PTWm2QgBR/bkwSWc+NpUFgNPN9PvQi8WEg5Um
+AGMCAwEAAaNjMGEwHQYDVR0OBBYEFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMB8GA1Ud
+IwQYMBaAFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMA8GA1UdEwEB/wQFMAMBAf8wDgYD
+VR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4ICAQBOMaBc8oumXb2voc7XCWnu
+XKhBBK3e2KMGz39t7lA3XXRe2ZLLAkLM5y3J7tURkf5a1SutfdOyXAmeE6SRo83U
+h6WszodmMkxK5GM4JGrnt4pBisu5igXEydaW7qq2CdC6DOGjG+mEkN8/TA6p3cno
+L/sPyz6evdjLlSeJ8rFBH6xWyIZCbrcpYEJzXaUOEaxxXxgYz5/cTiVKN2M1G2ok
+QBUIYSY6bjEL4aUN5cfo7ogP3UvliEo3Eo0YgwuzR2v0KR6C1cZqZJSTnghIC/vA
+D32KdNQ+c3N+vl2OTsUVMC1GiWkngNx1OO1+kXW+YTnnTUOtOIswUP/Vqd5SYgAI
+mMAfY8U9/iIgkQj6T2W6FsScy94IN9fFhE1UtzmLoBIuUFsVXJMTz+Jucth+IqoW
+Fua9v1R93/k98p41pjtFX+H8DslVgfP097vju4KDlqN64xV1grw3ZLl4CiOe/A91
+oeLm2UHOq6wn3esB4r2EIQKb6jTVGu5sYCcdWpXr0AUVqcABPdgL+H7qJguBw09o
+jm6xNIrw2OocrDKsudk/okr/AwqEyPKw9WnMlQgLIKw1rODG2NvU9oR3GVGdMkUB
+ZutL8VuFkERQGt6vQ2OCw0sV47VMkuYbacK/xyZFiRcrPJPb41zgbQj9XAEyLKCH
+ex0SdDrx+tWUDqG8At2JHA==
+-----END CERTIFICATE-----
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/huawei.pem b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/huawei.pem
new file mode 100644
index 0000000..8c95413
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/huawei.pem
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFZDCCA0ygAwIBAgIIYsLLTehAXpYwDQYJKoZIhvcNAQELBQAwUDELMAkGA1UE
+BhMCQ04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UECwwKSHVhd2VpIENCRzEbMBkG
+A1UEAwwSSHVhd2VpIENCRyBSb290IENBMB4XDTE3MDgyMTEwNTYyN1oXDTQyMDgx
+NTEwNTYyN1owUDELMAkGA1UEBhMCQ04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UE
+CwwKSHVhd2VpIENCRzEbMBkGA1UEAwwSSHVhd2VpIENCRyBSb290IENBMIICIjAN
+BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1OyKm3Ig/6eibB7Uz2o93UqGk2M7
+84WdfF8mvffvu218d61G5M3Px54E3kefUTk5Ky1ywHvw7Rp9KDuYv7ktaHkk+yr5
+9Ihseu3a7iM/C6SnMSGt+LfB/Bcob9Abw95EigXQ4yQddX9hbNrin3AwZw8wMjEI
+SYYDo5GuYDL0NbAiYg2Y5GpfYIqRzoi6GqDz+evLrsl20kJeCEPgJZN4Jg00Iq9k
+++EKOZ5Jc/Zx22ZUgKpdwKABkvzshEgG6WWUPB+gosOiLv++inu/9blDpEzQZhjZ
+9WVHpURHDK1YlCvubVAMhDpnbqNHZ0AxlPletdoyugrH/OLKl5inhMXNj3Re7Hl8
+WsBWLUKp6sXFf0dvSFzqnr2jkhicS+K2IYZnjghC9cOBRO8fnkonh0EBt0evjUIK
+r5ClbCKioBX8JU+d4ldtWOpp2FlxeFTLreDJ5ZBU4//bQpTwYMt7gwMK+MO5Wtok
+Ux3UF98Z6GdUgbl6nBjBe82c7oIQXhHGHPnURQO7DDPgyVnNOnTPIkmiHJh/e3vk
+VhiZNHFCCLTip6GoJVrLxwb9i4q+d0thw4doxVJ5NB9OfDMV64/ybJgpf7m3Ld2y
+E0gsf1prrRlDFDXjlYyqqpf1l9Y0u3ctXo7UpXMgbyDEpUQhq3a7txZQO/17luTD
+oA6Tz1ADavvBwHkCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
+MAMBAf8wHQYDVR0OBBYEFKrE03lH6G4ja+/wqWwicz16GWmhMA0GCSqGSIb3DQEB
+CwUAA4ICAQC1d3TMB+VHZdGrWJbfaBShFNiCTN/MceSHOpzBn6JumQP4N7mxCOwd
+RSsGKQxV2NPH7LTXWNhUvUw5Sek96FWx/+Oa7jsj3WNAVtmS3zKpCQ5iGb08WIRO
+cFnx3oUQ5rcO8r/lUk7Q2cN0E+rF4xsdQrH9k2cd3kAXZXBjfxfKPJTdPy1XnZR/
+h8H5EwEK5DWjSzK1wKd3G/Fxdm3E23pcr4FZgdYdOlFSiqW2TJ3Qe6lF4GOKOOyd
+WHkpu54ieTsqoYcuMKnKMjT2SLNNgv9Gu5ipaG8Olz6g9C7Htp943lmK/1Vtnhgg
+pL3rDTsFX/+ehk7OtxuNzRMD9lXUtEfok7f8XB0dcL4ZjnEhDmp5QZqC1kMubHQt
+QnTauEiv0YkSGOwJAUZpK1PIff5GgxXYfaHfBC6Op4q02ppl5Q3URl7XIjYLjvs9
+t4S9xPe8tb6416V2fe1dZ62vOXMMKHkZjVihh+IceYpJYHuyfKoYJyahLOQXZykG
+K5iPAEEtq3HPfMVF43RKHOwfhrAH5KwelUA/0EkcR4Gzth1MKEqojdnYNemkkSy7
+aNPPT4LEm5R7sV6vG1CjwbgvQrWCgc4nMb8ngdfnVF7Ydqjqi9SAqUzIk4+Uf0ZY
++6RY5IcHdCaiPaWIE1xURQ8B0DRUURsQwXdjZhgLN/DKJpCl5aCCxg==
+-----END CERTIFICATE-----
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/hypersecu.pem b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/hypersecu.pem
new file mode 100644
index 0000000..536b24e
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/hypersecu.pem
@@ -0,0 +1,56 @@
+HyperFIDO U2F Security Key Attestation CA
+https://hypersecu.com/support/downloads/attestation
+
+Last Update: 2017-01-01
+
+HyperFIDO U2F Security Key devices which contain attestation certificates signed by a set of CAs.
+This file contains the CA certificates that Relying Parties (RP) need to configure their software
+with to be able to verify U2F device certificates.
+
+The file will be updated as needed when we publish more CA certificates.
+
+Issuer: CN=FT FIDO 0100
+
+-----BEGIN CERTIFICATE-----
+MIIBjTCCATOgAwIBAgIBATAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxGVCBGSURP
+IDAxMDAwHhcNMTQwNzAxMTUzNjI2WhcNNDQwNzAzMTUzNjI2WjAXMRUwEwYDVQQD
+EwxGVCBGSURPIDAxMDAwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASxdLxJx8ol
+S3DS5cIHzunPF0gg69d+o8ZVCMJtpRtlfBzGuVL4YhaXk2SC2gptPTgmpZCV2vbN
+fAPi5gOF0vbZo3AwbjAdBgNVHQ4EFgQUXt4jWlYDgwhaPU+EqLmeM9LoPRMwPwYD
+VR0jBDgwNoAUXt4jWlYDgwhaPU+EqLmeM9LoPROhG6QZMBcxFTATBgNVBAMTDEZU
+IEZJRE8gMDEwMIIBATAMBgNVHRMEBTADAQH/MAoGCCqGSM49BAMCA0gAMEUCIQC2
+D9o9cconKTo8+4GZPyZBJ3amc8F0/kzyidX9dhrAIAIgM9ocs5BW/JfmshVP9Mb+
+Joa/kgX4dWbZxrk0ioTfJZg=
+-----END CERTIFICATE-----
+
+
+ Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 4107 (0x100b)
+ Signature Algorithm: ecdsa-with-SHA256
+ Issuer:
+ commonName = HYPERFIDO 0200
+ organizationName = HYPERSECU
+ countryName = CA
+ Validity
+ Not Before: Jan 1 00:00:00 2018 GMT
+ Not After : Dec 31 23:59:59 2047 GMT
+ Subject:
+ commonName = HYPERFIDO 0200
+ organizationName = HYPERSECU
+ countryName = CA
+
+
+-----BEGIN CERTIFICATE-----
+MIIBxzCCAWygAwIBAgICEAswCgYIKoZIzj0EAwIwOjELMAkGA1UEBhMCQ0ExEjAQ
+BgNVBAoMCUhZUEVSU0VDVTEXMBUGA1UEAwwOSFlQRVJGSURPIDAyMDAwIBcNMTgw
+MTAxMDAwMDAwWhgPMjA0NzEyMzEyMzU5NTlaMDoxCzAJBgNVBAYTAkNBMRIwEAYD
+VQQKDAlIWVBFUlNFQ1UxFzAVBgNVBAMMDkhZUEVSRklETyAwMjAwMFkwEwYHKoZI
+zj0CAQYIKoZIzj0DAQcDQgAErKUI1G0S7a6IOLlmHipLlBuxTYjsEESQvzQh3dB7
+dvxxWWm7kWL91rq6S7ayZG0gZPR+zYqdFzwAYDcG4+aX66NgMF4wHQYDVR0OBBYE
+FLZYcfMMwkQAGbt3ryzZFPFypmsIMB8GA1UdIwQYMBaAFLZYcfMMwkQAGbt3ryzZ
+FPFypmsIMAwGA1UdEwQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMC
+A0kAMEYCIQCG2/ppMGt7pkcRie5YIohS3uDPIrmiRcTjqDclKVWg0gIhANcPNDZH
+E2/zZ+uB5ThG9OZus+xSb4knkrbAyXKX2zm/
+-----END CERTIFICATE-----
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/microsoftTpmCollection.pem b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/microsoftTpmCollection.pem
new file mode 100644
index 0000000..75f9e38
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/microsoftTpmCollection.pem
@@ -0,0 +1,28844 @@
+A collection of trusted TPM root and intermediate certificates
+published by Microsoft.
+
+https://docs.microsoft.com/en-us/windows-server/security/guarded-fabric-shielded-vm/guarded-fabric-install-trusted-tpm-root-certificates
+
+AMD fTPM ECC ICA CZFamily 35F45AAB781751FE7C24D5EDAABAB507
+==========================================================
+-----BEGIN CERTIFICATE-----
+MIIDTDCCAvKgAwIBAgIQNfRaq3gXUf58JNXtqrq1BzAKBggqhkjOPQQDAjB2MRQw
+EgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1bm55
+dmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERldmlj
+ZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xNzAxMDEwNTAwMDBaFw00MjAxMDEwNTAw
+MDBaMHYxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzESMBAGA1UE
+BxMJU3Vubnl2YWxlMQswCQYDVQQIEwJDQTEfMB0GA1UEChMWQWR2YW5jZWQgTWlj
+cm8gRGV2aWNlczEPMA0GA1UEAxMGUFJHLUNaMFkwEwYHKoZIzj0CAQYIKoZIzj0D
+AQcDQgAEBlpn+AdLBGvcVI3hOEA6W0KVi47yRZJpDGoFzjymztysYVGK14hcP2Ou
++PVGyXC3jCWeuRxwA72VdrqoSeHuJ6OCAWAwggFcMA4GA1UdDwEB/wQEAwIBBjCB
+ggYIKwYBBQUHAQEEdjB0MEgGCCsGAQUFBzAChjxodHRwOi8vZnRwbS5hbWQuY29t
+L3BraS9haWEvMjM0NTIyMDFENDFDNUFCMDY0MDMyQkQyM0YxNThGRUYwKAYIKwYB
+BQUHMAGGHGh0dHA6Ly9mdHBtLmFtZC5jb20vcGtpL29jc3AwLAYDVR0fBCUwIzAh
+oB+gHYYbaHR0cDovL2Z0cG0uYW1kLmNvbS9wa2kvY3JsMEMGA1UdIAQ8MDowOAYK
+KwYBBAGceGUVCjAqMCgGCCsGAQUFBwIBFhxodHRwczovL2Z0cG0uYW1kLmNvbS9w
+a2kvY3BzMB0GA1UdDgQWBBQozldJxrgWZhsi/R/V1m1UPKEA7TAfBgNVHSMEGDAW
+gBTyGtD46KMG6cvNOH6GcmMX28G+uTASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqG
+SM49BAMCA0gAMEUCIF8AlJl2lptIKpgL43QRxzExH5XRWITmH7fNrT2WK35AAiEA
+96iA8KaxcEVV2y6HNXM7EQZWNvqCLtKrtuvKBWYefYA=
+-----END CERTIFICATE-----
+
+
+AMD fTPM ECC ICA RNFamily CA6EA09EB84853EC720CD9BE5AAE73BF
+==========================================================
+-----BEGIN CERTIFICATE-----
+MIIDTjCCAvSgAwIBAgIQSm6gnrhIU+xyDNm+Wq5zvzAKBggqhkjOPQQDAjB2MRQw
+EgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1bm55
+dmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERldmlj
+ZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xOTAxMDEwNTAwMDBaFw00NDAxMDEwNTAw
+MDBaMHgxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzEUMBIGA1UE
+BxMLU2FudGEgQ2xhcmExCzAJBgNVBAgTAkNBMR8wHQYDVQQKExZBZHZhbmNlZCBN
+aWNybyBEZXZpY2VzMQ8wDQYDVQQDEwZQUkctUk4wWTATBgcqhkjOPQIBBggqhkjO
+PQMBBwNCAAQ5fkz4KonekKk4By4PVu900jts2g37esRAHdwgwvMXIxRHf1lBqmCm
+iuT2MEHZi21VRFdcVUr+3cEdP9E6etEIo4IBYDCCAVwwDgYDVR0PAQH/BAQDAgEG
+MIGCBggrBgEFBQcBAQR2MHQwSAYIKwYBBQUHMAKGPGh0dHA6Ly9mdHBtLmFtZC5j
+b20vcGtpL2FpYS8yMzQ1MjIwMUQ0MUM1QUIwNjQwMzJCRDIzRjE1OEZFRjAoBggr
+BgEFBQcwAYYcaHR0cDovL2Z0cG0uYW1kLmNvbS9wa2kvb2NzcDAsBgNVHR8EJTAj
+MCGgH6AdhhtodHRwOi8vZnRwbS5hbWQuY29tL3BraS9jcmwwQwYDVR0gBDwwOjA4
+BgorBgEEAZx4ZRUKMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vZnRwbS5hbWQuY29t
+L3BraS9jcHMwHQYDVR0OBBYEFEUUrnBzWAfx5JAHoyxeDgcTefraMB8GA1UdIwQY
+MBaAFPIa0Pjoowbpy804foZyYxfbwb65MBIGA1UdEwEB/wQIMAYBAf8CAQAwCgYI
+KoZIzj0EAwIDSAAwRQIgahQcXdsmgv2bVQ6mvRbmjYAZXIgRGzTkvNp9KHkdSaQC
+IQCXNY98DRYBugeGd3BB9DgG1dAj8lPmHx5klhYCijzSYQ==
+-----END CERTIFICATE-----
+
+
+AMD fTPM ECC ICA RVFamily 7ABAE76EBBA151415337F49A77CB1C3E
+==========================================================
+-----BEGIN CERTIFICATE-----
+MIIDTTCCAvKgAwIBAgIQaJK2kr7QVTNAD9X6rjYYgjAKBggqhkjOPQQDAjB2MRQw
+EgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1bm55
+dmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERldmlj
+ZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xNzAxMDEwNTAwMDBaFw00MjAxMDEwNTAw
+MDBaMHYxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzESMBAGA1UE
+BxMJU3Vubnl2YWxlMQswCQYDVQQIEwJDQTEfMB0GA1UEChMWQWR2YW5jZWQgTWlj
+cm8gRGV2aWNlczEPMA0GA1UEAxMGUFJHLVJWMFkwEwYHKoZIzj0CAQYIKoZIzj0D
+AQcDQgAEgjqHAi3VGlHTA8AMKMiE4w150DBQssiBN5CXW6OkjXRdzW0AcbBsf4+p
+VWPyRfpVtszns6GC2mB+9R/DgsCzEKOCAWAwggFcMA4GA1UdDwEB/wQEAwIBBjCB
+ggYIKwYBBQUHAQEEdjB0MEgGCCsGAQUFBzAChjxodHRwOi8vZnRwbS5hbWQuY29t
+L3BraS9haWEvMjM0NTIyMDFENDFDNUFCMDY0MDMyQkQyM0YxNThGRUYwKAYIKwYB
+BQUHMAGGHGh0dHA6Ly9mdHBtLmFtZC5jb20vcGtpL29jc3AwLAYDVR0fBCUwIzAh
+oB+gHYYbaHR0cDovL2Z0cG0uYW1kLmNvbS9wa2kvY3JsMEMGA1UdIAQ8MDowOAYK
+KwYBBAGceGUVCjAqMCgGCCsGAQUFBwIBFhxodHRwczovL2Z0cG0uYW1kLmNvbS9w
+a2kvY3BzMB0GA1UdDgQWBBR6IqVx7p7wpEU4i+tS38xSxwZdvDAfBgNVHSMEGDAW
+gBTyGtD46KMG6cvNOH6GcmMX28G+uTASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqG
+SM49BAMCA0kAMEYCIQCuX4QBN4CPlmsuwENURCNvdQjvPvgTetx8kIsqvwos3wIh
+AKU9cWLmxsLNLWFrCAwNFybGzkUtAzAdx8Culc0/sFeG
+-----END CERTIFICATE-----
+
+
+AMD fTPM ECC ICA SSPFamily 282772bd68af58ba6b13477a89bb1a04
+===========================================================
+-----BEGIN CERTIFICATE-----
+MIIDTzCCAvWgAwIBAgIQKCdyvWivWLprE0d6ibsaBDAKBggqhkjOPQQDAjB2MRQw
+EgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1bm55
+dmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERldmlj
+ZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xOTAxMDEwNTAwMDBaFw00NDAxMDEwNTAw
+MDBaMHkxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzEUMBIGA1UE
+BxMLU2FudGEgQ2xhcmExCzAJBgNVBAgTAkNBMR8wHQYDVQQKExZBZHZhbmNlZCBN
+aWNybyBEZXZpY2VzMRAwDgYDVQQDEwdQUkctU1NQMFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAEl6IO1QcWF2hjA9bVwvfQCf/M9i7KNA5O/D5ypbdVVpifwwMwSwMG
+BmO9mmK56g6EPvDXpFmMg50FmQ6jU7LcKaOCAWAwggFcMA4GA1UdDwEB/wQEAwIB
+BjCBggYIKwYBBQUHAQEEdjB0MEgGCCsGAQUFBzAChjxodHRwOi8vZnRwbS5hbWQu
+Y29tL3BraS9haWEvMjM0NTIyMDFENDFDNUFCMDY0MDMyQkQyM0YxNThGRUYwKAYI
+KwYBBQUHMAGGHGh0dHA6Ly9mdHBtLmFtZC5jb20vcGtpL29jc3AwLAYDVR0fBCUw
+IzAhoB+gHYYbaHR0cDovL2Z0cG0uYW1kLmNvbS9wa2kvY3JsMEMGA1UdIAQ8MDow
+OAYKKwYBBAGceGUVCjAqMCgGCCsGAQUFBwIBFhxodHRwczovL2Z0cG0uYW1kLmNv
+bS9wa2kvY3BzMB0GA1UdDgQWBBSMWXd2hTue25DGGoyvyinxvqBKxjAfBgNVHSME
+GDAWgBTyGtD46KMG6cvNOH6GcmMX28G+uTASBgNVHRMBAf8ECDAGAQH/AgEAMAoG
+CCqGSM49BAMCA0gAMEUCIAhSltSJhcMQa1BK+AuC4et0wxo1DnDIdrXn13tEkxet
+AiEA9ddrkfrmDpH7mMTJR1ejntr+m0sUTDJ9OtPzz+gthTA=
+-----END CERTIFICATE-----
+
+
+AMD fTPM ECC ICA STFamily 4A7A7EC532E35402724A2BB4501011CE
+==========================================================
+-----BEGIN CERTIFICATE-----
+MIIDSzCCAvKgAwIBAgIQSnp+xTLjVAJySiu0UBARzjAKBggqhkjOPQQDAjB2MRQw
+EgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1bm55
+dmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERldmlj
+ZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xNzAxMDEwNTAwMDBaFw00MjAxMDEwNTAw
+MDBaMHYxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzESMBAGA1UE
+BxMJU3Vubnl2YWxlMQswCQYDVQQIEwJDQTEfMB0GA1UEChMWQWR2YW5jZWQgTWlj
+cm8gRGV2aWNlczEPMA0GA1UEAxMGUFJHLVNUMFkwEwYHKoZIzj0CAQYIKoZIzj0D
+AQcDQgAEuqTQcmuKG6lBH2pZ8FcFUVrdkesyyX/cIl7eWyhLQGUehJDrshpaX4uT
+zYTrwiyo+JVDCEz0SGqxF10DmP0kUqOCAWAwggFcMA4GA1UdDwEB/wQEAwIBBjCB
+ggYIKwYBBQUHAQEEdjB0MEgGCCsGAQUFBzAChjxodHRwOi8vZnRwbS5hbWQuY29t
+L3BraS9haWEvMjM0NTIyMDFENDFDNUFCMDY0MDMyQkQyM0YxNThGRUYwKAYIKwYB
+BQUHMAGGHGh0dHA6Ly9mdHBtLmFtZC5jb20vcGtpL29jc3AwLAYDVR0fBCUwIzAh
+oB+gHYYbaHR0cDovL2Z0cG0uYW1kLmNvbS9wa2kvY3JsMEMGA1UdIAQ8MDowOAYK
+KwYBBAGceGUVCjAqMCgGCCsGAQUFBwIBFhxodHRwczovL2Z0cG0uYW1kLmNvbS9w
+a2kvY3BzMB0GA1UdDgQWBBSMlQK6u0nLp8P7+HwwzcGysubG6zAfBgNVHSMEGDAW
+gBTyGtD46KMG6cvNOH6GcmMX28G+uTASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqG
+SM49BAMCA0cAMEQCIDz6Mytrfm+ihk744RkVAPPxkefsMZcUxdhGqnrv7owiAiBr
+q+LoaHiiDgfNpbeQlElRIu9c2y2FmhOYrt6STGQjQw==
+-----END CERTIFICATE-----
+
+
+AMD fTPM ECC ICA ZPFamily 1425A264BB595F9469645F3B7AA30209
+==========================================================
+-----BEGIN CERTIFICATE-----
+MIIDTTCCAvKgAwIBAgIQFCWiZLtZX5RpZF87eqMCCTAKBggqhkjOPQQDAjB2MRQw
+EgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1bm55
+dmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERldmlj
+ZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xNzAxMDEwNTAwMDBaFw00MjAxMDEwNTAw
+MDBaMHYxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzESMBAGA1UE
+BxMJU3Vubnl2YWxlMQswCQYDVQQIEwJDQTEfMB0GA1UEChMWQWR2YW5jZWQgTWlj
+cm8gRGV2aWNlczEPMA0GA1UEAxMGUFJHLVpQMFkwEwYHKoZIzj0CAQYIKoZIzj0D
+AQcDQgAEUs7cHYxm8jLp3GOE4MVnvVx5U0AKrTeLyBMwSstWX3VnUQM8oMeTh5eY
+4Zfis0MDpVxXVE3JcGGr45iOkkWSYaOCAWAwggFcMA4GA1UdDwEB/wQEAwIBBjCB
+ggYIKwYBBQUHAQEEdjB0MEgGCCsGAQUFBzAChjxodHRwOi8vZnRwbS5hbWQuY29t
+L3BraS9haWEvMjM0NTIyMDFENDFDNUFCMDY0MDMyQkQyM0YxNThGRUYwKAYIKwYB
+BQUHMAGGHGh0dHA6Ly9mdHBtLmFtZC5jb20vcGtpL29jc3AwLAYDVR0fBCUwIzAh
+oB+gHYYbaHR0cDovL2Z0cG0uYW1kLmNvbS9wa2kvY3JsMEMGA1UdIAQ8MDowOAYK
+KwYBBAGceGUVCjAqMCgGCCsGAQUFBwIBFhxodHRwczovL2Z0cG0uYW1kLmNvbS9w
+a2kvY3BzMB0GA1UdDgQWBBQ2sLcQwBDRgZIhwpvc5T5QAzwpFTAfBgNVHSMEGDAW
+gBTyGtD46KMG6cvNOH6GcmMX28G+uTASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqG
+SM49BAMCA0kAMEYCIQDoFZIeUSnF7cDRjJb+iojim+QnaGsa63mDnJVaGc5UfQIh
+AIzqZvY5zohbdv+OWKibF2rEh9+bOQkuE1M7I43JDcZy
+-----END CERTIFICATE-----
+
+
+AMD fTPM ECC RootCA
+===================
+-----BEGIN CERTIFICATE-----
+MIIDAjCCAqigAwIBAgIQI0UiAdQcWrBkAyvSPxWP7zAKBggqhkjOPQQDAjB2MRQw
+EgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1bm55
+dmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERldmlj
+ZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xNjAxMDEwNTAwMDBaFw00MTAxMDEwNTAw
+MDBaMHYxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzESMBAGA1UE
+BxMJU3Vubnl2YWxlMQswCQYDVQQIEwJDQTEfMB0GA1UEChMWQWR2YW5jZWQgTWlj
+cm8gRGV2aWNlczEPMA0GA1UEAxMGQU1EVFBNMFkwEwYHKoZIzj0CAQYIKoZIzj0D
+AQcDQgAEKLNGw0F3uq7kcoZazSAm46NUyiIJC5DgNAPo1CfrPsn3UtRni1DxC1xa
+sMtvIo3jAVHZlVsmAT1g0r5XiNb5mqOCARYwggESMA4GA1UdDwEB/wQEAwIBBjAj
+BgkrBgEEAYI3FSsEFgQU8hrQ+OijBunLzTh+hnJjF9vBvrkwHQYDVR0OBBYEFPIa
+0Pjoowbpy804foZyYxfbwb65MA8GA1UdEwEB/wQFMAMBAf8wOAYIKwYBBQUHAQEE
+LDAqMCgGCCsGAQUFBzABhhxodHRwOi8vZnRwbS5hbWQuY29tL3BraS9vY3NwMCwG
+A1UdHwQlMCMwIaAfoB2GG2h0dHA6Ly9mdHBtLmFtZC5jb20vcGtpL2NybDBDBgNV
+HSAEPDA6MDgGCisGAQQBnHhlFQowKjAoBggrBgEFBQcCARYcaHR0cHM6Ly9mdHBt
+LmFtZC5jb20vcGtpL2NwczAKBggqhkjOPQQDAgNIADBFAiEAgaCRgPGIA9/8xEVy
+tJ1YK0ERBDGHxPT0igzycASqDhACIDWbPtOXQG3Z4W09OjRtWwLwdCEkelKfPazb
+yhIHIT4m
+-----END CERTIFICATE-----
+
+
+AMD fTPM RSA ICA CZFamily 01F7DE3D30F15BE252C0AFCC1A0A562C
+==========================================================
+-----BEGIN CERTIFICATE-----
+MIIE2DCCA8CgAwIBAgIQAffePTDxW+JSwK/MGgpWLDANBgkqhkiG9w0BAQsFADB2
+MRQwEgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1
+bm55dmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERl
+dmljZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xNzAxMDEwNTAwMDBaFw00MjAxMDEw
+NTAwMDBaMHYxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzESMBAG
+A1UEBxMJU3Vubnl2YWxlMQswCQYDVQQIEwJDQTEfMB0GA1UEChMWQWR2YW5jZWQg
+TWljcm8gRGV2aWNlczEPMA0GA1UEAxMGUFJHLUNaMIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEAvMx6GldSnmqFRVWG3oUBIb4D/Go7LFSnnU9Tvtn8rT97
+FoqxQRQN4a2Frx90tTXnvakc/bF5fWjB1lZauToCpgkUWVFSuIQe5Mw1IEK/aY0v
+/cQYSHrwnpmPoJa0oSKUrX7d8E3okAFCbDXyuKBzGnci9toQcWNMHoNAf6AbcpVD
+FGmsSmukSNzyiolgtkvPEZxhINl4zvQh0wYnKaU6/Ah6TzW1+TRyeiGNHkiccgh+
+YdSEwcvHUsZYI7QSd2d3IcX6b0wqubiE4jWoWkKmPiuX8BOu1YOjnKhTbq8rbpGq
+RKRV7SPyJqgTbXtUg9dZ9m28C92/iTdbaeFkgUvTTwIDAQABo4IBYDCCAVwwDgYD
+VR0PAQH/BAQDAgEGMIGCBggrBgEFBQcBAQR2MHQwSAYIKwYBBQUHMAKGPGh0dHA6
+Ly9mdHBtLmFtZC5jb20vcGtpL2FpYS8yNjREMzlBMjNDRUI1RDVCNDlENjEwMDQ0
+RUVCRDEyMTAoBggrBgEFBQcwAYYcaHR0cDovL2Z0cG0uYW1kLmNvbS9wa2kvb2Nz
+cDAsBgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vZnRwbS5hbWQuY29tL3BraS9jcmww
+QwYDVR0gBDwwOjA4BgorBgEEAZx4ZRUKMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v
+ZnRwbS5hbWQuY29tL3BraS9jcHMwHQYDVR0OBBYEFBSC/Zy4ivu3+RfKFCJfiRbz
+EEANMB8GA1UdIwQYMBaAFFeMVF95aVFCEiGkpXis219oL4nIMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwDQYJKoZIhvcNAQELBQADggEBAJRBWLzYJ5MPlxOHGGGm4881vTey
+LG8UvARg3+q0DvFs8T7piBtFXAOb0tu1kNquHWGJCNeJWcsNbi4Buzc63fbptt4j
+Jh9ckLQnp1SK3mn5xo+O+5mgF5G9dN+kE910FEntH5k5Ox1bTKZzrSRSTP5cNacB
+e9FCVddjjH4yAOUKywMDbZipyX0GwNgJJYskYr/n7WG4vRCf9WFNMdeuTm8b8HPM
+i8Q0+5+0tl0X9Y7Mzds2ciwdlNI6COWXnels1Zy3Pex7Uc8KiU6q51EAl/YJEdca
+5zR/1B9i9pukRo9Pz096SqX8sjqXq6roHhkaXllniOYr6zaeTuRuUJpT8KY=
+-----END CERTIFICATE-----
+
+
+AMD fTPM RSA ICA RNFamily CC5AB663EE845CA9654A582121F50381
+==========================================================
+-----BEGIN CERTIFICATE-----
+MIIE2jCCA8KgAwIBAgIQTFq2Y+6EXKllSlghIfUDgTANBgkqhkiG9w0BAQsFADB2
+MRQwEgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1
+bm55dmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERl
+dmljZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xOTAxMDEwNTAwMDBaFw00NDAxMDEw
+NTAwMDBaMHgxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzEUMBIG
+A1UEBxMLU2FudGEgQ2xhcmExCzAJBgNVBAgTAkNBMR8wHQYDVQQKExZBZHZhbmNl
+ZCBNaWNybyBEZXZpY2VzMQ8wDQYDVQQDEwZQUkctUk4wggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQCr2nNY0tQPp2mEX75pycX0XVqCCraSmUzFhPoiNPI8
+2OSmH8XhFsXelR84fukJrvnVEqtMimxhWkTguSBTf+dBTWbOfKnfzc7SJbQqblly
+Njs9RCppU/fN+NjYnoSqgGNl0mT/TiHZZozWcgaKTtkezxDi7czedY2Bk4z0SS98
+CYX7FcAHwK2ZOZHHs+AAwf4M9Ijf5FeTuU4m3T0Le9VBvoYak6VC7MHJ0MQecU26
+TDgVWzUu0wyncwS6fqFtbftNLfp8FsmdG+Oser6RDz/Pkl5R9KkhEQBwyhiMtwAR
+pSCUeP3xCYSAQQ00Arl+HXvNda54tID56p0UatoTyi0vAgMBAAGjggFgMIIBXDAO
+BgNVHQ8BAf8EBAMCAQYwgYIGCCsGAQUFBwEBBHYwdDBIBggrBgEFBQcwAoY8aHR0
+cDovL2Z0cG0uYW1kLmNvbS9wa2kvYWlhLzI2NEQzOUEyM0NFQjVENUI0OUQ2MTAw
+NDRFRUJEMTIxMCgGCCsGAQUFBzABhhxodHRwOi8vZnRwbS5hbWQuY29tL3BraS9v
+Y3NwMCwGA1UdHwQlMCMwIaAfoB2GG2h0dHA6Ly9mdHBtLmFtZC5jb20vcGtpL2Ny
+bDBDBgNVHSAEPDA6MDgGCisGAQQBnHhlFQowKjAoBggrBgEFBQcCARYcaHR0cHM6
+Ly9mdHBtLmFtZC5jb20vcGtpL2NwczAdBgNVHQ4EFgQUUvtZ4pqoOpYvue7w/ltI
+Ed5rdR4wHwYDVR0jBBgwFoAUV4xUX3lpUUISIaSleKzbX2gvicgwEgYDVR0TAQH/
+BAgwBgEB/wIBADANBgkqhkiG9w0BAQsFAAOCAQEAl9N/5lOIvJpbOgfiIqKFHZRy
+jVaTUi0qdQzrQD54KWto+jfurZIDTb1d6hfkLNC2gJcu+SAidknBoaw5GB1EBFsV
+wHI7hVSuXJ7fBw828NyvQKymacm4JdxeVc+GR6UItG9dUVCV6LjMFodSLJuL8a2e
+9Cxz6s09scV9AB2162Ls56CRAc+6TM1HA+q21EpSgWGXweDf7kP8+LicWr9uSS9p
+oLH5zJoJ9PC0IySgVQc0LtErR2oSAyi8lPSQaUj3dQTpd054roGcTlyPsM5PGZsI
+dL43XMLMhNtn2h/fV3RZOUtxSIiMm/i62xsDIi742rQ3ZPmTbiTDqzPVk18NdQ==
+-----END CERTIFICATE-----
+
+
+AMD fTPM RSA ICA RVFamily 7ABAE76EBBA151415337F49A77CB1C3E
+==========================================================
+-----BEGIN CERTIFICATE-----
+MIIE2DCCA8CgAwIBAgIQerrnbruhUUFTN/Sad8scPjANBgkqhkiG9w0BAQsFADB2
+MRQwEgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1
+bm55dmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERl
+dmljZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xNzAxMDEwNTAwMDBaFw00MjAxMDEw
+NTAwMDBaMHYxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzESMBAG
+A1UEBxMJU3Vubnl2YWxlMQswCQYDVQQIEwJDQTEfMB0GA1UEChMWQWR2YW5jZWQg
+TWljcm8gRGV2aWNlczEPMA0GA1UEAxMGUFJHLVJWMIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEAxPCInsP6UJTB9APCZcXBT+XQS9SGiw5yZtM5eSPGvDDa
+7FQRtxwiA6m386xXQhZplz9F0GDwc6iVcf/yh2W7203cDKbbKXjc6KLPUAnRSMen
+NeIj9bmSut2Epi5Z8RMMd6M11b0f/bxJGMmttM8y0kpzn+u0qK06wyeo+ZqnQFoX
+DQzlenGstpCGj5MyTd0ATSu7yrjp0cdQeTRbl4bF/9PQ3gqKzLCbHtFnnTN19bkU
+jKM0GQ4AY+tMu3WRsQW0hFHK0q+HQDijkCGw62wvKlakpTVxg9zC28kmaab+RPxJ
+IYyAoNR8D5C5xscBM7nhGZLN2DjBg5paW+5yk/UZdQIDAQABo4IBYDCCAVwwDgYD
+VR0PAQH/BAQDAgEGMIGCBggrBgEFBQcBAQR2MHQwSAYIKwYBBQUHMAKGPGh0dHA6
+Ly9mdHBtLmFtZC5jb20vcGtpL2FpYS8yNjREMzlBMjNDRUI1RDVCNDlENjEwMDQ0
+RUVCRDEyMTAoBggrBgEFBQcwAYYcaHR0cDovL2Z0cG0uYW1kLmNvbS9wa2kvb2Nz
+cDAsBgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vZnRwbS5hbWQuY29tL3BraS9jcmww
+QwYDVR0gBDwwOjA4BgorBgEEAZx4ZRUKMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v
+ZnRwbS5hbWQuY29tL3BraS9jcHMwHQYDVR0OBBYEFIoFeM9WFG/qOZr5A/tbCsNu
+snhqMB8GA1UdIwQYMBaAFFeMVF95aVFCEiGkpXis219oL4nIMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwDQYJKoZIhvcNAQELBQADggEBAJ9TlFKslPxTCEsde9ZuM74ZV/ih
+pzO+89jTQaIlNgIkkKeDX6q7Oy0XATvQGeNpQ4sifhEd4EAi45A6ZpowZyflezDE
+tuyG7KMmFpLuE5IL1msuEy9+LGyRSmX+TIhvMcOBPPGvLZJ3YV0UUvvSFwhhbJ5C
+YlD0grQN27feVXuqoj7MjgkZ5ZNrYz4yTcpljfta1oFs7zVrA7nmjtB7J6/fy5y7
+t85iJZujW4YG8dskch28PBJ28v5kW1FHJfVj/0hH759b2DDc0w0iaA9aj0PYj3Vm
+igYAcR4XCQWNADt8a5acm/y5/7t+wW1XSKDxochM8Evb7eNsUlTTFT+eL4Y=
+-----END CERTIFICATE-----
+
+
+AMD fTPM RSA ICA SSPFamily 8f557bf02fba534642df289ff945cd40
+===========================================================
+-----BEGIN CERTIFICATE-----
+MIIE2zCCA8OgAwIBAgIQD1V78C+6U0ZC3yif+UXNQDANBgkqhkiG9w0BAQsFADB2
+MRQwEgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1
+bm55dmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERl
+dmljZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xOTAxMDEwNTAwMDBaFw00NDAxMDEw
+NTAwMDBaMHkxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzEUMBIG
+A1UEBxMLU2FudGEgQ2xhcmExCzAJBgNVBAgTAkNBMR8wHQYDVQQKExZBZHZhbmNl
+ZCBNaWNybyBEZXZpY2VzMRAwDgYDVQQDEwdQUkctU1NQMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA3Ew91HKxCZ1CY0Joh3EslBzLWZPagldUqYRxEJDR
+Zaz+pSZ51UkMgKmj81FZACEjCpB1rnvky6GLpa/NZMv7vAx8MirXlu7kaV6h0hCl
+Qtmebe17eSsux9VvMvOBgyOMZzjQYQSiBYKZtyCPFIKryTAMxmozfRVTwOt3JpWE
+tXRutkP6RRzJGYGSe5j/44Dn6MhXc+uUoQcprMqrsmItAepGYxXOWC/AZ6c9Qi+h
+cysRxdyMqsRfekF38q8pxHcb+2czshxYxnxes/K7zAQfs8i+vYuvbq1LRiRTwz0p
+0Bf3MmjiPYpwyGHOa/lW7vFXZu+YBtpx4B/HB6m9VvgxcQIDAQABo4IBYDCCAVww
+DgYDVR0PAQH/BAQDAgEGMIGCBggrBgEFBQcBAQR2MHQwSAYIKwYBBQUHMAKGPGh0
+dHA6Ly9mdHBtLmFtZC5jb20vcGtpL2FpYS8yNjREMzlBMjNDRUI1RDVCNDlENjEw
+MDQ0RUVCRDEyMTAoBggrBgEFBQcwAYYcaHR0cDovL2Z0cG0uYW1kLmNvbS9wa2kv
+b2NzcDAsBgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vZnRwbS5hbWQuY29tL3BraS9j
+cmwwQwYDVR0gBDwwOjA4BgorBgEEAZx4ZRUKMCowKAYIKwYBBQUHAgEWHGh0dHBz
+Oi8vZnRwbS5hbWQuY29tL3BraS9jcHMwHQYDVR0OBBYEFJB9Zem1YjFZl91a0Iay
+t1mJV7ksMB8GA1UdIwQYMBaAFFeMVF95aVFCEiGkpXis219oL4nIMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwDQYJKoZIhvcNAQELBQADggEBADLIOVF6Wu8rI7FypvQys+T5
+joQ3TrLvNfpy1QK1R/m8VLANglZXECLpVvSs4pqopuM5yWN1NPA3nJoTRpacqDFs
+zXbZ+nh5fBhBfiaF1n2jYkGafG6nSdqvWhUazK9klHyTvXRKEZEJExVXpvcN31hI
+MZ/kpGhMoF90rcUzoKajM6zHZtuDT1KFd2I/NFf+yQxOGtrOP98q+RXuFfXWVBVB
+a+LAmFuAHsn/Pqqiu5YdGAbVAfEPht/QEdB1+BpQ7mry7NiHi5w5z28qsQYGcgyo
+K6qPRxQgHT8/CqI3Fx1C/UoHq+4TH88EMxIB9knyydVipIQZWdf5zjmxVSRmhkU=
+-----END CERTIFICATE-----
+
+
+AMD fTPM RSA ICA STFamily 1EEA5C967B0557D56AC61D4EE4DB235C
+==========================================================
+-----BEGIN CERTIFICATE-----
+MIIE2DCCA8CgAwIBAgIQHupclnsFV9Vqxh1O5NsjXDANBgkqhkiG9w0BAQsFADB2
+MRQwEgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1
+bm55dmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERl
+dmljZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xNzAxMDEwNTAwMDBaFw00MjAxMDEw
+NTAwMDBaMHYxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzESMBAG
+A1UEBxMJU3Vubnl2YWxlMQswCQYDVQQIEwJDQTEfMB0GA1UEChMWQWR2YW5jZWQg
+TWljcm8gRGV2aWNlczEPMA0GA1UEAxMGUFJHLVNUMIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEA6T3q1dRWVLt1a/26XhXMNb74HDe9B2p1rQ/MNCOdbta0
+gSGZYokQwEQWA7M7UpZ8UffV60/GDVHcMtaucVjkCwrySnI1Cul0cV8Wi/NYlOnK
+pEy1TUmiJQnETPTP5yyoQ08wzv91hHD/uL3HRvIycpCAasoJP2Tvd80D/hTKEUtG
+7wo1qjbQKk2zVBDihJB9wGms2TQ8kIJnuO782FXYe5mBUE4FlMBEQorKVPLEY/aV
+DVfZJMmC1HA45eFEKg9bliVsDrAl1AdULTJvOSB8fv79klJa1usqRlZuDw94Iiko
+GRegGdy+P4wCHZa63oaFfW2gwMsTtE94Awocaex67wIDAQABo4IBYDCCAVwwDgYD
+VR0PAQH/BAQDAgEGMIGCBggrBgEFBQcBAQR2MHQwSAYIKwYBBQUHMAKGPGh0dHA6
+Ly9mdHBtLmFtZC5jb20vcGtpL2FpYS8yNjREMzlBMjNDRUI1RDVCNDlENjEwMDQ0
+RUVCRDEyMTAoBggrBgEFBQcwAYYcaHR0cDovL2Z0cG0uYW1kLmNvbS9wa2kvb2Nz
+cDAsBgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vZnRwbS5hbWQuY29tL3BraS9jcmww
+QwYDVR0gBDwwOjA4BgorBgEEAZx4ZRUKMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v
+ZnRwbS5hbWQuY29tL3BraS9jcHMwHQYDVR0OBBYEFJDgB+F1V0IBp6jayTsyMRSo
+h+HoMB8GA1UdIwQYMBaAFFeMVF95aVFCEiGkpXis219oL4nIMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwDQYJKoZIhvcNAQELBQADggEBAFEH+eXMomVzTr17dIOhIlJeTG+A
+zFb4DhU01k0aOhpiCyS/09FJ7NOOOPfuzfGz69xpEuTbCJTwR/waVHiaYh4WWRdH
+nRAphoJaFCgvleIblhweJXtbhbNZZqVn4Cu+zyXmjs5lJyidEzMexPXcUdo/05xE
+NTM8MS2z/pJpxeLuvdz3FUb4iTZt2gLy3EswjxPD7QXezkRkPCf5ODNeYKjT7H3f
+qX4bXuaGh6mOm9F8dQe1p28FLG7zAkqbmrokXrSrmkAvNhao2Gc3Y3IvQQw6KTPh
+dGwGLQQkY5vtUKrK4kcWcvTtUQlVLAIQAnJscQgTu6Ix5oV57KSe3Cij4CA=
+-----END CERTIFICATE-----
+
+
+AMD fTPM RSA ICA ZPFamily 2BDEA5B81C045B536EE60CA3653E4B1B
+==========================================================
+-----BEGIN CERTIFICATE-----
+MIIE2DCCA8CgAwIBAgIQK96luBwEW1Nu5gyjZT5LGzANBgkqhkiG9w0BAQsFADB2
+MRQwEgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1
+bm55dmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERl
+dmljZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xNzAxMDEwNTAwMDBaFw00MjAxMDEw
+NTAwMDBaMHYxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzESMBAG
+A1UEBxMJU3Vubnl2YWxlMQswCQYDVQQIEwJDQTEfMB0GA1UEChMWQWR2YW5jZWQg
+TWljcm8gRGV2aWNlczEPMA0GA1UEAxMGUFJHLVpQMIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEAuCTPvBEZF+063jnTNkxbUpppwyi4E+Ckj03xf7XDHPFP
+h+3q3zHvsamIXRncYM9jQHkNYDHdR9z+4oLfspBfP5o/Ks8nFvrGsL7vSHzxBJy7
+3eunsREP8Ca2TE4oaXn5hbDSBaF+kYwlrqHLE5PzVF2piShomR9mkZyRYk1l9+sb
+2Nv6rpFd+eaFjLMgD2xc1BLqNGH2ICvjBDMaZ27YmcZK7gwUpfDXhipzG59JLSm4
+fJ3THFW8ZdP64zt6H1zKaQ4ou7EEHh9qs5UgKzXwEG3MzE03nMedmUzBoC26VqbI
+aDGzLzO0I5kUNZlyBomkN/MamcJcvqsaal5xoDPujwIDAQABo4IBYDCCAVwwDgYD
+VR0PAQH/BAQDAgEGMIGCBggrBgEFBQcBAQR2MHQwSAYIKwYBBQUHMAKGPGh0dHA6
+Ly9mdHBtLmFtZC5jb20vcGtpL2FpYS8yNjREMzlBMjNDRUI1RDVCNDlENjEwMDQ0
+RUVCRDEyMTAoBggrBgEFBQcwAYYcaHR0cDovL2Z0cG0uYW1kLmNvbS9wa2kvb2Nz
+cDAsBgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vZnRwbS5hbWQuY29tL3BraS9jcmww
+QwYDVR0gBDwwOjA4BgorBgEEAZx4ZRUKMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v
+ZnRwbS5hbWQuY29tL3BraS9jcHMwHQYDVR0OBBYEFMuz9ybnLDe/fpxs+qbvBviP
+0fxMMB8GA1UdIwQYMBaAFFeMVF95aVFCEiGkpXis219oL4nIMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwDQYJKoZIhvcNAQELBQADggEBAEvK4x3Ea5XIGTEfnjlPyvoHJgMw
+uJnnyKJ02xfgAULfF6NgI5ZFsa1z+pqPhOHVTR2X4oxPeaA/TiBB7MWMYOTU8pc+
+6L8fOE+6W7q96iGNXUESiC68Nxy3cH6r3QFnfP8KJy4pTw7nF4uB+N92VZdf4PHq
+cTjKGnDXw+zjuooqhq+QIjM77wvlPg8d65BT8fnnTlTWMuBkaNpkknukMM/rt6R5
+6hDehYwNiHoZejF9jPF0DXacuLhOrmUbtWyyN8I52eo72X4WYO7dd9ELXOSANndv
+8RyOND5a9I6RO199XSNZHvZ4XxaD8eqcJ3Q99obAexDoR64Ri0ovbibmAFw=
+-----END CERTIFICATE-----
+
+
+AMD fTPM RSA RootCA
+===================
+-----BEGIN CERTIFICATE-----
+MIIEiDCCA3CgAwIBAgIQJk05ojzrXVtJ1hAETuvRITANBgkqhkiG9w0BAQsFADB2
+MRQwEgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1
+bm55dmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERl
+dmljZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xNDEwMjMxNDM0MzJaFw0zOTEwMjMx
+NDM0MzJaMHYxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzESMBAG
+A1UEBxMJU3Vubnl2YWxlMQswCQYDVQQIEwJDQTEfMB0GA1UEChMWQWR2YW5jZWQg
+TWljcm8gRGV2aWNlczEPMA0GA1UEAxMGQU1EVFBNMIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEAssnOAYu5nRflQk0bVtsTFcLSAMx9odZ4Ey3n6/MA6FD7
+DECIE70RGZgaRIID0eb+dyX3znMrp1TS+lD+GJSw7yDJrKeU4it8cMLqFrqGm4SE
+x/X5GBa11sTmL4i60pJ5nDo2T69OiJ+iqYzgBfYJLqHQaeSRN6bBYyn3w1H4JNzP
+DNvqKHvkPfYewHjUAFJAI1dShYO8REnNCB8eeolj375nymfAAZzgA8v7zmFX/1tV
+LCy7Mm6n7zndT452TB1mek9LC5LkwlnyABwaN2Q8LV4NWpIAzTgr55xbU5VvgcIp
+w+/qcbYHmqL6ZzCSeE1gRKQXlsybK+W4phCtQfMgHQIDAQABo4IBEDCCAQwwDgYD
+VR0PAQH/BAQDAgEGMCMGCSsGAQQBgjcVKwQWBBRXjFRfeWlRQhIhpKV4rNtfaC+J
+yDAdBgNVHQ4EFgQUV4xUX3lpUUISIaSleKzbX2gvicgwDwYDVR0TAQH/BAUwAwEB
+/zA4BggrBgEFBQcBAQQsMCowKAYIKwYBBQUHMAGGHGh0dHA6Ly9mdHBtLmFtZC5j
+b20vcGtpL29jc3AwLAYDVR0fBCUwIzAhoB+gHYYbaHR0cDovL2Z0cG0uYW1kLmNv
+bS9wa2kvY3JsMD0GA1UdIAQ2MDQwMgYEVR0gADAqMCgGCCsGAQUFBwIBFhxodHRw
+czovL2Z0cG0uYW1kLmNvbS9wa2kvY3BzMA0GCSqGSIb3DQEBCwUAA4IBAQCWB9yA
+oYYIt5HRY/OqJ5LUacP6rNmsMfPUDTcahXB3iQmY8HpUoGB23lhxbq+kz3vIiGAc
+UdKHlpB/epXyhABGTcJrNPMfx9akLqhI7WnMCPBbHDDDzKjjMB3Vm65PFbyuqbLu
+jN/sN6kNtc4hL5r5Pr6Mze5H9WXBo2F2Oy+7+9jWMkxNrmUhoUUrF/6YsajTGPeq
+7r+i6q84W2nJdd+BoQQv4sk5GeuN2j2u4k1a8DkRPsVPc2I9QTtbzekchTK1GCXW
+ki3DKGkZUEuaoaa60Kgw55Q5rt1eK7HKEG5npmR8aEod7BDLWy4CMTNAWR5iabCW
+/KX28JbJL6Phau9j
+-----END CERTIFICATE-----
+
+
+Atmel Signing Module 01
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDEjCCArmgAwIBAgIUWZRTybphJ0L8eMcF+mnAEpwxmMkwCgYIKoZIzj0EAwIw
+czELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv
+cmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN
+IFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTEwMTAxMDAwMDAwWhcNMzEwMTAxMDAw
+MDAwWjBtMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT
+EENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSAwHgYDVQQDExdBdG1l
+bCBTaWduaW5nIE1vZHVsZSAwMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAOWvuMl7bm1JxiT8+2VY1rKRoXuU6/QYa1kPUDnw6FZZJovrYNhqnPagPUd/
+VoYohJirkN/uFyLzvlxRa1Qr/vGLhJwSCLuOhRF9SwRuy51CW5IAFdKcxzFjoIS4
+QyBnBoP+pDvXx/uynMH8DWofmS5H234rN3JtPUZThvEUqvC8ivGXNO0B9jOy//Dx
+Z0UUOTJwIFu77pPIfzOtk08vsg1blpf454d76yoFTKDsi/4jNxHRRyFfq/5STiPx
+0QJZIngkRoidZCSOLUKVF4i/rStogdcgMZ6nEkM1lsZTbrurAFFdrSPqjFTNqOnk
+9X/zDO/m+J5srga3TiDuXb03pO8CAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMB0G
+A1UdDgQWBBT3YaOh9AjxCQeXuHEnwqI5fArKJDAfBgNVHSMEGDAWgBQx0F0Qba/k
+7RndCq/TW+oio3gcVzASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMCA0cA
+MEQCIFEnpOFkOJnm2Occa/pRpqIO+xMWna+3GHQ7hdak1oS5AiBdjJ9CEBMWRgNd
+MXeyfubNfOA9rcIsxM18ODwiXw6WcQ==
+-----END CERTIFICATE-----
+
+
+Atmel Signing Module 02
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDEzCCArmgAwIBAgIUVxemUjurjw1OiJWUZ3lLwvPhRJQwCgYIKoZIzj0EAwIw
+czELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv
+cmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN
+IFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTEwMTAxMDAwMDAwWhcNMzEwMTAxMDAw
+MDAwWjBtMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT
+EENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSAwHgYDVQQDExdBdG1l
+bCBTaWduaW5nIE1vZHVsZSAwMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAOnv6DDMr+zT5TSqPQO5bMCQ5BNeC2RkrCokcs8iXtqhwqAcLGRKt0FdsOHb
+nJ4HDsrEWnMw3fApLvWd99nW4vU6ukWWqZP3i+5nARf1wTbu1n7dzw0U87PIKTN8
+RR6OffjgI3msd0xPMkej4YoqaeNriPX9fOL0LIMMxFjc+pDFD+ZsHtx5vcvEZU86
+6SQLVbVvcOy5qEnjhx4M7BBhvauRdj5GOl9BbfXg0GiDpU6H5Eh87xtlS7/DCSDT
+I516z57xfHaht/JcwCLw3ySisROTI2NmqBXNXXyEkA7+LGMdNm+o8Hw5fKRQq8As
+x+3FpiBNIQ9gVdi6bq1EU4vpJDECAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMB0G
+A1UdDgQWBBSBtdmcv6yYxdYajr8mqGoIa/o+zjAfBgNVHSMEGDAWgBQx0F0Qba/k
+7RndCq/TW+oio3gcVzASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMCA0gA
+MEUCIGtXLUfjDHdNbmtLSjuamOhml4OIvINSUdwUHBfSAiJ/AiEAzBUigNgggA9s
+jAoDiVeUXqT5N097WlQjGPlhO4exl3M=
+-----END CERTIFICATE-----
+
+
+Atmel Signing Module 03
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDEjCCArmgAwIBAgIUaEzk01H7UPLd9cdjrm8SGNM5dQYwCgYIKoZIzj0EAwIw
+czELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv
+cmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN
+IFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTEwMTAxMDAwMDAwWhcNMzEwMTAxMDAw
+MDAwWjBtMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT
+EENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSAwHgYDVQQDExdBdG1l
+bCBTaWduaW5nIE1vZHVsZSAwMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAJhQFAEyf/MSHrhVtGijWXMArQywzkKBiHs/rIOuBJifqxCjR3z0I+3nt1MY
+gEVqC75qzMDGRR11bh2+kOkFAR9jplGX4XAV5veGW16xUMg8aLEd5VPiWbuSStF+
++pGQELYgSNv1JCTLdMUVJtT+6SJyp6pPR2MNh6cKwmGSCO/EdjfG3xiQFzqc9aDq
+SO41R3sLSWP4Lp9Y4F7jsDVvtaLg2lKwf/LfZtJb7KHqnbqtDYb5eAC+pMVRaeLE
+l94BbkjkXGxT+Ibu1DCcuoOfXW7IKbpW5bXdvhw6sRGuFTzntyJQuIlLKNPdb6vl
+ePU4WDmdE1xY5NXTXXExbitjvJECAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMB0G
+A1UdDgQWBBTNNAGsbhxvk93YadRqUYMRs3R4lTAfBgNVHSMEGDAWgBQx0F0Qba/k
+7RndCq/TW+oio3gcVzASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMCA0cA
+MEQCIAikYRQQ9utw0dyX9nMT5hCCqRIWshNyzwJ7ixSDJFKzAiBHE2YmS4ilCQuO
+JuTeDJYWPWyfb5Cl3JwXdDNlaM3vvw==
+-----END CERTIFICATE-----
+
+
+Atmel Signing Module 04
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDEzCCArmgAwIBAgIUa3uAQUxkKpWg/Y7HTiCoypgW74IwCgYIKoZIzj0EAwIw
+czELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv
+cmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN
+IFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTEwMTAxMDAwMDAwWhcNMzEwMTAxMDAw
+MDAwWjBtMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT
+EENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSAwHgYDVQQDExdBdG1l
+bCBTaWduaW5nIE1vZHVsZSAwNDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAMbZdbGpbv9kl3qghjLWnNBjAqsekHoeCra74j3xlXTm5LLshkTz7mltuf6G
+DRi5X9sf5A5ZJwdnmRTIlvKLSl1fsTudLhXMaEx12dcJzA/MegoDNM9I9w0OXdHr
+ubEUQ3exh2BKbrzI9MfKYJGZPgvlMdoVpY/MRIhAx/KucMj+QF/dhpKaFAC9HuL1
+Fe/3AhAXLCzrPDquqys5ooPNpLA4i/05//E7bEplAME/xczP4Iu/cdA9YR7V8izh
+TwyKzst3d3M+UDDkkiwxxo5qGgwRdPq3AUSQglNogbXyDAXryTtSAVJo/xIHqx1l
+mn+aTTSQC+tngHnmlipuTml+m1UCAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMB0G
+A1UdDgQWBBSghUvRl/ghL6y6OJkb/dv10TzpzjAfBgNVHSMEGDAWgBQx0F0Qba/k
+7RndCq/TW+oio3gcVzASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMCA0gA
+MEUCIQC/qQV5ZAFBIoKvCDKNfIeimdZJHWhlLNxRDJs6VIfR+AIgQdLz5oU0ZWix
+17vP0kgii5i1CmLfjvOeajfa8SXD8tI=
+-----END CERTIFICATE-----
+
+
+Atmel Signing Module 05
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDEzCCArmgAwIBAgIUSU3KWn2tz8G9sFtsBnlCUIXlQNAwCgYIKoZIzj0EAwIw
+czELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv
+cmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN
+IFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTEwMTAxMDAwMDAwWhcNMzEwMTAxMDAw
+MDAwWjBtMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT
+EENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSAwHgYDVQQDExdBdG1l
+bCBTaWduaW5nIE1vZHVsZSAwNTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAKoNRY4TkPxrKoFC/lkgXH2K94ZMcZdRAWgiKoqJXNUeU5mWm2h6AlCCZocF
+3xRoRb4WayNAHBKiGADS4GNK4r5+Ier1fq68LcTNV+1/IZk/gHb8S9qfZTgqe1za
+UNkcPqP9iYbgUlL/qKVuyusD7psFKcuIC/nQKM2cgY2p+QqPbD+WId5HRt/ns0bH
+8X9wp0u+jYYx4JSvQFlHTNXOphRqkz/n1Pckk6aGm65w1MyHHnbuTrDGWuS9S3iy
+h66q2zN2/feWlPUT6yEKDt8fgUmrvQG9HeteM6Q9E3lsIwU+2OayINeGyMew4gPu
+JBkROXx2baXUlqYCZpZHDm0knb0CAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMB0G
+A1UdDgQWBBTW9W7Pz37dt/2H7QHhJ+4AmkY7yTAfBgNVHSMEGDAWgBQx0F0Qba/k
+7RndCq/TW+oio3gcVzASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMCA0gA
+MEUCIQCDW3rnSU5hck1n9vfuxl6IiY/wlDDs0P/qHjWXPa9k/AIgeR1Y4NGdhzgW
+NwHWGepWPddzcD/UxQ9I63ZJDqYHeYg=
+-----END CERTIFICATE-----
+
+
+Atmel Signing Module 11
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDEzCCArmgAwIBAgIUbxTqjeOwQnxp4/enilmqXAQCYkkwCgYIKoZIzj0EAwIw
+czELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv
+cmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN
+IFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTEwMTAxMDAwMDAwWhcNMzEwMTAxMDAw
+MDAwWjBtMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT
+EENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSAwHgYDVQQDExdBdG1l
+bCBTaWduaW5nIE1vZHVsZSAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAMPbPcpKYMx9QYq8/CVZh3P41zUmhbA0GDPYXEt+ddz+2q0vq/5rrJlKn3cm
+2PxkPPmKgAOiGavsZRme1lBJsb6Px5Z5vxUI93qWRg967gKZvvHS1eB77OEY2Qkv
+HH6ZEWcoIfp0Xa2d2gMGUY0G4b5fJgCTkNkafQDWmTM2I63u2nZLqiBQ2vN5yoJ+
+F5DCH7fjLYTr3DGJmbUi+uILwDWez4q8gdnDIUvtMgDBivzqptBCyEZPMKgEf5d7
+cUVcaEBKgPXwZNm7xjYlr2vdnIcQi6RF/fgnGVr1Hh+lKeWthA8cPAYMRNC+rKoy
+DVp9rjdMe45SsrIPlxMqO6lKTEUCAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMB0G
+A1UdDgQWBBRGZt52YgTnTdKbtP3FhSOhQD1qMjAfBgNVHSMEGDAWgBQx0F0Qba/k
+7RndCq/TW+oio3gcVzASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMCA0gA
+MEUCIDHF6nImxBvotQNGm8a+izHSkadrP+qlSHHUlk4Mrv75AiEA3p0ecSdX0hM3
+701WulPqT7V9Fvb1r+VEpvQBiJEzvHM=
+-----END CERTIFICATE-----
+
+
+Atmel Signing Module 20
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDEjCCArmgAwIBAgIUdbpNMUXEGTxeQxEIRMR8jFViQfMwCgYIKoZIzj0EAwIw
+czELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv
+cmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN
+IFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTEwMTAxMDAwMDAwWhcNMzEwMTAxMDAw
+MDAwWjBtMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT
+EENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSAwHgYDVQQDExdBdG1l
+bCBTaWduaW5nIE1vZHVsZSAyMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAJWEXww92zCQe8OhZfins6CGhJM8/tlQnhfL96IbDZ0igoHMfLpO0nsqedGx
+LSwerzs8IHDOVoxSLSsmC2Wh7T+N6t4h7LyEowBjXGBnENzazOImuqXNoHla2rqZ
+XT03UBTkI8HftD/0Nv0TG1mOoPrG4yA7SLRHNb4X+myN04p0/mxscV3UfQeqloCz
+XPx99cLATTdpz79SuMBPDFnwFe4XCtjaCHNcxhGPiIlj7V0ruPM5r0tpcSllmLoh
+wcAreZ7P1OzPF0o5Go+0m4Q9NsisIjGr7u0jAHHklljAboY4Jvf83zADyjvcHkIs
+VQnrl7KQcnn7HpD7pOaIW1jkv28CAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMB0G
+A1UdDgQWBBTgAo2HzmxnqHUcxLXXT1diLnXkKjAfBgNVHSMEGDAWgBQx0F0Qba/k
+7RndCq/TW+oio3gcVzASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMCA0cA
+MEQCIENnp5oVvHCerJeUTpl6TLgzZmOr1erz5miO4o0lFrxlAiAyIt7Bc3G26GjR
+0y5/4fUicKo9xnhXKNxFZFyXc6gaJw==
+-----END CERTIFICATE-----
+
+
+Atmel Signing Module 21
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDEzCCArmgAwIBAgIUUMytw8rGzN8RC77Wdf03M/PTMeAwCgYIKoZIzj0EAwIw
+czELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv
+cmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN
+IFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTEwMTAxMDAwMDAwWhcNMzEwMTAxMDAw
+MDAwWjBtMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT
+EENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSAwHgYDVQQDExdBdG1l
+bCBTaWduaW5nIE1vZHVsZSAyMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAMpV2oOCZs6KmkyvHgnEow0jhkXK1/CCv3wWsIBFigID8v8rvvBRl1ytdFw3
+iNX5pQHnw6+9+PQp/r/f8vjH31yHbigqkeWT/TNfnwZO5OZeMdkngvTXyDBvnNMi
+eptZBJrEjdOJ5SpPH6KOeC+w2PipI34ehD8cs8bDA6qk6zInwU4RdpKqOSlAQ3QY
+yJDlB9XWy1hoxIFKSqHArtjONVO45o06GrZAPnd1fj8kEReP5SZE2Ir+ictWZdaq
+RJC70dKiq86B5Doo+8waUP+OgdgVtaQEY1OwCKdzbX0uUxy+fZqV8abso+stodMM
+TVUZD2aZ1QNGVh4M/SeE3CIADT8CAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMB0G
+A1UdDgQWBBQtYFzYgrK9cWzOcckLx3TT1byx1DAfBgNVHSMEGDAWgBQx0F0Qba/k
+7RndCq/TW+oio3gcVzASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMCA0gA
+MEUCIQDoOiYGiPcrHJjH2Kb7Wmqvesv9CXaDekyjMbKjCKBgsgIgW0qsMympS+Rk
+GzxdH7cnLlwmB+hArEf+9S8nETRHY0M=
+-----END CERTIFICATE-----
+
+
+Atmel Signing Module 22
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDEzCCArmgAwIBAgIUXdnnM6tgfyJOezwERoiMm2102wQwCgYIKoZIzj0EAwIw
+czELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv
+cmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN
+IFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTEwMTAxMDAwMDAwWhcNMzEwMTAxMDAw
+MDAwWjBtMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT
+EENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSAwHgYDVQQDExdBdG1l
+bCBTaWduaW5nIE1vZHVsZSAyMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAMWtFwSJQY/beW2AfNQnmppVdyN602rYYMlJ9lS+/8J4NryucewQd2tcI17e
+ZP7sEfzObXyAzko7oP0nQ301pGUXvNiI/6GCTsrXKxcxM6LiGVQO7f7inV80cM+3
+Weiz5zVZKfBollAwg6UzTZp74nmXI6qH2ow3HNBAu9tDU/jappACXdKmDLPouEwN
+qJtgti8aZKvmHSadqSTggkKrgsJi1wfDsa3XY1+EFuZh84oMeH2pwvxiXF7kUD16
+i67h2ZVplKlO0pesmRJbiLR2wa4uAcQ90O3lx9LDN62RlAi695TD14xrH6aIGU+M
+y69O+UCMbcHuTlKZ7JVOtXN+FwcCAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMB0G
+A1UdDgQWBBQ1ruc2ybTShhMJ54FcD6TOQNhl9jAfBgNVHSMEGDAWgBQx0F0Qba/k
+7RndCq/TW+oio3gcVzASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMCA0gA
+MEUCIQDcUaA0rdKJWzumgJ0hevRoj0b3PWThtplRdhhS2QGotAIgF0ZXSGWMQswQ
+UvwooDAveOY2Mh147/Px5XZR47nfDpI=
+-----END CERTIFICATE-----
+
+
+Atmel Signing Module 23
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDFDCCArmgAwIBAgIUQwWvul0AgI+EMR5YMnHQ6UcNhcgwCgYIKoZIzj0EAwIw
+czELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv
+cmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN
+IFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTEwMTAxMDAwMDAwWhcNMzEwMTAxMDAw
+MDAwWjBtMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT
+EENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSAwHgYDVQQDExdBdG1l
+bCBTaWduaW5nIE1vZHVsZSAyMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBANRxHgp/Nq/Fa4OuIaML7bP9mI+crl4RL+xcFGiEqO62BZwG7LcjFRjbC9uK
+3kVu2oso+uYhxKI8dQmq9yZbvIWH06omoBZhCv6nvHqxGrcIOYxUNBnSt2vU8O54
+WGY46XvfLEYy/w0JSOTYigpTxeGTaiONfDBps5jzf0DcUZyiQK+S0xPBWQjEoZuV
+fXoHu9qC4+FXz7s9vX0CwWViQNvjVMuoAqXFEoXoxn5vQ0xgZNJt8K7qsl7sysye
+FNF6OZ06qe2VfyS20lp0ycbO9oWeA9Z24tKWj0IHCuRWGyMENVrhKTeUDH4pbAGR
+W6JEJ0Gvo19kc5XqGtJlEVRJxk0CAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMB0G
+A1UdDgQWBBRV9No5ymW2aB8rdxG8PvIIqGedHjAfBgNVHSMEGDAWgBQx0F0Qba/k
+7RndCq/TW+oio3gcVzASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMCA0kA
+MEYCIQDcDy9hL5tv2dnKG5F0QAUDyPjFpM2oXT+7+65lhXEZVQIhAM8nWy0r2RPn
+/it+ZY4TUGbji7rKab2tAC6YcagHvFiw
+-----END CERTIFICATE-----
+
+
+Atmel Signing Module 24
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDEjCCArmgAwIBAgIUUkbrM0nja86+VltbnRvVSPQKYe0wCgYIKoZIzj0EAwIw
+czELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv
+cmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN
+IFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTEwMTAxMDAwMDAwWhcNMzEwMTAxMDAw
+MDAwWjBtMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT
+EENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSAwHgYDVQQDExdBdG1l
+bCBTaWduaW5nIE1vZHVsZSAyNDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAKq0tRItVby8VWFjb/7N+WmJh2uTDp70Mm4Fv4tV7iDWbj0KmDcNNsK1kQOX
+n7drbPhZCQ728+nnbah99Ao8fqZhPTr6LWOzu626K7s9ltj6XENP4py1IsTYqvwP
+IIikViWkzbIhelSzRFhHubH963uvgv2UFH8LqTOem1NCayDMRIKfEghYLkLDcHKt
+rcba9bo4F+DzegznregXK06bGL8SoUD2y/035f5DKmFc6qsqwRoJIPPthUcTum1U
+iQsK8qwN+2cJICZd5P6om0xc8CVXyZxmk+ey/01FSUcAA7VTfqCRXEGpkezelSLq
+Ice36e1PLfJ6yoWaSMCuNOYSxNcCAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMB0G
+A1UdDgQWBBQWs0Hjgc1cPnmayDjKF/H38/dDHjAfBgNVHSMEGDAWgBQx0F0Qba/k
+7RndCq/TW+oio3gcVzASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMCA0cA
+MEQCIDyZXKar+bsQIZHVGtcTLpMqi35eoF7pqjOhFIv1FHZ6AiBrBZyelmYzR2i3
+3IYua7i/IisumKWp5EQZFAQkOXZZYA==
+-----END CERTIFICATE-----
+
+
+Atmel Signing Module 25
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDFDCCArmgAwIBAgIUV0h4consbzOZTBM8CEnTXqqohHwwCgYIKoZIzj0EAwIw
+czELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv
+cmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN
+IFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTEwMTAxMDAwMDAwWhcNMzEwMTAxMDAw
+MDAwWjBtMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT
+EENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSAwHgYDVQQDExdBdG1l
+bCBTaWduaW5nIE1vZHVsZSAyNTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBANUeH1QW1CO7bGkbktFbx04qLmey/xwKJByLKM3iymporLZ6AjSjMs+NKcBn
+pyvJdF57yb3qAJU/t7WyppnqO4kdUD9vLITfIIJzmx2aQTdnD4skodAPLmCBF2N7
+CTKzWf4djDG42A9p1Mq3labo/psrUm75gdXqnI/aeCQWNWqsFwa5tA6sWVybFTQZ
+Iye3PZBct83vMnHExSsf8F3u7zx4KFigO0S7TNov6aSXUIE/yLmzq4WU8lj6by0A
+6TX9Kf0g5gcsN/0c4pzxZcVJgHgc70w8DO4xLGSFEBg2SAYYnyuOVSy60Ig00zi/
+HlcPQ/B9M5/ACbu3BfcPaGEI+n0CAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMB0G
+A1UdDgQWBBQndjHQWfp6lVP7Wd/W6FvBIjAP8DAfBgNVHSMEGDAWgBQx0F0Qba/k
+7RndCq/TW+oio3gcVzASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMCA0kA
+MEYCIQCHfFzFzq1oxXvOHV7Pfv+NN/BF+TEJ/NS7gkhmXvqCuAIhAKN6WGiht+ZX
+0q0wktHHVdePVJ7vxsw42t/0oqu1je0B
+-----END CERTIFICATE-----
+
+
+Atmel TPM Root Signing Module
+=============================
+-----BEGIN CERTIFICATE-----
+MIICKzCCAdCgAwIBAgIUcD8hGhUZbtWr/R0SMo4rBkmgVHgwCgYIKoZIzj0EAwIw
+czELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv
+cmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN
+IFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTAxMjMxMDAwMDAwWhcNNDAxMjMxMDAw
+MDAwWjBzMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT
+EENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSYwJAYDVQQDEx1BdG1l
+bCBUUE0gUm9vdCBTaWduaW5nIE1vZHVsZTBZMBMGByqGSM49AgEGCCqGSM49AwEH
+A0IABH2Mc2ZzwulHWuF8a+EMpey51ZrMiF78oQywMFzGCmV4CmfpSQVpJqw23np8
+QveCQOt7n/zsBMRsqk1bsAfYKwqjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB
+Af8EBTADAQH/MB0GA1UdDgQWBBQx0F0Qba/k7RndCq/TW+oio3gcVzAKBggqhkjO
+PQQDAgNJADBGAiEAyNu4sBDbRURcVGhKysdHGYidk5H2Bia+yo5mDryJ3hMCIQCs
+lDkUE4T1jHHwzSxca6KCXzgtpyui78G742CdYm9W5Q==
+-----END CERTIFICATE-----
+
+
+BXTEPIDA0PROD EK Platform Public Key
+====================================
+-----BEGIN CERTIFICATE-----
+MIIDwDCCA2agAwIBAgIUJrmq4T0WF+KN0GBFY1nQZekcmZYwCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTUw
+OTE4MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBlzELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xMTAvBgNVBAsMKFRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIEJYVF9F
+UElEX0EwX1BST0QxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wWTATBgcqhkjOPQIB
+BggqhkjOPQMBBwNCAATlW6lYkjRqfJcDgYYIF4Aj+5grglb5Rndr70jShDj4cDRL
+SNkToyuHhQIEmsa+gd3r3bH9kVb83Jzj7nrhrlKMo4IBnDCCAZgwHwYDVR0jBBgw
+FoAU6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFLmel5quSHdOou/Km/mt
+WwQEDcEKMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMBMGA1Ud
+JQEB/wQJMAcGBWeBBQgBMHAGA1UdIAEB/wRmMGQwYgYKKoZIhvhNAQUCATBUMFIG
+CCsGAQUFBwIBFkZodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JM
+L2VrY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMFwGCCsGAQUFBwEBBFAw
+TjBMBggrBgEFBQcwAoZAaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50
+L0NSTC9la2NlcnQvRUtSb290UHVibGljS2V5LmNlcjBNBgNVHR8ERjBEMEKgQKA+
+hjxodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9F
+S19QbGF0Zm9ybS5jcmwwCgYIKoZIzj0EAwIDSAAwRQIhAOTeL3SQOpcJcUfg4ZAJ
+L0lK7kiLrx98zD5PcAYOof0OAiBy6x20LwfMKNQc2fQecc9NHDiYqzowUIHXldhz
+/m86tA==
+-----END CERTIFICATE-----
+
+
+BXTEPIDPROD EK Platform Public Key
+==================================
+-----BEGIN CERTIFICATE-----
+MIIDvTCCA2OgAwIBAgIUNY8XaQcdQQmxADTKueN39ZzWIXswCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTUw
+MzE5MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBlDELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xLjAsBgNVBAsMJVRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIEJYVF9F
+UElEX1BST0QxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wWTATBgcqhkjOPQIBBggq
+hkjOPQMBBwNCAAQblrtMsCNzHUAZTZ6vQGJjMWlS73/DhZ98HaEb/8HDDwm9CdOA
+IjTYsRcZKDnLufP0tiTqAZ7H38RJx4/K6nu6o4IBnDCCAZgwHwYDVR0jBBgwFoAU
+6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFDFzTW+K6pE6CjEYC3hcwGMI
+lMx7MBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMBMGA1UdJQEB
+/wQJMAcGBWeBBQgBMHAGA1UdIAEB/wRmMGQwYgYKKoZIhvhNAQUCATBUMFIGCCsG
+AQUFBwIBFkZodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2Vr
+Y2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMFwGCCsGAQUFBwEBBFAwTjBM
+BggrBgEFBQcwAoZAaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NS
+TC9la2NlcnQvRUtSb290UHVibGljS2V5LmNlcjBNBgNVHR8ERjBEMEKgQKA+hjxo
+dHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS19Q
+bGF0Zm9ybS5jcmwwCgYIKoZIzj0EAwIDSAAwRQIgZgs69p123xjRxvnkZ03i2gNw
+FAVq0i0YUGQifKr8BygCIQC7ldmSv4N2yejCvlM1Bl0q9X0ZHiTk5avr35/JYJMn
+WA==
+-----END CERTIFICATE-----
+
+
+BXT EPID A0 PROD RK 0
+=====================
+-----BEGIN CERTIFICATE-----
+MIIDxTCCA2ugAwIBAgIUGIWdGeQ7GqOClckr+/OQPqXezKQwCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTUw
+OTE4MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBnDELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xNjA0BgNVBAsMLVRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIEJYVF9F
+UElEX0EwX1BST0RfUktfMDEWMBQGA1UEAwwNd3d3LmludGVsLmNvbTBZMBMGByqG
+SM49AgEGCCqGSM49AwEHA0IABJntoU9et71cNVj1/QhhSd7YIWdJIBbN9OOfo1b/
+ySHC4oaXDypNoWWryX/YX0a35ySUW7nBo9hXJ6ZZ6bysCFSjggGcMIIBmDAfBgNV
+HSMEGDAWgBToUgXCT9jS1aUhRxa2zgx7W7p3DzAdBgNVHQ4EFgQU1zz+Wp4BgIAR
+gaFETeNu+/iLoW4wEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYw
+EwYDVR0lAQH/BAkwBwYFZ4EFCAEwcAYDVR0gAQH/BGYwZDBiBgoqhkiG+E0BBQIB
+MFQwUgYIKwYBBQUHAgEWRmh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20vY29udGVu
+dC9DUkwvZWtjZXJ0L0VLY2VydFBvbGljeVN0YXRlbWVudC5wZGYwXAYIKwYBBQUH
+AQEEUDBOMEwGCCsGAQUFBzAChkBodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2Nv
+bnRlbnQvQ1JML2VrY2VydC9FS1Jvb3RQdWJsaWNLZXkuY2VyME0GA1UdHwRGMEQw
+QqBAoD6GPGh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20vY29udGVudC9DUkwvZWtj
+ZXJ0L0VLX1BsYXRmb3JtLmNybDAKBggqhkjOPQQDAgNIADBFAiEAwaHTAqCWvTbG
+VJOELR/gWmyM+gbAvLxhgxs/16kz9KQCIAU21IF1QZwJS1j0+X2cMWINm6tDj+1w
+473Z2vx0JxZI
+-----END CERTIFICATE-----
+
+
+BXT EPID A0 TEST RK 0
+=====================
+-----BEGIN CERTIFICATE-----
+MIIDxjCCA2ugAwIBAgIUWKo1AFwaYLTyc9BRshwgTyQC4DUwCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTUw
+OTE4MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBnDELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xNjA0BgNVBAsMLVRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIEJYVF9F
+UElEX0EwX1RFU1RfUktfMDEWMBQGA1UEAwwNd3d3LmludGVsLmNvbTBZMBMGByqG
+SM49AgEGCCqGSM49AwEHA0IABNsUeT+lNMvpewq8JB1WrgPtcG5u2uLdSsEOYQrC
+FL5yGN1Qyz+nZ0j7a0GblIsxWB6vDDOQ+ByY0lCpTuq/WN2jggGcMIIBmDAfBgNV
+HSMEGDAWgBToUgXCT9jS1aUhRxa2zgx7W7p3DzAdBgNVHQ4EFgQUFLjnE3+plSbE
+cX36iBskk2u8a9AwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYw
+EwYDVR0lAQH/BAkwBwYFZ4EFCAEwcAYDVR0gAQH/BGYwZDBiBgoqhkiG+E0BBQIB
+MFQwUgYIKwYBBQUHAgEWRmh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20vY29udGVu
+dC9DUkwvZWtjZXJ0L0VLY2VydFBvbGljeVN0YXRlbWVudC5wZGYwXAYIKwYBBQUH
+AQEEUDBOMEwGCCsGAQUFBzAChkBodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2Nv
+bnRlbnQvQ1JML2VrY2VydC9FS1Jvb3RQdWJsaWNLZXkuY2VyME0GA1UdHwRGMEQw
+QqBAoD6GPGh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20vY29udGVudC9DUkwvZWtj
+ZXJ0L0VLX1BsYXRmb3JtLmNybDAKBggqhkjOPQQDAgNJADBGAiEAmcHDePxSjZrw
+TRQT/UzIvjJbpEcWcSW/wdJGs3DFoRACIQDBcehub2+ysFpZ8TnoZ3c8d0AcPVC4
+6hfaQ1ej3zKk0Q==
+-----END CERTIFICATE-----
+
+
+CHVEPIDPROD EK Platform Public Key
+==================================
+-----BEGIN CERTIFICATE-----
+MIIDvTCCA2OgAwIBAgIUMoXQN7fpvlMh+EaakFHIPEncyIEwCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTQw
+ODIyMDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBlDELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xLjAsBgNVBAsMJVRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIENIVl9F
+UElEX1BST0QxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wWTATBgcqhkjOPQIBBggq
+hkjOPQMBBwNCAARV46h+ExRcpu1wKs5TPMCB68LT07TgFz5gl96xCRDe/ezW0PEB
+6gpJelw06KCONPrlgiBuAzlBPm1HXgBiTGXDo4IBnDCCAZgwHwYDVR0jBBgwFoAU
+6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFA+ntJUEgSYSDhJzFgZ3bz1o
+oDfAMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMBMGA1UdJQEB
+/wQJMAcGBWeBBQgBMHAGA1UdIAEB/wRmMGQwYgYKKoZIhvhNAQUCATBUMFIGCCsG
+AQUFBwIBFkZodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2Vr
+Y2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMFwGCCsGAQUFBwEBBFAwTjBM
+BggrBgEFBQcwAoZAaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NS
+TC9la2NlcnQvRUtSb290UHVibGljS2V5LmNlcjBNBgNVHR8ERjBEMEKgQKA+hjxo
+dHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS19Q
+bGF0Zm9ybS5jcmwwCgYIKoZIzj0EAwIDSAAwRQIhAOCv9lgVGKQjhwKbXmyjRac5
+PPxL6tFKlwuw19AijVaUAiBFM7VCxiZh2CZoCAYd95CU+Qi1UhglyV5v9LN2uGXp
+jg==
+-----END CERTIFICATE-----
+
+
+CLPEPIDPROD EK Platform Public Key
+==================================
+-----BEGIN CERTIFICATE-----
+MIIDvDCCA2OgAwIBAgIUXaavSNGtxrLKxvmH7yH49yMw2AowCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTQw
+MjA2MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBlDELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xLjAsBgNVBAsMJVRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIENMUF9F
+UElEX1BST0QxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wWTATBgcqhkjOPQIBBggq
+hkjOPQMBBwNCAAQJMoQnAKAb2Pf0c+1FIBq973Jobw1Xyi7lGiGOxN4XJqxQ4g/Q
+AUsZdBrB9irC/9mZPLiVeeC5gmX1t+h74M4Uo4IBnDCCAZgwHwYDVR0jBBgwFoAU
+6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFBQJK194FOybcT6am5CkxRnf
+COaIMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMBMGA1UdJQEB
+/wQJMAcGBWeBBQgBMHAGA1UdIAEB/wRmMGQwYgYKKoZIhvhNAQUCATBUMFIGCCsG
+AQUFBwIBFkZodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2Vr
+Y2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMFwGCCsGAQUFBwEBBFAwTjBM
+BggrBgEFBQcwAoZAaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NS
+TC9la2NlcnQvRUtSb290UHVibGljS2V5LmNlcjBNBgNVHR8ERjBEMEKgQKA+hjxo
+dHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS19Q
+bGF0Zm9ybS5jcmwwCgYIKoZIzj0EAwIDRwAwRAIgOgE2XZ69IS6mmUGqQhWWxEUA
+dHEVz7iBBGt2IU99uIoCIEYlzTKUCBBLVqAhHNUxVS75owLH10/g9ktM+Lu4yIc2
+-----END CERTIFICATE-----
+
+
+CMLEPIDPROD EK Platform Public Key
+==================================
+-----BEGIN CERTIFICATE-----
+MIID3TCCA4KgAwIBAgIUJJYdv83l0uoZXqKPrcJr/zFNRtQwCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTgx
+MTEzMDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBmzELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xNTAzBgNVBAsMLFRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIENNTF9F
+UElEX1BST0QgcGlkOjEzMRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMFkwEwYHKoZI
+zj0CAQYIKoZIzj0DAQcDQgAERUv5VuJeLq+kowdxzthg1RXIva2wIXx8QTyDpohD
+H/6iycf6vXrbhwOBt1ol7siMJUslPCRKhGpAQ+5Z/L5DQ6OCAbQwggGwMB8GA1Ud
+IwQYMBaAFOhSBcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBSar1ke4mPKrhD1
+e6BPqNHdZhP56zASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAT
+BgNVHSUBAf8ECTAHBgVngQUIATB4BgNVHSABAf8EbjBsMGoGCiqGSIb4TQEFAgEw
+XDBaBggrBgEFBQcCARZOaHR0cHM6Ly90cnVzdGVkc2VydmljZXMuaW50ZWwuY29t
+L2NvbnRlbnQvQ1JML2VrY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMGQG
+CCsGAQUFBwEBBFgwVjBUBggrBgEFBQcwAoZIaHR0cHM6Ly90cnVzdGVkc2Vydmlj
+ZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS1Jvb3RQdWJsaWNLZXku
+Y2VyMFUGA1UdHwROMEwwSqBIoEaGRGh0dHBzOi8vdHJ1c3RlZHNlcnZpY2VzLmlu
+dGVsLmNvbS9jb250ZW50L0NSTC9la2NlcnQvRUtfUGxhdGZvcm0uY3JsMAoGCCqG
+SM49BAMCA0kAMEYCIQCKMvSG3LUNthJYfcl93+GbGvLNldo6Qcc60WcBuY5FvgIh
+AIDvu80EGqYvcUn74n5S10pTOsDJNLRipPPQoMepPeO0
+-----END CERTIFICATE-----
+
+
+CMPVEPIDPROD EK Platform Public Key
+===================================
+-----BEGIN CERTIFICATE-----
+MIID3jCCA4SgAwIBAgIUZqPOgb6Fz4HkCYS4cY4AWWHfg0swCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTkx
+MDExMDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBnTELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xNzA1BgNVBAsMLlRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIENNUF9W
+X0VQSURfUFJPRCBwaWQ6MTQxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wWTATBgcq
+hkjOPQIBBggqhkjOPQMBBwNCAAQ9neK8IMs5NI0+ZEZ0EvttzM0ekPGeWwJxzLzG
+S34hmhc+q9tlEqNs3bijktSy/mC0QeZU+GMD8qYAIRjkXneVo4IBtDCCAbAwHwYD
+VR0jBBgwFoAU6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFHhqN19NVLMU
+VFHUvpN2D3QkJP54MBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEG
+MBMGA1UdJQEB/wQJMAcGBWeBBQgBMHgGA1UdIAEB/wRuMGwwagYKKoZIhvhNAQUC
+ATBcMFoGCCsGAQUFBwIBFk5odHRwczovL3RydXN0ZWRzZXJ2aWNlcy5pbnRlbC5j
+b20vY29udGVudC9DUkwvZWtjZXJ0L0VLY2VydFBvbGljeVN0YXRlbWVudC5wZGYw
+ZAYIKwYBBQUHAQEEWDBWMFQGCCsGAQUFBzAChkhodHRwczovL3RydXN0ZWRzZXJ2
+aWNlcy5pbnRlbC5jb20vY29udGVudC9DUkwvZWtjZXJ0L0VLUm9vdFB1YmxpY0tl
+eS5jZXIwVQYDVR0fBE4wTDBKoEigRoZEaHR0cHM6Ly90cnVzdGVkc2VydmljZXMu
+aW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS19QbGF0Zm9ybS5jcmwwCgYI
+KoZIzj0EAwIDSAAwRQIhAPr/fdeTCoVIPz8lL/tciWI/RBlFF2kSRMt7Ug/QicIe
+AiBFSWsm9yySkuTMbl02+epNubtWHQajtdUw1e0mlkkqoQ==
+-----END CERTIFICATE-----
+
+
+CNLEPIDLPB1PROD EK Platform Public Key
+======================================
+-----BEGIN CERTIFICATE-----
+MIIDyDCCA2+gAwIBAgIUTbSNk7/j6+rpa3ruoB5Ztu1x7KkwCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTcx
+MDIzMDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBoDELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xOjA4BgNVBAsMMVRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIENOTF9F
+UElEX0xQX0IxX1BST0QgcGlkOjYxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wWTAT
+BgcqhkjOPQIBBggqhkjOPQMBBwNCAASvNtcFYyHUv4dJOmSsJe6Ld96fdiK5R3s5
+wkFN/q89JyFI4GufLTvvFXkVDsGs+ttNrDGzQbeYRnEBcdlzBo1Ro4IBnDCCAZgw
+HwYDVR0jBBgwFoAU6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFCM2Do4Y
+mU2r6RxCR8s7gm7YCJILMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQD
+AgEGMBMGA1UdJQEB/wQJMAcGBWeBBQgBMHAGA1UdIAEB/wRmMGQwYgYKKoZIhvhN
+AQUCATBUMFIGCCsGAQUFBwIBFkZodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2Nv
+bnRlbnQvQ1JML2VrY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMFwGCCsG
+AQUFBwEBBFAwTjBMBggrBgEFBQcwAoZAaHR0cDovL3VwZ3JhZGVzLmludGVsLmNv
+bS9jb250ZW50L0NSTC9la2NlcnQvRUtSb290UHVibGljS2V5LmNlcjBNBgNVHR8E
+RjBEMEKgQKA+hjxodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JM
+L2VrY2VydC9FS19QbGF0Zm9ybS5jcmwwCgYIKoZIzj0EAwIDRwAwRAIgOoyT3aM2
+KOecmnycl1gmrQGAgzZbCx9dZQxIsVJLmxMCIFnIlM1RJhaogvrAc+8fqUuVUmDy
+7c3XLnqZ2iGys4KB
+-----END CERTIFICATE-----
+
+
+CNLEPIDPOSTB1LPPROD2 EK Platform Public Key
+===========================================
+-----BEGIN CERTIFICATE-----
+MIID0TCCA3igAwIBAgIUC1r2BxSKTnCjf+IE/EUFMplADIUwCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTcx
+MTE0MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBpjELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xQDA+BgNVBAsMN1RQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIENOTF9F
+UElEX1BPU1RfQjFMUF9QUk9EXzIgcGlkOjkxFjAUBgNVBAMMDXd3dy5pbnRlbC5j
+b20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASZYf1VqIEVg2HPaCvFOxHvXKEK
+XxIm9S0FTDHCcNxVr+O4XstUP5Py2qU8sCbsvzPhYiJx/vTs2TBU+9LJtFoUo4IB
+nzCCAZswHwYDVR0jBBgwFoAU6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYE
+FBegBXXQXljjiBIQu5ixBFu0wwY5MBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0P
+AQH/BAQDAgEGMBMGA1UdJQEB/wQJMAcGBWeBBQgBMHEGA1UdIAEB/wRnMGUwYwYK
+KoZIhvhNAQUCATBVMFMGCCsGAQUFBwIBFkdodHRwczovL3VwZ3JhZGVzLmludGVs
+LmNvbS9jb250ZW50L0NSTC9la2NlcnQvRUtjZXJ0UG9saWN5U3RhdGVtZW50LnBk
+ZjBdBggrBgEFBQcBAQRRME8wTQYIKwYBBQUHMAKGQWh0dHBzOi8vdXBncmFkZXMu
+aW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS1Jvb3RQdWJsaWNLZXkuY2Vy
+ME4GA1UdHwRHMEUwQ6BBoD+GPWh0dHBzOi8vdXBncmFkZXMuaW50ZWwuY29tL2Nv
+bnRlbnQvQ1JML2VrY2VydC9FS19QbGF0Zm9ybS5jcmwwCgYIKoZIzj0EAwIDRwAw
+RAIgXsUtnUUfU90GerQubnLQ/NSRrAkjUKjHiphIdgzNRpcCIEJ7yKGSsVDkE++Z
+cJigMhp/OGd+UI8GtBRnPe0RiNyR
+-----END CERTIFICATE-----
+
+
+CNLEPIDPOSTB1LPPROD EK Platform Public Key
+==========================================
+-----BEGIN CERTIFICATE-----
+MIIDzDCCA3OgAwIBAgIUI7MycK2I3XPBTYo4V78C5VKvQ9gwCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTcx
+MDI1MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBpDELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xPjA8BgNVBAsMNVRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIENOTF9F
+UElEX1BPU1RfQjFMUF9QUk9EIHBpZDo2MRYwFAYDVQQDDA13d3cuaW50ZWwuY29t
+MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKJo/Rz9gEbTHZRlf1rFUmWh4vkhY
+6YdWx29rRdiAKBo9GWtaAqysXZJS8l3UE3C20I3uR3q0sLBsMRBP5nt+BqOCAZww
+ggGYMB8GA1UdIwQYMBaAFOhSBcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBQU
+GXumXWM7W3FzRF3uGruj7z1gXTASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB
+/wQEAwIBBjATBgNVHSUBAf8ECTAHBgVngQUIATBwBgNVHSABAf8EZjBkMGIGCiqG
+SIb4TQEFAgEwVDBSBggrBgEFBQcCARZGaHR0cDovL3VwZ3JhZGVzLmludGVsLmNv
+bS9jb250ZW50L0NSTC9la2NlcnQvRUtjZXJ0UG9saWN5U3RhdGVtZW50LnBkZjBc
+BggrBgEFBQcBAQRQME4wTAYIKwYBBQUHMAKGQGh0dHA6Ly91cGdyYWRlcy5pbnRl
+bC5jb20vY29udGVudC9DUkwvZWtjZXJ0L0VLUm9vdFB1YmxpY0tleS5jZXIwTQYD
+VR0fBEYwRDBCoECgPoY8aHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50
+L0NSTC9la2NlcnQvRUtfUGxhdGZvcm0uY3JsMAoGCCqGSM49BAMCA0cAMEQCIEiL
+qfQE1ISepbRb4/1amUkZILNm5JQc1ssyzRa0qB8mAiAGocAQVjAF2uLo6tCSUrof
+Zo+PQtRTQ849fA4Ok8HWcA==
+-----END CERTIFICATE-----
+
+
+CNLEPIDPROD EK Platform Public Key
+==================================
+-----BEGIN CERTIFICATE-----
+MIIDyDCCA26gAwIBAgIUHroxX5HAoxWX+7O/H+VOxwBdRGwwCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTYx
+MjA1MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBnzELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xOTA3BgNVBAsMMFRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIENOTF9F
+UElEX1BST0QgIHBpZDozMjc3NDEWMBQGA1UEAwwNd3d3LmludGVsLmNvbTBZMBMG
+ByqGSM49AgEGCCqGSM49AwEHA0IABCIM11xTzlVED9XOuSi1yLjWDk4XcAFJTi4b
+K84RsM5yDXygW0RyutWunVGYFgWcbmhtdZd/FMTeUFHTrETpI0ajggGcMIIBmDAf
+BgNVHSMEGDAWgBToUgXCT9jS1aUhRxa2zgx7W7p3DzAdBgNVHQ4EFgQULTzs/mWU
+gpcZ1lVrYAVB50n8Y1swEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMC
+AQYwEwYDVR0lAQH/BAkwBwYFZ4EFCAEwcAYDVR0gAQH/BGYwZDBiBgoqhkiG+E0B
+BQIBMFQwUgYIKwYBBQUHAgEWRmh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20vY29u
+dGVudC9DUkwvZWtjZXJ0L0VLY2VydFBvbGljeVN0YXRlbWVudC5wZGYwXAYIKwYB
+BQUHAQEEUDBOMEwGCCsGAQUFBzAChkBodHRwOi8vdXBncmFkZXMuaW50ZWwuY29t
+L2NvbnRlbnQvQ1JML2VrY2VydC9FS1Jvb3RQdWJsaWNLZXkuY2VyME0GA1UdHwRG
+MEQwQqBAoD6GPGh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20vY29udGVudC9DUkwv
+ZWtjZXJ0L0VLX1BsYXRmb3JtLmNybDAKBggqhkjOPQQDAgNIADBFAiEA+07aI19y
+RxzeCkhZirRjkYFRcCfiuchnlt8tobXycekCIBfdj8hqroYXETn8hzq64Wn/t9tx
+917kHW8lBxE3lbzl
+-----END CERTIFICATE-----
+
+
+CloverviewEPIDPROD EK Platform Public Key
+=========================================
+-----BEGIN CERTIFICATE-----
+MIIDwzCCA2qgAwIBAgIUZ4oCAoWl3AhuVgPUXJbkaZ55W+owCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTQw
+MzEyMDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBmzELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xNTAzBgNVBAsMLFRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIENsb3Zl
+cnZpZXdfRVBJRF9QUk9EMRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMFkwEwYHKoZI
+zj0CAQYIKoZIzj0DAQcDQgAEYjYfgF37t9HFczTzesvwKGh1+biqUE7UAD89GXb5
+jgCEXqS7mQKPkGAzeR6wBSNgQjEBosn1JgcrBBPrnZj5HqOCAZwwggGYMB8GA1Ud
+IwQYMBaAFOhSBcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBRJlMEp8aVI1IhY
+byKi34YDc5s70zASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAT
+BgNVHSUBAf8ECTAHBgVngQUIATBwBgNVHSABAf8EZjBkMGIGCiqGSIb4TQEFAgEw
+VDBSBggrBgEFBQcCARZGaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50
+L0NSTC9la2NlcnQvRUtjZXJ0UG9saWN5U3RhdGVtZW50LnBkZjBcBggrBgEFBQcB
+AQRQME4wTAYIKwYBBQUHMAKGQGh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20vY29u
+dGVudC9DUkwvZWtjZXJ0L0VLUm9vdFB1YmxpY0tleS5jZXIwTQYDVR0fBEYwRDBC
+oECgPoY8aHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NSTC9la2Nl
+cnQvRUtfUGxhdGZvcm0uY3JsMAoGCCqGSM49BAMCA0cAMEQCIB8Mx7/ClbTKy8IU
+UZ/waaekl6Y4aAz/pQZX1sEqhcSCAiBmO5wSipqHOj66P3VMrrDC+VQOAkKRKcn4
+/mbEsFXpRA==
+-----END CERTIFICATE-----
+
+
+DNVEPIDPROD EK Platform Public Key
+==================================
+-----BEGIN CERTIFICATE-----
+MIIDvDCCA2OgAwIBAgIUeXOWB5FJbPbe+/Hs+POfNMKKcNcwCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTYw
+MTIwMDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBlDELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xLjAsBgNVBAsMJVRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIEROVl9F
+UElEX1BST0QxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wWTATBgcqhkjOPQIBBggq
+hkjOPQMBBwNCAARAJiJHEDHXQppRQJBvJyqycjHV201mVYIxCFD9u9ulqNJrWBTv
+1TGPMHESl7T2foiDJdlsfR2vI3OZGbzfmo7eo4IBnDCCAZgwHwYDVR0jBBgwFoAU
+6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFLuYBeMZp42676iItFYVlXIF
+F5GBMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMBMGA1UdJQEB
+/wQJMAcGBWeBBQgBMHAGA1UdIAEB/wRmMGQwYgYKKoZIhvhNAQUCATBUMFIGCCsG
+AQUFBwIBFkZodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2Vr
+Y2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMFwGCCsGAQUFBwEBBFAwTjBM
+BggrBgEFBQcwAoZAaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NS
+TC9la2NlcnQvRUtSb290UHVibGljS2V5LmNlcjBNBgNVHR8ERjBEMEKgQKA+hjxo
+dHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS19Q
+bGF0Zm9ybS5jcmwwCgYIKoZIzj0EAwIDRwAwRAIgah8QuU+rWzNfp52vfywQF+J+
+O/6rnzjbPMQYONUDEIgCIEbDzUQn14z4JlymYCaDT4mnzR97kzEBoO8VoI0WTknK
+-----END CERTIFICATE-----
+
+
+EKRootPublicKey
+===============
+-----BEGIN CERTIFICATE-----
+MIICdzCCAh6gAwIBAgIUB+dPf7a3IyJGO923z34oQLRP7pwwCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTQw
+MTE1MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBhzELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xITAfBgNVBAsMGFRQTSBFSyByb290IGNlcnQgc2lnbmluZzEWMBQG
+A1UEAwwNd3d3LmludGVsLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJR9
+gVEsjUrMb+E/dl19ywJsKZDnghmwVyG16dAfQ0Pftp1bjhtPEGEguvbLGRRopKWH
+VscAOlTFnvCHq+6/9/SjZjBkMB8GA1UdIwQYMBaAFOhSBcJP2NLVpSFHFrbODHtb
+uncPMB0GA1UdDgQWBBToUgXCT9jS1aUhRxa2zgx7W7p3DzASBgNVHRMBAf8ECDAG
+AQH/AgEBMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAgNHADBEAiAldFScWQ6L
+PQgW/YT+2GILcATEA2TgzASaCrG+AzL6FgIgLH8ABRzm028hRYR/JZVGkHiomzYX
+VILmTjHwSL7uZBU=
+-----END CERTIFICATE-----
+
+
+EUS AMD KEYID CBB3F726E72C37BF7E9C6CFAA6EF06F88FD1FC4C
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAWhkCVHhqXAZpQAAAAABaDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDgzMDIxMjgwMFoXDTI5MTIzMTIxMjgwMFowQTE/MD0GA1UEAxM2RVVT
+LUFNRC1LRVlJRC1DQkIzRjcyNkU3MkMzN0JGN0U5QzZDRkFBNkVGMDZGODhGRDFG
+QzRDMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4b2fVSWFeXjREUf7
+MBIO6f56is9utoucFSNUpCNN/K3X+iGZQWoi58cXm6rK/6WmYgs/t2ehTo6u/wFW
++IfKF8lAxfnny038x7DOu9z4KFldSbQGXK8fqqMqH5zqBT742uNYqFrMpG9fxZbL
+3OeuZP2NIrJKNzpU8ZFxA64ByRrdbwhe67AJxUjJgG2omnrSGiplHCdzjsJ/Dfvv
+9FIFvG0A+tlS7eACr+AQKVHSPro5NQ90+XKELZ4RTpXVVc0bBMdATUG5b5CVJ4yE
+5d3EAu/XhLJY7XlieZZHNd2I17V5ymU8a9RA/HO/X3/1CimQVdnEYuCkfqNgT2+b
+4F8e+QIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUKFK5R4UknKp2kMAX476nrUUrDfgwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBwTrLJ
+BMzzL+R0soMDJrCWhNQPQ4E6Mf6xKlNjdI/OiieFG/RLlv9C/MQZp+Juuyu8gAsV
+ISLMKXDw9Msbr7/sZyviIIG5i5PzJLDAdJE468VwDY69fBE26BZCi30dguA0lqCY
+ojlmk/m7poqnJAFj/G6+9S+IXYlMxi/8cFLMqtDRD51E2PyRIDvbjl8XPkGnkvsA
+l1tmUsqyDLk+Ng7rw4WF7BBVYfBDs0EUrxzSZipEXipyGiBk8nJWN4+BVqjSJsjM
+m5/gMnqcyY9kQjczA6E2lZVDCBKqZsys7WC9DBPqX3Vcni1QLX0RKWUWrylraJUx
+87xOFzM3fFIkLUpFvMvq+2jTXLzPXjiJiyzpk3mYpMXqwOVqOcAfPKfKBdGhxhgh
+D7I2of/Hi0mQ6ira3kv8DbnlTs5MoE0mwY9+aKK6tzN8zcvNIpIwdPZfefmjxwgu
+9jUokIizbuowv3bXp2PIYc8AH8i1vUfaOlzDZjtU39W4B0HEhy2EJCNBjUz5/ne8
+JpokFaZTU64PFABhbk1g6uoYqOmt77zMw5LRYtWssqk+9+HsClW/8Os9FPPHpTnj
+bPtJCxrthVDD5+QWXycqGlasi4ipiuGsONjMN8Dd4/r4lVEJLWdlZ3e7t4lHP4hE
+OeaSBIBBHa8/3mpvaqb3VzmlKed+3pU06AlBmw==
+-----END CERTIFICATE-----
+
+
+EUS AMD KEYID CBB3F726E72C37BF7E9C6CFAA6EF06F88FD1FC4C 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAlEoQg1LONsbAQAAAAACUTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkzNFoXDTI1MDMyMTIwMjkzNFowQTE/MD0GA1UEAxM2RVVT
+LUFNRC1LRVlJRC1DQkIzRjcyNkU3MkMzN0JGN0U5QzZDRkFBNkVGMDZGODhGRDFG
+QzRDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyyvmjfcX5CmLjn8V
+iDmaFYkc5lREOVML6sKozgirRGwROjYxNSduvU2beXQRlcNP7jCJOQm3o850OGL2
+kJIiN0GjEob4DDPnKG4XQyqW0SyjFHoYAYKNawVqGD54hoXy4yFQOJkGmBI0XCsE
+lj/Euy3hqYp9PsrJIEYj0uabmIDNrFstQ0zSDssXxUNCJXITZAeXZpPlw7VBFXWY
+efrOJ8Lh88dud0bklypLZoiohzYIkQJKUvGGj6LBpFQkJc3rhXDM8AbRbqd8HmTF
+3DVVgAIL4vIunMoWTCflR3A0lxe+Moa6BXS27J4CSLH6XD7Uk6Q0/XJj1hBFXFWx
+cr4XSV2i1QKT6lQs8gw5St67Lt7W9heptqYXkw6qcsRQCszxJyY+7kfpvYPwmLNK
+uqCybrN7RgwMN6g4s7wlIiOWFgJDofZop9uc1KeJFXtMyKVZN0V5AkTEgR6fWBvt
+dJOPxB+IMPO+PiTAoXexOGXrbWAeosoJlFs51yr5LOkA6eZMTRexSNzslZAvDwdd
+CriR5LbHnjbQnNZVBmVXLbi69CUQleG9pMG04UFPJUNoAAPcEiQENKYhg+Fe6p30
+U7VzGNIYt41n9t/+WFu54f+3WqAZqR5OJEhhVLucgzaNxLVxddieUSI6eaJ5u0FK
+lbl5XKKRGpV297+ux8KKHLq4sKMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNNp4qXdGCH3pCMw
+tFakl+9AYRXFMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAJ5lAfQZ6zIOcOrEYdp7A7iGx38WMkkjP1CEjrwH/IivH
+mT9IiPjW4PdNTzDPrhGeq9oHbBG1RE4+sW2K6pp+2EXrm13chQhiArtE7EQU9C5Y
+paEPdfG5b869biZVkjhyeJC1ptbv7GW1dqaeMxMZ3vqblWA1nYrsUD+m8i/05lEW
+k6CXl1M6Lf/S8LMBgMe7LbLNr78+1AEVTkjiTpLL05wHbHDaEcndvoad/X+05U8T
+JK05NmVa37Rl7R3HxwsMS9ZUbbeRalEVRp5fTOfUBzU/4JEgKyQDyCg+mgVUEIV9
+TJXqcgrgHsCHlaYWyT6kM6juhYbzWRPTHMEnrqCOR3vzzQzXtPR6QI20uE4GHQgY
+3K77PR2k//7tlz3LuHhIqd7z4toTFrRs5R/rzyCDQ/LTWzKkKKT/daqPDTiWOELd
+emBNAFkAy7rd96Si334vF3V33t68K7yOviQJdjSE6Xtous0Q24LfMfLMK8yoMe0e
+yhRTME+lsdzBB2j5C0aGBz3xkTYeJcfMvcFxqLfLpiGt4oL5G5ZNyxNZzfj9S7Ci
+MUL72sztTUzo/O+4nB3EsKQk9xcpXDN07P7LeXl7Tbmpzw1w469cdXhGUlLbg20M
+j9dpz7IeE+6vjczsi9Bf2Jber+R3tj/MOT6fUt4vhDOnzxgJ6qs6IsmajMJW7F4=
+-----END CERTIFICATE-----
+
+
+EUS AMD KeyId 578C545F796951421221A4A578ACDB5F682F89C8
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAFZ4FBI2r3n/cwAAAAAAVjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTEzM1oXDTMwMDIxODIxMTEzM1owQTE/MD0GA1UEAxM2RVVT
+LUFNRC1LZXlJZC01NzhDNTQ1Rjc5Njk1MTQyMTIyMUE0QTU3OEFDREI1RjY4MkY4
+OUM4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoJRE6Jg2ABZLY8A0
+o+iKAvqaMzcWKYS8hBzyZYrSCggDNZKs7M8FvbPF+6LlsYkKGlolTvD03+yZwIdP
+NgLq8CAJnoa/ezHZrdm7fmxJVrpzF3UjYh6AGVvJwV51HPXfMzHS9Val8N7Y0h2j
+Ymi8Myvo5lUSKMX9/hqHQyk/5T7YfJZaOHz+QGK6W/0doVPVKr6dokrt5ZlpTxWD
+IJ1jh4DQhclxdc6VIFvtaXL87yCb60rXlwqylU0bfcaPNRYXZXNQRssikRwDSTLz
+zXNctG2Ui70nNbOkNM24b1Xpf2XLbU4d2EgTAkAgUAo+PEnNsQAOLp5PcJwkBgkv
+Q2FVQwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUnSq/EMxVcExBgWKBjoPE16Wo2z8wHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA0XziO
+qkXigBCZ8NE5Way1fm8L8XtylnEUKXMUH3iyCb6R0BxNXJuT9Y+6MPp4fQufppNi
+PTYxBjaWomtXoxKOEmmqrFbAYjcsXzf6CXgjR8K7fGmFdxtBajp82LDLyLgqkYXt
+jgipfjzJWa15hCcLr1qF4vooWK6WO4dfvGN76MhD1d3BaYjCv6QMCW5rghyrHMud
+8ggtIfyCytAFIu0jc0fhXy/qGbbSYY1jWWkGh4Nk313a7wiLl8CDeMNStk/kfGpm
+tDHb41ILNXDDL4B6wqS6teZLMNIZnYsFHONNgFSQ/690/cQki/vsP5pDbNL0Bw2I
+GbKeo7n0wBiwLavk5LbHz6CDBqe3HSquc2bqdRQme1gIm669ikdK/De5SXwLJECL
+Dvhzyy5G3YksW5SF1QqTwvUvVT4V7Xid00FtENpP2iZscZAmc2ViECvqUpQzcEBh
+JiBOlKh4HTxX0o6mcfTAUMGay6H0NwXEpZK2SRO2ia0QUCDwa+vrarMspga6T/6x
+e7VFjj5CuLivoeMnqqyg35Uk29SiBMR7lHPZZFwXh0/rlcyButw0vo/T03omRQii
+3Li85y/cVg19Tdxva2M3YqObeshtyxGRbjKiAqyOu/IhZDz1+jc7Q+0Nv8p34Zji
+M82r845KWUzZIrUeCpbxe6nk2rib3I23rgVisA==
+-----END CERTIFICATE-----
+
+
+EUS ATML KEYID 16B341E381CD5C3E799AC838CA17F1F7F3F7431E 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAlPun/3oGq3sHQAAAAACUzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkzNVoXDTI1MDMyMTIwMjkzNVowQjFAMD4GA1UEAxM3RVVT
+LUFUTUwtS0VZSUQtMTZCMzQxRTM4MUNENUMzRTc5OUFDODM4Q0ExN0YxRjdGM0Y3
+NDMxRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMQlMuijD4cuFikM
+hbiO7Kk+WkTuVpOmKlFfe+VhcwdAMEKjg+gT+udRlId1CeMKW9hH+nqX/6/zXQra
+PKOl04w+WWCphHyw5EfysKhnk4HaHxgLB8KM43sIUZYMY7H7C/SlSr+PK3c+c7Bs
+LpKwWUWKzAJk/sbRn03XjskJDp76TPV4+ftItx0nUHIl8EV6AGyC2+oi0XVI4Q1q
+KlmRM+ZWId2AT5Ii6i6wjEW52yJHgppKISwybyiCHdq5zj8XGOt0FZxo/ahkGhyJ
+uWhilvosyyspj7PliDqU0WxguHfK7zDOuELOZFWU665iYNzc/SLrbKTkDd3iCv2p
+PN2+ZcLjTVQQqI6BDwCsIP+5lkfD7h1lxW2sgt9pqsy1l8Gj/V7RXSvPxR2tlRCC
+HkrpPwRj9nj4sdSNXPVUhHtj8FxIl0fBY/DgzLfnRKVV7ioh6bnKOVSdJ0jKt6UQ
+/GazAhJNdSr9V2Sdh8JYp4IUWVwdMIBAO+ORdw5jKsEudSTNc3dMQ6wnSQmhwC97
+Gnw0GGJdgHU0w9rL6J/g8IctIL0CGPY1GwGxuKgu6O5sTWRHv4yVmNRifkuw57/c
+ovIM2ckGfVBjADpprWww+tYBJrCy8/hvWbReOkl5MbVIQbwc0PxE5NI6JmGlN4QH
+Q8NrcQf4/rXSnHqs16iHS2/Yi4LZAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSXSNLWZuAc+TOF
+PfDxKg0hNvU8uzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAEL+6sq2ypnyucF3Cl4evYB4UbNFXsjGy9BxzDhyJONA
+qbPtpztcY/0TXMibuScODkzh0whlqYCHGfEWDUu9WIzuXfWTsc5zfYL/GV7Dd/u1
+5yoGzQHvm3uY96XdXntHyFmrn+cY4CoVbZtBXdRM72g5fR+tU4/MpKJYOGJ2DQ8e
+9gjyiDr9+sXD/GMwUIiwwAE162dWsL9HRX40pgU3tFp8gCVRhrXZInjGwKGvNHYb
+0D80f0tFUxE1LiUTaQ5dVxBxwNLIjQv7a23Mr9CRmSP6BWYeoTnf613U4YEM+HBq
+uzJdQ4nBuWqtKbDpMSyMLX7yqDe0eBEXASoyeFKajhaN0xun8Ic0QAXVgJG8mk3+
+Okywn6Ixh+1waLFYc55Y/O9VKLMg9gOe7LjI0kQaCQfpmNzqTJ0ZUfjza0imt8GN
+0DXJANNdFBGxLGt0Xv3y2iWlogSaW1Wj1PAavFcD53snXwYkMopEoTFCipuM5pKC
+KzpAPvJUiOWdvEpbl+T8kxcOj5220hORmBt9JrjuRfWgJRDbW9BsrBhdgbYM4AAx
+WfMnZJ2zSGWXqMNaVYnBj0suyx+WGi+Fbhwh00/LScM8x7zvkskki99WDMrmn4OY
+4XzNi5dVE4Xme4UQVp4aDQHKXVNT+6Hf/OPC3VPc0DPQ37GnXQ4J1bjsQ3JzmAnd
+-----END CERTIFICATE-----
+
+
+EUS ATML KEYID 277631D059FA7A9553FB59DFD6E85BC122300FF0 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAlj0RobHZjv56QAAAAACWDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjk0MVoXDTI1MDMyMTIwMjk0MVowQjFAMD4GA1UEAxM3RVVT
+LUFUTUwtS0VZSUQtMjc3NjMxRDA1OUZBN0E5NTUzRkI1OURGRDZFODVCQzEyMjMw
+MEZGMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALgXu21ePkSPO49d
+KWgr8ppJJ2MwGTTNyRsrI0WIYGpzFTN/vXpKwZ/kK9r9GZq8Gkrxs/+yG9waWHpA
+L+44QniJPZVJJsCQ0xnP5TZ0toBI/095Q322VorHsnOPM77+hqCcEkyE7zl64rVG
+pWZ5Y1WM1xXWQF6M1mMSWWQos1gH7dQX5w2vdvJetKTPYXvzjm3QM76oZ14M2tCi
+An0O6FGUfZj8GeMPbnhVMotSfYDGVZsyA9FgBvv/veoecLBuNocL+J/NrE/h4PWa
+5LSvaWD1Tp3f3g+XKxk9JtjWoIN844o2mtadpJmsJG2HRdKHetPPx1gJDsz20mFS
+PnFrKxqirT7wYOuFbkw7me7LN9OEs80FPDjY3Jtr/Hwk1pV2HeVeUUmpNKeBUvGZ
+xjJLpeCdI1T6kTDqvgbH4/nOOGoef3WeH+xOJYZKZr1YdiLhLmU0ZkjlpqaaWhxb
+EMPpj8dlqPzu6nyAt2zkXI+B3MJ7nYfXKFd77jsx4+4R1RB1t9mGvhwbpA6IgNf9
+Db6IhnMxiZCMVEiYUuPyIsxfo/5pMa2/Oyw9bKdDoXFRZbrPgM7T1oiVp1UI+xdi
+U7/KiSqB8iGxwOGAajSDMI0pIvEhtBOBoAd+9lLN2FT0dgE6LJmZxaEAV405J7YL
+g+RtqQ0rrTF1p4OI4+Aniz+q8htnAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQsURuJ2FxqGGoh
+wLcYAEnmWI6BXTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAEZ7m7pzQ9/JoFHRJK5oOoCL48rXhvq/wZjS6QVEiu/M
+BKrMVVVHK7V1m1LD2KMScXhRlQlVZDGRmxXhFizScblWok9lFGeWnXuZcoEgIUZx
+puw+wW+mA4dyKtuAZHLvVUFiHA/mPFjh+3q7djnVaK6YDdHr9OtEWyMJ/1MsAv+i
+aqpAWMf6rVdifQ/Pdlc2sK7FSZcZIuD4QN/Y1mXpaSsNJDclzQjQsAAnfbL207RI
+TauNBj4QtbR/kyi7TwaRz23QJLhxg86jmH5nQJUve+v9S/jpDvN/dq90BpVpoXGl
+2+qVoAqDEzyk0LuwbIur11WQQfVHGuusdA1oWHtJ1P/gLVNhqNhSlSoIaLySZ09S
+0PLXNIxmmOqBKgvJfr3oz0ly/4GHwMIYKBU3OmN6Q+8i6fL/UpO2bq3euTbRHddz
+Of7kc481M3bgFuSCkjhnzPWcO9QOkSH4mzWNblfxJoBb+FmxTt2DQiB8zt0ducy4
+hE3gfsmYyj/SBxF7Ui7O9lKa9wQKUm6qbkufnlH5CPcGvD0lW/2qdY8JHslfJSa9
+HY4GONcs7YmLaV/JRJT9+XR0XQ9fMkwnxobqzSz7YHVSiXIQBRzAuiTZUjvFqo4N
++/6CJLqIRVgUpWkc8CYROu/oe4u1+VccVTmvK/Zr4qZl8ZkLgznLHqVts+00oq9b
+-----END CERTIFICATE-----
+
+
+EUS ATML KEYID 2D605CD882B2BD716CCE71C90BC774D3D5BCB1D4 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAlIQhEc8mPS27AAAAAACUjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkzNVoXDTI1MDMyMTIwMjkzNVowQjFAMD4GA1UEAxM3RVVT
+LUFUTUwtS0VZSUQtMkQ2MDVDRDg4MkIyQkQ3MTZDQ0U3MUM5MEJDNzc0RDNENUJD
+QjFENDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKJ4CpXBUvk+lFRW
+d1sUKv7fC5fHo4SjwsgC5RCUjlK/q6RANm8CKlzjgkXbKBgkL7/QQUBs71dvUx9O
+PuDoz44R5JjLshXlSppqatQcvbFJqWKaU93dRTXW6Bd61y1ealYfqN146o/DQbwH
+pJyGGAOaRSB5KYjB2GJqfW0B39UOpMIAIQWtfjuZzSh8i++VlpsuRgGEminvFmOa
+tOVznCBwg2P7bXoLRFlaGInHPLvVIzqOuBkv745E/MX9b9Vq7PNrrsjSje4aVLyM
+uL3MCKw/WwqPMu1HrQ4s7OeHJA68FhH+1/QYBowreXIPwt0qwhGF9cz95nnwDjRa
+zk3VSMWY5jaMVanW9Qvx63FOkKHTDDsbPHDdtyLFDBrSl9zFlQ69Fr5gkbc+uFBr
+YxZb+LOjgs3M6H2BnsC2Zj0CUu7rhXFzvT/dgWqyGSDr0ULI515jFZMwJac2Ux1c
+XKaRJPuQDlA4t23wJ0gsp7PZrowHT8JfGhJPm6pVwglFtjnoCqf+Ls8zpwKmOwCg
+4osiQ5P2jbwXVRkAYRApAuC1W3hBW0q7KFMAAPHhmcrpIhgphybBgFQrFkB0/vAD
+z2hEo3Eibpfmxs5wIRRdr/F5Ug6XubVf5k+Vd8dxaVImKnRlB/wb0oLquXw08paR
+yI5GURh982h9EfN9TK+LQJkA1gntAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRFL9sGscp2CsBl
+ptPZ+FEj6ec+NzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAIJVUJtdWJ0cUnUeEMZMT768aloAhO8p352fZ+yp6mj5
+n2jfX3kZWvXCStuHiNq0Jtxd3IoJIFmyqx+TigSGywGyZeP1qh8HM3yGyd2hA+gn
+XQIM7fdbbJRJLz+As09xk7SmBDxQnUVEQ9uKaJ1CDHRgn5yUvOxw5XVFiClaRilj
+Zf6g1njdR9wCuWmSuHqHa3UJEQltS9Q2npDMYI6Ug86OBSn+myX2XlBzMdIWCPGc
+bkOs9k/Hvc8hNg6KNROoqU2VsbXhe4av0k7quri20dqBTpA3hkgqp2TVw18DDjr0
+fQd+7a5O/gdcML8wLU7HkPP94zuADEGx7/2/AACDxkn92Rs2qs8VMji03hE4Xkgs
+JKfCoIobEaX2znzn+8Qr/GSl91O9YlZNHTQC+HdD+NWHvzHtl4NELD3J92G0cP7A
+XhfzrOfFlX053vRhiFrG08Jwi5urj7yK+BgSZ8WecgyGRrccNXKGaCvAp8MzcfKo
+PYkWCuKse/kPrqzmzHZ6+V3jmDlHuvQd8jT9NMUMAl9Afe1ELZaKcRDYrJhcPzaD
+SkYg8KuSJqo9zinlHGYA6hStRXmta3ud0/xAiLckVikqe/rKCGXNmnYSbF+1wNkn
+5q2FXPbhox/AE78ZbcbSx59+r8pqiWiZHbp8q4RYyM8Iy0rAv5xcroIDq9yWksMM
+-----END CERTIFICATE-----
+
+
+EUS ATML KEYID 35AEE736C9B4D2861309E7815C0FA4CE40D865F6 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAlQam3oKt2IfRQAAAAACVDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkzNloXDTI1MDMyMTIwMjkzNlowQjFAMD4GA1UEAxM3RVVT
+LUFUTUwtS0VZSUQtMzVBRUU3MzZDOUI0RDI4NjEzMDlFNzgxNUMwRkE0Q0U0MEQ4
+NjVGNjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAM5kvEGZXlL5weKM
+848Vdj4w9tTNOGm7nu/Ec+Y1yK8pKWHkQ/I8E9duOH0+LWSB42Yj/x8cBLIcd+2r
+t6X7vH81XU4ShVwMJHrAaNAMPKeu4zdzWx32r9bSCSFih+n+xJ42fNSQr8ouYKCn
+D+dDwrgqqIs0FNUDx5UKQ2144NVBDQrlBRsX26roIi/ld7fFNVojB924plIGM7so
+py7q+FqlObjGWrC+bpspxr0G00aqSrnYEMTgOeP6NxorXjwZnQJi/U7tZZPqQIU4
+p4pce/xLK997EBvf9e5SaUAJudBZVMjS5/dsePfNGqiar3a1ifFnm3QSSvbELV0M
+M9a+RA+oKVlY0O4pCCJ8gmE8N2x9DUog1Y1autdzNTJPhxBgrFUQx/c91mxxjw6Z
+QPUPBWxsH9Hi6Eisza4cXag33auzGs2v19ledRpQ9LARlwRatgSbP0lCFXBA9mmL
+WX7e2WIKd02FyrdzEuZjzpXmqsdPAd3RmLiHP3L1yuQln4h7hNbcpwnzSO9bKQzu
+hwdVnJXbj64sYh3zDQ6FsaV/NiMAgQ6jjqmc17uaCMxm9InSya42jVRjRl1C80C+
+MOkx89dD04GNRsyTEGrmR7Q5DzQn1URoJcvq6dYO1+nC4+6hHcQ718n+oUhfMQuP
+tGpoIX3gr5wHFsbM1ddaqJn9lRO9AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBScAUtJ8FtbVm7p
+QE2uFIwSb0K9pjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAF9FdT5ONLsNbIlB/oED1Fl+YIxtSAo5s1rWnxJ4ztqV
+anU7V1BnIp9YaJT6jpf2ozFNcu4+bl0PDv5jP1mB/pEyPl7S60V4s4HBy2mH9XHf
+E0bVN20OhHDBnzaI4u5DJaKZ3mqYIaDroDNZs71BWOdT7vyfBu8SecUG0ZLpJNWs
+Tbm6mIRxSKQs85xqPsVmBok2iDV9H4aLvx9b13e05wPD7YeH96SKi/3snjsnSII2
+uT4wRu4iDKmlMghYPO0/zrMxbAqS1vGwr5YzZqIDjKX+cbcgxVDMKuG/miGgSkqj
+ikhngnuyVkrnZLiqUoYGtbtU9yYFbTwOcsYUYSqPP6qbKvKtCpN08rc7Kmvmu6R/
+u8HKnzPtxMP7TmdMTY91xwUdNCVSN4th/6H/jYeT9k6wH0YQ9RtaFU/KwqhtKRQU
+6RNFH8bHifPeaFMB3+jBeiLE43cAQOKT8DfnygFkN0eDkQWkecvi6CmKkTyuAcGP
+UPEE+4XVb0ybXI7Qewls1ENH6ZJhUFMk21SNrHJMZsbFVuUr/ybEmf7WcEI5caev
+UA+cCPMSXOFqxDbpR6nEuQmHGMt/y5fAN5QlQRYZKawh9hzqXaUibpA7KVTafFUy
+L2ToXGpESzH5ADJe7dAOvuD+XyeJaA/5CGD8StBjilz+XJrsLJ7KXFKBcm+XUsg3
+-----END CERTIFICATE-----
+
+
+EUS ATML KEYID 4666DE766204E74DD29BB4FDC58523A1403D6A32 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAle1vdoUCKmKrQAAAAACVzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkzOVoXDTI1MDMyMTIwMjkzOVowQjFAMD4GA1UEAxM3RVVT
+LUFUTUwtS0VZSUQtNDY2NkRFNzY2MjA0RTc0REQyOUJCNEZEQzU4NTIzQTE0MDNE
+NkEzMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALHcyMaqEXJ4aFo4
+VId0Qj0qfNdUOLhcpOz4B76amFJ6l9r86B4Ap7QX9OOSwuY+Myy8hp0MWl2YWSE/
+azNyp9BVYt82BnMRW44Pm1xbuX2Hmlc/JFbiBXj4BMg1D3ipIasPWtiZZxeYBVLX
+cn+lCW7u18V6mMDxnxKY7c3ixE1gnJ5NrXCh9u/O3QqTsfiyJr+BcvF+0OUIxMi0
+EEraVxb89Ij72eqrZ9NzYgeGcrDVF3JSEftoshL/mXawCa3C82ctTc8inro2t7iM
+ocvmhTv4hQoiYOM4+f2hoTSWBEUxqvwIlreudCXRCa1Hi06K9NoCJgi8iA8gTMh4
+YYYdywc7r779tilwVdau4PZNyWBzAZBek+YgSdQe58Z9+ohodKsnM2JPK2LCICRd
+Lxv+Nq6pkmyNlIvh6pKeJUsUSbv9uGQPbnlC7CGft3dDhVSG+BUeDcxfS4tjTesU
+1uAyXJXHbvzzaxBXF7kp5haMz5ykgkRE4J3sRCzvxme3/GQALmluUJ9wY0+bA2q3
+Yz9iBKnK+Vs7NaPYNVz/slXShLMCAJzwQyOxTVZQcATRnJHpNoFL8QsJFgXvptec
+S0nj95dL0+LHV0eLPQWLqRcxbJe0KY1T96wKQevJS/ShbBb8nidbbtG64QEiqqMx
+69SglZnviKUbEUm90xD9MldRJ2olAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSKWX3Jh+vKZkHX
+onJDbK7sUu4QEjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAIaLvEpPmJ/98Jxgk4PWcAUPXViJhpqJGYPgzc2h6kGT
+/hTAem/MnukSRjSpVx8LhO0WjcAPeBNJc1FTYCKI0pwWywWAoM82Gi2VG+GM3av6
+1tVLkA3IWtrPvbmT5G+vFTOffxrcb2PqKuVTDzeZHspJfcIKxC3yY5d/Yg72ixJx
+mPqpKhvgmWFRXnNnrFhHvCh3QwoRjV0IFV9xSKyTbcXdc6LmTV+LETsXXc49uAR5
+7IBvDtMoGgbDIGWR1J7MJhVabU7n78emK5otajqLjjaAsQVr6R7vGNPYRRntrXLC
+UGJUY459lrdvJZjA9ysBbOZWxV4O+VPvGIqrMdBK1tSegYW2AwAriEGAkVrqY/zI
+boRqlsqkkZp8BV5TfGc2r43cg7bYre95VIbM2KJK49nMPRMftBANH+19sCOmGDnQ
+GrhLovlA6U/66gIKqq5+aISM3C4QwZ5hoOr52K99dneTggKERd/i5MUPM978D0Wj
+riIdCYv6QXV2iOqq0U18UyZr5+GLAwbKQJkTx7qDqtQ8us8d7Y7017gN74prRYRz
+ItK9WawfHmwpDMY9Vqz4rH+j95ayJKl0sF0rUYjcB+mpQTce+SeBG2CUEixCIXKk
+sSzvbmI1K+ur0CjM7/ILMEOi0n7fkK0FEptUmYCcrSZnzxXWClIuMKgX202OLybD
+-----END CERTIFICATE-----
+
+
+EUS ATML KEYID 55F4DA39CA65B6681F2B7711BC3EF208A8679D1E 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAlVB4xMV592EuAAAAAACVTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkzN1oXDTI1MDMyMTIwMjkzN1owQjFAMD4GA1UEAxM3RVVT
+LUFUTUwtS0VZSUQtNTVGNERBMzlDQTY1QjY2ODFGMkI3NzExQkMzRUYyMDhBODY3
+OUQxRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANsmxurXRFjjP5UI
+Thu7au1Y+lWdKXsLN7XrVwkgRYg0nUkmBVTJ03hnq52wdvvGIvKdGEytJ8hRPNtH
+5smbdmxSS9q+HqOHbjm/3gDHo5tKdpgTM7MHoyJaTv7umL1+UDbv4XmJxJovEV+o
+DXou2eFnJkiDKJsCNUj2RxuhuqzWZHGDt6bI5tKozsepqn3E35PJcrx9RMcLyK/V
+IASb4SULQvZ2LOV488ID0WCL6XIxY47+ab3foHFszqJ3iHcTyDIIrkjHYRtkxWkk
+j1QKHviWyIeIatnHzQQ0gr4tBB/PvZoy3BMYLuzpOMuIj6nS5VNo99sRWvaMtGKW
+NERb8+yI6h0YzLRbYIZ3dxVkduiK1nBX1LkdUp8+yq3Py52gbyKc1eslbKm2kkym
+yBnW8o2wofcahcTILL+RKT4zS+dbFFYKvkDKCXsj9K6Qg8ytkc9Jf2UAIVNMvvqx
+F18B8INRV7//FcT8SgbHoXEvYrGkNuZ1OMRBVQJIQ9ou8yKIz7kWryk9KD/PDQm0
+sqKlFD3lIeK3qvhkDIqHHKg5lBPOcvLi3l73kajus1Z0k+87PqvZdnUemH4XZ/Yr
+84GpuidczCu515KvheTAhMhItFZB1f0PjZM2eA/2VVW1wtzoNYhjG7WI2Kgqo6Gx
+wgHW6LqOuheB42xC5BKVdaLMTLY9AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRgxj3VGnKALHiv
+CQ0XzJNh9SFqzTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBADX6IH4rt6iRD1Nf7xC56mY1tove/Rxme8OG/+0Edk+E
+eMALD7TnAanfeZC76F+dy+O1/cwFPwRUNyJxBXBahhTDqBz23cKXW6orYPZc5VTS
+Z61lPobVB6cDNSqHKs8is9WGFTqHk5IoRn+qO6hHaV+/CdPrZ2O1NImmkcDJ+qjQ
+Ne8p123PeIJ0JBuL0a8Hv758vy5+4UflAhEUT638HC5VoaZtQKvK38rK7MxoOmMp
+WfLm5XDW3pad7x/opvetelUQBX/2CLFH+/5QFrcqxI3amK/sE8Lbi/7X7k2st0WY
+aiAcoEhiVqzqQWszEwyYXAA68Ra1LurzYU++4pbZ4mFmS4naVSLkEOkFMNYa3z7J
+6Caa2lWy5H//4z1Me2d6DhZINdQu0I7n1wOxY+CxnYXkdE8yYaRr+Z+a2aiurywn
+TKdSVyfrXnxQHvK5ZlO/h1cYnEHW3DW2RV3o19YHyd0SpWgH4wWRGkgkjCNbKYRA
+75om2CFwZXwbFM6Z82MEL9bCsDjCUMmqe7mSCQ3jsnci0i2WYgNU+2xJZlkoQ9Fi
+6J2+sC6LZjK/7cuys8/dK9kehvO44EnsMDx0Yp4tR6ZM0KOXQ1BStwsAP2TbAEtm
+GoDsdIrwhgMHQd3TUvi3gedrBpzT+5iEK/+JJCJt2IqJqtZ3bgb4apJL1KuaRU04
+-----END CERTIFICATE-----
+
+
+EUS ATML KEYID 81B5D99CBFAC98C5D61A8EBF26A86A086BFA3ECE 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAlaNRJm/QE9H+wAAAAACVjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkzOFoXDTI1MDMyMTIwMjkzOFowQjFAMD4GA1UEAxM3RVVT
+LUFUTUwtS0VZSUQtODFCNUQ5OUNCRkFDOThDNUQ2MUE4RUJGMjZBODZBMDg2QkZB
+M0VDRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAN1ccX60UUQtteAR
+7cHE+9isqoSwaYDGaD/hnFRv4CGh8oehBdmZ+AD5Dj35dmSNuqxVS6c1EuIi7Quz
+l52dSl8PXel8c6wfF66obgHYxBmwhLqzvjqosOCDXyE0a3/PhNLXNjWdOP9vFY4F
+cJS3Cf6Q+RvNi42qhHrEkmgIKPu6dR3fmtfh1FQzr1TMS6uqiAwDjMSjNFn6ANni
+UcodrpFqlaN0Etvj8AshowReKzFmX25HBduv59s96RXtU3g8BflllQtUJ0AaYk6C
+sgG9Ci2s2FR+dzt3T1gI3U9jiuiHSR2/5wDPN+ZGRPp5o1qYe0fUYO4MJ4z/iPeo
+/qu7SOSMuG6/zFpZNf37HAm6/iu9rwPyhfdMU1BL5QLLc8z6Z8VOlZHXGzWAie3H
+w1Ktdi/DP1qKUOsm5n7Jw3wlKsD3nnV/TBZwU+KyUr4dllkH6qDAeBT4orVWhN9Y
+9X+ZtpqMLJEDvsxKt9ZW1KbxrgIZAkK5ZLivraKz/L5fgh48NAmZe/NaVSqLd3ws
+vLSIv9U4pws7uniK6JTK2TWX6Xd1xEex/ra8ouuKLtB+OadUrZAhtAAAuVWT2qj5
+dY85KGEY2cHAhNDBapaS3StlWI67CYO7JMfzPvW/gMVOZzoIXy+XyvNyUAYObVmU
+XNyoGh6W/EukBDbJTXJMHMLlXevXAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRZL5YAw6zvM4yt
+Zuwp4JOGzAmISzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBADm6JRGaVIghH4sZeoWknLI9C8g6+tyrn1jmd08zwjKG
+FNoKo4o/cimEMb97VpKaAyOfsIXGQg7wUwxBuBwlc7EbrSIZBXj3KUSURcZTj14w
+kNGQ/xrdxlgBBZwepNWpZTRE1AaOHfaO6YexF67ZuDAh6cODyleK4dRwBjHBR0OR
+dxJUaIN//caNYGnoEAolcrqZ+Snc9yKEGNs34VxPd30GYFgzQOom88u2aivFBmFe
+t4pRg8kgy12/gGDGtQjNPjftL/TBE9vlpETCw2cFpKUZUX7Ole78b9/pMvWoL4oA
+oiLUHnoyi65I76mXYgxt3qvrx/ZXCiRRnZ2uTFLgJPkBU3rcdcLDTMZC0uVh4+2B
+QL3oj68yKa3re0H51H8tX1aGGJPDjl/O6gfEYqwAb5RdGfIq/2GproXIkPQAfQ+G
+hUlAuIHjy2rRTBw9TodSpTzIC/hjFNxLLuhCdG8DZsBCj+Sk0U8ACLYnHkucf54i
+3HtGGdx6qrJEHGYzR72wGzupOCjgyjMTvF5sUw92MX5XlUMT5vTKkXnZH3R2aCG1
+G/DMGhdll94uyNs4OxMN4SjNnFb+lxSQrLAnytCwLwkhjBA9lBq8tpiwas3Yq8IJ
+/zaFQVNt+pJ3Oldx3cPnNLxivo6AgBmF6yVIS6BqUz1x1BSKCbel0mZJ/2LCrpKt
+-----END CERTIFICATE-----
+
+
+EUS ATML KEYID A0854BD197F8212FACBA38991BFDDBF5D13CE9CE 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAlnG1yZUqZIc8wAAAAACWTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjk0MloXDTI1MDMyMTIwMjk0MlowQjFAMD4GA1UEAxM3RVVT
+LUFUTUwtS0VZSUQtQTA4NTRCRDE5N0Y4MjEyRkFDQkEzODk5MUJGRERCRjVEMTND
+RTlDRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJkhRYdCsaKSLJq3
+ZGYjigq2BYvu/6eAOfm9CzHnOvdOB3ehpFCU2mdQ1xN9oZHDEXUhA+AjJLttvQsh
+7CfYsaJD51rxbOklLpi6RH7bExxWTJP+FcLyYzD/vQvOlgEhTPJ4Ke9VI7NBpDaR
+iicKkLh7M/Z0vuZoQ2Ceu8RKOYgybuBShqC0NKZZpWi5Z/zMt6vwTwAw9uDyuzHs
+l1ZdUtkyrEuBOaz5d8V5URpAAGcGc/LAOUgKkYz6cNWZI+kcFoEjSA4ovA/FK8mb
+3AzUK7hea8K5TbBjnAA8GVNsUnLECZMdoboWSXqTXVISJKX/BD/g5DjShMnNLYg6
+7ENYT08KI7E3Xl74cUIgjM+7Fc6pMjhaCjLsVhMsXd/wX1zMSMWCjJnfYQVcu+uK
+dEGUdXaXD8ATvffIdNN79Y0ClWBRRO+xomOq7wb/wexy6Ey8kToPYM6MvXDFwl4n
+YYJLXL2+oH3CwUG4DKp39fdHzn/jJbW94UkM8GFVfEH5DdUVgXWj121GTym2xmt3
+eW0z5+hzlHnDYIewLqsVQpVg02+5og8XhhpZFnI2emAgRQp+PKjCby/LYLHTCiR2
+EqYWrCx+/QnzB4INCz9e7aXNnPjJ2Cs8bPxEalLFQ5zOc01Crqfg9qbAbTrFaDJR
+wYKUOVG3drrDiXCRWiYxNu3ZQgFtAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTfG7r5WNnoL/0U
+hqtd2P0Po41bWDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBADjdhcH6w1wBpbwZH8+8gYakANFavZg1A0vk582dw6xS
+wsV5YWhDJ/5LjnLQQMfxI98Z3R9dzt/hfWoM53fcBs/paJcggyi7GfkwLNThPNKC
+bQQC5kAuOenL37d0TzxC1SjyDx334t10gjxptVDUn/ah4hTYkvy0iYmOQ0ntilll
+PreUNpueV1HeD21h0PJt8kmpzpX9CO7SLw75krVhrmQo1hpUvGcWcFu4GmEH1UWl
+zanHwOoOOlSA6bAc8PxhI8M8IE2o+7PwIvFHo99doXfv36TpGU8/Da8r62gAa9l/
+UVTzRtD7OtAkOEScpLPhqAqNC6qqb4HogbbMZcFFpm1b/SYRAz8jn2azEIhRI9rn
+v+8F0VVN2Vtcl6dbGWzpXZ4h7ImmzBRf2vqJ3FDro8Si1LcJT4K8SERtxzfItAzB
+hkfN37TSYSsqskrErhGKTvGrnIXkD2qYZkdIT0TFYaPIZZSDnSELGJfZKFQwDhg+
+5Hm6rsm+bDFhF1I4j8neg9ykHmXDBwAfbrRt0/uOuYZq/3D+QexOgCnogHsJwTeQ
+chuvPW8I3rvcqNMPVoud8Wx4qxGgLyBHbEeleqeFiS1KObMdYbyTPavqezMZyKpU
+BqDXz+7PdITaFv5GULB6+p7VJ6X4kjEPKvQGB4DR7wk8M9Qrhk0Aq7imkbCm/9C2
+-----END CERTIFICATE-----
+
+
+EUS ATML KEYID CD3401AC6E1C6F93DDD869D46A518311B3747895 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAlosVy8J4D8CJwAAAAACWjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjk0M1oXDTI1MDMyMTIwMjk0M1owQjFAMD4GA1UEAxM3RVVT
+LUFUTUwtS0VZSUQtQ0QzNDAxQUM2RTFDNkY5M0RERDg2OUQ0NkE1MTgzMTFCMzc0
+Nzg5NTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANnS+i2lVuEFiJ+O
+8QiffeuPsVtffdjeRcNlCVTqna+2SSPRg1hQb7GLG2/oBFS5lle+FtAk91X0REHq
+Gkf6FOWACN+LY1A5rhb9PGlvpv/u3epWLbDFF2dqi13OIpmRfxz0xSjsHwwc4TlH
++SfTDstr11Tfha6JE/Oh39ESI8PiXNWPfKeGPXYtjG6UKqEbo6gedRMPeUKWn1v7
+xVuZwQzeGeG/06qFhXft4fuLuNpIRjwrfLOOX+NGsfmx4x1hovpi7AocniggXhk3
+XnjpCr9wSHGHWZFaXOW88plsW8CeMlTsabkN9OMiWTByE1LJK8N7mJ1w2f/7LjKZ
+467oo7nL/Os83qYEdEl++zP69bZCQGb/Yzn+v71ecG1R9/vqd7Jph3NK5zqgsY0Q
+1PRyjTJggxzaxXtc75brTOE4mXh2Qo1NAOCFdoKlFhLboTzu2A9ijUPNfK1YKagr
+th9DCzweVygiwVuA1PqudiaIWVBPBUcgnoGkHQP8nR2url/A6y7xuCn9cdKk+28J
+q7vHhWPrlkLDAKIwn8R3SowGrILDFNT/YED7ScUo2LtCheuDN2pl1LzUxgJGauF6
+JQFKhLegC1a7dnFJiVE+0Og4laK9D/jIMtHEUlm8iOlOelUNS72TK9xapaWdlFxm
+P+GYR/QkloWQ6j6owt2/DFIcGzrbAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQs5mHaTU7dPkKD
+QEeSbjn9++yL6DAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAHcTF+psxRI3IMfsXh9+Kc05nFhNImxum212SscfHlNy
+Z7E92hmFK1hJWqaXjAJStdTeqymo/NfymmWhvDLhrcIS1Ud5oR6ukn8yC3D/qNBS
+j4kxVcFWiLGhuctafXF5xmIzcsCTTu7rt485eoRqml/8E6E69yoFFIpxRI1TqAEZ
+F6HkzAd38TJoj6TW+XerCozjt0vKtInCLiBmUH+elVBF8OsFDxtu9J/QTUw6XWcW
+QT5xgxMXfjqDU0bMTRn/2LeDVGZAc++oVIKs/zMKpDZV0umobSZ9pFskHVLWX2LC
+lwzAkb5rYxW6jthvS4d9g9aVp77VHqrH0URasE0nsIcX0aMqaQoILkbp+gghNpXj
+IdPy7Ss33OlnyLhTv9A7gwtvlEVQOkjMJpjuIKNaDuk7mMJbhfH3lOpjJYD2SnAm
+gM125R1EsyfBxZg+xJcIcnkjc0qnDg1/+4G6ddocC8slHMmm7pcSP+cqDGCr6/6z
+eQ6Olnim9F/7LpLv+Z25T/ndTG6EV+IG8VL0OI3QWD6QuE60ARRAyqjpKJpXh4qT
+9iWwp63UlHvvQkmrqDuytx3gQcXyLC3K1uC7I0AJ/tcbLiHN+6Fn3ZY0Bl95TZ2h
+14Da/N5vByJI1YaaawmQQsRLPS8HK4wcEwU7sTbcUjgU3oWeaY4aOH51gwvajHoU
+-----END CERTIFICATE-----
+
+
+EUS ATML KEYID D6F56ECFCF7EDDB7FD87ED01E127EE009A463BC9 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAlt6O133sCTZbQAAAAACWzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjk0NFoXDTI1MDMyMTIwMjk0NFowQjFAMD4GA1UEAxM3RVVT
+LUFUTUwtS0VZSUQtRDZGNTZFQ0ZDRjdFRERCN0ZEODdFRDAxRTEyN0VFMDA5QTQ2
+M0JDOTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMYQ0MC+6ur6O234
++o9vyh951ljCqEgWuj+KfEHdizMHCY3XTpn8wZ4znqPL87wRUyOPB2/ghkjn+cS/
+y9Y8ky8LVseqKouwg7KTYUAInC9U0VPbyF5FcdwxRId0uJ0NMulyu/+loENcgc/6
+5fq2loO/bOaNEnpoFT5chy2FCO5EXpqIevDf3u6z+sB0RKRpajabZ3blDzW1XYv8
+2+BB6b/bP+JtwEkBcoAlVceCS2JDLjTJUaVAFZJlOuyiOtxvdcyHtBOPI0xqf0es
+Dzg7iu8dZH/ftqrhY56DsaFnK2mknqlLE3VoCpHl70I2FsRj5gNl534JRnR+NX+q
+ahSXusbcq+BdRBpBOobuOJs7GhYG8C/aNKafqfy7m2trsHUlzZx28SSj9H2qNHk+
+l9t3w+E77QNkYg5fCLt/1eAcGp4uS7bzuUhtEXoie1HlhLak7bM2c687VkRPAjoU
+WdcrIj5Y5aolxF3WlD/Cu5YtPT/qUOevP2m2+7zKaq5NRx3esGMtdE60ytJcqbSB
+ljbp1hVSjkwoLwOsJkEHN1SylzYYHiHTaefCJYuyTQOtoHttH89ExvBMzsa1Vbj6
+Fp05wgv1Z4XC4MBhu6rpbnj3seO/Qhw/Q6IZIiPrMDZCH0IxrlKtIQEshjEGfhVl
+vN+UBIwwbS6fqRI743DdEDklJh5lAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSfthvQSUEhRn+q
+zE2azzYTDss+8DAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAJfr+6agfBufsnCpO06sX+5tdrErHH1j+BXR+DOeoS7Q
+YoGCUAqxR5OoOZP28+NWc8ioNFeyKfWHk2+lt+zumFXEz5/tJK0D5J5c0e0M6IJ/
+njfmWYPmpqmHK9LfGrhBsmCtX1xbqHFjrFB1YRsJLHYlGTtOrCie3zwHJVInaK8Z
+qUSLQbxddg8BCFJJcIrMfRtVYffoQQCAX/Do/ViAZ5BlBSStcq1t04eSxwhs0eOB
+TkuApIoExhcAwt7dVOxyFEEf88qIvfnXvVX1ZTQjlPd/F7QcmMDHWvWSpBiUUlAz
+CUiTWPEA6cnCFweSLImKKJFBquGM39RQUiwsNPJrFsNevMYNt90nKklzYwbdspsb
+OOvCPW/qE83xhykqF+jBVK4gKyCq0sbx8FN+q5Fiu4RjOtaTkMVtfrcQ2QDW86iZ
+2IxqH3r2eGpSGmOV8+Gy4GtlvtkG7egkR/0v0Rndu8YjH2uyukRj+f9WjZMAQ49f
+Do+B2SkaXHc/7JUwVG56u3WnbXySXNL5JGCmRkCZq6o9V2NtkOmrUpWbDq+vzyp4
+MK2RKVIr5f7NI4+bq92fPKqz4oRL3X6J/pqv6UfiWl98yYMT4Y0oPDIfWmFzvro4
+gOlAW7sty1Ey1wR1lzogPuhAG97hPkt//Y2SqkBBc34Fz9u+diZZaSlxhmRNaZBY
+-----END CERTIFICATE-----
+
+
+EUS ATML KEYID E0028D87CE6C67A8751CC4B5D74F57622E75E42A 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAlyYHFbSWlizQgAAAAACXDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjk0NVoXDTI1MDMyMTIwMjk0NVowQjFAMD4GA1UEAxM3RVVT
+LUFUTUwtS0VZSUQtRTAwMjhEODdDRTZDNjdBODc1MUNDNEI1RDc0RjU3NjIyRTc1
+RTQyQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAN0AAqFEnjv7Gom2
+Dqfb4TWNf9Fzv7ixxWGbmvVmA4gwMv+S7XwrY97a0yTs1UKO/EvqR9z9r5EHZnES
+jqY5zJ4tIKbz2qjd23qjKT6qBNmsFjU8Oddho3ECom/DpmQF3iBLUl29IyEJaTm4
+kEl1jKufRyl008zoPXARRIMknJ4hAGiBbi4o6HI1M8nPL6xuuxjRvTDQW8GMxABQ
+WgceYs78Z7MDD+MNfv8NzEjslYPdicEDTM82TpgG3e3n7VhBp79jddRTSW8Lhn6W
+SgKh8WLVOXzdK/mfpQW6TO8eKuJ/GepHTA0y3AHLCHHc1wIxEQuzoBGsGnCEUNRQ
+B7hhjAkrMdrwcQdFzq1f45O9iVAxljZhywW0F7JPbGQicLoqw4t6y8LoO7gwivkg
+DyPZKWbtdkRVoGJwvKBMtHHG//CtVCzN9PbZfORizCK3R8ArpAhG2YZcuaSjGmpC
++eSCkbSsEI2alKlMhyga7TmhR8F5ertpRbDPRG5f0m3Hr7nNcS8sJkCibchGtsyN
+HAcpmQsI9Pgbuj26+woMAT6zJ5jhmrznZaKckULWimdCWAAPXAQcHN735wrDzwP3
+n8y38b1b210SBbxXEM3wCTrSyg+d6xI1YDM5xV1WeVon5zvP/650Tz1uAPwzHQEf
+SO9zKVXejdjQ+thfS06BQ8FikJf3AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTFncVSfAyXzbLK
+inR2jMjQ122BSzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAEfS/IrePpho1AUmhq0kPlvfVPws8qoOTUprofXLgrf3
+8b85xYBbyOYUFhsrKEI9Yvz92NGuEUMYp1Wwu3cUsB2YyeH732ducHsDyXXcoZYH
+5uJx3yZnq9tFSupkcZj6ZQWgKOwL3PKfMDs284ddTxztFP+M3hClfF54qyisVqeP
+vXGS7Hn6syWPnABu5gNUb6eit1fa4GNo7GPWWCeXogzI6IA9YWdlqabxbM/ZlYrZ
+wLfEKWupaR3HhV/m6DpIZa6oUFmqvcQqlQhk9y/XrapMbkq03KbnrnkEt3r1yPoG
+/yH5v8vTl7YVmSW9uy7Ag1ozBUowHJCzo63JniC6jtRO8ELMHqvifMAlpcYbcrY0
+2R2CKpVO2k8OjWToRn1r7zMYdHfBPL+hypem4fk9zKeFXmnklnekmwRDu8JZ6Luy
+V+ndYS5Zo2snPsa9OPFn3l6rp5Sgt8683qrtPz9N0XiZDGx88ldDGF3r3SN0onKe
+sSSD+e2v8oAMOGyfvPMntuKdgjV69lLHCIVGFpJ0l5F0aPff7oy8St3QBQNDK73x
+jNRFl4Xl3gN0Iyf13wnE7k+I/iAQ5D5WFnk2oisoIeJKN5PQ3meuskUQHbhJC4Z2
+37baoE5wxa4ap9pZHjT7HcgfGAxy9sGPC0/1raNEqe6Zo5d2nYOUwyYk/bknkzhV
+-----END CERTIFICATE-----
+
+
+EUS ATML KEYID F761A3A1F408F1090797B87127C2A2397C0ACA24 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAl23M+v3G5a9PQAAAAACXTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjk0NloXDTI1MDMyMTIwMjk0NlowQjFAMD4GA1UEAxM3RVVT
+LUFUTUwtS0VZSUQtRjc2MUEzQTFGNDA4RjEwOTA3OTdCODcxMjdDMkEyMzk3QzBB
+Q0EyNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXG8rmLP8vvAfAw
+q3NGTUa8MLY8Rj4G6p//GpRBTNDK/Utv9U1ruXG6wFlfJJ22axxDkrzxHIEwZN09
+9v4KvECIUZNNdOeEpUS0gslTw7Z+ikHSBRODfN3j5rnTkwug31dJ9KnWKoHqCB+b
+U6D+Y/5KiaKJATVLdz90oKXIfdm+ysKaZjYAb/iTI1BBOZ8ZpPERshWIubcEDkPs
+bCbs9O02MsPp4prZ/L8X74QVsu33Z65qDCP6f8YNqnfMKmKwszUR9vySxgGpF2+c
+4S/D5btvyK+SYD4vB4TneX2KOsWBkmGpWlzcPPtx4DKL1FeMbwHWumlj/ykZZRo+
+JWbNJkXkOBDd1/iYz1pfWdOvkMETrsfSCk9r5p9F3YwARbtmhtYATtY4mwSEhUO1
+Up8z5sh9BYKJYup4PCx6RYQgNbDVJ0D9gcrnV4LdFptOEiWd2itE+Qy/8l/FBy9J
+jNYL4FtGN5i620F4Wtjha4r2jKYl0zBahgIEFg4z7KjO6QyMnZ14jfCjdEJVqStO
+NufOV6tlza0TPVVzQ2ZQpW9BTjNi8mnUoOIuMhteXDef8JFJVUH3SSm8k64HiOAM
+H5+U3a5c/+G8nILZZy5jTBbXV6LtLDgM9LqLf8nuSgn7p4DYp2H0WgF2/yc8z3Zs
+6GASVzi4aCwp00pQ7Usb87XKNpFtAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTctR0aFx13GNry
+bNmZSE9hJRMDZDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAHycRusJ4FmWMj0Igu4aaXG1R1v3IwbRZIJho3i4idT/
+j533JxwXOTfK8s6MVmjIr+I7+nHtCxYv52lCcjxRJ/1Rnoz0LycQuu+rFti/lJbE
+rlsFgxG9hWu7BTbGwUSPuA9kM4DTtELPJNxpsuec16hOebru1n5+ynExm87DG+HI
+Wf/G3BgM4PRy60ifpwldqN3f1pJH8jSyJfheqqx3jQaa7ytHRvYKLaLvHhJn5Ha2
+ZumTwmIEsU6R/E8GR1QJhjQicehsUGciEp7qzVEejKLXqkbJMhoj+GvYN0BDn2Ej
+t25cL+hvUGRSJR3U3jHwV1B4U7nc0oFeCdZBcA4+/vifgrhAkSwWVB6p/6/8Cn6G
+pDdc2AF7g+Ao+WJbYO0KYKZqWjwS5Z6iKJBY+u88iz3fDx5Rn08djoNroWcub88w
++1WWuyCMj3ce4og1tN371z+1Cy7Ck/YxVkJmJAA8fddyr2szumqlKdLen8VEufKO
+9KO+YDGgHQNmyPOGEI+vjLCyOK+qzTonDf2ao75xhYEwRbCS40vv0o07ln47UkuX
+2LyYm8iP4hfnpmHtMaUSEsmu+DER5JAQ82F5QxEwklAlXtVCttgfEHBYnyTCU3Kn
+Xp6Q73AF6KdiDAoeCyqeILPsOf5u6WZvYvcAL46CytUwXxOCSZRStl1MNZqaLPd6
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID 090CAAE1858A3C3A3B6D4DF8978916FB205FCA90
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAARsTlNAY2cDUJQAAAAABGzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDUwNDE4MjM1OFoXDTI5MTIzMTE4MjM1OFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC0wOTBDQUFFMTg1OEEzQzNBM0I2RDRERjg5Nzg5MTZGQjIwNUZD
+QTkwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAifhM15G4CTA0jZT+
+KOiN/cmUIWA6fKv8T69ABsR55FZ5Ll0MWcuSx1crx66qmTx1Am5UR1aRM+93CyHs
+cIBLSYq07Tu7ASu2JMrHJWmw/7Qfr8u1h7u1ttdt721QKmmuzLPRE6ebc+fwDWrr
+I5qQ42zh3+o2RFmiZGmNqrEas01TIz9NxxW4qFJha6AitGtph+L4PU/3yXf+iRIH
+dh+qnEZIatn16j/q7A4gVU02oIPUnLXVb+fIHi+mrB9Jzxe3LFE8s7EGzXBKM3hQ
+EnDPqk5c8XRMo+WBsxjs44MwdFPJovggKSbVlNPqDV2fT5YzcfePShXRDmoN4/Dd
+GNTXUQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQU2TfQ4oe9B48sxwyeinFxwy2Pet4wHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBPpfB7
+FWLfV+1OA087YBAOXH4OQcUNeiblKquRY5xu99QSJkp3jarBKx/Mq29u//oEy+/P
+MSymhC+fT+CTmuejxDZgc+s0rIgZoVi9HDuBD4sq8StkThsRuD3x5RY83d0xncMi
+ZnSNPMV725RyTRV0Yxo9I5tTONGJSpBYJXyxnW7xI72y99IHP9TScq9shaEMD2kp
+4I3q+bPTSaVAU1i+Yi2PfVoYgcAtrHQzOJiIh3FcBhUxvZ0SlPJMMh4j6C0QGrxP
+hHn5v8wx02LDG9W/RjeX19pPgklgkD31FfhRkQwUq3J7PkKprw1O6zJutwvFr/q1
+ScOpQB5E+NuBQzANAqxjvFhD+3RKQG1Tnu7ir8qJ5AsL4lcgxvQpQo6Qxiik2O+t
+rCanuxWot8nOUSp/dgD+bmjZB3UV2CWjAIdk8GzxDuNcAZF56lwYdbecywKyy0H1
+gXtff9hTZkrH/b9AWSbWmRrBuz8UBCo29xPKaeDbaVX1+ZcY7GbiBCEwaCaAs8Bq
+JNcfGcFMay7Ozv5qaUpptj5qw2g7HawINcfFyjXjSV/2nq/PQ+CtxI61XOlyGDk0
+hbb1kOk0QJj3QkVfo2zKYN0RgtDrl8PFpmqGJYHkq/CGr/pd9Q49jNAwMLgCjzVi
+Gcu9WNN2XAeEYwojqaMAcKWfkDunB5FQjAut8Q==
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID 11227AB228983289AD2E7EE6841321901EF592F6
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAARw5hpDDIAE1dwAAAAABHDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDUwNDE4MjM1OFoXDTI5MTIzMTE4MjM1OFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC0xMTIyN0FCMjI4OTgzMjg5QUQyRTdFRTY4NDEzMjE5MDFFRjU5
+MkY2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjzFu7ZqP++8YecNH
+KarHsVTFujdMQW6oQ9E/kuUzqSl+IUhgwEN8RZsvTteRWC0NukhT1N3osnc6yd/S
+YBMMbJzm5H6JAlmxXtoaBfNLV18k1J4DZzMFl3upbcorn0rGz0uAi4HdiDabpONb
+8vK+rWFQibfs2XjDVm1IZkm3MZXtfFhWDGDyIYlQ88pyOU61zrEtci/ZPaXllKNy
+zI+ZKD/ukDa/Ku3PoH7av5iKAqk/wg9Xc+Ni5I3y89nO64KhSqUwbaHrrquIC1qp
+aqa2tYWDDvufhBZYjTeCLpQPxi7/YPzYB18P/UOH++whcyCWuJ6rJuB7zIraRuRN
+KCpJCQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQU2nrCJvqFh8XeIOabudMDqJIGYKYwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA72Yob
+ByQrTnXaStPfn+gsWCU/mEbYxV5PwQxh/RrEo7+6Z2BZ1MB6DkaE0naykktueEe1
+n76kbF9d21BMBsYqCh9n5pmsp6G9gQVKCK2WyvM+S2MsbyN01+q30Gf06QOGP8Ic
+OmCQfYZrD6DaF24om6FllUrmQhHlFsb+hClnCQEYuL891NZaIgJSvfj+jYn3bBwP
+JKZh7KvqM9LjSsxCTrON/T+eh7qdsGPWlJZEJUOARP+7f4rsggH67T7vBqjSpKrU
+SesBZt1I8A8weteaIeTAGA5JsNBzskrpBOtSqSzN2gbAcddY7ktuscKQTujB24b3
+g4d4eOv3HFaYNygWVeECAtQ+pkEB45pQtynvmfB0iwXWtlk1LPHc8Dy0tYij47+0
+PGMARooCoD8sTYR0akcdKghZYGgikt9DqlypKwGq3i7cQnWumCf3+YACXS8YIHYf
+nYGo6+NlWD+N5JrzFrVFGMWxndCizLKNHKcxR5r/rYBHcLHrYZBg8u+A6JsXcXt7
+8J6bld83jKbBai0aCd95llQgtP2Rnz75TBEC9LZJZbBENU8fwngbS8ha0h8iAC4G
+R+5iY5ETASPib907Pj7tQsVIetZVN1HG7ouCJAGgvTe3Yii95f7RWefhGQGUKI8P
+hrWiC298Sgj09DrMtWFVfKwk8ti2bH6cyRGIqA==
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID 11227AB228983289AD2E7EE6841321901EF592F6 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAhoZJ6vf/8RoMgAAAAACGjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMxOFoXDTI1MDIxNDIxNDMxOFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC0xMTIyN0FCMjI4OTgzMjg5QUQyRTdFRTY4NDEzMjE5MDFFRjU5
+MkY2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApeOrMza4KgqnxXC5
+EUuY9Y+aRWmi/eTEynIdsnPL7hEQu3gJtQLMrfVyfCzeFwygZqKKVxdc7hDa7XDS
+6w1N9lRqqYlqnl44bsJs4MnHy/I0XPMIFiVtRxwJchT3fNdZOR4Kit9vsxquHwHL
+pB3elWeDUEW4H8nMevb8D3gz578Fd6NlFZQy29fd9jkK9HV7qPBcSh8RXD6dTQXb
+7JjG8Gh5SYI1AXCSf33xkJ+Boz4pMysi9kWrIcd0QQq6hpY1iEuXbIKwWjMhuRLl
+oU2p9VPUFoI15KN/JxQFrGZz6XF1OxQwEXxUJh6kw+iyvICxDc2UMPnpLwelAGbu
+hPuaYFCqj20yCi67ZNk5C4kLj3ac1eUSN1IeXjl6Reag8yBrkLmNTReMXnHz+g8z
+0TBDNfyZA78jF0D7EOPzqGLXmjOr6oPxfPjRTDELmyT3/fVaygsmonkaniQPlula
+bJ2x7gg37JOTUTsc89lxcfBE8jzByV7HpqxgnTSCx3Zga/fuzACENGV/N5/FJUza
+LPiUWhO0t8HJFa3HKUi2SSUGTY0pDrnOzw793Ebq88UP6AKK/rRA5UHqDbd7/7jb
+MH644ML8lZ0QeuuKn1oj4wOyvL0YCvpIyNHbOHSqcQaZhATdDomJdRVcx87YHvyZ
+E2nQi4xJyup5dY2vrP8ENRHcaWsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFBlJ3woeZpFT1N9
+1cJRdcKNM+iYMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAHkqhwmv+BB0A1LMPsULW3OoZ5ddO4qiRlHwIqC2rSdHr
+Ln81GwB2EGM38CtMxznnxSz0KvaYyMnTlYZj5FRxV7jZdIpeJnb6/pSYcbNX7kna
+f++qnnAccdW8B09vEhxacz6tAVCc0ozAFrrFBmxEVpVFzcuGHD3NB0MhrTerlZmX
+cJTLx71BKz6o4EIUgN/m1uomNpNl7WdIpqTBKiYQ0NY1K4t81TbzkUGqdTRnY7rz
+0/ReGv92Z4FUwSKjykldbGOATM3/Q5wpu6Dw6U5YtJgtg2gVBmqh/+Kc3xt7UZkp
+ATxveEJ9RYw8Z7CWl+bIunjPNwVzOTkHG46xnmeTd9Yu3F+PY+EN09hplPiZKoLN
+TIrxm63O7LciqIgAhUBBv07IRCUgnuZ/w6Ef24KWjQvD8spzSIlSNd43UX4vrDER
+p/M2CNNt37R2YmA+4u3QyTq28KJ7I+zL1o0G+khQhmJFEBy6MjgY+M6gfDiv1TI8
+haPVAunn1MPWIX/cmyeRDnMg/JQLc4GfJQqdpi3i9668hpxMLPSDajyUtXrlBROj
+Buoz5XW2AbETtEE1cKZcqoOFN01jY7YNm6JucZfzhCX5QdhMGi1w3JTStAzV5a+E
+898pXUno6HFc7/qInkXVk8RTUwCsWwMrFWENDSU8HyHhjLGGIkRQuKP5Uub20ns=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID 128462F2A0D16CDE1946F1000544B055BC113D10 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAba9a5cZbUQtBAAAAAABtjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkwM1oXDTI1MDEzMDE5MDkwM1owQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC0xMjg0NjJGMkEwRDE2Q0RFMTk0NkYxMDAwNTQ0QjA1NUJDMTEz
+RDEwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArzH+FvA0Ieu6A4Sl
+ZkUQD3/JuigC+tnVxK6kG8YcQld7EXS9+tKRWDLqU+6A4/uHoSVn8k42V333B8fB
+gkcUzmZAH9fOuoXzWhIYp30xUmBhb6TiZn/gPA1zrCyEX8Z78RXk0amowKlCLypH
+2XKJ0HYpW/GfIYr+t0kY/2+3w1ZMg+J9Fu186rNh5OKIMicD14s1XmZvTAY4Lb3m
+BjLQU0cgBxKejrH/sG1kc+v4rHAAIzBKuAii+rJlloSW3HAhxPQpy70JlHcQdc//
+PkDTRjk+6D90nuPxGcZBltJBkNPbSlhc4M249QTV9tCHrPysAGbK4WQGWk2bz8gG
+0wZRQ5j61AjdZcs3+cnBhlGi2+CW7XTWbhdlA1K5qwicveDtQOpv2ebbHzaDfJG0
+xB694PR5y0P7nrEdMNLdHAo0Nv/yFf0IpKzomfF0+MOQy1Ai0Kn6zwaNYy3cdrnI
+dEfo2VCl/PhwvP98LGY4/JsjSc4uGUdGmc6X69KP+GqznUOO8obBixsSGe2g4cV5
+E0ETC3fHp/O844H9kbZnzX2u7xetdXYfLzJOmo+/RfgDiT5f3nx5Lxyp91NWb3B/
+bkcnYBSUsjkA3o1xbUR1QIoAPLH8ded8ZEJB5yQHsXEV4jAFYw7YDK/7qj/BFz83
+ey2GIPmYRDpPGZ45q4UJCBCzQPsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFBFefSGesNeSe4zM
+RuRkRYZK+QaIMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAnBJ0DJreJ6JSkEc1erludO8nioAOu2rBsVBQ7r46ybV5
+7WJd7Wmd7nbNYbK8+vlbtrsazU6o5hEd0Z9l2AIkt7sLwot57WP2e+wMI+gkf/w8
+xkWPu3Bq+wOwYRzRPM+5SzheM7KB8mXUK0j+cptth98v35KE6gI58K/IdbatX4Cp
+ouyqxoVeW90JrUJi5qGlpsS54SsHlzc9X4OISHU8HhH7KXqHxSjgh6I2iq7cpcIJ
+6L5kZEQ6nc1/t2JC/L88/tAZU0MA8QRaQ37vQx9EmGC9b2K5GyjbOmaVUPgrUI3F
+dxnDLwYRQY7uUtKl1+4w4DFBJxRWToIRXH+kgMlE264eoOmM9s4jDnYnaKvBk4VN
+iFa/O55xDLcJxWUaB0PaLadFV1DnuGJF46B7oMofr8WkCB3hZyZH1lGpQ/h+/pZC
+vuwuVxhT5VkRwp4oOrEODmEUG4S4Vg6GD8HBuIkDCcNi8WxxsuV6qvc4HbrPbXQx
+X96NqpyrhkMS9BQKezjZFl0a1Q0j39gTbkeyGU/OK0UQHMWZewgrH0wCccEPhxGq
+ID8IQKkom1LGlseVmRFIRZVCHzJY7pFt7+W9GbhfuRHpKQIb3doPYUCF5omGBKWm
+EXK3ZwL4vrUlXtCUlwLo8VcVipmQQqpqmV/WyB0A93RvPOTvsprOjbIuEv5DtmU=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID 1BD645FC1F90827C283E6CB526859FFAB0E0C62B 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAhF4Xdp0sMlSNQAAAAACETANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMxMloXDTI1MDIxNDIxNDMxMlowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC0xQkQ2NDVGQzFGOTA4MjdDMjgzRTZDQjUyNjg1OUZGQUIwRTBD
+NjJCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAo8JYyj6mHAGiMjqz
+kVqvKMoambQ2WLUR3m7cr7TcUB4hWhASJZRSa4elIBwr0vatcFSIFtBQqSOOJCsn
+XaHhTVLTDsCDCcaa/AU2ZlFRCHrUrhNU5Rh6mtgKm97MLWcFEY88nBxLr6rjp/t6
+5F/Yag2n8feGsIrkErNz00VWbg+uf2z41b+3haEG0Yk8F6KHOcVyIZvFavWmuUlt
+QKX4c0V0byR2wdsuAxEx5bY/7dQ0DGQR3N6Ft/IH7/J3zXbmgJ652xA0h15ZrWDr
+awZgQ7fDiqCl6y6fp1O/+2DUTBYb2OF0LU80wObSDpaf+dq8lIzJ70hDvx0iFNvT
+mvsA5mf8hTcQUWpziXcNOlkEJdLVXUNGkmvUPgr+S22oqOy1G1ZPHBe8F2pp14qv
+YD0LyS3tuhOTTnPNAZeV2MtjZBuJrVaxbj0Fehudu5jsbFN9pIyCfZt804D/+fwh
+jGRvGmziT7B1GXlnM4FQg2//QtDJXq8kRrB9WHRHg81LfN/JXLzZAp6mdfbtYwWZ
+AiJTzH3T83NAvIzcnWf6iRSVHblpnFuqWe98aVpCqtwrrIXTRbKZBuHG38PIDfWq
+X7hN+mOpPAdjI1+Z8NusxuUN8mxVvSXhpOZYYA2yoaaSH3BA7VVBbNx6OrI/Amso
+YjeSNWKXMO2nxXjUL2SfdhF/x8sCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDLGCjJEsQQBnsQT
+avwIDKQHmvySMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAekTOl6SjZQvTIuRVTQSIxzHVfxgaHW9xHDzRtt5El8Oi
+d9BKK9WCGxYM7JSBjTLqzzbwpoF+sILLNlMqHK7PdfSUStrYEZh4sjFxDpmkqyYo
+DrG7Bx1bMJG3Lj1WARoj6m530p4zyu1rmFo5DU40Wnwe9FLgedo6cjdrZMuofJSQ
+PWTkm7UY9ow8FayrDPu7mezyGXjnvBgcB14BkDLymbVouBmvciU1/l7oYw5hsf/z
+G/+xlxth993s/JbbOS+wySs/IQk5PNN+X6c+bA+465pB/2QlQMKINaSj0Vn3+BOM
+f+sI6e/8vpWNRT/qsiVM05+ef1Z8RO+YehaIHhTCv1hpDSHkXcBu3tFRCnNjJeWO
+alMYoAF2wnHD0QRS3v4Jz+qogrClTzqXTpyM00jTyJ2n/LoBHr8vmN1ZlhJyE2Zs
+36yu30OPLqvbs47CdI0clbr/zb3I8gEc+4EiX4jaFbEq31qxm8LRtht0aYePE5HJ
+HHp/QfFGsaXAQZ4qbavVEVWbxZGiIbULWYQJw7ckijTGvbnRHEHZkZKfylkhqpNH
+zpMR/lMPpRAdaGXb1xRoLTpk0ZWF+vFjAEIWUUbxjQsHgflhwOOi0mEoYCODVcpR
+x9idUZnJdGWN6uaAXwahPIUN4xIToFEgG0Xf33U1jQ4UiJ7qbwxt0mR5SVLCwFg=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID 1DDE0F406D122C3E5A4F861F94876C9E1ACDD37E 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAbDFOAd/UZ+ewAAAAAABsDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDg1OFoXDTI1MDEzMDE5MDg1OFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC0xRERFMEY0MDZEMTIyQzNFNUE0Rjg2MUY5NDg3NkM5RTFBQ0RE
+MzdFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAn13QOPVww49WXH86
+J8y5N6LX5mxCsnYQY4+4m9nyXrwiQfZbyLTfPCw9LFebgvYq/Y+vUMIcQPt1g33K
+BMmyLzI5gZFoifdJSdWiG6UoIxq5yPAbW/TIlZZ2/uBSepmVy14RHaZFql9/zq81
+cmhlvrmLzcbZR0zLeNbuHuIzhQ3Jw+9i85LyOsDpmF+CkRu9Uk1WM8gcu/ba+fyh
+Pb+roYrMtI/ThwbG1A28fJAc69OkiTrTW2WsSLjjiEZ4mJ6pRg8yWEY6iiVIsaVL
+o5ZAEG1Oycpyg8V8NfB8rtigOH6dHxKtQDhN6Ibtcav8PP+Rv2S0PyuisHrCbE7e
+V8i7Wz+7yJ6Ok1jXX63uqyUsWd4tOa9JFwk+NYprXVKkDkoAfOUOo/4iDFmfvv5O
+ljrBJhjp5rYBkEZHh4G+RPnrwyk4WK8zCe6Wr218MMfSvDxU+eed8gtrNFwlwUQ3
+HLCcoHHs3v36kHlUe3f0H/rc6RWXSVfitJuBCCFHprXkj9nJooLLp3HEOyGFeBhh
+FWLpO7Jy1luvyEX/1AmQxk6mUQvwddTbrGuwaIq/t8sG3hBvPqCrzXmMxMIuLa9v
+adlVdayLsp90Gcjt7fQsDVGbheqd7aFdhKZ6D8GdE9LypZEV+YApbIdu/ldbqccW
+0xmSVuB9p0bkwRaNUOr4BAiu3CkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFLKP8Wqss9HB+LR
+HIKPdYL7IG19MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAPA93Nv2HmtBBmt+inM8+Fhjmx8rBS82rcQpllkEeWflA
+eMfKQ1cAUVc2OuZ2joHwlwoYufDaXJ4st1kye13HBxV9rYQrdBDv0oBcHumUBhJW
+8nui+f38nYcFvMeVlt2E352UbpihJiIvCEBq0oU6/oH89atBJ6fSgj4icrmP2+wO
+7PCr/l0MRN8s+PybWlMpBCYVjIcSrWsVGuzCZcbxfvVddHqWy7xNmHDh8Q5s4Cim
+riU2A8hUehWF6IbtVzLQwSYeibLfVFFdeH7ZceC1szMgpyAKzAx3WgpAaAab3KQ2
+hzXBmNMTNsVp2hyJKQ+0VVqX/D3KoQ6zb+68OT2ml4a4aIj41/rCKThxmPloZ+xh
+ojm9N/r7/ab2Nl8mv09IGAxlCZGEuXZe7fgrDMTi8niXG2YgwhPC7wxZ2oZgemky
+TolZ1qrNrTM8apwzp24QhXGxsEIoLIinfNuzw9er0cRjwBfrp4U5M5ODOgih1V37
+sXkZlhfpae6GTKVufhY5312RIBUpNihZqebXzycmSldIH+/AE2/cZlj4aNdsEifo
+oZ74WKneBuCArgXFyO+mhartskzWwGqvvwtz2kxJLIkdWZtlh+zIay9eIOr6oVrf
+vqlV09cFyW/EBVwuv/0GJFP1GL7G7Q0UzuIVRRadF96N888tSunpjw5WzNFlrSM=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID 1FCDFB8ECE408675D963E5E5108D55C984DD797A 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAl4ad5Nz0f006wAAAAACXjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjk0NloXDTI1MDMyMTIwMjk0NlowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC0xRkNERkI4RUNFNDA4Njc1RDk2M0U1RTUxMDhENTVDOTg0REQ3
+OTdBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAt9o7/FLymjs82bAw
+nGsA4gjvoyIc5jc6YNLCRpzVZMljnOwjtdbIr2gHYN29z8sAiHiTtzTVUxAStVIV
+HMKilbDYdMW+NwaqcMy+XUfOREEC5yQVCgnZjju8qwTW7fu0xO6Ebiy5fdnFapl6
+wrYszPuEf3Q0Gds1JKMz6Bcr35DaoSzb1YAEYvdM4y+VSOuPca4M4oKH1W1rtLuy
+VQ7k79zz2297B2//f+KPGWXlMQxn8EVitta+DJKemS6aw9nyG0RSsBsmsRT4uKP6
+/Wv/DwXMLODU2obn2WPT9M4rFUwmD4O3rZGoqeYXTo2paIsM11EaGJQ68W3/7wWl
+W3p6t5mY9eOpsgX08Bdnr+fkvIxe0N1YvOKIyqLDqVyYvhC9FXCTeA6hrC1dVyMq
+/Vnn23XFKFLQjJVpKebSoX2CnIdzuOPWjdV1fsGiv7PF4QxJ9ZiLB9qeReoWLIry
+I04QscjeHKNhzrkxqAO+rUob1lZm2U8atH8xtQIgKBRTQkSJvHxYzMXmG7Nlc5nd
+FjNa3nt0oCvKtex+RmxKpF2Lv40RveGaZQe2OvRb+1+fGU+GiR0lmZt0DmfFo+mt
++6F3onEAam8J/EM2szX0z8WgCr19KnG9mGVXUGOiMkz4TRK+OJ5T5GHO6vrT8BGL
+O15acBCgOWdwZY1E9Dl2nJ0E9RECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGJws0chYaQ4IgV0
+aA77ygndFW01MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAcLfZyPBeGJFBdSeU4fAxukIMr8kfP0pdevXjUKUKogeQ
+4uunojJ68lGGjvmZjRm5yxP53qdPsLvaVnVu9abOo7E+AoTk1mOk8kzfUBeQ7Tpk
+AByUeW3BhqVY4ci2Fx0J8G78s0Gp8FzFGMcTQXdKKZqEhvnxMWILIDqMg4ViXs1Q
+ZmdwJMihsGNCBixHyp1T/AqUAf+4rd6Bm9AP1BlJ1SUT2UPohW7H9P+6zY5Tl+lA
+aURBdOcnw5eiQYSdmrq641/G1IR6ZeWq8dk42l7HJgCzvxSsu/mKNBNOVxPhVPeu
+nw1UfYYuUIuGKgdDHQomW5Xv6zr092CST/yA/xxomqgTIa+wluWqOawqxBux6MK/
+DcjnJeDCyepulJq9qq2phwuR0YYpuc1Y+VUU3VMO6Nn7qv61e/igM+zeNcwh5wxt
+eD7w0/ybHWhL6Ol8ssYEbzRi9fozeNGnix9ZtcKbsS50SXTly+Jomu5cg4QtZEDI
++yqhs8eZ7q0sj4eF0k0gWMrRxSLGAD0kar1DHQQgt7NTpmq5t3JTL2C1RUUBeAxc
+YMDc+5Tz1iOOzwRPHF/aNiC6oWxrb44W1tvsIGi775qjVufDTpjVxEwV/jy6R2tC
+j/CAp2kUM9CdbI9kOstNj/eiPPpPF9HjJtr8z0MpRCIHWi+DwSv73KV8qBs3MHA=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID 22BF9BF4978F4F45A4E9DBF729D8A08ADCA0A82C 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAbO6/Zrd5mkC3gAAAAABszANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkwMFoXDTI1MDEzMDE5MDkwMFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC0yMkJGOUJGNDk3OEY0RjQ1QTRFOURCRjcyOUQ4QTA4QURDQTBB
+ODJDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAl9VnCiGZ4p+6rPjO
+5C7RYOrAxQXour7xr/w+Zwa27OM4WyrW5DXe/SUWxht6/qbELqr5JGtBRxsfzKnH
+l8od+kc7VGWqEU2NB31HTFyzGtnx+YcvstteT2wX6wwItyhWHGDmh2a0/B7OaKA+
+nbsW1/UP83hTkTh+6i6EpH3QFsCAOT/rBaI2QEQ6mKVVEw6U3+1My9x9dN8hmGiU
+wbH/K60VC6QVOf+npjOBh6cpB018P82wSZPI3qbUb3GEW2CbMlUTzvwR7P7E/ogh
+j0qqgGdgOwHsrNHWSMEVuCiWSKXRU/pP9/5poy5vwYNTyWPuB211+VqBdqVzK3lm
+RJNlO0evLG8hF0nokcc0HoqRW8EXpw1u8upzsQLWalvd2Gh0WB09jYU383J4MOGt
+fMQZSu7Y+XNWbvouDh2Wu1KlEATqALHaYkV9hm/W2XsTEg5W0iz1eCWPFF4v2etL
+vZJB9YlsyjV53PXOsxnUijDVjmiUZER5B+YB1pHO+U8WULmi9TdnvoY6eLQZCeOv
+NWcVSQUG29w+lnTngyF/yfPUbDIa7cMWgQwoSJhN9XeBldjPlTrA266FQQpsN8JH
+QQOZHsjVCIPbs9H5HN564d9v8x7jJGK7Vrv8wyLXKBWke6VlU4tHw7GE6z0SV3gd
+igAq8CAP3mGToi+vilnsUbyUif8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFnDcc1UhjZeadCH
+TBhevU+8qALvMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAi3lP0tMGvGbrAdMCF/D7tv+iI/bn3I9MKvHmD70YWal5
+lIboCCeuo+PoMbTxUnSAbN65H9K+Jq1hDlkMgyAMRI6xzwepi3bnUmzA4wLP5/Db
+wcfyrzUrvV4W5jw3FGeCr7e74pdfemm3xxgE9/ZIhjEuXW7JMPNmAXhucwTSb7x1
+Scdaa7EV9eq93GdzqG5EhcY5HQkFqY+kRPCecAXq6Op7oYR8mdmun0HSHgdyW+BJ
+yktLW60V47lLTDLfMNTFUl8B9x2g+Y2/WuhpW3zNPoxn/HVOE+zvyX45sBxcucfw
+rxhBhd+0KKqMWpzlvnBiF7fW9nv67XMGEDkFIZEryAGdEK3Cjg9w4WipHLd66Hwv
+V2ZKk80T9h6WWdjuwyqcBzw8TtScDoQlwhmfvsSKbPlohFrf5Se9NLd8PXdTfPYK
+Q7RzHk2C6mwP1+jks3EbhixBjvUhmWOoTOufLRKxV8t+AjGx9B+oK8earCtdvuZS
+aKQWqCxUrvIOJVSLrW6OmY7eH9yc81w3dCvDRafXmqm9IE8U2+rCRkTLBt9wHu2H
+D0LHBcPR9nmEiYSR5pvHVqfJ+pmMaU6S03gh3xCJWINRE56vY/DMGuCzFFvfFZNf
+PcvLll8JDU7VDyhuJk6AG1dYvfhJ8SznOpfFLxZQrpAYR7kvgAC+1qT0cTgTe6c=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID 265CF32470FC4D93C7022FA34AB4C8087948454B
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAVw35o+1HkiHwwAAAAABXDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDgxMTIwMjUyNloXDTI5MTIzMTIwMjUyNlowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC0yNjVDRjMyNDcwRkM0RDkzQzcwMjJGQTM0QUI0QzgwODc5NDg0
+NTRCMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3ugFBOGbLl7FGWQM
+GYTMNpRyyotnMfeZL5SToO5TBojIvYEP9NEgdeXkUWdeY12Bjy9B87Wv+5V6pOF7
+3h9DVN/zh4i9x6S5VkilS08FwfkaSM4JUqDDYz4/l4Nl5wbbAqrBwfWfgPdI1OpN
+zvxaXDxENP8dKns9+c6Q+tSljrgg7jf7yHD1i0eNnW2mpXLMCPKKoAoS2Qsv/ShZ
+x53yQJepf+V2dXrO4Z9nfFxqLZeODbffJAdfw2Jcg1zDdZcQBR1zxQHNg8K/JJd+
+eaOCvgQQbuSOTCU3K0jm4zYmIG9XFJrRuPWTpS5HKwSHSXZZHAa32b+gQrSwrZBw
+6myvbQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQU8fBaQPZiIagiLGA5Ybubt8p54+4wHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQB/9QQa
+nAp5I1C6bL70X79y1137RVtTmoxTPF9UAjwxqSNuSqtmwrciguzals344fu5+/Ej
+rgSjnyrpL2V3co6/pmVvqFIBIopRd+ZJCfS4tkeXxAXjRxptq2XY4XIMS+366339
+/29uWbs9o+BQi5Ub2K9aYVjWB3ckACSc1UAl9M05aROYznTjn4TkjdQIrVTWNEL7
+4vrluNQWwbw8ydlFydmsSZZO9tWw2HfNGGTT2wiirCGd0ZnsNVeENvmI/0uEoAa3
+la3L66EKuOVyL514vUTkjXYQT8FuYDvPa+cvp29kalY1Pw+wxnZHJWBsvOj7PP9c
+rj7tsZnwwmD0DWqO9V8I0Pw7Hvhlv/FQDHCNajan/vrg1h4QGyZvDHdkfyQSlcp6
+F93gOGN/ECaSvfFz8wz7mPKy4PnRML5gASJ2vn/bU5LP6qcK3EKz4DnxSWplhWue
+I8nCU/R/IuxiUUmCPXNBvFUeKXA2+DYHEF8ATPxdtLD2Q43YODl3jpnASbEaIj7F
+sHPGDkrrWycEcDwqTO7BSV5UrjPITYxgsgPTjsxTQIoatqRWzn8rPGhfY8hj/0Cm
+kOYPRcjXgdTOmrwbiIG00yUNcmJGL+Slr4963EEXE7TcXQv/4JHpVjTen79BiIWg
+SaSOdRJ/r1qg/PTLu4CDGI0Ih9lRwOecRZnRPg==
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID 265CF32470FC4D93C7022FA34AB4C8087948454B 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAhgAsnpTYYvQ+gAAAAACGDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMxN1oXDTI1MDIxNDIxNDMxN1owQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC0yNjVDRjMyNDcwRkM0RDkzQzcwMjJGQTM0QUI0QzgwODc5NDg0
+NTRCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6nMsPde/ShFrg3lK
+BScyB5XdWtgdef7sAaVj6UDm/oqUGDAo2oQ2wRJV8iQH/BIVevOwfBlV8LM3bNeY
+L2XGPIQHfimTL9HbcvJvmjTiDAXrphCNSfbfwY/mF9t8R/w8BEtf0VYYU1T4Btkw
+NrtAyZE8eFcuVT2Yv8XrJ+8WqkozV1jscoveVqYrI1oTNfKSuVgNLO7H8t4WNdFg
+MqDMXqlyw7N5MB+0l1uGuVHvahbdxq60+Lkii1ujlFrjJhW8PVfegy+aej6cRRLt
+6bW+Uc8GevZ1zLaCZxdP0gGoaSUKLXbB64ukPqcSCI0zlzWGY/OnE/iwEW0Vaq76
+gumzLN/T/bXxrc31P4SKM+rdXUjQr2IJMukYQtS5CjOaf02lMd/vlEsacqv0FGmt
+mU3utLKXkpNjWxrprCm4PC2KA1pXcjTdCDs8CsqWtHfknonBI9HXArXRsBiYUYMf
+pKoYfmm+0U0PV+x7k5CyNvnTFHGoju58v8Dus3toGtdVAcsrAS2x1D0L/VG9vHtq
+SgMtoxH2qq014HtIaaWp4QBoB/Xg5pjPkLcrv5uYDnYKdcU0IS2WGRhyCHCu8DRm
+6/MLrCRBLfQ+ipsK737CpNmcUQu/570mR1xIa3djPYxf+A9aKqPK5tdVVYSEwaXC
+9W+SX061UV87T6EsSpDTrYXrY/0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFD7q6cZ2atp1HMNf
+up+agPZ4lak2MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAlInaGMl/Re9ol7iiMCzSLoZSSLjHQC8cwTB4TdJMeiSF
+stmw1H5v/PKGSGDr+FF/pklXnR7AqnZqVH+6+4MU3YoV4SZyXg2PEMdwtaFAr7eQ
+CEOLsllSsX6aM8NYeKWG295BJjn7HhjRqy4N20LlZKpGySAqbK7qyfhJCOTqTUwX
+3TDbXw02VWtFT+jtRiIhBdCu7TUh7i+oqLJfd+KZoPUd1MYoDSIueD+az8/NtNkh
+IF7ST6dN9dhKBPz9a2c/AQIYtF1YCvvOm7Et7oXc+d2R+0rgkXw4iOPOM94+va+Y
+c7K+vCdMw8YAkuhYQIgax7QHAtvdl6KumA2aVQBYAk1uor43LAlY1bz6fO4AhvOq
+0RFkesifY3+owNn/Mg43bEeUe3i2PVr5QUMWtFrRNGv9budR6eQJUr9HDjmIQOrK
+eijPl28+2bLvBN+YAqAdmFco3AO/r6Jf9sgdYyDQxD1VzK7pxjsRxarFCzc8yHtB
+b9bdrkshlf1A5/IF58rr2+bUzTc8JCBCdwz/CPIfqq6zNRcgbChhsE3RBR4l0e4g
+P8kRBOxuWoLKnICNGuX6GELg/2DjPaIfujaMwu3dt/VbNXqtn6apiP3zYmx3/8rw
+sBhAJrSQ3MCJudFe3nI1xOulXFwib/hlKYxU6ynWlh/c6SxyJJfnsGhdIYZsit8=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID 2A4A698325A1B220464EF009B01892268B25F84F 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAeG5LvuOBnNz8wAAAAAB4TANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAyMFoXDTI1MDIwNjIxMzAyMFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC0yQTRBNjk4MzI1QTFCMjIwNDY0RUYwMDlCMDE4OTIyNjhCMjVG
+ODRGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqvwC3tjccndFWSKP
+QLT8I3M5Rgs7UMDemNelcvkf5noXqg1ZdjSwQkIkjCn/oQVlnc3x9Rlh75l3hAj6
+pzLSA99oQpRBogdh+vT3ocOyD46plj+98janTPcyHc0Ha1MhWUBxmnTYhkxWhWar
+jHe6/8QqYN5FePvq+91YbkIe9gtfCZyKw8FpTzA61701YX50oelD3oEt90BDUe/1
+amEzdom5xhLSinAouqKRLo3LVOWHeL0sjIVXEOxYR6zP19nqytM6L1Kg9hZz+773
+BbrcqGy9Ki/1v7jA1M/H5KbROmMTwO15K0tFbTD29YpqMncSBJRQyI3JoB1mkTPn
+GGlXDCGthrZDIDgRtrG7zGW6SYJ6ajzUFn1O2MRZ3S+qtlkJybNJiQqmbcDXruHF
+X4mgQ0bdiI4za+ypyjjurjL3+uYUZKGmEldjQykZpO5Igh8Xka8vaepN2ck5RJRi
+r8ZzNyqNgWFwPAtNVyhsfv5O0nfFmtSF9purzf5+utmzA+/YZUCRIN1+50yDvtqn
+o5o3npkJbVDIM9tc5Aua873qSw6Z+siA/4FEhUs/8LJtB+CXCSEBVgPp6WFGz5lR
+NHxDRJH7VtP5UKqYVpZ5ijnkiQO4deBpvLc3aEr/QBvBsfY8Hh/Dm+hG2XPx26it
+MDCPfg4IzqVN5QyExbe+kmwK5/sCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDRpy3Wj6iJe1SXw
+5sPAFYrmzwgGMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAZs/MWIO5coC8zZrAoJ/vi4NjIqMQKOUDRZjIy3gr+tRU
+Dnxg4jvhh2ytCZinq0nk9zMpQGqb3vKuFd23bRUFdh2MR0U/2oL57XgcqbU5WXOr
+sUa7UtWANOK1ezX0j7HsLxiXurkBDmG/UQiUkO5FS/cMvbWiZIrNByw6DS/VrzaR
+YnCLdnDk9luhC30xw77mLqrxr3gQDCM2tlWqgPQXRWZkiyFVGn5Dm5ZvxDBMGLZe
++RYvSOk/est8BoqEveX9LkZj5S7TwH6qFcgiwSUeSOx/3zXxgUuC2NVyQhBxn19l
+kogOW3M+JSryLX3uZaIzcl2mVKYWOyFmF1sqm60iooAkkjRDKtbPI0Edhj3UTOny
+lnn8Mb4Wm2oHwxYDk3C040a2FPuglIkmmOwaNC5LqaaSerCehn5pQUEHzbWTwrbN
+DrWOURnLEZmcG6nR+wuiryF2dFUBNJ+xexhGP0rrowyWY7tbIHt8N9NrMylkiVJF
+cWJN05b1zJjoXchsktqyu8a2FE93QM4ffhUfycS12wxPwot5bfVhV/lY1/DkAAxT
+0+C1NDf+Is+5Nu1P4nnF/LZ2tNO84kp2QvhiPTJvUrY8s3EBxXyyHWjdzjRjvMIG
+XDVfwIbFJ/h0oxMnxJGH7txaTqctrcA+QdY4exbAcAbxujF1T7T6HBIOfCNUtrA=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID 2AD70EB90962C541A55E2D15B85BFAD286154F0D 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAbFXjbiCUzl5KQAAAAABsTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDg1OVoXDTI1MDEzMDE5MDg1OVowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC0yQUQ3MEVCOTA5NjJDNTQxQTU1RTJEMTVCODVCRkFEMjg2MTU0
+RjBEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuzaGe1Su+WrNfgaX
+oAF44ooRPUwB2aEmCLVq6IZOcLUifzs9MzAo40kRH+JbiULfQMy63CLlAyXxCjT5
+qtm5FN2YjlHHXporUujGIwrajvUKiWi/zCELchvPoRJJBAXcQ0UAKWLTGnf+IOsT
+VqaNT0UQNDCT1i9HD1MplOzIceh2VK4IHo4MQtLHiv0jTGvOfz7Dk1SWPoqNgO27
+TQyCSJZjd2kSCiCXKgOqMwydoh1KuAFSW27sQfjmAFDD2V+01IYshBjsBJDmG7/s
+lD6rBJ8nxC4q1paSC8aR9e3zwKKxf0W3OKeQUKtpWYXRE8qs4em2KSJZ4nm3so7P
+yH3QBe7qpH8vMMaIQYWtARSf1CeJE5ZkNYIQehylXs4tBA5MsCf/JeAhntdLSn8W
+SR8dkzRHGkroifnpviJzxZNJrMZP5FwNpThO8UcPI8QSO5UlnnL0ex8BcjKmqdkk
+0bF8kXm/z8l7NRsyD1CYXqsIyVR/sdQrTtZPzNaaj903VUP0OUu6Xit13Hvbo1ho
+CwZj8uI00tH9ZG+jhmH75hflwWJb+/wblp58iUZz4Z6j36owjWuc/W60+CnXpQjY
+PtqjZMRMV2RyW0hbGTM422Fr3eGzB+FKlscwbbqhfPQsNOBqIeZszEGxifiDfEI2
+iqxan92BsRELr/5YC8h+n1vuansCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOJfc1lZK9SdcHiD
+elGSrEDCM3cgMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEARktesFKL1/xgMzNBri1G2rhsVBK1kkbth0yI64azHzqh
+98BqxalIxYvDJvypmLfapqcKA+aUyh/kfa17myIbab6C1A25WXypuNF8ayclQWLm
+yiDxo9M8bnjf1drmdic4h4Rlpk00fPw+1v+DiDu9qhZPDyyOC6XQs5N1wzowtQeY
+8133H7efF/1jXtoDMstABmSRkSGJxawZa1mUsvhJEpOtl5Zwj64pMT/eT4HwvMfT
+gEpOK/0ef7HkJnFiPA0KUFWqyzFTTxfkDnTFcXaW1AKINLKqi/Fet2Vrb4hc71al
+1K3/OxeoEUtZeyILiTT9RUmSkku/imaSLOTVbmB8QGatMiLmMMX8Ah7uCZ4Zou7c
+zw2Drx3SmB1swke/gOZfiK+2eToTx9Wy48gSind86qsVe7CvWTtgMU9y8X1Ufl9E
+6XLeAp7fPocD76jZ26QD6gVrPmrRG6Z5RqXCGcisHgQKKIG5EedGOInq4ZtsJJ2l
+Bey7dSqQ9zL3yLS0HO6PN22eh6YJlMRuKPGC5/m+Gl2UJGeql/G52jAeRioH07XY
+6XARKyO3OH+x2MHJxONEW6Og8Ycis67OgJ93gp0/2sYQTZYdYuFUtihGSsp2D/pn
+djMd4Xg5AahdlrS4K1pwFck6tXmJHUZHwfxU5bSrtWpAVdMq7JotzFoIfhD++7M=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID 3735DDC8E300B817AEBE03503A92EDDFDF1AC71A 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAbX3dfz6HsQdxQAAAAABtTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkwMloXDTI1MDEzMDE5MDkwMlowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC0zNzM1RERDOEUzMDBCODE3QUVCRTAzNTAzQTkyRURERkRGMUFD
+NzFBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqcAmfLVFmGjvu2dD
+AV2kFuIgMLdKrzgEbDkrzA0SwV2bdoZydjsNN4dvTkFh2dDc+FSxSN4digNIZsY0
+ET1PeQrVqo0QSm7v3fPWb1Cm8IbvuuRvU91mw8ffq3xc8xV0F8laUiz6j4vHECC/
+17ayuwJs+GYYES3I42S7eDXpVIl2A6X0mWKRp7EoSor4fDYn9LCHzumF7Cx5jnFV
+heCH71qODkyk9RGcFRPRPcmusFOkWn/3jfjBZO7wSvTT46HeTOcurpJAm4Zr6meO
+dO9rl9s5ElxTwgdyotZ+Ejjv9xt+v4x0keANTvr33HznsyDGP1dqNCILsQrNPC/h
+1aq5uxFX3npDrJrcBAhwoZmxsIlcSRbxekggFirIMTs+EZ/pWVPPZDhlwe0L9nKM
+Vx3f/uS7Emtuxy9H7LxeomWhkLK8sUo5BuO2Hq2fB6biJ+ILCuAd13KxSCJ30B3P
+kPJileD02Nz3GlvNC3Yb8CSBQhRasn8ya2RaBZ2RaTLeXPk11X2rRcwD2MBOIyoK
+GMLw4Nnp7ImUbKrtoK2o3K8RK8rOAbNs1XskAco6ByGEvVEsDdR02aFKUHSV/nX4
+HdL48VofGPkGgwkf9dbMUkbH9yfVO/JQvvv3asHj77ScU1favpRBKYd5lFGUnYm9
+5XUJMLBL/oZYGk0OmkBiouyvqIcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPiLVnAI8eSo6Mpz
+JPcZKiQzuz4+MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAIc5PXbdKxnaAc4Y+I6B5j2fGGB1aAFxLQRqryJeQldvq
+M5rzxetAn1vPRaZg3OgslpajiedV87R3miwhUqZOWPwOLQOY7VI0CW1AQgDYTFBI
+DrK+Fp/hWU0lgIzEu/lk4Tp8K+HPuJHRyuwJFMGdfR8w7mYIRrszfmMZlgVSY/Ry
+i/pwkSQlp84KiP6FQfzMkDoaDNw456Md748P5JRSn2F5A1UeSHEVRuQT3+vXx5Yu
+5rR0sWogyBZtKT53HP8BatnCt/SwtfUP8INq1PC6z4NT7BzVstdTRdQbRSf8s2/m
+LCdwoJUrElr3NogLIC9hrFa80u0ov0QWvIjuFmaHpFh++GoWyZ9mPp4xTk2R4Ksr
+puxFJu6oA1NLxs6+6f8AigopyBCSvzP5DFXlZBKk5S7sqpHXTlsqMHh99gkOd6lS
+2x3GYJLt0Qf9G7eQnRt3X3irYvg+9PNCv1RnrGHUbpoXS74zklG/AvhQ4/p0HCmc
+6S0cK5ZLCC19TltqkgzbohZjrerQUAfmAcRVCdFLigTKkOjoWUmxLDQiSuqmqtQ8
+ODRDgusmbOCGh3j+GpSEecJE2WI0/JsBEtKbl9GNHlZzrN4AK/jtDLyQQwL4+Oyu
+d/gua3PamUK3aYg/A3kLyukP2UDndiSRsyJscd4EVnZOV48qcMXpDernmwqUJ2o=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID 3FE3E3E0383ECB899118188F4E2B9644DBD39A3C 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAhIHRTLb2n6DyQAAAAACEjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMxMloXDTI1MDIxNDIxNDMxMlowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC0zRkUzRTNFMDM4M0VDQjg5OTExODE4OEY0RTJCOTY0NERCRDM5
+QTNDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAk+Ixzym8EMhYVNKT
+ob59A2Wa7m44r5Fbs/v2Uweopfc/2R6sLG8Vfv24GW/III7unDf+6s6iji8OlL36
+UL6iLzH+6tZt7RJnpZytr+IyR/HrX0XO7RGznhpNBhJyiL5qr98PTRQX4ql9EIAo
+2lg86VYB7AkpvCvew4sz3F4YR9uuD9LBSnPMhmloIixRv5BkUppXRJjyCtaRVIVA
+p9JS7Ts5wtCcST+ca/t+Cg2+IJBfSFCUUKwhMXLx1TqXogSjaug953uPm3OMp7ve
+XD3tvFiqAVozxqx+I/Nk2gnbGtAVpD4wKmAPGTSbzkcaAWOdRHfdUnombQvSPA7Z
+VYPIXS2mxU7esxGkJ6n7OvXVl9HiIka4PbQnDyIXr/dCFkiZdGS+lXo4YDbCcx9z
+PuV/eGUj6lKvSn+c2unkO7KFtbuByrQwp8gLZ6GY5Hhn4QWb4CIneB5eSXKb3mBr
+Bv6+CHVy4ETxMHLYDPuLE1GAoUELDfqbRr8lSg4MSeADl53lf45Q/MmyJZY7Pfs0
+c5hD0piVotTRHFS4HUaLC81L9EqRjQNMjRgJUT9mfj+0/R1esbnKPSv17IfRQXix
+e5z99G+UkV1UO0+Ch5R5f9o8zysoxrW69tvROXaQ7OIwdVVLbhvHE1em3MvRMVUi
+hh/Vg7G6NYdpCfO4daESPatY1JkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDV9fV4eRb1xgejd
+sKa/fh15SqX2MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEALiAchulMI7D2qGDOZGkW45cxdaPAnen0i0EONpNvX1K7
+KoTyDKUqqJHJQN3xDu5tXM2XmNAAKZOifTy0yHdAhCk6ucN8761VqBohv8F5XA3r
+NK8jOjH0XvERBhKcTwSYaq9mnmz3f1NKBAUMvUGdJpfgoNPZQmLRvBYWkXOuBJA7
+XucYXOMwbe9mu9u/tJ9db53ZzetPhSg9sPzBhZQ/ogndchBYGPkiWethwqaniBlY
+XYS8h66fzX1vnGx0u0g2eoaybM7+AfjXaLdY3guB3vuokJu+Lb0cq0ldCoJeKb9P
+fgjM7y0VonzpAVi6Y9HVk16UqDupqeqrNkIDmKYNS6wbsLflnyuNcbaGjLSWjvH+
+SrKFA7Z0H9LjPCtN1zi18HyMOymKKljzMPrk58pILmRW0EzyY66JJqEgj7wX6SOV
+vw/zZ5zNW3YqdulbJQtobKkdIBWKAmXYfit7F4Pb6ntSJdA0ghaKDa75tC6HXGax
+LkKQrbg/gmN7XwEhn69tgMu35I3XnTNNp6eeoAjId60r7n8/O8+uP/vou4SmDnw5
+vOnHPwqof3++CUwt/1Cht1s70jaEYtbhqNXQuE4ZZSnbzd7BZphNJgPQ+evXFbiT
+ptZRiJ5RXzm+/zcHc9oYXb+2bRCKCsW80EI6eVhKJ8FfCzSfpg4e9XqwQWlb0sY=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID 4AC90CEE68D4B5729DE4357D2C475884F409B7A6 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAeLMJMNdSTq4LwAAAAAB4jANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAyMVoXDTI1MDIwNjIxMzAyMVowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC00QUM5MENFRTY4RDRCNTcyOURFNDM1N0QyQzQ3NTg4NEY0MDlC
+N0E2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA8o7p/92sE6L5Re0Y
+GwY6hQHQX0oVURSBD0/EpPien8iNZAxx1Q+3NEcMJXW8t6+tBvuPFx3T7ybjTx7v
+5zEJwK0H9tYSLvms7I0zAs0rFSq7W2EoplZS3+UFAKMA2Wyx6LXxyqeebqOM7G3z
+/BaxibvPLW3ZCDFTYSUUHCZpiRIOOhNq9wwwGUZvs6tC6x+H18Od7TaWhfN49IWx
+MXzwlnEggORxTKs6Cv4Mu3C8HY6x8vHJieJwfh2AfOL3KQyVs1pWq4oY68o6vph1
+V2lqKn0jECB/54QKYJ86mDzqWlxNJvOi/d3aANX82pPNVEl/4FUtyTunwXi+GSU/
+kEOGeBuly50PPkD9FwCm/Xtjx78H0sfWzDcg6LQChezukE0t4zwIQ1e6W+hzUOhp
+4Vd6ibcvUUqimQWO269IzSzmGHbdQfEJKuUU1+SKvC32r9mPUvDP+w60X6LmvvKH
+mft6bJScWWGObzNE9VgIOjHsYh+Ix0urNzOR0zxSVDfIgJAHVghDR+hbk/JVH4Si
+6kicbDKXvSrSlMzNv9OoFzjUbaEdfLct/9Vys1T1m4jOghM4b28pLkDsKd1DDCTt
+3F9UwKlQxZZTjWqFT9rG7Xe8ztgygn71W/8jWADGRxLMkv8xx0TDUpj+sjIrpGYA
+xzsy9Z4ZI4qOtolBW0sx+A8r3AkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLWrHXnQ1+TO9hyf
+MtUD6gbWONdFMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAVfKB0ujmse1pDjbDgY0Htl0bxQeIpdvJcL702BnJ8hSX
+QgxJps+OktSxSQi26kd9+ZNvOeEioBgGCZcColDpkHH1FcY0zj0x8A2M58+b9YVl
+BjK3eEsqB6CDdTt8D94eoaVMvrRqTNTVjslZbZP239URqGI6HGzA7+i8Wf8EnjJo
+IX9TEdc0sjAhmANccDWgy0iphzH3i6yJYfBraUMD62jV4yxNa/dnlrDWdvt547Jq
+CMcZ8A/eLXcDeDftd7Km41gmNaYm9XOW1l/neTNAcrpssB7URFNo87ndmWAUlSMt
+qDMq/9J3SOytNRohS14q08uy/Nmt0oSb+RSA3TsIBvisxHYJPCymil6hHw89BQ3C
+ppqWTDdnpEt2hYsUf+hNvCIodO0NxarX1Xh+BHy84d+dr+9P6ZctRUlA1wnkQ5ab
+ldhlos0BAWwmAbZod/poeYVIaBTauU/XYPJuS+S7YEH4r95GPB35VK3A0mwB4CNl
+RSqTX85AqDdds1nfQkhy0wdQwGWTFf0vbYnnxtkyV1NaepMRL5XUkxksRr/AF9hq
+Jpbq0We9TRGwqcj9EkiLHW7wQ8ei29Dj5QDIAx3d/5tGb5DGJ1w1L9Tm/tIS+ZKa
+j7vl/eid/aESG+uTsIxhb63ZE85jS6lg+f39bMcLVBQvQQ4hgO3Ps+Y0wxV01xI=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID 6DED70AB841AE9C22A03647FC8D1482188D3DAE3 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAbJopnOuDqQd0QAAAAABsjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkwMFoXDTI1MDEzMDE5MDkwMFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC02REVENzBBQjg0MUFFOUMyMkEwMzY0N0ZDOEQxNDgyMTg4RDNE
+QUUzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4GFTrjd+XXVDjAZG
+EGZ4/xMdMr7/diubUilkrfAKZlNX2YwZOTLHUkh9NlxttdRI/PJPzjeTtJQDEf8b
+svJ4s902QM+Lt9mmrN3KHudCi9SEVG71XpzZf8ROUsOzZSdaTw7Js9ef480Z6kQP
+YLzjrV1l+20xcs5/hioQMbQtweUXo+UNOAw4l1zGa3Lq23JyscgWm93B422vz2DN
+K/tVDyhdHmsruIGPERtfabDorggrL8f5MGGCcoi3BULhUUxicIvG++VvwVV/QrF4
+kEYEKljGykzeB/j5Bmoxq2ueUH3w46DLXSIwbRrnxmlyCSggWhWgpv/f+sDifFv2
+yOVc4xWOWTxZ60irhOHAoSvA45a3DYe6d5g1gx2WnLraJmcL1Qw++vSDff/d2ItL
+cLbtgfxnjxSLEmZghB9YFHxBGlYBtKh1xmSxAGq0lu+4MQ5T5Gj2rSaW7mYB6pUw
+63NbG9trIgXKOEVdsAC2oTFJKjlHMwwK4fnhzYb/EI5X8N0qEMUtYuRTvulIxoI2
+0j3D4B1c+K+6aInriknM82/xnhSKfYM88EMlK4UAVK5vFMBEbjY3Plo+jSAqIcdp
+8WupX2yuhUvzWdhXNSHwGhCFvGrwXGK8Mk/9DjwKK2cYJzirgD+e/zdohMShyolU
+G0DjH+r8eMGrp6B53FH8u4RHed8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNTMYqdLpbLcNFbq
+3g48fOGf5HR4MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAiNqGEUPr/d/BthJymLArvn6wETqh7LejR9sts+7SGmhm
+g1W6n84RFUMKMwUrn64nCXnmbuVR65Or8xi7ttyj1PEM+/FJ1UV5M27SBIUZiZ2I
+4S5zj6zU/NNdav10WWCS5LzcGAhx4V8bjsLU/FeyJUxlb71llo63jsKhm9FOUov9
+C5jgHPGlFCKTVUYuvWc7VmOfsd8tKFbxFLzvq9YbzUdkO4giJcEyp+X2eQ6dNcxM
+sE8Af1zTYtvHSoGmvNkMJKRaYa903wc1Ffw/cWeeFotxoi+EkklYces0mRcxoHF5
+FJpef+j/U69qtzpcvnIqD6Iv0Y69rxKwkBfAztybupk6KKfU7eUPnj2u5TCkQqY4
+EwAiK1PzKXOR78ow28vdq07cZHGg6zEQB6RZ6QGBP7i97XY114UzBnfxGIabhUZK
+oC87iJxOq4D61sZazKZW6o3ydzp2WN3/VvzsSj4KVn6G7WqeocuSJugqeqLQvnNb
++mOBUBfd7ym7jAwSDC0vNjp7bTSCBKKo2Hd5xa6LGEeav99J1bmoqR0z00eeJTm8
+Lb2QozKRAJ9MpYz9YEIF51IIctONREJVCIMSyUB4vRaJOqiSAzRrFLUyW6nktMTD
+muxWa0E+nPTldeYpTLB5Vgk1R4twp2F1g/9Da1UbifP0wzJizs/U8YdUQTU/5kE=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID 73ABB81A0225456337F02B25BD39E658B90F00FF 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAhbdbTd45TewqQAAAAACFjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMxNVoXDTI1MDIxNDIxNDMxNVowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC03M0FCQjgxQTAyMjU0NTYzMzdGMDJCMjVCRDM5RTY1OEI5MEYw
+MEZGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4W8OcyWSdzaeZiMj
+jY1H6RAVp9h04W/WL3KvITEPVUGkVdEovykzVgDRfZKwCiZvNV6/+9+C7tjaZGMG
+90Pp2MxypyvKW3dAJQJYXbX8/dzlhejDSnQCNjwck8ksZQyUW2p7auvJ+wDP4jhR
+smk8oON0DZUl71uiO3YJVBbwYGuL8sEA4aES1xs+oakj+6tAbrhZvhJQlJwOdI73
+HdcRHxIHGywbWnoxzSWY4gRn1QCNvz7J1qdQz3HvzGKEsH7/hauN2acnhaIieB1W
+5FxCxM3tthRgzen+iYoXL8AuNf6aWuvs8LpAlVaWqjWYgpiKJlNWqSrxc/svg/Qa
+8aM49CQyg7YrO/x/tOPYik5/9gNqfMqrtwMxuR4vss6S+NktlkSrATdydgwh06ma
+Lq8lX08bYMRUwODXhYDSS/rLx+avA2jBi5qIDw43NilLJDAkex7Mrk2dSRqqFGIN
+Bv6cerUpESWbJggMp/t44o811Iwm8NY7vC3oNPq7Pg7OM02HcsBjRmlWWvlbDnbb
+4fiVareUcg5a4MMiRrj+VcFrobPRWjUBCaOa8+wx/AsqRUxgQISnjsi1EE5LQzQ9
+M4SvppuUhf5qGt3tyfRhxJ5S7AnKfD0pmtOJe7OzxSYJYyxMKO7OE1AIsB14EDAR
+HwPAFlpCqn+mrQG3iQWMmt0Sa2MCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLVuhljNo5X7sxVf
+tjoYuVTkZVMeMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAc6CvPKN6EEx5HAmQ7kq2ERyRdDZDWxXSnYpf8kkSwUnZ
+zjNoKYdxhv+PrK9X2PjX9b/up+jg4DYjlpP5j4dOUIV1wlxssbzK+WPwweNgZ/Pg
+IOXyQGgWyfmgGivm3+6Sm9zp+EgiSgrzilTx1n4PJqR9Z2d2ngTIEMZ/DPLb6tbf
++ipCDAs0DtrdUpmgNo9nTG6PuQiN3LMsbkvcu4ceRYdmSNz4P4qVMV1GiwPHpwnF
+64fOgHsCAEhqgaTuHkfBLEGBWIaEQyibrFvB4guDRT3hzPdMrMtqan4hA31f2CA5
+uFjYwUom9sQFg6xGP5ZJKxpzEDo4XZskBdFPtUC9Xn2TO8P/gkxA1/RmUCULKvqF
+b1Et98/cM6Nbs3B37Czd7HTo072R6An9Tylmv195rxxsSkWq/71TM7Bj48WwygBD
+cDOF4iuM9f8e4SpFebX9Ps1k7xXBsldEqpQ2Kq5q5EdwNt7oQBP4AgjZXNMYBLK8
+25+HHsR0iHgU6VPwbLB9rjqHEyEJnK4DDf8QSm71FIUCYgKkOnI5535waI8N+XC6
+nRr1srMWrarjx0r7CuuAgMYRSVPRpl06mNupvQ6jPjV70RhbKnEFapRjdhUKnYHy
+pMo8tqzL4hdoc2358kGssBjLjF/BWOSVPWNjAb+GROqDoeSUfeqGrYghM6VyoFw=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID 8E1F3B1E129D4ADED7631F5B4A2B75828AF28128 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAeS1aH/+dYpZzwAAAAAB5DANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAyMloXDTI1MDIwNjIxMzAyMlowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC04RTFGM0IxRTEyOUQ0QURFRDc2MzFGNUI0QTJCNzU4MjhBRjI4
+MTI4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAr8IlW/VPTym+H3FT
+Fk4Z8ENQJAvRuS9emdA25Ahy9ROc+mii/Yfw4fDWc0c6wbGuUy+QELf6q8k+t6uR
+2D9Cr8ZXKuXmZzt8ziG/GtUtxT6idjA1DEY8UCgk706DnL+YivWYnwqMMYEWEgip
+jmMWk5S3R/mWZ5RVptkaxeywgWcYme009Xzf0XkyZWHwxf7DHNXmDKP3o5E2H++A
+zIJC5Kfhxo/H5YqbdSMvfNWrbu3kaTKOiW3yZqK2jo34IuOvNezGCZ4/JWenc3fT
+FOnoZnTHQd7OiQ2031K5RBl2gQgLij89mnGSOpiYZLEx/ELOtsO6yNKJOuqyVAZW
+b4JFN3X5n4HqdpcWVcWNyRpjFEhPtcLoopTNHm4H5ExEYIUw9oQA/musV/6YtYmY
+sb83soIjtzjYpFDzrncKkyCRdZTdqXVcuZFFi6qolHPzfFo9RWU1SI8Im2/T3HpA
+/6OmZV4ZWhjgAXoAO/KRdRrssrcxvnIpuYwvjY76xzb2lKbFttsr0Pvp1UriH+Yk
+vB9x2HnyuA9es17x86OnkFwHx7Q+TYRvIYOotDtqLAQazcyaVxCjCFXMUuCaUcQ6
+PW5JFXJ7hZOIX2U0zdEwKFly2w/fAzVXi88pSauGJ5vcTHyY5j9HiH2Jb+ZWmeMN
+2CUq9PfBHLYNGbEZ9quWnoJopXkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCWxwNyAjjAHd/gF
+fpUJigpj0kwHMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAMS2CPRpGkUVp+rMwCRwOPcm7ytLismnR+z+Mb2jv5vCS
+AL1zeiSYFKJ0Nq9L5Glo8jvxrEE9RRTnK2C11Dl9RQ3i1sRoqS95TAe4VuKsB0+m
+S8VTV1bCIKzmINAbFly69rpT1vu7ihhqzFnttnmtktMo+w0bZVUtQ5eEh1hjut70
+uYbVTMZ2G1sQZEYQA3oVQzjwCuOTKgJFAVs8tV/LSYgjDG2RBoNdxeH5mtLZ4QZ3
+TQp2+7ONihfSQ/1N0lvWPBbCdSOtw4C3xV2cEXcSrJKKXaVDqYdDJZN7JjygGFpU
+Nzb8PZWrA85G+fTDf0P+kUTMU74XAOAf872IFzVpobugB1yX/0vOJjtyh1gmvquf
+hzUVdKuRIULB4OSfu+6EJsd3TrkKOUMiDBD0b0bSZ4J2qQ3qdSxbp9ClHz8cprl+
+D9II394tme6wRnjanR6mrWQbUv0di/pcOkuX1yhNTzOiSwTRQrY85vSCye7Rc4DS
+6S0kt21Tcvhzy82T91EWfhOnkzQAmskk1yBUnKAKYKziuksswgv3x95W5mfvMMg0
+a85ZTjMkUMe5ipdgZAJcBcIbXYkmXXNENerGitEQVmra6zROI/E8VcxOtiAi8eEP
+cHxPNcwgxBCzvMXgN7maog2aRtuiqNqekXoPJSjeuEe/DSeLR97JYLoMcRLmUao=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID 9532153BAA9D74482D275B1A3E475309D3CFE507 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAhzIHHQPc/zxxgAAAAACHDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMyMFoXDTI1MDIxNDIxNDMyMFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC05NTMyMTUzQkFBOUQ3NDQ4MkQyNzVCMUEzRTQ3NTMwOUQzQ0ZF
+NTA3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwZqwNx7IPA/c9AtH
+iTgATiXO74DsBuXGk1T0p/ZEkxVqGk5iVZF1BsMl/yQ9jG9lqeNeHCb4EUCkHXyv
+csCug0HzjrBReVCmvepg0kbNvHO1GpXeHafCNMaVrUyUJyGupyQ9AUzCPBkWW9Ty
+68bFsBq3FCtk8MSa7g9mV/M/XRWa54nXrJwsTCzrRs1Doa7S1E+nnDBa5CmRsFef
+yKU6PX7kvOLdOs1Pn31AlhRL/QBgNxGkVP5YFneqOiWvmckU0AXA0xBinmH6HRfZ
+nSZDiMKz3PEazF5qZtQ8N6PIe2E41FwpwOxfdomYWkIQwLWWs7N5alycMiK3oFb/
+dg9apFIckiFDDrsUa5z6NfsAvF6gyffZMwxS+ORYaJWUrvxJ2MG34fWAX2BpFafA
+L/NVdxSA53rCdIhVDBsChgU/+PDddqyW8T3Ina9XY9IN9WbSsRRFUvoBan0G83CZ
+Kh/IuIiQGf2kdpHksCnp3+q6A5pnpGbuhoCdy2VVUtyK1Ry6aug0cHfhiZWSZy2j
+5QyYT9Z8oz+Yfbouc/Eu8tRsv0wTTcYi13A3/0TF1qTi+/AaaY9zwaZUheZ/kENb
+d2ta7lxXyZ5ytfPAnqYQwRxc7+UN2U8+oWF4w4M9PrlrQEw5dmDM2VCFUwRxGx7I
+o/UomWy5MVWkULL/6wE/OrW7aNUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAjmUmd4HIVvQqIn
+7oO0q2c8AM2GMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAe9/V77pzXrVIwJYrQkIfDemcIoKp0xSdenHLal0O8ynV
+h27GaaFay8Xwsfpeoq9ZdS5gdVm5JY2S9eIGyge++tArrf4nYf/vzcfof3pRG5kz
+FGgXMJ/6NgzpDF0qGeBJjkSEudXr5trZdBRqjmK1MHkk8N92KYyIqEtW/87znjDN
+7lZ9gHfEAb/gg0gBss6Zx30tan7QbgcamYpJg1AIu1GcMVFx0/bgtR+itI3vm42f
+n4WGIl9wt03kD4nbmYTUrI6stgKoScf1SChGSUV/xh83l5Knc1YRh2h5pYcO/amn
+Mk49mQRd54b8fM3GyXiovj+WxGmbIyzMSSENtqMY2PDMXmVWoKWFgM+nS5qzcejy
+HIWblK+GzWfIDVwp0jHex2FADDHsCMkiX1SpIirdPhSpZanV0djVTvizqx50biwM
+5rZoDb7xdzlqXy3rJ9xKmRJz35zgksJMb41NikkJJHEGyFzExayMJ5Usw/fT2OfC
+FYYkwWjFvsIzTNNOjmSF4QzTQQ+B6dSG5y9U5nJWqcAZkq/oF3mbsvS2YrpcZGX/
+aZdbpXdd4zUPxV6d00EgPe5cDf7pL3UYUoFuksNDUbD3U2YZtWvrBdwrW8hGPcxQ
+t7QQ0djgZzFkisDA1bFQ1o3kU9RrRD3gtGmiBui89NbepucThnwYQlbnvx2HM0k=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID 97E5D1CD8B0497C04B4655A869C8F30EFA89388D 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAmEzYHlRZupoHgAAAAACYTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjk0OVoXDTI1MDMyMTIwMjk0OVowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC05N0U1RDFDRDhCMDQ5N0MwNEI0NjU1QTg2OUM4RjMwRUZBODkz
+ODhEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAml1LspKnlhOAnmqX
++45iTA9V3XDinetqRLCtYhSJL3zmSYDPLAVf8Uz0q8e9pqyLignG8fW09LP5Yb34
+gHxgd/+cYLsRmJnlffK0CnU2VsWvRZQVBsltsfxLzOaLjg73U0CAyA7HSig9pMQU
+n4mD4cZGSMaZOAnWwEzYlKHROsnNzK2jrO9ml7TRvN1Z8Nb27D43Nv0TouMPjxKe
+E1zLHNLyE5Ylw8onNWc4z4PH/PwaiomkDOoRvOWTi9bKMbpStF0apyV8Jb/+kJU+
+rSHacpdVTUXwFEjeotDUYgsf/iXMUQ3v3ObiioQjpmEA5PZOoVqI5PFZdotY3nT4
+YI5KVYXV11iZcJMirYczGJMPfpB7cJuVNWo/LQxB4OgN0TP0OhackB+tl/dqOzKt
+UFdgRdW7OQ6C52SjJ+kNI+6KFixHxkKpj/cbMlqWXbLBU4O/+fvITPpScZWgRT1h
+bBtwMmg6Fi/ADAEyTeiGRkxsHRiYx3k+ldVRj4vZTw1lw4pdcqMum6Fa54Bh/5DS
+i1zEM0Q5HavPluQs9jyDBEX/2zMjG3QIf6Nr/sN8hOHTe/dSUHkoPOI4Qrs01wwk
+uPS9kixEwIrIOMXRT0O7LvBzuXk3UkdGrHcS1N1BE8fCCsURLcTJoxH1zoBQ53Bq
+xUw4RYjox9x8/Ahs9XrncIQgFfkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFsXalQTDjBC1Dfg
+gcG2Nc+N6ZhBMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAG6G/CFhaKFmW0h7ngvlzhcYdXqAGXkCUfWDY0yZ42cdN
+PtJmuxriWsqdMEjCGYNglnjW0p5Or/jrQcqT7HVLW9t523xlcpkc/1lUE+J0c42Q
+MYNZgtMfPwPSSup89R/9b7ML4roNBAht/1PDgU4fe9sT4gkwuvErqd7oIXyPxCkN
+LxvGyjNc7pglmdxbqIFwA3CC6Lx9hJOaPR6xVl53VzaJNFanf/tV6eIlYUPSdIMe
+Czo92BHwhVBWqkl4MKwBMwSTsLVMKY/15EISZxWnA6iD86OR4c936l+X1uHTNBmd
+r+rq2zD5QkD860NM6QRpk/46zHznBVug/E3OzOJ2OHxa7bF4m5KGyKOI/PvG0+nV
+Zzg9QeCbp/lUa0cIXvnhdBzMgs7C1f8E8Lq1HUi1LLwYPqsEhU1H/TowCHLh5H6o
+54bZG+XVu4uCViBPM0s929cPYrNxO2kH7j8fPOlMI9usQxhqDbQtWEAT7vuIMjO6
+vJnjSS4dTNZ9PHY6IbYAXQ27VkBQ047Uyp5g5yKXRPC8WR/5Ag2hnxpPHhepmxWL
+DreYUdnz50XgHj5nIBcXyzG2UMuBpiYZAiONRNIR65xQS0gfXlfgdUu4dE3mN5/N
+Wj2EQqDZ9nRWTwKDjqysum4znM1Gxpat0057Ug5BQov2F4wiAEAvHcEDt8Of2HE=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID 9A643BC48007E0824798430036B658419B70C077
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAVvwBylrlMCGKwAAAAABWzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDgxMTIwMjUyNloXDTI5MTIzMTIwMjUyNlowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC05QTY0M0JDNDgwMDdFMDgyNDc5ODQzMDAzNkI2NTg0MTlCNzBD
+MDc3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvZKTvPfvu0ULoCAd
+5cxEBTFdggx1J+qv1QgEGAD22wR9J7+DjjvpMvCYnbt/r1Ak5sWZVNg+1preL5Qt
+AULc/DsZ4w3CUPm6KqbOfbkhgVszgtGnQCadLOEQ3GrbN2vFDyYY0dVW0do/UJCO
+ObwJgK/5jmHt9sXlsEp7wsGl+8GJnd7T2kH8p98we6gg9WdNwDEd0DXMQWrEtkBR
+lDn9NHZUHnk2+NQo7zkmJBQ1rYoz8L/fRLsvmn/IpEmPAkG7eR0hoUkvCPV+431f
+3Bx4h6pec2Em9y+YGCY385YePY0HYfMQEvSvmvNC+tleVzCWd7/3bvxe15pG1Grt
+i1RjsQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQU8fXM4XLtEjNa6EijImtvgpL/keAwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCF3/Lp
+p3lwKJr+HboD2UC92+O6QHQlZ0iLFnSKPAXWsnKD+ug6TolimOSIbPJMG6fVY52p
+ukkzeJ5/RrjL4ZNXJxY23Jq8R5i7uftH/mt+OhhAoeufLl1i8duYakL+X/jWgfvN
+0XDXmX8mMfJGkBbuNUugFV6vz8dwQuW+o1PZNqliakozsy7OjcqK1wM05Q44GSkN
+D0DxvIbMMnZmf1ZgKJ6rpI4tqvfip4fe2UmikQAwmeNMCFoJi7uoWk2KsJppKPrb
+273Z6YZZlpkDWmBjvqkJ32E1ATDCGHiKnqxsR9PY8ZAg6NlmdhzE4xy/SNj7yumR
+3mtnHxnsveKShlJAcJ3dqVAp7rNOrxgDa9wVgjvTE8IbkM+IZT/PpO+f9RUY+ROo
+t719QbzLgKEa51DuF8HWzbASmb9vg2swrlavzC9f5EX5V2OjBpBp1VbJgOZhqkMl
+GBY7qbDzKGGsLi2GlI3NDyGeeTQqcTwJwHo5Os/stg+Ih2h//PtO8fwn8o6Eccyj
+3/Rh+3UKjRPCLM3PAAiQT79rXx/dWwVILh/vCQtYTC6cHzxUJJgjxA69vsEAXxAR
+mcuLihKb9kQREWpd5yWwyQF3gi0vDCz3qqCygBBgQs+2dJfUMhpi3uqaSgNgsyz7
+KKxAB7Mb/3a8vVy+fmRu3gEROrTu3vlMCmKWcw==
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID 9A643BC48007E0824798430036B658419B70C077 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAhUHMuG/tQqfjwAAAAACFTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMxNVoXDTI1MDIxNDIxNDMxNVowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC05QTY0M0JDNDgwMDdFMDgyNDc5ODQzMDAzNkI2NTg0MTlCNzBD
+MDc3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwEGIMJHe2tEPF8K5
+bLKr2SWyIgmKjXp5TJXqQrBb6z5fvndfst0mjOVMG/bHobL4WIJa8CAA3xDBW8i0
+vY4+j3qr0DnM8/F80KloCfhYW3y6h6pW7GGKAdYUsVvh31JkPQsQ2DZMs83JsTt2
+hdnhbmNlCqw8WT10w+B9NfOGolOivSnxSN1uAZ+aMD17cQ4ZHA4MmWsrAv6Zv1ZB
+AIBktHw48hND7JdOtCxM7bDGQLZpqZC+wE9BCbtdZ8TxpDHtKdIBXM+yzcYzbBC1
+rvgWXTaSDFEV3i3GrFMyGch76Ntc6DkH7QrxIWgQibgiu/bYphuxiQVQWymyxrXH
+rnLcCCOVRvND+MSL9Y5l24c+Hg62xM0HnyuLeh2/L1btib+5dgmFUYse3NcMxqcL
+0OxtMkE0tcazR6ckG57ETgfTySe1rfs2KkAMzukwCRT2wGDC+40RL19R+ABeYgVy
+MRJMmOSjKefACAAd1nS0LT5Z0Sna1fVFS232f6xrZlOfvDYztZYcPAn/q68rQgSo
+DI8Sbx6QYKqCDJNkuS2I7pQJ4T0tx1TmjK+/3gifSzs3OpNyqdIvIa/qfYyZeKel
+G5CdJ3q2PLK4KfJV80hPEwbH7rN4uXJWXUkKQWZA3AVq8kMMsZB+zBd3MQ+0OcPj
+LpChz4b8tQg+QfYKQGaaj+K0MOkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEEqEpk/Nqmh1dXC
+y3xLx+10+VpRMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAMkZaYcpU3iIaq/brsm0NuQ/8vDW3Lx0xIYLQKjLsPCFP
+RJwS8eCBQKUiDk+J4ZUxp+Jo1M5ZWIDz7NQ309gTXTO3TdbLUls+4bDxMSZC32pJ
+6HFQjKp3C0790H48xGpmrRntO1LLTT9tZonkcp5oOS6JASn4xy2ELdMAHPEzm+ZI
+5cl+hx9rXxM+tLg+n4M4KjUywSv0k9eYcZwW/RtCK2LbUIWDqUyT5hYlSsYhohEd
+2y3RHOS6xJsl2XFjr1catNGS7xo0MIrmpCH4/gH1OE4BxFSSPGpd+QawjrCsLbxx
+mGv5xdeDgaPQ/M3BlStbyegWQoEeIM6IfroDI6Oh6OZ5/Ejfhj5WupqwGHjpAyBF
+s0xgNgAHhkK1nwd69LPCiZoytyY6AMg3eYlz55fbMJDrsZjOiQ5wZRLEg4lNRq9Q
+73CC0rOmj2HzfltFXLS5aaeW5I4UPHCComw0RffVb4CemNUn0BZUX6lGuCSTz+G6
+xzuXxE18ZfvzWUbaW8F65hP6R1ZzDvBJNKiAxFSkiJIffTbF2W3Tjnbb+whLjBcv
+pdydPvi6mtHqUIDqE/5WdPe00AtthV8hTb+63RjyL1QfdfQcHYzLlNJOp7IAshLf
+2RhX80P8VGgnNvpBb+BIRjbIDmRyrNVZQFjflE8fOtBFx6aN80id5O2P6feUp/M=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID A4384BEE3966533539CD0A736D1DD2C213538DBE 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAbhG8SH5lEOeigAAAAABuDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkwNFoXDTI1MDEzMDE5MDkwNFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC1BNDM4NEJFRTM5NjY1MzM1MzlDRDBBNzM2RDFERDJDMjEzNTM4
+REJFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsgRKeHAhAXsYF/SO
+wDxam4JMH+sxnhVU7ZvlS/+RMv/bfYXJBMv7PZ+EvK5vdv3pDBgtauiY9h6NVchJ
+6IJwXwEnsWOv7aAMAUlLH0DqwTcUDH3y/bDsPgPyTn6ET/mUVqvi2VR33f4LzNNB
+Xl0DpPxJNdBAQuAwtfWczS9DFSJpj4yCgvvibAlkEMuNbftsPNiBHYOBoh6pHSMp
+bkjskygrB91ke+tZXnWcUgWtlpncPt7cIxn8NGN70mbWttZce+Jqg/eQ9xFGHP5l
+NCJRTvul5eHlQmVs7JA0dRW8s5sWH3IVGq1q393AwytAcoKfsZTKEs46A4m859Ks
+IN4fY0twM2lUp7pMCzldhihlYRc5qMlD2QUVvSXkPeGhf6UgLr/PLnqfZ9XhFnT5
+1huV2w0oz333MT41JLHQl4bmeEOPdv1+aM4wUYQCmaZrUbv1/WgcWW8A7S6NmBeA
+7pl4FlpRetSk2Qo8oAPP/NY9UXk4skvkgSVABnG05nsrevg/BmI/hlDtBSw5++xs
+1BboFvZ7QohBHdTndLNt2z83ATadqtSv3Ta6kXl5uXp/QFCdnrj3mi7Gz0W28xiY
+FTyfb9lwkH4/7BjBxnAVWp2sLp7LWafo68trfGFjxmfNEl7prWm7QWPK9YhdfiyI
+yYSfcf+oVlchwLUbLqtYV+WFJA8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOp84Xt5b9ylb91S
+JV60gaKBNtgiMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAj1zipxQFij7kmeUnyZS8F6pWr3DqIIM4qMOlFg8EOzrv
+i7slkxAdUe41M2vE2+L9egU0Ud6uqn60e5buPDRj8lYdIH8lEh5ke9JzXgc7yODF
+mNfNU9JZZWFzZVUdjK7SAywzCxEdngwUx+/J9tb0EL8jTBv03n8JxHT+wWK28QcS
+ogvtZW1p3Gh+cE8SM+RGDf7q2xZKxSNxf+UX0Cx3XxG4JebuzBx44SCaUG0xfNPF
+uFQ5RZSnQZGC3EL/QWZyCbl1jSGb6MXyQsTcGkmXzhO93pqO4G0qhp7oiDgqD7OD
+/bbFPBtOjoGlLXqxK6kP57P5ieTu8xKqkS/oRTxPldndKDoSeW0DPMVxouz7V4hJ
+z4feOfW6mvWyfVxsW9676v0GqZ4m8s+rqJTQd8YgDebqxt1cFnNfrxLG3aRuHepr
+WIRvE3Nj2O+/bKZsf3MZ/eDS6u8hUGWWnarwoLvoxbGjAEyndsjLikjBwjGpQtNJ
+1DXzajRODRXVn+77qMXWvXbUzckSq3PlTb2h0QuvrN0kLN4ZI9qykvtEEphb1MoE
+1n7wMIHOVR+4LgfE23BS2pSSs9rPywMzZvmsogcygCPba2EbLqAKn+9Inz5SoLm7
+KEVKnV43jIsHtjUTBF7UUknLxJRjq4rqUhXK1ZeH2FzsBf0KTdMBmEcfbkdJqJk=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID A4D18726364EA2E3B278464CDC7FAD968E015D4B 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAbfmoZNUb7mAnwAAAAABtzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkwM1oXDTI1MDEzMDE5MDkwM1owQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC1BNEQxODcyNjM2NEVBMkUzQjI3ODQ2NENEQzdGQUQ5NjhFMDE1
+RDRCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtjb+TdYaTIWtcMbO
+17KuOMZ30CJz5Y2eNHGHZlD4gq1TjRikF62dW2dBWOseWoVfBDgO9RiUqMzd43aX
+bp3o35DP2FGqFGjU5LZJInasMUrQK5lkm4phjk6oSF3c0LGIHugiOWoYoXFISm3o
+qbWZiiG66snWKUi8jVNwSmwVGM79AgfegvVbc1QFpKEQdwofPjzQInyDazOtbq+7
+0+OOzU2I62nEdTATUKSbZGUqtBdiZU2rtwVBUb0r4K6yOtpIVUchlo41vIits82j
+mBhXEYZoF8UTQ3f7PYOu+5WlNOF6/u3eHwwvdvSpczqLh+ioWtCzrWLEh/94S0cI
+bT0Y6XUzTGR4IQy0Svf2eoSE27UzHn6BG1S6MlFMO2Sl80kqgA7GDmJVG7B0VfAG
+KG8nWwNTLN2jEt3KJac0QpQmdjGAvx3uI4cB5SAPSDSnhSUfd/Ee7zD7s71J++c5
+YmzxRHRdiE9ppqeA2qHSy7laQRmG8ELYhRBNTjn+MTNkYwRS14rjISoH9sw6PNvP
+H50c/wNIDK8u7W00UVTHUWN2Kf3oQPkQvkE3dg1THeEwnTr0ez5fGGnCZUaX6PY8
+PncJRMQiQdH3bh/HCuKE4maStpjHwy0pem9dc0m7fRMkeRT3irvLWjafe/uP1FLM
+/mMby9LpY8M5hi3q30AN8pMW5dUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPl1Oxfb2rNfgIg2
+Xa0Mgx8KzT14MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAGG7roj3mv9KlllYs+zvGSYmjxFalqB7O6QfKxJDOBEF7
+ndjkdjajX4Xo1xPNwobMUwnE+1Daaf4MoTsKwgMg/ht3nMXWBL2qpBv1CtGRlPXE
+wcoB9O88ufkUKi5u5BCwrQlKXToVCeHimBOLsr+ktnWvnCY2lKm+LfsgzzbW8Xku
+ecK0KPTznci7XHMrnYrFqfCleMGeiUqKnx3CTKygZelQa5fTj+weB1yHIHyifD15
+V0TxpZz7mZpBvQoZmMmA1YMsZRLJ5kXQiy+q0xykDm4Nb/e+HkU35Pu6ZLR5lwAc
+cpy8GdvTloQ9UNY2ey/OQWisPnHl6P9rc/KnNIwcEkHoUHsjXDD2yMdc9Jb6oQ+J
+wFMv2d7nX0v9sx2CPIazB3v57rjIdB4WyuTNxOXcXGkf/9fD9rQg95ru9HxuYPvP
+HvKlMgOBKChNNmhojjjGY2WJ0+EfoM5UdukYASR8RUv2WpXOnNNVPxfspi26z8Sl
+UZ+TFg7X2vyc1GK4OafAtuvcO8lZZtFdxxXBjFMCN977X8UsHLl062tlCf17KygP
+jIL636pm+fxr6CdiEH0jgxTYmCXoXoVB7PrzXa3hQaoLEGBcDKFsCYhnfFi2Spn5
+kkbCI8LdsosEsOVin7WDIdtUxBSW30ezikkz+/D/WQemhjRdL9ysNCxUnot+3Hc=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID B02981157B6D7CC3210016380B898950524350E6 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAbprjOwG43pYeQAAAAABujANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkwNloXDTI1MDEzMDE5MDkwNlowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC1CMDI5ODExNTdCNkQ3Q0MzMjEwMDE2MzgwQjg5ODk1MDUyNDM1
+MEU2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwqaeUAppMAnryxZO
+DlJhqo4fyLuVpifQESv3wUqm7jN/IEjQxoB1Uf9rUci/leAAgMI5oD3qc2MIfe3/
+RtaDKWOftpVt/eqEWf5lYRX2MJV0So+Gxn+PpTk4IasNi8lAp8v9A9CDxQGyoN+f
+0426kC25k9ur5ZHCYXQDDAB20ZbOjH4gq2M9w1HDaQYtw5u6iqY9rEEZD+e4gynE
+acGC65VDsKVQYVVnWjOUOxhy8dLDz72hTzI/+aI/axpYTYWjjfpDcC+RbQw3HOPm
+menvsHJj4GpOjjDoZEmTs4PcH2kJHPePQBRxvQfh/LlPjndmPCznNdaGwvDsvn/k
+iyQHhtghK22eUri52G5ZpRMduLQpmbvrRj/DWvx+aoC68HhWysECQcdp9FMd5r2w
+/ve/LGpBa+t7/h6110aZXwLM5jc4AvF9Vo6CjG4heZsQFScLwi+FWfNwXWBa4hEX
+pFGwiSSgxCUW7t3oM9ViWiEljR/K6AZZiBX47tQewQe3bNHlkGNLi5Mpgp3RNJ0k
+tfy0ilvXU6Oy9UQBrftoP4N25OBcFFnppHjo/vkcEUvpXkGAcpm6J5NOsEdChTpU
+frt5OEff+i6kDPoTjbIlH1TMbBZdXPkxQFuTKRm5bU7zKoyq+v+2D6VarcvkduU5
+OYYeRHha0d2bU8Ldll4FnBH1OcMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPIF31M/moHZLaQt
+/hi9q4M9bnAoMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAHoJoUimNsgpJqxpYuJicFuyThl/yjXdyBarzMP+hC26e
+THH5kXG5NM+EKAuDbSDArOtO49zx5oxtSpnWVUfMJezyR9q8I5sL0ury8eJ3gr/Q
+qB6CQeirt8kUgm5jVza1FWBqRJeFh+zUruSmOCsYAWobvpFS30gpCp4XLdRIsHM/
+40kNLToO/Gt6vMFltmjI9itXp5hc4MeucQpoOIeNpJLp47NiMav0K+P2xUFX9kDB
+k0JTnJuHJEpF2XPo2lsZU39MurHGlDKCaNFCgSH28rem5hYgpNeXvCKjszQ4TcaZ
+26qH+1OA1/Ocm1KaBSB6Df5GuDfR0ZMV2PRHhbEIDwUR+wUVZ15ciUbS6wHwfaso
+j7WBo9pDhvaxLiKkC73iawwQD53Kwutfro5D4qoulsk8kI17Ovy3mqqo5e1kIS1c
+GFjTp9vSY5hu1qEbQnKbNpa+Nq1X4ywzAw+OewyGtomIy2lc6G7loaHTDm5c3Nf/
+Q5nmD0LJK1NFjpVduGZaxHD6trITTeXz8yvWN8k/FepSWbAP+LAgkhmAvk1yjTkr
+5j/dgE/NjVKswpnraFdjkbyUVkrppl+bsOIpgmZW4Y9Wmgw9SshtQ69+xiJ3jWvH
+TIL2BqEIOgDTf+iibTkjbSalyagl8w+RlmKJ5Yyx2hyLU4/8NBniwtYl/ihFMek=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID B080359B59AA938800A4AEBFD10CC70CF01B1B37 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAbmYElIbXpPhcgAAAAABuTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkwNVoXDTI1MDEzMDE5MDkwNVowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC1CMDgwMzU5QjU5QUE5Mzg4MDBBNEFFQkZEMTBDQzcwQ0YwMUIx
+QjM3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1bypPi4gSD+YnEvb
+Yn7UFuG8p5DBf/ANllT7ofpsAAtAmiFn6IbhquezpbaXfbPAWyWD5Kw5W8CTIbAs
+bhlV4XQcecZ7zwGJ290ovFabdGNjQavqF1f+GUG+xSPFvJnFaRlt2BFmiN/0w8VI
+GC/pnGHGrSupp7TeBX/YIuCU0BYWkRFOPITjRfOMLfHw1K65JvvF2qk4KBIU6p+2
+/jCfnQ4+tKLV5krgv3MZYlraQYjAl4OkycJXG26CL04eNOSwQjIazGCIX83ZywZb
+Vb5cOwKOOZEvtobvRjREC6jud165DCDDOXvrF4tzdQ+vx3wcuyvpCUjEKOlq9YQm
+7laEOLze8nk3MBjb1ETE3EJkMUQUBz/+2g2yfeg41Pr3tBB+kiPa1eI1NB43p5NW
+wGIz9Apxwfi6BHb+enSHaDfNtDpvwHFVFZ5smvHr40Cttf0qCs6pEzdBFCvia1+U
+gMifOEppGlZ2kKhz8O9SLZhBpWyBezl1wlBKGlyKsLTpBdqYX9gRsjzNKFRkZetF
+itouHgYAejiC0lgHt/rFniK8KrMwoFFhnGV2ADjX3tSTX/4np1nH/pHLm/1hpW9T
+SaoaAdsaQTCyXgCIz2qH+r+LPSJeC6xIOx9NYm5ZhWt91Gx17dgsm0ksDRLPY1i3
+s12JO/cJBL6c01xlnY/7HgsBDpUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFIUqjwQr7Tx7+T9Q
+A7sZeSQAqY1VMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAmYKQlD5wvPhvVVJMKqsYWQ8imyaRYs+fGY4awaaglbil
+lChmD6j4PIBaNMzcI+GwEAJ73AWNXlbJeMy1iBBbJbMCrH/ZSdP/NrxcXJU5vH7L
+jNzP3TLinxGfURdf5v0rc59epAHGkVltD/de4TM6HlAEBL7lwGwWst6jreWJOFqY
+87fH77FK2+L5DSCy3IqMtLYKcwIFqTWqrGJo3EzTEY7WP/8ENRLtotzczZOg6wkB
+Udt/esMzjC4l5ZDYuTZO3JwP3N1uBXu+CRSjPfesBKA0nMtKxGdGZ5tHwFzGkjPq
+t+ZI1E4iF/4kAhT5HOvK4CpnG06gEzozOk5fxhY6gwugdJ5zjbVWomjn1W+mranJ
+azeblO193OQMhNzedIecAwyLD2RLWZFyt8+vuAFukGLDzkzDWoVOrUFeaQPgaoNn
+DnroHO18d6CCWT8tKIXSZi882IyxH9ycpH8JMNKl58OvOIrzU1bpSJkqiy27phKd
+jYT3VSYMEK2IvAv5VqyKoSo48OGQspuTyhAPU1eH61ejSgmtLJYwpcsXUTjf44FE
+bPhgAEO9thCrT+tVMcyWAZOe3J2itjDiROazrdhSiF8PVgipVXDAUxrL6mhLLGrs
+IXr/EJmgsEwW7tZHPD6pc0NjXnNL+j3AruUOwOX5HkO4JxNvO6nEC7uphHo5XtY=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID B2D3CC08144C50808C289D119627479BFFC0E4A3 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAh2nqiZC+P6b0AAAAAACHTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMyMVoXDTI1MDIxNDIxNDMyMVowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC1CMkQzQ0MwODE0NEM1MDgwOEMyODlEMTE5NjI3NDc5QkZGQzBF
+NEEzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnozSsyyOOLPoivfF
+LaKWHaldpKBOkTQb0c3h1jC8lA3WHfkihH6LVcJUQheqWIHZvMEt4FUFYM7Br59V
+/JCf5j7VI6ID0jgwZ5QqCjckWgh/x1iUB0V+piedDJj0IueRNfFgZx5wPtPBom/7
+pHmMrp88Hgg0er0IGSnInpVelftZUWz+KbyRwDjMfQe7G+vLL2sfwBZjyWoflhAo
+tEClxF6tYQM9T/bI/Rl/GECQsCB3Q3751MTnM1Y1Bwqm/NTRYX+5t43WS35mRIiU
+1c5QbyL6j9gT1DyVp1y2WfpR6to+kErmsgt5VLY0OfdOPtu8yPBPF6GbCTyj42wN
+4vTdlK/OGRTznKnfshw06Tq8OrZquhAagkvgsVW3YcIYoVCsI2kYHgb0X7Mw/fkw
+xHIkASAq36qhJK7uNXj4s2CNnYl6Bmfh/86rod41QzrRBQ8WEF+LAQD9AxeUtb9i
+yljZjt3slLdcr5jWqarYAPLR5jMNAcfNQDwcXvigciR3IG/zf4AX60qu0plLfC4y
+6brnYfkb4Lk940PAVxTITvR9W9gwennpK+L3CPLWZNXE13fBhhA09RVtZdXgVCSO
+muOeyCnDBC5s7oEDaYKP1TVGk6daAC5LV9Two1+izi5/63D+GKqiOWKhCrYDQzum
+32S+P+C7zoIKGgxHUyXxl1Hyrk0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJXrVsG0R/OYr75B
+fqLnec1JvHYMMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAFoJQF0xyrQwJDGT+joG47zhZwpfIztwNCMyyx9KBTNXa
+B+Uqk6s123cZLb/MqC8WHDUui4Tz9l3ebzP02MXBwpZzTA0nLuOfjucZM0JCjtim
+6+HOUV6wF8v0uf5OXsoQ00J5nVb33m7e9Zreygs+RELfiINaegkpTwuh962xe9x0
+ue3ihaAE7+6NUw+9h1aSKscYb8gZCpZk9l6ktRY+IyD0XyRqQ6zNEJCnQ8yfV3Cu
+Oa/uHK0p4OlSehGlAhI4/TIWcY4JFyUelLOeJSnPBoJBZwK1XjZ/Nqtyt1Br3H+0
+ZGs1BzfmFXs0XTNNVP9d7zOTYHZmqRNVgZJ76B1CUuj+p6SFUiy1DuD/y28GA4B3
+gkgggjWQzruKNCCB3NG1cw1esCa7J8YflcmioTfbuB4zzQyYFEsTKDC8+ycvzCTJ
+awYcrMYgCbVdLQMwrYiYWRnBIFZPxEg4Ibs21erLO5mFNCSJVw/ub6F5sIhSzmm9
+9a/f+M08aKxszk8wikXYaqMOS7E4Bs/5oHgMaSX903uqg77WrFcKw5iJDptNWpiF
+PIp0OvMoXSKDyxKPPLq/h6KMvq6t2sgxA9yFB/Lccnww+orHqcDzOLLmfB4Sj8Kg
+Cvzxs47B1uuaYbR41kIh3udshGG4LQP+OloV0AbHlW9ZT0YamaXvrAlxUyuXows=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID BD6C69C0759EAA95DD6D156EA64170C4B9B36C78 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAh5wG73syWAFZgAAAAACHjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMyMVoXDTI1MDIxNDIxNDMyMVowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC1CRDZDNjlDMDc1OUVBQTk1REQ2RDE1NkVBNjQxNzBDNEI5QjM2
+Qzc4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApo26K+S/VkF/g1YJ
+o7In1DjP18sl52TG+4SFuzTCQXi1nqCZnM16MfihtlU6gXFqsT8Kbinug30szWb1
+Iu+wv7wt4L+OPjUAIql9OkkdO1iF8AauPsuce9aoJZorvKys/FLbKzz11uG9sI3R
+Y07r1CclHZ5rZm4CB3olLfTPa+kOyUQuQlr521TKQceEBkrBq68DW162gydeMIT7
+pLTPU7IXp5TV4gu7n6ay5b2SWAQ9jKIeadVtwL8x4BVgndo2YPk9NwT0XBAcWg7J
+V7OMdp31nmvTa5D691TIvIj2pdNiS4SjQhjS2hGkx+0qRq2rWzdC12WZ4dGgSu02
+IEijp9YQaG1tNkyrIWgjk9rQO23lkdk0Bgk3LwZ6J4O7CNXN1KH4FyEIiBayb+dV
+rhXP6H4reAifhpoVbJf/Lly4/NsbcVaz0KsusFXyNIgxyTkfEdhE0a9YMOnHxkP2
+l/HqpBqvDVoeGlGKz5Cc2aotwZeZf/Tj7qqgnk8BnXcGaZp4mP+V1GPPO0X1Ym9a
+5Yerx7/m9MM/RS8Q5pzle3RKxIuVp7ikh6p9ozDo6ErEn2QtCpvj2rxipKezArm7
+EoueGt9vs/JjWNieLUxjl8efWSKkBeaqxSFHVijkDjsknW9Ez+NPfZB1LK8utBdq
+lyVBpjr6MjbYqvnRiNZrbM/g9LcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNQuq8LF21ld+XI8
+0PPDn/UJUhlgMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAm5lnUjOaO4WarV95hFb2FSeFP71m4YacRPrS/yPbbgXt
+0UYcPmP0KTKySjF7RZdJG3ohv6KeSL6H7b3fJLAtv5KrZFrvATymvDWL1ZhNYcHK
+JpYrL3cmf8HJqNaMZTmBsEEjc93tpaLAYmcBElO2c1jO8lZ6M2Fl8H6GkhCemfnq
+SfpW3ig2N9jxryKMtcUZCnXhOdeL9ggfa02DNMbmO2tSsCLyq1AtEqIgi1yb9dSM
+1hqEDBw4fU+j/zZAuqO2inFOv0AwtaSZU+1Sq8bQ4lLNBNNDrZByttTfMD31OsXv
+0TYo8KJkGHRJooJVITDrahzPDSNh9eDJcW73GpM+9tfpzw4y+Wed8Bm7CmihkXy/
+prt0LH1rYUJz3gc6iLBZR6fK4h0ENXG4sPA+iDxqxFcLuRQxA2mIO+iXW2jKtZha
+qWqYKwrJBuYAEiJzJgdtU/9f4RtqCwBgyqRAUkrYl/eGLHZNbvPQBSv9neilpz1X
+R253HkKltVpi+ZhHrOwN5kmv20DT3V9jX6FGgmzXjqttmrZpxzhhRrsLWPA3r8oO
+hGZsfLlkh/DEsw4wYzLVPco/33fmoCdw99VfS34zbfg3z124KxIITftQzwh2B4Cw
+HJgc4dqhbHN8oVWIRkfW8fVt9Q+MvdbS4eXRaY15nfQwJjmbV/1S7NhApxT2JRE=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID C0044E3B23F43B2854BB76AD4FDD79BC62986C55 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAewQ31pmy1+G4AAAAAAB7DANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAyOVoXDTI1MDIwNjIxMzAyOVowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC1DMDA0NEUzQjIzRjQzQjI4NTRCQjc2QUQ0RkRENzlCQzYyOTg2
+QzU1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzRz/CAboDH/n6OBg
+9Y8V21M9HYUEYhHxnP3oyOSzndLy7fzX2+NeT3YrLQ8HY5VYytcku2CTYgparoWA
+kxgUNqouQAx+l6qVx/F0fFb9GrJDJ7JO0ux7v6RU2xCSn/MkRhlD5wM6CjaRyQiZ
+80stVonjzeS2a15bK3t4mleI57NDu8+naclcqWa0lHeykyTyHr/u3m2io8eAoJ8L
+4guq3TFbsqfMCn5VMEZfW1iTWTnfQUarZmNQALiDCrT5ixWAaoy3cm4jCBg8YYWB
+r4VeN0JvnXk8KAoPzOvG9lhbo4hCoGmT0FaVwcxbAorNfz+GrJxe/YteOv86cX0g
+NYD+nmlrfzqPP4yLA7SVcHz2tk8WgzN7VRf41pa2TbR1GYbpWjxIamxZUHx16nMA
+hjI020SNqg3m2cIMdmpDNV6JkwwlhxUfDwMxNiW0/m+faX2NBqWkVqPa1xagj07g
+MzUMg/jPrmRU4IWjpHjBf6GjSUeC6l4+GU/vf2c+Kx33naNMVuRWbBLzK1UPXIZe
+KxIBEMYRWwYOUyM6mKwlh2Jt+JYe00qfgBFqQYFBRazwD2Alvcc/fhTnH50aI8T6
+pq8P4l82wcNCt+0+y37gMMH/Ax6a/9XiaKswj7TgMZrGwlJrlgtQA3GUPWZLt3rn
+ZbuLPr3LwBtl7lk61r671AHT5LECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCH6SxvRf0uDkA0B
+OqDyiXFSBVwVMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEARR94rn7/BMqAqx1cYmrua34SAUBb9vkE0MQbVBIgWJ+s
+i8tInkjUHTxC1PRHggR6CO2tkhZ3zZw4CxUgc4zenoKkw4vE09P/Pa5fl6i74Ixa
+MJ4hRyhvRqSLwF32Tsg+qZuawLKCqzFjKuY/lfwdGtbVMFK/V3YnlwZmcPCzhin1
+OBwKHVYmqBwKxtDSJpm9MmOmhRpGbLgD+5+n5gS3LMJgqo/qNrsOLMWtKc3XFIV5
+x9BmgtQRG1/aIjkNagMUTzryfyLgdKattpHbZA2tPG8jbNAW4/fn+1JCqud0x/eO
+EP94L066w/AoixIRh/rZWio+0/hzJf99qetaq05IUkDFqAHJzBvP1z7s9KKRnYX0
+OvsOL/T8mgMeEFWTm2xhNpaMh8VseCgfVT8gb++D6xHo9Mfn78EdHAFgCnWpGSwJ
+IN9lhKKkqag5LasaTJz0oSKm/sQYDgpqNVqNFoOAcZDeCkYYi7kS9VnM+fO2XRdU
+wM+Oe0wpBNfEdjwqzMBULDc91ouf+ZSzOtO/twpjlDIGf2yxKMovWJsdYSMeUpxh
+PoT2B5CE2DbFt17EvpX4NQYGnHBadtA5bBxd3aajYYvFvj6wnMKJpgY3XglF9AQe
+krAVlqbnBbrNO40isOalty5b6S0ZHXCTgu15lqQBt0hy579lGR06Q1X5qTt3l8M=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID C7EE1D9CF6A291A06E4F5B88CEB25CAEE12F827B 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAh9rELZR3/6dvQAAAAACHzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMyMloXDTI1MDIxNDIxNDMyMlowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC1DN0VFMUQ5Q0Y2QTI5MUEwNkU0RjVCODhDRUIyNUNBRUUxMkY4
+MjdCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjdVs2vYpXXYaZ+Un
+ZE7jGE78j0FuJo9AxopzWK9l/V/UaRNaIlCDXIVYfq7MH2qs1gU9Q9EhMUKk5PCN
+FZ3xx34kcw2bLBi59dubM165HBjigAhkdHPsMg0JmxhQO24rh2ZknFmkFVxfR/HJ
+6ZmYKPdXvQ7bhmATJvg+spafENAQOCFSCgvWUh3BS6tv+pJe1ag8uT+e9JVSuZ5n
+bXSmZKsxQzLZLHBFUxD9W2IUqoT1gsuA7YvM6GkrnK5bA++pfMXuKS8BcKDmtPHE
+F2fE5ZRmBcR1ny9OGgwmxlfRXuxProrHjYDa5M5CLam8etWwTy5LVPEkw5UNjPMW
+EPfC3X1OH2CQO/YZtfUnljVhh9tRkrpedvPvQLlNogAAPKxuyqR0+MIhRv1cgL2Q
+YBwPmTtxlg15YFgS6kJaGVNaK7PIqWTlWrtHWGFfeL3JQSmm+oQR1DwhL7ELeu7d
+GXQdYyUZugzLhnNZh3xZr0usNDxD0mAEpVkrVecuLMrwDJ61uB8guB22PfyYN63G
+H6p4cbOwATYOjE2OOfKYTlyQ3Xu93zz0Y0iyVtcrOH4qTr04nu6HWtg3YezLWxNL
+FT/Bg6tWZlVGmHdbIPz5LNY9W7ID3PFMW14jCbw6s0LzL42bTI/fsXzlwE/28C1U
+trrvNRzknvnNU0JrAKXD1wFCSocCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJNFYRM8Dj9cPO9+
+QzxUqugaX/n4MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAW920HYL4Dun+d7XatjTPs0NUmu5IHxSn+DjIdbpwaQT/
+COO1PVcgH5c5wRoPJEJHlYzk5PQJJiX1Va70j2zLkS4VGA1oXML6f5vuI3gEui3C
+B343L0EhPD3Fq49HhV39Rxz4szHd0zSUgsVGV07Celb5aO3wz0N4d6Ur7IHK58Cn
+0k8eh7R7VZkTZ9J2FNxb7yIy6UP4Na/rQ03ijHuk7U7y7X8iBpTDpgUoSBW+YyKD
+o2LVq0ubWlY7Hgf0IFu2aYyw7KRBn5vkVTfenCXhNL48WZxmEYVZfCN4loj5yIpj
+cHdGdxnPJ88U+WRYd84U3rwqIHmK5zxICti812tDsCNSlb5JaCRK9nkNkr24SkzQ
+fk8oQXiH73eH5Te4MxQWUsFUhB+rzMsgkWvW4jkS8X27NVnaCW366YLw7OyobSth
+issQ9gwfp0ZH4+GWRi9hCByFHvUK1y2v5iHL4fXvZxJGP3/rBDX669ECZSMQ8/7+
+gejKMJ2WNJUzIj6kfuYuuIqsmtoTtJza53lN40BbDvEUUvuqtZbPDFsg0CfLxqQ4
+oZLstgiodN/qd9t9hp5habjTJx799HXidXteNIgYUWdBQrn16HfrpF72k2rI86pk
+n1CkwPWGxiScpzmJb3R99FhTpf2wVISnCcm0kHPiVAy4YjKgm/0paoBawB8ME/4=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID C88C75FB06270BF7EA1244FB9C25DFD209B7ABCD 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAiACiQN0FP3++wAAAAACIDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMyM1oXDTI1MDIxNDIxNDMyM1owQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC1DODhDNzVGQjA2MjcwQkY3RUExMjQ0RkI5QzI1REZEMjA5QjdB
+QkNEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAg6mmrQuFEozu545L
+4TdngguKDkUh9I7wEMAuYotFYo1srUDo/mZlo810RfeqUf8g6DBjizDhIFMrx6zC
+GkuDQ1ontVxLV2pje1KQWihOwR18APz/DbZdUzclH2ryCvFpQxmWi8s4WSJWxIjp
+u5Dbi1mbpdhAC83vo6EDIx6HLYjLP0sxEgY0Vdaroh5Cl2yb24Xkh2J6qXyISZnv
+0gHOKox/XM3EdM1vTEZdB6EkZ1DGWP+8hQYJRFuQNU5h5lEtpX6FL9+NzGfDzT9W
+JkR7PXrx8dpDM4+rxU40lM0G7QrI1KhwpW6uI/58SDCnBLc3DP/qofl4xLwqkHMY
+DF+oDfJABmPBMdiR5TUiF6zrZL+zvYWgN3MLJo7fg2zCozqixTIb82jCVmqhrxB4
+WyEi1nCAh0AOTZQQh8l/gTFWrdlqV8NogkV1RQIclXqq4p4Mz5nkpHCiUGkR7/cf
+aFu1TnF8SIujH6xeSMjMzYFA9Ku25xifvjEkoRxwZsPAJa28eEJZLBRv49J4xGl5
+Gz+qOYwI0WTZsTf4WWCfpisoy0BlZnArSTe3uRYT/ZIjnzz0lCqcVzJsUNze1sCw
+kUY1vUCCXeS5rm4/lvZu7NdrXv2LRUtw/jFzDqHBtWw2vokc9eUYa/1Ospu216hD
+LGRwx03xBLiCsU+7YLWpFVabHAMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKsryFRwnB0QRESK
+Q5vhJ4jP4h2JMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEARCv64m2aFqti9/nBt5Zd2q0EQEPrsvesemPXW/5/eTul
+cDse4ZiQaLufP0GVEgOdgecYVb+iNClE1RD0+oXTIJsoJOVkrMiacNvqWmDLDHQF
++Ch6IlzvCxuIeZsYhx7tw4qomtw7I6MRNFmvZyGwzKnEVNiplT/IAKzpJcgDeVCO
+um3ZEU7c6ze/VseIonBpunMTEWr0RdcPkfcjaakmfPEhDxhKxzoU+1EJlkiceYib
+0CYhWexCSyF9+hZWqtPTr65Jgk8ldliqZIBui+X3ij+WV6Ni0IxuQZCX7IOXEmG1
+zUty8/kaG2cFH1f4+rVtakW3ScPoMfq3Dxq8Qk5vaAhLzO2sxAuKeFo3Yp1X19Us
+yZT8k8pMGLrG73tZqS4XOvxIsONedbIbVlWBL1mZ565bQhPtrDK7mD80gCGgFBSM
+zJ85jMWAiV3IS67IWLP1DlPB0231Wl1sm9aOKNntOO2b3nrm24IZAbF9O61IEz15
+z9hseEWuw7W8UtuEzltJtsxWsLKbwPqJiI14+Fy/aNDpYK71gtrYEgIeqjYoE6Se
+qhsUmGi2pkoC74Lv0Th69Cwva2Zteh7xCJObMEScOroeclLwgLDHtVpFLirqjCpM
+Whh+7SAbOnv5yw2t5Yqbtr1m2iU+8qnuRvpGlh2JQqpEotUa2bCI8wzEDz+nyCM=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID DA206EF5DA6CF79CAE93C5E472FFE9480172CC8E
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAV3+LbnqAUAvlwAAAAABXTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDgxMTIwMjUyN1oXDTI5MTIzMTIwMjUyN1owQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC1EQTIwNkVGNURBNkNGNzlDQUU5M0M1RTQ3MkZGRTk0ODAxNzJD
+QzhFMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0+7/982F6FhgILeb
+sL+C6Gh2vJ5ijiYDAXTD62In0RQq7MQ4aOLg79VvtEy5oFRoRnz84iQuTYO4RPeh
+L4p0QIQGDGTpwjbLQmAgRm7U2gbmrSJCxd5r3L3a4O0UZlbD428XQrIbNDfdP+8r
+xSQIY3otH2E8yl7pO4p6KSInNxRyJ/qyqxzuUlFS1BjfnAtK8tqPUUQz9SMDkXO3
+zyjispEtTuym/xqx4jX/usZR1g4ixqN95eY2tVORI8HklCQzl22h++I4biVW0LB9
+dihPmbtI2QD4eVW9JeqjVlj1k+OSbBc4UiKDAjCr5iA9apcoOlNH7nuOu9foFoJP
+DxAqZQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUF0zFnpzucr/JtyFeUfsRIpDdszEwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBJNJ/8
+iVY2ZMNwLu3mmAPTVU4oUcch0CudJvXvKIkHL52xIYbYYPiJfAdSSXVd9a6n4An6
+ss+sbWQA1kc3iptM99Ca9nAWgEe8f722Uju9oQ8r2kZ+K21HQVgxuvSFKHO7cRR+
+91bnFPb+dfaKln8KFRYrxRsfncf6mTUHG2oIUC64Bv+cx5HjpL9rOKyOi+Tsvgxg
+GxwKR+IYxLW9yHtCFllPHqT2ul6+1FFY+1Zw2bm7H4XKkZg3PI0Lrb0kjNu7s6O0
+KpO0jHbAey4wx0L58o8gbwdAi1RN/puyXFe8xpTUxGRVvKiiJ/3SMNW+WI61sMln
+6hG82rwQPR/g1rzRxmcnrULz4W2Sxun2g3FlCkeo/NU/+3SzqVxKicflcG+KfSsR
+IaTggv+57aJaFRM1FpnQdGOmRoX8Dr95yVgYJsh5meqeD8rOuSZRIdTs6PSh6azg
+sQDHRSJ8noBjLSgr92nKOCzI2JT4P3QytYbnY+b4lW7QlVJ+zlRmIDFpLokz7IyJ
+U1HpHt9W7AwfuGG0Bw/RWcMetEsfYVE/p4c5tXCMoFt4bvmgMWpjA9szZ4iYsh16
+jPBs6Fu5g4xh6bPUaENv5DW8s4E1EBYdecOwqtOT1+R34LsCsjqNkxC3j7TQSFvO
+7YmG/EJ2Gg4uga0TCHCMcvtfd9vtR57g00aNGA==
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID DA206EF5DA6CF79CAE93C5E472FFE9480172CC8E 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAmL7QKxricDTFgAAAAACYjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjk1MFoXDTI1MDMyMTIwMjk1MFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC1EQTIwNkVGNURBNkNGNzlDQUU5M0M1RTQ3MkZGRTk0ODAxNzJD
+QzhFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqDg2hcJIAJyJjEQc
+tTARk6Mu8UjVTqkoZomqYAcAQmphehcJUD5nBmWPMG69fFERqdgUAQX0akjsFABC
+Q/Vk4BNcKJqPpz6iwK+A0iv9jPPzhVpaT7Ouo8mIEDdlX5/wtHB/bQSbQ9iKiYyK
+HxJZC6Y8GMdO9D4xK/L8LJGCUBUdxzHtIqsomb4CxcXDLcOm8l1V+sWSn9Y75ftK
+k8yhrnil1foQqtrhGk/PMT+8u+s45VrUgtfqbzzsRdSaWT95qIY6Cnf95wao5F0J
+NNTGOksz3n7SJnEz6xBKERcs8Q/6hlFV2LIWssGU8QtzEafWhPoPP+kfcbVrjI2d
+9K5H9tcRbcbf3THdDm4mUVsPGGKpMvBWven/OF1WuCCogDI41zwpXE2520BYfDw+
+4eX40zjI+g24oaPi+653Xjklv/9ONbNjjRLZFICyB3+KgO+vyTfrpeI9nnyMel+F
+iUnlsr1vFaJqWKBoFYsDkJWcxLz3Sv8H/oKHf8bhsg1CaAX5Daekk/dMDScAV6pW
+sf20+AC3GF0avdLjcWjb2x7JwmmDqkDdn7yHcKurKZIff/fD2hJ/3wa7vzxaAOO1
+cnpAMjrjoFOJSseJhDa9hI1VCecqEKEHI5sKL/BE4JUAVyI/Ax166gT7n1iwUlmu
+H/uErYF96qtlHJyr096CeSdPc2ECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLFEDoOCirru4aB5
+lk+1wwA6zIiGMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAC4NYgBdWOwxnlLfFnxx8l6lYcSE7ap1xvHIHxHjr4jPg
+8FbVcDNPje/HDVHfDs2e9vtbTsvxRrM97/B2/vbbRc+iArczffvwap12ypq+Oo+T
+9bj2tqHPxFvKN1i2HvhWT4LJNoce4h3CI5XHrTTTCfJSJYD3EX2dT+mexLbe0hh/
+syIb3UpxvREED1KxZ6lOrmGQzX+dWQNhen4zpftTfxnKjrv8q3w+DF/Kn+MkMtA0
+bx9tgspadm2rZCOloYtOoL9IIHjAdMxmfmsppnoiJa0f8h8xkHC45R4YoAL4nOIX
+4Z1O5HAqU1yZmuzD56vW3Fwgrcpdj0crOW68EWTVIQnFoWgLj65e0KOyRe7FOmma
+KylL9VFBjy3wAEJ25gAkeSy9NW+Zrv1Nz0ExmJ2UubGMo3jF+at/xgfB0+NP1eja
+8BoI6Agtk5j7LmIwc/Xnf2ASQRfThFbWvl36v2jTN8k0YLSU0cEViejYA3cFRqxx
+9I/BKegu08Wof4CHbSLPpHvuNWL4PQR+teXZ8LVqNXDufg5+ceCbnGtYQuqauMIY
+ZrkN38aoW3gK6faGITE32emPVVvfZlntjAc8x796P1HcXZgiijVZsIofUqhPCoJq
+zbvogC2erImViudzquE9d9bkpY98QxaeqCI8Ht97yXrh3PI6kNrukHv32iZlILE=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID DF5D6DAB5102DF18A1F77113F4983C62CBAF7385 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAe7ZL7TfYaBbWgAAAAAB7jANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAzMFoXDTI1MDIwNjIxMzAzMFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC1ERjVENkRBQjUxMDJERjE4QTFGNzcxMTNGNDk4M0M2MkNCQUY3
+Mzg1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApctcZCxvW0nx2zNg
+gFDWc83oA8JuxfhAiCNVaYK9zUsHc0mDOtn6kVswKfstK5etoGMGHtBeIKsWxXtB
+ID3la2PMo5F6MVh+p+Ixqne3N5Z8Qs85ff8JZAWO0jgHvCDRX4SswM9qXjASjsOF
+3jFlrLVpfGIxtr3EMD2n7Slc5y8oQ5ekBxscx6MuvYOP6D9eddXaLC9Mvht+nqaN
+rWJrK21H7WpR0f3wlvBVrxI3X1/k1BiKmJA6/q4e1fXBi2KPFAbh2NArlWnTgv5t
+mUpkM4+H/YpiZwYgzTNNhP1cRFUsqAccrto//dXHKKjjhYhGpuqWaOBO0Di8llFg
+cPWsVxkdiD6rzVkrcNdhCLYeU2JGclJZH6Xili/SzBXzK+GER4cB9SNQbKHALg/n
+4UGzVBZVI0K2Aq+wnj31xMFhY2RcUWF07d2K3ztyRBUpUPKqeUXrBQD2PSgsrBMQ
+XWXy0caKpl8nHebtemghOZhtZG58Tj/C55QKeGcMOsp4PP6IVXXcisr7JogLZhYs
+z/fH44n/FqA1IpxOnRyaFIMYIJm21gCCJzMMx+dLp0NL7ePZUPiJNLDhIAhd1caZ
+JK36Qq+ukHUiVuG6mKGZU9LJs9GkbhBG5Dj9jnBMjHEEqTBfNHWHPxiZwhuwEKe6
+Rg7ljxojT3rEK1u5wB31DQUoAHsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFImizg1r42zZvZYe
+ps7CD4wWZnryMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAEPLfacVyDfZhUaGNCOTJiXFU+86dDIwYK9hQxX+DAPdH
+6ZI+LFFxGNXTik5i2uVaIrmG7u4OnTojtbJ6biTXsfNAGHcjTOKH8zlj2j9NvQxF
+m2eJnl1KE+87KTE9D3ovtOa0uv3pUpm21as9rdCmjDQLC94mAbQNUrTOOdm/bYvQ
+sbk8zzQFvU8rf9AbDQBGop8362y4MaXPUx0RV5zoXgJz7lzTRoGcPFTHrHgM3DoA
+BOxrazcTRFxzw1WCdyxc9tOZbii4gjAAGT/jqfuLb1bVAcXOwhCVoqFZE/5QUz0x
+ae1RCMkU/V1g4Gi4GDuu1ih3YhqcVuRYOfPu28VwnS9/x3EUg7DaTe1v+EwNiJGV
+o04S9yaI5Ec/6awIFzm1rlMtY5rAPh1+c4sBt2W7NaeNZjSfa6Gi2ieaLUKLbK6m
+TbgzlXaPt+NCcIXFITrYg1ppaQ8bU/1ErJgo0MIru5HOc3igMCzVFW/2xEx7inil
+1Qwl3hzE2zF2mcq1y1t8eMp+MZRoSFmHOLVLAnzrd5+4DzmuA87UCGfUPem+wF9J
+Qxj12+0Pb+nZyTht7QRDAstc+7UT14jzPzyli6Z9FaVls86cH/KBkzvQJFk+aGyK
+LKwu/aIswBLkJx3rLaIweQABQb0y/eOdoJcp85lW1pxDSs2gybIMY02vlx23GLo=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID E9061797E8E5E8C68F935EE5E976BC8FA17D7523
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAASAAOjnYxKJpHwAAAAABIDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDUwNDE4MjQwMVoXDTI5MTIzMTE4MjQwMVowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC1FOTA2MTc5N0U4RTVFOEM2OEY5MzVFRTVFOTc2QkM4RkExN0Q3
+NTIzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsIAR+gs7phLxIuFg
+Z08gUqTN8aOoAZcLpCUgJDF/XTQ2FVuASr8EuhUTdXtYHOz7xBUOJDE/vwqvb6FF
+r2lI4a5wqKrvEs6ZVk9OPoX/TgpZUlawQk0qNkQlzV9aAmKa6ofitoLzMAbP9N/n
+mO4rKjyF/x9BR1P+4/iW7yLh9l0DvBQj0k0O8VLrIv7j3Si4WHOIzNuN1xZ7slDG
+vXe8bHcI5rYjmQHeCiaf0PCL2kQbpti48v6KdkLdqyloyXK2sAhvxRB3OJnlqDz/
+JJ626QfuisGQk+YBjOVxx6etka0IvgiRncY9qEL5N2Eucms57yUyaWRDMnqTGqMX
+WzG6pwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUR6E/W4K0+qyiwwWa64nYQ3aHoEswHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCAWgyH
+O01PB7H6WrTn8OH1eLOB/E+mc+t0wk1zgpVBkdQ2SlHT6ApK9Hx77S9bg0tfTFpK
+rdZb+2aekQu9cPMHhE/8WnS/vwy7/kz75pSKPGJoy4gi7cIjufM+jv+U5Dako3XE
+E7bhHdNEQOheTCDenGVLnz3sLVIXb2TnmAudhqC3QNp8/LI1fLGtvfEJ05Z4STCE
+9GpdnCYQVROOglc1TGp8C/hP8fwuLzl+jNPyoBnY7k08tOBlLpWq8EMtkkTBtToa
+R540Q5/s0D8gumXEIxLZ+Ei15SMJghwqKsZ6O0EtM5zxGW0KJwGCDAxeiMt4gLdZ
+QJHOhZlYAdhwbarVsN77q/zeBSUaFNa1+Mgt3WgV7lSQCvfvjhp5xufKrLP28p7S
+wkta4zgyw38nmNIozwhk9DYUlrqX13iOzKCRxI1/I8Q6Mj3KzGQLwjt2JJI9PMCC
+Jjt+K3XBpQl46UO9liQhgtOszrbUNGrVBGR76BbE5UnEbOrCklWu7NBjmfumvHM9
+6gQubXfPs8seRUxkDcpyAPj5UTN/DtwQqSzLohriikPlpI6LlbVKialauAb3XuWr
+AodxzQJJ+F76U7eCcBz8PIZcu+JjpHUWtTSQ8Z1MAzOcGoty8h9lBuH5UBAnHckJ
+GDrWPLMe9MR1SkL+ximdW1P+YtEiRhSNPHVO1Q==
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID EFFEEC5E01610082C0E311CBD07A3204408B32B8 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAmN6EEZ2nnXbvwAAAAACYzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjk1MFoXDTI1MDMyMTIwMjk1MFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC1FRkZFRUM1RTAxNjEwMDgyQzBFMzExQ0JEMDdBMzIwNDQwOEIz
+MkI4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxptYhuma1sIdGvpw
+ZQZonESYPdsFlxbJiAazNE2Gvc1jFwciis24nPn3UT8hp+v0GTLCRpL0QQvqaVXx
+ShwyJBKxeKcv34eFjw/2aOUNWdKq9WVlX1asBsgS6B4KaZBHqOKGQCiTGa/F9ECR
+yRV6ng1o3YAB+zwmsZcwuWxtwwn7JPE05kucRVaL1GRTsXZKFwzilOOGZ9pCkNAq
+RtcYs7xnN4Q1UxiZuXGo89gXQ+mTOK7rNy2I4hqV78tk28giT3k7iIvsDbELMigu
+of/WPhiXPdQguNT4uTrRE3fEK1gulvoY423/EXRKa9H4oSKVq6NX1keu3ynY4DCB
+YWwGcqeY1cZ7xBTvtxbTnD/JKfHlCA2O9wx6E+q8wBCMwH2CCkmcldMZCjfjoyin
+JmW4Diwge96SE2jBxsr7sNwAMUPfrn7wXIUrfGgp2GBTE3CNGToa4x0xHw9yUHSi
+Jr5T7qZ6uJPcCUUaRhDFvSD9V/fJzSh7Fsfndsa7S1OoS0450M+36QQRnWkkOJsq
+DqgToHYuvTMtUOArC0uSKaHJIqgTqhPJDhMR7KEcyTeTlt2MZ7vgGVmbKghCTcx5
+a1/5gfcVcN8LZF+lnQ0HePdeJfkVSOhwAu/PkNhPGi8/m/6X1fOQkQtSC6wXFgOG
+H+5EnLiTMm6WGOEjTqgduv5SOzsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNmk/INDlitzMhBU
+ue45jCBmx4jBMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAbiwFK8lJYei7FHvrn38JoPKuxNA3NnCrDVKB7/ZYcaud
+uuFQ5PAk1IO7vcnIKwB0eLH+p2PUoro9VzRJn+Uxx050wcpjcNphPA1k6gjRlQ5j
+ZdALr4f2wuOputrS5quhegy8AKuANhyyrrrmeSaDVJaHx3QCU+ygwqMJom4RRe9a
+aFfRAAS7+ObtcTJ0BQTiqIdpQW8URUUz2eiTsTyqKbIkKDq/C/kKMQA0LXTVb+j+
+0O50VN4B02PZGbyiANRmooQHSxs/jY3DUXOIDyoMForb3tJg/UAg63fXsR6JnqXj
+3fW4RA3e1GHJGprMWUCr+fvK5+AMc4G29R1LCfZOw94Unx1INKnZtsf/m4RqAV9S
+mAlm8DOGcvu/hxs6DEakPRdY8faQqU5dFAnqPPPJpaqkVumUCzg0WQxdK1/bhY9Y
+fydypunv4tykzFqxycyCRJKZqnj24EuM5bSIUi4/AmmJTa0meHohXv+v62cFg3Pu
+BNjwKGSRQ5cMryeATONzz49CCxtq8H/acpb1/sFjXlmQiYSFCphx1Vi72CiiKR7Y
+XHPN+62PPDNB8DMB5aDDvIhkGuSEbkLrFyoNjGdPmslRJU09tc5i/PxpK+cjyB3w
+hOCjOfJ1IUOJfTibGG+LFCWq6tRJ5Tx+6wvNbeer7LSdCQFci4MKlnrbJIAvPL4=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID F53E4F475E0D3C6E2B3E56E3AE8ABB953122617F 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAbvERC68yQGBUAAAAAABuzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkwN1oXDTI1MDEzMDE5MDkwN1owQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC1GNTNFNEY0NzVFMEQzQzZFMkIzRTU2RTNBRThBQkI5NTMxMjI2
+MTdGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyA/l9loLSPez0tx6
+Fn9e8hzd8kKOdXqfnqiqLbfGhAi7KYSbRpeFHj4b1HbYX8L3pfKAuvE42xkWCSrG
+/T+h0HLlMP+aimYu5oqqCE2cwiljCgLpBePErOEZkDsKH8TZXrQifuNjc5Q5nrHM
+KWiheu9/8DWiM3JIIK98TbFT4xmSIcyIG8OfnSZqagqtXdvxUA8M92rdTrmxHumS
+W3lgv1LH/FTpJKitNfWsU1/fVk1riGWIRyT+eAy3mXP0xWco89PiPfYCUGqkG43a
+q51v+1jmO3lE55ipi2+5yS9AQnCefBdLk+7P78gGrBRAs1vQAQWlESksBhfnelxo
+WE74BGkzKOQIF/cb6sDP4gjBWxbZz7rpr0qTLscAycx10bAfTCS5ZGy/wEB5iBVP
+56xDVzt0XyKndFeBSfWuc6NluNJzZHtVhmqpAI2xjGjoYomacgzFF5BkL22ARJjY
+0g1FZ0iwymxPCSuamk8J21pDWGh8NMFZan6JZxPzbgunwoa/QDoDcTiMpXCrpgdu
+c7Lb8u2he3s2XeIcHwM8LwtpO91rCaZrKmgoaMO1mpqKHdF2f8Q+9idisTNE2eX+
+fYZSgwbueQSNiZwa6XmyP5X4g+0sJEfvGgYDqPVPVcV9EEp7jQthyS8unXIfJhkB
+qMn7DJ1ouLL2Ugymd1paYCF6MEECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPm1HqXFPleEQlsR
+Z5Nf/pviKNtIMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEATb2c5VVQ1KO7td7tuyw7u9TfiVhZqMIodHIIsyf4hmz4
+BStlTbEQmWRJUCryUvpeLQrmUcZ7LTc4r48D8Alh/u/B2Grh/lroyGfP9l/+REXW
+1ah12mgbd+bVd1KeDZWZHQlKlDTSqEr0AOmg3uFA600UayZXV4YAMCdUpds1NTbN
+WaxNxjMtGd3vKwa1ZenV2i22xUapz50qfpAyGG55MihsrOBD4pmMaVR95dzMbkX9
+MGfDD2LWd3ndIgvFNrcVv3j8qyTzk52hbNqTvL8qfZ8qZx3VaxyJUjX+M71AoETI
+VRFTseBQRBdCJ7k4hinrNZSG8E1SUyH3v+JuzuHygInBt3ZxyCsMlu4lhmui3Eq7
+o4VElxrHGwTBWkLXSA032z+rCaQgVAHhw5DeE/7Z+odKKZvY1U72b3mRXL6F/xeT
+krIMsyAbmxsJVOEGYxWpsSEK//YOc/vV8+/cb6oGcr7QcWvssw7g5nQqd9O6I53w
++FbnlWyfeV6rAnkuTPsTuFnrazsBsJ82A1MHShW2FqdYGYW3hfaffOIY1fZ24Mq4
+QXqDLoWCxn62hHhc4OpwDXylOzEDW8FD1ln3XYR4vkMJcg0lEhk+bdbs+XPPmIiB
+XTsfZ9Ow8uT/roUa1u7VRVOGIaaK4Hnjwlqvactlrz+j0f8RH5JAy7awUhdqHas=
+-----END CERTIFICATE-----
+
+
+EUS IFX KEYID F65C289B3D93B78F978AC8D017B7947DA93637A5 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAmTZn5LC8gyqLAAAAAACZDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjk1MVoXDTI1MDMyMTIwMjk1MVowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC1GNjVDMjg5QjNEOTNCNzhGOTc4QUM4RDAxN0I3OTQ3REE5MzYz
+N0E1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlH1t4xR4Hp+n4DTP
+7wNpC0CmIzBZG/LoLvsjrufR/GjDlvYQC73Lv+CwhaOnH3J6Y/3ujIMd+uxDsnT1
+Vox41qAiwXTIbILSuBi9/OlB8eOUUxtNBMsslaTnvzhKIyuH3wXn0k04RX0324zQ
+M8uVmmu2WgQ9rv760rfIfdx3SM8F36xAwN0rZVL8W6PfgdcY4ajRxL9jLBwp1k8h
+ihcRd/IhGOmmUse+MqNNMfYH1re3XMtjUpLncqhn1cawDey34RDc469K+gJFKNKv
+8e2RXUa7GLTLu1Jt0g35RnOOSdHxcl3xjRIZkNcW2PVi5xfFtTYlyE5OQHn5wvLL
+BJVk6x3ScpgcqW1Gwj2fgAcXC5GPOwnLg24iYsrxFJ043G0AEsqn/kD0Zzn2H9B0
+BLiswBNnoXPmOPOMo7NfBUMi3HcytFTVIIJCZjFkVn8eFTK7P5RP0qpeNcU1zHWD
+6yuIuVqKY+x2FhZqeeboK6doVsVyoJKcIUlUxZ/XmBE5cJLuqzYp5pWBlXDfjRar
+SyqjlCyXTtgh1po5GAmyxcP8JJUwP+6NPLV6AxzbvbmP7whX2Utl2p5rOVkFyGNn
+37EPEBM5G/SbJtL6AcN/4RVg8cK8Y2xFb2IxpHzW7TAhQ7RCgT6iw02Q04WJBch6
+sogoPgiqqbyMeRR82zHmrOFV3S8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFIRoMJT4xuK2mSLk
+GkvXpIekKyhfMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAQn3/NzXwOtqOE6N57S+X6TQ0c3DM2LgtSROQczzmD8ee
+u6tsuhd8RNq7Zodpwd8hJ+zhc6hPm0S0YzSptU+gcmSyWp2bYC4IW/Iy3Nwo5xPV
+BkOBA+R8IBXwFf/Isiq4RpgSkvbcx9zE2R2mDSkr4SiN0hpcYrYyiDJIOrYVd4VY
+PmShfxVKI5017+V0i7zg7oh4pjHD8nmt9rVW2bS3Oo3OHDi9at1y0Aq1fG7V+/yD
+jXGt0JfMIsflkqqfqRJ9kowyXSZoN0bhyfv5x2x3FqoxdAIvb+WyVlIKNLsU05cq
+P6y+rJhl117z2ZCD+dReuIv5VKx+yVqAhPcPnccbxWkaMbg/wnc8fzHqFENb2CNU
+pg16IkNW3FxNh1ImGpa5OFp3g918SUS280hK626risQnADzxfPNmm8YC6irZcP75
+WHKcvkfGw3kGAAIIjAljcCxj4KGrxKgwHL1dW4FnAzN8t5i8U0c24uH2zSNumQHA
+GwTbfCU6a5FMBPV4c2Vb3cJsRRFyqHB171ouDWTo8iYreYA+JmP6Namy7TYDSz3I
+WnFpjqFF9ciOQb1lT8YygejIrD/wNHu5wIHvcQWO1lFi1gnyTEoh9XATBVEB1fKA
+JF48xGulFG+2FhbxwOZQGcQvZnwTwfpWIaMFfm4X8x9fjz4KGeckQ9c2uvpeMQQ=
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId 2583CADE368F69C80F58D34A48B2DE653DFEAF98
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAA7UFlfjFeNs/gAAAAAADjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDgyMVoXDTI5MTIxOTE4NDgyMVowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LZXlJZC0yNTgzQ0FERTM2OEY2OUM4MEY1OEQzNEE0OEIyREU2NTNERkVB
+Rjk4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn4Wrp5ztDKLZNUdE
+b6RmW2fSKfEkjjpwKPYwRNz4Iz9QTLOaXH828yXUf2sQsfajyzNjWyZwwrDCLJOc
++h8PbW1u2D31xJUUa18EZsSiDHFD80VFttEpNMusjgXfryn/SYQsV3m+bAq8C8iE
+QncxdcPW34oPcfGghSGjd3uTKknvcvLeEqQzfBoVo9jOOQl0apkWII6J1dxQCz7u
+s5q6sEprCY1ZpQAx5T7nc32EXSuAvpaXhkITHF2moyy/qBHCEnt33H9kNKkYu/vV
+mAFDmaKUOkdWtQa6l+GN7eS32UqYvtCt/vf7Q3d8M5QktJOHiQ99swf+SdrVLiID
+3zow8wIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUQZ8NUUdjcnm5bxxU1g+k3p1H5YIwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAf27Yh
+DKoRm+/1gjXZPPYhGJz4u5dttUqzIer8lrgIVNKVWccJNCXdCJ8Eu8TTMATfcnsK
+Nfk3ukzrFGJJzJYKXrFcyXA6cnG1j1A3jgo3i3GyyyCKz/kO7LnkNA1Uo9aiE1NP
+pVcLGUWlg8c7b+varGfP9kiUR6N/VSvwpn6Ccul9TOE8RtmW53yc4B6S0G3NxdaI
+J5KHauJmJDqjd4fSZ7ZFISz7Tcumz0MCqr4zte48TNcDTdGPDWMBGAgkxkJFoSz5
+G8cVUgBR9mag3OBI2ChiRBPWX2iVSvgCiHjlM4Uo5rlduEGoh0MJYwxFh3x4teeE
+uoVWlpfI6RA8hjIb+14uxQehNHpcaVdkCfM6NOuH5UIcOOOYAPWCoqSsU4JjZjfa
+Cx4oci1uH6BJ2ZX7eZZChfG5/oauK3DFi/Iw0N5+WaRAU/1/VAUTuEeA0ChG+Xjl
+NP5ddmixkXRsor2eabhDsfbKnasEGfwDfWPzmVwOSUPMo+NL7BKVN+Ia94KUO6u7
+6JYs+Sx1/1DVnFAwRrhZ9IpkIbKyDDvtO85lWj2XmM4ZU+EBcxiqBmbHRN8srtjb
+StRzT60WoFrZz+TMnY178WX0Hz4mrtIh9l3Wm2hJlPkeduDC0Tp4MNlxgdq2lRBP
+BX2i0qsPwSucB/RczT+owwWy6GbQQsdtO44vVA==
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId 2583CADE368F69C80F58D34A48B2DE653DFEAF98 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAhl5kekrk7NsPQAAAAACGTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMxOFoXDTI1MDIxNDIxNDMxOFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC0yNTgzQ0FERTM2OEY2OUM4MEY1OEQzNEE0OEIyREU2NTNERkVB
+Rjk4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAs8I7HP8MptPa7e43
+c+3uf+UZxFkErI2fHhFLyGi6hnKqMPMfAZz3P+ct85dZ3/ESIp2DsIdTZ20AQAuG
+TYLVOvqvp5dfdq4xc2atQdFAKx0WvCGEyr1TTCcj6JFVBJPvNlaWzZbgjB8ftcr7
+GKNOr2BqFdqbxOfSTqDXVBvdFFui5wZOu23b4I0xTa4U5cOiOJvMr/J1E7FC7p7y
+1Sj16NdrGuhGXJykbu2rGHsax5CIp6IQjipb6EDO8Bv494X3Db1geoBEVAcQFURh
+41eBjkcGiNIF6t0HoXu0LfVaenNFwyg5sUUdirZQjYajLyw92NVJk5+w+vuPwlnu
+/BNm/knqwm62Wm0z0L4jM8zGOx7C/eVslw17H3ti3AQ5VmUwAueWr+QJO0zxIURn
+LjvHiyIjxkTP9MlGiyDVFBmYgVPoSrcI5aS/bSkQyFFoaCmooNjd3p4LIn/QW7hl
+J8cWM6Y2wXR1gFysdN4UEcnKXrSFUsbJOQ8ZwFIFeWx8YTVSe47hcvGUkLUWjkI+
+2ZXXHhNjEIcKrt0/JaVADVXTylsH5D3ounPPfrXZXhj6mDEuGFsGzi9O6Qj5/dwJ
+RnirLGA3O4uXbMYnNFIdZbrPBnjSmb9MhmdlpkbSpQeBmSmoAfwv8+pbetL0e5qz
+/8vEqfvyHaDUTREs4FDhluFiwucCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDmIBeLrjewc9vGM
+KeWrZ97515iqMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAQ0kw2rca+GqOMz0y3HU79CfFi5Zx13/bLjAYApDVvpjG
+1ILkk+LYQ6pIXIIBr3XFtOYpswHVoRifbC2bkynvzqQ+mYDPhlQQwbN5ORkxZyGS
+PaHAHCSHgZc3ZtP0apTgfdWDd1jE4+u9rTrNCRtbdG4giwGgm+/oIZqWoZQvdoaJ
+DCvkqM3sMS6r8BKxc2ZtnfYJFqN0iAw2NY9Dm3DpLxNB2EFa9AyvjarQv1Ptj5yj
+3pexJLTdesDuZNoZ9z0Ulj8HS+kX/8bxwavTjGfBXUz/m/TVhPNTePbGHzVGWImS
+NkjW3OlKHvadUiXBrN1tfpqCJ3K4EOlmjMmJWfidpa11wn/RUtPSEt+tpigqS1Aw
+BkID2MLMVvIOydXO5hmSJ2ELB9bIZZeJs9T+3KlGa5qTKIMg0iWQLVizgvMmxAXV
+S78MNUBmB2rhvPHj/HcuKEaAwAlzpC3AZ3d6cU9yfJ4mJDJ/nBH33pf7UikM+27u
+O9NFn9t+jGBRFfO/4KSqsoolVDsSEOhFD+JxZJjNPaHyUUcGPOWhQuhhUsSE9PHi
+n/FrdaNUk6dhnepWIT6mJTkvmzRMIusSCgqPgy5A44UCay/7vMc/m53DsRnbs6Js
+FcDXn4H6FAbxLKzn4vsy1y4uuiNCjrs3+4M69lx9Mdvhj1X5Ris50d020q5710c=
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId 32C6E576663FEE80D64CDD7B18E5603863B3BC8A 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAebMRcDwui5MxwAAAAAB5jANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAyNFoXDTI1MDIwNjIxMzAyNFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC0zMkM2RTU3NjY2M0ZFRTgwRDY0Q0REN0IxOEU1NjAzODYzQjNC
+QzhBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2gBq1WQM4mQVnS7a
+AlcmqUZVjDhM9mJbH5cDQQu/ypjPiMFgLF8Kju+dhv2RaGsqm0zUK9MtRVAB4kOm
+MHTU8ud/PyNFdYmCuA2AJXQt4E7bC/trADa4ZzysXwBAqm4xh96gVxKmcrsUrj5t
+dNsZjaBkuBOK3/RFhiN/z1TaHe7rqwUNKw7zhXNndV3D+3KM3ppp9KxNI3hP2zDs
+32uYcYCQMFyNkvf6w6K/Slevy0M5kICQcQ/HDaUTTdbIjD08Hy2b3GMSD6Gb87BB
+tT+U1aS6WEtyJun1cR+4avPlPD1hrQfsIg5XDbVeRwKu1AwERogE3EcgQE5giFcq
+1zpbYFd+7RGztxiVIyj8xHEtufhe9xSeYG1asMX/ahWaEVP2Z3bHaU310rZTuVcD
+5A1iYWllnO6kYYQysSYpAWr/fvh+r+wQc3u2pmPlr9JX5HZ3P6j+gulU6a8U7A4S
+6AjeNhewLVjRkYI6uS7eMf9x1Mip1HawiGzFZBTvm0s6FJDd1XcRu152NqQ4TLO7
+PBALOcwPPf5Ob+afNyCsSjDBd/KnefCk0DGHsn7ORG0QZvLkeaK+Lq++mKhsn/D9
+geRemP1E1hbUq9P3ecZ+wp6wbMN/kvopj/6hc/HvjuW5dPylO6JVPpq0ZjTM5EE5
+0RuYNiVgAD3ZrzSILZuq2oyyXt8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAYPlXAAriJfQYtW
+tCzNx86Gaft0MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAhgyrjkJuDyxYcOTyAhx26nRJLbF7uLSmgORLkl5n0/oH
+a/WsNP6PFQaFAGwWe6VNJuTzS8K8B0vbs6o8edqRxZh96+OTVu4nvU7z9bft9ASc
+AUY07Cqd+Hd4iP+8X0iDenbP+bwsLDhjZMfL3FQFTS0tWN0XN6eZ7zF0GkJYCG8g
+0/IiH9YZtgBxHaiQ1DNWSKxGag/EXwWboXK9Lj22jT7tI6+hL/aeDVSPwUvRAXW2
+aHmW7iQKQlWWtMswUpzpg4TJsbIjhZTVG1reZ1o3remytZwrdZYX/e6I9vWLsRfr
+5LVvplFUf0/G6KZXZHgde27+JRjsOlf8wo66lY2GjlIIxmAR6FwkINItwwTMKqvu
+xz9zEApzY24ZmfV/gVBlAgGyh6QvBBQMNPKXTwRug1alqwWRWLRug40CyowBnETo
+1mawMm0q+ucKIxJqDl/6shUePwH01TZrU9O/v63HtPAoOrqjykNC8U/3PerBvMMt
+ToFroRDnWGqWVu3n8nXiXLMD2cW2ipjJ4HH8SrHThlOiToCfadFX77tgrEhez62v
+e2Hf6H5HyRrDKx1RqJVts+uGx+NJT2JDGPmnBhb9Brw+BZMl9qoca+RXixww5Cao
+A9OiZN/JA9yW6VXiWIzYqNnF/Iv7k1rYU8xLgLKzztOPUb8X4hOd3NNcjsfPEk8=
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId 3893cdbdd873c4233315e1b13ba96a0d23cc10c7
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAABFmpxFUhvCQSQAAAAAAETANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDgzOFoXDTI5MTIxOTE4NDgzOFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LZXlJZC0zODkzY2RiZGQ4NzNjNDIzMzMxNWUxYjEzYmE5NmEwZDIzY2Mx
+MGM3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6OvFiZrgcA/+eMVc
+BqRpTEonNqTPqTzeeWVvrMlewCWGK7yf+ngc+1HHO4DnQQpMcqj1Eo4Xl+zvXL+6
+IDPR/+ddzWZpnJSFG+kSnJk4dphWwXXQSqpYPTJQtC9RG5umJJBhXANQmIPLPvC4
+KPDQrc1jw/UPMAeKGRUuEUXZ416GFg4J5V1C0+T+93ZjyHmIBdIREri3t2KkQBnR
+qbWrch5JY4kBVMZZkIwv9rOOaaU/BTUR73rxV9Pb0OBLtKgEkU6Rs9ftt9h/XkoY
+U/5omf+FW0wrKtCSKUDP03PQrYaohvntkMlnaZczw8QztmOqsQVS4O7pTcQh/6zp
+ukezdQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUczhTk0TT5Ert/JrrE6LG1RWC9N8wHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAVaKvr
+9khOLlv1C5GxVcbQeVWfHKImR/6d0PlZaCWeej3oAkTxLoM3hrj12o5DddNxby/t
++6kFez6EZ8EbPinWipzz4NGQACnbSpc1AKcxRg1ry/Mwf5WB44w97NclLRJsfP/r
+KBTSxL/nsHYdUbXnnVpJscJ8X6NWXoDrB3M6cCna4AKWF5yQ9XiHRxOJA0shJK0l
+5H+i4YASIzD++w9T1be+B4kCCv/vkG/ua3388vJFM+CUJipouN3AU/jH4q8nlRQh
+5fzx0jNojHY7EIfxYyVRMSDTrRubz/8qCeeoC7hQSKFCf9qqNaEgl42m235FMlg/
+lbRQwltCP5r2Q+QXkZrjQu2fLIRVMUhM3EmSgbxgInUr9h5mdPBAcvDLsxynRLRh
+1AsnQQaUTGUhCJ4FncvrDg3mkTbGBD1357hNMC4iJGFEog7Ha2rcsGtxBCujRZDV
+8i72ZnxC1ch0DIbdu6jHRATJpPT0U+4QDS89OdJrqG5fvGFuBMeXKl95DmgvkXhR
+yrIVaC6kMRsBuS3L+NKgLeDEW3f45q3LIpgy6ycG7h4F7/c4eFcDjQyRftsHNrmu
+Sp1e1q/Vsey+2O2x/O31rsf5UQcz+swJqOx2NfwAWKaObUPxz90kq0t1+/panaux
+3WP98A+xufBgQOG1520itDxD/7CXd3KtlT2Z8Q==
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId 43325af5500406548930cda9a67dc78067b97801
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAABcsNmRo1ykEngAAAAAAFzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDkxMloXDTI5MTIxOTE4NDkxMlowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LZXlJZC00MzMyNWFmNTUwMDQwNjU0ODkzMGNkYTlhNjdkYzc4MDY3Yjk3
+ODAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnPOinc27FaDLO1IZ
+vjb/rcm1xbUz+g0n06U5cCLBDEQieEB4DT3iqmDDVlSSaK7sfTkeQ5ryUSZQrO/0
+7QO9Ano95/Fy8TzID/2rRrA/nno9RcbUDrw+U0PJhMxhHRw9B9sGQARV6ZZJyPB4
+j435YuAbIpAlbt2vceiwdYlrQ8JREcDng+/cFk2aNv2ORbXY0V3u03Psul5JwpfH
+OxK3D4H0oQSM+OaLW0qeCsILJmM7NCrFUIzedst+vp0SiOMdBOY3IO5jerWh3VUj
+rjaDKEmwbHkhA1LlfTq9Yv15kuzoxx8PE9MnJ6iiyiZ3K+c69+Fd1j9kr90436cp
+hagpPQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQU5+40RgVcuyqOQg1jDA1nFFodCkUwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCdJ+St
+gkqE2S1HcAWnSvbd6kJ7W4MJuJv6BYcJtezXy93aJrmWkitIJPklzsGl0OrEq2W9
+8PgBHatFIAwAm94apusd8Po3HvSFP9LiZirfd64WhQidFkE8ckvFYXUdE2/GxXni
+1GwoF971UHlbvU2hbLtl4YMODCCG3XWPpKhWHD5iyuwOXQJdS9wYCCW4jn1QOvhK
+NWOfslQZNuRzVuzoGKAvh7xMSRDNv6U3f3lBo+QE9QR/IwkrP4lLSWvzX4HpbTFq
+YuIcPCKWS3NU5eTdc2dpxYihiXKTK3eayUCuieJ0XFUH49fZPlHzKTDftzsaFzX7
+OuC5OFFaFip4BeRUULjZaETzUIg+dEJ+tov3wr8hhQTntdhgGWz0UDqLgj6r4wAb
+gIGEzhwR7dC/L/qD0w8O8HcYTNjV2IbpWNt+ssZdjkQUnF1GK0roz7D/DyFeSnkQ
+O4b3vzuTYLMuVthmuOQj3F4CBJAJWGjyo3oruElj60Z5YMyqPQhgoD0E7zfNedXA
+HxC9no8SPdoSByjBjGQ8BJUmTAwVKwGAMf17ifB0IZp9M/MIabDseVbXpy8cK3jV
+p8SWlaNHahtQqk77kN/qZLzQg/4os9QaAgGEzVVwiIL7JakXB4LTIKdXf7HWMPrn
+mtx+yKnEMQq14CVHJ/pTj1dj+YhSzJb21JrlBA==
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId 4A769EB5D93C833A5500F1F281324EEF03FBEB3D
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAFoM8T+juAbhNwAAAAAAWjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDYxNjIwNTgwNVoXDTI5MTIzMTIwNTgwNVowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LZXlJZC00QTc2OUVCNUQ5M0M4MzNBNTUwMEYxRjI4MTMyNEVFRjAzRkJF
+QjNEMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqgeo5YaVOVQovR9N
+LARoKG/9OW7PGRZMEma7qLI/f6kXR+oMSsT7ZsxWH5l8CT12XFjwImW8KQOchivY
+BSWeswHnDgTvI2VJ+LBHwTtst0ViOBGS75YQZ6Dg5Yqym3nqSYRUG4YRctN9u8Cc
+3mE4SBetcntwjAP2xf/5B35aoLOjOm81arS3id9wblYoQ99kv48Na0Dshm14+EXd
+At628OBUUylgc1NItZiRGw5dgu45ZrEVGtTS/iq+pY1NNJB9GdagueIom+y+2K64
+w0+1YcTxbxrOBGhG2bLfBbyN7l1gUdijaMT5z0VwBu7HgyKIWqWRlczJ3Rc1DB/I
+VRl4jwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUjU9X/XbEGQDdjiqD5ps4RuMb8A4wHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAQN2Dh
+RgwLWWNeBAgtEu8eIcIF6Lj3SL5+Xjtv6tiKz6wG7ChHcz+P+lzvTx2ohxVKlnaS
+aWxOpy5U6ONaU+rW5PgwXOFPGiBczeP7rw90R/dxc8SvQJtV53Rw1vXU+nfD1vVa
+Z/tstGqo5kgWZO8p2hnaa6XNdBe8kZKQp0FXG4cdUTvABXNYvj1QHhjm6pQpUrXr
+ypYWKdvkRucC7yihwHqaL2wpRVqPs6PcnCftiviRgTGFLu+6HaPEksQF++6IWDtg
+zHr1ETV24TtP3UsRMWM+1u5AlVj3lkNLzlCkhafNdXviQ+RTmMVjxdZWj2uzG2DJ
+T63uVpQ0PR7sMnuvJxYRdnMO9L16L6sxDvkO7rrYPlDHCyTqgleVCd9uSWcVc8mm
+Xe74s62A9j59sbFEC+FSvuuPXT4AU5TQlmpVDyp7KJn//iEdyeot769IgH2R4Bzy
+KQjAv3oDcH5Ubm5lbL267whO6FO4qvgwZcwjEF6EHqRycWfFR/UE/aSzYOc+HyV1
+Wi6yilKJVyLPhun2l6+hYm4DBuAA0aQHWrHHvoAW0fZyBOA0If0qJNtVDmpNbs4l
+gGIqVy+5vbRQXotlKMqO03YcCuHIQSSJfwaZ4NRu/OT5869Ml/D2ULmlFZvog8fj
+rfqMiegTcmahfohOqnDk1aVgu+bwnH+6b8NZPg==
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId 4A769EB5D93C833A5500F1F281324EEF03FBEB3D 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAhNGtZVcULt05AAAAAACEzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMxM1oXDTI1MDIxNDIxNDMxM1owQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC00QTc2OUVCNUQ5M0M4MzNBNTUwMEYxRjI4MTMyNEVFRjAzRkJF
+QjNEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnIVmLPLEkgjVXV8h
+bdeYSRqUm5LXJdsb7HkyTfhpPBiD/gLu6lW2jQriT3J6zRtaIBPHLjJbrFEZn3qw
+dmQA8YwAj67WHV22M8dYDobxseK8SgWIYVBnlxLPeCyPI9Vu9IBMVNjd+P5z2GHs
+0KqVT4t9lCFyaBoAGYdDzf3XNaFz7bFkHWiVybr9kMQ4EdflW/p9M/ilz6yCr7H1
+cD6h7Uh+kCVw1Jn1cGxqYpQc3uVFUAUSz20TmT1JokvxMNejaRQN7XjdGeAsGwnG
+4pnQoRIsjsD5+qyutQRUf0iSs48irSw1GxbCvDTbNcosCm0n3QA727DoJC1NkTVD
+VKrWh5ScwJVfmtpeqknHUT88xA8SI78F5JNPCnlpdyGt1Yr7SdHuvCGfKThC1llo
+3lc4oyuU+4/e3na+gsPzPZCC5Vgx1/xivpi2+25PGHTmKIvGGy37DsBl5tod9FdH
+c9rukA8a4uAWYoX1QfB/SWZLRG6nzwVZKzYctC+mWn4hyMfUihwjwy/z+yO9BYX7
+uWi7Y17FTagbE4/yw8u0hRlnYrHXhmUesI9bg+zFvST4SRRBbz3u0Z/O8Oat0oFU
+rmcrcD7jLEDx+egNYDCZzAjakb/w+cSKlgn4t+Rn/AoKjDJM03sdw6ps+Yt3WXnN
+Qv3WGlA38kc4K4WRN3xaYgO09dMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJgbfGgDv5WtqITm
+0hCeqlyLRdlMMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAT/hdervkzJ9JjxqtseAXOXQd8VNY2S5Bl1GbhaxEj3zo
+o+vDkyR+65zi/oVYmW3RRXS2YrOX7LMV7R/pMEwkp6Gkkc/K8p/g0L9YzkjYlNuK
+4clP9IaIbGFFl6YmqAifQoFYZmxrJThHLlLfP4iqWMP1EFZKv9XXqBPYuWm3Imy5
+OAy1jPyQS6SbdPhxLaCqUuumxT65p82QGlQkz5P5p5RmSwPFxzm/U2fqq60iEgSt
+YXLf1QzL5JszQ2kWLEdOwhVbmHKEpbX9RXoosnBB/1QLZh6Wrm2YF0x72V1zKunn
+ZNRWqgRLvLkBR5E/v+2T/HdWQrctra+DPyVuP23eOXrWIqdA7kBfAvp1HrkHU1Lh
+er/3S18NSJINY802jnlAbNP0JV/Tn70D5wQhN58dW+zJiJR/FYbUYKypcLRk48TH
+y+BiCbwLSGWoj5m5kdcewx7DC54QpcVtj9G2BUHLFPW6s/aVu4KpUs1FoRNAFeTa
+hR3flXZXYoSCvOg/fDR5sZi1iHKul7tZVb0Fxo7h3OLRIpaGXVEKn5u3EEmzkXxD
+q3Y3AsK610P6dpKRGcHFJ06R04NI95GgwX9RXNPILDELB7A3awT6IwceG76HFkuM
+Exu188NHR7OK4pgN1EV3inpHBz8aQ6pvYvaIVzZsBJek2EeplqpfBQTJ1Ym4gAE=
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId 4c4b4d648908e45bfe5a10d36387a688aec1cf78
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAAL0WmwUyZ6aeQAAAAAAAjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDcxMVoXDTI5MTIxOTE4NDcxMVowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LZXlJZC00YzRiNGQ2NDg5MDhlNDViZmU1YTEwZDM2Mzg3YTY4OGFlYzFj
+Zjc4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAseU08dQ8TkTP4vn+
+51IBHoLM4+HiaHP4q9+hUHmS99mUt5zjwFeP0tFtDRaBgHMI9BTOpOCfhpa1cGNh
+RVVOvlW40vKDnVsZ7hVDarczS8mPGcLznpCVdjPOzmRt8Rj8J8NFF3fZJlFuy2rB
+frlVsroIm++fDwZioyoop0015Je30SUlSFr+qd81OFOs11xPwDV2kmvto5+tnmlf
+kZkWz7aFFc8Hqqu+YXDKncJmlx+6JzJxwLlaLWQkDDJvxSdf6W9vC8GkfZsmR9CB
+MgF4ezQZWbKsYZsr93nJjHCrd2fOf1NJhWO6C3AtBNkbJ0HV/jbK0M+5yKwmsRoB
++iUF0QIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUSPLJqPDlLkKIu2QnxccAO3TKQzkwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCOhKbv
+udkFOEOOir6BXOh1bvsDMobr0Sth079hOe/NtPHsSAHqBO4b7lSEzixSfLhfIQBI
+3WtLXU86WmpGR1OnuM2VOFnCDEpsqDCUoWOgd0F5jRVqZWV8MEIL7Ua+GKsWMlqj
+9zPsWkYNX0hx1oGejp12wMGKvYI0+PDN211MmOzFxksNoZG9476ltTD47w5RUCLL
+Uc+1l02Ty2AP8HOviLjl6o5JchXbYiKQWHMhbGD9VMBlsEME7+N7aIxZo62KXPNF
+Gc8iyLNfSTaqFVsIRsRVSbFCX3klKPj6J9naHMx5XLZ2smpqDWvYTBDZVshNGy0w
+OkhwsvnJLzPygiTxlZDpKUzIxVvKUt0RsutgrML66zBWRoRDoO0a5zDzxsb+F4Mw
+5CtQVE7vClbdVxTHBp+dxg+pzgzmhzjekZWF5WzBGik6VFBTgfz9r5KyxtByuOk+
+OUtDQZTFnuEFNNn+GCaMg6NKHOVk61DjRGMGsUI8g29VwPJd3AsL/V6vf+SiU73f
+zBYpydBitZzrRe5KPc1NkDPVgmHCygrXU75Q1NXtVJ2TSh4wwxfG8h9JwI6T9Osa
+eMlhsAYNG6bvklrEOqoPCUyTyCDYHKLUFtdQfg1vYBBuYbhWPENGugsb5WV1025D
+BPIpU/vJLwNvGphtijrzH7S2hBqczP+RHYxNdA==
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId 65957CAE12EF1B1A875D951A9425B1BC1D2B3BD3
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAGCPeJuMtBw8KgAAAAAAYDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDYxNjIwNTgwOFoXDTI5MTIzMTIwNTgwOFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LZXlJZC02NTk1N0NBRTEyRUYxQjFBODc1RDk1MUE5NDI1QjFCQzFEMkIz
+QkQzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA94EKp/Wp4GLPOTyA
+B6tFZfKI0AUjXAD/SloSJcLoiumW85qNA+zUwyJSaYletTynLuUezjbmfhrKXm0N
+Q+lKzZkPIAZPLemf2cXe7shaqu6lGjo82LyZRh+S9/e2yybiFkXMJLfQUb5pmO1F
+OsJQgMAZ3Hp9tIoBcTMA/sedG188/iQ0vbiK7GxmWJFd+M6TPPHW5x9j0WxowHUi
+Jx1sHVCFQQ6D0qFJCaDNocWZRBJuxSQZx+9qW+VS2R/3/M3DVMYcWT7EagOuT/aU
+ul2zi8XdKcBjX3htrgGybqaQshrmk3w5n+9lE0CyqltwoABBABuJhAxAPSOfG0A+
+Oz+R+wIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUiquI8B+w6NlmpHjRhAy9bce05qAwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCPMJsi
+6wfuDSr1aqKEbYrVt9xTKKcU7BNo5QhQqfXjdsQI5lHpyMVwdCFDyGRIm20fpE0b
+DcRk44eo6oVSJ8P68RUo/5puKX4JkkkKcAhQ6khPxTC1V92BEsKYefDtjmlTDxRV
+VCYV0Jam/C/OtR11wTtVIp7DV3NVYbQrRqnggzjTYJp+lV0D33YTY48Io9QnrTqA
+UZPYuxfBsB67yuG0SFuherbl0FK6X65ufClazjnJ57Lh12wqtaJfU2atiVFNrDMa
+yMgQEeEFgC1nyqGBcMPjvvnjDBp3KjBHBHZrxY6SEvm60CogtYUJMsoDKg+Iuc2f
+08ayeF1hnrYT99xeMHm5kAfGKbvdmX14TYnRGuTt9xNhcKDa6Hr3QUjF+amskJxm
+fzNZU7io+JyWCo2O12QA/uJv0DFk+9iPjer8d6JAEzZneI1N0KzIHKeB0gSybrWM
+pyMIh3t15rBiGvY5JXTyfmTvAJwQMawlw9fdsOR+vLGu+Zf1eyCdb0Lck5kmDbyS
+7qBn1SIUR+oqVfE5Ql6G11jt3y4QbvshdPjTmsvWkTy5jzFIoj7n6n4SzAVKPoRB
+LouPZ2c02yIy6PMX6RuAHh/eqAIpjXQV0zN2co86q8WcheYe7+hdJI5GVhGkTt2H
+SVKm9czwaxXoOPRbvEib7ynN8+5XnuKJIi9T9A==
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId 65957CAE12EF1B1A875D951A9425B1BC1D2B3BD3 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAhtKc3+DmFZf/gAAAAACGzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMxOVoXDTI1MDIxNDIxNDMxOVowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC02NTk1N0NBRTEyRUYxQjFBODc1RDk1MUE5NDI1QjFCQzFEMkIz
+QkQzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvFiYG5Sm5jVrx2cm
+Hqw96/92xgOTAerND/3zEqmGAa42ZnL8dNGpSyRxlLq0HYbJ4zWfhSFmOHEkzRNQ
+BDe/TeAxnb7ylE2huKLICRiIb23ASGrfTi98IS6ddd70V1U1zAbZkQ1KZMieE1Ut
+EM6SUQ22Z51yAf2leF2yIMmy7CjxXx/zRGFA6CbvFC5KaeVq3ttM4xM5Kff69UAu
+of038smoRs2ajN4jlTL6ql9rmxbLcEcODM4vn2dQS3o8r+dib7FzMs5gxizdsDUQ
+daewL50Ld3j2znhuqaXh9Jtt4/oy8dYX5131NfiiDdRbKD1H7uWT1m9PzAMlhdYs
+Fp+dAw0ikSjZq5DKEFK+TQTqcFA/9AyhUFVDFHp/SwgcziRJk49/1vK/Oz7Ok62e
+ZmAw+SnxwG6ghwVQgf1JIS37+PUzodyzkNVH4PndCaMj0+2vQhsrA8rIMHDIRr+q
+gA5scYqotaGpdPdiRoN6t1NZ3pVcgCeec3LRWawh78gQEv4JRZEDR46mj9umLJTp
+o84vQjOnttGzohM7BQIYhMGMDv3xj3Jwfk/FjuZZANWR1mlpkXZ5uNgI1rWgTePi
+N6O7eNbCrYbg/gg8XdxHk2N+gLv9VsgctNRTqdbbou1dDbHm3FHsk5QTbfIPVRTe
+FTiX7QRi4ilYnJXfoiZ+KFY0Th8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDpVjY0+ij/p9uV5
+huMNmMVSl6EPMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAP4IK/oZaBHVhDUJD+IVoaKUwSfV7efIkYZuTEzWnQHkG
+4WeCnzaqo4tnsRha+SGJPSW7atwT18UGucfs+vSheKlcVJd1+1j9AWdUcTFz5oIj
+oqDp7hr37ubg7YhkyVccl0Kdu2s+v2bfq+cgLSGnBUOp0A3GBfqdXDZVi2GjMWar
+7gMf8+SVviJKJqao4CYVL5fF0Q1kNyjq4qwVkcU5yvsCasMD0TbSVOrP8gdJTmLY
+GYizYICO0CXG/L9068SxMvBQ0QTKgqgIouRjgEoJUU3Wzejn1PsETnyzMKarIybd
+mKVJ888jX+j53wi5ZM3JF2P1mpydUpgY1jGnUPVkUTeINm3BK4vcgA0lLPOCMs8I
+S5WOQtaXqpqDSqr3u27iS8PO8ZN3GW3Mex2V3QISqfZzGpZxCtAf525pqrNoUvmX
+b5pB+visa5jQIqvzeCGaaoedOIIC2lTHCXF36b9Erm0hqqfVQh1n5WLoWidPOLfu
+3xcRnH2OmXwyDp1YiiBhnIhZ8SzkudI2EM7YW7Ht5ompfBgr+JO+7jh6FsIuTDwR
+cEuHiJuq3splL749TDDPTKHYac/5FtAdPzSNv1ZJMoZL1QEO14lR3EmkVbGJ9uc4
+5uUTs9X7DqTxvTBnVOmLhuRDSh49R6gTX7gWBPihPnG2qTv2CoX22bnsoDyAAeQ=
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId 7026D09ED935DCDC44D84D7DA75CCF0ABC1FDE0A 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAekk3cpnhteHPQAAAAAB6TANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAyNloXDTI1MDIwNjIxMzAyNlowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC03MDI2RDA5RUQ5MzVEQ0RDNDREODREN0RBNzVDQ0YwQUJDMUZE
+RTBBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzIv27m4a/xMxgD5j
+Sm+ljZ0zP7dLR8KlOUtEm8X3DBHbbNtFjzimWKj+MRiTyjaFAl9iPlFxwppQFu1d
+9jALJMxGmC4UsSkDi5FY1S8RhTJ5uhe8okr9oqcRpm3Vgqm9FD/h6x4rXUDfZGdV
+Vnt5gY1SPGcd3yUzM3XA8N2x7tYuUJQNA19q9QINiQd9PyC5sgY4hh0i+3OaFt5W
+IT/etLFHk+x4L8sFHBR/d4DSDSW/IaOQPrhsHqU+CfqIWdVRjPmnqCiBU/G5IhW6
+9cB87JvXlhJrv5PoaWzKcgQiQuWcW/YEiqLa4WbaDTwolcC+G3Ku03opFj3GIBMt
+2TJ68I9tnTTIaJ5GdxBE5RE5QSq1dFXYIuGW82y4tzKU+rKPZxWKsi4ISrM6ppFJ
+dOShZ3Dwc/DDJJzvsgq6wVhDHjIAIfcpqbu+KmWcPlfsSG5UgRxhkIJkoAobQlwg
+K20BIzOy4ozgVMGdXSuXVpKkJpTtV6wE70YgNii18dU+HoQskTBlsg5J0xsqzTd+
+BbBWvdiFSelKqTWlYmusWciOBlIEWAJd63NH5M81MF7Yx5T/kzwni+99FLIy8fnW
+qxIn2+mSjnLNyNgxSYrqzDPLoqAY/1pck+yD5FVG+dk6Nk+u8meq39lP4pHSFHfQ
+YFMRFMhovazlCuWgLih6TDmcA2ECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJYPXyLArNHiIk1B
+VDkE5fnl6kztMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAOCf25Xfmw1EbYD2qZLkh5FN/EWl1uCHnwudJ+Ll37RBs
+9A6coHZvo6oObdgoNmoYHIB01qjvF+ZejM9k30jX5SJ7AssdKycL4vgoZ0+Ogxxu
+LC6eI4YrxHv2ldb9ugo4NMaJw62Ktp6x2ZhFUZ1K02iYFgmbjDpRwbYSl8do+fMY
+BNHxFPLqRmBPrIzKVsjr9Q9I1U/2e3FK30aw7x6gm1imWcsmZd6qSARZst4XBNSd
+0jYej9JmTkOQKmZVzXx+iciCi4Z1c4NacerLXdd9M/WXft+L74NGZruye+YFtmGt
+cwBd/Ot0FLOqfuYqZb+tVK1koCnZX6XKFDmvQMxR/J4AVj7J23FDxcuJkK4vaeju
+w6VFMa3Q0PWkTTDIMhJb7ow/WGN3qf44MNxqsmm6IIRBJcWxAnKRn52fSE5bP0dy
+2FCuZ8ckc8tXUc8C5rbuKzylQK2ijBUDmOF7pGVga4LZwUTSTTQMgut5HGBSlmo+
+Vec8NS6HwYb87tIRZfAFZF4B2s3ahxr0PBBQ6va2BufUXOKwB6TsPzRo/6rozZR5
+Jf7eQpgpnpjGuWY+YAc2H97RXgKQsv9PXI703tjqtqJko60xPr3g9rzfBwbjXIpS
+UKbbnYMKdGxp4gOqNVRK/czmIhatCDPd7G2hCFSD731RVvqCijrtK5Lebza2fQA=
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId 7568FF26F37D11268567B6864EC72A08C818891E
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAABRKf77/xwrt+wAAAAAAFDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDg1NVoXDTI5MTIxOTE4NDg1NVowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LZXlJZC03NTY4RkYyNkYzN0QxMTI2ODU2N0I2ODY0RUM3MkEwOEM4MTg4
+OTFFMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwYFutgck4T/xD8+l
+V1jzyK8UQfSCI2BrCbY39BN0vMiTnwndEGcoBNPO9ZT2VRsFxFm219tiaj3mPkmm
++dm1UON7sjh4y60+mGbINdo2VUIyagazgWN39rdoiLoyswCe3f8VQckl9Q9ZEUSa
+5SjGEOXWMSSRf0rlroLWT7VlAO4pWmAQW0sfgjmd+DtCJ6eAZg4vLeCCqukp06BY
+PiaQ9d8vDDEzmPWXMPTyg6CNSG61GoQlvgL6to8lbUmoBhvllNZvHaQNcOVS8/45
+pPRFZQmipQbTBBS83Z/S3vx9WkYYe/82jgAzO9OK6b4gZUUdfRQACRBjgnvnkrg4
+d5ZCUQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUEYOgijF+x/HPHx0kBWWVxx5jQNIwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAV2ive
+LX1TKD7R9Vp6wb3SghwfX3enaa+u7D3RdlCvH3Fr3yMXT2f6TVDGXgchZkoehcDO
+TKCLiG81g48edYtey3G4ja/x4uiorXpllEt0xgGjMut4raix6UlbdYa7LWan3rNN
+6NIht+AVyCnU1dueYZ4cfr6VQmAc4sbwgyYvRm+etsi4wdmpkhNRBfajYLZ0RnZM
+IUHV5yxBlJUdWI3nXnkC3LofYFLSI7Mh/rBqg20B3Jm0WNYrzDeCLio/GbpkrO8N
+IKYezc5njxr/w4ZgtkSUe62wdjuaWP+mm6OP5EGW/CXoFzFP1C7aZUwyUdSpn9dj
+MavuYonWSNsGOGWxf66DBlJgoTRdM93mC8okdQAsdkVIckUsl1J/XabL//YfEBuK
+Kj5hli+QQ5JUklWQl37x8J5R8htUpkLBDqqLiFft9AtlCdP6MppNsNU4vkmNDoTr
+wJWA2S4VGjui8vDQKFG2Bd3/nRKpvBZsnZYygKzJiGvTjLaIEM/WfzL9bMBDyKNb
+rSlaryyB6A4Y6jgJYmVAyP1M4CRzfw0/n/qwwcFn3zriN8TKr1havAXx4tubd4V3
+WkRAcbaoZ7mZRj7LH72h+3OOg6VZq2OlyCCKbAj++p9oGFm1thBjRqztQKaF3Uiv
+3lZjPoO/cYLe9gWEQr1Jd6MQzdQWocuQqU5Otw==
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId 76FA7DF0C07733DC8CE24E8EFF196D27788668DA
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAVGTdpP0T5xpugAAAAABUTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDcyNTIwNDU1NFoXDTI5MTIzMTIwNDU1NFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC03NkZBN0RGMEMwNzczM0RDOENFMjRFOEVGRjE5NkQyNzc4ODY2
+OERBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm3I/JYk90zn9XdtY
+kTp9Cftggw7zgz5t6tDw3W42CylkealKYUkFfE7bfWK/pya+YM3c0i+tx2OHxfNB
+wtaJuPwHoGRBc0ADsCizYn6ce0yKxBt0rSwwJnv6jiGwcuvYFxfMY1igXqoOL5Jv
+JKQU4redNaKDyQ2SOF1PdxdeHtKkhhFk31BdB0SE1Roei0S1BJFqvRa/3MXK8Eq+
+vX07yNyp45o60xMEpSFBysaiMZDfnmbTeu/EoqBE7npRTHqX8jZJCOUBWNwyAj8C
+jLBpEN2Ur2O8zKVcJ5e26noVgWjSNF33G1nWW+S3UymzFOKc5R/MffQJ8U7R6FQ3
+oht39wIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUqOdpZLXNttbIODWhcjYHccNqG3MwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBk+Ubb
+GK9WHEUnV3iNr7KwgLP2aktlabYUBNFF/Zms0sMgBiImWh07jal7b5Seh2jka27H
+BKcTZTmytUvu0kuZ8zap8ITYyrpgbLq0QxGhFDgzw78XsKBD+EqLczVCIZ1oMETF
+VTK8V4evWNNW94FdzkjQVeNl4KqZsrgcMadpNZYQKpaAWAJHJbFazAulXEH9yFJU
+9IPUTUbGdWnOdUbs4zVcXO6rWO7lPhw7kIb8YD0iO/bB7N9xhW8bgyRAXh3bJRte
+l+g+MChitbe+RuxFW49rheN1XxSHhGqFiSJdXqDpofSIvskB/S/byAbX4KWsZByk
+4RzsKBfm3MhfLkbEmm/u9MPjGjc9ouSpYrMXknBjFOmOnBner33WmdtCNn9fOFqm
+2yQwI1go14cir25yZDoVJnnn1lgPQ735toBgqVEb+ZWH8B4Gal6kzJQHDSdHodUf
+uk2vRgKyglVgDfYGZSyabYsNoLFpikt3VKkP6jAMcGZAPmFjZ8ozqzvZUAmJ0wxx
+zu4O3CZroF8m52adxF3ICOwbN6ldGwF+kuYLDLwbx5wpDf+tNBB6eKZIrB0djlP8
+mVC0esd0/jfeahJCG0EXk0BI7MLV/XUi94bZEzNH4edHOMm1cJBZgmnDGBZ8JQV0
++MUgS6o45OOkZ5a7uFnCRYPod/5PAe+kUYDRxA==
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId 76FA7DF0C07733DC8CE24E8EFF196D27788668DA 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAbQJxYLTELC3mQAAAAABtDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkwMVoXDTI1MDEzMDE5MDkwMVowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC03NkZBN0RGMEMwNzczM0RDOENFMjRFOEVGRjE5NkQyNzc4ODY2
+OERBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArMo+Pe293PZSBty9
+3L34M2WnEhKzZVm9V1ZINZQqfLxpke/tyyW2tN7QOFd7/Hl/l16VfWVLZQ5rMbuU
+Q8//10PvtcZt4JS2sFAeRk6hzEyHyuFZ4c/OZbVBkjb/WR2BW5+tuDCkBtStbfrv
+V+Dtu0jU9EchcrwQrQnfOAvXBfPtkEAq28cqNBuJcZqZUskUjeugEK8hHCJKh6dF
+N7jCJJuasMwnwpQU2XRDDWdTYQtnfhHCCuTH9zay1g4Wgv0VQnEE1bQvAa+ru7S+
+vFFSM9LSvpYJ9sGCyUCHM+iJnn6DGdXzXtIh7W4Cn5Bjwnzk/5fScyCfWhYPkP0X
+6Y2AHSvdqqcYuKIbeO/5mtLDmcjDnK40sdFF03u7W7gPIJ7Msu82SGSw5nOa+lS3
+fPSbtLVEI8TqagDKzSaE1J1ldG41KAaUtIwr1QtsDgisuhwxUh8Fr6QEDtZ3dDAq
+6Sk+Ea+BPqE+Qsu9BRd+y/uDjZO8qAEhGC0jluGSfruOKW0JYHvci5AswkrXfGL2
+sOyDdeDDzNC0rjSfhwlB6Tn6avwkp+/EV9Cv7GSVrsErkop47/z8cP272DK/5+aT
+u8mjzNxebCYdn6GDvKUGDLmwWA1m2OALuH2CDg1kGASqTy4FtR7EQB4EQTlAA0fM
+QGG1J4D+SrZzG7dJu1S9jQwM5MsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCs502EEmHFNPr0x
+GYBZS+bP+FiXMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAj3UYpNKR827/hkfnZsIIn15gqc1bYinT1swGy40bERL8
+1W4Yxh4KufBkYr/ZbdcQiHacK55NK7K5iPORlk3epfVw1MFv6VfiHfthtag17HKn
+AoztG6m6f8crmkXhtpsRq8pddFWtclsP73YmGcWc+cAVFLXif+hSZqphsGnIZq2R
+Zv1e652vNtpsmTPAGAP4EjBlPem9A87zQGQ3gGgjZd6QpMNn9RPS1ExSVpEOjGt5
+H5IqI5Nr6eieQTsC7ovTPJb54SkhDqL/tPGJROcHmSzKoJr3iAX0HpWmf3O8ElDc
+2w8EVshjjZd7xJKp22zU5GB0RnE9mnPtZN5OtpJYJDGuIP2Lb1i14SrblvWUWDLM
+jy57LjwvSlhZXKfdNtVUL7/ZyqE0apm1lwB1vgLUiBtY/Qb9YqopIlcj3IaKEnny
+UIXxvSVOeKmneBbiClZpjG1PIP2kgr1DNpoFAXWqXethTAay9F8Wggnv0W7zT5Lc
+9fRXoW5k/lL/ebQqdr3RFkx87d5l/p21IMyn6Xe68AnL09ofpgEepds/fc0/2zGv
+Ropf3PxfUTTM1VfTEI2As7gm3gVwy0nBUpFQrf5RK7aIiV7ti8+bYy8YutA27nDT
+DxmouB72jtRx8KT3+skvAG3qYAtXL5LDElqtWo5U3tD6ycYjRMmsuF5w48MyL5U=
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId 78A409C457DE6926F6DF42C6114EB7E56A9B56E7
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAAg3etGcgjZYJwAAAAAACDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDc0NloXDTI5MTIxOTE4NDc0NlowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LZXlJZC03OEE0MDlDNDU3REU2OTI2RjZERjQyQzYxMTRFQjdFNTZBOUI1
+NkU3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApC8bT99CvAKli6p8
+6BqwCIQfUR9GBUf+2X2QNsrSHwNaAHKiAsc8YeqnOsvDcMdR1fTLxpYsctkKNBkT
+MjWN0oVOS41U/Bx8FRSe+Bo1zztWufrIWKqcFPselzseLUpoDOPSig1pxoyLupU/
+uxmVbiFeSq50UT9gzZeYiYOqnVAzHWm/ULvagYNS7tXEpaU0C02m7PEqkEtdNRpL
+n5bjHP+ZXZd08IoqfGTqcHuohsliZwMh4C5U4JlaHfev7vNgO/5IFV8ZQ1zBfS1V
+jBMkeYyAWdruPzxCr3/DJ8aTGOFzguZiDGlDFgLvBAB8kycTBvsv0FVqM+MJKoxQ
+LuyscwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUQhI8YNfKS6s6YLEXGvBled0FRiIwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAeXH2m
+1ZYuBV11imrPYY9401qEQH4bK1ksl8zGpkPnwZlPikeCW3nJaV1mydzy51ZAxVhF
+OZ9BgbjPKovf4mM2nX1HrczvCS27z6piC/5PGLjlR0BPmNK97nQHUrIh38HIugbD
+VOxcClorwcEdpIOdfdChGICAPg81X0SzmCj+WJ2rdGhZrUykpaQwwo/GH5RsLsk5
+6fkOh+NDMpXiwjhcUJPDnILSSSd2yl+xm2KjSKc+bRS5nxRGmqN5Lr5rVRU5ogYx
+iub1qWBDVBXSsZVYxPtLVKRHLAjbutg/cxIhQ/yzciRxHHmjZ/uHZjQlZ4G8UODx
+5VwvIJrt6dVy7DZf5GseV/vhvZe/kba8CroGxFje1KmbjReOyaNJ8rKB4mPqXY3q
+EwZZF/hF+h8SXRjz/FpjYhnMYiTZa40OaEX6i1jE/Vs5hYxAk5LQpWBECLOw14Nr
+XDbz/oqGQndu2MSYLUKEENJl0CXRCIH8g2NLvzJ7Ad9DCPhHr+ra1njuCOm0SM9v
+QuGRBrb3Ju3rdQqjtCooYgc4QPqLZlxyFqxE6XSht9fcfKVvAfsp05k2LhpOqmHV
+zyZR61eednlW2rG8aPzuLyhYoC0fLmazVMkxx5L0SGM7xpzpy0k9G0NCzOWgXOuy
+SvXEtGADUBbutaftaSuwQ5JDHBAuCC//yqwRJw==
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId 78A409C457DE6926F6DF42C6114EB7E56A9B56E7 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAhcacaNiWEfa/gAAAAACFzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMxNloXDTI1MDIxNDIxNDMxNlowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC03OEE0MDlDNDU3REU2OTI2RjZERjQyQzYxMTRFQjdFNTZBOUI1
+NkU3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArIaw6F01+0J2PXwD
+Hms26sTh2X2QHlb2oVsZIiS7s7BZM6+eCOuGy8rPryUwC5P3TkADtzJs7/9jrzqw
+t+dJPQ8dGHQK3mp+cLb3xf4WDupVnYOTcLmDD9ypg1Kldc084xQB04yf/FVHKPWk
+qdpNM7rMTBZeqikzOdxpH3KEDqnbskdT4jdfKQFlX4IymkuNX823XkJHZfxtPOV0
+WstFkTJjyZFn+RKnRMBYMnjwzGDQ+cMCWsxeEAFcFzmCRUC22VBQdh7eJrxMHSX9
+OTEJjqQ1x7BOOZk8unimoGGCI2D56GSF7YvqAFXnf11TF38uiIyQkbjNipHszlfG
+pdq1F2ut9KtcmYM+Cy15R9X31PBHoKjgPw3Q7gJjVW/4JUNC6e+45AH721bNZ4yv
+YrTW+V6Eeo5pvJDIElp1Rw+u47xGsFhgdCYdIAjryQgWW+xOIlHmuek7xxVbkAoM
+swlnKNHV/eOYYolCnGvHJmxnl5r6Obc2qrVPi5EWJzxjeTQe/CI/5x63bpHkoDDP
+hEwpGo7XT5WgJLpapt9skGZFvm/KL7PLiIOvJNIO5yUzCgSuIm34+FgwvHk7wh3x
+3PGdD/ekwDepk9NyYBMAimBpFraC+Z4q9aAHcoV8B7JKzsfAUpkCFZgfYF4IsfOk
+wHYoAvSiBEsdYZoNL/z8OSPhowECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAe2wq6bxr2Iu8ea
+v5abU3tXSutqMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAE8qwd1UAdcMFAvOdgpf9JnRNQs+ZkVfmgCdoGiUirCdQ
+l4ZOyiO0wmvgCN5EXYhvqI0kFhJbK9N3B+YwL3n9CZ4MIGaua6If+3lONyibg3wM
+Pu0pODCW2Mc/2n2jvYpX/eqC1/wkF91rIsnhyJhb2s5jomzBBKRAqHJgXwLO2/Y3
+rE5lQLzoAAzmgJfnC84LzpJL2ngnV2emTcZbNOTf4VNsK9bNUUG0V9IrLLArMOm+
+YoiCK5nj6359oqi0alnxMzpf0qc3sSKISvP7xr2h8u8tOmkmZH3ZyTzlFvR8nPBD
+aF3AcKn1EdnKPF2lgrn0Spkr9F0Jv1SKMwoO9XVRg0I+NPqhKfrftgiO9J4+Jc6n
+jscLeC48vs79aQ4iGCDJtM12Vf9aYcATg7tB0Z7VyvGJimEbEZLNIi0xa533ra/4
+ivR/k5q8lso3DLRULEGHG47L8yya/kxiwd/WQaR5fnSl/S3loIjS8iCai5KNwrh3
+My6nGQ5j1IM1QXbCiljKN+5zP93PsziHy2HaWSOdT1mEJ5o0HISWoMNStVAOYdc5
+NvvpYG6K8OXeyaPvT5ED7Ia9OKIFDT0k/DkwolSeqt512JPiDUIEfLS+tB099Zqf
+7uCklOgR7Df/SnMnEzhv7r7ymTm7DXOGZFpLOzhDtu10zfAJNaycgmaLRk83/XM=
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId 88b3c13f6105d104229f5ac0eb499564acd473bd
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAAswdhspDj1wpgAAAAAACzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDgwM1oXDTI5MTIxOTE4NDgwM1owQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LZXlJZC04OGIzYzEzZjYxMDVkMTA0MjI5ZjVhYzBlYjQ5OTU2NGFjZDQ3
+M2JkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmyw30YmumKxVt9a7
+u6jp0MPM6gqzF9O+Lxn4X75+2m1TR4aJimBFn1VqX4h3v8fX94gp8c19lUF95Nje
+5WKc8FB+EhjZrCgvBSpzXf9BBetJjaxTqyrZbd0enlWFSlrVb045fSn/p8JgXTt0
+gQJoEkCaAx/bLICPw0Z7PWIxrS6+KmPAURUljXvspFO7K1iacLArlRD1ZS4AbPDH
+3xQ7Q+KtdGVlnceZVNNmdQ1UQWSnv73Esij4b02dQ4NrQtqKQ+44q6SUu/v08QFA
+YP1UGzFkmnSIl295bS0jm1cMAe5v7PQt2Ik+FC69FhQ0TBTF0ILMZHYOQoASma6/
+BuEYswIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUIZUetMmqcacuIrG6lS89UVENMIowHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBy2vwp
+nQOIpDE8sIUWL44STZL9BasPWONSUzS4/VFCHeIJ1KlzroXe+kQLn9bO9rIfeENa
+SyTfvDwBHa+VKBprGZ8LsahtXZ+lLgCBUEjJi3DsVp5HtHUSog7/BL5LjtBMoeHW
+LNtSHskFqa0hl3Pnw5S9Z7a33q9stjVVxCuYn1/vG2Id0Se7zN5/yN3A/JepONgY
+5kCYxkuiXZDYrp3kNPZ9LoHhceT3BALziInA4XrD/CkZ71nVPTfWvCBb9KwBWwRo
+7Jb2/pOBuHyLmDHqAVI/sPBA7AXG7duKm6/1lBiSEfKWtf4at1Yvw4BROqL6XHHf
+V+S1fIMbkVIEnrVMYSwPEFGTjpTVQIt5NwRY11IybPGOqaUCUNRp6D+65NuKgcTd
+lnT/lZo7aAYLy+40Yv0jM3eN8ZYwmIq6IkBqQbEoJilsberfDkVD66oT6s+vclVK
+lD15EX/qz35gY/qjgjlsxZsGkM5jGPjrksBtyC0s9DiPFrMO98V9fpZxvYiRKhwZ
+KbYbeYCpUvx3jgH/LvxmOGD2TXyBXduassZjCbtmVubXoN50JYPQ6B87G3WSiE9T
+auUFP2FHRJYsBpYiu0Gc7Y6M12svLMzTrODNjsnZh+aCqNBFPNocNCl+2iF767Yz
+mIvKH5XkqvcZJrBD+vrkNlcNO2GSBjprEZ6eBA==
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId 8FFD47880E239A3A3A20DE13EDF101E882A9D21D
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAASdSINaB9kmSQAAAAAABDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDcyM1oXDTI5MTIxOTE4NDcyM1owQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LZXlJZC04RkZENDc4ODBFMjM5QTNBM0EyMERFMTNFREYxMDFFODgyQTlE
+MjFEMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqUT8B8DZdwt4wXOZ
+BUc3PNCrfuIsyEntSx/C1wk6m7dbYXiWXZVgfHssCjVcjhMZe4ou0P0PK8gr3FMh
+0eW4pCgdGjailV15lrwdmX5Cshrda1vXaEwjRzhsNkn94uZW1g3ycgGj7pzmWhYn
+yJDCfHK2a+9EAIpIln9bfglSNPCpBnIhga6KGxn6RSOIi42KYxLaPiApG4kjCNEz
+EmxlO0/7Xos6NbqrzhYcqq4D9gsSyG6c9xf+73HSdbsKhURVhpZIYJfozBKmaqCF
+XsIOpDIWvf62I+yp5v4BlSXx13mgCEmJPJ76JO0UX+orla1UPL7S1bYbA38JUNN6
+pmuWBQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUPuphYa6suRIZ529x3WdTqs68BqEwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBVtiIA
+nAl+VolZyFOQVRoYnqW1yerM9IGbBx35vafmLYErHizK9oct5uZNvj4eIG+q269y
+gIp78s0feu/MmwhyeXP/JVzGRsqVaxyPL/K6mXpJ8H2EoBUYXX8udqIgOKU3vSqA
+E9PUskBJYUoLSFaLov8Do+gSa9ljyE4yMyIvP8730Nx1HChgoColHtbXdIS6CvdI
+UF6piLK1TIDNmeqmXfaL93rFizvIC3pFvW+kLdDGSpD1fnSKAwOPqxasvbo1LcgP
+1SGcr9qz1ud8KBp/9wx06PdMMw/sgpOVHlHyIIPTpZibnda0vvtYIeXNG47BaKaJ
+vbli8JSUJ55HubYjH7AxyQyungVN1zutAulo7ldzusXY42pxoGYRxtz+E5jJ2pnk
+ub3/WHZc9fF0jQvlxfZlOYLiczQKwSG63EHQIRh48gwymC/2066eXpygfCoYaGJo
+0t6tk0JbEy4KZFK+fgP45I5RCwsCncHk338+NBFjHiX7SrLB/HaW/GWOId61NEBF
+1H1Ybefs3j0kUqFWGKlXx2SZHTmiC1gLQ56f/tgKxCf5TQV350maYyfG49DUDzE3
+UftraqhCcUJWdP3cpWdy2hCMO0q5eTNep/e2HI0O8n1ICUgyHO9uPoU7+hiO2j24
+C0tMR2rD8pVYE8s5/LCzTj9TlhiMpNkI9Hytlw==
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId 8FFD47880E239A3A3A20DE13EDF101E882A9D21D 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAhSYz5UxlWraggAAAAACFDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMxNFoXDTI1MDIxNDIxNDMxNFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC04RkZENDc4ODBFMjM5QTNBM0EyMERFMTNFREYxMDFFODgyQTlE
+MjFEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1fVZSH3oK0tDYRon
+4DdL4x2dMKsUeM/SDe2sMUVE9wXRUYn3aB+Wm/Prs+aepxezAV2w7bf9tJNR8ICC
+ahwCUhmHJ8/jc2maNdXT8y237M+j3XYeDUwKJLwWuNkqHXujOJmBR5rl0yre7o9s
+3ongKGW2giamOrumelWN9nUxRZ0us+3woZuHlHR22nExekRrcCHdiDaYIc6c7nNl
+122kHmwjOEkKXz7Lu39GJfNTfprI/c31AS5sjBd6qRnNlZOPANpO5hA0srdnM044
+J3ajiW1pHdxxwXlZ45HI+xT5Ka85LLjNzr4KUX58TOlIzkxgp3aqrwmOLBw1h/DJ
+dDAEDdMC23mGdLaFFeljXwkwGvp6uqNitnjnpK7hgpNuISut2bOuvwSu0fBToY+J
+B1ApgGvIGKCG/MsRzyFoOJq479Sn4VHe7vvk0JFrWoE1GJGEeQMFZ0gAJGJRIEKw
+Bic919/wLgKUsmUAh4xMMa7gs7sQYEtlxVM6gM5greWPbC4mTmdn6hNQEA+AZPUb
+FeiKfflofnVy3SQ8BR2yhdkGLSkTCIaSUYzaR2qVt0Eo1aU/1MvFLQEZgBn+Jmso
+XNcCkDQTXYFy9PMREGyAX5MA6uazRhguIqFTzZwkJ6RMg7v8iHs5xTpVObcmvbX9
+8QYUls/G5viWqMvCc1VqQKj/VhUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFP9FxCQNiJsJHj8Y
+eI3tPJd12bFbMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAE9ondZOTI57eYARh+sxH3AR8kmpU6d6BEROI9zdY7611
+TB2KBtGkJZTBxTdgGbZaLULIHa9/d3UlWdebW9xXi4VpeYVIelpGGluLvZssXfAy
+oBvhoYl19fb1t9lqvof2ElUsHqMkMrvfI1C1lV3NIHq9lrstx2RSsKX+MNADGCUp
+SQTvbW3caO+v5n6fheMq4v9ax/H2NzYa+B3JkM5DWIsrdGXhH6nvDQP6f6oXzNSD
+8jA5cQMVwUkTi1RCBbrTLeF0bG5lhdEVQ5iIk5ogY4g5smUQ1JkUM/Ao0C70wXvf
+Fmzo9GpgsBISnXUYQaLnj2X5zF3mwt2lCqIAWUO24EaD/qyVg9xaQ0yG0XPRxVUW
+/GxitfqhXVLbJ+tSEz/YOf1hrnATWhBr8djfQ3g5PAV93WzhgDHpOutSiSezInnB
+cNLLO36mqoLqrHWD3r8cbiSCrLvagEuU0thOEvBMdiMzBtxBvf9logirVnxSXFhW
+Gmj5GllQV1iJC8g5gxLP2MZtW9Drw/limWv8t2iaM+ycSRHmWxgFKyLrc4ixvm2m
+Ii2idlSGW/kBPUs75dEXWc8eHbcb8TRLpkKJRuWtX22YzUp9+Nn1C1IfFQczDNAx
+6URFtej5KXHaL8jkCSTrFWDkcTnks60NVimb+Doc1rTp89o3sEo8mjc1F0xFHGI=
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId A0C9DEC08FD39A8B59C46BCBE87FD9948C55F970
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAABodkYGmth8dtgAAAAAAGjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDkzMFoXDTI5MTIxOTE4NDkzMFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LZXlJZC1BMEM5REVDMDhGRDM5QThCNTlDNDZCQ0JFODdGRDk5NDhDNTVG
+OTcwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2TMd26m9d9f9GwrB
+5gU7JxQPq1PGqL1ZcGfew41AyscsT4fWGCqPfrwGC6YlkXWR+PNox0h2lXktRvGW
+bxhJw0xRS2c3z/9CNfWEux+exkkowH8lt+84zRwKKoSnYihXgFhJrJycmcyvByz/
+qnsUKts5c3/PNKwStUsfCYB5ozAI7cdPQm4vK4IUD8Th1HplIC2svQslgLt8Kl76
+W1sY1uklg2Be/jpNhZg9ayMSvlvm1F+0ZFzLizCMn3RUU/qaA4GNnRfcC3yjCmic
+cDcBDd92yAUIHnAsspVliphyXmkhSp5zU9jDYKmjbq1L9CyL6emyIc4Pr0m5jl9Q
+DurRKwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUL3SiVXr3GkhTI5chLyncNYbBx4kwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCVr0l9
+wRrUjOBNvKqXXl9cRyku3L7fUMbvnbUuIxj8aTm1v4gLhr0V3P6gA2iuuX1RydnZ
+uRSS3011YoUeNO7k+rqeRamphXg87X+B5OsbT0FK/um9/aCldXlE4zjHW6WmHSNC
+594VatM104MKyEMPRRfpL2+bCg3ahD0XxtNNuq4OzphtiCUS3NZ7HyP0DGPeMVOE
+9166m2c7lbIgWSCXptwlS4lcc7oYciKTTlGe+Jh8gSPHsugdHJIe2jN59Yfu2aED
+24OQGe7bo4klUzfHQKRPgIXKDNSw6A3lr+3o7Q+zUnU61ok3E5DwkHX+YiByMkB9
+9YIqTzN2YJ9y4z8i6uZcZL3UCZp/ykCjB9kQXdqhAvgnMVIOKfdRxvRPOxURnrfE
+fSbdTxqhL5k1nBuwcUh95sW+scYUmsmWTxWCIN92drGRFz/KU+u/txosApOm8Ngm
+OwW19mP8bIA8BH34Wub5wrExujjXsVFdpkZnRnPAOhhnAvK6WZrvqbL4zhIvHG8F
+CFlqW3+ixDr6g4BnKHTRwmaNv6y76hFBJKdJgQAe7RD8BwSVgPNmr1OZi9Qhsui+
+Cg4S6m9uTTrSqhZb1/BigOkqGdgCz86AgfXc7GmC+50qfLo5Gz03JyvYSgMdSklN
+S69fko0b9R8Php8jWIyeUtPfrqWJnBBn9sJXeQ==
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId CA6970458673493A8AE1994EF1E29238F27F4518
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAClyORA+QqiYiAAAAAAAKTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NTA1NloXDTI5MTIxOTE4NTA1NlowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LZXlJZC1DQTY5NzA0NTg2NzM0OTNBOEFFMTk5NEVGMUUyOTIzOEYyN0Y0
+NTE4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo8TbiRVYoe5KWb0s
+1QSsgo47IZtBKmLSubYX7SMY7KhdIyRTE8SwKkp7z3lmF/CWUXB10gih6cxnFw7K
+NPNdo/dNLcnCobLtqfffJTo+auFnzU20hk/0zfJHFlom75wVqnEAlS2hDMlwYEq7
+jxhJ+4Sq2HD4OINS8K32k9z3uoJtCkfy1dMJpRJgG3ZK5CWTqKgcOF+jB259i4Nq
+Kv0mj5KRCHt1bmPGXS2LIfRb1xLIiS4LpYtTadCYFeyFAMZUJGRbQjAVUhLqPnNV
+lK//7SxF51gBYHZ1c7sOlKyRm3qqvL7nqJP3zKQz6aJ9+Yu30QWXFbRnhwnOH6zE
+l7mgTQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUJLwHsvTLE2a9oGkGq7zxnczlJqkwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQATMdfA
+QuauXelo6dxPCDdabtf1EUD47hjEpxfkrKQncxpwHgUD7m7YFLqxN5ddXwVHm05n
+wKpAlhlmkk+ZRGxIPAysLyTDfIpzNlHMZYaJTe+JDSGR2uRFsBlQ4yf75S3eR81k
+0XGwokLiqPWAe2OVNr7sxYoIWJLuVFwVf/RPeFcB44B3jWjX3JnXUG3Fex2sulq7
+rlCXNzwRwrpU+A2ASMlfnz+2T/YIWfxcUxxjR5l8Q+7/Yf9pHewO2j9zDoDniH5e
+KCAoIvpGu5c9OcncTIy1b4446ycGCG6YLia/lZIVQ7dk6KCTzmC/Rliu5mkQjIqq
+VUBPrUths9k2qx+uaXXPue+C5HQHrLyjqRbEf3XYYrImfUCfX1gKZzmTEngg8NrL
+WJ+deECg/6FjxYS2hFVZfdu04sXKkuoH997nZ/CDXplh9v9ERiCG6P20V+SgL/3p
+K+9mgGqa0e0vLF7f1Eb9uPJ1O8Rn9LUaz1GP7lIMzQZ9XwOKHJa96+3avPXqvlG1
+X/wRoFHhSMqFtQTiTLRSTFR8FMCsT5mPBKcVvuT+hFTCGW3uZGkAOM8KiaPsTKqE
+JWTa1bMZhINzaKBUIs7Kg8CENzuz0rVJL+Np0qz+eeajirRS6Kx6JNZHECTh16ux
+B+njmy7+2Ck1ot62M7NCe71vWADE8BYmXNvuHA==
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId EC3F8D4CC12ABE88A019064E8A62B7018FA2E359
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAC/B/SbTNs7xoAAAAAAALzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NTEzMFoXDTI5MTIxOTE4NTEzMFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LZXlJZC1FQzNGOEQ0Q0MxMkFCRTg4QTAxOTA2NEU4QTYyQjcwMThGQTJF
+MzU5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAocch2Ww7ks51HUOq
+xehio/ftHLKQQTxQjSQCb4WNwLPWMMtIY5vRTGGKK4FwyI1N1nIvYcbNIayQzN4r
+UlDdGH+vQ0MJHj589StrYdU9C/hkqozuWsWtZ3NV1M/POzoq1n5xA14kxoWJZ4k2
+fadFASEy+139LMS/qGyHp60KPU2fd+NA6wVxAAYagvQd5XBcTAVa7CpjVuYw3PDW
+p1pyx5VCRwrTfwX+6qCv5e4LCR0tnl9vNkdTo07xPHVlhj85X9c/tgEOhRnQQI+J
+r1vEv/pOPwRl1w/QlBhlrKoHueSKsTHLdd2SxhBVwspCGbrr+HsYr/Gvk7xPatTc
+bWlMMQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQU+uz8QMtH8DtEAakyGOo/EELm+2EwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBWp4bq
+HLMF27b/b9LfzDXPikAWNlSGocDH1VN54dYAe8du56OFOvXRbd4EbyOaB2YALy1y
+3KKRhXmqGBOKL+k/kwT/Je50ivJUaflld8p2CBzwC2b7j1JyEoqr4UKrDwO4Nolv
+90eIbpzqyt/x0Ran15o9wP9Qxyawokl+wrOt3EnA0u8k9WMDMDMC97Eg5pZ6BdV7
+5WU/bqUAGIynphtdZtYSQY3SIGCUuI7I+7GthJaatiLiqWv1+pV9tvDawf3xPr9Q
+XiEUJwXlN3v6JAm8S5+wxFAww3hqIqRo0dGAwV8IuFVju3pVwY14kSSYNn+gg3FF
+N+vtedZfHlu2WXny+ZhjyTpslahQpvb0eFDhdEwRlnAyu/8jbJ5GCaqCgYs2aZ3p
+9mN2SfbV7uol62452f6+Rb9m/TzyV6K49FD3P6k6uSHMSZQOmZTMGVle37LBZU1X
+qLUm0JLkauY86OnAbxXRnzaXBorkzWfSHL3R2jB7reH3YKpQQ0UvkXUVhlvcakfY
+HvIbdVN/SFkCoohBZTjUx6Po0kwR0bd8MGExwulsSTk1oZERQXo/jr1bURVFd36R
+qw+CxlbzZvsXXn63R8MR3F1bqI7YaapoIiYU6AMu9RER36lMc2NF7d3h+oRwVKvH
+H7jMZexBdVVTFab5SDmBXh7sk9gW0IuQFnqxyQ==
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId a75598b8026fa544affcbc4b9106c12f96d3f0b8
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAB0I7G5UzdkyOQAAAAAAHTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDk0N1oXDTI5MTIxOTE4NDk0N1owQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LZXlJZC1hNzU1OThiODAyNmZhNTQ0YWZmY2JjNGI5MTA2YzEyZjk2ZDNm
+MGI4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwV1GHsVAbIL6Ep3r
+kCTA+TdlfFC6jndhDf6J3/nBOqz0/G60phkdbFmC9gQw+EkR0OjsyZ6JWB4c2dug
+SAeB61LXeJsIYZllKGUGPhscv4bKcBxP/EBLL6LoadOBi1sF8OjQr4egyd2WQdRc
+AqJqF62q5o4UPzODsoftiAsCPoBL8BDPkan/tI90ScQXJjXXHBbQ8lxUPlHx+3Ty
+FlOcVcPtn//ZULNh1zPc3Q7yQoKLVvKhMgkGZcQnvaKSi4QMA6S54WqCdpp/EesN
+QloMRguzxSVnW2EJx/Th/cxN8DA/PRWDU1N1Kk/+ZNxLZa5CxdpjE+UnX1xv0YtI
+eYyNPQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUMeSSVkjTNcqhUEUNIaHaJ+zSBU4wHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQArAdiJ
+gSlfJrkfhbrezXks/gcvKa5zjhwmDwE42Gv6VAq8OqbBUQIVr6ufpSvMFmwzQzS3
+QtGFTNgXlrpl1JEkGX62a7qZMjGyRQsOD/ehk4sEln2O9nNaEeEsJr3/s9sWzKS7
+eoFSXaas4G/g5elai7yFbj5sC4BnCZ3XzDpJXlXYHn9GCtNnIq2TgqDElhdh8DRD
+R+UrjcPY1W1Psexv6HYzLcIJnDjkSRYKReS92eXE6nFtRZScW4h6nRPBh126M5s/
+r4ftUD+MfP5efC5U8cnX5ZOyaM1Xpmdg7dVcPWn8ooepwYWDGOteFjNTTD2XWPbA
+II73E8QyrozinuFciR7SQe+O0a77WTUfCyBBg2QCsMNSrFZA4X9su5eMeGzh0YiU
+ZUxY2oZTzpy3Ys2paRiuXYpItusvZlnrHkX4M2/QvfbTiDU8YpvgZ3qIZieCTVt5
+vl3tRmffD+o5xGbXybIASNCWa6PJQOW/vzJVl1uX+PljbL0jKeyJutKxW2aqXSEc
+L5Oqa6Jv6KpDli1fjeGZHEsmXCCTcXcCjuspHLFZa2QN4/HONQZFr6IOKnopCtzz
+ozsRrJ7uRdj/8IgGlgIOllb6hT38cdqM0FjyrZOoQ2drNXOpdHXy0xNzhqQ1a9Ij
+JywXTOSldn/YwMQCAgLuHfhAucM5veoMgzXiyw==
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId bbcf7cc184213166dab5be53a87014ddd348d8cc
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAACDIUbHcZtCC3AAAAAAAIDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NTAwNFoXDTI5MTIxOTE4NTAwNFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LZXlJZC1iYmNmN2NjMTg0MjEzMTY2ZGFiNWJlNTNhODcwMTRkZGQzNDhk
+OGNjMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsCuSNfloE3CQKykL
+a4x4nHVXISra4cS5eYJ+I7uFfAOU2TZXviwfFEb9ZxXcluAdFk8UVI7SgcyZhKoH
+3WKqqLO9rN6JQ47e7wrvurOVa+YRV0aHpOMCXmkTq6zRQiuJuT9pVEhQ0vyjMtqa
+XyvHFTXkIylHyeJtADGpxuAwyAl4vQGPx3O408f2DvOua4BDlbazGMz92DDt+Bxk
+nifKiW6NVOUgzQEt0ygOGEwGClpiIPlv934G+/k8Xt0z29pa7dFUUGNjfCp0DZCV
+SO+BVUEBUIu39qBfFAL2BJshw0ERaX7QZTNm4zKGEOLFGqyqsrUnm5E3dK91jY6m
+pHYy+wIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQULKThEoZu9nZDkjX0G0BVH+h6sHAwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBl5cGh
+vDXr3U2fVfNjklgqrn9O7/cFRIgf0mx4tJBWfR1sqXngIOXPP9tSoUtl8AE6JghI
+PcIpwP+5KIdg5ca6TOmOL28qh4kaye39lL18V7aLIdid13kwLmvyv8K6GmV/dbJL
+hLMDtrZTlgNh9saKUinbssSFcwiBSWISQG+4M1NBbzOg0+1YCYQ15E+ApRk436Y0
+TUBX5MtUXP5NdlYKIDJi+lQNzCnQ85cx/Rh7cDr0hTp7Kd0R23FLGn8ca2KAIEzO
+1Q/TGFj88Wdo2MweWtgK7LDUq753SN3H/WzPQSKKg0tK2+nNnsIYgzqr5EN9cUWG
+qiv995ViA8WY00+R097jxoK2Bb3DIRyFUNRH7v/9Y28EIw8+EkC1dd1VfZLknSFk
+1i0Lk1RL6z2eaRw1ktUOVAqIwkRpCfo/xotTXIEg/SAsFN+0WwKQ+7Bc0qXipt0U
+j2U6eJpVDRtCB0YHSJcejB88lnEVQRAybF4VLluHdB0ri8Zh/HrgJl20QAZ4nzG1
+7PLHaaXqDSawErMVPammCzFvpr81OiwIqYfEAsaryC/n704xH+z7+jOCPpS36DuM
+OUVd6LCfPiez7VAW/HLm3s1Itt1M1saOEI+Kdh/6S4wTgu/jOez/vVyKLiEZgUmo
+VWwJ+m+Hxi2Egk2+FkGJstvayYltZAZXu0+Csg==
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId c6cb2a4db7294be911724f5041310b4c42f89bb2
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAACZkpQ87aBlKPwAAAAAAJjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NTAzOVoXDTI5MTIxOTE4NTAzOVowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LZXlJZC1jNmNiMmE0ZGI3Mjk0YmU5MTE3MjRmNTA0MTMxMGI0YzQyZjg5
+YmIyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjZ3yEU5SCsYRWtD
+wDw1RX0lzckp/k7RNIbXmKo4TAdtsbgHKIt3s0Y2HVtyRcXP6NsIy+P4h0oah39B
+X5qFXFZOyBIb966VlQDmKjIckqh7tavc8Duh4Y+dysIqkXIqIb0vwQHqkMe0qKCy
+XaYvw/TCiZq/jfbnu34mB8XHDSPJTfWHFOAm0VqDj1ZIE0uH0ESA5zJil2AvZs0d
+SMCeHgbck/OkwiDZoVK63AmKUnvjnTlHoazUn6k2s2yE3Xn5HD6vIHAs3H75dC/Y
+rkYYaCbvJXyJdFeZjkqajhXd+TniVY/YwFhRBbp6zZRi1FjQEoNB3H+bs79LFs5f
+K1krPwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUpA/aEZT5TYXMRYqdGmLfgv7L34cwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAyU/9f
+w/xlImm6Vi6HURiBvjhlJECoSS1hsbkWJU2CCuvFyWNEQwS6aVbraehSTm6fSfOW
+miVM+vu23pfVLT0fd02KJ3ygAjI1ud3LS2nKl7qBE2o0M5CRv2P/63t3xLNKw0L4
+cHwILPPwqm36G1D8ULrXXhp88rWyxeSGCZQcgj56kOB7fsVKCn5CXfuhjjHTU1ow
+KRdFyK0D+djJtfkOPKYyrH4Oxypvi5zddTvOl1fgd+0Taz9NRNuyxOiqGqpY/2Jx
+XJDkd337kwndffuuCPVdP1OifoT2lEzsLQrFzx+BhooUl4cbxcOCw2qWK/FLONJf
+9+bSpw3AIswnDXz7lt4xfmbs+x+oZKh5u2wrnA4g+DdQ7zqhWFfWmqUOJEhtGfJI
+AkXQiypM0KOLxnPTXZc2JUuLZrIX7SSbYrqgKQVlkfeX1KJ+aG3sFdN+IK4uP3kz
+Cnsq53S8NdORJniFfxGXYM7GI/0zzu4BnhnCT6OzxY/eg78K3l/M4tMUjVMMh5s5
+nCfF2znRl0KBUat/xQVaOZXdO32TssxzhhFT1o8qs6vWJuzflqbz5EU1qHuyTXhP
+2krfKvN3sQtOCCZp+N1YqutV6F57FOBPJvAiJRX/dVoOQPOVrCJe7d6H7p7mRhYr
+vF6O7NA5dZX0tCvEUapabxMO9GdTFQBbBndC6Q==
+-----END CERTIFICATE-----
+
+
+EUS IFX KeyId e82669cd9f2098270297499eaeb8dfa7e68b3422
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAACyhVhy9N1pAOQAAAAAALDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NTExM1oXDTI5MTIxOTE4NTExM1owQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LZXlJZC1lODI2NjljZDlmMjA5ODI3MDI5NzQ5OWVhZWI4ZGZhN2U2OGIz
+NDIyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0NGNi9RlmSa7nE6n
+Ze6OWGDTwnl+Iu9SLzMdyqRvUATu5K4HbCENNQxWGB2VPJrNEK9+G/iEElVtNjBZ
+A1cJ0hwAplWnFGqUVt+gHwQNze+5vCZ1/JhKIkgMLlwfBEasNl9l10o1AIoBQQg0
+8p/isoI3U0X0VblMIrY82S2fvOoswb1Jzcpa3y4VX8nJp8xAhCWp+0poYSXIVxHu
+BiPh3zSuYCgpsUqb+f/5e8mAL7e66YV8uHfxYugb/jtwWzTRGIzIjCBVw/tSCeeM
+BVPDFhhcmJlhp0uj66W4zGTQVRjAeEKQwT62jdZThx7J1pWZDIt6vudaRKMua0ZV
+Ch5aGwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUgLWG+JtSPDI4nRuwkZtDSbDW9MUwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCVD24j
+eIzi56zvsiBijO3DHdkwN2wWUB6+PRG4hRIYYuOk0Sa9FVUam3b1TsJ0PBnPF3LI
+7qhsU2yAcKAHR8JPM2rNzWcomGYbSANfRtOcDT7onB9myJgtRsqgRWA58jm88LG9
+yO9bFdngx04chxsoSPm0P0tXDW3w4KmQN9KtNhLquvZrBJ32Y0FZyqH1N281eflq
+g05xRmyesmS5i367waH5rdTXsiRWPOX6V3Hnatd2z4bqZbn6jfwRgFfeRPnkRu5M
+AUuzpmDz/xxB8qOF5c1logJ7EKKCUxQnVFYXRZKPsAzrtObH9+K+/gnnpBKIQxeq
+ewPNvcJu6+FzrJKhyK6jO3Br0lW3hcoFg5+6IR7ebe5cEuXrT6SRoasyYQ/Lzs63
+rGWtSFc0ul6Jm9UAoNyaaz22xJonmMK2mgLZEnbATogqMAy6CBy4dOqdwLm7bUiD
+yI4v1Oek8n/StKcaePn0ag2Pj/xvLTRNECw2aZYCRLocSArUq+qD5HICd1Ar+MDa
+Csk/axIMdGvZbhM/P7V2ctzroIjdwy+Z38WfdYL8VGl5WTmtt7+rM9jcDrfN2/OG
+kSr7XEwUBFjqkWtm8vgceFTJfukf+RPBqEneZADqfSY9FVnp6ksY7wqZMi700WjO
+kHN5i4UY9dO1dOBZ2ruhTK3fzBnIUxIQlkxhCQ==
+-----END CERTIFICATE-----
+
+
+EUS INTC KEYID 14B8E7137FA99526C4717DFA881B24936BBC6BD0
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAWz3eM0Ti4VNrQAAAAABbDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDkwNjE5MTQzN1oXDTI5MTIzMTE5MTQzN1owQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtMTRCOEU3MTM3RkE5OTUyNkM0NzE3REZBODgxQjI0OTM2QkJD
+NkJEMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANnNzKJ3iA5MYg0W
+AODybUV6b1Jk/TU0EhCzUd/ggN2cX0zB//bXJwLk809s+T3SSNAKC6JdtKgDM+9k
+yt9kZwKzM7wuU8JY36xh6LoTaez51spUk/axqsh+E8W1UdARTk5anHT9d84iekJL
+19U1mV+jZGGckOb6wheOzXlTK/RxxxEAHHCZwZy9tOFc7nuQH/KKwqjYsQ3UVm07
+YvhQTUnRWURKSTlrR3ubF/irXIlyM9edhOB3QEwc4QK+AAxF0b501w6hM5IXmvmP
+XFtqDP5RW4Qyyb2szSUt3i1FSwaK8fVO2RmzDLBF1rTtlzbeMdTFWBiRuvfAOJnp
+re4VOC8CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFAdqFRppjR2aoLPIE4KipYTxP1dJMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAeNKl
+w0j+exleM9ZMGPBKY37d5BajBOYUnf06bKKQA2Ht2C9+9yjxNBEKbI2Jijv23l42
+3Z02XCrpkmxN1YL/OiDvxcvT8iobV0jYkvUTGupZWOnmxtQZZb7NtbM3/44E9SOK
+rPyER7xkMyMZ44DVJvBaNNbnKWgSFemwP+zutMKkmYEGHMYzaDv6ZFxMthBNCtJs
+r68OacRCW1XsSb4gQLddrahaZWRUZRo0J0X6jwUxmwLJ5jcSJ34DcS88O0yAUjHv
+1NvESEiN3O9th5HruV0RvLTTaMnO1qzPBLRxoJCJVyJIu9uCTouO+k0XfYmPm2ZV
+eXTrt5+0w1nv4+sFZQbQtJyGQhG1py6DNU47kR3C3vSzYQOMXsp1hTJvAXkek7fw
+gKzbYZYmCiywIQdsBq/d1O1/aTdIAPfR6GHeT6Gsv20x0eUmaXZCo2osBMOalKoR
+adbZfg7Y3sVrWlF5ZkFyBE4MggQty5BtIEvzJMnignQd274aW4HNtmg3jB5QCuqd
+f9Wf7xpmGoQid3x0GgxIjjL9FbC/lAQAYhIcOpJ/BHf2aJWuOLRtYe7lD4E7E2F9
+TmzLEQ3nkVPxRikBq8B0AW5l9UR2/SfSg9P+h9ja8YZPU10rLsVUQNFcadOVaLym
+lhI2ofSozt3JA5M7ybJ8MxZ6n6GHqxud0NwaeR0=
+-----END CERTIFICATE-----
+
+
+EUS INTC KEYID 14B8E7137FA99526C4717DFA881B24936BBC6BD0 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAmj3jQKSorqWZwAAAAACaDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjk1NFoXDTI1MDMyMTIwMjk1NFowQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtMTRCOEU3MTM3RkE5OTUyNkM0NzE3REZBODgxQjI0OTM2QkJD
+NkJEMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOAqzJU49i6O/V2k
+Vcxr8m/RdiRUWkQaz2JOUM80thxq7o9/Uq6lJ7D4jUyrTO3gxFrIOpejlaqUPnbj
++rJRCG5jpl2uFYWSqzMq+HZb9n3HLeu8rAt/y5rlyvKdS3UZZKAc0+2dMNiGJkh7
+9z8QfReX8xMdb2w8aJJXZX1sAqTfOoXpH1tjqqf0sQL6TfOX6EWQG8eYfAcvcI4d
+5gSgKVup4vDrTNlP0dO1YFQvl0hLdLE/44hPxL7TnihS/afvlVD2nGXkKeDHyGZY
+A8AVL4qQQEqR/n7NFqFO3QBEoIrLMzm4F3vyug+haEpPhNTX4x+VDA2v2lGJwjC4
+wG/obSYE8DJG21PE+mB6Xi2pdvfkgQ0zhCW7rQ6PPz3B1d1x+JfmGFVhv3Q50fKm
+Sgl9oT4QaBjO0vUJ1e/8RXmSDVRrJoaCK7e/OcZvhZvzd/yGNdeXDEmWufWHbAbN
+yQ/X8Wq1ktstQC/iuOyUnJDsgH5Db5DvHrFlDpJ3svr0RRij33nkNHxNEr2ZA4KQ
+I8DlRgrPsEwpPA2pELj8VhNKHPmQwUu0kxYCxamfK6yaIqh8dtaOtYVEQekWvzJP
+xT0Pe0qgORWxzOIcJqyzgDylEFppwP44jCSieO/2ADKcTJ6JpCuaOVY0PPMPoyUK
++WvkPy7iyo64zdhFMpdUSVh85GSbAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBR6oo9hoOCWWHna
+4XovlYAqDocmjTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAInT2go/UY0iGAJDcI9OCT3fiMz7gn7O7fkosqq5H61D
+yjQApZdwKt0/Wlxa6VALBpGcz8VQCstwd7Cp6jy2czuOjwcmHKtIndvJTJ7B/cU7
+N8IWaq5zSv7jg8M8jKKuAW7wzSEnHF5QOuTu+P0o0d0QBKGp1nTXC2G0MZZU99An
+JosD2nbZ68eKVXAY3uP+rGwKclHp1unrcoC7v07Yu8J4xM+E4KHga0muXNbyr0jZ
+QiZ23QXa78CGE6FDodozp6xZmZWBfKmbcN+XSntNFKsxjSMwItcnKh+4KXbTIwUD
+A0Cp0KuJBOy3oAafWu8SZbI7NUqEojiy1StWxlhOshx+vagb9r2SGeMWv4RqnbHO
+2ai/6bohcS+5YQCesiYG4azJ+Ki0DiA55mpdOFy9KpmURLJfUzhFUVSvIV61Uos0
+uLD6r4kvfforZ8+nLYYlbMQhZsLpjJ8hg5KOM0YBGEnwj9QoYUjkdXkQlbXgjIDN
+SYcRVBCGfmzgyyVOSBVhadGP8tk1T2wiou95s8MR8jTJ+jrLWCC/Br3LHnX6sBmD
+iEJ9TQHGyweOYq7O48CnSmVorqR3+3sawu666NCKrVcdP+mivGAB0wNwC61TUjBa
+UwVMgp6FIUcpyf8Q95VOXNNX165ykTwVkiYXTZ2VkmBVemhvbz729oroM8PR1rjI
+-----END CERTIFICATE-----
+
+
+EUS INTC KEYID 2CFCF43B16C8BFC78249CC971EE57324D639F079
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAUGqAMW+COb7ggAAAAABQTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDYyMTIwMDQ0MVoXDTI5MTIzMTIwMDQ0MVowQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtMkNGQ0Y0M0IxNkM4QkZDNzgyNDlDQzk3MUVFNTczMjRENjM5
+RjA3OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALoep2G4F/Ca7YdK
+TBeN3Q19clOQppmUEXsI3673nv8hcANemB0jjAeAnt+bF85WIy5hh0YYRnqiX3At
+GJQ7fCyaB8YbOxT9PS6ikaMiKiRcHn0w6Uz1yauE9o2CBqVEquCnN55Pis9xYCF9
+H6q062XSyLebaBvBCrRmSz+lCxjm9vvd04wHcP+1eGBqpey4W4Y9YwPg6iswekFm
+mZnT/5/NWjVqn2nH8Ac7rBg2yYnUvbXUEo40xaC31IOW0Eq1vT8mknUGVOQoNrs+
+keC21ZgRxdpQbjN5/jShdyxot1GiRYIipwZiDvv2zQZ2Dxd+P3wq02hdUbXgoTn1
+6Uzrt2cCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFAqln0vXBVsTAmJ4fKb0/WJdOeQxMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAA3HT
+XSv9eHp1RWdXbPBx222QQDxu9zqVsvVKiRrpx86Scn8JEuK9HJLqRe6jwMfcCuX7
+jOruI+jcEQXWyxIuCNTE+rgoJsvKePMpzHUfhH75WunVKHv0bB9jgBMeoSLreduU
+jFIZcthyD2tvW9CT4gImG/uREmtUZ2QZorDQNgvwHLfJ3rHfnmP9DwvzN48unMNh
+fpauDMd5dt/0GAQY7VCpiUabp7WPxGCYEGL3NRQAfzSPAJIS8zyEWwBeK8ObBNEd
+/s7EiJdwDh90kkkpdhIc4ySsu0HVceEoNQ57a9iewkBDYpWO4/NmUkLwTCXk3o9O
+k2QDKS0hlajEhQ773RZnl7IdIap5uz5QYzFDW5VW1lfM+o5bDynPhHr+6RcX4dly
+b9m1su8GMeJGJxD9cTJ+BCkFhPHknWGFRCx8NvIk+DG1M3deNcIlUabGW/aqwgIo
+gMcQpZvbrA6vxwY2+69HwQC/EQ/jr5SmuJtFKsMWzm9oBmTCXs7hu5c3QsDr3/gz
+TUtNXs5Gd0XtSsQTT1DZp/IHUKHrvz+GbQpxBegseoYCdq7ADVIEMRGvr7nrCjy1
+xeInytFORLiWmxAfgTYkGpkl2FYorfyVVGU7q0G42h46dwGId/peb5ByrT/6wFBF
+Ka9pLTKNExPJPWQcH83Zk6OVo6/lEfOQmldTDII=
+-----END CERTIFICATE-----
+
+
+EUS INTC KEYID 2CFCF43B16C8BFC78249CC971EE57324D639F079 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAmXQ1TM9wlZhYwAAAAACZTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjk1MloXDTI1MDMyMTIwMjk1MlowQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtMkNGQ0Y0M0IxNkM4QkZDNzgyNDlDQzk3MUVFNTczMjRENjM5
+RjA3OTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKZqWeGDTsxQ3bnT
+O08WefuGXkKZ8Z4iYzt3TrX3hjNTo2eIKWysGmS3Vp8baYuNxL6wOvKTRd6JjFs4
+LILjzWrGibud/D0FvNeaDbGvPlo5HbBy5xqpm7E6hSxV41MozePPgZW7MCOtzrED
+9cuYBwB5U1AfAD08p7BIXqN/Sph4LjktgR45fJDUBu5I/ZggONj7p7VLnht4y2gk
+lYitj3gnvQLDo8p9EG8OFvO1ft8SxYFXRLlkXqEpkKppCP7/oM981n3QOZ+1I2GT
+hYWrTYihcXdKApG86AQpda2N5oPjNY1KxdrwWR7W5jIbI08rvck0gjLNxULs3wB7
+hIk9/tg+6N0B6M/SLpnCkBSoCz3/bkOLi42tAs92vmYq5CntWpdkTD8RkLbpu2MH
+3318IICLcS38wF4BkJhtyLevhLT6d+E6dxfZiD79Va6+E2b3945eSHi++A91pzQ3
+YO9qzLebYZBdMEFAAZ0ssD4CUPWucEl/7/iGrirCt768eBzJmNFRC2fD6SK/bgNQ
+SCtzWzmyABuysiJZzxxo0mAMkjc4Kp+9V+d7SOhh2mtLubLF2n+BoWEKybhKRDPu
+JQekoEvdXED3mPsrDknemvC+6+0LCd66+gUhFvV65zliPO3yhnyk3JLYLcMTlOTH
+MGMCeGKwqb0LFyATM6sXJ2CrWx37AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSnozOqqzPTiOLr
+S3V8h7ReMQnxEjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBADt0XT8KW2RArG4lDX6TmIDig1jpY+h9JUfSA9OB7wM9
+7I8qOU/mf1RfrAuE8bL3aA3UvU7e2/Sp38L7g506eQtJjk4yyzjTJcPULJwnwWqW
+8mwC/Vt3aJbPfJ0puYxR8D6hcuVqB9fAToUBsTng0WD+Ho2Vjeq4BNNisOSWVSsf
+GXeLbwl53xTmsm8ieXfTozg7A4oO1/XW+v5fujEMyJftuZWNlaYH11JtwSsbuN6r
+8yE+oTb/RRT47t9XpzJWEtGi/4UBPof8rXKJb1M0mWFovEh69BNB5wSfArtGwVye
+8QRHbjlgmzgfQJYSZRp/8pdWxeCJnPgWz/QraX+48ssOC9cL0J4NEXUXe3dqDe90
+qEYCDY4HDYGUcOikskZ7frByItgBbMyBavYINOUDcYMawStVkw6aMEU/HP3cKlEs
+LSgyJq4ceECnTYfWv3zTHOJEHuwPQhStMt6osAX53VoelpIqu+NAWYO/aynuK16e
+sfu0HUXqiizSlMX+fFnyVcIZgyLeol+RG4Flmt7gS15Yjk38HDaIgok44ZX0x8wk
+Fu+8UWVNRh1+cAxynW+4NuQ6+B5OhVZYT04lR8r4LNeUvsx72UpuNlCu8qi8nAlq
+S3g+bAuJVwTPMU4oNhQf6RuCNs6Of5V9GmKpZPOEYsLGNf4evZQNKMufRGtP783X
+-----END CERTIFICATE-----
+
+
+EUS INTC KEYID 2D3CECFE6594829719D6556B600541E749FC635B
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAASIoHogeI+b2egAAAAABIjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDUwNDE4MjQwMloXDTI5MTIzMTE4MjQwMlowQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtMkQzQ0VDRkU2NTk0ODI5NzE5RDY1NTZCNjAwNTQxRTc0OUZD
+NjM1QjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALgUMc9LO+738FXS
+2IjrAP0MzfhxeeA+HSBEhzfYDtZWWyOHsrxvn6eKa3RwKuEHJCaZjGUxWAa0UAvY
+W74z6Jbrd1ImZhCNea85avwlELUUi7+MvQTp5A2js2bIR9p9/E5D/4wX+HnE3fa3
+c9esDbmtxs760WQdiuvx3NNDh4jqfoGssKFcmfZmLPBdwFOYfqt4zseu9kEddvAd
+fncgSWSTtfySPd9MYCikurlZrVnjA6Z4wNPSpOuGA0qPmccNYYd1+7vJ4tAVPMvy
+qlZSXTm30LjJLttQTRqRZWcJjuUGdKSLYZIl6OzInnefulStGZVi39vZKVSHUN9/
+eRSadDcCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFLMz/hTpwwK3iY6+ma8B+k9UjL0wMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAPs5S
+BUlVZK8U7cRbOv0R3AHJ3UqPo6HWuI8aWn5svp1s7QKyYIcM/oapVWnGGEhIKmVf
+r+zrLR34SDx0/Wup2Al81JgkMKp7TosSepHveMPcV8s2WCK4xaLfJatyf3gkSzJM
+z913ukXHd79q2LcFlPF/z8Z+epubMyxKskYUN5DOn8Z8zvbC9DZBVh6jQHcrvRu2
+OR3id4/an039Fk1acCYoWCKX/jIo/I/q7Jv6WokSFBnTRWbFbsctiMTclQUuAS+Z
+9ewDjBLKGgMo/XDrSz6BnT6/42iPPvaA1h2QLTIV0kNYSBoCkZJ0+kE7LfJ0TimE
+uBauJsub9ivR/g9qz64f9BiG64HSPK8TWYsXM/BIguPgtv3XBSw14NJxf28sWg8T
+dy9Q4WHH7dAPD5ZHzdHuC6iHTKPr4PHz01gplqVCWXP0bWWPt5PgsgXTu7X0XC7r
+aJxP6vFJU+tLnlyMM9yMXgVefK/jlJtoWSNhvITAFUeuhC4t2y+2AzbpobNJA3mD
+VMs8YZ5lqcw2+s3509DlOE3exfEVNxBpxHyFktoOTfJHJjPh0m5xDVNJ2CtS2ZDj
+NAew+HzjXqHhuNo/V6+id74907FplhRZeFdsQbbaAcHuzi0Gax+D5tTAx/kKC+lL
+O3l8de/Oi2UDjS5pCe/7ywXTdNF6vK6uuCD6Lvs=
+-----END CERTIFICATE-----
+
+
+EUS INTC KEYID 30B86F094DA6ABD52371043F2BF7668C783F0E66
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAW2LgKsizWpnPwAAAAABbTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDkwNjE5MTQzOFoXDTI5MTIzMTE5MTQzOFowQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtMzBCODZGMDk0REE2QUJENTIzNzEwNDNGMkJGNzY2OEM3ODNG
+MEU2NjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALxKFRVkAmy3oss9
+F+e8fkUukVznNib6IwqCyizalGa4Ss/GdLOs/Bm+v/R7chQoW9wH9jB2/8in+4UA
++7it8QfabM1g9fn5qwZ4RsR6yahV3G31NmcYtEC5VOVOfu/QR1NY5mk2NFMhdfbM
+527UdfAXkuU9hDnHmVdrbi/WLC6JsIuXSe93Pkg0q5MC7VONgGmFY0pSJjj2in05
+/J6Lp8J6nyUuU9N35+C4ajcTzdgEkqhA7KkxvZ/ENBAawegBGdVfR6LckdyHmmxZ
+Nl6fgXuJvP3Vkrq6hnNzVEk+kTy+OTag+FtMyeyczU8cwQPWBG3aS0U52nB5VJVH
+rkqJpxcCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFIhGUaLkTsCUhxtm+Ht+n/FFnAoxMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAO0t1
+VP58YSW2b64bEbHKIEG8PMKNDtSXl5Mmo5F9fM0ir1VtOMfRAvjgRPnvBvFKVmwH
+e2GnAyqCSeK1FrTUPrpmvbD/45f+iuydKfM7ZMW0NRDSiDmZNdcvseqlksXlgbop
+J0JR59TwzvZWAnnfhNtT9G1MnIs6eU/uSyOvrSAZeXrVoY7twv9Qpp11+5lUC8rf
+lUd/aE5ukx4ceu3xJI21cm0253er+joBVeAxDDUg88hlSbrUew+hEFjr5rxhCpl8
+0+KXBk3y/7Z63QwgDUBeZ9PwRLw5YgF/ThEgYXc8058606fXKsL8vAorZmB8zbhQ
+m9smeEpNTem4lo6ddrdo6mwt2O+cI4epNBqulIZLsfJIlL+TBNMJINM7dxObu3kD
+ZCecTpjgMruPNv12ZspL8+e8I/mFUvV70sd6blaotwfYOsRSX47krZhViGdGu9t3
+SgLctrT2ix2WUG0ddAptVI4KfgrqsPzIDSuiZTuHe2k7DY8BTrzv5uNfRjaL+opa
+tnHq7iGuTQxRnfRHS2J94q1ZkB/Hkm18E+SjSma/fXtDmo7rDQgttT+Fkw8K34d4
+5+YRUNSPQA0SXuv7/Jj5JcbQn9QXWCnt8pLrwYvVbPPeOqVg1iNKP/bPPZfE+hTV
+RWgQ+ZvAWcnAy2rAwRjSx+FLMceJwmc7LNBPvV8=
+-----END CERTIFICATE-----
+
+
+EUS INTC KEYID 30B86F094DA6ABD52371043F2BF7668C783F0E66 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAmliMcKBaDdd2AAAAAACaTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjk1NVoXDTI1MDMyMTIwMjk1NVowQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtMzBCODZGMDk0REE2QUJENTIzNzEwNDNGMkJGNzY2OEM3ODNG
+MEU2NjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOehxxCDQIwiWzrY
+mqj4wnVqK6ActsuKxg8XFVyeQuwzMutCVJNdS+49fhsXf2wzy5ucrjobCAl3ZHDb
+cHrK3cYE6GZL1qYVbiyNVaUAknuNJnqKJx0E/F8e6ZphLvazxLacnyOvJ38qylGy
+JwISvp5l6MfmvYrFkaESgaIYlg5sOYICQrqNVb0H3U8WN6RgAQLvwR0OspIqH3ZE
+V2glELb3U31Iuz4Xi9rYSpMcWyOmp9m85EkoLqks+P8PpwM3eK/rwRmVYMauMj1h
+cZtHEpz4Fdo2TJaN5RWT4hk/dtEKuniiBO67dr4SQCJE/Lc+itbCTKU5DnJ8bQ0E
+4lUSD2nPTefPk09b+Mq3pHFdii038Fzxv2sNdQ99M1/9HYkwkc8UlqfOHDYJfj1p
+z133umIDQtlBMEOpVccqQZdsfMCKlFTgkPGaonNwd1wbuKVHGFdGRpJWOg2c6fZU
+UFegSSZAHXktWsQ0dFF7KxxA+NfeuhNLI5VGxHMTVIkk4Y5qmbf0NYN+DkP63LEJ
+4XTvyO3KP1RKt4ohLaUTTjd78m8H0Np2dJ4qMoHSgl1ShMdfqSByMyRvmmiR1Yth
+Bh+WBtQboqmK15A/1iNlw7lIVJJGkMupgexiwofhC7KIEpGowbj6I7sGFBcPt0ZE
+7piI3v97CHtq2DgZBxVQyXkcBbqhAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSfojVJ7xoP+Oa/
+eZkgksMa/LdrgTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAF3ASYRHbqu558QeoYw9k5EpCxuelWlw5YggoMLy/O4U
+ffj0Qybd6Wbv00mTrIsfeZU2bkhzsI1M7+BaPiLC8wl8dvAGikPd9cGvGEEZnF8K
+5NdKvbN1bA3+LKx3/lAULbKm7QOt9xLDlwzUFxP6P3IjQGwnhv63kP5klulznZcE
++2/wOzG0FAyyG8mAM82wmQyZXEouenLwcaIrE1e8Q8UmJWVMQ66VVF8yMTnsPe7o
+5nvm7uO8aES/agHIaKCx54TjsnN7GG2W9cKLoCis+FD9TN3GikW46QN3gcIizErQ
+GCytybjd17p0gQQ+Q/kRNrvLpR5Ah5+7pQYP9YSR0Ed9JJLvJMZTnvNx1tuQ2m1a
+b1CfARxbvfC6tT8EAxrRv4/qnF9RnCXIpsrn0DitJLQEy47jKa7JnZGxedVBYmTX
+AWNVVdyLlzMnBaV7WA8CMDdDx2afGOMvAmLTPtYzUaVemhkFJTvXCMD2bTSTW7YZ
+da48+jjJaDBqGAhu88IRv5+HKcafOS89vdjcpricaGN4FAg7qNwex07VCvSNswTt
+4YghJMF53HiR+jxO8uWI/7NCgoe6Yki7k4/XQhtr5GExUxYaDREu5fAQ1wZTRGrE
+FOZ9hNEc8C7RnBKrEBLU1Cg5KtHXXpCpg7ORMimD/dKQ6UPhIUtR27Qqnh8W8h1+
+-----END CERTIFICATE-----
+
+
+EUS INTC KEYID 31734D6F8AEA913A0A31180B785CC0630894CC7B
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAQKYexESldX2wgAAAAABAjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDMwMTE4MjUzNFoXDTI5MTIzMTE4MjUzNFowQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtMzE3MzRENkY4QUVBOTEzQTBBMzExODBCNzg1Q0MwNjMwODk0
+Q0M3QjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKpdS5Cb1l+kIsge
+28S1LPYXLi/WLV3GhKBW9KiBMOLeLb4paufsYxG3UPUiJt1dUclnPK5xNhdIHwXM
+IJBFusy4clDAVVhhIfQRiS0q4pU7D8+xLolxsWMY6UNRGs4MTmXSHPTLvuI2alXJ
+npMYTMDHQnV9lKQEkCDEIgEyDpqEIHFHdASpfnSiqlEEvmUwTJm5UBI/7uNlTU+X
+MeHuYx2PWhagB5vB3GVfUJA3cSLDzYXZijScL1xfejo5rXEXXK6QESndJ/iOvVBh
+DDodXgbBQcBk7YP1kQiwsv+AubsrGWH9kR7HccX/uOsTRnU+ultj30Wqvgv2FgoB
+2M15v98CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFNQivBn0T8ccIMhiekaPsBmTPb9/MB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAEJYT
+uv4L7lktotmj9tnGrgJQPC1NCKRoJB0BlS46I1JRm74C9X3BfjKNGdbueDP4AenK
+NNrxeEbb/XqvtdBdO1JDyciovWCFs3GXzhKtH4aozH8WL9ARoCgWhfu3E7iooXSi
+rNJERNiPWo+lcnrHbmakOTxvOM83JGyv2uXa7z/Jl/axlhYWmyeOioo9vwAx07cI
+cW7oB0ZNXKetfMyhoU1sl6YJEd1rI/9dkaC7CyyMpvy52dNdVpmKi3Xa1285G6G5
+p2yleQpNSkvtmtMXsJztT1PloQhhtYaJnG3AvhI1RBMGX8A3D4ezlDWWPRsX9D2w
+CL9pncyrwrtjeY64UfOGh48r2iyqfBfDaF1ecCQR6dnGCDhSLjWCxkAaxYJsRFXU
+1uYw9DZz0zjc0CqGPkNIpE8lr33u+dhVt5y9TrhwMeZekq+1JiWe6q7Dcb23quIP
+ItV6eIKlZ5NPI6D++nWQnea18ExKEN8A132hmM2+15EhlLJLh4FmJf7qNsQcDnWN
+05GcGtUNzpcB2+sU+ZfyeQrN0RYpIOK/ApEz48ovuKk4zr1C2lFH6u1G75KCQ37U
+pcgTtK00Bosgn2dIcDFwv/heO1X79jySABUtNvAzP3aM6FHd1EKdos8pjcSppC9m
+RDLZqQGgE3pQzRSfQI4o38Hy3U5JXhJm0ntfVcE=
+-----END CERTIFICATE-----
+
+
+EUS INTC KEYID 31734D6F8AEA913A0A31180B785CC0630894CC7B 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAmqUDKDexS/+6wAAAAACajANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjk1NloXDTI1MDMyMTIwMjk1NlowQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtMzE3MzRENkY4QUVBOTEzQTBBMzExODBCNzg1Q0MwNjMwODk0
+Q0M3QjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJ9OYr3h+Puo+hQN
+sWAOC4t6Lw+61B7XQDbhJUlQ2b6TH84CFb0leFGwom5MOI1kEaBKpEchZ+QjPO/A
+V3c3V3tbqHFOcj33I3vBYugHtbbgYUmPX1kcoRTf3Mb8PqSsMrJlOj/Q9/KGoX92
+Zi4YITXRXJh+ttLt7FB5gTw4xYu6Zy4cKBzONKptxcn53d2cNl+308Uq/+nIhA9o
+JOgJjPb3g93HseQ1/rpkWRCTdjpQ7hSIZ/hwuegTe8ddjiaCzFk0V4pdMtiOjfSP
+zdbbiqpQcbkm1cCKW1JeAS/d2gbTqCJjr0m0L1jDMxyJ9MHzxQhEq5CkBd89y4at
+qy2Z4OfK0AVe7h2y0pHkw2RNgWB4X7mKr6BvLaTIToqA5NnR/q+BQ3KdtOYKb0NK
+wau98ga6IrmTu9u41RxjqsbywtVSc7RslnRS9MnlMpGIfCfTwtbMytbVRlx0hOdN
+qKhAzfZNYms/2tjOZe7v2k6QToLcjO0l5UizD4Ws0qJixzr/JDLaeEODpaMtUntD
+M0UxOD6i1qixc/jQkzb7WFCMgbSF4tkcvlmeNhY+4IIFtVtMiMr4bEm4bi5BcurD
+VywEeqLgA9+EC0otYPeHz3CzGJrvNlbIom7rSNZOqnmESrkzDGrm7d6Q5HySXZIJ
+HPWgGhlz5ey+gFWcNXitJqfZgWXbAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRP5QnhlyTrEyzl
+u5GIqkdXDyCs3DAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBACzqCU73CMaeIlQoEyEeqU51llw+HWG7bcJPrzlh/jHV
+JrrIMS7IANM44uCx08bNQAQRpiFzaz4hlXeQA9RUIVxyK8eNCrwS6pKyXa0L3mKs
+zOZA4gGkSR12fuuyvlWbEt6+gdsMdWcqVybAaHmFrHCXe4fh7aKcRyVF4OxRBKkG
+4qbLhgkk20d6ijAouwjyxFIIyl50AErmbzhYDRPmXlhDCrWSYLWG9dYbWfBwk93K
+NUDWYundai++/prBV7Uj8MR6f7w8cNPDYXd+JeSUdXL8kf9I2kgdKLPrDZME+vke
+Em9daTTaZam5Ye/BYx4epTIJwHi+on6aQMXswGNxrQgBmwkIbz6Vq6OB7xqtNwSw
+wCcHjtcC84fY0LjyFd8iycNQCPG7t7QHyk2oEY2yJj0e+eEeB8z19eFKf62GY2av
+VwbSdiw3RTYG5gbNlzSbvPDbKr2Ac49M8z2m/gmb21mYZssct3/j5TSAtuvDcdcR
+zTNGooA7PrnQ/VLLUgzHUNcclkCLs1AUj05t0nAXJAWff8OP1utDql7N2LyHAJPA
+/6pVcmvbN+KHVMt8ph2UGd9fFLwOp8jFxsxbvwc8B9ctQ3KnYlObLZfk3TFAV9+c
+41LxJmyl5rhk5eJWKFqcezGi93riWpzAbQdNfdxdDNmksSBDZMxsebuPVBPvBck7
+-----END CERTIFICATE-----
+
+
+EUS INTC KEYID 51C73CBCDFC990AA677417CD5F78BA37D4A8D731
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAASPiq0oHKWwGrAAAAAABIzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDUwNDE4MjQwMloXDTI5MTIzMTE4MjQwMlowQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtNTFDNzNDQkNERkM5OTBBQTY3NzQxN0NENUY3OEJBMzdENEE4
+RDczMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJndpYu7G0SEmZkF
+YVshljO9wHHYC+wTS9fDgjAp5FLdl4CTFSjnJgPg3vLCH4E2xRpi4MQkzwX2E2U1
+11M9/9M/5NkbeqOx4vnZ3P5pleuVV1h8nisyXxB2MaMJMe5aoO/jIJ8dMKvTqB8I
+uKpBU96Zvmli7Z/+kQnXFwAqL/Z37s39RSav6HPscPfhP6W1MliMbsNXcz9fUzt2
+xtfhbRDsw2bPOmzehVw+1jY5cLWRAcIA2AbGM/nDTjVUBR2b6q7zWvBwlnUv9Os3
+938xKfRoYjxsnXGBSGW7QQ9mbpkiTlueiMey/2iZixVaCwt9Cc8im2JazapRYANs
+9g9SIVcCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFPFjkvb6mpbIdghxEUxZ6LkilNbqMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAVBX5
+sQD4ymhbVyVOQ6/1rV6HYEC05rxZJ9vHB02EDCjRKBpdExaxg18OnYBNsJc4eM6r
+hde20pue4j1K4UUlG42nbQdgd5W5FQPZUWJ6W+KXc6OXpiqlfPbbVBeWCxvkJp//
+5cmwMYoIQF5waeBIYRp6pLPUIy8gcrUKewKFs2mciB7GBsBJDk+D2spuqmZLbOBC
+V6rdJKBREXnsPwzf8yqnolm7qjtKhQtcyiUal93XUcUIxLQKOIp1e4MWBJJxv7Tz
+rA2gpCRg17WlBiWp43SI3WJS1L1eak4rup5TGD4/llk6+twdgIbRKGb5iDzkKs3P
+HaGWdtXjKfl4+5wlOd3JLCmROQiVul4M1yTMMmZ3/BNNaPs7fVPCoe+b6ez/Ypeu
+MCoD04DdUM56Uxursb9oqyWxcd2nZxHDb+HMV0VvuP9QPtyvAxWul21qWx4QLF8s
+AjwF3OTsntnFL0yjwZs3vjUt1Qs9X+zgcKRqVZslRN8Z4+WQMmz0pAToJMcj+xGw
+PogB5lFIw/QCzodu1lnUBSLOIq9q01ZmwxZ21QIiUtknSmL8sRDTzcXyf5mB6dzb
+VQA0NT5MyX3w9lr3r6AHftVuMSjzwRz6Y7/8VAItyP6tDUNlSqPqnBtsuxYe7m/2
+WfI9d+OyiG5TByZHsm8KkE0CY2BYeJUrEFAe8FQ=
+-----END CERTIFICATE-----
+
+
+EUS INTC KEYID 51C73CBCDFC990AA677417CD5F78BA37D4A8D731 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAbxc47LGle3tmwAAAAABvDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkwN1oXDTI1MDEzMDE5MDkwN1owQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtNTFDNzNDQkNERkM5OTBBQTY3NzQxN0NENUY3OEJBMzdENEE4
+RDczMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMkKdXDZkj6VASjH
+ZcDrJsgBqHgXx8cD7U0I2IEoubbSo2Xb4d8SfryOYQl9ByGXS/nwAfJ1sBF/ljFb
+OWUcqh0OPFpsRsjRgl7CADDxBeGktwHCU7jAx72OpV/TnKxe/cK0xEEHBoqUepoW
+fdLdSxuE5ZpINWaXfDgyjfuk7O0Jtb7GVJQlVDeV9Yermbjuv4Dd/YuKPMRNa2vF
+Pi817hn5ghhI49EUdEOhg3sZHStR2tM87/W7kImYW0nJvPkvyo7tC2or/1iY2qSw
+FHwuxmOexlp8y94D6HriJyXG+D9eXofGRE0KmDO31xiIF1nyl087QETUEuy7j9iE
+tJK/4eoZROI1si+IdOXgb69OPzYE3NdqfWDB2IPgB8yTnQe5PzbWLB80zL6ldWa0
+TS2uwJqgN8v0fsMb1MweC8XswylaNZLwDz2vH3D7Z9VaMFMpRfMgVg7rRWNViryu
+whXE+mpUjwdyaqTCBG6V9X75iptC/cF87umWybrJCvwYgbFvMJsJbATP8pLzenVL
+lJHiFaJ3k2x1H7g4TpTsfpW86ehcGzuBcZeP87ciOH6SWmEjGtGfJl+ppm7jTPFu
+JJZTPKGe3DAv4xzqT9KZypouNetqTKXcytibfdQfqZoBO/6k84VSeY97bGTJGgPw
+ygRbjNs7BXAbkojizPAaYwH+eHilAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSOzIlOWBiKYthD
++x4PSg8PY0kJtzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAFw/zNYcvDkvyRy7wMJdruzAuS+LgIAgn2TDj5OQmMsL
+q+UJkQjh+mELaVM695hw2NWr5jt+5TKN9o+m/pkYDglIGB5kPCluJgcjG7bUMdgc
+f8OBUJY9REuQdfEDnOjInBHoc2m4nKjW8NHdVtJyYM5tkkL7U0lxfzAHgerJmUbQ
++dSnLWcnckHchG2u1G6/yAbpV3wC87RL1XhU0eAKv19fVsZZudpBBSPhcRmQE1P6
+UneWuGJlMI8zJxqydpeljVZMfLl670+KbPe7u09rqqk4yi20f1Rqjt+0TeXmWryj
+gOdOKBGZsQzIr3GKxLYKKrAcU8Hz4gMnnpzq4397SxW09xr2VXrqG7jG4Yv7PhmR
+BnIxyrE/yPCRRL0GQfBAaWqYIrvfsW+O76zc3L9Qul72tH5Ps3ORn2m5GNf7XC/0
+rUZ5GOiZR4zrDBDFbGTZIJJLChKgNlG1Bc3Oq/aQ8LOxj7jswY/9rrxlCH6C3l/g
+iulc7kp2nKDid5FQlKUEf/GDxdvsdqlF2WoB0ANGN/MZeh7UrM2lDOWfCTnonxm7
+Z0bcWstVxuoBAfhqYWZd5JxY6nckReCbPflHXKHQ/wH5f8ruBtc0r4jlPValdpRw
+RvGvGXVF5kcgWc96rtx3hf4S+T4LIXp5MqhUjXqzTW2gElJCR0a7xflv6UTt8EkI
+-----END CERTIFICATE-----
+
+
+EUS INTC KEYID 5E73C89AA3E902B272B9F0741F7D8730E3EC724A
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAGkXDAadazM/6wAAAAAAaTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MTIxMDIyMTg0MVoXDTI5MTIzMTIyMTg0MVowQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtNUU3M0M4OUFBM0U5MDJCMjcyQjlGMDc0MUY3RDg3MzBFM0VD
+NzI0QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAODKD2O5FH5Sb1gp
+2YCbwI0t8kB+xd+BsD0ZVyjfAniZJrqzujj0z81Fc3oF0XeJHZylyNA0qCwK24mp
+tfjoCzTf36OnqvEV1duJXT/SizX31r8G7IUbeYeTyoB45QnjbRdiUowKH+sGMcJQ
+DKwveVq41neo9zaqPf1rpm6fEQBQmFYB3V5W9aCledguEyG4fLy50E/4yVqEta81
+m4PiPO99ob+43+9lVpDeS+flXO8vqV52FAu2T0OkdGGjTBG0v8QtKzDQdLFWROl0
+Ds0zUmu6fiCKo00eH1KIqRu1UGXFUmb2jS8IP4g4Dm1/FZ1t29SwLEpLSs8cNUlJ
+68dYCCMCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFMdk740jGUSWBLMjWRBPabISbsfmMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAeKk0
+c3n8BHY8JdHgWHOLF8CxDGJiwPXFoNqJOaIr/j53sWIMjgkHPyMHe1XYJYAm/ZPx
+D0UDU0Xd1S7JTidzWvsWtl2NdsJBhbRUQM7lhhqE/ALZfmtKUkJsMud9U8S96jT1
+E6qz7UNrobu4kFZxiKzhfO8PoaL6TP7CsNmjO4hfL0epKlYY1DYxN+a7o1olNDJ3
+VAZi8yXJ8LfC+p6WM7AqtBwTu5QDymM7+vzRoBQZEzEQwlxilfOR6uehm6MXfSUf
+Jo35+oVCsny6HHT7K7m7WjnhsOG3YQRif9xxjs/r3YdzEGUsotT7rXRw4ng/EMFJ
+nmWRh+ZY6cexC+Nyh92bTY0866RV3RIDhslxk/szG+EMkAzIKRSsCbeqPA2TPss7
+PF54x99h55X+19VQmxdyfpKVNGN5G6wZHeULZctrW6CBRjyd3ZNLQJ12w5gT3KJT
+2T4mCtEGVI2vlyWO09PU9+7owg+Jtbpd/nmlH8w/ZJ0hL+Tj1QIJzfgmD8N06De/
+em30DU1EufrKbxBsXnM41Tic3SPluzApTrZeGcD86Z7XZQjcxaAfqM15eaMRMtD3
+mGd2d86GGEqUxB5nPk/x8FioKxYzGIcbls7BcxXSX+pJzvdCx8hYHoKr3/LccRkm
+ENcfR/xK1Pg3uP14U2964yEJ/ANsp9CxvdAh+sk=
+-----END CERTIFICATE-----
+
+
+EUS INTC KEYID 5E73C89AA3E902B272B9F0741F7D8730E3EC724A 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAmZQwZw90C9GuAAAAAACZjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjk1M1oXDTI1MDMyMTIwMjk1M1owQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtNUU3M0M4OUFBM0U5MDJCMjcyQjlGMDc0MUY3RDg3MzBFM0VD
+NzI0QTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL17VBKe3m+/8pe9
+IuDB4VGTxivtDiDLY3aO9pwze6z4Qu3DVr6OIZLe8zJ8sZXF2ccNlL4gQlL3tX6j
+t7QTXljRPIlIiNOYs1+Ory+HWog4tO0nK/YDFSDT2jU7h2e7TCdImjYr+ljHtcfU
+7OK4rkGJ2Ua9itW+BueKxzkKE/Bcp1Dqp6braO/QHlHgTzusaLf9rTEw+ZZVRw1o
+/iPNiVf3s6+Eu8GQcz/fgUVokvB/97gwT9XCrGswba4Qm0V7/oziqtzM1z91nzi3
+KBQ7kRCEK1l2TAzReASMOlVuWHLRA0hTsfcnPiNYYKlYU1VVCwAoC5ZrXqiAtV14
+2JsbgvCmiw55trGOYKLpJJ2rqO6VDw3djFP6S/yoLV7l/DAG08A47pJDys/9pkDP
+iZpuhY1t+bmm6Qf0/zdlRJtZbmsLY+m6jniBOs07WV4X9lIbMZWdhz+Fk93manws
+R/6XC0MjEh2ZkK9KyC5RavNxluNES8ENtvVfJJGDX/oZ2YmRWHAdPD8PDauWImvm
+sO0mDPYlApoabrAkyhl0wrOtJjlIYST8e0B5kPdVGxotJO1NhcehSZ1XGxhp868X
+Yrs3bOlevSap3REXMdbSyUBI5raddt6g62VIqRfOyOOneHQvHr2JkCHttlnXiyh5
+387SZjTANJDagj6bCO4U8lwGlLIbAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTNh1XW6YqdXrCU
+TfxApobm1TlRNDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBABsfig4Hetcsydbdn7lA3Nvp0ENGLJaJAdBsvXKfKPP1
+gp+58LQ0GoJH/N38BswGJJ0dBs9sSDN5ZmV0ObZuNKFNDmWztEGJOB0mSDZ2LLgL
+usfO9AntC5fN6JcCmunQexBjh+jM7jtHdqN0Pv2XtXdpbN6+NpxxqPWiXX22O0eH
+Sw2TOAoG9BNxqgpJvfh256v4E53C7f0mAx2tTeQV4F96SlE4DTe/dO34hpX2k6za
+NPpgR5AWSVGnuZc/EmclvNjy8datPPkIzTwMeGT9QlTPahULPP6dXPT7E/CBZaZ3
+sxB/upYkju0MCkI3eNK0KvRHNDzqSnLyGgHxqRE/tcyNN2g9vFFh5sVtRFh7COEZ
+KPhulCvpRtxPJfA1as7b7PmAwGU/PIdd413bFedXEwGvCfRtgj80kD1M1XIOnuwg
+g0IifZIdmc4Qnuz3prA7dPahFBsXnRzRFc8+uEBJpClSncvXMy6my3p4ZlamK9Zy
+qz/NgKcLKaXzqKuBr8KmxDoVpHIxj98AdUVJZThAPYLWI7Zd9mXhsUpzkJwThEhw
+6q69qnRFjo501vIh4R4fYVkHZ3j8GzsP7N1vML+n087dYdK4LAhX+RH1ZrPFHazq
+lAFqjHl6QibbCbYN9pvaMtWfUAgkrqNbkRFp1sGlARdDIYFjGVOVmioR531dasaH
+-----END CERTIFICATE-----
+
+
+EUS INTC KEYID 6CA9DF62A1AAE23E0FEB7C3F5EB8E61ECAC17CB7
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAWt1syLJ7EikpwAAAAABazANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDkwNjE5MTQzN1oXDTI5MTIzMTE5MTQzN1owQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtNkNBOURGNjJBMUFBRTIzRTBGRUI3QzNGNUVCOEU2MUVDQUMx
+N0NCNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIshp0qIP9yhGvWx
+lwe2Hn06i1ysyjgJPrTmPc+XLXXDnk2mE/gVwqhzcWVEu5U8yVx3mMJ+lOS2IL2f
+UJ3EoeKlppHlk0/LwQcuHDnbrc8LH2k8hsxmPfcDuu3cNeyWwVOPEDaGEy26+fU8
+97kpubI7Y16Zm2nI9lZroaYjJ/hcBbPIYxnwQWf9Pk07dNS8F0gSYqM0UblClU+s
+qYHRR23MEgglPMFbcvdnBZ3ye6xvmEw+t0rnqJj/XecnWefR3kMpmEcoRbv1VbXH
+3dW1vs3W8/DY45blIbtpXDPc6WhX7POSMs38W4XTNvL19D0ad6rt4fQbIbvFNHqx
+c//CNIMCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFARTzJSfwZ+rWVgbXHwChigL7IQLMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAQ9Ld
+pEQOa7vyKkWGpO7XDsfp3pwcUonGwjpatTaA47xtPu8yUVPw317Fu+dpRbdWRRHG
+9fzFUqQFr4NyX1tGumyFzoKEgZA5bAPRk2DE/FddIqisxOpOZy3q12DKHM9dE7+J
+YKwtoH1TacpsCRNh343m4wXidPqs5Kywl60pMWv/wGyy3lX3TGjYsuJM3yeFEv09
+1vmqU87guDc1Z2bbZyOw5TPHawBJVWroB7Jaj0rTwz2zoub0zcvwrhBLoiyqRqKL
+UPvSbclLNl2Fl26WIaZEOR2XhaqpNqG/QA+rEe4PYst6oFnjLAN8KCDtyTitiSgQ
+907vYovPx9m2bOi+x/D90rVPP7v8LkjFZMUEUMh4F33vVen3scQz1nfmumpc7/YP
+NEWm9StH4b7R3I2WBBwlOyZtXCIrWKvhEjsjhyowfnTuqN+Wog1gMLbMqnQfwGXk
+pv8iOFr+ZV8Xtoo1+OA7eyQtSJqFVBOnca4/TOybCE9/GsQ0fTaMlnlPyFxoi0SN
+OKUkl1hKi6rzks1ZCPgsNr32SFFu0UXC+16hivUkuSGZxWScaKygTXRIXF8ECurg
+CVfdpjzi4cv83WP24UFBH5kG/XjWrOb9FHmlzpMmkxByoDHF01SehksK2wwaumHG
+AniUb5FaZF3ssOJcQlJ9MlNKApkutTPJtiTrwkg=
+-----END CERTIFICATE-----
+
+
+EUS INTC KEYID 6CA9DF62A1AAE23E0FEB7C3F5EB8E61ECAC17CB7 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAmeWmvjRGFAuLwAAAAACZzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjk1M1oXDTI1MDMyMTIwMjk1M1owQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtNkNBOURGNjJBMUFBRTIzRTBGRUI3QzNGNUVCOEU2MUVDQUMx
+N0NCNzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJZxnhSQVjPuahLz
+V/TQ+HZHfJ+CUGSkq5ofvY1M9w9cq0ZHSeTHqEUDEHCSPtjoOscjq640x4xJ/Xa9
+88vz8koMbW8cF03JoV21nCz1GcTXxCiKMaYP33RrCmbwj1CchTNw3b8TGRHqp8aG
+tdvEK6sSNZDVHs5EocL5pbLBGwSq6Ej7oXHacn5085oaSQR8pbEJ8uOkejeo1jGO
+IMnG8M1MdokL7xCpo2xwJdfpX2hlywVRwHWpbFsSwTB8pdlEyG+hCshiaIEZA2Ei
+jneI3TQMhsz5Uplssqlt37W+SpaAffjAFMej5LqEqEODNgVSnA4alokTl1NzE4tG
+0MiJoAjO4n7HJ0ThZ19oswyQ2CKP+nRXEnHVAKHk7+dPI8LbM6ro8uxc42Gsn3Oa
+Mfuzqq3mr/REKKZbpukujW/3+IfJpS3uFuK/wvVdT5F0Eb1mQSF7t0xNXPrC+BzD
+EVp+jTIDACJ+MwO22zE99yp5Aq++twYIGQ1emt9S0QvFLBGNX4gXh3XC3o67gDV4
+v8AgwxNbePRua4XIkMlx58eOoSPHKTo8y7BovXIxaaV2vkP5PubGMf+r3otTyMey
+TRmOm0lb49Vztw1HStDAmqOyF6c7omgW32MGj7g/04KOnypngsz8QzKm0V+fKR+O
+OzaJgbJosTVbNaPY0YWHkMq+PcqXAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQfN+QmXq2NMPQ9
+gEgtn5DSw097ljAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAEUI0l8+ytuapQijCWDZylZ423Xlw8tR5vp+N67u75qR
+iJIxt37Fr8jNOF+4qRi39aIPry23IMQwsQhCecb4IjkyWLtMNMKjRi2YD4c4SGcB
+jWis1Yl0IOfb2nTFYtx2VV3E8bmDXL3eKnqmhh0fs9BIx5NjKJvg1AwSg59n6Tco
+PC/fsXg8NodfhwA6UPoFEdVQnoXZUEyn6h6K1NJn1tr4S58KyaUvWqxzdYvtGSJB
+EMflNvCiSyXnliMHGtIPbXePfS5OO4o7rI9aP5asTVj2MvXdz8gJ/F2Cp6e7+QsS
+1qe6YbtkCfoKFioc8v+yYo4tk2fW2OiwcM3pq3KlkJqTtFTcz1b7TuMkG1HiqO4y
+MtarlTHduCYC6ZgUNNSnuTWIq45onksUM4NcAzfWajbVz+89GmfEgi2tInViOR/K
+ed2jgRIbaec9YwD3bTFI7AXJErT9PqHdLOKFh/iyzhu5m09TZP/sg+J+hYeKHXjJ
+fQFU9mdaC9WdEiBruWPKXfqEEegtNzLACrQ0sCljlDRdy2CbW1iQ29B49DtO6pve
+wPacGCvGCLTMHWwhsCzfa1X+ciebFQiESkVWorsBv1jhjTEeGzSoXhWVh49PNHP7
+nZLBwlPgRCblOLNTznAz43J4jFoJbgS0Y4Xed8v9hXuLJfCRmfeB4mcGdtoVEk3e
+-----END CERTIFICATE-----
+
+
+EUS INTC KEYID B99E979AAE48774EA2EFCA9BF9AD5B04040DC10A
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAQO2gYLKFKCTLwAAAAABAzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDMwMTE4MjUzNFoXDTI5MTIzMTE4MjUzNFowQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtQjk5RTk3OUFBRTQ4Nzc0RUEyRUZDQTlCRjlBRDVCMDQwNDBE
+QzEwQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALm4jGtP1v9LF9fc
+sU6a+3frz51lypwCfk+Q21OcMcbNh2DHvfC1Q55dTzTZwrpq2RQdrZMJLHj9BR44
+NYRI3pIo1FLS3jqiGf+zALa4kHiUtBzE/eJErS2MoLSpVrp8ab8L67DY+1aZFp+4
+M7982BVFmaga6nw24vnz4icsKgzZX56WmP+xSQz8GfVKyEJ28TBL754iZO5VMPrt
+6jEGZcadcj9LOcrRSr8gN+TqByLsDzEgfNEpfR1dzi8kCyWmM309Bn37peFDxeIn
+Q0NMXwn5rd4IbCfdTEMzXZD5oa/AypbDzqruQyLDXZLM2Mf5eyXY2tODaZcTATUu
+9q9//H8CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFDJO04/f38alU27sOGRDk/RAUF0UMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAdlEo
+CjJdkHIPNWD7xgmf225WgjukJHd+CbZuDxmonydTxmhmJG1hQALGYMGNrFQGQfIc
+cwLkFl8EThsPf1ZKkzNUP+j2xT9xv+3KfedoiZBPI9NPtiofpPitoyLNYNtnAwhe
+aesEE94oKIWOIFEqJIUksftEiJwj5n7YjmG0PB736DNQsWciSVOZivkNMICPWEQa
+zaS3N3SAAML/CviZud9VQmREzpk2Y4WVy7ULlTyNuTZ1d2TsRx5bnBDYbgAJyW56
+EaZhVpkRV6Ad+6Hljr/LbA2DYfXUmjqjXcJujnj3XKeSwaf9hTj5U4TDaMHkiNaK
+iV1Y+/SKxKYzl0nhv3TeBYaM7CCtxblCO5dSJRkmW/uvKroljs+ca+6JJ9BDmd4U
+eU/g+0+EPycOy7mJz+TF0mG9INST4bhAxA33RtbOX+ZQ0NPMNzUlv+RvklZhii7O
+U0BdhF9sxlNlGO3IjKKmY7ww/IGOrRaK+uUAVoCzuxshFahd4AEI/8LwMcoDL4yK
+tAzCV/oaPPY8sGPQG9fHwzJC9h7DGe0rPlRWAi/SMzye3UFrPZrasKv/GZ579jmC
+OkE1H3HMgTSOk5a+Ydb/n22/exEFZFmkXS52ka2ZWtZOHWfOKI/ljzKY2DviiOfP
+21Y6dn6/jUxW9ooxTQeMn4M1JekCeKWdZ9/sDnA=
+-----END CERTIFICATE-----
+
+
+EUS INTC KEYID B99E979AAE48774EA2EFCA9BF9AD5B04040DC10A 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAmvJ9tckw+A/RwAAAAACazANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjk1N1oXDTI1MDMyMTIwMjk1N1owQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtQjk5RTk3OUFBRTQ4Nzc0RUEyRUZDQTlCRjlBRDVCMDQwNDBE
+QzEwQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALXRkANb99uA7pp+
+quh4pSJhpbE/mJLRA2+4el/lYhgfasZMwMug41KMc8+BiV3AtouVojAoTe5HYdgf
+8Nzz4GsZkkYzpDjeEqxE9HCyf9rNerzkABDBcKLxp4CalWQ4nbSOeXTwQazOYjWv
+i0wWKhJZcXGnHPAuWA6RzHGQKetKUggOXO7TADHKpL4fpLvOch82nePo1MekoHmk
+Wh7fCGTgEaPZ1loGzYHV9fHwmAo5SUFsrvlgkJu/RItelhkBuU5OVeVStQ9NMUSl
+zC56Q/R5kgi/zfV96tayhkOM4WX54vKWQPM7VmairqAy83K9fKg0OGITdG8ce/rB
+zEJuQwsSORmyxLR8051ZWtjxQ50Q2KwNNmyZt4YsLOJOjRIJBrsnhHzy78cyZxp6
+a3hzMLSKhasx/NY/r3uOvMEBzWMRs4u6SP8nBsO9pwbFAPIkFA8KmRRYgb257dzR
+A3tdfh4tfXBVCuQPs6ASGh6qe5WjDDa9i95kXLR8rz98arUfZOibjAA5PlDYGIke
+aIHppfWb6zDT1icfJI+oXjy6zTUcGdXFv101hyGp81yTdHhCFZAPAHd9gxIMS2ie
+Y7HWj6gl1YV6mJprXmGwt4mp1vH/VoKPNkYCq9g5yULyKvEtR9lL8QFibfK9CY2K
+Pj5L/ZOTle0qidzW4GVxU4d15ZOTAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSfjOXvIStzRXAB
+ZAUahOITcljQPjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBACqDQ2/4HKhRdoA+hntoZMEU6LQu6o+SxTJQAcm+eDmn
+xiTQwsDj4W5RJpZ0+qL9mN9BU6WTJGyv5lAM3TiiEMLOEY/p2yTDOBJWTFTgtxAM
+WFfHLhn+SBb+3x4LkT/HgK9/7VH7IdvqV7ACBROiv1Uaon+eHKjM7YZ5+Pw80ouB
+JVodI9919J7mZRHjLt3Ax7jM8VAj7clqjm28/C7nDhOH7Vu8FlAuMfMqepS439cX
+ZAS8ukuA2AiN0ELOyyMyJ0HT57rqT/AyPFQdNY7R02HeRYsgMN7ZY/UZb+6/egRQ
+ugUMZb9fSGPIr1FgeiksF3whoKYfVwNJf5w1eQGhorRk2C+7wof8k3ta8LHDP/2e
+fhmH8JNC84zU9I1vjI63pzQl+URRT1PQ6fsKMm4l6yhaDnce351Q3rWVj8ZMjA/o
+cr7VJOx1Rr/Z9FsELniyHvLq6rx3/jkIxGOaSmB+pHuj3BqW35WQas1lVeR0VL90
+8r4UdCiLNGVU5JpyaldAw8jJNQd/+HT4n+I8Po4/LqOLIAAIOmxDjXkB82ZiKyg9
+vlOFIJMPZLDWqzzFxo2YWhdUSJbIc7IKZX2HZ5KOBap6kkJZKxkpUMB7fibw4tZ9
+jOGxdThKbDNr6ATLWKdOX+jJcHukJtuDg2KeoaA4dW3ChxpDpH1awBLkU9oek2y9
+-----END CERTIFICATE-----
+
+
+EUS INTC KEYID BB9805E319A78DBAEFA888B45615957205179181
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAASRhqjcE58u/3gAAAAABJDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDUwNDE4MjQwM1oXDTI5MTIzMTE4MjQwM1owQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtQkI5ODA1RTMxOUE3OERCQUVGQTg4OEI0NTYxNTk1NzIwNTE3
+OTE4MTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJtgIoPzMQPe8IkM
+JOyXxG4BVb7gb6mXdsOoCu3SEOcZeVITS6wtSFAk6cZrM60T6aayu7rDUjUpiHBc
+e1Q40Hwt0RWWLa5yJDUZ1FxKb+Wdk6lA22CezwDoUbLwKHAhzMS3p89/uInFYFIb
+9WGu67eW7h93i+F5rHAPhVx0An3ZX4DczHsg1H2vzhV1r4IYPsfT678fmY/YN/GK
+6A2T2b9mCLEwg/h+b7shdNQH2nljpDwI0C+YNqvKfn6qKwGjwjGj7CBmeAW2IJmC
+kdSfQ01t7RbqZIFlSKWVj4e/GUyJMO7UZPW1ur6K9d7fYZRIoAjjGPiuPw3ZeMkX
+sDScYcUCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFI4VfbeyWKcT4CHqpmskXPjczzeWMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAgFvS
+EGAuSiekS1hQBtlJPZxWsZfFwCmvcVl/pvE1gPHneE/UEGD7Yts+oqfYj5FIhi24
+7/wjjOHNGFQmjO84AXkme9HNk/I5aKOOcEda45bnTeD4XaJLAMV6ZNNMmUoitdBc
+SFTbrbcGnw9plI0yvdZsUqszEFrmVf2CqNYO/Bkr3K1iL37E2SibAX/pACLpnwaf
+Ykz+IC+FoVx3Eefvonrx4GHJ0KhuJ9PQBUbxJZlpoHaItPgMK3DU+iy376aq0VXT
+wcSJs6dY2BujpAj6KKY3xrcRgtqGZWz9K7tHQl5OOZEr9fqxc9KVA1ffLVnKcvbG
+SHPnTNAYv7jHpNNPe/63nsMu3COOKBh5qXGZqBmY1eTxRYWdXi2gJMidu3EXpmNO
+Faxo11YyyuDcvoe/Dw/vJhTA2y9nIjBV7MAbvh3b3KllSfwJXy1SH7byAtnDbQAW
+gy8ft5lWdaaYBNIilfFMHjEomtMmSlH0vm3ZVOznS+0XmMBhWSkae4aY/pI93i0B
+PKGs/gw0d1/OmhSyLjwiJN1ivhISSsixI+PeNtlUI3oT6pmwIu2lmnnIFz4HKKma
+/K25fgn8nJMiNTvhUGbZPVP79igiGZDVQMA1J63q/+rP3MtoF9ub7Dc5KwbVT4HI
+mXq/Eu1D6tf0TlevVij5Ob/PuFAmEAhs50AGPpI=
+-----END CERTIFICATE-----
+
+
+EUS INTC KEYID CEFE333390733C6727C7880DFE429AFEB557A892
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAASWvbYh6E56iTQAAAAABJTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDUwNDE4MjQwM1oXDTI5MTIzMTE4MjQwM1owQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtQ0VGRTMzMzM5MDczM0M2NzI3Qzc4ODBERkU0MjlBRkVCNTU3
+QTg5MjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALoWkqSQkFPFbxBq
+S3k95SZxOT4DmnbxYm8vP1KIuofT1CjK+fkOkXCPmTNKUvtDE5gn3kKdSDUqYp+I
+JjHbOviyKI8GbMQjoayR806sHJLdVDCK3u+QIEt3/7dror1qt8dj9AcH/4E+tLJ7
+5MDTsgECG0warGuckTV9PVp2IKCuy02d4iM7+M/VzS2/UuYWuTqra/3cw3E80eUJ
++hYNKjskW0D07a/WGbPkFNkJYoxYmfAjOh+Zs+6X2thsqXcMS/tNXo341HMeXH5k
+1t+dNYpsuB8kJ/BNbUBfjspmxgaQKzIXUFhadW8Ht+vOaV1Y3ChIbKXRWsri0rgM
+bao+Q18CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFOuxdw4MaTuiSkzl7rafmohpSTJlMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAHiYS
+1VMhleu57q4x0M4oWlUyZGwr1IgdFKqKckqKAQxrfUErHvClLiLHkg8EXq1opxu1
+kpDptjx/zBKLAsvvlmyl5y4wqw9K73mP59EqbhZMyhyJRWDHg5S6fXQZn7zqrEec
+qgrcH87QEK2X4LtWRVNpEbxxgCCvq8pyfm0QtKQYzmdCKwCRgfZD5Msm1BkhxGHe
+LyPV+E8kWTJGAoRJgUtJiFmZ+SD3a2jlGXHxN7LXE/Tc/eB5TMe6tDCxwOS7mavk
+cGVd+DtintQrUcvQG6jsAH0tfpbetZChkALPzpn0/K+V8qRF79jcXHY+C/mtI3c/
+FJ4fwuuuL8X9N3jbrlL3+xcNXjOKGx3TW5SWaDbKuc3IRHH5FDYF1jBnh64ZCC4+
+n3QcG7UWuSaXFp0Ko/hjQL1Tbgd5RSvpszRrHMPyX9D8PxBxeCTUUMB4c5ijhJuQ
+/8W7NBVEssje2TdXd+YSThVzr4AGjmWB9vT2jNKhSDNJJqnZj5deip9Hj2Uae1ju
+GR/jgIXuA0FsOVYefHyGUES3thFmSLB7zP9cDnjBBt8I0KCmRNAuExZdo/DWoMdt
+eQzWHKCoQUzcPL5MSev0NJtz0SfO0FWdrJ1lO1MXTYdhqNRMc9S+Kc5bak7Xqa91
+WNpFmOP+d5MyVyG1s5J5rIAguIu4BUaiy7xsC/M=
+-----END CERTIFICATE-----
+
+
+EUS INTC KEYID D73CFE5A9E0180801181A1444DE36EFBF88BA16E
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAW4WRfQvFvs4KAAAAAABbjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDkwNjE5MTQzOFoXDTI5MTIzMTE5MTQzOFowQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtRDczQ0ZFNUE5RTAxODA4MDExODFBMTQ0NERFMzZFRkJGODhC
+QTE2RTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALlasK7KO575EZy1
+AnLAqACYte7eJy+z7LSunk0Ag3gFFkdsl4gqy8fkqMSi7eC7M74RYU+VaPR0N2z2
+wKnDbwaPUMcPFEBWK8UvmtoAgPMThZ25fv0Q0DiGWGvjdJnJP5Xw63vNP4xrAtnE
+X/NL50sv/qNRFb7wUBZXFXP9uTsmn1wdo47anGs56dV+XS+q54h+rt1i/rcJlzfm
+NdBO4x/ypA24Y0OfZ0/sMvAspfWZIaSZ2CAUebc5pZWZTPoSIzt8Pl0jVZVdAJfj
+pfsIj9XQYh/M3naMM+kmKW9bEzT36grwrFZJ+KHCJGzTJe1SyecAIyJ88C/HTqrA
+sRp5KycCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFBX1K+JicCI/w4d9cXBMvvGbddjtMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAEy14
+6S9qljBwVc9259Sc8izzfwXTwDxYmtt7NQJA80KxqFodguJwfS089Vb6Kw/fOhLV
+uHrIN94Jt1eXLOpo0j3qikqZB7qkORy/DjsRKnzfyFmpoAwOUZwgmMBwPUDS9fil
+ilS5gXUKxzGTdjzbmWJ6iq0N2Re7LZ+xZOmQbz2I7+nOmlBTaxPh1IWpn/MHusGW
+4Gn/EwpTExM1OL7bNKJYRo2HQrlDMm8wWSz6rNyWJttArlYZPTAmjGvNo1nxtQnp
+l8I9dR6I8LwnAXw/joG7CGmMV3xVZjM33HaC59np30MaS/4M7k05HHtYr+DjMPDs
+sAJ/anN7vOYoNK9x+8edYT4qEhZMgTC+qx9UUZ77sk5gEdVZENdLvfzgzZl9i2Wd
+pvRms9AGnyx3pcwrLPDs1ZfiIeqewJ3IfYabkvConSW9iprMkyVEunubtg+91tnU
+m7oDkMQicp4uNLP59jBZoo89YH04P+bCeytrSpCDNU2p+Ao77XRF1VA3ERLItU7X
+9Jg8beIK7lyKhOp7XbVK/eEszlFYZaNS08iwOCtdE/qKHT52U9XaLMrJt7kvfc95
+2Nzr6UTXO5zZ4DsTXJivJiKdJRgbf73TlQy2tthTwFvno6sP1Of511FXygWD0/Ql
+1sj3DgOrxXyZ2nFUswZJc7rfukFFPCkCy1R1m2U=
+-----END CERTIFICATE-----
+
+
+EUS INTC KEYID D73CFE5A9E0180801181A1444DE36EFBF88BA16E 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAmws9mj8kuDmPgAAAAACbDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjk1OFoXDTI1MDMyMTIwMjk1OFowQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtRDczQ0ZFNUE5RTAxODA4MDExODFBMTQ0NERFMzZFRkJGODhC
+QTE2RTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANJy5bw/RP3L62ig
+2xgZD6du9KYbrjJAM7soQ67/WhJ4i9GV6HFp511ly07n2WQsI+zTtGYGMiQepdTS
+flAnfZASgiUMeoe3vQDIqY4fu74gpGjGV6NiFSBbgquZcWJI6yza49Nj8lY+Swhw
+oaHNtcw0muls76rGXxoj3rXLYtG/xqcokugE6e6gF1bgAZaEeNcETkqmM2+0mVBN
+NSfcQn7GTSZLd8GfwnL4/vCh/oGRMegAOo7Xj3CbexElLXQfXsz34BqNPyB2pd/U
+dbGbS1mDwnadE0J79Mx4BCsbHXPk4Wa2wH37cU6XWQqbjKYF2XZZCBLX4nta1j1Q
+tIkzG4ReA+/JSMA0BpzYydbOhADoOaLUuX8wlrAZF8v9wyOJ4IIf8+aPuvJV2Xoj
++BG5KrRxltwjYA2+Eo4TG34N8FGwZQhg7NWgWQMR75COFm3LHfFncKxE41l83O6N
+oUrqVh9fizYV7B2Qx2qbKfpAUulsOQyXSX1TtuLSYKOmyudb2WwstGhHaRRJu7nt
+mepPk1wyTjk0/mc/IIzdBLqrgAX5voa/5Rim46jBbNuOfFcMElTuMZlpEJdK1LaW
+kFX5GSXVjuC9dMmNXtq0KRMDjpEPHhAs4fjq/exzJBG2X2FQ+koRHsfr+j3m/dUl
+UVZrmclZDKfeE3bskLwY1aaCAvwrAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSz85vups9Npg3X
+kbPy4JA6X3LYmjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAGFRnEpAi4ywKYFaiXtsqgZDupLMSyQBWoluWgu3iMTt
+LDEKwTZOAF4AEdCuGWuAgczcWwMk/WdnRnmyJn5eNeu8DuqDXF+EJ8tMflOW6gkE
+7R5iFBdoA/WaKXNdCRDE+jT80FT/kD+l/y/v/DpYTkTZlYuQagLgLqXjIJLGj1vT
+4tQ0QJFq+5EAKiZ9qFgIQFEvBIoNWti6dFUW9T6sGS5vLSAFyERvNE6x+UX//jaF
+0wzwvmLQ4BF0jKSkIVQLIeG8z0ZhjOV7cjg3lKCR/tG6x/280WJsqakoeCYn/5vO
+vlAQraaEBjAyhzlw6Ek5nsd0kpaW6H75qFD3QcxOS+mxUq9HhWkDmR33/vwtdooc
+WniFBIP8CExyO5C4gNtY3W2pI+lTc/GlvQe0BDhjmDHfCYsgAei9bn5J9GEEp9hz
+uy3PiBPMH42AQXsBybEh98BLje9f39+2HUzOUn9pC0hUALyC5ok2FPn2dJuPIcH8
+5z5Mpw60VMN1xC50h1UtOpxL6OPEQXVxoNkg6ADEqq/cnWl4YvOlx/TU095w55YA
+Wm4lVKvIz6ilo7aL8WWloaN+ruxtYY3YKz8YPd7DCrEt0+5D9f52gCiVK+dHGcAk
+4XukM3+af9VHSTJZ4S9gfK14yE+rYNmxj9MJl9cyVaVnoIb2DYa85qwr7Jc23vSc
+-----END CERTIFICATE-----
+
+
+EUS INTC KEYID F99F207DFC8797BFF90D641D25FD5A45F76310B8
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAGqjH07qY5O6IAAAAAAAajANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MTIxMDIyMTg0MloXDTI5MTIzMTIyMTg0MlowQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtRjk5RjIwN0RGQzg3OTdCRkY5MEQ2NDFEMjVGRDVBNDVGNzYz
+MTBCODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALXzy5moh5thA1Wb
+7zGaLOGahwroG+Bfdxk/J3Ed5P3yonllAlJ6rEpw8/F/4TkY1uoyJh4GAxKF5BaX
+y7Ibx0ZYL8ZYsy3GMhB9z7WgkUKtq9arQbmMvgKBW/eEolt8njJawuVYFntPV6A9
+nnLulTEXM/gP6n7KkOOoXffnj17fwrUh52odlGWyPpGlobPOUQvYzZXTzIZ79AuH
+P03yXZjoHk7QVJ0z3Xid0cxWD6mUY7csaGOB2O0ZF5HuP5GYTC9VWyfFeSo2PxVF
+lzwldkN3Sii9vHH0NYBosiUn9JvdpDVv89X5+pET0RGE2L2ZrrzYS1nxOok/r72W
+nw6TQfkCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFOasLuA6cLa16YU5scaCUYaD+UIxMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAAxVn
+xv9XLvIoKBvIFGW8RFZjP6Bua8A8f8LlNyBTEsoFCdBXgpl13dYXM45ClmRdBu1H
+pTHjF6Ms3Pc1X0aEMoiICyPxSQpPZbg5IPrSbsuH3EbYMYwSic/wUqbklUttSxeN
+Z/qrDR8ysuAcZ8urV9mmyPRQW9N1w2m3m4sweqV/c6Uw7VYLn/2cd5qJ7W9RAbRF
+gKVvpB17Rup6iw2l2BzyJDJUqCCWUXkWb5QdrapgjRXHwzWro9UOlj2pynr24uVA
+b7r6u3OAHhtQoYoe1pF7/GUqQYMwA/FJ55+RNpmH7ldmUWXUdVxw8u9rnuwCHkMt
+vOWlbgErwLys+tW+6uCw/LMmrFUIe+w/mgmr3RuyX6Up/ry1LPwEz4wIBlMcBt2S
+w1Qei3fOHpNawCx3eku1pv4DOxJ0aCByLaqfSm+aN+xGMkXC5DeQ5rXIFDz0WX1j
+yoGjZl4YLYwLJDSri7NWbga1cFAbeIQutDdMT4PBFtq7g9Uf3qH2Uu6b7JuiuhFt
+W6qxm/LwiRk6ClqnpJ48ZOuwBPc+QOhknychSWORtPAAeLhLuqWyAHZlM4BtlWlO
+tnwEcihNKDMCHA+VGpMBIDEk4idZLkMrswh0LpDvQyIwZXLsWRMaeIMnAEfzTRAg
+YUMhjCaAR/wBONp9cLf1Pa9HEehZOGeB1sNYNsM=
+-----END CERTIFICATE-----
+
+
+EUS INTC KEYID F99F207DFC8797BFF90D641D25FD5A45F76310B8 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAm3fuaUlRccFZAAAAAACbTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjk1OFoXDTI1MDMyMTIwMjk1OFowQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtRjk5RjIwN0RGQzg3OTdCRkY5MEQ2NDFEMjVGRDVBNDVGNzYz
+MTBCODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOsDql4x/x+P5gMZ
+btHMM6bCUgdNaQJ7fA5FylL5YoX7ltA5q+CnmNhjHLrzSY3EdsIgpTdsaJ0IXe6Z
+wULSLE0H74nUIi4AfaIP2lreJHr+kRur4TivdWJJj1TEUhuaszsur125FxgEEtCM
+Ajfwwmwe0Y/SjUUJCl5YxU1sxC4nuggIwtTB/Wg6bZ3ORZWNrVw7qxE9VTqXc2XY
+k7xsIrvy+DMEx/5wJHrmb3uEShQQqy3RTJlJUxQWe7fuLVEztna+tRLhQ9JqybXX
+e7gTAbRsrIhUep0C/aLx0RmaDqNC7QNw4t6+XeL3du57DMBX/7RCAm60CHJxztqw
+xlSHJtDn4NF21HSOoDwQP7a9gPStV0lqbjk1Q+xqqPQ1Ornva7tqbVtbgCeMlLXZ
+VIXSAhwhQUKPp6c0P5LcSV4EnFY9Wsl5TalONgV4mFxegvh+FHuRCq7WD/KvF7iF
+SErmAa9YxEKejsazMo5lQ8kEiS0t4B0zpz57sBEvMij+30JEoOiekIiT78uayfvQ
+YVVzPioUKGhtbYpC1i6+PsdOd58WQDdep4SNeZdw4sUCBiYBd4BQ6YB0UREIs1m6
+GEPez5KTZzb/PaVvizbgpH9DGSoUiCzh9rmVvQYHrfW1mYP8q1LJsc86TARhY95m
+H1pkVeaGPAa+RZaiY+0E8zmsjT+FAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRTK86uZoRzCmVH
+9oej6ur+HiBJnDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAD8GECeJ4fKONZJr7Eb06S6v5rTSSr55xueVCMoS8NV0
+1bDFClu7NXi/sgsIlbTDRWlj8aIWnTwdFw/ZnpM34BrDpmG8bU55yZHgCxIOStB1
+xd2ONFA5m4eqES6WdISymZhav/ubiqymTuM6IwORQ8I1PTNPnMKOWrSrRdumrTR2
+IZITdNC1OAQIggNgouXbNRFeIekNja2WRpypoToiuwmUrVIOldokncUtfF1yZZph
+nj93ur0Q0BcQfaZdsKcMYKVcqwwSpX50xOKMWfA/71l57eX6D6YStr/sae/AeQGu
+pNfSVWwKsg+q/kBsQOU59SmPyexCaddlVvuUOzLnf0KuWyRIJNVZa3zZiAbA4BcN
+hwUxb95f8MBdj4GI162x1slREbeowqFR4YM5BkTDyLZCH7eRWF5UhQ0Km/m3AkrM
+S8od/rDQkYKjVEgBMMjbbVJnn9ctPTK+StvP5llvrkQY+UcJvmmwpQ17XfCEpPnG
+eew6HSqdub11RpPui6Q7jqnODVni7qwmSJE1zRay0N/s0iCYV7b0xEublFzZjuaX
+D26L4hwzJJnC8bU1b6ZiUGjvaTTM+aspPjgrfRlOUIyKM/2iABioZZec3sOy+edZ
+2R8wYIg9g3twR9Dw+TfRQmZrZMybQNvNtsQnoNngdQ7NNbukwOg/uknnmGCmvHWU
+-----END CERTIFICATE-----
+
+
+EUS INTC KeyId 0FA7B495048126120E12731606776F3D68A037C0
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAD5lrGsT0ZkSDwAAAAAAPjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTExNVoXDTMwMDIxODIxMTExNVowQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS2V5SWQtMEZBN0I0OTUwNDgxMjYxMjBFMTI3MzE2MDY3NzZGM0Q2OEEw
+MzdDMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALY7KvW132KuoR39
+HWpoh+enn5TuUdl+b2HfU20iReZJwpgBaBxA6CtY7yU7+R5zQTaPGHSqrd6YF4EK
+MuraqIpSN+PHu5hY0JPV1PR6qC/KlcmcQRI8XNfiIRBgvX7yvireFn2tfUflmFW5
++g/oHq+ZWBDMdH0lENv78ZzOu4+Tr1fvUK+zWkXM/pqBnYodkmenpgWf27rddXrq
+CIWxjPVtjK/+O4seg63q2HsT69wsxj94hbHlq3ZF792Dr6QoOmHL8Ic2VMPXapes
+9vgxRiXC5d1N7wVQuql9sNuX5JPRK6OE/pCHOp2VZH0fol9mXx/NCCGiXrMM3+aq
+hWVFyl8CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFJTBdEneydtC/3G4ZGjITtepUcqCMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAVNOj
+IokMCDlXnT5pkEV4e/uZYvgsfiY/o1c8p6g5JbQ+AoeB5udLv87HzPO1dXcKHn5Y
+bSey0VInwzTat56KZ4hNM2dGnWAOeJHHpmgqEfhj+ah+09lh2e29fuS5fmuKBYhq
+bcFwGjh9l5J/I9f7jH2K3U/hxkHcoJyBvriCtYAsMU8OHr3VkElXw312gjPFEeSH
+K54VWjPkY9CDL8DZMi+hWgQI5iepx+dpD/ZQciAe050ShaxsBOCCxSoEvD4Gath9
+tw1vG3jpH75DqPrDllqKHOAKg9w8floCYwB0n1TCi+0mVtnRKLZGpJZf2ezmUsOB
+vgEn1ZYgmqyc6iZM5WjFph8b3ChpTdXHJ3bx7Sj8UB/eBby9rDGXxDOAhUcAEMVO
+qRXABS8g/pQrbPfIozxWXSJWWphlBEX/QauTmpp6K09yZohM7ucQ4M9q2+3ZNDFU
+M0A+7oZmRkBvjLUN0Zeh45l6Du47LGIp4tCWhn0gMS02s8U9wno8wFwne8rCT4Wu
+UxsY2m9zGSfuuMeaL2kBZeWBjiJ66H05q5ew9SiseeE5U0a6krkc5o5fVGd4hDeI
+Dy+Juu/fztvkAs4YQoNawRq7wd7m8y1grxpK7/TurKqLqVTKiV7rXCswsooL979k
+RMpVsejowG9BjnoPy56h8odpanki9XDtLMotq2c=
+-----END CERTIFICATE-----
+
+
+EUS INTC KeyId 14092B5F7814EC9B713E9A9B90A4C519DF08E688
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAEe8NnwqbYOfyQAAAAAARzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTEyMFoXDTMwMDIxODIxMTEyMFowQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS2V5SWQtMTQwOTJCNUY3ODE0RUM5QjcxM0U5QTlCOTBBNEM1MTlERjA4
+RTY4ODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALGCVEHmjf5IeJ0I
+1KOy3yTciqahVrWiq+TQLNKmFAFCNzLBDZ6o8IvsVEQzXYpycoibpnYzVSngcwMV
+d6TAySgMDu0lWnzy3TGufT51OmxyaH17UGhFDrxAGon7JAxGkHAkLtrVWpupyD5l
+e+wUYl1U57ellGp7En85H3EtleSZrXgTyWnHBYY2XMa91tfH8GC/evpYmbfFwxj7
+rmMyd3en3pJougiNQ2V4njvadGgIp3ZFTrx2XwFGBsKlglMz+pkFU3CczQeb+Zjz
+qv7c2luITcWlCl5Y/PqFQl5iyRxafhr7Qe1q20SExbMLJr3LX057ogsWNO7xqWyn
+6u90pWsCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFFCruxTyDEx1ZoYLWPW/wJnA9RmWMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAUT8B
+kCuz9Ki/we8FzHDypoEmX6XxuD6PBiMAB2WMH4weXc2sMx2BSDGPvprf/BXgaRTH
+oXEZV2MYzLeiPVJPoGoiG6rSpg+vld3mz2w0+Tr8vQ0zh7vUPJNGrzh6EVsiX+cm
+s35aLVk622yUePRrGkP/YOlLJdeqtVB+6yzQv2jQ7Fn9I9XhGnlU0xLwsuKA+sLV
+rKa1ZQGTfl3wZ7D0Klej9/1YBiYtuRtv/2b7skUHV8s/PuwsaTUEVxPbKaOE6Lum
+x6H+6YvFbAhXZIRckp+nNmZdUrX1cylpoMsRXspvqvv4DgTjNW23Zv2SrepuCmTN
+l4of4jt+ciBRzSMf9Sx/sXioGdbaWCTMopW4noLJfte6SSyNw0vBR+HIMQ07AIAp
+7QN6pM6srwPttj+lnn49sa1cH14P3Wes16nj4igMHpDy35jFsxYyziebdZmFznNs
+IZN3v1aGgME/7+i2Uv2jmFy69U7K14rQQRujVtx/zUhYNdReZAoJ7webh+pwQ6UK
+0Jv+EhZWU6td9Hlaw4DdS5EamwLDBs4bp13BGuU2bwedBFTpgVPbsXUjadOrqdmU
+jh1y6aIlc8K2TNQn3bjhdcTMgkDr5Qgkf2VduQWwXWjDnE6u/C7h+AiJfXnS0r/S
+ZyvG9yPf9oWRJYXS7WEykF/ZK4VWgHmHgr2vpD8=
+-----END CERTIFICATE-----
+
+
+EUS INTC KeyId 145126D0FDB53E99907D6FC6FF1B90455B9E324A
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAE32aIQICL9eBQAAAAAATTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTEyM1oXDTMwMDIxODIxMTEyM1owQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS2V5SWQtMTQ1MTI2RDBGREI1M0U5OTkwN0Q2RkM2RkYxQjkwNDU1QjlF
+MzI0QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANDSCb2X0ZBntFva
+g0s0j9OQ6g/hJ0QRDUAdPJeRpsJYj3DnBo4roTRFapRJG42/IOWWRcTkysQMpWK0
+up8g1msDntgKbIkSQuAD4TOYqA+bAoBzKDw3Ql89+RlbdCnLlnTqjK4nlG7R1sVv
+tl/f/bGPksGoYjXB8gZSGk3NxQkyVoHuUsk92Tsp25NDSTfPn71p7jU4CBHU7fVt
+rZfsaa2TqYmTQ2nvOeO4BP35OjZ9XHqBNuf4eH7dW2J9dOP243vLtLyhf1y8ewxj
+vPpS8Aw8e1mFFt7OUu54Z96KBt++DAkjlXDbncn9vhZ6KZFu5h52KatP5AxpzLmy
+gLJ3W80CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFCKlwuHQP3bD5+gETLbOc9iQA6m6MB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAJIpG
+LRosRQq/h8Ya0GKFzej7JajGlecboFRt/zNnB7tl5hqGU1Vf+rOVw/GD/x1SYyZc
+PuHSwiVxwQx8lVL1G2ydp/2t/NhUe7jRPdfo32/ukBaNDOvJ0uB4wLc0Mu5p8I5K
+Tcjf/WMjcxZ+NMEEU1+01eRW6G3dKIuoVgy3LqzWJ7Ka9JB91EsBkC1PApicN+Jx
+Ihs1kBeFZHY0YD8AG/fQ3X1XoA6GESoBlabB0/c8+eFftwnvTolsp8kXqXrIpmAq
+s0rmloHl1TN2W1waIpW/GCZeyZz6vM2zvlJani5CXL1ylblgcKauEWkL9aQCgQXT
+sefsvP6JgjQDWeK5hl1ywYOzN/MxzyLs4ke0rNeUOsZYcOC5PItPK56/nh7IqUps
+WQuGFHlMktd8B+UqPoPz91jTywwYqB86adYt6Az7pjq8zKexC/fASE1T5kMc4L/P
+/2dbMfvwg5uE3wSYkNDjH3ScsribsX7CQbMVeSL9gkUUShtLIj+lnXlFQxfAqkL/
+jmoZJT8ArvXAeWM3bDKCiM2BMCKhdFDQSRlh8f+M8DtWMMyZmp7MGFsP/JOtq99q
+l2C7B76kg5eO2oLmLiYmsF7yU8uuoovFv8KGIO4oDw0IqwZO1rCHuJELSStnFnWb
+QGBnwS2Qb/IQREeYJgJoKAD/7alTGSgPPCmWMQ4=
+-----END CERTIFICATE-----
+
+
+EUS INTC KeyId 4994C129F1A548D488586F22A2DF8603739B3BD3
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAET918QcELhHvgAAAAAARDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTExOVoXDTMwMDIxODIxMTExOVowQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS2V5SWQtNDk5NEMxMjlGMUE1NDhENDg4NTg2RjIyQTJERjg2MDM3MzlC
+M0JEMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJSBZIHbSgg3i032
+Sgs11OljWxeOu4But/MWE+J5LN3O3taOEUzxKphAIYYflMplayW7gesOsb2OJfD5
+YMYojqGMITgGEhuraAmPBbdwkOuujb9q3zo7U2+9wi4APFjJ91LdhHod0goywz5S
+5D/0jTGu3vPw06j2lWMjXc7TWre5yban4wUo7iiuC9gl3aaXzjmtDx0IppdppFlL
+H4GL3JrRws3EUAexf3noXL1dM1RIj9B/R0qYJIFAmeZ0N5YoK65iygLlsu90zbJ8
+y21h8SKaZi8NRhUQjcFMCYBuVMuCFIpMbhaOWRXL+zSrPa41RTz5MeiIK63K6WPR
+8Rn38R0CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFJtqshoymT3a8pmubGGtyor7qJtWMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAdXZd
+j0PEnZhwDQo90dj2XuFJRWLHIqylKNV8tB1C8rkJOKR1plnEDZFDs9r3FrAoGazf
+r6dmTeZsffgfm1pUfitKNoeSYnoNHkzUyloXA/ckOXHidGZPUO2UeTH46EcLhFRi
+VX9aQ8GOUJhQNBQ5XWIFxu+kifD+iv5/4SZ/7luSlzxaQZewOXZ2OcXQf//bK4Me
+dXfhq/6bKZqx4N3/ePqIs1bstxNSgq0gbjtMq/eTdfnYK8wA/v+SiERKiccbV/K1
+nzbrkrWql/cv9a5VswPEXPXhsXXTXD4XUthdpb9JGHEMawMxHCb86yqeM0bH4z2t
+nCJO9agcjLXWwy6XQ7gA5LJDF9HmFX8O4EXH4snShqzESRiB6nIzJRNY8qArCgZe
+ZxW5fczFGgNgiK8pbMQpIzPk/nhFKWPN7P42dtKsJE2xSvOrwtSkvVybBai7eGmi
+aKu1onCgTii3rYRBqL4E8pPaCE0r+9W+VqwMvME2dmocIGi1vURAPGnTTouNSssW
+5Wsohedpfqwc1QH5sJjOMkwtu0OFN3XMdZ+oDEXL7Ga1NFEjXI1oToTZJgUeSig0
+3LqoJqEOYQngX1pa4ZMm1DfSdyYNoVPXtx+1mbSIP8OiSNzoMvLV2Y3Z2QlMCGKn
+Eqe2zpePod9HNLVz2QYILAtBPTGR21WYDptWGmQ=
+-----END CERTIFICATE-----
+
+
+EUS INTC KeyId 72750C52CA3E250E701DED65CC69204494A8573A
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAEry6QOa+4iLBAAAAAAASjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTEyMloXDTMwMDIxODIxMTEyMlowQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS2V5SWQtNzI3NTBDNTJDQTNFMjUwRTcwMURFRDY1Q0M2OTIwNDQ5NEE4
+NTczQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKHbVI1KG+tpC+F5
+Wt673uDUd4i3gCJZZ2nnSA+a3R6DQFHc9ZoUcmf9Gol5U8IiwRaZYFLjMrL9/JNm
+cU46cIhluTp6/CgYtem12HAqiBTGpesSMI8ZeISBePiFN7mqRvOucwei3gsqMuva
+Y7kGQMbJOzDAAzfqNr0S1ZFYXkNJepATbFuMGgXLlfl7FlT2ar9BAscZf+/207Up
+pUPd01D2rfPbiFrC+2AKcIqAbgH5njRRMFdooNRYXlpWhlmQ/UeR/gz3FnUsCOCA
+araiAf+zA1PzoZPenE3MpHrkJ8lEWmQ3UlvFmz/efMYfN6wKNXYuSl3ch2luvf+x
+d+F5OLkCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFFvEgnzMPJGA4OXEF/tWRCuFu5dVMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEACTx4
+iZ/bFe7QBMc6q+t6z5EbzfmqkTjF8EFZVLjmwHOjliv/HdHVMtc9VtkjhnP+QCHa
+GT68p1fD/EzEtiX8EfmEHREDkI9M8s6Bansxk7mPQSIO7TyXTZZVLE+65BdY4xUX
+LvXFj09rdWDeu9bnu1Brgel8kOi+d/QY5fAx3cNkiWyR/NEKKoeyUg5PS82TwTuT
+FTvoYL6oBgwFrPEeaLYz1ogUzrguGvxgafp97bTIm3G33yVTQv6+2hTbucDBOAnA
+MmoxdtLV9fq3ThUvXIi64hVg0yGpuxRGKWtGlT94/7XF7bTowfgf1PplZgsADpac
+6R9WVTqR5w/4yXCjE3bzzN8Pf5AdKG/9pxODxqJgxk5dT/Fj36/RMcOPrJ8BZNjt
+RccqXh16oFt9Y6ROnbkVdStWqBaa9KEBCm/Dr1LvPD5km1obn2udZal5adXbpRu1
+xy4u41vZWs/t7v8FJsD4/NEixHxDRDolb42iBQSDAgwgUNHRmEdk/ITbLZ3ZC/fQ
+BBZgWqvnGrC0WhWWKId8rNGgE73fKydOhOhYP65fxpATglN1lQ6j/nj8DADrkC3w
+s+2tLBikHOYV54Y4pR9N1+M6KflWFdqQyLYb8UPzH5zogdJOG3x8TfCvIN2r0Nae
+tHw22cR8IACWqcBDFUbtyn9Ar+oiN0iRxjaOxq4=
+-----END CERTIFICATE-----
+
+
+EUS INTC KeyId 8E1AD84693D5D89B1472CD8F999076EDC4115400
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAEHcqGIJXpg50wAAAAAAQTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTExN1oXDTMwMDIxODIxMTExN1owQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS2V5SWQtOEUxQUQ4NDY5M0Q1RDg5QjE0NzJDRDhGOTk5MDc2RURDNDEx
+NTQwMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOkh47uQVQXhO7VT
+uUBsMapiDQtHJRsqTxlrvCcPO0hvMwz5Go2yeQgNnzQhWn2rE125KUHa+EaiQGNH
+J5Y5Jf74HiG/xX8I9uiJ+9vTBO5Kmjqb0qtV50OppzG3acnvvRxSnNrNs39QX3+C
+4/z/TESZwEWC8/8omowS2nMonE7tESShaUi4izBtnHIW0wkRFsVznTLTiRMUeU3A
+JadU7RXYTnZNJEoH7LrDFXHYY3zRs+r/VB/LVd6frHj9bgzxYL/tgnLEf88Tmql4
+E56oG2ZRK6ArA33Qk5KrVwZrMD+8lXZZBwXzn9MQqzr189Bs0oJx9JQGn7YtVmCA
+NEOq9h8CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFPc8ECss5t3rccoGvqSoyzD8RnbhMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEANKjD
+v/HCXKAtv11jKwAPdJbWcX51nbGYO2BSqMhCOVw8VAt2f/gz2a5qTeJ9OEwTv2yE
+rcpEaKQhwfEEdVU6ujVq9ROfKRNLEVQHryMNGDeEc2uXdEt0ORWkMJn0KYcYMaTA
+6aX1MepHfBomuA+2IIYn2zUXbtJ+Cz7MuNyYPY6EsNhZD6gDHouCk2fGKPhfQ1+9
+gXK4NuorCW9aOAlauoV6fOKf+aNuhAJxDmxRUB7jq3xuhkVt/SzhwxL+5dE7+epW
+LdUk/U7nB+8y1evre4v/xZ2aEeF4NT/YQHv/OMGSdRYyRIM5Pa+hpo50ugIiAV9l
+Rrg/CVy5TyOU4lyfshIc+4A5hKAMvHyfA+XleqZYZLbE6twwuGJH+vGR7Jmuza/l
+Inmnvle/rRcnANrJ5JoLedF91XvhFhS5E5PPS+Y2h8OGz2k0mKiY11fXRjdMQVti
+g3KJg9jd5p6+xZ1YXttFMZnwX8QMxxPzk4Gns51n2ioZRmb76CgoKRQdVFur1Wke
+POgHQqqTCMOjdZric+XYAugcw+exon8zq2BlG6ll/xYxphMfISA8H5AGuv0K1bry
+ExRLDso4l3wOmZxBl8L1WOSzuHVYlfedxbFIiCFcC6lkaBMTcH1Aybd7MSabIcVR
+ZcYPwI3Ty/teHn1Xi8DQJf/qCXKdLS4pg8/s0Sk=
+-----END CERTIFICATE-----
+
+
+EUS INTC KeyId BF9C5C6FBF80CDCE74ABCD0E0E6004EA022A6606
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAFAzbiD6Y4QKiwAAAAAAUDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTEyNVoXDTMwMDIxODIxMTEyNVowQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS2V5SWQtQkY5QzVDNkZCRjgwQ0RDRTc0QUJDRDBFMEU2MDA0RUEwMjJB
+NjYwNjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKttX+wXWqpHDOkC
+4dWXht80fd6fiTEvZqRjtsGUMb1ceXCVFjPXda+1l+MG1qrg7mGJT0qRH5EAezpj
+O/SgS+4bT00WWDDq3Mcugxmk2tznKBebfNUzGgsMYP03I4SVJ45gqCkt0KjdYcEw
+agpEPbeMWDxJ6LZgrUFZJfDlN1X74UHo7tr96lZmsZxy8ni5bxhbZ+OsiqQAR4zn
+RUV05b4eET7LH+mIqyvL2JNHKAgEgAv11awLxOTD7POw5XDVQ4+TnZuw2o+9zbSV
+Oe9lyXdJEykk1m4aVGzA6MG4QXn3A+Y3qKSjayAoHFz8rZrutOoRUZBH2C3miGzL
+pXW8Ci0CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFDb6Pl4eRSn7KOQWGnAELjAQJ3fZMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAOfOw
+ObTJLC2ewPQu4yu7v1xmQLAf2pwsjTpLN5JUX2D/7ApErztVB4rMtPpYvOMhcT2K
+V95J/S7Fa6TMUD8ieLfmngX5sVEHcRRD49KGDfF6Tt7V2SmNJvp+wigf+CopTMXW
+H75jV4bXqDz7sCzPohAG+hN3HGZIUQQDaR/sOB5csuP4nx59RpfBbutmjv004HGR
+7ckixmMkdyluRExw/VSFzq9+1dXxeio/SfZO+ZF5I7JLMbxA0ZIbZoIoH6xfrtBt
+kXhT3SakP3I6MSNphvIc4416pKFNerrIhICkdMLRr8bYkoHCwNW6zsB5gAA1XQmk
+Q6N5pEgGbSuPeRDan32OxFy3vzbQzBnUbV4pfok6KbWNTZDol7O7usAeY+vpZ//h
+Siaq5uNfHg0R8ItQAH3xRgnuZBEBUS1f3GpRJDqg0TA9OgFJHwhf+0CyyREJ/2sl
+4KdcrREVfH8rzVp94/8Zhz4Nr+uldyvkOWT2UWN5PNzitRDKmtGnJ7WvlFbt6POh
+/u6zM+awkEp4/hWCHl6uPT5UV08zyNMctWCIuwWXDmKxdXcL0MWhMsjKKDLctP7W
+MlMH4q6t/2J5VbUY2d7RyFbFcpR5h6Nx0sE5kX5lyM5s3zOKEMfHqGXSzSWatTvX
+dslTmIqOOa6BKlRXLe6nSftCAwe1b7phsjPcMEo=
+-----END CERTIFICATE-----
+
+
+EUS INTL KeyId 145126D0FDB53E99907D6FC6FF1B90455B9E324A
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAADtiAUvFZn/F3gAAAAAAOzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDEyODIxNTgwOFoXDTMwMDEyODIxNTgwOFowQjFAMD4GA1UEAxM3RVVT
+LUlOVEwtS2V5SWQtMTQ1MTI2RDBGREI1M0U5OTkwN0Q2RkM2RkYxQjkwNDU1QjlF
+MzI0QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMMdDmxluQEqk2Sf
+V0UF+9fB+EDV/uazh7cekCi6oQ70anGZInuIynibRoL+G5rvM1V04sdmzZ3MTOa4
+U2Vq1unCKo3yMcPCDWCTWip9C20yp4JuKtuiDicDhOA6WIjVdgkvU8pxy3op76kB
+xOeYnfic+eUKD7i/mzQVlAom/7jcBWAXr3iVYeveU0N9SmSTfl5unG6KZ8xKjeF5
+hVIawr9G+aHrGxlaY4GI4qsZhLJVCyOHrpEn5JfyZcGlB7uUU84wQ1MLCkBiu+na
+UrMfaXzhA4L9Ane7S7ra8QcLJfgGKDGaE51UKuzTWntP/bQatgoMzjTWBwwryykl
+U0XHcOkCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFJi6GyVCnPw80qYmtd/zWhXvBbalMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAJ0t/
+Jx41HVNSMBFe3mzjWCRSBxQCaHlRCLkP9mZGYoVX5SQGUrRK56ubnKAd0GlJGWP9
+rI6rDrbmH7kWF4TLpfVNb22teJm4Q4gWBHxL6pWX7gLbe5p7P8PCnGTG3MR7mAsp
+qfdzGMF8aCBEA28baVZsMDzKkdN/In7pVhZ05vmF/QmMG76KvvJEPYcMipOLW4Ga
+mQRLA7esITLTryEzhjgY9QvJWILC/h2ogDViFFOYL+Q0epvxdjoP2O9hDAFp59CA
+KO8hAMsYDV6YrFNbdoCCyedumQJdssZJnYBhaGIxxumAZjNmjSLLb4PHq20n1cG4
+H0l8Tv1b2q1pXNqIXoc3A4FLirKpl8fUTX4q0yA5k1IzIDx37hNSNP1j1k4GpSSH
+uN6qUn3Dv7HgOxLQw+v6STxnlA0nMYAMLkYUlx9Tm+6vcjgtNmFdkn7YxyJ+YeNJ
+wmwwFJFI2d/D0tC3xTgloiJkO4s9/VoeW3PjYZi3PLxNnZo3LLz76ecrSYp7gfqD
+zekYVtBSk96vsg4tACK3C0fkyfZu/hlXsdS7sPw+YUxPb7V7R9qafrHU5EA7OOJE
+nBK8/4YERUhoMeu+7dGs9PLqD2MpZ78D7uAeebb1mLPX6AVWvhJIaPdNXLio5sxn
+gzRjcrSXvEVsxxoHkenZkdQlY5i3SzUhs8WNRzA=
+-----END CERTIFICATE-----
+
+
+EUS NTC KEYID 08300F43A8F4B8C8E624A4F7060CF59E745015E7
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAGtKhJumYBl2sQAAAAAAazANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MTIxMDIyMTg0M1oXDTI5MTIzMTIyMTg0M1owQTE/MD0GA1UEAxM2RVVT
+LU5UQy1LRVlJRC0wODMwMEY0M0E4RjRCOEM4RTYyNEE0RjcwNjBDRjU5RTc0NTAx
+NUU3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvoWKtWSo9zzYUZbJ
+xWgfUDhOyfwh/y8Wiu2SQq+W7cb9ocza06svQi+JDvxAWCxkMVv+cq62G5c/Dagg
+exbzDe05vX/utlwHRSzTchKfKE0Kyvnpfp411lJFSGldPkXlmqYljW7mGMxMdJ9B
+Uzrje1D+1DQMCkxsukO/IiizpwpL4gqwLk3iALff+szSChJGPumeYTa7uq++5FAK
+d/xWkcSi3HE8UG+ah2GF4RRlJbMxPwAtlNc109Nr3VkTCQMI2g38+mSsDooUn7Sw
+s669K+pMw5rUeAZA8zOGxloXhABr+786wxcATGDJ5qVv0Pq8Dc9gHnAu/NE0DRAc
+odXxowIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUKgXemerGcdyrvJdHyvRnIxqW6FswHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCcU3x1
+FmdC703o3cYARTJOtKtElfUZA40FhvZfxIgqOOfJDCvKPs2g5pzQhp4V3uhwperD
+/5woMwM6PhIvmZVZE9sXudbTkfLg2Y2PpkHIgRmt9MlqMIrXSvHtG5f4f6CkV2Ze
+aIqtYJ5Ah/zzcfj9MyDrqSvpqaddaCgue3w/CJG/Rf8AaIivGdZfvk6jy8Js6IQA
+4WRN+3dAIfZpz4MgCs9MaXBzPt881WJqIqsScbEPLW5SH6/5q85cRsdKYez908pv
+bWHHA0B1hOEq90zYBgKMcuMOGkfKu3Cl6LmIxq5laM8pKoZ0OxwYu9HVB0ko/O+t
+wG7HN9jyrW5msQh+UJuQTUAK4FBcfOWsmr9quf4TbRtDYrg6domzM8Ej/gSAkUjZ
+DuYKck8AXtCL2bUc/zYYfMKw4Wq0m7KE83eW87WYQnvXleVV0uTLCXx1tuRN/Xlu
+5enwuFjGXJ+l/QVxu4YCsFq1kIuy9IihQ5hkRS8CTyeOhVm5dhDA/5o3JUe8RFvY
+ec/3UjO1fOBAsdNunuqu/JBUtrUyzHfi8fLVWAz3kTUdGiqd1bOCeidwTQD302EL
+RcjwuknzUwMk2TheYl7Ogs7FwlOUKPJENNFVUdnRRH5WTQKdqgw6jvcV4eOCeAvl
+rxWyHpSUbauRC0BhanxPsGJY0N6ymI6ShQCdSQ==
+-----END CERTIFICATE-----
+
+
+EUS NTC KEYID 08300F43A8F4B8C8E624A4F7060CF59E745015E7 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAjKq+Eg9faHAaQAAAAACMjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkxMFoXDTI1MDMyMTIwMjkxMFowQTE/MD0GA1UEAxM2RVVT
+LU5UQy1LRVlJRC0wODMwMEY0M0E4RjRCOEM4RTYyNEE0RjcwNjBDRjU5RTc0NTAx
+NUU3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAkgKOc5fQOU/BkEVy
+uRr1lo2CoLMM+UAQHcQJHDEioiskpeLk2C67QaQeqL58iFC6sjq53mKDGBDrW3Wx
+bl8rmJ8I8juXxA7oInWrVn4hWazQgHXpycrR5JOrjYS54nVCe82f55DDaoi1cLrK
+AJWqyBjEQ/SrQHx9qU5MaKP0Qswlo70R3qm4i/Ly93XgItWejU90FUeKTGwp2ZuO
+0ECuxoMC1pcIf0P34yaP/ZXj+tue+I9tTvmYicjXP3XFxhsmE1Cc/9o/YmDMBvum
+t7cQhink1kCyMgrqERkUr/NJhdXyIt50Qb/xNPr5H7IXHcqTNy5d8HCGbgNr94vz
+GchOWypTaDnuPY7t1uJBpxCW5qZLHKbUbc07LeIqQ5tW94uSIHgDH3E/LZ+0rUqb
+45FystFTYvs2W9ynUzfRjtVC69S79x777lz69SsJdc2vdY7FZcu4laS6D1h0jBmB
+1OfUqZA44GylDyaddeLmweIxrsny8I8gKtOTg+NtOgw2iaVL17oibDTY3wK69qyi
+61M4dNrK7ggLkskgO0s9UWalbE7VFBd/KVJeRb2acBUTDzvT/k9qXWmJep2FRqQT
+CmX3xaFoZw+5DqFvmaYFV2UtDDw/Eh5/zx7vmKaaDJ4Jrp4yYpm8n4R7+OEC93C/
+EiILi01XTDQttdcGPPBLySQctO8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKts369VMlrV+okC
+J7oF/dsWlonEMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAlfRE4CJE+Jg0ZXN8EipjGiUk0sGnjXeSKekpOMAWLQ12
+SCppeQ9VgiUTkSahB8vwS1GsfxpUjbOZBV1CbRFGYl0eKngS9XaHpk83YgihHJAC
+m356Xfb86KlVsiQc0sSn9tj/ThHY2dCQIiiZxe1IdU0T0h583RKllGbjGat+CvDc
+wIanmljzxhnwJk0T2acqDpBnSvcdxAEjTX7DjY3VHNehuHkZ3OIDlwGPTTORfhtk
+0mAPNLx6C2AQZQ1xY/3IOiL/f0c/a/zkBCvJqstPBMEjpbPz0Bxa9aLhLAfN0L9t
+5GOEPEGVrAOBatTGNnuXPAAYLcaXr8FvCZBThczwN9U1ftArJfN+feWZZt/VkB4T
+1uy7sbKPXNcT9/WPi1RXJq6Ov0kzKtUhdFbkM7uC5LxDu6R6KcAjVP3fdQwfOkev
+UhH/OEWwM6aNajGtLpPJre15A+tTl5rvmJ+AYW1Q+hNX6XPXT9OELTT6FilFlYzl
+zp1oPaQOJLOcs/Qi+X/v0zPBwwF9hnL3oXiLvo2W9z2INOwQYPAT4b1e/Q6TVDWH
+hzgu8DIq/lAF2QKNZLbXnCrOcOMIlsK7ZGZxIVBk/Qu8RCYsxMhrecWwtHx7dnoM
++b6Df87PPwLPhYHYjDAbMX0eQnNBy3lDY6KE5iSe9CxvdSfr6RYYdHq1VyJdsLI=
+-----END CERTIFICATE-----
+
+
+EUS NTC KEYID 1591D4B6EAF98D0104864B6903A48DD0026077D3
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAP/BJ0QbynxwswAAAAAA/zANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDIwMTE3NDAyNFoXDTI5MTIzMTE3NDAyNFowQTE/MD0GA1UEAxM2RVVT
+LU5UQy1LRVlJRC0xNTkxRDRCNkVBRjk4RDAxMDQ4NjRCNjkwM0E0OEREMDAyNjA3
+N0QzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxd1X2PhH30KIEao+
+lu36RBCtd9yod+v9gpTokamoCZcdHWVBdR92eb9NmItO+NLz4w/4rHtaQYk1vA9P
+YmWY+lcHLp9lUDLnuaPhM0VgGkhHQ92pfTE10kl657Mb9Xs+9UehkRg3NY2nWQGq
+M8NO8jmJBNASw4QPwHUwPfswnM2FZ/d1uRwr1hNLv/qn62SJQxhPgTe1YeqY79h1
+sLJEKnBluMN6L4jGx5fnyUxTyFsg3SIS7Aab5lAGEGbIia6cR3e6iLHfg3Kh/+nV
+Ihxd9bkKyA4FLJBpycaAOHEU4K+7JGAR4mX8Y26ObGxIoeer5Ea+fiIb7gZ+uQBY
+6ywDXQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUQd+bdLyrcQXwp8G/RNbA/JsRV9kwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA0n+jg
+jI3X/eNS45m4d1yQ2OFNzE+Ah8YzC24EtXUUQsVj36O+tJ98NSZAAusZWac9BhGp
+Zn4QdzP91xT4Uznw1LV9v8fVr81ZmcfjYqOZMfu2HU3dxDZT8RAet9gzeC45qsjT
+/rvBr+bVf/JTn2YdNub0XkHOq+mAaK3d4d/1AWbyaIMqxzJIgj/aElqBiL5kU1rf
+MrysSenJUM5bctUgoOPk6N4RKYwe/PMpHssV0jNKk5aIUKiPc6QnDKqabaZEOfCi
+CzXdCnYAevxCL5+rsJk27pqo5F9S+OhBFfFQM4aqirua9uzsEEdL7dyhC23E2PoX
+qMUj1vsU+1OFbCjOJV+0N72oZPLmiKon/3C/XhFvgBCtJubzspwQilrKI4ePbS7N
+fZDGduX1BLNnr1YJ4DeHpZUmCkRSwQKqfLCdSCxSGyZuEO4elDunDGqtnlYNHynL
+2nJ81CqWhPi/TGN1Ubn64/DVliYNwc8vRYZEM3FEYT6z3pA+jTnVAAjz1HyYid6S
+/FjhvVQK10Tq+Fjc0HHSlWZqIlOdD3UVxDTpQue8WPdMMrZLz6wlgRU/VqAoJSUF
+ndM0RI7TCGfhOnWzlm7h95AtY5rShnUrygtvptt4EVxdXgz9WD5sKwjiH2omrasS
+wu5q5hQuWwuYR4D405Q2VR587EvH4wC9m5B7Zw==
+-----END CERTIFICATE-----
+
+
+EUS NTC KEYID 9FBB79AA0F526278BED150929A7171E96A35BEF7 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAm4PIEVQrRctOgAAAAACbjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjk1OVoXDTI1MDMyMTIwMjk1OVowQTE/MD0GA1UEAxM2RVVT
+LU5UQy1LRVlJRC05RkJCNzlBQTBGNTI2Mjc4QkVEMTUwOTI5QTcxNzFFOTZBMzVC
+RUY3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAr/eQkvV6uhzpj2bS
+ABtGkcsm6E4y776qGriBgvAHCejKEHwlgSrDb/0P9totScuDgNCibB0CUBFLFjSd
+Wpr2tPaUp47v7YLp+hfdOSsyCn/snKtd2/0/P0s298pGZ64ILOgAXiTSkJfN5d2A
+JZVFpBHowCFFz2dXrXbwZGxenLp7xMvoHcHuqWVRFZOHe/YuyvpykQEDOGLeXSBU
+qHlhTxaS2U3KAtR+KWtHrRxQOWkTxZ4/WQFOSUoTJKY3NVDP47h6TC+Bv1TZls2q
+9wzvQ+6Mc9NwsIxnDLsxVhK3WTtZq4gN4dKp2vKMVdIX+xavMVMyQBZsMIPEsn5H
+E2iEXn200FSV4iJujG9iiBr1NpZ4TxvrZryxQC/GBMRCOzT0L8NGwA6/2wjYgNCQ
+ubm6KW2hbgMMALyxKOb0y2uRH9RTJCUVHvAZRrP0vxGWfC0QAI/w7U6ja8WG5+mN
+LKOx5G1Uj1R8hj9IC6RtQrKsoGcqhWiAaHrwYoJN8VYXqMRk55TS/hYhbSXyYJMw
+raHWIW/eKibiUu/TfsRKPhElzSxfhVsVl75Nj/KVaZP1+OK6YvH5hF2j+R3k3ZCf
+JNYhUuuW8DOgltEXeaTdlyebR9cFjDWnt5sDbVV9Mtf9ffQzQs3NP9oi9ajsJBEN
+rzbVbnyNtVgRxZYa9sA0cROq3SsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOL9pzpCjZKS6VQg
+H6ysWFw07pI9MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAC2s+ZR/tmuxisQOFH0A0AdVGR34bToJY/oWAjyrFjtFZ
+V8wAGFpH/Y07l+UnFxTb9gvquD1G2Gc/dtCR7gcP4kFlRz/1o6WvZ35wBGrV7WW7
+kSTRONl6SFZWs2fvHTX5ebKVq6hDGvj0dyvtphZf+iOqLpsIEA+QSmucY2FWDWqW
+oP6P7OPOf/Z8V3v3izA5m4oNBzqEnnJM1akF/xdto+quIu70ucqmAgbzlcOrOHXP
+htYXMk7OxzfuVEmv5oTr14tKe8pKDktnsfInoRB6b2QlBH61VBhDbdWmu7+/wV5N
+lOs6T/bBr5gEeafOjKZ8TT0dB7U67ouPwDI7TLgRlyhkd5WqGphVPbLPRLOxyaCv
+SsTmPEXmMJmTyOWpCGF0FMK3qbmxdzTjJE/cU9FDPWIZMMToud/ZBuBc3byWu/w/
+Fjg6YPa/mLOnctj9PT6F23DZi897psH1ZRtuooVcqaoMxj9CtZTJwyYK8zUA+yws
+6cZjQa9/sWZoVPS0lIxDVI7Hs+kHsfU8gWnVBgRo47FtCcvm4Ct5dlvfcd4pQVBw
+WSrPtXGHkY/VGRd6S3rwVwZ3ETdLKVH4MoWr1xkrNu0c2HNShNe+Dc+LZU3pmd59
+ZZnQGCgctOPkBqVbHsNUIee1lQmVtUQw1zanGAc8h6t06BFyb2AbRfrGQZiZRTg=
+-----END CERTIFICATE-----
+
+
+EUS NTC KEYID A0D737290E16CF2AE2BEE7100CF56B2F04C5F043
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAQQ5TDyLHjCIYQAAAAABBDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDMwMTE4MjUzNVoXDTI5MTIzMTE4MjUzNVowQTE/MD0GA1UEAxM2RVVT
+LU5UQy1LRVlJRC1BMEQ3MzcyOTBFMTZDRjJBRTJCRUU3MTAwQ0Y1NkIyRjA0QzVG
+MDQzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn06NkIBJ+6jzAzhl
+9p/IE3S+iWIKRJn79r+cTapuWwyLKDaZVZoogjIYZn/tCjIsNN0SCBXp1npK5Zxr
+SBNXq9marMjczff3MtsDC/K0d+HFcKWC+agcuvJ5qGqNEQAXyXXGkHDyJOicRBlx
+mEeC5Rao/kWK86XDSB2+cjXeOgx2RYXV9GqY/aoKbX6IZ1b5gd1+NUC9iez1tuLA
+pa5dVjSJio3HFH90bn64e5OrTCzx3s39v/cXfYHvVKXDlaijkJ7ejKF9blAKmQIP
+BDMrzh4wYGvPPWpySeslPm1ZAdJQIOE/eZ4LuAMUvUFTmE0isP5XJn4vKHEaYTME
+QqggWQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUGY/YewSAAwl3GM5sybgr0TengigwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA9Fbaa
+Qn7c7AUUYba9XvVVwFearLx4eI1/X1obDGrRBAC5eIxnp6dVT6lBHzfo1a1iSbCY
+Ug5q9gMoY9xK9dKKrFNwetvlYnWkH3O/DPs5NAWMxtXdyMsIWGHKjozCMbZL6tld
+eRQI10nGF5YLApVTX265tB9QMrZ4YpDieEnhwy5GlyJKGrBdPcjg8St3D20SYn5P
+Tp6DNI+qLQwvvlUlqHyBDFEWBimv2mR9/jKMPrVKZlFDP9Kif7G/CJjwID4CVhTK
+AD+GGW+jcqKCV3tvCqCe6+cj2qrQOO8wPET9QGInXe/F00NqfA8+4v1GUZADBQPw
+DTmlaPCQsLTB1+u493aPbP5eLk3iEvR0IiXtb3VLW2Y2rKzri547lmwtXr46pLl9
+u2Eod8ZmTSRXshsHdkmQBq1Vby0woi/J3NLj2wBy/SvXEBIiWkZ0qT2srASM0rfb
+Iz5oXFNx42jc6b/aWktfP7r3RMQlUidi0OpLENJ6S9TGC9bLz71eb16+7APtc+EE
+eeYOAmc9fmoFk/VkxWc0zxoHSQfMVypLMAGVqPCP4Zfwhsu9l3f4+ad97/M9vEdf
+stri+BFAhaeCumR9vQX/0RtmBEE8q/xCFXOqR14xgEWmPQE5lX+uEUUlT+VnPY7b
+ZgsyO7MQDZL0MoRWnv7Gp43xTxTe705zyNbqrg==
+-----END CERTIFICATE-----
+
+
+EUS NTC KEYID A0D737290E16CF2AE2BEE7100CF56B2F04C5F043 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAjPtFVetiD6TuQAAAAACMzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkxMVoXDTI1MDMyMTIwMjkxMVowQTE/MD0GA1UEAxM2RVVT
+LU5UQy1LRVlJRC1BMEQ3MzcyOTBFMTZDRjJBRTJCRUU3MTAwQ0Y1NkIyRjA0QzVG
+MDQzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApk1ETPo/42Cc5FLH
+/8tr4/BaRQw1WaNiFqyKC9jbW51jloyGIuZuPUwbb8zRB/1TBUGY60R8odMSrCVl
+EJ9JqCcyoTx3hFH6ntEY3FZ4MXCv7vH7nGaMPEscnZsKL19dMGhBPFq7p+u3SXO1
+PhoOtoB0sXu6xsXTRzfoTiR2oZnwz6ZnOGcZod44CG9tJ35/xoQBMghYZGQONyho
+3JdP6FPJNPQvg9IgxfQr4/XFss5Z1A8dYiHKOuvf4QLPbEcxTxxyYnMGwZyMpv3X
+h6E7V5KIohyG+WSVof/R9G5mTw92NzJS2Cpw4UnTuqRtxnC8/SwEWsR46NSK8Et/
+YOcsfdo1Ufp8XIBNdj07LQ8+xHScmBThlPMK9oNhDsqmWDYXsA+LGXLZKj7B2Q7/
+TtY+faGQ1+0Y2lC4UR2XTBS0gWBRnk/QapOGeZjKA8JSoQNcgkZ8OPVoPx44OfWw
+2nYmqJ2k5nT12RUzOpyQcOtbj702ILoxpQeJ+5IILAlrWys0AnWlrkmJGxA7pEdy
+0iaJEwfKQxvb5whbmFioOTCHbEepeP8GxiXugKQKIKQMtDOvULL7jIXLvyrV5uw2
+cDM2bN+7RRUJS2i0xCHFwGrB6nMtK7er1QX3I/StjKZZgv0Ic/ihJOXmTq9gdCCa
+GgBAFXwyWH0P6tWbo/IWbCPIKvMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOWM4nBo1pDmsmSS
+ZMVkBnJP0DMrMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAUUuTWFBJuvy+KMl+J/Vjs/vpz0D+oCjsai4LWsvXqwoW
+92vf75t3U+6ybE8joeJQFzLZpeLz7Gg+ngIPoKTDKvt7Ld+QQRKA/WSsN+7R6cd3
+ZFTzjJhJ0oKLfOjUtCXqllMmijAz3YEhWiN98fqytenocAaxSQHqaUclkctijXxQ
+1y5so8aQuUzZYVgTafpkPT+h7I3fiTpo0TqMnnXA5rOymLHaiePeNDunIjUOa3gb
+9pvypEAgiarzbV5HwAFsISBFKtaDadEh01E54hfSEPl5m2SIUZJeKAxjHjdsOm7G
+sKo4XwzPu7/A6VwrOhohYrXD8j1GXOAgrq3p3Q6CgMLQm9TdR0/rexX0LxYZwYSH
+xMcXxtTu92HaOUiXXKUqQOMtk8JJSJzI9JKlF84/jZmmJFQ+ctLK0YKk9kxWJzrV
+1gu1RZx6qz089VfZmXnqvoyW2yfv0mzmTJFBHhWahMpgRR8jWb9ZId+g+NQZnmb5
+VHi2jBXnara9OCWpKAwQEB7Vrzhr5o+4g9DCsOQDQwlfQhYwhQK6tUguD0aF70AD
+rzbyNMS4aZTktnjFJtl7swjaJazPVN+CEb8/2CXh3SlEgUWoy4QuLN1PU0ExZAMA
+WoIlniQtOS4YU5bNw39J2Vpg5gFk9EPeu5kW5v0N8KKJnBrCwt6kUpC/N/Ys2to=
+-----END CERTIFICATE-----
+
+
+EUS NTC NAMEID 3E6C3B35EF144B0A76CDCFA4080B8B7BCA3CC8EE
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAQW52ti1yf2aeAAAAAABBTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDMwMTE4MjUzNVoXDTI5MTIzMTE4MjUzNVowQjFAMD4GA1UEAxM3RVVT
+LU5UQy1OQU1FSUQtM0U2QzNCMzVFRjE0NEIwQTc2Q0RDRkE0MDgwQjhCN0JDQTND
+QzhFRTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJYTWn6nZxBpNTKr
+NYhlkbwF7D1jmEDg0lf14r2oxyxYagfRrvcBuC1Ns4fU0XTR4uKK01nD2gQ3mgJr
+YUaXhZ6yTpqEMOQmaUYDu8DV4mVGaUy73216sztoG3L/adLgJQ7tTyFwXCnxXezT
+xs+dsw/rUFLeI38/AvQpY6lhYBgKYA6gm4Q95zF/7TwVhOduKlvbptkLe3VHl0UU
+cezof0d4jLDN0o4y5s1+Tk0GI/xwt4V4dXXlKd5mzAMXvrbQLyCBhRZght1Pt6YC
+zH60ahn6aiRKNZrGmQ0CM9CcjkRmhfwE+aLtsiHQtmMMGTUUDrQtz0YcYLfaiCIq
+to4Oy9kCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFJ0MZKyGHd4DJDOQNGTZOFzwn8W+MB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAQy1Q
+54flGDjr8wHBT1nN50ZlNihVSr6Nyn1kdwOO5gLbO8O+59SDXmYouBwUUQUv8aMx
+iIqijCts1WkhtvtsmZlrVxxknPsL/FX3eJYK9qf2qSV8DrDC10Aae6cvkMj0Ok/w
+X1fywem/JU6LaMU1Uodk9HguUhcjMYl3mKOfL1HysHjBHeRzBe0yvnE8YhkqPFCj
+wbRGcMbMFdbFhLun4l/BoMXBTxqtv1vM4QEXyM8r9x5tAlZIMChwSm4P09JBYCg+
+DSwphM3lAUDRDGIkVdj+r59bbyrWskR/8cLrzBFaikgO/Pok6pyU6Rikw7+gKdBz
+DqQLtchddDXFfZwfEVJeS+911zp5I/fZ0LaPC0QVjFMl/uGOJ3DfLqTW+Hwm+5SH
+Tx9TDKEModijrQG2Gk9/jM3HIxh1PSQSdO9enX9hdkmTZ3BY9cX2XdDhXMiBOX8G
+4Fjm7nhmUPSxStB6210HfPMhLK/DYWmI5plKDxkuVQGnDb5bCDzxco5Dx8uZpcXf
+B+4FGbR0FaMlrh17wJB2HXslZc+ffz10HI62JiCRjpbN3c0GQDGuRbpVSGZgG7j8
+Q7NJzyydDIIZeDTnE76L0F6XaOrWgPM4a6346ZbGJUs2XPAigSFyEDnw/3QK2kga
+w+v7nP0ncaPOpb9u0pIgCQNvU83Y3PusVepPoBU=
+-----END CERTIFICATE-----
+
+
+EUS NTC NAMEID 3E6C3B35EF144B0A76CDCFA4080B8B7BCA3CC8EE 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAjQu1vQy01PqXQAAAAACNDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkxMVoXDTI1MDMyMTIwMjkxMVowQjFAMD4GA1UEAxM3RVVT
+LU5UQy1OQU1FSUQtM0U2QzNCMzVFRjE0NEIwQTc2Q0RDRkE0MDgwQjhCN0JDQTND
+QzhFRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK246r1mE2v65zju
+PvoV7xkK4coKagXl4YnUfNTqHhZjM6+gdsCHMa8SNFxLfs2Qg9LHS88TxJXMYwzf
+0mmnliL+hlGioIm91wpAAlnQppLjiJLDkxkrSZsXEB/kQ0TDTCydhAUu5wtbrKP8
+dTDMHoRTRD7Lq9+1tHJL6qrrRR6AS44nYulYMM9Mw8nPz7YhG1OTilRnVoSnX3zT
+jn+Em3OD2Fljo1D0T/PxXtNy1TyHOGaYeUc1jbPPep/DTxx5AO7om8oz+TzIrVfH
+rl6jMNQg83I6+w2G4yBlk67dhGPnW9rBvg4IMLq73OmugpyxXH/qjlldfFfWC9QI
+CMU1g7pGPMXNMdRwPv/Xb1oI/U3H7cIlF9AvLdq8qZxT143rHHWozBALA2oVwwcA
+itoKoJRQJRJ3tiHmzAbnws5AoCa7xWH411NdYMM+cXq7EoiNX02+mphg3cWlA/hT
+FyrOFvaZLk4P1Wlu0oL1eUHggjzlkO6cT68IAGKy63MQeh6prc7137Nnkp0KgCm4
+UqBcRcDDBMnteZBOdXXcEz89t1bld0OqULU4jE+ba0aiNYbB7Fy7iUx69WLq2/0d
+ItbfyINSb+3OEpKL3XotYuiTb1MXZLl1fbQAYMNkhvFJRt4BtSS71NGzTS0n6RVN
+q0oVLvMqSNvvsQcwu3G2vuLja8dLAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRt8LOjdrURSTpG
+8iLGRs21qF8m4zAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBADtPVlJaf0fPgvRX5632qo6bBEg9gfPDQpm+VW0AUqEl
+My7vmVKTqtzbIQaJbMLo9eRnJ8zR84dvwxirmw5j1ZRoO4zLKE8PqdGiQ9UM5PtM
+q+b6emD3X9US6YZYiOj+vgM5z7a/DqgJl/RArm8c6MGiX6RGx/LaQnqjHDDzczki
+nECfFKzs8vJemnSbu0IOnwX0fazuf6OphVt3cJEbmKuFuttYkSQETnmuulw8TTLP
+YsFWFwNgeQhjtDiM7jYXKZjD6ML4bx1QeMbO9kiZEVYxpM8iwd5iWfYcabNku46h
+zFFXAhDYG10//u+bddSq+GyaFAyeCUr64KYcH6MBHeAyY0kG2W8a7Xr4urX2PzEr
+X4E245is0l9RLnpFx2+/8g6ni1/tVXaQLZaGO+2HEvGclOG1DF9FY+WP4frL4MKy
+sKLZP9kIWE2c9wrpZtW8tpnJvQzqeczg7voevLt7L/wl7ew0tJMbhUqVIBR2u3i0
+8Wg+FNMeK+4bLqpx0GeAH6kKFuqS4NkLJmCQQofjgGE89sy6VDKMZpZtDyJiCx1H
+TEicMi1Yk0+f7Tq9y6wPLYxdxSavGPDZ+Cx6UMDSYHzrAnNQ1haVhza9wUX7sJUX
+uaCSd1rb98ywmAw64JtMZ7uU2UMaieNahASGldtGajE112YUjCIGQYdwks57m+72
+-----END CERTIFICATE-----
+
+
+EUS NTC NAMEID 770E974ACAF0DB9AE67E7B6F5D410F9ACE2FAD65
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAGzWGLboghYK+wAAAAAAbDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MTIxMDIyMTg0M1oXDTI5MTIzMTIyMTg0M1owQjFAMD4GA1UEAxM3RVVT
+LU5UQy1OQU1FSUQtNzcwRTk3NEFDQUYwREI5QUU2N0U3QjZGNUQ0MTBGOUFDRTJG
+QUQ2NTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMD56te00Wibc9XT
+H+BGgPta0Elrw/xWYcxtpdJIUqZqei9Tzx7Wg1OzcMXISXEwWdSsCJfDOwj1Wm23
+VI53zt2tQ8KTXrbAK77LV8uhvlNLmSndqNrKdrDeYGe371QrEkFLVIILsmT+oIyt
+0zhgnp/TGrp8ox1mY8xdbdasomK2i7qrGpisOefoHsdHeIajN0VTugbcFvY3LpMc
+xSazmjrPMEMJsCaRKnxw5zypQ9RHlVkd0+LlQWxP/PSPe/dLPXo9hLEwVFRlzASs
+A1SoZtS4x8m2zToIKTX8hU0XqaKjMFvdin0Mi5wizr+15cxu8Rvz8hlNz9SXV/dW
+sJBssZcCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFP8pClsDD0vhoP/5Sheer7e0ZDECMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAeEJi
+C+h+uUHL8ASBiOLvNwS3y762D+kT/utmzSH934QxvOfOVZCvU/9mLU8PXZAHsIPs
+fa/2L8nYyr6PxRbcEMD6oLpVC31sfiHKo9Oq6ZBLH6u4awJZGt/PIeSZmsMTvMfL
+3+Fa2WYvlfJQ7Bh6xoTjZBSDSz13RgbSwzHnRn8S+yY63JEl192Je6q9m0KZih3J
+671tx50YJzoOSX1d6jxPqkOxYXgxIegu8Z4AC0dPTEQGDmA1TgE0hc77F5cBNhAG
+Yq/9q8gLro8zrOAr4owLe46d8TgGcnzt7T4cmcJlHA7IGvO0ma7/H980XlgNu2ec
+DPCbI3nYKtTba3ZMh/km8Wn7btQM5caUV+/sVqBlW5R1dxtF6yGVHobfpZAqpyra
+jf/xJQWx5G5BUib8kbtpvp2h4UWbkJbJbg3rotYlyMKKdGMhYK1axmulBn1MgPcm
+G+j1Pv6BGgt8jpraFuEPDFj8dGGfYOlVOOCR9pVXh5JmcG27R08IXTTM/XjBdBJo
+S6vM8yXUTpHpSwfFqMwtdQCnjxg4uPNCevymftD8JY4O37/NV0AODh3PZcNhu3Zb
+9Y4h2S/ODloVO0W4h9zK6OEQXDcmYiW6mp7PHlXnT1Qv3oSdpdskPAKmcKJU9a1F
+0aRDXNzfPDicQQC4eh8fD9JZd9Ffrlfyscj7JNg=
+-----END CERTIFICATE-----
+
+
+EUS NTC NAMEID 770E974ACAF0DB9AE67E7B6F5D410F9ACE2FAD65 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAjZQ6MOtf8ynOAAAAAACNjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkxM1oXDTI1MDMyMTIwMjkxM1owQjFAMD4GA1UEAxM3RVVT
+LU5UQy1OQU1FSUQtNzcwRTk3NEFDQUYwREI5QUU2N0U3QjZGNUQ0MTBGOUFDRTJG
+QUQ2NTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKjrgb6+9ImqqzZk
+hChHsCDjesdSPDruMCOeepk+uZjctWNEVK13N8x43v5O+E9SllauWnxKBvu5Om+d
+c/+KTbhzMpSSJNa3DeCsymLtAABedofEgf7Z7XgWF9O5Kx0yzE2ZNtJ+XKXujWHm
+9wm0TudbUt2no56FMvj1hcP4u6lQY5hwSd291cs3MaMIJJL2dXBMyn7yoIBsfOm9
+xug6y8/SG+Yc554ERNwLHhWimZich5QGERafXDqZMx72GsByO/dCArk2eDk24+Ap
+e7uUrwzYczrW13bJ9GOofLJQWoJY2eEHpQ5NkXDXmHLNLqMIKTwAhxLdr1t0gbru
+pxcyF2N4k2TwMNWruKIHZfrDdoKRbOPBC2lewzZkNTPokwJojuSf1VHOrFwzJx//
+naHDkFNc1b/MAf6VlIK+AWVNa74F9AVxpqTFhdVs9jWXDO6/uTP5dc9gkRu6GWXZ
+eVSINhxdEQy7diTRYgyCBiyX4QGMNrvekyqn9nIUf+dbHbus6UD/h4Uxf6zyWUQC
+kl7j+COh5Hx2zLlp5VsazoKMqBr18FDLBPnTyV0nb41/EJ2Qt2Svt2cm0GlW6Wnf
+oafcVi8plbf98jpHw8BI6ydQSke80naDZJrO2b6d4DzcqiVx4MBzx8DbIXXjrFlY
+D/vo1XhcRN6r23cjHb7id/67JCSlAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRwhIVzb/xesz3s
+72yaADCp9iXqzjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAFTBiEs/TXF9fSi7coyITmGEquCPalyFtM+iSHQ2VKru
+9UX6nEujplEPYTQOAoTvhUlms1HwXB/ttnpzrVo+uOr9WNKkuynD8NMfQBZ2GOXR
+bM47CP57b7l1EvqpW472px21sE27YCpokVf2/jtD1ridpoREgre26CHrWHQ8hfk1
+BlbfwBj94VsX8wSCDI2O2jDHVJJLkhjDXv2BV5VNsCEwQ6927z2tOE1NuyhChUcg
+35KLz4sCIYS0YLVHfslUbfiXMw96qhJMfs6Q2tAKQP0V/a/5sycutcT54hvyQJXz
+wux1cqZ7UtdiGjdOxr7O5mWzlKKtvOZC5BXVgasE5J2UPiA7plG+5Kijrq4eLwqy
+ujZLGac08BnBpj1UyUSvNfJ/dNXh0v8n/1QTStblT2ipLNki9nkcEVRQpM0dfJyi
+GRY9wkXy8Vlsu+KZ0HZCE8raCerWn501nzZjAUUplnV91pX0M+N/Z379EZaFS2a8
+eWaCDdeQukCuqi8T2Z7vVtWV3hb+vFDknpuO0OHGQjMet3STn23MRAHnTwLDkSuf
+ga9EFHShWRwdn4gpD+UXBX6OFSxUIzV6S3kL0K6DRZlY38rIIwxsBJQIjW0DmR8g
+izDAkL9jF0eFaXjEaVhJvCQnnGFlbSTipPETK3f1aYdt2C6Qfj9N2VSFAOlkxDx6
+-----END CERTIFICATE-----
+
+
+EUS NTC NAMEID BCD3C503D39E51B0C50489E9228E984A7E63E303
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAQbwgKcEMPrzTgAAAAABBjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDMwMTE4MjUzNloXDTI5MTIzMTE4MjUzNlowQjFAMD4GA1UEAxM3RVVT
+LU5UQy1OQU1FSUQtQkNEM0M1MDNEMzlFNTFCMEM1MDQ4OUU5MjI4RTk4NEE3RTYz
+RTMwMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK86o16n5Ja993I8
+XxOQYFeWZnMPTQeD45IZppDnHK6kEMPqpo1mmWf7ddfWAjIcQ6hqsqEWFMHNS65G
+fNbfwAzRB4FRnXAEPfxUqCwc7XptxVxUs8li6u/vgFmoP8clya3ng1QT1NDMUgCD
+EI3a6kfHCHkrPzDw0Sp4K2CvRTzbfqoH81/Pl2Rbayo742TFBvQU5d9bgiLuBXTP
+PK8u3clJlukPbMhPM5YltOAwBjrCKsFSv9QwOfzotE/KcmMf3ih42m3/woh3cLw8
+QO84Ojjq+4/8xHLYJIrjukPb1il7WVYe4JaqqZGFTp0cEmFjOB8ns1BLlHRzhZkc
+P85URScCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFHyODLqSi/vMK4BXgpOqWhkVljaMMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAmuXw
+uZ5tkOA9asncl8f64fywmzaGFujy1FaN9VLYmrucbM8xth1/MBXsh1kna9zip597
+HXl1oXmSpHCawuXlrRTefRU+8VoUCiqyXkUR0MzjUdOapUlVIYaENpr+zHgk0/sv
+KQiE6/qcnZsuPkwpcqXBfViiSzyWW4jyXNGkTZpHK+me1cmhAdx3onjAukxF94n/
+8ej8ep3RNaCX5Yq3jKPeR11txkpiFwyFXG3P+nuExJm60VLtqsBWJr/nxv5HCMIK
+F0SiXzOW8FzpQpKznMgTi/YUiqJlVjYRb5MtsvC1+sze4wPvS2fRpgWMJlVSc5pr
+Z8dXOMD6lqsT2k4bcVMp0c/D1+vtcfGiHzClJ7j5HeXlo6P3qJTSgLbyLbG0yEwK
+f0//PRqtGdQGUrWds0uwSnzoVaNbGGZv3vsrbbjzTQLqdTarHYEc05Pzafcg/iXI
+jVbspuQt3rCrBpbY25/rQQZ0Xz2sam1sXMhw/m1vHTUnZLAQRSMnu5xQozHNqxFt
+Yoh+sLCcXNf/84LB6p3+WNdiXkHPzxUO+WzjJk+xt+FeQkspE31/RY65p2WAJSLl
+Ay9jcLUX8EtY+P+4llWVr/p/v+1begAZsLJrcwbf8QsUju2IK7/sfCtTXz8pMXqg
+WJGMGcU1XzIeC0tfbn2u7rs96ZkXcZyk4/4F+jg=
+-----END CERTIFICATE-----
+
+
+EUS NTC NAMEID BCD3C503D39E51B0C50489E9228E984A7E63E303 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAje0BL1cqHqc1AAAAAACNzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkxNFoXDTI1MDMyMTIwMjkxNFowQjFAMD4GA1UEAxM3RVVT
+LU5UQy1OQU1FSUQtQkNEM0M1MDNEMzlFNTFCMEM1MDQ4OUU5MjI4RTk4NEE3RTYz
+RTMwMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUBOPqTTYFxsUAI
+2or83Ti+3xps5p4k67wUpQIVx7UBSO9I2sPNJ3ySjg8gyGSuuMCzu/FBrnsZo84i
+qtMpOYpmB/gSJbfEBkNJBmrRsBv/jyuGonDLTQEVHzP17VZBZVe7+FFfOKP4m621
+fg5kwIGQ+McUracESqcjuLSBlXkSrYQ/GX2ZdYu228oquubN2ANXy+Efz7HjofsQ
+OHVJtzXEmQkd/iD+ZhvjZNQWjc7nW7TiWHuh7mVVBc3O6d9goWRrhVvZn26vUNXD
+qS6jUXk+okiKXJQrTFN7MXeWdaJmgiiyNuzNFAi/D323WIIYAPi2owODbuOq1XSF
+J+bYfRpK6bu8b8QRjfhs19IZ/R2c87bDSs0TjwhH4zrCESQ6KTToxqKw0Mbv/nBO
+wG2HwlTs0r4LOTQK28JxQOk9GJdAzLnKGpXfAEyWH4jIcTVFBL6VPwSjIKzzVNwh
+jdVazd/8L0vXmajPhkfHhPD/Py8qIYUhTHMPNC+Stl+6mMEZi01k6Zdc2jbjuqDK
+shZZxhI3yjKriMzzFdnRUxF9o5AQEJKhYUNTzt9VhH5mxSPz6tLKoKi18GTc4ICH
+W5Ym4dSzcR7hBBJrB15SCCfBUoENK3ASnFA8mmEfLeCYdXvxCRzoIGEdXtWdIg85
+HyDWLPwFXgWoAJUZOMkVX2cLx8sRAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQJ918h4MSMnR1c
+OzS03xneH8/eUzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAAIxRO8hpSs1mRHB4sNHaiiqkPT/Wk4BOk/TkY3awIRY
+7OUfiLBVLs6qU+CH8TsQdaloLwt5PV/q85Z5bJnCsgd9r7fRtnJUQ+BvRVKmukmu
+1EIRdQAg6D584ng9VqCgaJQbXRkZG2QN2/KZCYrw4Al8aIdpBxauKhv8j6QyfR2Y
+xvPyHBHdLArBn/FFsHic8h3bm4BRQ2y8XYQsm9y6/GqVLg7/tsy65csFd+1XGhmw
+fWCZfYdA095W+Dcn8oeAqSa/4Nns7pNm977FAqlqhdTGkSErBfmqOYBtSS4g0pkZ
+aFlHBvVSYtxuUt9Kimptu4uQSpzX8tJmsk0BCXRWd/mvJN0shz4yo/KB9g2N0TXW
+9Xecnl7Tu0ycESwvLMVuKqqfycZE7R2geJm/R4l4P94a8sb9egZYDGnCievcQGAK
+8DgKYMrYKkXeyNfhgqoTJKYgbnXnuUkkFxoSTvwwY334KULinrADLrLAcGtPE/au
+2bC9C2CkUiNYas5uW1J4tuRFE4hMWvWHyqv2ohjLgVYn7eQtfBfFzdju14nCqCJj
+18Si7IuRJXOEODgoPlXvguk75KcY0m8REjBEXhuL/Hj32mJlxFR1vAvmSEPInrar
+5TbfuwXv0t46ZXtYueChN0hZzaC/yweWBUfdStrcilYmZN66ZEK+lDknBNaXf8GR
+-----END CERTIFICATE-----
+
+
+EUS NTC NAMEID D659BCF0AFFF2284AE8AC274C6D91215AED2B62F
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAQdBgatll3kwegAAAAABBzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDMwMTE4MjUzNloXDTI5MTIzMTE4MjUzNlowQjFAMD4GA1UEAxM3RVVT
+LU5UQy1OQU1FSUQtRDY1OUJDRjBBRkZGMjI4NEFFOEFDMjc0QzZEOTEyMTVBRUQy
+QjYyRjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK+8j99n8F6ckr+8
+6jPXNzqQQhusQau8hXYtXVe4+naeEBRX49UoFpogTq9vMXIBhZXYb7lPtfRW18Wi
+mmIOyEikfmDF8jDwUKY8rZOwu7vVvfRWheCNs04vdtzbbj2S24WxdvkrowGecwAu
+1GAY2i2SXXXQQHscnmLhjNaPsDGua0y6zp+qOKTw2eheuPsXU8ckYOyNkutoyNks
+Pri+aVk8erzMX1x8/D9qZHLCCDZWy+XC2v1rAkMoqhHSL79q0gT4tlv7AKUvUxa/
+gI8vtqa6uRmgM4ZzRr3FkIja9cNP/Zj//h+VNQgOGP+8lKZ6IDgwtwtKuMstYoin
+EGHbzvkCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFFxAPzpBG4a0EmmC+Yn0nkFCqFc0MB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAZLx5
+ztOQa2sNKR6RxEFq8ATJaeXX749UYu710WZE1Ec0BmNwlifBVLyxQ4DBMPIDN4Rf
+0/JA7jAcO5jErJOo+lN8dtEmk8ZxQQb7QVUEPPpMdD/Stw4hvC04TMwLjv/CEis0
+tSNEvHgnwtlHUbyzW5z361n1lYCe+78AfRNUGJjdocaEDc8muT8Bv5mJT2UW1off
+d71giTZN+k4cGgxAXOlismYMHjpmiYcB/KckbpSzRvNVt7aD7FAjqNnnRBlEEYK6
+zugQz2wsFBLrouAXrfdTXuDrOkAHF8pTxpyqcqWSI/5xLyZCf/u7YnPBKKg8A01R
+983ijCbr7F8jJUHLwnPN+f1xpIhmi/gLodSBOjmS85LJzDpsuaz30WShFnSpnIgJ
+2MIvjfxogAo/k0yIoyOsFlB3v9kZxKASP1SLaK5VP5HwAOYdJNyI9dv9zubMo+0t
+jsjjruDAUFvDjhc3KErOnyX2iKaA236mm9e3X3+6ta8ObfK2zXfT9KliS26mUXzB
+mOalLEHqNO3v4IsG03KjQ5/G1mJGTt/qZ84//bH9kqVsTfWI132Cmv4A6lS6i8rB
+O6hFhzv6UMv7C6/Y67DpeUAHDAEjsOLfLfkuediV9/g0y0unhw+pMT3a4qAZWM8o
++JT6hCH9mU4GjJm5asM3Gro4zIlRfKl3bu53X8s=
+-----END CERTIFICATE-----
+
+
+EUS NTC NAMEID D659BCF0AFFF2284AE8AC274C6D91215AED2B62F 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAjitwd1vskIoWwAAAAACODANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkxNVoXDTI1MDMyMTIwMjkxNVowQjFAMD4GA1UEAxM3RVVT
+LU5UQy1OQU1FSUQtRDY1OUJDRjBBRkZGMjI4NEFFOEFDMjc0QzZEOTEyMTVBRUQy
+QjYyRjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANCoDho+jCoftg6n
+TmgILV2Vmt3LprN61A910Cj9IDSm57Lz9wsJz7ZwNNzJw5214Vm5QogNSQ+wLkB0
+1X22kO/pGcwvNW0H4IFA7pbwTwfvV0nwzYXEUSRhutWLKO8eLdvfdM3C8Qz2JK8g
+5o/JMHLxzhJjAcB7SxCJCHYrYoRYI4L2l08MFgkyJcfk7wDyUgLh0bDi0D7yJbwA
+ivhTlnDcr+OJgmNOqX4CY2zJxF1RMli9zYaICUnK4IV9SOCgodHEhcaS6SMIgWfx
+f9iks2SHSzSd6VGntsRC2jTOkNbFSCPpbPMGvDCXNdPLS+Xo00XHYJH05Bnta4ug
+MHTXAnnND9QtRyYPdFpnCjtv96V+eDP3ISxEbCIS70My5ClY6IhOW/ZcD8tVyyx7
+g+grrdWDz80Mh1SCGzVUPBeSWJntsOhtfNYG0BU98apObdVIduwSYc4eMi6dTvGv
+xHv0AeQC4POCTYCOpCCyzjUJHQda510NJMCcl5wuSc0boYxfdnMVya2Lyo7HBQVc
+oKuq1lJNXc3S6wmgq7h5PFo9cd4YOFGBfSA4FJsDMoEiNAtVHiW5Wqh89/G5Y6Eo
+N6y6USy0cRb9Q41ju3qPT1A37xSBqoenTouOmM8U0EAr59D8W/LymapsE5CWgjyt
+3ZfL7YEL/QylVpqtdsxfIvDmo7S9AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRkHXul0Od/cloJ
+H5877f4kZR3BeDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAA52a4DIfG5p0Mt8VCSHlcml01px7PHxKlUmkUGTBvsl
+oeGYP7nyW7KQ2XZBpp2N0ZUgWRI/GParyrbaVF7sEbnfMMAXhqtQm6pcfANk+/WI
+Or0u1hmWHb+9oAsGMORn5OszoTg6jqy7JVOQAsrqZ6Y3K33k+8GUjMEpi9UkSX03
+P4uYKrt9pJlHQ74Jg+q6KTdnsSG5lxk8egRhEJgQc+lbpYgDcocirCCMdcM2gQQ4
+7szXEPw1tDph7Tgqju3wNJLn+XZVH7OJrsdxZbXHVvlGJ4wYAENeBsSjob1h30HE
+UNZoyAmbXCS32ik1Xk+1FuqM0c85edCyMhqd4FDtxDbCb4yoZE6TvACHeYuP2VXJ
+Dh1/dc30ksntHFDxBoSSbRRf/z5BvyR70xt4Npl/nSSbN63ca8TxstEq8MTplcyo
+8deDlVqg7+spY/khECXM22vuTzkCDkTkSBPArWQg2YHayh5vlyR+FTYCLOCFN3vb
+zOt5cGs9ECQJ/yslmQDFyoj7R43z3B+f7TsgkxYxuQNuBAAQrReXkTLzBSLGadPj
+aXKECmOKyysdwisSi90uVifIOWuDMhdSPojVBUTCMNapdtOWtWT+fxImyJGC0qBH
+y4VI2BsjaVKFwcPId7JdHRnP6Gg3rnz5ynSI5bcoXMxncEUbsxonrX1uj2ToCfc/
+-----END CERTIFICATE-----
+
+
+EUS NTC NameId 91EBBB7C51FA7F78AA3D44D3425B1D5D23975CAF
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAU1E5QLy66wgwgAAAAABTTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDcxMDIwMTEyM1oXDTI5MTIzMTIwMTEyM1owQjFAMD4GA1UEAxM3RVVT
+LU5UQy1OQU1FSUQtOTFFQkJCN0M1MUZBN0Y3OEFBM0Q0NEQzNDI1QjFENUQyMzk3
+NUNBRjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKUeL9jRkg6dk3Ta
+IABNWZ0RmevTQerrzBaN+3em92A+tA7Aa/ubDt4gFnxxp3TcEBkmIsIR5F9PEH+Z
+l6tSg5CPb5Pi2N2ufjrGMeUTFKfausEXqi+GmTadPLzjvDi0l56s8TMJRG4+0tmV
+0bK9TEBHiuCdf4bD3bHdN0mcEla0vvZ9mCWrxlCVNyJpHk5/MeXG848VqHqGbU5n
+ASWBjUJHLVOo3myvCh7hm7EUUNSNfdETEIHLO9oN/1E5zPI/DYQt1lUGe2qwgS0o
+yKREK1vjsWzaEleIwrz+p15lKhGse0kVrUKDd00Z3T11CcKJSpI882G+ogcUhZNW
+6K0XM4cCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFIQLF3/s8HuVwQx2JVZEJMpFMCiwMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEALfHi
+lMOShim5ui+xXv6AE6dFQKPYXHiqTI0Nnf2m0qHJVTc14rZcRmNlCfUD5nmUdEkI
+R2RVRtnX2Om2hXTgsySkyM7uYfUcHpt89EvOoqZ3Vm+mlYxOaEwJVHQfJJe3oNr/
+KvqWTMDykfGyYlTOkHRFtz2mEoKlBs8qtFtcPnx0CoX4owMV7SU7DvlTtV7CMci3
+43QIPw+iYJ4Q1XfoZpXc3W4xweC9Q1eKrj/i62n53Uf4uR4JK5X0fwxy4OeWKNLV
+Xo8Mxo3kAqDjDBVmO5af9EIXbl+lIiURNB6HNkL++NPZfg5ieg7sfv7mVikxKRDY
+pJDNY58aK/N/c3FJB7v/x1h5SBnUJM/H2FQDyt2QCsZ2MJ3R15k30t7Il7EpPBAl
+CxjVIeCmVQ+4aMboUqJHi/xbhOLqy3iErnmxaZvUhjRTJzoHRbGPKBXF+ciNXV3m
+AEPKP0jriH7QtLLN6IW1auQfW9Z1GQzHKmLqCVqQ46Ql3IOHzncUbdxo2Jm/QXky
+BHbe17RLpjLCAJfFBI0J3nypwgBvNxHZ1ks7M3TYpJGz2/+7D+sDpAGHv8F2FyB2
+mMg3HsDNHqSq0DNTSnYVYOOMlIR9AFSvEDdrw90qxjv5kPiZoYbUFll0xKTtPvnU
+kLuivKvCr3W0FsX1nOgUzQX1Cu4MWcyK75Nclx0=
+-----END CERTIFICATE-----
+
+
+EUS NTC NameId 91EBBB7C51FA7F78AA3D44D3425B1D5D23975CAF 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAjX/w9/ZMQnzqQAAAAACNTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkxMloXDTI1MDMyMTIwMjkxMlowQjFAMD4GA1UEAxM3RVVT
+LU5UQy1OQU1FSUQtOTFFQkJCN0M1MUZBN0Y3OEFBM0Q0NEQzNDI1QjFENUQyMzk3
+NUNBRjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALVT5NDF46h3QRqD
+EceM60f8fnm1qpeArCK0jEYvBGbM2COoHpoR6aHr9fzh6Gl6QkCpC5+vTrWuepvf
+Lz02vFRvjasn7lAh4Nwlarl6/GiraaJdbzkvZMs2dNkZ5YeAOm9SL4f59126WUsI
+57275QYDUO5ZhCfYY91bnpTJ9I3tL5QrfGvFRXfKv/P+2UCZ2mo/FPW+Ged+3Ivl
+D2y4ElLKyJKgsvfVUqGinGHhHq2rJ7aee66luaeu512Lg3MQxgYvBMOqyROgucdd
+Inom/azP0Vp+px+SOhZXThwLPDURHdi/Wq4SN2NbBgRPvuzW+KwPI4fKdyjoOxbR
+pYyH2qBF0FPQLJv4Bm3NArTH0qwX4oKvC0bZsBFB9L/UhDWp/gK8fBEjk54gOgmy
+O2u1tWd4fxhpvsQzeZSAbVQx40qZ5kYKXIdLcgK6IdAUQ+uDs2WpxAJhg4QfFVuD
+lW/fjAW2pbLPz2hyP3nl/h1b/HM7X+0q/CJ0aOJzhVyOFdNTuNNpSqqVGf7ItRLL
+Z32WEJfTtBMoGfU3noYwOcC+tEQp01w4P0S6ToCgRfIkwig4NnN7OWHKjRLROoMA
+pp48i/qIstDEfh+sThS+xd5evlhYfhjB0A7UccYjE94KqwX/ZTDumlRHVyV+Q+KT
+FDBUzgZbj4YQdFuayJ9AQLmbF4CNAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRl60rllVO0Pk8y
+HpB2Nqpse5+szTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBADlmNDeQp94NaR0wHJU0CO86ZRESxa1MOlXzd6D5Aa5N
+sChpIwXPXU3R+BCv9CDuxEScl+oUzRfDJMozv/uTqCJoAxiCmynOE6aTIcRZzniI
+XmADMZKKlxscd0RZXJ6Y/R/tzj6qNz/JLARbnrYrm8fyRJasWzUffGfadvgOLykX
+uzvkjycVLFJAZl6dLPAuNz1VEiEfsJyn10A2yh9fNOZE6mQYDpgi+jELizxvaFJv
+KfaypstgL/p66frTn58G/ak43AbQkuMS9+IVBb3iRKHbLFsIU5HL1iUNzzcNEa6p
+ECJM04poO2urCtzY8SfpX4s6RSrRflHetY1U8gvam6iglVj8ohStb7U0ICr/Np0l
+rFUI8wf5YAf3hWzwFR4gcmsmlhlqH3S4ezsOtU+KS+wxbe5LeL+8Hw2T2fqzWI2M
+FVn2kKh0jT5WJKCgdkgg3pNV7qbfnXKYxLOxUEbbV033K17c0/7UDpBV8CdocErR
+laxi00TiJfZNX2Wz7JyWXT9bYDzmO52UkhNV2iux6FzEE+2IPzaCLtLQJBatK681
+oueTnxkF5hcGMUR6FgPsh8xynt6rRKftuNQw+xfw1SPOlPPV2oYXVKNScd/oVWez
+Ca/RD0lOeLDX6X/wXhYoi+1FYSiqmWivRdGRDRvio+pMtsSUzrCQd0CghlHER2DE
+-----END CERTIFICATE-----
+
+
+EUS Ntz keyid 022cbeed5d77060f2833e9d5376ba8bc308cd9ba
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAsihWy3btd9PuQAAAAACyDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUyMjIwMzIxM1oXDTI1MDUyMjIwMzIxM1owQTE/MD0GA1UEAxM2RVVT
+LU5UWi1LRVlJRC0wMjJDQkVFRDVENzcwNjBGMjgzM0U5RDUzNzZCQThCQzMwOENE
+OUJBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyt9FG0XYvPMKdTF1
+0JTqEkwFWya1+VZEfqGwd2Au/k/CWrkb9wStXC1PRBDHUw/0xysCPapl9QmiVOAU
+RfMhyknC//W88IQzcY/dxym55O2QP/HDcgkeGGxSbhFhTPxbT7E4gADIrzRYHNUV
+oLDYeefyLGkCiRYJ+dk9BW7Gygmm818ziJevB1pidcJg8qAW+4ORx5+VZB8fY2Ak
+sSfrx/UtDBWcC4CKc4SregY4RVBZQY0UYPDD7Wuwpcldr+rpffE616IHEGcCdTmk
+KNgPoFCGr/ua9YndiM2/m10WsoAnrYep0fniN6hHMGZR8kZS1+4AkphFULk04dfd
+wbtjKESZlcQfHr3Tf1/VVljoYhqy36yKa9yorR+VXUkY7YUnnbF8TBhHGEmn8AsD
+H5G6DfRYyV9ZBukzp+AmWfsvZSjdAgyGzCLDvN4drBr8mW78Xbgex7IPIgfF7Amr
+Sy2tsySgSaDOxilDuByhowLe7H8DTkvx8MPA9vtWmQt21fkiIb4plasNYzhxaiCW
+jf3f+x1XqfpTP019bE7U/Rel3Nf4UBzn7vBlEtTpSsckVYzEV3Zkko4T+leEDITz
+RsFxk1N4cYbeyQoso8JHq/BdXXzXw4IFfUqnKe1WadRuJTmEY+S0Nnj0SxXeyuom
+vj2gD2MRZLeSyZLrylLBpg8q+i8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHw0u/rB0GHJiz4G
+NSDf+FEpZ7AtMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAWmzjQqxonHglNbo7ZlNyqEiu6S018oOxFsknzq7Hz+6K
+qN2JwWs7PO9UXUBfm1eBA18xF+dd4ss4b/BsKGfSrhEtNdx7kqk/UHW26CCabZLE
+61NYp0OZWOB91TIlaw2iod65u9Ip8ugWnRKi8qPo+A87xwDQJzrU7CBquThpGbHh
+7fyV9vz6AxGo1F2r92yPJ4r3onF3S+hlbQHFA7UUqS0tzv/Gil03v+DnC7/34W3o
+gPlHzN0bM+jy3e+2QzaBACuIvqJWWKj2AEHM3agrPzaBVogSHypSblP36MayDj9q
+5fHjMrdgK+4qmxauKVKK37H2LJER4NVkd8h0DACUaAM0vUwNSBcxkDKP1y4LieJ5
+v62trl1XX67GZLAKVWHAnUyNiger8iFYy/58s94yK4C+G4b3HXdYRwdISixKPFrG
+HgXZRoWGbUPHaFPffWr8GzttcDVnMmAkF9+YJGjJfAyDIsBaNFs4Kpp5u22JmZXh
+vTqSDmG4tNlCS5DuViFMFZe+VABNZLTejy0okQR6YnfIcbCRq1sQ/QbJ8VxzmrwW
+zvyZZENU1TdXhPn+JdNK/WmaT0z19Khi1sEv/xnNyySJyxI7NrkM1vN/hbtt4cpa
+Vz9gr/gMzHQWfCX4iU1h5xWuNVpBRU+qAVZJVTyX2y7NyBtzV8Vg1feDOhjNFdU=
+-----END CERTIFICATE-----
+
+
+EUS Ntz keyid 03d1cde438ea3db34d943181c1cd517d688062ef
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAsd08uJHHlceYgAAAAACxzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUyMjIwMzIxM1oXDTI1MDUyMjIwMzIxM1owQTE/MD0GA1UEAxM2RVVT
+LU5UWi1LRVlJRC0wM0QxQ0RFNDM4RUEzREIzNEQ5NDMxODFDMUNENTE3RDY4ODA2
+MkVGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmxYZPVt+k46N5+qi
+LeCAhSyIwVi1k7AU9vkG/yg0hA5kmR0wIzqTMRyfl14E+aTogCXfwywv3Uo9FSdW
+SvfL9CmMDrZI4Jtmhh20yZBzpVy45lDIVKp0WXP5MlP2F4errPLp9700+zmi/+tE
+A2E11NX+lQt0kWz4XMezFrGfXgVlDwqRG7Qr6vBxkapfEkI6hlO6iH9snkvNk5pR
+5XrYhyoDnAuhNlYBdkzmA8gIof8YiIhjSDTYINshL+gO7Avp15OQGk8t9bIIeO99
+wWXMwDsOXWuCHgT+keZzP5ukqvSjArGDAO1SVXt1GSL5HtXKETqbZ0ZkqUL+88Rm
+VI/B+E2Vu8jiWGN7eO/b0uN1Io5Z9C5OSV4b/sl7nnZ8mzgsbauhC1GYa5/vlNNx
+ls0Nqlu6QoNLenpx+0fLxjes5dVHgvjTIR+LZs+OsXrwtWRh/vS2FxD7ZNlKSBHR
+anV4PQfwuDG/6LbAA8abxgWX2XnzT2KHswEaJbSP7zf5Oet83/gR7ccpsQKpPhjE
+9//ipuCSNNa6dJ7xT2sNVyUfusqG4A2wkz6oOOUB6n2DEQAloaPvMIUp5VBjGsWu
+NMKucDrgcRdTsgbT3yBlHcXpkP5W8Tnax+dq++0+0zff/jDIoEubgNKT2Ztck/8G
+QDDh+oEJB2LPoDjtT6Fmu7mX5KcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKXvxE2EQok2iinW
+aEZE6tvbAMTQMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAjeckwsYACNsO+rSJI7NFfVNLeSTGwaWEVKOn2mTrT1hc
+nSsiHPkTkMCRB+XUFTXRDRFDl3EtfglCd7c7yxOabBsXmE4W5J1fXy9daUuPY2G+
+IujsHUwKQki/VogAb27hsQVZ17hTxaeaZJDBP5MZbJgzLGyeDkYHHxSdNDYxVvAS
+N4UZtdqLxAo4nnszrPCh7jzkbTNB+EagrO7xSllWG/guNZEqlqZj00ypbHU/DTPl
+C3vW9nPBrVJvQQOkS6xWKtnTvu23VsbyZsj/mWf3DF7OMFWwf3wUye/mQsiLg/Xy
+dbaNrlytXzp3Gc2FlwEGivJCPDqqo8M6zqWd7BuLRpNOUEtDmdNawHcBCjSba/yv
++AXwqIXAWeZYKRDs5K++nlr1o9ohhDUvxKtUl86ml4mNEHQvI4AkPQgdatNmgLo6
+xCG8YEkLPAu+y8pElLK/zUMdIIiX6leD5O4F81lh1K2h8hw8jgEYl1p0mX2loELJ
+MgYHysFe+Dnrry+vLM6vC/5z5jHP0kpEkUhYlbo2NlVpYSpcIjjDKqYYtkOaAvVq
+1q0iI6UD3nSqyruEWSqN2Sjy9BCIq1QBKcTKkFTONjLyI6ldBn5B6rCJBWk1rb3B
+RCOBKo8OSa/K4e9xRjJTk3deSJ4kpsPCh5FWwGRXLywxdX5o3jv+HdvyDTCegBE=
+-----END CERTIFICATE-----
+
+
+EUS Ntz keyid ebb2f4e312e6529c4ed0cdb68228580ae5203d45
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAsl2ucn4ZGzTBQAAAAACyTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUyMjIwMzIxNFoXDTI1MDUyMjIwMzIxNFowQTE/MD0GA1UEAxM2RVVT
+LU5UWi1LRVlJRC1FQkIyRjRFMzEyRTY1MjlDNEVEMENEQjY4MjI4NTgwQUU1MjAz
+RDQ1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArvXdfXA7YBKeYidc
+zLvZKBHkXivf4Nz21u8y51OFdAB3GT5D+UXeGDNKs9vpDWceZ3Y0eksEOnmVzWcW
+pnt3uyg0Ki/ri9QYoqlWwFEuIKI+SOowOL4aE32Sp9N7F0Mt3xYFqosHMgsRgYXy
+buYhFXButO6kuPQn7CKo1YUa6qXmfqQ9sOSAwQBwjfWIqNV5QKAwlSKg5uNKqtUK
+nzVeRIlFXnAMohloPbw80u7ZV34UtEntB3PPFpJdpn8xMOY4QQ0rlPvj3KL/ROMW
+E81YtwDAAnnDvzQpZ/W0lPpkbErGmzBHtT4WxYwPEmrR8xdlR9jPv/54h9JSm1E6
+ZBvs7PPB4hr5rKbNjOPfKHAUxGPlweAPw5xWEvzVbun1NS9l00PJwRJFxunM6nEO
+rr1urSO9aODt/UrYvW4Fht/syGNLax6DV1XJbR7XeASseMnbSPN+Owo0JIZxGrvf
+/snz+XXzgkqirLgC8tI10v2nOPhKqwfUBHIf/MYdul9//LTGWA5nthZAuAHCzNMG
+5w9HgJj6l2/TqNVL/0fjyjf+opurrAxNf37xx0FC3t1pbqdavfyO4yRvVDa3ym0a
+XVhXm4f11NRbYQ17ndDPgbFojAqtsmhEDoVKuYHRzon7+YdtSi0lGmnBDzM96AUa
+PexNqJv0UXy3jeuvDrycUpHckfMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKnlilf+31+yXz6j
+yeSBrxhnLGtXMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAmyqS6qavV5Gvg7Mk09qgMQ5+e6n9Q98zTkyQvp71EnJX
+zZ84zOudX/qFiHo9qP+fsB42fe2eqYsRpHdkLLdTiBSkENghiyF6pjPy+f5+YXTq
+zAsE7rkGNhNCUiz2Fo/GdKQw2HB3+fc9oNn19adGldL6JrrEGUiD9c62pMWV4S7u
+AnaCB27nfcwIa0ABBaiaHqz8mCgR43bx9oiHNrdi4TEdX0enEP+nRV+hzTEjKNxy
+qdG6677D5ZRt//3bW3w9Xc571fyCSkAAHZ6gmqlfgiIuNyeeLUpyGC2F+9ARAH99
+kBNBFiMQoFyzaN8TqqA7q0a8DYTJFZA0DlTle+bRC8FlEtBOvRKgDPwuL3BL7aWq
+0pIaqG185Up1KDJrNYNvNwDMsXADaSS9c8WMDz79kdrxR0qZ/xomgWcqQnMWN7X6
+bfnQ5gkUAFuHWfVS3yayANA36h0oMdteFRzORgZiAR0DxSybxtaQ9rYIs/oUVgGD
+e2+1pdeHR2lIKJiCtiC4osvNwJXWQ5Iitr8PxzQ6/PArtvljJS8c1AXhelo5fYFs
+fX7YG2nHoZDFy5h63mYGIceJvXjBaVgvjEueQxgNNsRijTfH5/4tGYyvRmwmhwuI
+HuChptfQvoo3rnR7DmFpPJHZRa6MYmMfjlJ2MoOJIb+pAFfv4Dhf0WiJ11KdAFA=
+-----END CERTIFICATE-----
+
+
+EUS QCOM KeyId 79100C2EA35C4FC14BDE159B56326FB731D1D512
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAGaJjZ/eOI6nzgAAAAAAZjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDYxNjIwNTgxMVoXDTI5MTIzMTIwNTgxMVowQjFAMD4GA1UEAxM3RVVT
+LVFDT00tS2V5SWQtNzkxMDBDMkVBMzVDNEZDMTRCREUxNTlCNTYzMjZGQjczMUQx
+RDUxMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMPaZJdOrwQCfJ6u
+gUp+iHNIGlpxYuJnNBh0fcJajgyYNTVpHt0C5Zsw1sjQqL+sAZXLSNEs0vp2X6Og
++doBiVUVBdXRh2hrbSsI3NRqWP6qcdxg8XJR+rus/9JVz6JzuIEFjRTNIq7JJn8L
++/JwfNPEjF1NYLm4uS6H1m/5A4KtwG2DQ2ouP4Qf4b0RuqKPdQHs1jhXBtUTAUYR
+TTaZHCpyn0cIQT4KHIDc3tP4xLkFuwywdhIA7lg3WFm5h+T88+LzH8J82mtGPEWH
+RLOYPcb8fQcZJVcX+C3WGcRBMGVJ0kz63kI60mjmvkZZ5Z5rCT80g7ig2xwiVN7g
+8F8LLNkCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFGOvUFZBSJ+Z/7QGuzTXVaTXzNtBMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAdpiJ
+bMsAALIIbG644A0Izqwi0PlRcOtlCHpX70NLfVKqnZHUzF6wTr5JmDuN1ljUOoDd
+503M/3md9JXw98nBRWG+BJSVK2JVQJHFwCLh4s70wPPWsRJg+AEjXnHxww/KKkcs
+APMcCTVhVRMNXwH7YQqDJsSCtum2Oh4UVR0uYWN0JK2vKxPUT+zCX4Xts1PZ+Fhp
+5+IOdSON08FAbl+cgqHbLdNwoHg01dqSpsSl2HElw1NvUE6CrLQaCswgu3T/Ydk4
+9Lg3AZRaMg69ol2g6QuawT3eZTUKc8T6FsDVtuwOW84MPyqHDpBx383JxVpZ/Osm
+qoiiXwEsvXr4AVgnj+QJ6hNTB1m6dMIfWcDOdoopZXV5cHwsmgP/lpQCAw+BMn6m
++fP4ceAlNKP/tVLymqp2cLL9hV/EhZPjnp/Q7T3p9N/tJRN5+cNpN9V+hf44v3+0
+LUKtGLnCHs58PL1dZ7uAT5XT3tXe5VYy8lGpgGeGnxwvKdmCCkPArZWYkr8FaHMI
+rU/3W8vFC1Ejxqnv1D2/kJ4w5m5LeMMtulg9zN8regr55yEeorQoUTNo8QB7kEcQ
+sbQ9y9zsdZYUBKK5f3hPcGSCzS1ruRjR4igv2QM0AmvtEn52Ugn/Uva1JEmM3mbe
+H+R/zjmqvKOz53+ezORej/XmG6dn72+UXk0GLNk=
+-----END CERTIFICATE-----
+
+
+EUS STM KEYID 08CBB05CA4510B2A73299184EDDC9CCE42911211
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAt0qtrSuQ36cqgAAAAAC3TANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDYxODE5MTYyOVoXDTI1MDYxODE5MTYyOVowQTE/MD0GA1UEAxM2RVVT
+LVNUTS1LRVlJRC0wOENCQjA1Q0E0NTEwQjJBNzMyOTkxODRFRERDOUNDRTQyOTEx
+MjExMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0EK0uRm9kplSrj05
+AghoxYZrhF6zq4Sh7YkRyFwgl88bkimSwSBEr/tZARSdp6mzOrXKEM71OI9lwCNb
+biQvgIFZy49l6Hxmcdj19VfllIVyocpqK7q87VSyGfUuBbXqut+JuCcCCnJBBOjm
+UVrBjJni9P5mSQOziwYVeVvCUGRVIFd5xC2nuODWag0rJrr/Dn1uS6cApKd+utiJ
+X3J196AsDrhzs7n+tjVOxdj3Kk8/fmj0k2bXP0bgyXkhPsrBR6LE+/qLt9WwMj+E
+h2lM9KU49e/eBEEWCgcpMIC+xwyyf3Yin4Wg4yGmGNfL0zoGK4ogYsMQMbeJYYjm
+3j0gP5Z0zsc8rbweQoOVEjaB5Z3xDGBYBY9QOT2bSvpjlE4E4PNQLIYDl4PHfab7
+jrFIgSgZnkiHWfXlCUISZ9w/eJKG7WsUTVrtDtVzV5c+NJ/mpkiOkpaml+614g1L
+FpUkb7BXl7U7ZdTolyUr8/UfK86PSQwlAR9W6QKakxVr74+Ki0M8h0OwQCRSzfQq
+WySHMUinzqP5fvZ79r4fvrdCNrTv5m16MxXRSnv7ecSmnmOoHIsQvahNe4hhR42I
+cpJ8EGP/HCzxy1atcJ2wStcbOoVvlZHI9vwTqF9Zn8g4N/dvGoumEq3suL1hff93
+CronRT/loSBAgc922EBQmsk+i5sCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOG19Fwjr9WvIqK4
+3gKzkIAMW/gZMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAOyLYuC3xmS5TpVubmYVAgv/pYgu/l9D2w0b/B6zeAk0p
+4mzt85T5uAHjn1U39GWgYGiRBAqBMwWsw8VkbNAWjuHRmcOIilBzaWBeVhlhjI4W
+MGBU0gtgb7EA1lnZWeJ4ShcgVML3RlJHSBo+bMQc2zX9Rg51crX8gluRfwzeh+p3
+VmP11aRzLHa+hzomCf0ggvFN8ynZUYGm7SMKnLHg0r1Ltya5/hHOhkKFpHZTUbVR
+fylxPyYYe7mY7ym1VFklNbgOU0X+dM8w9yaHySPZnHXsYvWl1u+vLAY1S27CgaD7
+RhDLEtIA/JTvmVwNJjb18GoOlpJrL3TUfGUCK/RwBgqBWjqHqZ5cH6rNkP123uZl
+FxGLdWdCG96vAO5psufExlYnD1GCEIw1wbqHTiRgL/7HF0ZtzWZG+rgqo6CNuLIj
+j20gm8C2P+s5ajnXf9tQOdc0t36bpY8nP1qEhJVLPMFf9iCvJAycDVRujzpyq83M
+l3SqReUrLCbw4qGz6RIv3LGjoqL6OP6mfzHsvkiki2aXp0+tIyGANzju7Ewr+N7F
+6mx0EI6n2DR6u4WZ3mMQOS1K+BkSBAdmUPa9uTzWv43PaGyJFRs832U6YbjkiLHN
+PSwqEjPs2BNFbpmcUMzqz4u/hOwTVkCMmWf2KfQbH9Q4yzeb28n7VF0LsriXEf0=
+-----END CERTIFICATE-----
+
+
+EUS STM KEYID 1ADB994AB58BE57A0CC9B900E7851E1A43C08660
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAQjCmL7EEWKHxAAAAAABCDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDMwMTE4MjUzN1oXDTI5MTIzMTE4MjUzN1owQTE/MD0GA1UEAxM2RVVT
+LVNUTS1LRVlJRC0xQURCOTk0QUI1OEJFNTdBMENDOUI5MDBFNzg1MUUxQTQzQzA4
+NjYwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmWPfZZEgPJQyEQWh
+4WgoZ31OKbtV4gDUfYrzObzQrUVZih0wHqKbjKvlb6ZnEryf0ygnZbn7RUggkftJ
+nMzjOn4uqoysCJMTybG1C12HHiSFQll+F88I8gtPwSY436URV4SkH8JIQRyKH0rQ
+U7DdCEc1+Pj8sqhOj3yg8Cx6JcSFEpbyGyq4mneJ/5+iT30vefqXbMv7P6tEnfa7
+ix6GBErlUyo+kiqyGtK0x5S7I9w+oNNManZHcVYGnbXVnowNWPEa5/sG4VIUJg5n
+VhKJq2uK+5qTetfquYowhyC2Y0xJKBUQGXAGc1qDZJ6udReihV/ibCYz1x2k9EWu
+56w7SwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUD508kav3b7tlXDZCstZQRz0yNdowHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBjYN8w
+IviKh2SWtsB9L3PEA9eQZJPthcyn8BfgefQjPTar7bmT2B2OV/0IqpIAtyT4nlgu
+W3oI6M8YlHYYKF8vDYKInC/wqWkOLNnijzYcJIkMAEHixbHgNqx9E/qQGk9uCgLK
+MJhoENN+HTEzOOeJMqnpOU8wmePD3ejwxV3oJlKZ9jX5D9LcuHz385eI4OePgIVg
+QbE4gLtdCSzeOJXSn8K1vJgvQctnvEmtWdRGH61GQ0iM8423rC4KARZCQzWGJ4OT
+H5u4jT56snbi62nVEs9U25cJXpspCiGsXKJMytF8CmfkPmw1dotiWdahctCOx1wW
+BUdyZQZp4FdCcxHRYknFBd4KnqbnIhZEFQFcBLJVOgm0JhXV9j+lQo2vi9Z8+2TM
+6wh34QhEZhE9ZjE9eOMm9r9syoUqahvx9ZbczHWDoZtzjbCgoz+B5/d6J1Cqus/F
+8VQ68JO1YlWmaPVOLQ2ecaAarBYafRI/bpYoOsX8m7C8nTTPNwjIJ/1lyOdTQDHF
+uHcv/Ck/TL6dI5VaU6AiIjZyMLZS7SejkDwNRj2APXicrOmL/toDqYmAWY5xp225
+dClh/e2hWPv5LbkJRUeed4UYqlD/EPCyMvBZkjiA4lzoRXvu2r1tmuQ2xStJ14Hu
+NOb1l+q11XUTnPvxIxAFEq+NOZGQZCoj/SkKvA==
+-----END CERTIFICATE-----
+
+
+EUS STM KEYID 1ADB994AB58BE57A0CC9B900E7851E1A43C08660 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAjn5u2odSWRHfwAAAAACOTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkxNVoXDTI1MDMyMTIwMjkxNVowQTE/MD0GA1UEAxM2RVVT
+LVNUTS1LRVlJRC0xQURCOTk0QUI1OEJFNTdBMENDOUI5MDBFNzg1MUUxQTQzQzA4
+NjYwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2+Ij+YaPqXGfi/l8
+6UUtWVZelvTdmhLNkBoMtQO/Cb6/91VS6DlMviooiHg5p8v5TFXSMZY7SKLz9tMa
+gX+QYqvsWsegf4EyJ5spdX0elsX6DnzgYJZ6ypS65rJp3cR9u9PEtG4Ahh+dJeiu
+xxCE3MA0JG73/N09MnpDltbIe/SbPaceuk3QOz2EmtElIl0ARLBZt0DFo1NTr4+e
+/Y8eAtNP9wnOxcZxXOnoerVrpL8L2bb6JLDNUiIdfugVLx5eouzTqAJ3uVWaz8zX
+CCCl2jmaMHaQN6dg3xgSZReq3UjVEh1Mg12BBx0YgUBVYI+jazQe1ebPUnN3SlBP
+Gw85ww0W+btMd/ZOrJz+6LtSpQoOm/AN7/tviTR9R+wUavQK4WBEc3ugq1uMQ6YF
+QmFGqhz17CyGhSGZ30WO9NEe+82blDLgoMxPra5Ei4Ynkf5gn/JjMGxdjbyr1PWi
+snTo1JXy1gOLyaNS52MFZFDlCmqgbFDNN5iohwI4W2wCaT0flXRNRnYqnWLUxxv5
+MaZR7nvI5G46z09PSYr1TyWTIwLveaYnvlrndLfXqMGuVYikx023YvD5W79HW/7M
+C4kZZUtv3099TZZCDSqhvT5wkrrIWdUdOphTdaYyyHIDRl9cE6Tbx1U1Ig3GF4W9
+Rkv6HknC/h75YolWhN+g+/2TpCUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLhf1WfKksQOzwzY
+H20/A1VvOKZRMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAQar+KGz3a1Ped8CAUJTZ20aOapOpEDcnH/Vw8ajPoUWG
+Kt2PuLXB5s+K+jKhS7ekvwpIy0JjccGWuTo3hA4kOetYzj23qUSSWbn/2xi+al7n
+zu+4QFOvwZv7Qpl+nQUrcQp6ekTRMcrwX3SFqeK8yAytV9HpSJCIV4bXxcnmsl5f
+E9wQf99jitWekMJ1Ux5oFysDKRUDxYxmPq69SjJ+WYkLhMLZkPoCIpCNnLYMTeEo
+dteCwzbCoypS5f48j+NL2mrbwHo8V/qFj/tiw6E4zoTyuhL0MCpKlKk1LH0Rx2gf
+R6pXQwZweYy2O11X8/PALMXeQZn23VWK5BPKyexpkxNI8F/aLv37qRuS3klxN4w/
+wggKgyXxbgrjVYWWmi2iwKHu/iM7aSID/cyK3bRTjYSmrOAeB+XX+cu545q3hHCh
+k9YCHv7bKHz31GJvgHXI2DUmDMuE7buV33/VuwCWlzLnuugptRpRgbsE0SF2NG0e
+k5YfllNfXJ7znYIcOTZZrsk8U0pnZW6/pqw+2rKnYwcX4VvaajGf+7TqoZcIbrJo
+83J2megARogm4TwHK3hJ2nk6vW/KXKCo7TTM2xPiUZs9A6zH9jLhEV3hxf2ees0G
+ueb84AMx9EqpO3kBsGRon252oczsF0Gd1FtOneVG1GtgKiO1eol8J5Zll1bsmOM=
+-----END CERTIFICATE-----
+
+
+EUS STM KEYID 662D8F1CECDFF147A8B6F0EA296AF7F24CADF9CF
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAt/MAwg1kiPdsQAAAAAC3zANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDYxODE5MTYzMFoXDTI1MDYxODE5MTYzMFowQTE/MD0GA1UEAxM2RVVT
+LVNUTS1LRVlJRC02NjJEOEYxQ0VDREZGMTQ3QThCNkYwRUEyOTZBRjdGMjRDQURG
+OUNGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwnBn2oPMuRmIFgLl
+7An4G5qc/Fn+itWOP0HAemugHqtpHOK1q1ORz8noWBwiscKYgFD+frk4/nYYk7Ki
+QhoshvZn/ySqAgldk6H6zyVSs51JQOz0DhERHIcwX0ezryuZbxIqKOu4Krch502w
+Hqntc19Hvm7MXUPgqGOJopnCBxNypCJsvzy/z81Kl/Q+kLHI1UomnYDfm5g2NYKw
+gJ2/pXJOLTXoO8GCN2ayRA7cKp+lFgs+5+hISaWQeOWBfM9o50TDAig6hP8yfMG1
+/8Gz17bTAZfK/PSi6q/RorDoI850opGQ274lwCOeUil2Ryu1RV4LSs1+WSFUKuB3
+hju6mvWWKRX1GqqGoEH9QMZN8oRb3UIsuxOWOIPYC6vpXNlcl9ia0axK9ggl0X/3
+ciQkhUQOmyBfLsMPfQcX5ZiEuF4iCMPC7/ZSX5P6ppLGOZWJ5nmhdBLHCkJiczFk
+SJ4gRMP0x7eczG69YIxqmxOXW8ZSwlTcEKWzEtmhpuUUtLskfmfDwbamXOGb9IZJ
+03lP3rm9zuuz5JYeBobBVxxVXgxIei+Q+YgZyPdnCT2XmAn8QcKTmrdEO0o/mOSD
+f0OKOVLCEfroVtAxPe9Y4YkVMNibBexrNmVLAtG8w/L+D0Ts/4gfE0tKSNGs23ZH
+WK1UJ0uWxhbKpm75d76f7C0g6okCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKPMQ0hh00kg//1Z
+Zj1bRHPyld9dMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAIQntUhVmHC9zWlLnrT/qeFwWjHSi8tRAxDYoIj/hbYqQ
+UpFlSyjJAixnOifO/YQmHbW+43Vv2vXDN9DurMCdeojD0OuB1ctz3YFOJ7k7spTE
+mChENIrIToWC1O7kEse5gSPB5DEducKDxARaw+9ee2DkWvl0Wh7TJll62ovz/daW
+lmSJPpTkkebTskTebX/zWCXmEJ5prgTToHejlDX/LbiGjWManHKWustHFY5jebZR
+FT9ITAT6kR5zfS1WEfCfiyOZQg3/Izo2SntsnHtBDKWolxkrv4dPSZcWokARtS4r
+DK5MeaJW+mlNStOLznhhdYkMogO3ihEmS44j9g7kzAwGEtHR9ORm52xZTGthx1nr
+6f1pmEaUJizB5UFomqvmnxI25t9WUO/pAoCTpF1rW1NWifePBf8s0mky1xdOkPfC
+5Gbr+HYiIi3kUaEsFTac/+qDPYgIJ0mRfPwO8GtnXB64fYuheWXVgEPWnzViU+4Y
+TRSrFkr3YiNCwr1446/PGbTtAGMuu0XbZJGiRPYbmTWIgGa4vOkPUe+i6Wyxex5D
+kf4tl+uqUARGSy7aM6mWS5FWV6yNVyne9N4MbmZHiuCPJ4oNlMNEi80U1Xsn/5Ma
+7Tt/3fyLobcOslYU7YB9zu4MYL7yhPqP82Jqm1Mc8bZFDfihAchLeR7Zhh9ev0g=
+-----END CERTIFICATE-----
+
+
+EUS STM KEYID 6B2780800A941CB47EFBCABDD8D1F01D529BF36C
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAtySoWzQjY2ijwAAAAAC3DANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDYxODE5MTYyOFoXDTI1MDYxODE5MTYyOFowQTE/MD0GA1UEAxM2RVVT
+LVNUTS1LRVlJRC02QjI3ODA4MDBBOTQxQ0I0N0VGQkNBQkREOEQxRjAxRDUyOUJG
+MzZDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsDYMuLAww70CgUBb
+B/QT0EiBvwcE+bq9qwKi1cYNrgnpgrgJZf7dZUGoyiFJLs+r481elwToABfbHE9M
+fHW5aTYjG9iKrtSuzrEIOnHFZVNZZfo5UJc2A6U0bZ1Ik5p3llKEQSV1Gi6rngN4
+gpo0KTRuuyVAO5ovwHWiPMpRj42IQz88tdK+T5/QengkDFzXyY2oJrZLyfWJ9Aib
+n2e7ncEMLkcKdBUe/g8Jqtp/yzD0HP7AlMb6Xi74x5uVPIuW+Y0gvhBBl80u3vnz
+cUpNYQzB+4NaMXzU7DaFAsMaW8EGMBCuAdgQ20piyJkDkHVs9hW29hLAdQcQQQ/s
+UAybHqHf5p69E+U3Miv14oRXOJdabVZg9+zEIrPXm1AqfnCG9gWb69n0XnLLz4VM
+GDrXI05Afwx7j1+jsXhL2qmVexrkz1Z6fyuFtidILmgCgiGdAY891YuPWGbV2sGp
+gwVlX30s1iDW+h/iR58nPy3kuOF1cQfvoCY8pv7zeydbPmnX2KRibwmorZTiqd+J
+Mw+6gvynIhW+GHBQD1RX7EoGF+mtTQEg5gMkyYRGi1cWD1adRWkiYypz+GMBHs4/
+zaQnQvpeAMBGkDrNwWWmohnTFVoFw5R8s3K0eT/RSySl7xVrBzLdWlrRsbhrtxHO
+klpFFKJPHz0FbrnUMBku6DRUzxMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCBY05FUrXOCUvlU
+H0wnnkh42EqUMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAgqTDdvG9I8b+3kc8bao4Z29QjZ4uZdTkjP2q9GZB8jHf
+fkJTUWrDwWGK6/ckcZ2nsk5nMEOKINR86kKqbkQAAB6inKi82J1gnoODrvLD7c7x
+47qDDSNwDM1Pe5P4RmBUHoIDuZiRFUp0yAincXu5D1izVlRwVCM+VdiVgTKZ6Smk
+W2Esd91g93MUTKi56pH7hB2AcpOPrt/qZjLam2cGaNn0dbs/5myhtll9801efGmF
+Xapn/4+ZUh9aJIqE84XKkIjfMixaPqtew59B4XQFyb9rY6wzuPbmoLnkEScmVkqM
+tzXpdK9FDT5N9AfgtoEgfhkYO5EvZqa0UsKWHId6xtxZ9jaaUTmA2DcUbWM/Yh1x
+N/x3zz6v/GQnK2j0CCdWG+5aKiRIbKH6OLEGj6dW7ExtFXhRhJLTIfFDkxoSgZHZ
+BjWRDPk3H/5ViTkBVD379tDoDo52UhHamoDokVkXJ6pj1pQSAjl9SAWzzEWEiFmG
+BisH7cxYZQHWL7PoKH05cg/Dac4A5DQ1nNfvzqgyDo2zl8X2YwNDM/rebEaR1cX6
+OKTvx+v7NF8fAPmMET01czBWgKfQGtj49NEXCgtw77d+sv5Vl4i7DLd8/QVAKSeL
+4xZHxxNFdM1WZejmXPeycWdrgSAwmuHRuYLSJz7blCjiSS9WDlK/SkGPO1/JxkM=
+-----END CERTIFICATE-----
+
+
+EUS STM KEYID 9DA5C72CA00BE14B85B3E535C8B07C83E85BDFF6
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAt5MuegjmoFIVwAAAAAC3jANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDYxODE5MTYyOVoXDTI1MDYxODE5MTYyOVowQTE/MD0GA1UEAxM2RVVT
+LVNUTS1LRVlJRC05REE1QzcyQ0EwMEJFMTRCODVCM0U1MzVDOEIwN0M4M0U4NUJE
+RkY2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvgG2WQ+UWfdeFmRO
+k/W0eJDWAp9Ov1zwMNIssrPKLsWP0Bi9AcdTVAFgJABiPka3hCf2Fhr2tzcyNARq
+pzVsT+pU/JOtnEAasVf7cG1F2XrmZs68YRzNWhgOt8IX6Xg/KnCImAiGQnvLWAcV
+gW1RSH+9nAZb3w9ulsX8gJXZJSQ70f2/gsPOe4z8/kNzFpxvXYKHRIvW0SWAutzW
+H3mPum2TJj4Y6c35J+WTyv4FYrZ2mNk5xel9T1BktdQYTpG0vGmlNIAbPvRyiTe7
+y0DVCsttuY0buzwRPDKMcpKhTVVTDQMX7GerPMxRCRWMZ7ihX6Z1luSN6G7yKIyE
+9i4hF1oqi5kQgmd3h3XeyW1KhjJc3wCEQuD7Id1Adcf70DQ56JyPW+ZbDYJzXqsh
+VWSBad6+2atTkdDU7kS5QF95iKE2qvYa1XxTA+rjCw58w/XyH+q9uX4pZoaCMVeH
+EIE11G18OPvq7fKuuXMv5ky4LyZB7i+uiBZgCZRiQ78cQ+Z6OwbME8lpmdFacBvu
+qw6MU66yizNtCFhFmx7k8qnlrWEQDXRySsD/NlV5QmgSrgCWfi29q2lrIVLhHpzU
+aFTyr2e1sck84VwSKER23bEuSIvpaFcmn1NTjJS7en5pkAoW7JnYiiifTMta5uOq
+D+gf5EnJXzHDrtl2iTyYHBUovA0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCGqEQN1izKsPHds
+uSSSimVqqH+ZMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAjaY1gfoPF/RKP+kU9HggH5V5mkEyw8ezxV8dNFYI81TR
+/WxVyxSmqUfSK6Nt1HgHGysl6s1mZGhDLufxrGAf+GqFPWdvQM3f6eTIpo+1sRcT
+DdX2vfqaO7O/EMXWrg6ePjU82YdKLW7apGyVI0A20L3rl5I3xwb8RtE/45qU3U4N
+vHs2oUtcgoyvZolhU5K+a+g7v7yCmP8L+k79IpHXIrCdeyAWiJCaOAKULdNbS2qM
+YnK9Zw7CD+h5hzKKaRzpHuNiDiNyCHAQ2CVJ8xD/NtThOPANj+allQe5uUVxdXAY
+tRHwKOwda3fXHTHysUwYordSCrBzHqjF96QvB6jhzG59zzVe4MOtiOAt29p2k3rK
+ipnycEzDldM7LDIAJzVpPpnGD6UBu7kFW8mzmNIVgbjZP67VuZCy+p5XK2eV6rYg
+Rm55BSn8qu3zl/4k0cvoFfc8az+E5KX+2mKSALtJxBnoW/bQg7OVaeiIS7yisySu
+Ewmq2f6qvoRTIzTv3U4O0VzWBzGdbJ48tskFLmS1FSf2Nr+r/x1+MJhpOyh3JErb
+kh2TkHsdqvO1p1BSE12Ojnuf1QkPF16eB8Mt5ITITtc0Uu1Wa9oQE8rpM8f3AV/e
+RPoKYf9Ijq+N3wXkN3sTCIwsLskWF85O5A1LhnXVoo6JS/vHWVgCC1/N+WhIhGA=
+-----END CERTIFICATE-----
+
+
+EUS STM KEYID BD963E9AD574AAD94FAD6CBF416DD85B4A559942
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAuBSL3BNOU2C0gAAAAAC4DANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDYxODE5MTYzMVoXDTI1MDYxODE5MTYzMVowQTE/MD0GA1UEAxM2RVVT
+LVNUTS1LRVlJRC1CRDk2M0U5QUQ1NzRBQUQ5NEZBRDZDQkY0MTZERDg1QjRBNTU5
+OTQyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsl4kT0dH1l6E5TTB
+QSnOPtSr06sS8OxpID1o2d0Bjvy+IMckQZvDGOZQfY1CIrPXYuGDKfxnohjX4Lwg
+JSRPP0sr2iVvWdlKiqKUb0qM0m2P2pjSeLaTW4cG6IUmi4GIz18Y1Wn3Ycfi3Z6E
+3NIm/WDEMJeJhOonyKDdoo6xXq6oUzDRUVPYvGwRwjM7Avmry0ZFaOzrJnlY7o9O
+KvyYWYDtt3gdydJVEeJBYvV87IF1CODLfy/9pITGRxP+Wa2c9R+nw0KlbGquEEVd
+r6pdSr6cJqdMfVKK1S+WpfGUk38dy80wZRIWx69E1A+cUKp9vlAhwVEHNgmbmI1c
+eQO3X1Yy7jwKF7+jqMBkOrt4d5hLvb23KnHk4MQ3RFDUIFnLb8j4jbjb0/bbPgOq
+UU0JhQ+8Yx2Xc2CPEw9If4m4IrK4ihkx4w79zX5PVT6YlgG1B8Kbgo/Vlr96raMj
+B9c/5zJ87i9N9aLDh79gH9bXRfjWJKEIRKOhvsdiUllCE0/LVyK1BVHYzvPyT4Uq
+JSB+cUQ44GRmK/GQ/0afUVX+8mGWI1oLYbYf9z5ddSiZGPeMzQlpo6vzyHpr9mDG
+SIA/X8XfyHH+85vzvIaeKDRe2hOphBRRQ6c6bxT5zTnyElkNraSAA/qSiKDqYxqM
+9eXhW/4u3g2hcrXBZwGwvMClU30CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFN2MeNtl43s04CTb
+j92JS/eS3Ao5MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAe8XE2Xfp9DYA09TZqyiM11ZpF8u7jeKu4kHvC/hbaeHh
+PUAirQocfDAzDTbGpqMGD00aAS31hdk6NdLnTXtwHnFu5c2i2MRGliiK8T5JrVOE
+Obj+gRuTkotCszcxBPeIBWkCFf8XXBbvkKasx/NsbcgQIqyvoJNZ9JiABwJv3EXK
++JA9pK1u61BFBYrAsAGankfMLGFJNQxlkski2/YsRWH6edjT8O6KiW7Cf8KUUvpy
+kpySWHURcDSeITbt2S+ZTQAyLQVyyhE3yENcrpJ5U/gIm4KAqE95GeARDvsJpOzO
+3Va3AT2e84KpAXcpHS5aY55sIng/bKw2fFnsp9/xT9Wiow+8wi+R/5TwdofgUkW1
+JRU5QCquvw+ThfRfwo+mUqi3dYMpEdW6TkO5ZRnomav9Z276NdR7mWkeXpTWgJ62
+BquRXll0kuyliK0WWM2mu9+rYai+3wNbIS4SW5+LjmkfyEOB+UnTU8R/L8bPBrrv
+kE6VrvaRSurU+IDgvyLDQDWu6Y3UybfBvMVQ4ALnBYTxQAQTHtaQoFnfd3jcDfg2
+rBkhOZz7LzhMheET9Ar8f0kfgGmqSnud1TrW4Np2CCqm9H+4JYcrAujQ5kUThpBo
+XSpFKx9uOZn2t9h10BBHQOdW6PAF7IveG+U/LLb+2t6+/ijGQGcTjrBisw0mGRo=
+-----END CERTIFICATE-----
+
+
+EUS STM KEYID CF23E59526E446C3FE4F13EB686F624D705305F2
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAQm9Vn5zfo6ucAAAAAABCTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDMwMTE4MjUzN1oXDTI5MTIzMTE4MjUzN1owQTE/MD0GA1UEAxM2RVVT
+LVNUTS1LRVlJRC1DRjIzRTU5NTI2RTQ0NkMzRkU0RjEzRUI2ODZGNjI0RDcwNTMw
+NUYyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2A+ppYSeqPKBdmgt
+eSiydSSkw5KAWugshi8iRJ2kCe8CGVFnSsiVeG5mlu4f+ZvqSCHA7UgnWzbLpPC9
+qH65qZ2ZeNpHhu3gCWCKdTxCDpamvowtBXaDTpEMz9eGMMCJ05TsbhmOGDZBS665
+XqT9TvTEbOVuE36WiurHo6yOKM5znDd8YZ24U3clq5K712jz6WhlDfAITfJyqI83
+F6Lqh8Xsd92aUSJ9X//ww8sUe/hR1DAzpXDRvu+2c59vay/2a0DiJA6YH6hP6kZo
+CvkjnJDF/pJM/MxGkVMOKdOOROTpRDnWLCmRyjn03rIP6Wo+hPR2Jy6KrH518YQ6
+bFCVswIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQU1S9+iNOnxxvQwuvuqCdkbMr3xa0wHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQB+CT0f
+dYMg2kDG8uK94DF8fqikbUrQAcA7YP9qerTwJunxlVEk3Qgq4iR8/XAekflxNFZp
+HzeROCAdsU5lJKljby14y2tbDy1MewvuRK/6DafCC6HQuJP95TitNkO+7OoDsMdp
+Z35pahYVXu64cjcZCqAO4u3NhmV3C6+8XxSwTIbYe+5I6mnsJWjY9C11+DvwiJri
+j21xsK3BpuPteSCITZXt9Le9+1cNRnVm7AsKeDwkkcyHEupdvXYIggEgHP4lygg8
+/ShwPw/OB6uUqIQHUQYYlfWfripVpDbKyDoqbkYn4celYdj+xfOqJX1nzxo0Opj2
+iadPyAuHNxIWPkLJOKgr9Q7HV3OPgGv4ndMrwrn7mlwt56obFkp8avVrdAXMvIT4
+zdzk8grXc/fWZBOaKnq/rMLHBavLvVEaT2uue7AfBOYW3X5F2TRX/mLTF8G8XNqt
+PwpeCNwaJSKvEi6s/izwS7cCdvjWjzT9WrwTJbfGgCBZwqkXN9xwGzjVV2Auk0vH
+l5TwsR7+MJ7ECSLBDsF5a3gNxVqlYq8zPVURr7ZSLWM68JEf6nB+Cvyyks4ukaB1
+Mjg+XLomBPP1PQ+qsT6zlILNGipK+AP27GUsAGqEbrY1E6k+M4IV5jDDYCJYSERd
+/9c6B/RIEOrjBAizD+vm6W8uitdDUtHdcb230Q==
+-----END CERTIFICATE-----
+
+
+EUS STM KEYID CF23E59526E446C3FE4F13EB686F624D705305F2 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAjowVWWAySzRKQAAAAACOjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkxNloXDTI1MDMyMTIwMjkxNlowQTE/MD0GA1UEAxM2RVVT
+LVNUTS1LRVlJRC1DRjIzRTU5NTI2RTQ0NkMzRkU0RjEzRUI2ODZGNjI0RDcwNTMw
+NUYyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnvzYirB8407gAINy
+YDuDGg3FQ1Lh/sYKpwOSunzRlkPSzYBLPe/KNNBdfKnptvc/NMx+ylkxRJrZacFZ
+VcRQsrB3AAvaG9kmag83EdxD9TlV8Zc4X0T5H5vf4o4LrL/pLjmMD+wRI6FOdEXR
+JF88/lcvxTTGD7a8tAW5/gbHJagIXkKgdAUb7rl93c4QIkrLfMRo9t1TvX7GxSQF
+Ak4Y2I1QF6bqKHBBzPVE/OatV4mPyus8Vr8kHvT8AorCqc43W38dj5mlHnbPR6AY
+rmww0NY2bgi3zjK0R9vkBJHT42bZ0/caFSpswpwSUuaufgMPgisV+3Z0x9U9rHDh
+gwzcFLyv1ukwn5uxFZJuz/hoj98iZa/7orTGkN9p39YoT34ClH0qrgQdz+m6HwPQ
+k6ijBlBQTr9d343V903wqfUzJQsqPdalWyKnlGS2nPy8DRpmHu/8RdGbCRIMNdeT
+zcioF0T6rMPtpJbShxq25apG41Jk+xKKD3FWe8TKUefv58QouY/aUYMs+WfFBeA5
+MbJnnjdCiCgGAQJYIm17wQDs1VWtd+S/jwbyaeim2CbbVgJSFlnB7D5XHva3/LQa
+jg8LWJJSsUWT/TJhxBtFDoho9DDMg7qx3Lqqh1Ht4Ktl7GGgKW1TT25adSP8Ug2i
+V4jmC7X2covYVXvxslvV5YPRxBUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFIDvG/PBCdSeL8VK
+VE4YZOijZKqVMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAnI5HGgefnX391S+8YTkbMkUQMz5QY9uIAAf0PoqBgtwq
+qrpjuUaEsNbkXr8LfHTaCiHUgePg73cUzmUMfqbItdZisA9uGvyFjfSZLCEkvdQ5
+G2hsVemtTPP6QHF+Xn1bD1SEaOoTpm/i7XVInTap+6Oz0DRB+doOnHTbx7ZRgJ+F
+pjXCEVGEejr5a/G1Dd5/Zjxowbf3FWlhK1alaW+Um0V0GmsJMHuqj0IL4qtE+Cvj
+QoqqZpEAikNp3d2uQR+To1fTQd5/6L4LyEgu9O4J9/sZUCDT2So85KqpEjpvCHbe
+fFiFMPLvWdE1IElPgJTwTfK6toNLXkVgRhKol5QGG1ks06SjH48/SsTc5Q+j0sd0
+lvgyvPEQgOMn9SfzJnYng+I5qTKAZwARMNHHf+2qRcxJgd7fMrim6E2QKvCoetcP
+tJfuYSALbqIS62GhQcWMivESraOvfd70rXQ/njCS1APBkO9umiBqW3ZEuHwnhPQ1
+2v7q9skdjmdPxUGTLX6mfqCvj5XSZatIMCXWKJu2a+ZnpfyrqTW/zVjupCQBWnX6
+1sXPQgYOSpYM/5xb0khaHjOGdaUX2gQiyEp8hUQY3Tqhzah1UUQIIHo7B/7yePos
+kwL3tG/0HR5VtwWVvNi8QE69Z0q4my6jBN7hC+Sx6HgKSag40mJHTHO06AwbWvs=
+-----END CERTIFICATE-----
+
+
+EUS STM KEYID FB17D70D734870E919C4E8E603975E664E0E43DE
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAuFdC5FFVhw1xgAAAAAC4TANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDYxODE5MTYzMVoXDTI1MDYxODE5MTYzMVowQTE/MD0GA1UEAxM2RVVT
+LVNUTS1LRVlJRC1GQjE3RDcwRDczNDg3MEU5MTlDNEU4RTYwMzk3NUU2NjRFMEU0
+M0RFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAj9PEvkl6sHE1+aij
+I2w5SAwqh9QSYI8zvPc1bAjF3Wo0eDT3Wg1gxYgGmCD3jx4fwCLzEqu9didlvRVw
+/N12BkwX8suKKaJ0kNsv3Fp9e3H98mRkY6yjFRCmCCqDydqCxqCyeGWSE5GjYHaD
+F3dIGL/wMx+TJQlqAluNvctrqQbWqtkp7vLm7PPN+itf2vmudNJQ/rLNzjvnSKxP
+Bfhq/FKgkP9EivzWV/zxudN+gHC9lga5SCh1splL91ZpXkdiZ3iN4/kSBvWO8C7/
+zhwILBlVR6pXq3CLKFSvPYGBQ1NUt+p4GZOBOS1dFDvvJEwp0HzkrqoTzFLGJRlu
+GVy2sRVjjHPieFA7b1kwVaseCP8ohDwx62hulbScuPlRGs6Y7drPDKxnqENii1K6
+EwwEqzkFTEWchh4ID09oMRGQ7tpaRn7vEYWldSJmL4JfTeHYPXMjyCCL+j+ARIuZ
+W6ApXjAZrUOdKPcy8BXTIyu/RD3SrQSSsKi652/Zb/BZlfo0sXLo+twG0/vX5LhD
+5/wd0vnywmlWTGBQ3U3yJfPhLJfjHTbsp6kGw5JQtVWLvkqqRH7koBNXA9xfqBG5
+3RrX4HZU/GfpWQwh4xlCTYACbeCOfP6lsCfZD+IolviYpiXaHahLIBOe8g9Ub0KW
+e8NZpEnZ2cvWgYqrMpOb9VJfW5sCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFIqxF+rWvu+7aikS
++a3hTfT3pDm2MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAkIvFLoMymFtCiOgoh47Gv9NOpxkCO/FIT0KCZdNicVEQ
+h8EMSXvxIUDOL2jxasYGQExDoH0WRdwkquFxLPThNvpkroSQ0V3/Z7eb8DnnRml6
+l0DTiDErin/7V3MB3tuTrFyn1whnOBaKivP966CXVy+YfmZ213bqF/sXJQJ3VSMh
+DoCKnCTjeNlDWA6IY6hcqFEfw3HkegufsqpzSFlL7FqhkQIkfhEaihB6j8UhBQc5
+VAXeUYoUbS4zder0G1+YJxt5gGiBah3pUcEd9Y0xM+1gQ3JulYc713zImpktBBap
+5CNB2EQqh2FjLe40csX+MRvmQJrprybBiasIP9IeVWCnJREwbr7vqPzMjnEzb2s+
+3rbybvbRMLlyXBSzmoVFaSWZ5xI5ww2fnzw99CX5h3UnoDVItVJDQ2+ydZkDpHqG
+LZ6HUuXtQpfGf0E1Cjp78Evv1tU20kWv2WdfcjNKNkHF0GMjSnBAc2lRk2aooOT+
+/9joD/vvMmiIweOehicdJzoMUkkEE7H9e3qLE7mqsV40rf3FJR52YadyHA8MKBA3
+GFe1rZQDYVLQIy6jL8wBtO5NFu7U1t6QSg5VPdSYagcIo6p188GtjOLBeDf6k4bf
+jJtACIHz/eo8oojK6bsZRCA0nuHFaJFLPMioi4y2NaucuHnmqkTRZEkUBoSfeRE=
+-----END CERTIFICATE-----
+
+
+EUS STM KeyId 0056A610D53D1B3B6DBD14094B2DCE7E1F756ED0
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAADLBtjRHGBY+QAAAAAAAMjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NTE0OFoXDTI5MTIxOTE4NTE0OFowQTE/MD0GA1UEAxM2RVVT
+LVNUTS1LZXlJZC0wMDU2QTYxMEQ1M0QxQjNCNkRCRDE0MDk0QjJEQ0U3RTFGNzU2
+RUQwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn1SPasolqGKkFmKl
+qxsAJRawPsXgGwfrP4kNn6fKuMyyYNqQq7jE/ViSyAjaiIddaKvTDKs6FB2ts+sF
+O8iNJIRQLLQDwYzFW7AJ/AnfnLyMFGGr9umq7T7KL/bbr1kUlfiH2T91bOh7ZW2f
+vj/FNeVEncDIRv0TIwQQcFqqvdMLmTRY6+RMHgaT2Sx9U51OGGZh/TfEdEY6ia6K
+b4hG3MoyHcTaBqFaFgM/N28OWfVSx5CsmVwm6ni5kZotr+zSMmMZjVj8vnkNmMke
+Oo7byt+D9vLbvjotrBryeF5o9zwVvvWjSwQyGeZRbia/FsBeLmgseWwHOuMaQfsO
+LG1vjQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQU0Ua8rd4q3PcsNh8ct0FqiJjrEUAwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQADb5vA
+hHPd4xvj3ZsTlVG61LBJ/DS85Avn6xsGu7GhcEkHVb8w18G0xoSwHTqGQT2ujRc+
+T7GXKar8Kzfg2pjwsLEHeylMSmJzfxVRtfT+Uw5VjD55o/J4XnWx5RYmWieJTFAL
+wiMjcBUvLopkZt6tLpDdKqSmJxcd70ZrS4/GPcg8JQricHj72G4WIKVDH/rTVKxQ
+HAMt63xL7DR1gHBuP4SSqaBMBOBpzoRrwAkQykqkT94F1bF83PSF1hS7iLgmx1bU
+X7x42T6GGomWtj0J54Epv+hs48aUM0SOcqOBfUt2P8HGepIa4n7N2cR1cHqlHhU7
+MRQ18v9E2Y64nEwkXgHaqysmlh+pBH+AaKCLxUNj4v7+PvDNZiumqRM1K2wS5lO3
+3exRTKLVJjoD+t26C5gw7DasrZrIb8CxBVil5gQf4LW0+MUjiOcuRMDqZ6tScQX1
+dRNbxy55tny5rXAmXztCpMcq4pTHPyl+AQ3c4bLaGIsoSQ7dXPQuh35SOuUdqS+V
+onGVVYd3pAQ5lh6dVFAc2rH2Tk3FBWjYkQtX0rOGl9COW6pclFcgqjRkouHGYL0u
+T34g8u1THbKNMzSVtUbqezw8zk3dd6+7oS5+l1ze61wNrpmzwUm/L9We96hMv82s
+qw9Z7SFiI9f4NKmvws6TX6Z3xrWYLBhg/lJiUw==
+-----END CERTIFICATE-----
+
+
+EUS STM KeyId 571f806b47cce79bfa35947ced88b8d1005ae09e
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAADVHvjrRtNcwGQAAAAAANTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NTIwNVoXDTI5MTIxOTE4NTIwNVowQTE/MD0GA1UEAxM2RVVT
+LVNUTS1LZXlJZC01NzFmODA2YjQ3Y2NlNzliZmEzNTk0N2NlZDg4YjhkMTAwNWFl
+MDllMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApuq3dqWshuM7VDm+
+TYEF6FTIFhl9n9u5JBBEpRLn92tw65iC3ErDZkLXoWvv61NlLoj0J4i30m9dik8q
+ARnyELUuIv9y45KIqNiiPiR71ViRTTpEI7GJjlgPXViAksWimPOE/hGrqeGauM82
+pzcbY+ERIyjQgxoEBtL909yjvKq3Y7HFaGIfdHGPfJ1Odgy+wzVUtBC5ljU0zLN1
+GMsoXG5Qm4If9+7WoF9h3asZjizSMpf8AOX2IMiH+JAEtzRtsv4DSyZAH6NS+Inx
+M64uafa60q8CKjyrBxpCauVWRO3ryDH44dmnDS1fpPH07y0qcrl+NsNo6bz24qz1
+5S1+cQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQU2g674DMuFkUWdiL/RuP3mnlsvwcwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQB3hsNn
+KY3ZW2T30lHv2UEy8iiNA14VOOunU2gmMuXQp52bAjSPP3XYgkhQHbuqWBSW9mbA
+UH9kwYccsFI1FhLr6/kpSuKwFvpn6qLq3bdYQG02y0+IvbmTepdAyj5OMhTJ+7e7
+SRHQ62nIMFDcjSlKiWiKpTL63EZ5rvfjF5GrBMfwnDmGnDpag8rjRlnb9YPbXqJf
+kBvJAA7uJI8H7RPkK9XaE7q81SKtU7VjqHwgHC+0rbUhCz4BOVRat15m9+4qFeKb
+f+kj8U19CgMhUTf4HrKZEJAfrCbFTwuBLudt6z960SD3UDXvUiJZ/cqJ268aCk+j
+xK03t7oSQIkL31CyfY9GBzK8m2BeXEUW5C01ag/9DPHCLnayRGGWEIOyTYwyBBfO
+XLLjDM2E88cpJ9KHKYvkN5R4rZ3gtMjulY+tiZ5ooxUIy5cdhmbe3P4IEgH3aoP4
+nPmd1NPreSWaUI7a0qqiUEyV0c5RqFMBVmul1BQ9V/s8CaNCy7yF/NrXH4/KmdNS
+fxh5J1Ll5AhRQOKiwXyIcHGJExCYYjRnLCJfmeLgsxcAwwyzSu1N8UP6f0/y3G9a
+xADLWvbir4vrLVmbP6BSB8rYyLsUy1ceAhX4ZDB9z49MKa9DvbNgRiGL8cTZRoZl
+SmAC3iBMs+goAZ2PaNuyr5rKZIhGJfVGu8v+JA==
+-----END CERTIFICATE-----
+
+
+EUS STM KeyId F3C91574A6E773FF13BF0C6BAD7A7B65CF1C7820
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAADhXMfiL+XfM2QAAAAAAODANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NTIyMloXDTI5MTIxOTE4NTIyMlowQTE/MD0GA1UEAxM2RVVT
+LVNUTS1LZXlJZC1GM0M5MTU3NEE2RTc3M0ZGMTNCRjBDNkJBRDdBN0I2NUNGMUM3
+ODIwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuq0u8iHw3wzfI+rn
+LQhIba9AhpLFFzEkCj2ehlp+i7P5d2laW4kgH7q64D08TWttdcIsQaqpfvV7ipHE
+qKSor8+QVA6fQd3OVp16TfJCMI4bbtplTceFtPl78WEaGsrl7KxTFnal2Dq56wze
+snXcEdKdu4mW45fOobSikWl3R+LFoIY97l0abSVoAtMGnJdG7bfiqlJECCRlmXEL
+wZLjXwZ37lOtwhtA0whA57PNAsiqTOyKKmOwN5/A6be8uQFCkG7MZPZvIGSUOFQs
+fxo1MmHWS+UyBM8WKaXqtpcTrAsJaOthsnA2ZFeiTV7Dpn/xTkSqjOP+BLS7g/eD
+NeUE+wIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUUSgPgRiknlD/P20o87itsDPpdjwwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBL10XD
+7jF/ybJ+keL4jISYYFZ7fviwgleXe8my7Xhuvsn6n9WfAbWBGP6ITmfQo38ltbYj
+9jZuMZGPxn9d4Bx2ioMYD9XnIQ1QrDz3fviEaBECNfGm/Ayw/0u7ojcMmW21cUrS
+nf0dkfesV54KoVi6Ju4AAa0FL6vMconxMth2ozJKir5hveezv0ixITYaobqlG/oe
+8YF7xBvuSHfIazBBtyQzKJB0GMwoXNxCz+mPfqV3GzzUbS9TquJjBqnCnow0V3qg
+CbUrtP9jTir1y6MVyBRRCKq51jOQjf7HDrmEADKiw7TX5oJ1hNlRGqEUAaB8EIlb
+a1hz13jDOLRalBz6fJ82RLGrZImck4gEUTtAOTJw7wwvqNshO2gArfEdAD/JaqBf
+nO4OEZodIxL/hOcBVWJkBr+iI6EFqy1fYQUapgKGZTRXe5jvPBg/b5rMp8gqfGYq
+GLUlwG1LvphBpWk1RV/JYHkdCYkbWoxEW+ApZ67tjqJnZIYD403mouY8fS/vlAA0
+lex1oOKpe2zS1Rs8NlvdhDuFdJhgkJIh0P84IH4gTlNJyfk2Hzl/sOM9wf2DegVA
+jid7cZkAWnDJu6+Bt0TZqeFws9mzL1hJAulv3F8SF5l0NmIH1d+2TY1LbOn2CFHa
+HRIzSztV2q5uFyNzhtRnVnu/GfH+c6L4JaORSg==
+-----END CERTIFICATE-----
+
+
+EUS WEC NameId 19BCC8BF66E8EB3575C1E83ADB8D4E1612B56B0F
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAFMFrVQ6qzGBmQAAAAAAUzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTEyN1oXDTMwMDIxODIxMTEyN1owQjFAMD4GA1UEAxM3RVVT
+LVdFQy1OYW1lSWQtMTlCQ0M4QkY2NkU4RUIzNTc1QzFFODNBREI4RDRFMTYxMkI1
+NkIwRjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOX9MM0ZkYCLj+FE
+yGZur5rBMeFBMbr7zyMTppNyC1D9afbiPcJ9huBId9zEQSrtmjg4wSa9mkqbkpH0
+5dCvytYnwpNQ4EmX70pXEncnG8ZccRnMO+LgZF2kJkuPMpAIAsvvvh7XhPPNL4Q5
+2ZbFUC2lPOppXXtQgrVm335i75B1AsCpDc6o87hPQ/IYdJr+KD3ABExrdyvFHSch
+rma0/Cp4mWgdVa8IQBrG/ngrq8asZ7CPG7AfRgimwqUMEVW9Jd+5GuiHFZbQtd0x
++gQJQwv9av48N5tvhEDDO4KmKypirpeEnsKaZjkkbao0sCXuMtQhQeyZIlJkaRDs
+CIlQxrECAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFAKAPpFYPfEdheKWk0hdNrMgs8UTMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAJBga
+jucw416OL15Kl9iVYgfU4cEjOH9Zx5OtlcX6d6a5Z7FKDov4cDecVV/F7FToN4MM
+CMlHsQ/kLFzgdzgmvgy+UcITrRXAY9oEDJX7J4/4b4P720WW3xHt+W5biTiwVzWT
+Zf/725HUhhy+FzSP5mHWALYt9JFEMhoi/aCLT2A2p2rW/N0TeGBUq1ANlh3zOSKX
+9/LmdRvoWG/1kW29Pnmxbf/SaeACop//kNV+xBGrtoCi+SP3pqW7rH2sPv1pBXhz
+cLpIojZFeo2P1htaJqMBuR2lNoa+FViQaVqd/06g4jHuiPnIF5wIWVUFX24g+Xqr
+jp8Av9zMYH1zR+hudQaCzCzlSG+ltqEuOEQ4TiiIIgmiMUT4LX51L9SnApUru7T2
+zHsMCQC1PUARTLIxInkUKdYX4oF07H+5AOsw1cMBBD2lzaZY1m3D9ZchVR+maNID
+TSzD0uUp8O9XRu3kKfn487hLOiukQtjIlYuvD2t/L/EcqYRzAojeqXXNq5MmYsXY
+ScrK/znmYZftUHXSyqyrINcyxNqjsZFRMdR21Gc2QwY2+Ks+MlPy+O90ze6hkGHe
+/U2zcmYlvjBFBKp7X25d94Fe+XbhL3sCHutJ8FiPSI06Dni4dXhUYRVnJocN+Hnb
+TpgRjItdSvUDEIPMr/XROBgmg8QHGuGS2N3lLsc=
+-----END CERTIFICATE-----
+
+
+EUS amd keyid 8a0578cf56146fea399af903fb5b0ac36eb2786a
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAtaLKSUISz4oPwAAAAAC1jANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDgyMDE3NTE1N1oXDTI1MDgyMDE3NTE1N1owQTE/MD0GA1UEAxM2RVVT
+LUFNRC1LRVlJRC04QTA1NzhDRjU2MTQ2RkVBMzk5QUY5MDNGQjVCMEFDMzZFQjI3
+ODZBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA7k1klA4MZ/n+7nnt
+92OcGw1HKBE+nkobS8wlgO6ambMFwAOmUzqR+tEWgHG3ghFs9suBkhqp9QwoXCVg
+T1LQTytyWBZmn9KxJsO5dIgFKn/bWvrsKz8gHCKQPLHhbJE/bDAKcJvH5harM413
+k8H5RYcm2rgxHRm0I2eAVFfEFRsS/iZ0vsA09Wh5SJ4Gh/qe0fmHFu08RbbRdQEa
+qfTieazOLJdYDPiTMQpUoyAYEwi+dJCDgy1LcdQeRfiOW46pNoh43F0+DRft28He
+0AyV7jh8owagGVs9cyE5A9FpZe9lZ8DMEQxTvC9y+cgVwL9BetN0idSl+XA4ZNd8
+q0rlNPXSXWPUJVnfhgVO2e+55DFiOEUZvHKThUdIpwilL/1Q0lZ11Wsfj3nedtYx
+P8zHGedLRV54XVmFP39nBKvuokzMPY130cpAlM3vaRXnMNjLbWUcteXANuWVDEAG
+yKp3AN6Dn8IjO3okgGFVtWAOqRUNrzjFwttLjGq8xfv0DYNT/9DPaT5A4cV+HOer
+HLnOwL63lBRwGCWtpa4aBKw3FAti5qUEl0eMY2xygSN3hgvUvP5u/v2NTxVcAQL/
+AOmzTJDZWyaipqAn75mmoGs3csYSF3psXpsInFADrJK3D/w7cdaMFwlkpHNWuK7y
+CXRaXDqWAjIKQKsuWc0gBA5fm9UCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJoeUEIVxj7ZnWb1
+4IUGABcQwHfCMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAabY9u+d0nd7e5YukBSwxdDX1wLBXOW32jbroJ4HfOOKs
+ZIjIZZy3UKdcJgeZ6cElCTlme6IfmB4vcpzMXXrY/Uvnj4wNiyY6sqCvK1lINZ8u
+lTGe9MLawJU1iEC4Ws5N7P9aEjwQslGjaZcqMNpG9DLA7U+BilJO5CLhoNOIMB3F
+a39nuA2WME+rlgSDhdwRnctsO9mYX1Z6ugo/bOC3mfbpRkfa4DFX6nOgxKr4/AVq
+wNRKSPpA4/kMefqg6UPfs360dNza6zVJ30eGI4AgTrPi0dLJ+Sd5hDGkc/bHRIvs
+FCSRDvPosd89V3euq2dqza6HOnBJsrJ+RsqSEIdl7zAmVa52WGFMhq/Ik0n0mgT8
+VfwYzQyawxTfXTGaYaSu/2lUNhFzr4hHem1xDjq0U587exoSpBRCvFQmmN+rRWsP
+AiSFBB3ApgdKpqNT4b6MbB6zqxaF5DpKxzld9Num9NoPqzPUAnMxqA0JDmO6lo5b
+gnpy1d6bz5k5lpgZK2PXo3zfbu12tSYFwPVzDCQj6rjl8CHKUZYFrN7F6FdQym62
+dzMBGNA6va/FSXb0QOzjsCS0CETMI1uQ8r0Q3rORRc3M0AEEMndH6NuudLgTxnfH
+OuNC6WoZ8hla/xIc9HFkI0QVbkTyHKmYYvN14RU7dML5owcqJ63segyzrPiE7nQ=
+-----END CERTIFICATE-----
+
+
+EUS amd keyid 90e007e175574201a7a8dac93b323114a887e1e8
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAtcCz/QGTnSE8AAAAAAC1zANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDgyMDE3NTE1OFoXDTI1MDgyMDE3NTE1OFowQTE/MD0GA1UEAxM2RVVT
+LUFNRC1LRVlJRC05MEUwMDdFMTc1NTc0MjAxQTdBOERBQzkzQjMyMzExNEE4ODdF
+MUU4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAoyLPbYhW5DvSSW6T
+Plq7LwaUrsss8fFToRX4z/HFNsHbSFsUsdDb5B4JqVqD8zsOQ6hXTurmEJNqEDwm
+3Whz4Tk6MLE0AyPbHW7Ip4XwGm00jGYOTyT67uZdIRhUvjnMKtf3VjQMoBBbjzGm
+f+uNlwLF6Ugiam0j4/strPkDHygOXVcCUUqbsnvgxkFKzbcTYXdn2WjYAFsfn/td
+FpXMvfn+zsQae2yLz0pZPYHe20FSsEZQ+9u0UeokK0qUe2hcJY7S/oCyNLUB8oO/
+HlVWXmtzT0Oh8n2L8dwRyYhI0aAbl+AVgTNaECsswpnDA4zeHvVbuSYdIFdBBt/z
+7VKC7WROncrFTgpnzVcTaEIyGMsL2EbCtMA3QZsM5xKKU7TjmHRH8OzAtQBPx4Rh
+7GiiCymXOUmTpkn2fcp2oLUwuETUKOJfD+5eB6LKNe23qimaMtj3JfOLs4i9wDWk
+YdeX7Evh+NdI5Ue30hQ7XpNTzLob+Lwcae5Jb3waSYrqds4QTAqDC7DpRBhyhce7
+QWWUd0J9PLPvHp3kkjLnrIFGghR8jkGDXxAcmStqKZ7WeaHIDgoMbZ5IED7B36NT
+H+eUsUY0gEc6yLPNbZjQChuj2ynrsvALsGkLF7guKA6ljTKt73byoBvb63EjVGGi
+ijMVDaX9wKJBv8Pf3NkfCxuTw5MCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFC3YMEWa1fk11Iqx
+vj3WKg3FHoT2MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAeBI2vynf5Cyl75z4oTo75Ap7zB8PelfQRSzUqImFqoek
+jTD4YSCiTCqpe+brL2GTLN1jMGldG1w/jqxQQAQwFdvFR21xyXewft1SgEtbKJMT
+saclbTy0CwOttxGgNyT5KOMrHR4/wIPLILEZRjLm/f2maaHoGJ+8P8VLePhAUXVj
+OIqiBRJsMnrsicHnwWcBY1u/7gKSoy/f3w7EkEfyAccc7/R+Sv2hPPI1Bt1dgw1f
+R1kG2u2+fHDKvMa48/+OUkTLtv2jtjzhMySTI615cvjSehj2wbDiofx1zkWhdErc
+riasg1VHR8jYrgWbRrHzbC3oruyHnutW6OafaqTOW61mLJBeDgtfCyt3muuFRtrx
+tI2+XwkqrcX2AMg+CxHA1hg2BXIeI+VNTs4Ef0jm9BmrPWv9NMzPYDuDJHnKtDx7
+PH7vrO/xphVqLHp2ZeNKcjt90zXZcm6IQvoNu8Q2k7S25odIzgARih+B0tySAIt6
+QPRKKKqJanDTIi2e59OAUPgz5BSJRw3VQqtYGGuF0ip+ghX6xxBbVc4gGd3CIj3h
+psSJuG7nr0AUIR3HzyAn/HYD6eTZDQRtXdtr45bikgjnbCyziB23riCw75rSWUxs
+lh3Xhea6+uoIE1mY16F62A78L/bwJ6/qo1UJbJDD6ypmnS3Y8r1VeB05V0cVZdE=
+-----END CERTIFICATE-----
+
+
+EUS ifx keyid 0d9969519b979d32ee4b803165664e9cc86f9d0d
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAYwbZZZqZBtxPwAAAAABjDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIwNzIxMTcwOVoXDTI0MTIwNzIxMTcwOVowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC0wRDk5Njk1MTlCOTc5RDMyRUU0QjgwMzE2NTY2NEU5Q0M4NkY5
+RDBEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA62tT6AspodVmCSzv
+7aqoNJwNHka/5GqT4pRG02t4+XMZhqIkk7955kJxrfUOc2Fsls3//YTc8k5T1P/e
+iQiJtpk80a++712DuY8oqDwOqNbOk3b+Ur7krIJ1L0koaVi7JQ67gI4jWFlPLvsf
+m3Lt7RluHGmHC9ZYja0SGdTK3q8C6W7NgTC5xe2YT+3c5GxsX8bb9H121MUWXPhJ
+eXUo5Tef99xrLAvHCh323JLl8xxUNeSWGLN5BAByYwvM8HFTAIdEQjRblK8H1ex3
+M+9dHlfWchI5Xys9ka5cNKbEvz4UIphdspS189pibSWZZqSMGF5mTN10DBM3x4jt
+RrZMS48ceUoBGcE/JHW4rd/VBHyHw1njPAP9r10W9aSIFNRHYGWAfdKpdj+kYfr5
+Bk+SP2mrhmq9RyYw416IguARDrcrzixiIT0rIiiUkq1ek3QGQh0fA3UFzeObbaTV
+5bhhAwQIDx62IYdHsN2KUeANQluWSd2IFisTjPBh5EyVGU1YXaU28Z80orcMZ4ZU
+IF97AJrbGxWEd7o+Swtx8ppDW9PMwgm7UiufzYEdyYkmYH0JNCXrCkXq7So0/rKG
+Lflmm3C946DU7/1DHD423SoRolfKwK5ZqWFMQU8waibqUADXpmeiKTI7560kYwrV
+ge4zlh9Nl1Tyhw9w9EuPp0d/vxcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEtri//YB16uNi2X
+BdMtdhwUNb9lMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEARDqTkzRKXBx9ZH8kiGEJjLYdUhn8Bnh/rPblK8Q7Ku9R
+3IYUtNvs6H7uumQdtCwswUL9LZ1YRaI+SbPNWDry50psx4mBFo7gMunrJqxcMdQz
+dyitGXKbGIJ2rTKUrhJ4NL5k+mtAGCFznWwfezhdHLGOd6y3uxRwAEvcj0YuuwqC
+UoBjPdScrf5L/ijdqpSYngSL3B+kFn98vo5RDh1kDTVIB1Q75HKG+e2sNxlH2Hnw
+4tstqT8OeBRVZaDqMBB8YCneEwPBWoaXz8LmFJZZ4KaS3qoFaGBydHoaN6vCRQb3
+iu+b4m0ZqkETJBAQdEGZXsvDq1UPwDdCQqKZqjWDGODzkKhIfdccCeTpfOKlkH3x
+hVe6fEmVd20686//lhUm5fH4MF2UGPIDvd0eOZ5ewZK0Q1XpEyksCReBap3Whvgd
+wITvlPLFq2cJGp/rypO0QEstNGIwc7Vk8vSatWGqokcH3TQiuLrTcTyaAG/p6RzG
+Mi/FDz7itpg0WjIHjZBq2GQGhqISfVPBUXG3x2aaLw5669vCQ6/LnyFeoYo6Y0v5
+xxzMHZ8DOw4hPIPVSMbWcal3j14JhD9pfjj8rDsFwlkIcU6NEhMKqnzeujUJqpLu
+B96jY6GTlAg8+cU08nooFk35VldTnpSHqHI+UlSQq4j6Y96LwCcb7ZWpPC7ukjY=
+-----END CERTIFICATE-----
+
+
+EUS ifx keyid 18b1af70b93f991972f362556a9a3fbf4bb24e0d
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAZvWko6fkkAwtgAAAAABmzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIyMDIxNDkxNloXDTI0MTIyMDIxNDkxNlowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC0xOEIxQUY3MEI5M0Y5OTE5NzJGMzYyNTU2QTlBM0ZCRjRCQjI0
+RTBEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArp8J/R1qO3DQx8Fq
+Sqteql286drxo2MNLXh4ukWxAkmdvtGjghUcajeQBP+3X21kfm3qpwPMao1agp2G
+b8lDLla6DQQXQ31JwV6DP+sij1UjE8WadNwKIQfnWsmjnvSIrV7kgAGiNGlkEjhT
+VaJQVEMRMQIB0E/h9vZ6l1asd+YQpodFQHJBoIT6cHT5V5erZyWbMdRC1RrL+HUg
+aIL5OJjRAdmTyIATNxwJL8fA4aPOjh8Kjf3f+XA3birPWT0vlSAiRKSErwJNafQc
+jTI10ybS+gsaGw4fHnDP0mYxUtWT3eDsIOf1JB2MFITlAThzyvDJQgW8IIu06+C9
+8eUA5ePNDyS1w3qML+cyzxTu/OWLuYxoniBSywTj6CTn7YYyFxhZvYQdwQoG+Qdu
+XlwJI5tyGEnmSidI4A3Dr0Uuk1sobakX9TyPVLcDE2dLr3pYYShw3wHMvpSczqOg
+hn93afQXouYyXGm9eQKxihYVhsVQWE8Gv8Dxwi7ugebdoW/yCB8/CpYJZ6aIzD0F
+X2WMEnHR8aibLj7nvCiGQVnkiVm8HiKPwgXMd1bmUUrvuCFakpiL1c4XFKcwZsq6
+JJPKg1eatGqHx4c4QSanKgXiSKku0+Vhpd6pm79sXRZ78TToWYqvSn5dAuKApj4d
+xzgIb5NsgX+d3Z5R9mnLcKnotpECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPtSHZIO1Fg4YQd3
+Lk+KaQJnp9wZMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAjUfwiUMX6Kx9ZXhInn0OycphJl6wLlpQVG2Kw3mKnzXv
+LzTTi33QWSytFVPeSTe4g2lDQEIuNc1HRlGHJH5QWSwI3+zTo5Le7ThqbH/mQSIf
+X5icJrGjA5XdW6KPIDJ1P74MTs4VPppFqsuWE2GoIB+O+wOq7Jz1rtZJOLwxFmSI
+Pg2Is26S72KBWYol73tIYX0QYx8vfZBsnChFowe2GhaM8IcHDG7UnCE3qbDUzk3h
+kRp2S3StFx735kz+vxCLX5UZDRvfnsg/ZQFm5tNaL3FjBze2M1ct6KPFrHx7AUvB
+W0inq0bAPDrfKg8AoeTC4mjRaxNBzTnE6UmAB9i2C9wvn3OlFkNmjM9zhEm3lU2k
+BHMsOo31qEIP5O8zItFF1drhF8JbGJ6PBsrxR6LfX0s+GaijVydLD3wO+IQV0SHP
+JBHDILeYG4mVywVEzJfwZAWD0RFTle7QR0EErwIj5ujHbTKo8tHOV3BKzXXHdB71
+zMFrZ0pJn6LaBuLnMP6nYYesVboo4ivbnMo85cf496akzl2A70TQyfUksvk/FaVC
+AaTzUo9Zenx11xKdlhC9+xEhpIaEOs2z6TeuaPiJh6StlsJTxcjnWDL0bHojvhOM
+otORmR2DuAc8FBopnQlnDZ33OZIXT9q9TU6HfKHTYnbxN/vVfPcGzY70aJrW2bI=
+-----END CERTIFICATE-----
+
+
+EUS ifx keyid 263b744d85412bae6e13e94a53c235185ba4eeec 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAejj+BtOWd/TawAAAAAB6DANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAyNloXDTI1MDIwNjIxMzAyNlowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC0yNjNCNzQ0RDg1NDEyQkFFNkUxM0U5NEE1M0MyMzUxODVCQTRF
+RUVDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApSGRwEfDv7B2XNpr
+oYXTLtGo9gwBB64w8Qwyaqjlj1ZkwJ9uFzYXYVptB60WezzkTbnn8WTEyCt2nrT+
+R+allzCg6SUfCd5YOjVPA7EcEarI3G7Sq2u1+r5uuNLgJeXYeZ1tSr9t3bpQFzvJ
+8JoiMdXXMERw1/RKjEzNWdp8mJ7iZL66NDcEibRUx9CI+QVbcOqam0iJ6FvyxS2g
+jw9iIFPscmWJhGTeF1UxupIVxkCyCXizAdjkhKoCcMTs4xa8FMrxoz0F0/5aFxz2
+/Z9po5b9lZCsOX4mQ8qRDz2dmdJQBwdppwhR+Fo25cCMW6nq+ZwpILcWNKiEyrSD
+51OmS7vNed+RAOqkkkzHdMHYV9gj35iCXhVXWhoAuHUHOW5wslGGGLvbHiJMjjnT
+r9iCeKr5+UMDkKE7XKQ1P6GBXBQJq9QG0LDlez35XOc/IO8hE4/4huG8H90Jw4bi
+PouCGDLwEhdkIjpah8YkIBX6AtG5uvgwWVGtw1yA0Q3UJ02y6GtxdpeW45iAbuIm
+Hnj713zNXpxCqiTMv2XMzG1H/76JgK536kfaj0S0E+qD9s8hRJm3HEBQKNmy8MSU
+ykTv00ye1hnwT2MvRRz0OYrtFWW9zkohZXyW5CohwovSHzo4NPQjt8nDsyzjDnjR
+NT6LkwHynZ5+1l3KuGN2OIoAmEkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFM1aJUVst+5OqPK3
+t3hOBjX62CBWMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAndRMUg81zae49Mliv5NW+zBoU2LEZPz1qzek5ihf+xR8
+EtyIeqOR9X4daukMUkjiRTAVCGkAxEOqKeZdaU7fp9jJgc2wexw0ol5Zrwe8pbRd
+jk9Eos0UJMEthGjhssjZNUZJYxj1Nojf0wafCIABK6JlrTAxRbGzAWaI5s2pwVGK
+EAYpCv56mt1hHRBB2cIlw6TGw1aOjXdoiITkZbcidzCCWIXcyDw+ru/TxWU8I/CO
+QV1Gs4K/bONXuc9Hs4Skyuqe4po7/+5g53Cwwj60Eb1gzhnM+x3aXb3UdzkxQZ2o
+vS/qjKN36a0Pf/PQ/cfIhMHD734fUy5hEME9EwllTIydigz4AzP4koAiWwGwZDzd
+Er/ykp+0FPHpXLtf+mwoN49kSv+QtsURmnoZ/I89JUNruGxrUKMTJRVspzVeqfyE
+IBEzYndYhMXE9kGuA57gKW/W2/1z2RQvaUYx9BT9v99SCCvEzfMjeEXm/0PrGtqe
+OaCwTIGqBlLwsXns7D3/z/4SrxG4cuJYLwKQBBuf6sX8Rsk2KEOKrNOnfxThn4hi
+R/Rt08vNQz0VvGTmpWDZJZj27l4u3JM3Y1u9nc9zch0JmsQdHcnf5hmgfZT8pJP2
+pVvcrzNfejR6w8B/WyfcecATuOXTKrEGqwCE2i+L+5mQde1z7hMQsG+Fd2Gpkwo=
+-----END CERTIFICATE-----
+
+
+EUS ifx keyid 29fe69630e853a4cd3575f84392a9bed2d7e8ca2 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAeUYOXPv9WpipQAAAAAB5TANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAyM1oXDTI1MDIwNjIxMzAyM1owQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC0yOUZFNjk2MzBFODUzQTRDRDM1NzVGODQzOTJBOUJFRDJEN0U4
+Q0EyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAskajnggLuj8fiZrp
+Y6pVF4MIu91lDK5psn25/m8ip0UQ3PWRC6R4ttrjnw0f9vIfirUkaxsSUAYuFmME
+D91XvtHouj0oCn+CZmogVKkt788XqjxJmm0VlZvcf9nqOB1BHP4Qp5G2JhFImsAF
+iMpvgZIfLdacxNKFEG2/eWIC70VZmPvmG1XDNqwyoS3a2SdHrpp/d2QCOLYVK0LV
+Y7FHA+auetAG4YgDMSqDc+VstTvQmbyv0cderD14+6SRkp0xYI9HioBnpZKyEYma
+tc1DjktWjmKmpBYYiAzBaG6dUgWMU80rWcVnG+1XPfPnPMoJwA6qbz+wJ8HmBQCP
+5s2gTW+IYu8ssutgr7Wd2Oi0NK9KuSy/FuUmIgR35gPbOL/QRV05d2NvU1u5t2pa
+LddecFXJGnfoUGzbvRtT9mX2e3X855ngw//yKmywUFLdbjJ5sff8uZTrGkk3K7DU
+/CTyCN7t72YdRASLd/ueZSVdUgA0BCDTL1DCaPY/vL9NIaRwcFqqmURlkx9gKfg5
+IzA2EwlNAeSrzgQCGMPK/pvKfkNWD3PGg+rVy+0igzPM64reLZd0Xaq890vaC+7D
+jC1Y9fPsx+4RXw2+K2FAPT/PKLxWxTSfJczJEFmcnoOyuCdbR/VwLS12CT3GVELe
+G1SYgNdCBk1/lNmW9mS8PxIzL2ECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNTnaDzWF5JY8vWL
+KP7TQ1BLJQB+MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAFXJhPPu7LLO2prsW9uJwP7s4rHlIMaBokzsKLAXE2loW
+8vHyEJv2MW+ahwNbw6krvn7PXGFptt3MizJKqaz7xbqjeFMpNFao55F3sLciJ2VM
+q/NX2sslGcCXcCHmUB+1rO2ZzUun6wGq+qfUXcctKtEvgvz7aBJOjWtJ3NrLxXsQ
+d7anBzUPk4nqPAaCXQKjtvxCxiYsaOFSyyCBQ2XQNzSCvD0a32CwTRkF/Rr1viZM
+sz1uhAtnca/U9DHtfDXek1AgVDcG7/BiVCrJVFdOrAP+sYJ2tiRVoOWKySygymQW
+nHWxDcd/sM2htRTDuj1HOx+1+oi+f5YdBVMrJWS2pCuhGpaF5xX0jQKedZTsSOPf
+7c9yKB3Dc/yJk74iTLUAcEW5srGUnlfUK3O+NeBpaVeR3xi40epqYK4SDX8tp/VI
+tr2Khlw3aAVALuifY/y/KTmUYaPYUZ+wvyZwdTRmSYFR5wGu0IvHX+J3hlbg8KyO
+V15rdvUpaHjKAgQ/xrn2kE/o0qN/wuutCBhjhxLX6LRPKeC7ZWQ0LG/dMZxFXiGH
+PG3ElDIhH9BS88sQnLRn0wxN/IhClnYS8NJj4QPS5HcIxqt6EV538cS699+kBbwn
+pRJBWSrgVMd9rxRblc5Wku5HG0aBDB/ocm7LKD9N51m2P8CMp4tQByYr95/1nV8=
+-----END CERTIFICATE-----
+
+
+EUS ifx keyid 2a77a0e342cbc6c72ee3fafc3b0a7bcea7c9ce4e
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAZjWCbvU2YLDUgAAAAABmDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIyMDIxNDkxNFoXDTI0MTIyMDIxNDkxNFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC0yQTc3QTBFMzQyQ0JDNkM3MkVFM0ZBRkMzQjBBN0JDRUE3QzlD
+RTRFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAoqOgGv6ANGBIj2nG
+FIYQz62A1oAYP9UvKI6ckGV/n1MVjuKk0cHYhUUwfLWrhMu3tq1fFA6MP5RHym+r
+Ywj0GN2x2RxDCBQ18YdZf79sbd9u69xlsmBXXVjClYTJIlR4JuN76TqEYniXv2UF
+SdDU8roPjzMYadlP+VG4Tcot6D9eJ+6SbwR10g/Ka4wIqcZl3w4YEPYuvyzM85sk
+0xz9zIZv4lRa6E1z/w+/Q5RfB6GauuhSqza32ypQfD0xQFCjYBDPTgDJcaN6kzwJ
+6z298K4uasJ8P0VLxpTAQHM//cDbZmCJ2DQRQQjqc/jJSkj81bpPhaeRqGF5MoCI
+bqdH3cOi3GPI7n5lXtI9Z/4tHt7bq8ld4l9SNFudPRrAd5e/f3N3PXK0iCybKRgC
+dgp3Oxv8eiH4smh17SBLPVk4LALhoCie3E6F1WqRlfCpp51vQSwvVhI8nTlz9my9
+L1Nv8l3WHJfWvhHWhx17uLF/NSrQRoJCrjpgjJAYairSg7qkLCqCwIuoNhGQHqou
+dJIvCqyvyDFj76Plt9aNS2uYw63fjoaJxnNWwm8gEB5i/BC2mxhs54vO832ZeXHJ
+ArhWFe1nb+w0+LogUYxlWOVxeCqleGrhGTxlVGUVc/6CFqFdosaunNblq8aMo4AE
+Gji6XjY+gfdo4FdLKUUDEGT4f0sCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFM/rLqmwlelaSa3y
+9PElVbJqYA/uMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAnUZ+o/c0u9eJ26Ry02ttoYaOa3K6+jVlTIAmL8TJAyUm
+M/7fvcewXD8+qB+goQtvv402xt1EZUGYzkHWHUG4qCveo+mtKVjUoUm69T/6ao17
+iMLoSLEb587NuipAQCgbGEaUSZoVpAcvNaFoR3pYWVrCpfGCxR58xpV3wVYtfcmN
+xWTVCtDJ6rDzd/+byx1atZ9ugR5O7R7ywktBfpBUe/GQFUXqqLF7GJP2eghLbt1Z
+Ls8PxyZzHy2lsi8UugNlGnHJRvZN9ghw42cNlE81QGyBg1+C3+rdaEVQSf1mey9v
+d3WMn5r6Tx+s625AdStTGa7PdnQUU+UGgncVh/U9aQ7Tv5DpjlHsUHjlu4yb+eX3
+/A7i6XUUwbC66y3Km+fTxqq24xHRJnhyjcWXiyCrJ/wnx1WXHed13W7VT+Yk/Qzx
+xXY+Ch7OkeUefd1wamixvTcoAlnaGlDsDsg/QdmY2yWeApHCBxk5QGo2cE9lIHs8
+7W6htWoh61U6C01FnvA0YxY30bhmzUfd3XY1LIqWjEOBFvvxvDPBcb6wRgXi+kMF
+TnDOWnAkJCZ3d8g7QuD0p2DYsnitLOTMkbB4LkLFX6gXAwLo49v3mqkAvbtr2DsL
+sjJzbgNCY5/BSxVee0FgCfaS5oqPU/2qR58lfBqFIwa53a13KF8nTGMR3naxzfg=
+-----END CERTIFICATE-----
+
+
+EUS ifx keyid 2f572bbadec4d18e0d91ff4375fb468c61b8c7af
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAZljuiAslaNNEAAAAAABmTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIyMDIxNDkxNVoXDTI0MTIyMDIxNDkxNVowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC0yRjU3MkJCQURFQzREMThFMEQ5MUZGNDM3NUZCNDY4QzYxQjhD
+N0FGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxv1mlg1wFzSrNPbb
+q9D9Z0X4cyOC9H9sYqtLtHyRuC+03DWuORKiL5wGajdJp+mv2Ym9euehEzZ7NS2P
+0QY8jImRD+yRM3Qv2NfrUgQPDiGKQ08vjEpJgQBeQ0qR+7YHUDGf8ZfFCm2dA1Bq
+T23I2E1o/YkLQTWWF4RMeUW7fWGzrF81n60x8NoG/ZByrxflu6R+rIsEAESfMh7O
+fHqFQn9huokrIzOp+BnFCEAT1FzXPqrQltgs4dV0OiQQv86EJ0M6lTGEbCJeakDx
++FRYaqCzmklwqp7VomKRk23aSIb8IuifylrDqBWL8dzUZaXUHcAhowqGDkOF+FF6
+bEfe3Xo88aBoyTFK6yKnx2Ik/sdzMwHByqRpIEGJONnAWCBx02O8qTrJ7gUdknp2
+aFBBCYX/hYM5nyDjeGqHUq5RtPjL6YZ+ydStK3n3uXXy0hXUN/Fo31lK3Yz3eNN2
+hSaI2nV2vF2XOJMTtxpUDXXdpFEOsCW8Z07SNhqYxDiM2Yn7jdipN2e5r8UdBeQi
+oBfMnUJQKdVASpqYeeKies3T5n2aB+0ciwH0uLtcW+3OT6nHTN1pLbeKiuG5cHB7
+QM9VzwaCGw7y3rnEbXHeo14v4Rc6FSJAhM/8llnAReGYFPiVhm77KRrlt4G7GnWE
+9Jb1n7pH8iM3PlgAxlroCHFlhd8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDc21KrYy23xx5TT
+9kLHEfUkKFo5MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAdQU7R9DTOJE77F+jRl9vjeFwu1HOqeo9OeMoJY1/Ag66
+gsg8cCr+6crmcVrwtoHw4bCeE/CIVkRh0XrzNoDnn1XXKY2AuwG3vN0FuxofHwi6
+vHYvEhoypgsWgwxG+5mFXjXcVMaAoHD8oySLvYmIXBNR3AGywCvG4sK0d4mb1c4V
+0Ey+ySoPpyeYP/s6QRSRAaN9rb/T/YkTaqRzGnMYMfq0WQzy+0hLS8jvceR/FcsK
+Rd8wBuKc9IdH/aeqDtWDdfGygXKZ5AQavYFh/wU2dj0JKY9ab9JeDGuOIpjo88Oj
+ciArzx8V/7XJpxWxLkc7uD6v9nfiHgqqFyqQEvhka2bztZoRUcnGCUr9SBFB5bQE
+6F+IxNTGFKBzrQ+E9LkSOEzbZyvc6clL2VW+kC1l/FTb2B4zpy0OwH4mOoW7rs8G
+XEQkk7hCAwiLtLa/bTsyoDBzJaMkmFN10TySwrLejwp22UQgFeMfvOJ/GAlRd1lJ
+DuPQT21hCgoo03En2wr/X6ZGcBGa2AocOpcg19Sqv9v4c94iwZlxF32ZVis71RW0
+3vZ2TC0ZtNjp4zlXyA7pTvjYHjuTsdwPzcZAVA41Adng7aocDvsU+P8Clt/BAmGT
++HwSmbA+cdr8WhJPzJ2wZwge3RczaaZA6FBvi13QCGdQghgZMtqEI4HMT29UwPc=
+-----END CERTIFICATE-----
+
+
+EUS ifx keyid 347c93cabded6168c61fdc8740a7353e46751616
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAZzE3FQDQjGTbwAAAAABnDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIyMDIxNDkxN1oXDTI0MTIyMDIxNDkxN1owQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC0zNDdDOTNDQUJERUQ2MTY4QzYxRkRDODc0MEE3MzUzRTQ2NzUx
+NjE2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnc29Yr6ewQjYTeHU
+KHSBe/wiN4KJgC4heMHUx8mOVofuCIOcUhVDN7UDoz5bx7oKpnxCsi6aEdIVP8Y1
+NKI2h8y8jp6X8GXvB8Q3BBdyFmwYwxU6GRAzBcwMk7lWSx2MI50q2MwMvf70l+6M
+T9E7UDMcJVIZAbrhA0iGJ7dcg9cXAcUwgQ57FlOx3RGNhx5Z0haD/kj05zdXoKLg
+0AvuLEVsoEbDfzYNEFuyQHf3oGoLRqMr/YedVQWqQUtGqvEL/x5snOc3Ai+3OoEq
+ep3uNpavnOTc8IoYmPAN8kbUSz8t+zj7Hzq6MtVu700vMquOZZLg/MXvQRdwt7hN
+wRGaHPB4iEh7dd7tOdo3vaLjA0MGxtp7sh2TAknGPm7bYBIP8WCqIYiLmGC9R4iL
+uAwGqoob1eAL/IS4qCFbRasKpOINs8orAXQOqbY1zAg5D4DaJI/J1ewh+ExADQ2E
+0nsck7Z7TJj7Sd4uLxffQbHgyyfh7GFl/K6PW2zHiEYEXv9HTMrAAAy8hFIcYCao
+rYx0pagozoYRH+0PpP8Lo3YUeZ8Azh3XH/dKSTOzjnpa2hl3I8fqxiRkg6qT17CR
+fxJXBF61Rm/xMdlhn4LS06RMJRnugLWIR72FKst5CzQuOMOZ9yn8CQ0m6GsrG1Az
+sWok+JnwszW5wdolA7uw7z9aTXMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFBPVWlbN8iEzPSFc
+0j/+om356sm4MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEABHsIT2dX7uiwCjDRnRPz/vZfluGSGnYFXTnvGMe3NNMw
+ZCL/aonhapQqw/bFxTA2DZJyGjP+/wGgTWiLRx5Ahzbx8+46Rr/9hLwfDVcJNU1t
+cAtLUcO33gICuAeEma+ll+js5t2ur5hAqAuk/1l1YBuD8/EsK4cTij/McLQ4ou15
+F7W/0wU8wiBUe9lrOFaR1TYO98Q/hnxpanwcyMz8QnnAL3i9hJqHKDqnKHHY4vIR
+mhID8emHp0CK/Vogrb8HWZAO8vU+0gImf835OtMNrSJM7RjmL37V0Sgf94gYFIsE
+PXYvwHOlvTobUWu50xDMl+T+JoTeaN7lKWXo9zJJWs2Dn5Cxopn2CVnHkQjcu8kQ
+74L+vx4Jrl3arpaFBX3O3tM8OSrfkY/jlnDaKEnSaI7vygar20awcNIet9cy1kYH
+0V70mSdAE40kWiSyxuEQftgc2PopKJVUjZfYjbBFBJclZ6W/AUM+voXCwM/AB/xS
+PUXBpo6Y5pM74WKPf1nZK7SleGXiYyZgGnlwWTt2uPTLY4+tHY2ylms3jjCOrYRs
+IzbRa57XLW3SARzCUdEr6fAH3/W/Jc3YVat38sVvkQXuc8TAB6T7QQH0utKPPbeD
+ZGbkyt0N1vnxXu2q0pJzyojbtVSHj8M2rwwYK17u5ELYmBt7I7zZfgclI3JoKNs=
+-----END CERTIFICATE-----
+
+
+EUS ifx keyid 37ae346baa54c513cff0290bb321a22a34a4a8c4
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAYGJIvhGas10mQAAAAABgTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MDkyMDIwMDk1NFoXDTI0MDkyMDIwMDk1NFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC0zN0FFMzQ2QkFBNTRDNTEzQ0ZGMDI5MEJCMzIxQTIyQTM0QTRB
+OEM0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqIal0K5MaeUAE2aK
+0mSzLmLeEFRKc8JfmYi8YzWtNHZbCVdAV/ec0rDg1i6cKB2ONgQ1lEuHsqEzh8sa
+Ejdj+gTABJRoAEweOXVXyCzDyJcjkXSi4VnJ9p0nk12An5EO+xIkrDzQKI2fWQ+P
+dot4m7eCo1MClN/r7uHh8XP/EQtjMLAkyk6tnhvGX7CBkoq9MukPcpd9MjmwtAaG
+kQ08JIpkTblajRx/VAFdE2xT0JZq8Q6VDsG5dO0FRAajOVY8LujyuQSrjcg/L4WM
+rHz7MJfOfUjWwDMSas0cUzxAfQIORVUf4T17thb2t/wWVNDxvpWkUvGGp59oNdY2
+9XhryZzYgyhkui/Hi1q83LEz2hb3Vi9pJ2lE4r04fHyRIioFVNT6CvKfPQTWvbNX
+cnFlZAg3j0HYC7lbDBhEFpb/WLHsrjRRz4Sf3qms/1jDSwhuNKAFg7T2wHu/sy4s
+2StXD6EkpLYRSgSHwxjdyaRldv7NCrqCW3gx8cE1sviT2S4TCLpPavkg68pgg8mS
+SYGXKo/v1dBq/hDbs19JlSAJy7MrgAzvyL3U/RzpiPEv7w1SNGcU8H/4tzW42e+J
+0gk4c73YCTG6jXDpl+XGzTr9DsjefIw+V1v+p+w4RhcX1e8pWYg1Sz0aBsOOXHo2
+Uy4wbqoKx3zsOy9NWP4R6zNvqrkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGhTrcDZxsjgTl8J
+19XWRrR0/PlSMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAFudveZB4eDO3imhTcehiHt2zar2jkzS3i1byHQte06gz
+sqpDbNdogo/7NsQA9btrUQ68WH6lRo2MoXpNVSCNji4DsHoudcwaACwQOYgCJ4ng
+rbU6ZHpJEZkWCp44S5nK9J5atyoNynzyy/8G8Lb7MwmpFyN+p5kOvb/qsibJ7Vui
+5P7ncEHzYhdHy99pfSlGkkJ+Tay73uuXAZ7lwC+LCzY1RdQM/8Pr4uwkkyYtXSGh
+24aLjxQgVzGb1rtcvw5oRHY3f8UBMRhaoqYC6zw4tbp1dWrPz/AYmxoHIWCuF/Sf
+EWvhzoRzu+6DZHaqtaOmqh8JG1sMLj9+cYihzW24GmeZFhduAN2gHp/0pkxZHN8H
+bTJWXrH5cb+HIvxP240gXADNFNiOqZnSeqoecuWoNS3WBc3JKixyC1G57lPtttQY
+xrV/dVwIQ1oyM0aeKtf8Q82sFq3VAmaOGjG7SCHkTYo9BhuNlcEDcsGK6/T0LUGl
+Sbkf3JcNpkbhnW6SxTzAlHv7MAlU4CBvxRWUGzD7ExADGTkEW/eZh2qomxw0gGZR
+9wA29xRu3ds/CBWOXLvHhFDIvRZkiiLUEO1Tstu8puCIwtcjJGlDZL95HmeB8sEQ
+FBlLNq4ph9nfX7EBrrF4LXyryGHK5pPiWcUK5X1favk4uwSCYCYZ8cBc0Q3b/SE=
+-----END CERTIFICATE-----
+
+
+EUS ifx keyid 37ae346baa54c513cff0290bb321a22a34a4a8c4 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAmA4J/S31Km5egAAAAACYDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjk0OFoXDTI1MDMyMTIwMjk0OFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC0zN0FFMzQ2QkFBNTRDNTEzQ0ZGMDI5MEJCMzIxQTIyQTM0QTRB
+OEM0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAn01zwYJ2lBnVbOJF
+tCaRbWMxD/8C40AWJc1qRQJV3dwVZQ4N3JxUF0uvmlMmgxszNjnXfX3L7saypNtY
+PNmDpdxa6DgRz+b1KjxUC0ANZ6UzXU47dgNey7E+to6lWRyDJC44bZf8re8K4S9X
+40ET13mynw0JKJL/YNNdwxp7vUhhiQJdpsGt1hBlffNtg1Pg+CES5fpxSvAJSVvn
+Vmj+807jGGhJYdrVSJzQX8My3sSCvpsbofP479sgab/7admkuPUfIke6wH6ZAAmi
+CEh3ARSj1wbFRdQQECb+eS88LcfycVaaySd+WQp87re/byBBmuLu9oidl4+YKjuj
+MCocGQjd75u5qqW0OMIqgq13A+Nd5+QKHoG/NVGHNfZfkiLS3/13hH3AbxyDb7vj
+X4Fgsd1zpH83BcyE1mq3Fe9hiHM0OzXITcNbiwXFYA02zY7CXWu+nVm8NkELrNv+
+R0CPNB0pqMNv0AaSQgiaWDpCc9ZNB4VcquqeLCd4OJDtYrRB+X9EA3N2eSUTsErd
+x6csO/99T7s+SlZpr5vVNw+e488f7mGD/gQXBbWQWZYtk55ymM3ChQsED5xK/DCJ
+ZYetKe+phiF17l1H9XQEO07vTrhRXbKdp2OTgnYZ1pTmjMIALMzg3LwhXrAuoy8I
+3xLQh22Bo10koraHkcJe3uAvtDECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOp3ludHKhBE8aK0
+vkuT5aIKcR3rMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEABW9FwOSh/WpTw6HE7MdEmGua08jDlQ/L8gb9Zn3L5EQP
+KHK89a1X7eC2t4mOkUhcK7rH5ES6J7o2K8AIvfQQi7kuJPphFQO+epxvNC9DrbsD
+bmGh0yWxvpkjSWxrfYu1cEdOJGFWIcFaiYq0mSAURSloj1Talf7y/14kacmw0q3n
+wkXQFPWEvowQfA71nN6H0GG6Tl7/DApj0qM8vki9+QnRt8kiB/p+cpuCgjLcIpQB
+SKWqoAIQBe/uKCBLQKVPvtXXtz2BY0DXzL25U0e1eDnTN4Kud6wHDyCvXBMNiV3j
+65YfWwqROuQ3bwUeQxoxCtNiUgfaW2uIcEnisljOk7s9mBtng80eOKLSggX3a//g
+RZwODqSoIJLWFHBfvJ1kqozJo9aPVGG5w+DngfjVwRxZU4TJt6Y58IR/KE/mAIuz
++57zyvEKiCiDbw5uYO4miACNGvEvoq+hYG4iI6gK/yvC4KahwFCi2Bl9rHpIurYh
++LEduqe04cxBk/PIbcViIfPrW7UbMk92aGJTRWEIeVN6T7mpbSLgW7OPHKR2/ZW0
+hHjhX9LLs4Zg/Al1B8REcRIdP9WCcllX90KIKOaEkrLbTT4ajuHhsbKFVKddc1An
+EVS0Q+Fl19FBrUuUDaUb86fXpQcsVMFXqcN1rjAHUrn60qq/nRbY/x4VESFz6JU=
+-----END CERTIFICATE-----
+
+
+EUS ifx keyid 40b8682b8d18450a2b06849d9b5cd96f4cddf4be 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAeczyC5YV0MCEAAAAAAB5zANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAyNVoXDTI1MDIwNjIxMzAyNVowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC00MEI4NjgyQjhEMTg0NTBBMkIwNjg0OUQ5QjVDRDk2RjRDRERG
+NEJFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzMxdjJ++Z91Zdvjl
+pW3Q19zKp6UZxiEEngSvoW1tHaWFfhGhM6cKZRpTjFPJ9HS669Bh27f9XKVgulDW
+sw/kZTOLBihJR17bItE1xTWT6i2oHVywnzduAsgZaVSkXYu7Zihj+LvIiSC0qxkU
+qASFVSVq9ytX0bgrMXFZELmVGwTCFGA+K2y+2lsvqw+bhTMy1qwzrcL9h1f8Onbp
+X4fBY1hvDXXxKTCqHMOE/phuo9KG3Np6Lz2+7kz/IVDndlolUKJdDUEVOhgV3rap
+UfmmTVhUkz55mS89w0dxZhcLd4ZSXTnIeagltSymnDEJTLUoOXV6BDyGuvxDP1Vo
+mmKKCdqGU3nRGP80PNzhavbj8UrOwlnEVyDkce9DOD+nIZ++387zNIsFTiykB4d6
+ZRxnesnf6fWLZ408KhpRDEE7cqHkVPfpwGXcnPlhBBg+Xzg1DjkNagCFpfRiy+Aj
++XQz5DvP9qQ81y5X3HrpA3NNcFQf3qyDfQDNgEXxuL5SRuL6l/TWoZ9vHyGhsR9u
+XdnVRI0Y5wy/uQCVB10kkrLtIouK79Qlf0fh6GNB7ayPWHBE0LSB28ipQRluOFWc
+PlKyPAGZOT8NsV0E4pbYP3nlX22Yr34Z18Pu4S07W11lfZQaZ9qluxnEKX2psAGz
+gWMcIwu/hs5uPziW2zSXHY9F1jECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGifELXJZTmOBoh3
+jt3Wgm7tWu3fMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAc7NGn9nTT6X1W2eueWtoSWHG1KoWwQ4apCI0S8iwTkP/
+S4q8B0+UoWjMcXTDBGypev1uyKXcQAF7DGmW06IXxqbZ2qJDDcrpgpdYCZyh8xqY
+D0IMZlT6CLcIRUH8VQHv4a0S9BB/o4gC5Hw9yyYzirZt8zGk7e+osMNr5z2xDIYv
+vmIaVDwMRYTix9vILBb5KPgUElWlEr0Zi/HVMLa3p7wAN6pBpAuVjDY4YiXyNcV1
+Rx6EdL9+KimiGcxFbiZYGFXH6vE+p1cceBebbOG9pj6QswQUcM4n7f7GIB52IaCL
+rn64v44jAXQ1gDSt0OFiyVowp6o3xsMxPoTYePllqzLRPf7x5S6bTyTtcrBsiSOx
+wf/T1BNlaQccaf2Acx/qDA8VIqWSNBOplW0Ywq1HmJu6ZFF6hTa2+c5h7Tu6ApqK
+obAyg+fMz2865vOfpVgD3c3VD6fRHC1CQSTW9ngF29MP/kNfrDfr9DsB5sECOPb9
+0fxGFltv/z0wlZi2XSn5HiH3FLMtUfMl2voyTQ/3fK7Q71a3+9VdZBWAUMnjCOk4
+nsffAehnq5+kl/gWlALlujSO4tcsGCvrkL9Aj4dGJ01VInXsfQu7nol3ICX5rT3f
+zt/km8zZbh6sITNjgzQebLF4JAlJzbbHSkvA/TPoxGwdiikfCiSYDFgJ894Xumg=
+-----END CERTIFICATE-----
+
+
+EUS ifx keyid 46f26f96330691e561b72f7a63dce3a0517039fb
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAY6CqJ3bPhxvggAAAAABjjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIwNzIxMTcxMVoXDTI0MTIwNzIxMTcxMVowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC00NkYyNkY5NjMzMDY5MUU1NjFCNzJGN0E2M0RDRTNBMDUxNzAz
+OUZCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAw2S1CFj7VYhlEfp6
+PsxfVAPMeCVe2osGNQqmUQBL16B9jEiwwmGL0zi0+B8cVZWde1ssiHqVkkzYMK82
+v/E5GR3v1/zUgNYHOwP6ouJ4BfzuttM1rui903z3XdZZU2Dy+gijd4e7yZLN9wot
+uQqeRnqj4ecCquFXsU4Xc+fzLMuLVVChDWZgTHXBejvyCOCFy/B7Enhk4Auiqc8H
+hQ8MVpQE7j/Y1dXu667LowDvjoS0HAZBm1LYtKw3O3EOLjHBrPa87xbnPA9KfUp8
+zC4eCZ24n6O4x5usi6BuXVXJRCTqyervAxslvjJF5bKxL7abfprnD7ELCDZY+Jhx
+jAZwjjDNXawsQmllBeFFxR0ru7PERLzLU0upYGiSp2x5oNMwHmDVpmTFwb99kig8
+9YNpA8/vKja+KkxolQl8YVhGnouwv52/q4QJbXsoD16EBxI4uhPa4OUlbjcRlyxi
+9JttUVWtoKcdOjs7hhaDis6yy5Wv2xxV937kmUxfoinjHL5g/5/2qRHuQpW3aek4
+//HZ6FsgSRm5bpty3vXnA9+N5ebPmMyFQtiQVcSXeEwBY+yxU81zAyk2uFcVoTJN
+J4tvvs3E33cfhPYch3SvXJvkKUDpXdj/NY4VBlIX11NKtMVHw0oyWG57YVOij55T
+2pa6M6afQ1ujz8BKDG/2xrCO+LECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFG/bAV6GUhuh06mV
+PuJs99Qtj7kuMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAfOXDZPbDR7wvJUpoTF4opB+YEy73NvItRaAfPCCIoQSI
+UQwVjXsnrQCqVcvGzMqvhdBYUbi/hgknvYP0ecfs76XY7J8Mfz1oHvvZA/XStOv1
+z8DpQdqqICFUWsiGizhvwMD4FZQWZAHsahZadz5wJ7W34DFzGkwxpEwYBdvGrgEz
+4nIxS9JQ7XWjtjlKrVP4UA9punECKX48Z3CWH19bvvgmSnfx1xssHDuKh/QVx6rS
+ytZoi1O6+FSj3QqsS1EyS0nNYgR4TKx2G4O+cPH/perQoFtDBL9cIMtcasrQbhTk
+SEc4pJvhCOQXV6BEt8zifjHZ+t2SvQWo8M8lUrOndWo+hLgl5wXgvFNJITCdSdaC
+ufVFjhqtAh8h70fAAkJxAM+D4NU+/kVBBUlqVk8kUeKMhQ61C9k9Dqu7jm9ZIQ9e
+pl7/LwV0VgrtCPWroRRswFPjss2ovJJtYKLXHzyLYQcDWy/CofjYmIvutdD4VXzW
+qJfF44+HpEUY4B8fL+GoOgfr7byuPciDkFzgLrCn/dceNRCDBd8w72zh6lXvsdmx
+V5BXcNHBXx+kzC/bXV/C34Ce0scCFwXEfWmP5EDptNGZHkTvrp4RcDbMTmW6xyGv
+0eq4nEah51S2nz1rtZwb8oZZu+JDF93nGcjla4PfH5uo0a6swSLp5jDL+x1GiX0=
+-----END CERTIFICATE-----
+
+
+EUS ifx keyid 5c2920742179bc704db1d8c54c34ca94405617ca 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAeMR8u59Iwo3zAAAAAAB4zANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAyMloXDTI1MDIwNjIxMzAyMlowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC01QzI5MjA3NDIxNzlCQzcwNERCMUQ4QzU0QzM0Q0E5NDQwNTYx
+N0NBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp1GZxEAQUOm+hN4s
+C5Orf/rJHYfj7zLgjD7x1iRTCbVMgBcLOMTSptr4LR+rUsG/3eqZVPU5VodDwcxW
+FdsuJlwCazhNQGKVU8XvtTe9Vdm6mNxmzLOykA2AvAymacw6teIg+3SVBPX5YWV3
+y49ReKf8G4mdBNXgT24t6u6BUQpKKQyA94IeMnmlj4Jf68put8gg3FaQ0WrJFS+Q
+dqM73QcZx+Ek+9EEe1xFd7w0RUjJdhB1z4PwoE1B2/yFujsZIujbaMkqPKt/C9hs
+nz3MTYnJCPajdkXi5L0evKRAwfceDBk0SqrSwZZcaNf9HfLx+DCDJaY/9MOz4sE/
+lmOs3FrHWHwIynjALQZ69cdonLxV8+3fBVlT0NBTzouKqMMkBm1SGgGNpgzrtbPu
+I8wWhNnWEVKF20u9V8Nqz+rWk0rWGwdP1ajnwn0K3YUWUWjP7jcJU4x63xg+E27k
+cShxMAztN7/zypoLarmMYsnupR5++J+GAt53krYyhBDO56oAlH/OEF5TOeYpHBRA
+ZrpEXfYrrD3jc3hUB08OmQYJnYinXXQ8JvwPPC70gW2gQmnpgaP5HEeA2mq5HI7f
+MIRsBcVbRU/cs/PqIn3fDhMi4XeDRl4k6vbiCN6hH4lu//1yfnVaijEhtIJ8Z5hn
+CSnqxFqzaY3okc09eW8qZUh8gF0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOTOt/LydYw5kX5S
+zHcwzr7BXwE6MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAjw4SqhhoEk3BmDLWg+cuBScNgNrK+YNQRNW3tRba70en
+QyCIEOVT9/EfXYe6Y9pbZYUE2GEICRprUuxQAFXMAa/MwJCW7+pxncSgf7TcZTBO
+r5K/0lk8XaAIo+wjZA2rKJciS0xYSXfqt/vtXYLyJrI8wY4MM/3PSXIWE9qXLZYL
+/+At+NfVv501yWG5jG9nao0LdkyznyTexi6dO2TPGm6urZEr6PHbKOEm7kjtq/DP
+47WPAX4JQn43x//Fay3rsh6HLgQ7hz6OCqekPQg9BKowJmL/UWJKNWjdRNGUQOmL
+qQqIjUlCM+IDp4Ja+h7X7KEYB8dV/PrJmHhZGCj/WVapS1lbjw6lBaQonuBiBs6f
+lQcuXKDNE9ltguLUCdrkwCujrL/vYNwGnh1BvqkeHEsmxpoTMBE43pQzcgFXiJ9A
+xZ0C4w5qCjq0ZISdKEIJxsJNDM3LVPcNa8yGwyra2Pu7L67Cy771UVx1xNyfjXo/
+3AnnQyoj3eV2IhDyOe72uZBWQfc6IexsUe++qet2ViJxqUAC4pg+1kdDdYxM0ZVd
+FCMigXFQRJUL8w3s3f50dVlVlkkEH5oidrmPDRYM2RoMog0B/nlmyoRPDeXDP8SA
+oiLnx17RG7DQLk2HkUEmEcmbmHPb4/q0AYWpI5xIgzOXrM0lyHLQbJeKOSkaGXI=
+-----END CERTIFICATE-----
+
+
+EUS ifx keyid 5d0815951f5f60638a69e7252f3ec4becd7554b2
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAY3oagM+yyLjeAAAAAABjTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIwNzIxMTcxMFoXDTI0MTIwNzIxMTcxMFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC01RDA4MTU5NTFGNUY2MDYzOEE2OUU3MjUyRjNFQzRCRUNENzU1
+NEIyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA53AhavR9E2ozZ1EE
+SDOsGCAR74Jw6Ibk/2QA7x1/XscGsHVJpGlSd8Np5DrQwUR79CNKnof20CdfgZQb
+kDYS4DIyiZXtlhysCBw88vh700okwMwtn8bhBkvR98gP5ePRz9k7rDtGuPPdN4e8
+0pKsHaxEXJFXdYnTgWq/XZZ2dvrsHWyTS47tc5ZpEIlJJZWpHE6Okh8R3U1pYnUP
+vhkj2vsCrz6ve87XG79g51lHRH0iD8vaR1tTemt+Anpz/3YsYWE73m1pk/iFI5mC
+ty/3ZW6Ost8wdJ2cRnTNHHU1Vl68iWun5TbnL2OFTA/eAv0dJQMFa7QXf96f/iUz
+XRiHfDyj6SLRkUHuGlF0bG66uBTEgyPnf8xIzOQpStMYL4t/396hqInGEql6Mi6M
+vhmqk1gXRkW9v/Skq8qyE89a9LWDd/Zsw8a7mmNi+fAJZHS5DRoI3QdxihiP0B/0
+7ig7ck8yKqNiNjyXqdtZy2ezC2QOftpUQoyCGK7SvHgO9ypaoERhxgGIly3+bixc
+iEt6PmKDcPr8C5e6Ovl9HhI9Ec+dUvvxFeo8E2uyzpcUMkqCgt+VfPhz7VesI/GV
+8eLCxDOF+nx1ICNs8xBMwDmiTDFb1Kb9Vdha9mBYWxNkbwz+MpZJdTXnv5sT3w25
+aUyGTX1bzT658WZ7trGL1BDm+/MCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHTN+6CHYVyAvldX
+pn4OwbRGs+h7MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAAljC9uUGmSI4Xuw5SVTQSu8/k8fcY4+KubCck1CUEpCg
+P1f2fHdeMFBGHZMImQWFl7O4KmpqRi4lGn48+wRVm6N+4XNZWRAjzn8l/A1t6ioV
+QbRDCZctTm9Efek/u5eTXYoikcIG59qr6SVkR8xX2o12DfLIfjlj/EHEuFjnn7J2
+S95fXQmr15P+w40AR6shl3QgsnEBM3/S8LAG9I3YyFAvikqutqJ4TT58TjbheubD
+d2MJ0lcv6tWSdxBGdUHSCKXoSEI12l3WsVGOKuicLR9x4wTAB1Vat29XtWDh2Qw0
+Sc77N4eOXuFjGad7W9xwmRD4HvktECdk2bs8wTBqjre4q4H6Ch52+es7s5wN/neA
+sck0rR1ttSZ7b0Ha2xoNtqxK4IrQvaxyiBkvUpSM/4E0U1Zt0n1k9yvmPOG++vk2
+vmMXmsjpPtMRj7M10qhig+jFBV5IbMWXsqn99vmRaCaYT1UyGTgXqYLM3G1g8hmb
+0y876R9rO521zqD3XDi4Af/YjJhOKBKLjjIaN/FA8eSx0vhMxCnQt8XwxzuICS5h
+CpUMaTjIofym5Tiya+7gsUT4NU7BA7yYBKLoddmyVOXl9KuAcax3VCy/t3Ne6Snh
+L2nGL662tLbMdz/h1AZyUq28n48cHbO+OH2au8dFUbIyHAQrfTTzIyjMgVWR6Ow=
+-----END CERTIFICATE-----
+
+
+EUS ifx keyid 69146ac3cfb3665c7ae78101cca5c14255ca2bc8 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAepx/LwaJlacTwAAAAAB6jANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAyN1oXDTI1MDIwNjIxMzAyN1owQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC02OTE0NkFDM0NGQjM2NjVDN0FFNzgxMDFDQ0E1QzE0MjU1Q0Ey
+QkM4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzZiYCp8NFzYryZW3
+2fl6yZAu4OuDVdqR6FS/Qf9FjHqSwXBsoM+KLPV8NDF2N9788ji8Lji0Cwwr81EB
+eJXlgrxp0P/ceeQ/eFMH53mUGvMnHo5QOBmsP3MNyI52s7pg2BDoKI/0YLM1z6bf
+oteJynoCInUjqVm3Hw0Eez+UJFuxurmNkTXArWzZZhroNuBs3udP4PhpWbGQzo0y
+nS226HESyofguOwdppYqW2M4HM0TqPr2rtFBTUyEtqeXtiO8iyX7UtEL5Osvu71O
+nySzlPygyZG0HX9xOt6rCDjeP9kQ4WuDMq4wsgE0AQblgqvHWUh+59qPE9/eoVwt
+aPbF2Ilxg2qm0JObsXneeMD/pFOoJ9hKu04WKcA9sUSwIEaPldJDC3R0UWwA6pGe
+Ob+OYEWtBD9rBj967pFiV77+yMQOCxmdy0uqXZVUrFCCWAiziMFxdYL601jnLBVE
+LDyansmd4lBuWw6kVk+0Ga9XRvhAQCBP/oHfb2LxqvrE/5YspcgLWzJBNXMQiFl6
+Sfuz+vFOvpm4wV2PFmMNXA50KtpEN/cJH208IxRXc8f3UA3X7+2df7Ijh1hnMAS1
+lUpeqzPvLUECxnIiujGWCR0utNrg1DeljBRMuiUPSZfMtqyM0f0x+uSSWkDxUJ+s
+mEbmVfMKEHshbeygwsppMgJS7gECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJKSTU7JQHfefLvA
+2OdUn1fz/3FxMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAkJhWCwqwgsWrR7WyCZO5kUnDbVbN7Krl1AETbcX30yJN
+F3nD5EzwQpJlGtO9sLO1DtTJnDVLiYO4oUkYOh8IwNGMEi1njTYO06MAwI919nZn
+6aO5zuFX6oD4g3rEK1pbrDx2HE6k2lkwjMomisnzp+UdVKORojz62MS4PanIxLRk
+4esv6XKfSBpHDh+3jRBSUVO/SNk6fls7ZCrvMRircy/avUPJeN76kdGGOfE5k+ty
+nSiWto42xsUOJw8SVkWo5+GzWEyfBwN+0WSmj97PCG6Khh0CwVoMqvbeulz/wkqt
+dnD3eRBWoWil8zAzyPU3YpeLH/cYJIuEqQi7CKhY/OGKR7XMQuv15INCUSWgiexQ
+FR1Qfd6mBiU2Pp42cZfeP78JzY8iWAp/DhQfNVlDUM6NBK70LaW4TK6sD6Dw9gvD
+Q0Z3OzfnSzKFXWzZqmks6qEUnVCfrH3Ll1ZzQGFPWF+pNKdyOL1z1qPGrOAPXHXM
+bA47iv4Zd6GmdjkL12mbuIhmXTkM2iE7zL5XlUwtVOtUsQH0MO//0fPKdSdx91R1
+iRik3zVs1hrC2FEuD+JgqsJgQM3wNjLy8RJq8fnKh+7E17Ngu9H8W12tT7Erjqgp
+CRA7awl0De25Q7C9VZeKj6/ggXdQ2nWOYmfK9MQVCzLq4vAHYxQFxva1o1aU91o=
+-----END CERTIFICATE-----
+
+
+EUS ifx keyid 7cb4b78e688614be4421c5858f15b96d5eab51ee
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAZrDRs0tLqM0rAAAAAABmjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIyMDIxNDkxNloXDTI0MTIyMDIxNDkxNlowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC03Q0I0Qjc4RTY4ODYxNEJFNDQyMUM1ODU4RjE1Qjk2RDVFQUI1
+MUVFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuAtdvdB59xUfhRbo
+QMP41nJ9sasWg+KHa28dWOHTQFDkDIAoWmw5wNvxUW2xx3E/p5glBpZBVVKLoSuM
+riP7JsxKuoXyBrFRqmkk1YEEzUafMQq43jtASwX064rMjojUsEWnJYvKoFj6xQ0s
+tqsMAcLDjPC8ENvaWaZjAubUquyDNCi0QRFxtRocI4bKlQ+s8j1kQqtRjJAoYiWE
+7R2rS3llb5vfw21NumdwxseWjfJN9ENkcX1Dq+cgyBa0ZX/oqkXrSBhtaOmTqCTu
+/VQMQKa6cvpTzfa+nVVzrZvCYMhukdeaG/kCQ6S+YMhAp8bFGpreD2tK/XvFZx3N
+h9Djgv8yqvNjbI1mZre24Uyg8EBOreADY9hmeQWfpFWDdrHrUZS5XBNy/bFWxSF9
+3vwl1S/uhffS4LWL4bdzQY76udcPqm7wM6H9de8orj6DOgTm6cPHvhHUQl/Ak1Xa
+cgcNQU3ALXFZo551N6rdxMzoH6FlymanZw7GuEZra+628ER0iFIRWi/4pbYjHnB4
+KX/oaNBxASMCBRvU8IgpGPecyMDy0z2bBWcK/Pn5l2SmzTf+MjUhnPbKY3TN8g/W
+jR0jX1xlnpIuGoUXtjeBtB8h8uGyX9bnXNbVj0opTF7ifCQkYBZOIThtjJTkBd6F
+wwYGwbIFUe0rxaMvO+V8poyhbS8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOJF654rK9YS+FTE
+MgRSkA47Ek/AMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAAkxnrG1p4yCEL7NuYf9l8MHD0VN/0AJjaqKFK+665C8o
+htk82I1IJvQpdYnBkuOYePz9FbHT+wJfRwVNp1swa0vNdVK+/G6Q/n2z4pURWiqF
+HeZt5jHZzeLMI2e7NHNUI6nAfJEBXkLpU8IPMCE605WRraXix9EvZqUR9AdMy1vE
+yK2ntivKckKIyejC9YJDEKsQqZn+nqi5XDtyx2/g2jko3ewrfto6ohtQ8Klxczjw
+05DxSbSbgA/FpNaAXEqgQIrURLSXnJk2siJS/FjOlrsY1NuzKqTSe5chnXecCek8
+qNpNhn9o/W/VLLjdToxvAEFE3SEFaCQYSPqqMjSaZ88t4SHbbNc1m9kVgrb/lB/9
+oHrV0IKrqzEV1WmAanpCZAAR4UP1hyebq9b3BJPz8iWKf7Lu9k3ZRPp6DV30xoIf
+0sA59rNkmkTqg/sR/sn+ltpDSqGAKVDa/zR7uTMnHm8Jmb+AJpdLz8iMo2DI3rXc
+QC5ZlUYvcBTtnKf2Sadebd02TcVR9DWihg5XYYrrvhUaXBYDrRlkTPa6DyDJT3Km
+sEuPz5xhKdzTkMcnZG3zhbAm1LI0Gkb1wancRdCHQwKBWhNyG4ciOS9w6YmWfAxB
+rJJ2L4aE0qwcd+gaBCLiCQ+EvLTdArehsphEGeLkIvzmjgWf+yjAsz0lHvem5SQ=
+-----END CERTIFICATE-----
+
+
+EUS ifx keyid 8343bac2129d78299c4b513cc3de61037bfcc955
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAZ0RAuYeSagmNgAAAAABnTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIyMDIxNDkxOFoXDTI0MTIyMDIxNDkxOFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC04MzQzQkFDMjEyOUQ3ODI5OUM0QjUxM0NDM0RFNjEwMzdCRkND
+OTU1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArd3H2UWOha7b5vf3
+ZrnxPY59u2vo5yhEKc23T6Va23MLYOAUqpMQm/Dbnb8zsd1MZMTYlP2nS4+j0qlW
+1hTNU9O18ZmgRHdGmwSnAD/4CaF7Nz7NRQ7h1LcvjBbuCEP28eLQXbAZRGIl5z/B
+yhGfSHbodlKRjxBVUpn7wQ9xBNziNiVj98B7uO4TfPwB0kr0iqlz+mwW1jR+ZZXS
+ZM+3jjJgbZoH5lGD7t4tPOL1gy3mKU+GSBgorstgeLPpYYvnYvsXK72Wk5LFOKKB
+tLldrplbT4yOa/WDp+UjoM70gnFsc3ThkEvJAHJXPrhBWq3uGSGOoW/xifEu+qca
+b1A2DQWcDlcovAkKp8Rhk4Cn0KwkwDzu6KU3j9Ij7S68sFa1AfMr+hzURDPV36XT
+CIeGfbBdz3kU4cm9pgvrVZZle1yhmu1CoOg5ZBYSfl47CsUtbsmgeLh+A0P7O8Ui
+Bwf/9PF/CZjEpQu9lyXKiGOgZBtaL8+qLoo4Iuamx1u11FuOAzzRmj2WYQOTkZvM
+y7PX6jgM02lQe3OzCEQIiZWjSzO6Th6VCzlzrt0A1+0E4aSmmke826rhmb/hgodT
+fIjSGfHrYj92ocobomrJdzaeaVzydln8pJfvGOIemflVud9AYaq/2FKadlVF/cPZ
+OPkdW/VF76Il7JZy65m3Q9EYlr8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFK/zt7i4rBHF1iBZ
+vplpdbZ+cHOJMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAAZcB9V5azBzUb3uCfhzX80LSu6NkOE3EH1ZueatY5nmN
+Lf/xIWNxiH5sSkaihJxMSC+4xuv6bG3PF/6n7Ek2VKw8+wC27WrZU6Ol2A+Nu9vW
+AHEb8bMeu/E8ZdzQ4Q76pRa1wHcW9TokkQtXvWowzfWJGAP/HChefhKw2i5cwv2k
+S+7ixM0kfbu3ni3JjLqzDQ71EAGavyScYjdH6psiV23vLg1ZXFz9gG1WBbKnLBg5
+V8bfj8TGT8wO3VgpdoMOgeI9+LA23bdLNZfoRlB3SnScw4+yVckWQbmd8S59U1zW
+OpFbKcgWcgUHFE6WvECL553IYxTrQUYpNZJ3Rgpi1W0+WvQt/wopfQ4FQRbZD4mI
+oFRc+HuscyI58Hk3K4YKJTtSGiS3HpvPl5kB49O8t7L9WjOxYCRBLHoD2iNMTFy8
+6x0M76OrSPB1gohduLHYb97ciNnNA/lT1t6xbU1FvQ2fDExE0uzKGpwlo0sNuAzY
+bCVNSWtTaFvWZbiOI6FDZbGDQlBvFNlZmdOnNy1VGEOKKy7z3/fxCv1vJ4ql9vXB
+mXP+Xyx9S3yU8+ldf5QAKFcMlcZB7gPvGoLUJ0sdpQ/IQFZ2tdoFoyGUlnb4qz7C
+u8mow/alqbF+/pdrCVqnec4NsZlkBKGTJbC0+Krynj72/xZXI207oib/rK+dj+4=
+-----END CERTIFICATE-----
+
+
+EUS ifx keyid 9c7df5a91c3d49bbe7378d4aba12ff8e78a2d75c
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAYB07g4HB2RasgAAAAABgDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MDkyMDIwMDk1NFoXDTI0MDkyMDIwMDk1NFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC05QzdERjVBOTFDM0Q0OUJCRTczNzhENEFCQTEyRkY4RTc4QTJE
+NzVDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwt0CQy6lJbtd2wmr
+UuXb1rhKxIrsgJdvC7z9gAdQIqSnISw/ZWR3U7ncQpYwx6RgZ+UHPPnCrsdOaoqb
+fTn2hNNYM/KDuMfHfgUtjb1HSJvGJSgXbVmHLuRuzlhsBdr7KR2zBYhWcP5pd09v
+YXS+zsGJw/BHsmL0/W+JAC3+C8Pu/gHOMZiP3c91CbhAdl2wYPT4TmCDY8E/ZikN
+LZ3Tz5Y/0JMGMCyGj4nbRLpEZ9v88CPJogovRmoYo/SOgk7DOZx8yPupPpUc0k+M
+yyTcLmaUHtCUohSTQI/bFV4CXABphE6NLS7o0McWovE141Vky0YNDsp5EJUUnMeU
+/JVOqUVpWn4sLzF5yH9/tb2db57s78izGjoL72dHNZUWh9F1YLls/TYtMa8nwe1t
+7L7Tq8PMDYelR5I4KSMiW9M06mA1DOxmI2+hWV2vb8w6hw2jpizhqgNMZvIH6VUq
+/Kmp8f01f17V4Grwug27Ve+KU0D1E2yADCEyvicQJeb2KLzCArftnU/KESGGujou
+qocQmATm2ScqbSE2AjYWgymDkc8XUwZD65TALTbT52jwCdJeGqQqeQbhH0kP4suM
+tZ0NSIJfvWZ/zGQZABsEIGMn40OwaTy8kR1ZwHqbzzgXdktZCY3GGgFHg696Vt+M
+SBlQaZ9igiwbXw2RdOoKSKmGObkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDy1BUBbk8+JUqcU
+/lxEBomP4rkRMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAamefbKHAJ6DAWp2/f/KcPvSPMTM3vdLX5ouSo9a79n+c
+beH7YMO1Qtr1UolBRY4RU31fsEpCMW9mSDznCq96aPnPx43vJCGfQroO/V6i7eJX
+HYi+LxTn+4wNoXbj0fVsnF7dkXdF25ZQGOsB2mqmyk5BZgA8SBoXJ0t6U5gEqbh9
+VrXX+X3iSIpwmeoES/6tzvu1ExGXjc2OpMp5n0r/bguVziDojGtlkS9xbMxsPEsA
+HwFa5Yz7gJk4oJmTQPo3nJG9P2q2TNmrbGISkjcx5FuhVRMGhAn+QgBTzxDx/jQw
+y267IcYIgngkdoqi0e6MOXl3gVPtVPHVjZKMJYLKOun4Qb4rG/M6yDnjgQIsAwKt
+V6GkVRfHQFZpw8+SJMMWKOv8ZygnMARNF0fF/5XE0DXCZ+J4Xp2jnsFa+HnPj8XO
+jMG51x8vpzkvPZeelWAhRwv14F8Ds43GSVF1IAmmluHPzJx85uTzncUmWExDm3Kv
+1JUTMVliUXKrwOxJU4lgbiHgPwmBVwKZHJVjKGDCm82HkPYOqOt9Vx4woMjAQORn
+cBuwMp4YBbjbflxltyy6motCBOKyYKHbxjJHGdoxZelDlrzY1n6nHJSESTNYlN0B
+t6Wr9nn5qsjluphpKhYbDEO8oiXS+jX8OaSt0V5p9v6yqgevVym6doo2nak9QmE=
+-----END CERTIFICATE-----
+
+
+EUS ifx keyid 9c7df5a91c3d49bbe7378d4aba12ff8e78a2d75c 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAl89DNMjCa+gRgAAAAACXzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjk0N1oXDTI1MDMyMTIwMjk0N1owQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC05QzdERjVBOTFDM0Q0OUJCRTczNzhENEFCQTEyRkY4RTc4QTJE
+NzVDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzKXEO/ul5NDLydgx
+nEr64MRYlR6Asi2lmJlI45ibNXVq3O2gvgqoRJu3NfRFWUnivm0s0xpU/j5UbsQE
+VehMQvjxYf0nc48MOsJ5gFV9kBD4ElS1J9QoA3cVD5Kcd4GmuUpvnd7RCQY7RMca
+CClwqE1H9fi+P9cC2/dZXGiE60Xqj+f3JtFGzJFOG+x1d/OFxefxqaC9Ob3GGIzU
+Az5bnzAUmZga3exszcHSKKeTJ1l7G3SVc/Qb9d6h+JzfiDJ/IEKPkfCpKbHA2IoC
+ViRdozz6Ct/ZFcTnkN36NInVpsRFbUhkMQmIz5s+juc6+n/jeEaz8XKxCEJdMa8H
+jTwcbV73BWG5ZV+V/eA99dm1NbICvJ2mpO/AhNP1KEhaoQ1T7xK2koD2FNzOOI8x
+rCBOfdrftOUACjabVpSPXv6vZvnPVn7EPv+WowMxA7R+Q3pyx0ytCbaMWT4M6Q2P
+t89d6uxfQ8EKUMZJjW/dUx8jtE5Q/CrFLq7MLZpAPDFc+C4EhI3bqSLdID4MFOQB
+Y1iQCHHAZYPvv/CEIXNVTuu1j+i2tHCv6LgAW09tF4uTtwbpGB7ILHjLnLDQyYT+
+68Rud0MU6/LQtKOCtpEVaThIXV9SG1dQ99+m2HDZ43TGNRzLNcBf/4P17X9RhvRO
+ZINr60h9ZriMlLP8ieR6WtSvDHsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFO1TOVS2Mf0M7NWo
+xCMl/i03Fb95MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAEnS194k0RTctTV6eC1XTqOOHPqFzrBuSahMCf75G+Wnn
++RwXxAdkVSyOVC2DAlv8VMz5D0re0HYyxw+7/esWTzEVMNX3T3AzQwDb7bd2H33P
+EB1OIN0e6yrIDU92pZeF/nqLGIzKFHBdKJLf8rGU7KyDWSPB0B+qbAahd1xz2mFs
+glGbf3HocGjQ0Nm0zVMbUgt3FpQyJ1ltD+NG0Gt3ugjerhLkzTJqeLAuIn3ghWG3
+PF0Gg0ar3OroCed2vcAh+/UdwywtO/6Je06bfAPqe2v4wX0J9gyNJJ5h/LtBpjQY
+m7vogdOOIShuXjTHiQj0hOEk18EGX3OIpF6SLns4nLcydWFVv1vXhyKdGh4XYb43
+h+pxcBDmVqvVy0+xDOc38w2rK3lcSxSc3Bo9ai/WSyh5chzKrSNlQfmXGWu50Xk0
+EzgVsZg6gNHousWL2a7r2hqASGl4VMYS+sgzybLefibxReqZk5hdOzCtCpOXd4fW
+maFvO2VPcXa59cioKToNeKXBOmoqQGI5Ek8jjcuv13x5c+pQ2ut7FKGeEWtl42od
+dShNViCmn7JuS3++IErMQiT8Ws/fRESmai123LXvo/2/k0IzXygphlYqarkF1Agi
+IE2dARdw7Co84Ks2n8Bo0ag+GKltjyMhD4tvzQCQygSlGsB3gBd/ptapjwXHvCk=
+-----END CERTIFICATE-----
+
+
+EUS ifx keyid a26ceeac95fa33673219d0c2a77637102fb53ff2
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAZ5J6uFGPAQ9gwAAAAABnjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIyMDIxNDkxOVoXDTI0MTIyMDIxNDkxOVowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC1BMjZDRUVBQzk1RkEzMzY3MzIxOUQwQzJBNzc2MzcxMDJGQjUz
+RkYyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwXMX0Es6C9FFejSC
+iGHd0J3oIq1C49MSgX4eOxU1lR/Kc7CM358wMbVM/2ZXGwhoYofvRwXlqqL8n+bL
+Djwt4rLyGnabTCSoqZ4TZFS7EFgh9J36YxjfjgDukhgGOwkz4N9Uq1qSW/zyQIYu
+i1ZnKv8J5UHH1bXZu3JOfTJ1CmJPjJJLR0dCNqLaOuwafnC4kwlwv3iP4UnhqefZ
+p0ct+tfLi302vp68+RTylzQb9JvsLax80vd6zEUHezrE3dSk/uPhYwS6BqDGur5u
+pGbKdqMOWEpVS72ryae710oCDoo2qZ3KcOU6Tera3noAh24y5Ek6G9vRjCpsYITC
+FJXvS1Pgtlb/qGyJ2naN1DD/g1dFCR0KWO2Q9NqyOrMHpd3UBl4p+zYJAXXsXMbO
+F6G2MZ6iqPtGi9OilS7LWKv3ao2vuCQzsMRM5i2/Vn7LvXbX5tiIZQTyhsSZduh+
+0tWj4bFdQYGyyhuStLow5zVHYYqkES6QJTpGow0+2ccn4SDKTe0m+la86DwAG58t
+cq15K2bfGq78jRgY4CV9NGLlNu/ld1jXZxob3AGkrStUq7H97lpKwslgqJ9yfg+6
+3eQEbuviCNNh6AfZgN1I01wvcsKG+gxF3oJ63wWqLt+Hawz5PCgMtjYTXkAYM1hQ
+d1XyRBWS6YTNGJYgvTd8jS7sQT0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNVuoOGHd1WdIMw8
+gfDm2yAU5F5vMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAG6rbyunqDGKCBXFq9CqiVHJ+mQ05t+iSF4v3U9dEN4Rj
+yxoVx9qYWp7UfQoviGFoPpyV+SH2fL2AFcjexdb77VaW6WCJ5VBoBG6qplX4JZy2
+dZwigZK1AmwBaAjILNqwf3Pnt68hh0h/mYhuBDfnSrXd0MZNmB5SbzL6YuyJd/5A
+v0/pJ+pibj43tWDz59Vrdt3M3NUK0r/V1M5fN2G7Tgtf7kZpV/VAKSk4geW0spKW
+UBGw8SMxYIeTJ5DD5SWah4SaEYVCEizr3Cdn/mzpFbS6ttR9Ab2t2g/rcKWVQVEb
+m3CBCUyWJ12C7NwG1mKjUm4VNLwcmbVmsktMAJ3gkDm+8u7xSL9OeP0a1r0J/OWG
+Pf7/HmGh4Srb6yj3d82O9fF5YBV9UDsXq01o1Ee+cPah9m2sC+KInBLSnEBGAY5r
+zJcS2Qqciivbn9SfLWEStnu4OTvR+MpevOYKMudA++wjLWr0K0Eham9/UUwbjBSM
+37vyIN1W181H71HydP1W0xvt4HyevFENTIm2UuTj75ZWRJIIMXTI24Xnl+AzttlF
+wdNUtoaTH0ulJtc7VQhFzhPe1r80ahLt+5PLnKz/pdJ6YZ8twQyZzMzuQyhKOGiT
+QzGNj5MmpV05gsUiqDIZz5Pdz8/oNH2/S0FcTt10Clmrm1laKdZEvsW1K2nUQG8=
+-----END CERTIFICATE-----
+
+
+EUS ifx keyid c2ef641c329cb0a9f2eae04bfb10c99b89c34614 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAeuFrJsGrLzgcAAAAAAB6zANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAyOFoXDTI1MDIwNjIxMzAyOFowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC1DMkVGNjQxQzMyOUNCMEE5RjJFQUUwNEJGQjEwQzk5Qjg5QzM0
+NjE0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsf/5zbYJctlToaUW
+s7TnRI4k92SikAYuQ/hobsgpi76Ls6gs0ftBOT2O3oeZ3/a6JJ2k9t+pQYMqUq5U
+kH1E1tekFx/BPs9ZiJ1a3cnVrMUu6e2SVcChRnKr0sfJ2c9PmwO5MYBFJXXW1NoN
+GJOz6W7TXRVFQyNdzjSg3Odn+73aOW8rVctQ30EIUQWeOLl50LAQIVSPLV1CjwS7
+EyNhojM5T9iqE3yxjYscC8aSTedn/nSZiXH7hdgAKIPuK6YJ01X0l/BPVmV9JZC7
+xGUiDH96ofGwviwo8h8jP/NGNeWrePwGCYN/WQXesS9SjZNU18BEOiG44HsKd8IR
+DVBorqgZAMewp0RrbUfCUzVa49yQvsieEiH2oYtpRW6aTzbYSyvGP3MzJbg3wALN
+DDNWCMVQYRGCSiBaLQc6H94posRMQvI+Yb6C7ZzKVGJZnoHk3XN5TUYBxHsc1DdS
+BOrT3ncXfMpq+f0KBkuoB7C5b8M/HKjS0Llzq5iW2A6tycVJQDdFEPrbVj6V3Thk
+DtNWolVxNG8w4MDLOPW0AAx8RZUepFwNVVsnh0pBewdhxGKU1RWqnmV7qFeaCLJI
+Bw6bIT83TzhSzJDZsVbYo4WCM7KNdPWJlZTj2Rdl/77a9XU14DEJQZkpp65sMi4w
+h7lgi1CVcfTB+QSh0VfbISnXe3UCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHjT4jVmyYqJNXDP
+QD/nxqCUQt7TMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAiIa2qqGL5G8Ew2b8N4z1ge1ZTUDrl08Crn1YUypDAMjl
+536Gz5OylsQneEEjq1CXEtWpmXsakKbbAsCLwYvq+6ySH8yKa8EwSVUd0RH5s+cT
+fxnmQ4yXYrejxIsKehfCJFwXnm78gHJL2XYqdQ02TXqg3EsVCRhCou81P0IjQiGC
+YdBnmVol0PuheOEKK1lEVsw0hUg8XVVtzNEuH6ej3BQGaIAinwvltHYJs/lOVPvh
+I3SH7agCGII6P93DL/9Qj0UPdGUP9s2rwiQ0GFSEtaTTwUB8ic8D2+uHbPcOZiC9
+lxXmrtMl6q0v9oypCxp5gNrDdqvuKkn59Q4nWMf+GX5g/UygDbKWdmwVMGE3YcyS
+2fIklW+zqR0ojZOksddi0XpJacVlNS8h3lYwBV7YtnskrBnhy1ASHfXUyTuUv2Jp
+igwHvXn/KltFdvAf1ZcnKugejF9/yihLVNvDsDCGwi/NkfNFvVKwKHg0rk2NP4XZ
+IAzLzDagx8efSocE2QK3vXzJbJSPdIvyBT9Rw7vbkGy6SKmFIy4JaUK5MfwiJFxZ
+XtZysfdQ6KD4qgX8yaSLymZosAtgwcgqUZt57vgfCtp2AGPVvexqUB69SFJZ+wyl
+LvPxh/Il2vXSQX2idg30ZdFcktO+9LQ5ShdbPehvmyqoGWWiLZsVEgpXObXbz4c=
+-----END CERTIFICATE-----
+
+
+EUS ifx keyid ce77153b6e110ca4ae2971a09851ef499326202a
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAZ/WmjOKcPUG+AAAAAABnzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIyMDIxNDkxOVoXDTI0MTIyMDIxNDkxOVowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC1DRTc3MTUzQjZFMTEwQ0E0QUUyOTcxQTA5ODUxRUY0OTkzMjYy
+MDJBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnQyYPaQgvyk/vqch
+yj0A7Al+NKk7w78mwVv4uoQ+yQJWHNO+UgQNOMP9leYGlnfVL3BmjN8LCiKoNyNZ
+on+AoiLviDRsE6kPwvdCd7lB7r/qqDTvOZEdMweKZF7jqNHQtLgpX4p1eGaC8okM
+58ZQZk/GMdxoF/oUSkWjgtrBDlLBATZz1awXcvZWBAj/LtC4vHQ0zC68oa3vqk1L
+PpP/WPXrqaPfWDnhlu/4FbYZMA9MoC9yi008pP3iAEk6wa0c9eUrM54mmvxQV6AY
+bsstiR9YI25oemYiRZDnyzJ/Tu+14XyVvsf2Ng12j3EIO85zf7mQzT0t3NS3wVDG
+mIjkJ8de2t9K5K372mEWj5LwipuHfvQ++4klyfoYvaR4ycvUbSs7orum4RNRo4gZ
+9B74kHTZ0ghRIRCG+Zeewa3Lqj005cdBOz7j99Neo1wdEPxBQX1v/qRc3Sc9lSVN
+VXJ5hqkGHOcEjtWNI+fRTJ1v21uZBKzCKbnegR7LL9Xj9jJjMZCCZGjhiPpLqeLh
+SW5cZctLJZGIA+eSMU0UFwBVVmvfCZkQx1sks4ms/BrIMJHB6m5Dz3mkfmL4eyr2
+/cASpps/73V5HlzsHApG+D3DQ00InLXXh0urReEzDHjTjMzUkdl84hAbS0ys+r03
+ozp8ybgoQtfIE/DgglHXSWOzqgcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMzMIwHny8iST35W
+/fxF50/8YnMhMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEARD0jbqsA8fAxrmS1I5sjtNeAlUh+XL6nED+7IpefH2YA
+GOycaxjX6jqWZxZkyldUZ7IiYLWmCHKGY/PFt7y9Hj0958x0Dx+KmTugtFjzpY/i
+ri4C8vUkZIFbeQecT3PSM9vxZbM3QigLDQRnQReMMAcecGxNHvu+3q/IM/0NOst5
+Wq0NpAweHp5A4IZ7c17yp0oeqJaU5YOH1iSn57/OJCQO61juasBX0mmKNDnNXm8t
+/wXwGwSPl+Tps5HyuTKJBK9JM8Jp1gFd+0MiGuZrfzxPJJUXOY+Dyjoal+LPfoCw
+S1fTizc07gPxmwtMQ+t07/yg/nSi6SbWXhGrLPbZ7ygwKCC653E1jyM+jSZ184/J
+wtakxS+0C1W1ukvxFtXGW4jdwCPITfEuRywHK9zMlH322aW07IWqeeEc18vSgQ+c
+GGolFCwtJGQdfgGpyzekVZnYKP6ASaDIdl6YdltTryhZBXf+uPT+Gg+g8lqAUmJs
+TDA155kQMO2oIiEXQq2Wx/buFDsktiytKFQUkCEzHCfW/YwPUQTgE6LY0ZRyO1B8
+6EOAK2UpoLCe60MG9BaClLqNVM2kAhUeaPRXK2YfwYQDwvi53IOele0RyrAkiovv
+Ze46E4tXA16GuWCa0FMQEDLulprijXVIGonYNdzPfM2CZlySJM1qquC2/mhfExw=
+-----END CERTIFICATE-----
+
+
+EUS ifx keyid d8a3f556085a68c8aa5d5fe079bcc6e9c6d37764 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAe0aF+W4Bo5YigAAAAAB7TANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAyOVoXDTI1MDIwNjIxMzAyOVowQTE/MD0GA1UEAxM2RVVT
+LUlGWC1LRVlJRC1EOEEzRjU1NjA4NUE2OEM4QUE1RDVGRTA3OUJDQzZFOUM2RDM3
+NzY0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuMvnOZiDJkjlhCFD
+F/F1APodbhWNyJJxrpGsUsoV5Ltx+HoVuNr1IykcF4QcRKFLIl59ceijlQ4y8Zcg
+QA5PNNF1NDGuimzvZDO9CUVJxrrjtoSVYtuWDDNWVg8lHYhflDmr7TAmbn4oP99s
+xFZ18qzvR0UuhYoc1ddSYDu8a5BZQqk6im7v5FvkY023GSTqmbz4RWxAWREl5y1V
+Nul8quxH6RE/fDld+6CsBiudzRCQNhgc4QDFwiIbKS+VIBIsU97I6hZFDuQuPc/Q
+DLmMQKmxvQ19hCUvEPzXJOCqXi6EIZzi3qbjoGlah7llxMtfcXVLMM2iKmFWsUZ9
+/sTptwqzBsc9WTgTrEGKN51XqmyNtJiEDKopqra49e19/T5nvtWCXIovteqD0rTS
+p85gzcWRGa2Wr0toJMpZ3o7Hw1WnSe9xulM0QlIJzEEKTRPmIjRTQRUo2Taej7vj
+6ORmRVWUqHFQroITnZcBsy1J04iuOFCGuQsIEJiVVW1qGMUMImTKSgyD7uuxUgj6
+y2VwYq5eUFK3iHT7WHJsM7SUJCtDo2HlPY06W1VUt9KB/KP7lLcrFSNqJJ0dNNAm
+Q4xYG3aE6Uo5VaeSDVOUgKPGl4kWapM5wxramYZ3RMQucHcng3nG1HRTaKoumULP
+RCWRXo6j2DcEWsouLkXuaWBZ9NsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGPGpzdaUAsXOOAC
+bUQ2BzAgwavoMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAWDXwC42s4etnrN2k6m6rVU5zBd1IuC9YdDQGglL2FpTa
+yXyfvCICvPVWzBXPb4kJKwBILuXIJfysVeARo+kHzi4uaZXcJ05s6Os3Dg+76zwC
+1hzluSkL+GRa4ykqeqk4cWXgQuYKXb2IpgRPTT/nagcsAOtIqlNis8QqYqN9zPOY
+j1dj0AzMZOVFWKQb6JPZlml9/n9zXm9H1FjW7BXbjnDgh9KzPbOewmZbHMXKeIBQ
+R8yaselDVQwUy4y0/LriSmube6yo5bx+ierd8vpbhN2uXmKVQ4JAWvA12C2iDdSY
+DMKCYwKv8fPIikbwGGxVfwEAir4aHKRdG137ohJR0xnZBGRNnprW1YD0jnYE8yj5
+W4+sSJCcnGoX6x1gy4sCIMy+QGhMwUAX+8QrUUW5Q4UxOT4JmjdXkf5mUAM7fLmp
+4C+j8um4kpWQgMFvzTniWOXwgWeibR2cywdX/P+VI9abvvk4sqpCoHUa/ZHoh0dp
+cMGpBc8MKAez1FTonUjlYq/f+VuHkpoCdsBaPcykRVdq4yyEPlqu9iAyTzRIVW8z
+X26U9v6kXr+GXDgd9SbWa1dFngaswkcL7Ec62nfqRJcXu2wC7ePUfC6lb1AF4kF0
+8sGIsA5UPF2PVMZUax9fZAAv9K+G2AI2bgmFNM14IIiYe51cEdSFh15kIKLmv6U=
+-----END CERTIFICATE-----
+
+
+EUS intc keyid 17a00575d05e58e3881210bb98b1045bb4c30639
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAY/chjxkIqfWXQAAAAABjzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIwNzIxMTcxMloXDTI0MTIwNzIxMTcxMlowQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtMTdBMDA1NzVEMDVFNThFMzg4MTIxMEJCOThCMTA0NUJCNEMz
+MDYzOTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMayXN4egz7FmHL8
+RA9tIjnh/iz0fJLlyZaX+TbzkpeuByFFA06aflkCDJH+GmGegDzyUkEKpGe9o2Oo
+QP4JLxliv+gDlZ3OaXlY5al8EBrdLp+ORj1TJTeWCkEQ98VI5XpHYO2JCvgqAOO4
+ZWcdyGbSQKIq7nrheHMUVSfQ4plVB/Oc+Ggl0TALNFqL/Y6Hrhk52FBCrK2eBfA6
+RzwbOVAAu8DVkOZ+QQN9qeStP9/vkdpvcwEvNkyhMND5qtUsoR09VR8+FCPKaSvP
+wmd+R7Ld1vwFNty2sE/TgZyE96WdqMUkOGxKEHEuvAeRntBPdSW44Wbu7Pf/Cqje
+3pdQ9YTiLyJOEUbugSf0lZNsKqFgtxtu4JR9zoLzUyXSxX4GcreKn4ZWq2/bBNzP
+YHHShOn8GL3Y/GvyOf3laXUpG8xzeEYdrJl/kg/Zcy/45wg3b2tk0pjCzdumZfoN
+aT5a8rSof/wmPGjJQBAMU1jo0cliIPt46xXoho9UJfPxMExe6SndUCqdK2AIAaeg
+12CIbu+c3TXaMHJs/ssbTL0mkYI2A2KhlxRmnaqKwDW2dpFlh6KUJsS8xEwxY22w
+iDpIaA9s033H3fLW/bbKWdnA4VNMPv2yMoJuhJKLoMszp5sBWx4Lcz+tblTP+466
+OLm9mroUXLfxa18hfrqJKkPRQe6nAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQDKmudOzx1N+wX
+L+ALK2LmK/sLsjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAFtVoU17wSMcHvOh9HaIcLVdz6TuIBERHsSEVyruSoEf
+rrcMgZY3ejySz7jPLkmSD6W7Sd5WMFTWeSFZGZuK/vEHcJ6hMSE5wrCUa82AFC+m
+BNWzb7GbApmLBZG1IMfi52xiqIL0JwsAKPNZ2YvnRAW4bDUlPXHClV013VZlR3tV
+mBXIxNHF+6seECZqmXVAV6NG7RiK+zjSj14b7R9V1vCg5RP/yHXixQnEWfxvtxxV
+4XYoAwtAOtO6wt6WkGBs2E0Nqly8mgKPnmOYCk8mKWVxstNEAKWvJZrpikv0voWl
+RSxlSgLHLb+oTmKwb9kLbj9rdErM+GAmbjVALUMNoKZd8jeXwy34/dRbNnzqSkKg
+1qK+GLb1RwYsrwYesPJDqdYJxO/C4Pf5nODHmyKAfemYZKwRB+7poinpGqhDyH/F
+tqc53Dmc5yMc/qwOZM1mwT/HYdkQfuC6uY2ezFQVaT9iRzNVJHMFh3BWTnJmefjH
+6kj9BmR4uZ9iT9CCgDQg7XDbxn4YJFpT7/7CG3W/AQIT+2l7Us7n3bZaG0MMt0ke
+vAqrnqEDLRNZ7A36iKid1Sw0Vc+7q0UyOXedJa50ulrfR6PEyphaeJtePlBvEuCf
+vvmlYyNN7v5vv6L0ROz2FpOWtMbCLplkoX6X7mBZWG0hj11CLvsoXfFsOiaIoRcH
+-----END CERTIFICATE-----
+
+
+EUS intc keyid 9aaf591ee263caae10f57ba04fa8d1dd6613f9eb
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAsWg+ouaZocuNAAAAAACxTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUyMjIwMzIxMVoXDTI1MDUyMjIwMzIxMVowQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtOUFBRjU5MUVFMjYzQ0FBRTEwRjU3QkEwNEZBOEQxREQ2NjEz
+RjlFQjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKERnCcGtTkmD7f1
+Ctug0xZfbhp6zPNLZ4QWv4lfSNsyHEbEC1QxB+l/6EqJLQ6GALaYQwvse1fhxhd9
+oFuX2aGZWOONzVdFDuzm4Q7ON4PKQ3RvRk1M5i/cdb5GyC/SxHkXXkGljC7fsCrX
+Bi1/MNn3eS5h+/nUf+xOiFKZL/RTT+c8b8P9Pnjum/QvNFj9WcD4XiArzBnYWcAQ
+pPvZs3wvUtJqKkXHxmsa5g4dbS8uTMivW20oAUqFeN+UH4vkLalQ/0im5AUpMWgn
+wUamSE6cOTa4t7jI/Npq3YhnG95bIIUEx3HG3iLLCsFV3Ohmwyeomhmw25W7BU2u
+3HLoKTqv0fYhTVTyFQQy7GFBS87jZ/1030FztqT1SitByYjgc/02l6jmP4QoPvY2
+O+DHqfgDGzRAwgS8GnppBu0i5OtIE2HK8KIU2QlgD5wOvROyC9E9IuX+qJyEN6gn
+uaOSDqeB1J73JUZOgBLDC9rszo0xnP6S/kOvJ8cBUv28tjdxXrB2l4XREMJNQZSJ
+6z0YWGZYiS5wK/yPXWrRoOCJndcrfOk05bLKCVwUy8ANDF/O4a4iMbT4IwpWzx7J
+KvjOiSbi0HJKMvRe/Z8fYF5Fndv2WLrYMWIZWpkLTsw/x3di0Q/gyubAViaPHL3U
+CsvtNjSXzLUrWwanrdrfVtdqGyrnAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBR+UaAiJ+2tks/P
+fXcoMtDUI7N5ojAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAEB7j727lUpvV62MC1+R05EWpR0g7Z/Uu/CXBSGnbhyc
++k8Ofhi6UFOMi+n15vqe5Zmm8gN2ifFw7wK5lDbwZ7EyNT1IPgPv65rxNi9GO4j0
+i3W3ICnezFWwt8SOoFbTmJSql8q4mhfrLyOXAG04kbDCB9H4gDTtjLZwaT1+BKsj
+tWSdVldTpIY8N8u6jXZyhCx2vDBf5P+joBIEzFdCVV/U42v9InQdQqVOlsxprAZe
+XINpCX58/Ve71pjurVt1ryus73E/ZrF/uYKUdWZSgVFzbjeCjiET2POwBwkt5FP5
+c9hWLMoMu59xrCK1bFACGdCVld1uvXn4pVHs5oSFUnw/42vBVOk7C6WtupraX9qq
+oQXOuE8/w7P6ZYd3/5FI1XCp9QaG/OsiIXEN8XE2Eb7oBFmQIi/xJ5lpRyyFtAzQ
+V0lgmpqYO3psdfqrXWmyG6rPemHoLu/ZK3AitDUtWTJhTaK9GmQp1APeXZ5JsbmN
+EGcgsASEDFACsdS72Gw5yyPCB15vxlTw/ws5++i4NKZ58G/mPfcbtR34Vg7lwbP7
+yeN27i0RXAEM9B9v73wQbvmuJ5igyDeRy6N4jTAOljeeGS83e9gZGgPnEeM98Qbe
+VBfHi+UZt6+bzHlJ2K2+MWOJGYCmjMIfQS37i5pH6lY7pajMeK8SE8K0eHuvfC3K
+-----END CERTIFICATE-----
+
+
+EUS intc keyid b066d9697f5d3a07b425c10f587cceecf16ffe58
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAu4cDP0+WFkU0wAAAAAC7jANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDkxMDE5MjAwNloXDTI2MDkxMDE5MjAwNlowQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtQjA2NkQ5Njk3RjVEM0EwN0I0MjVDMTBGNTg3Q0NFRUNGMTZG
+RkU1ODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJv185zrZvs4LfTe
+Qz+e17WrbS0d86563WD+sc5JS6sXNkBD+JbUjSkx8bd0i9ZeAtivqXqmemX/K6Tp
++5HZCZHmrtqyubeqExF6icyGSfdtA6dvggE7ItTnINhFRItgvjks5YM4QkHYzppw
+ZtWa0DFxPkzRfLXwJWz1plYDpZ4zki+jFBVRpITqQ4xvFvtIA2cCbmkIa/p7a9It
+rixkerBYcb89+kqnok0XqthIMWiCbvDgYAXZUrtN2eKs915jLibAlWAh82G0P0/o
+ae4bT2lDmYJMreoWGIMrUcB+2I1wVFDCPlYpi3vKvj+ykMdMk+zLMb23fSfiY4Pc
+7PeYCO7YpR1wAZt5wNZZHsyF2GP1a7WYMyx70oIuVe6T1AxWuq/e4I79/s0YW8gL
+vkSfA9dCoCyqQk6/mxazFbUJueZi7KA9W05yUBqEe1zrcHXWJ3gNw1cvf0EbwNfG
+na4beab3Cj3/dRQcizOdXBHfQ5R79tM8txYsk5wFMz643eZbAtz8nmO3UZHeKQv+
++VoklX7sgwexesPlcuhxsrA0CXPkFvuvi9d7hAMpqantQ8LWJE4J+6Az3pUm1TUm
+VQEiOFZVb197z9bstKkQIhJRYJ4UkkxfBBjnArN+MyKWoS0UV6Q2r9ItS5pdImXL
+5Sunnt5quBhlbpi8ySnwWC7Zec1FAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBR0O47u8N0rw+mR
+ZvRX47RdTE+KUTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAGsrq39bMPHdu3MbypiGeF1YGqSOP3j70j6GPaIzcz2B
+wP4Z12p8DVKf5x3IQgF1pq/Am050E1G9KbV6lwzYlNxeiwzs4/wYoucqOvO/mraX
+vhrARvSaJltuVJj2wQLTrPYnaJ7zrXo2LJRks5Q/PK7vyQu/orWb97w3sFb+v+c4
+ohSobk4ajf7nPguRj9R3jfgFIbH9fIDeg3H8oVQopSKev6WjiQXd0rPSGuZqmazb
+UJ1kiXsrzRbj0sd8jeNyGZsM4d4J8jk80WRXfMuc+In8Va8tnPH64YjPYw88FTPF
+IA90XyYG0i3lnjIRmVoA4Js9NWrOkA7nn/bMxzdf+4L9AurDmiwNl90c2oh8+TJL
+QPACSnysyP9L+7mliP5b5LseUgu2Pzmq+xCJ0Jg4Cz9m7JyOD5fkIHPX3PyZwtkr
+2gYLp6lBZJWllcqjsnYbd9squXPSJps8qtFt/TD5HbOJHkgKoAwNvoEhxNaKml8H
+jICOayMKwtkPBjaqj0VafaWNjz+VWQAtN9VACaHw6mQaylnbR8EuVmivMukadUc1
+Jn377m/JEsxaqLwHqmd9CGrFziFuTJRcC3ymNdvWrks8NcbZxCxVN8TbNO05M1dp
+rp1c6YwTmTWb0SYWo4zJfuwlxgUTuDVT5IyDb4aoqLxKnhkIIeJBMf1av6xxyQEA
+-----END CERTIFICATE-----
+
+
+EUS intc keyid e7083f22152a7492ec59b0c4243437648b15dbb7
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAsY/lib3TLHDigAAAAACxjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUyMjIwMzIxMloXDTI1MDUyMjIwMzIxMlowQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtRTcwODNGMjIxNTJBNzQ5MkVDNTlCMEM0MjQzNDM3NjQ4QjE1
+REJCNzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJygcdLHanufJkYU
+YjV2/0OkoVw+pOjEiBzJdpjYdQOlL6M5eNxSIzwvxk0QOV96V/R9vMsApbMIwBzR
+enI3Jakdv8IRO0firjiDR9pi/YnylNfdnoX/e+butL8bbXzVT8ct5CfaMDV1p0zt
+d+4Rpr6Uqi6ELjC8ZuMjInAsnAaN4kpR+C4Nh9ZXtyNz1bvSmcCinbFbymTk/bxx
+CLtf+QmYxmPJgxAraN5M0/jL8Aw+lXFRgSRTeS9bMEn2nGxnpQxhcfWW9wr2Vu9U
+QCDri7ifa/4Ul6ZGNv2XOYQCkAybpN6qMEN5FEuyq79Q7DZ3yF4i6iB8aqfyrw5x
+BgklIEq3U9+ovud30pwBDGfSp7TLdmyXQ4A8r+R/FLxvsujZr+C2anBpGI+QiF4y
+V73kEGWRVinJeO61tWpDb6cBv7PpLPiDBwg4HLwJTumw54/7xKr3q6tAGRMv+fUx
+5JR7PoVOsjQypu7Lrtdc07rHrB2jDsTeFVe11uEj7WOpEjS4Tqz9LlR2aUnIHBvq
+y8V73qFwR4nPMhTU8kv9mAhh+mFlTw0EnJML7Lx030MMCKmMgizmGrw/n258RHGg
+MUGZeV6pzHW5G7pLj2y6VS6ZtyctME27uxeBuer0/qqqzC1dfh8r3FGGzNc3ucV2
+Lsk4dVNLM+g8mJiiA8NFNEAnfqJTAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTyqeMuLv06VUsA
+0QrU2MoioIBi6jAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAGBoH4kOrAuQwMXZ4rugm2A2gmAAAB9jKpQOW9UxFME7
+ZDdnUBJKV3taH8vyHv6Z55585RRhBR02ufjfgtpshXdMngGvGny90miIi3EwPTCf
+/R5SSpyONf7QABZ/DA324Pzi4nfwLpbFj/eQL34J8iL25oLDJPoOMcyaeOjPQMGU
+ShlHfwzOqp7AtT1Rn4IJI8fbqxujO4kfn/OndZKvWNNnh0jzRGYlxOQC8yWDMT1B
+w2XJOaeP1cQVzGh8C5eb2ZH5Vs+ybBuTuZ/tw0ghwUfGWWGDBSnWm4yIZ+Ik2/HR
+Fdcjdw8nggtbFdOXxh4VCYyMFq/hMsJfR0w8QY3P4pZ5G8Bb3RA7ckSrMtyZBNF7
+X9kuwy272qaWu5lKzys9YYyFeS/0JzCPelURLOn1iKaBVc+4pM1UrdEFWuUSD9oL
+co1ZGoUNytQMj2Z41GOwNkxx4cWXn8VWBr5BJp/KD7D1etYGGeUSjzbSIjbBfWGJ
+7DZQJFObZIKLga5GAmGg1aKyQd3C91CZif0mKC4F/Bhw6VTeNEXV404NDSpzS607
+lowSEeJl/5AtCWQqDLy00Tktv5I1ZL635PLe9dBSF/FDdpr580jVTz8aU/0T7XK0
+3Clz9VRU7WSXcNjdTK/JRFj8/ewVoDHnkJl5Ysje6pwiTb5JGFNlrC9eHKrenJAu
+-----END CERTIFICATE-----
+
+
+EUS intc keyid f307ba33347c283a1e0c1508ad02f5c8ca06f45e
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAvDzBPe74D5/EAAAAAAC8DANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDkxMDE5MjAwN1oXDTI2MDkxMDE5MjAwN1owQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtRjMwN0JBMzMzNDdDMjgzQTFFMEMxNTA4QUQwMkY1QzhDQTA2
+RjQ1RTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK7i66vOe6lKAdk3
+nJBxRM59qJvFWVsCbTmclOFYlmjldETZLy0vxWMX/ykA/KxHH/D7E+9NxyHIiMin
+HpXoknU8YTJjB971uXvI6wx1r7nG0zckHe/qDQpUj8lyq2UX8xmryiQNcQjEtsfK
+dU6ZbnSI6BLJ3GMDUSzGTDkQcY7ztA/C8a2K4H+qw+GRaoGqgdOM7CuQV4EtBucW
+4wGyhYo+H8Xs6wScs+ScAO0slPhyZaIesgMKGxbmIbu1RPfHgSYvLuIcEJjbmzDh
+Za/8pGuGBZBFgnKvCO7GT1BIE0Ki3GM7+6lsndKgHxPqzbR0Wm42S3d8jA0YetG2
+tsJNIuXNH2RpIS/DrqHxmhauuHPUA9joZ/36TahjNR1qCyBaHUE1Ni/cm36Ki7Fv
+mjrj8OOnFtT4EE99UyFniISt2GTSHcMCpadhPUv3JhbpyUiCv9cGT2FLPUHsO/2E
+tm04LP1Vw0KOf+Uq2GQ0+d/R+p5Zk6Q2Njq7RLGxHbIV+XclpOSWa8RBN79fe8PJ
+L1443zgcwtRa7+CEBJkLQbTffLE/w9XNdHVJlEWWf6xddYV/d1uqa7aNLY1q+ZWh
+ySUuCHT22RYmVqOa/QB87fG8MvIP0ykCc/000jztZSUYecM3dVXTK/977Fdh6nBU
+mfOHQNZgcdwD8cq8/MPsCRU3JT5RAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBT5F9mkAm/cZ++g
+J+sRwElmMIHC8TAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAEph0T36OZKg+eX1AHAIvWYCKxudf2vyBc6WOQm7HbRa
+we7qRk3n5cwa/+/ox3tjFuKcBnWqfiHHjqFCkz8GztR4S9OToRShG2uTNAxdIFbU
+pJ1JwJzgy8Cdg66lUafBlDDMEu/KHiX8fQCqnGv75xrR08GMjmB9M8nQBAk/19yI
+9rU44BK1BEsZM5GlsHLVrLpGFKg9JO/txoed4uuMcSvsav503eIYiyFNe0C8Av68
+Q+ZEeJMieKxGMLZAzIXY4CzBdsboN5FPaT1o2YhsFh1CIZf5GVaCWpJOIPzdUNbT
+XXuqQPhFVwqoik1eA29n32I+PT92bOTIXUTSxUZhuPID8cbpOxV5ex4IVtEEE522
+DrR+5I8erabsNUhoi49FLhmGFy6/wzbAhkSFxJLj68+MMNprFNlyvKyrbnlP6BSW
+ACveaGRa0bcpmkz2a/GFlijnaeM3TW2boEFBTjqI2KocicE0XP+8NxLn6JVKrnRv
+Xexz5ksncOQjTit6ozS38+BJF/vfvegA3AWNbERP6E6pfkqDzwcGxuJB6brEShIs
+ufhlimUQg5O/QdwbYhCNRBjemze+NVSTbsqvKvE9a4EWEOnIG4sedRmaOZJnHh47
+82DRtvp3B/FQOKl1QlnYh6R9MRtpammNnNSVMl0BNjtNELX2yzzlgDo2RTEw3ksy
+-----END CERTIFICATE-----
+
+
+EUS intc keyid f6dcae3808326f10a46a62d55fe0a9cbe841a3d4
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAu9qru4sEpDw+AAAAAAC7zANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDkxMDE5MjAwN1oXDTI2MDkxMDE5MjAwN1owQjFAMD4GA1UEAxM3RVVT
+LUlOVEMtS0VZSUQtRjZEQ0FFMzgwODMyNkYxMEE0NkE2MkQ1NUZFMEE5Q0JFODQx
+QTNENDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKlQJlVxkA+DBNlq
+0grUoktXY8wtAsCQ+o/0TQrjRK4X3owQ2Qt2xb2LLYEDlf200m6LH0sK20vSBwOo
+ofOZT0BKLVmsl8BE/yHAqv60pcOEiGqU3vcffAZlf5U2++K/Eft6xUBXF14P4YHe
+1OZVBKnqGr4LPf+plrxPo+YZ2t5q65o+GRo8DylwR0myLWV7uBbEXTcOrBKtUyJ3
+w6NwgKiFDzGIo/+O/tEZ4Smu2M+y3zRQarR4nvkrbkJItTlH54kSxdSpmtH0v67W
+43YmdtunMlni/wi7qomtCjegGKwJ44h5GJqrG3GYEORwAwO+t3Es5sScZxUdDAUJ
+8EnWgViGZpV5CEFx30q4ni1cUHSSzNZLUY1A7HiwhoPe6LxYEOYB4V/YCvTh7ruR
+kJUeadr4ZDK0qaVb3cXXBz1zoQuqb3tFIXZZl9eMWiSG/guWX9GJQxVFmIcOB90W
+0okg+4X+QgLRPjad57Dmc4QYo+oazBN8G/LvKF7M6Vs8GkRaBZMXY1kW812yM7bH
+AICAutJozQGgTPnHleI5QxPX/EgN65jG6cfuRwQUKOJl4cEyVEO6Ev1ChhG0F/ii
+h1AonB2RSIYFr6bWAZ5Ugu9R3KXYSBpF8cMq3dxVViIyMkn2s9c2IPgtEjmy/CWB
+kdnzPtcgvONlBTOmN3yYzhDCeFa9AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBT6hHlJwUWDvA97
+eVy9Z8Q2TCjRbTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAFr0lmb2yoXyfXEL42FulRfR13nLUh5bhOAwcilFT6Ea
+u51BY3fV1xboCDrj+vkm7aeB2kjRKR7yDxOh2efA2nlWPXzq+ubysillpE3WKMFG
+QKNsv4VsSiC3/EQmbrXQjA3+3R+4ZPCWwphXXHElukvRmLO6P1K8nE6m9dlZGeWR
+ap0BQIMJG65Mf/KeuwNQtCZmn9Jyi8CjhTUvByGFGzBDCsPhs8b8HVapXElxpQNL
+9nbZba1BPv3xawyCOPHSTh3lQ4ytb5lCTVZbHg2uvCR9IhAX928IvG+LKUo78nsI
+Wwyn5BGrNKE7jJt6BMgV99aJPHEc4vnZg0/ZswQ5iIG+ix27mOyw0nufl1G1Ye7q
+NBgDfDL00+rAkRPIN5/RRwYclyaVKfVOWlUBp4sDxixYV/MofUwSNyRDApv23dfu
+bF6Wx9LqepdZWBsjTaXYu7k9VIwfdUqK380rKR+DoO2uNas8B1tEIKxpW3BKGIGu
+X9900zm2oXyZ1GgAtE5rGosBU3XOUndS6aTRv2A2AE4mURfy57HDFB83kmX0JJs+
+otwwbUW2DpuLtvwwB9K69q8p3rRCGqPzICNK2WEqQ8o1U0kYdxCoftlovAK26IKg
+hZG2MeGiNk23RS4NtQwE7MIAusX8qJPIZWrI4OKqKO7ss9Q/OAT5MMYk6X2RU1aa
+-----END CERTIFICATE-----
+
+
+EUS ntc keyid 1591d4b6eaf98d0104864b6903a48dd0026077d3 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAjGqiNBrvJ6QVAAAAAACMTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkwOVoXDTI1MDMyMTIwMjkwOVowQTE/MD0GA1UEAxM2RVVT
+LU5UQy1LRVlJRC0xNTkxRDRCNkVBRjk4RDAxMDQ4NjRCNjkwM0E0OEREMDAyNjA3
+N0QzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzXDrKuMW2PE5+yun
+PSWQUZO0RlQ9pT9kuB0Ttz+AreR+MXj7zTeIHsjsgb6tMXA9NgyeCHgA2ux2D0GG
+v+BvTXDHd7mIyM4/kI4t8X7ZHAipKTAVuASu3Y7mAawMEnmhCx1zROo1qgLU+l43
+XuF9Gvl7F45COHMNNy83WY8mbsoGFS2V7EmUmIjRbWfyDTShQu3f2k6N0B8jp/Zn
+9VOT4CNU72AR22sbkgnhdRdd/Buvpq0ChrQCYScKoW78SlAJXQie9xxRf8MF+d21
+m4wt034bq4daLvqcLRVU2uuAoawf7/LMgm9dYKWtrXXr5wvsciN+RgY0VqPpUBex
+xhxq+Wt1wxdarlIUjvWcmWvKhoUtddOx7w/9K5FI8BEZaYvbO8JcakQgxkmmrtbL
+5b7IEUkshN7sYUtSN6muoxJjXrakhs1nAp3LKLAyElLzROoCvZH5wpCYCA51LDAM
+eler9preRa7OVlIjEdIQM/EB+VJjOhH7jfj+X22fr370bbtXgmaeEpbEh4CkzGfE
+55hoLFmNR5jayJhAPCrmHWoDI5+XFvFAw+k0cizpmTfb1wZfBqfA9GbuZlb3ni4Q
+JH4M3Jw1G8cFZZMln00MslPLC3auGlp3yX7wGSE1PGO6bod/Ua/MhWu7sZLgArLR
+x5HtnpDDdOFOz8ysD+VyHL5Q6qkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFB0GLu54Vnz9pHJP
+K7RSSIlW0EunMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAinx1JuQ5WJYppnVgVYFW18pUrN8U29xb5bJ/+PQXGii2
+F57OrlZ93UPcVrsBu+Xy+QJ5ubKhuEmyqje7cCQHVt2DsSPockX4Y8dgq1f2TwRw
+/YZ3gvPSzJqmcUSPN0YByS+obxLKKl5uDy0N2HoR3HserYgSZzzmArd2xGLDs53B
+V0HP0fDdw4wfRCt0FSTwZYlNeIuWCtZgA9iy0eoCn/PV85ycFkzPVzsbet7AZcJQ
+JqowhnDP8LDfDLSV2+4eUps40OQkPnc/R/sbRrf/iZvb0y3cpnDbY2V7la/ml0f2
+4emtTTQQQkzKAip/MulPDBgTVvKtREBfvR3hmkRL6nClIYGb2mXcLQd+RK3XlNVW
+u9NxpRV6jPFl93CKlL9Nyco8zzl+lgt5f2wY+k8FU5OmybKet0Nkms4rWFcfVEqU
+syTYLgT3EwFu4RX3Bl1YGCWCAYL5Xj4cSHYTAYz7T20MaAsmJV+Q0q3hNMCnBaB1
+TXfyuFdq9PNq3jFamb1iTd/IdAr8bjlov7l92F/bsxx7yIRl1ti1SEccmZqC/Fnl
+Xf0BhRWIiirMBbOiBU1jHLJUpRZli5wbSKUF6x/IBlFDo05xg+K8YC5XPFLvhlWn
+dkkuEFZsbxrTdqHjOgjdm7GsenWGYAoMl/XPKh/z+rFi4lzQiPH/+CROZjGFvHQ=
+-----END CERTIFICATE-----
+
+
+EUS ntc keyid 23f4e22ad3be374a449772954aa283aed752572e
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAXro61VCJKtVFgAAAAABejANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MDgwMjE3NTE1NVoXDTI0MDgwMjE3NTE1NVowQTE/MD0GA1UEAxM2RVVT
+LU5UQy1LRVlJRC0yM0Y0RTIyQUQzQkUzNzRBNDQ5NzcyOTU0QUEyODNBRUQ3NTI1
+NzJFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxizFnfn1egyOJ6Mu
+T3VY5FecD24kcysaP0TrIl3wHjRySVHW3Bb3rzbp+B0wzAU8jp9exgzs+5fyZyoM
+YsKyI8VO6hdBE8GfZUR9kSlOX3KFgFGzZqzi+kXig5yzYoJTrvfQLN6SxzsWL1l0
+taz+GqfjCSuqXpy/17l+Hf8FJO9bTHv3kUu7ul3SOrUUD2hAy9n3bVFmQ/hf8mzc
+u1VBQ85gnpjMEZ2HVKgqnk+kv4WQQzbOR3UFd2peVStN808m8nB5PUJjwLVxFZm1
+mWSSaypalxOcUpOe7agwLEleJCy4atkC7iVmY4tpwNE1rcM+0l1BhUGJn2UeT3vW
+MHCz0eJeZVfSzgWTxFWoQFxLJTt9R+m7K7bCu4WAkPfZOjUtvC9YZqesGGQJP59W
+l/8OErDBH1rMf4V/Nn3B6H/vvoYdMhCYXaOTLgEPp9IjMHRT6XkE3+/T/a6jaQcR
+rP1OUWHjGDNRwWWt5jRU4NhZuYwB1aXK43cLtc/h/AFVu2sD5z9NJr8K6oUip8Vw
+8KeKKH7hqMIFDl3A8s2uLmF9A8vxEmxfQoezTAED8AN/w7ZLjzLcrVHxFgjPwQ1y
+Q3DMU/sp7dkLMU5809p4OHRx4WpF5wQ7+rh6LCKD+lyIwhF5wx4mJPXY7+mElQpY
+l0Pc/Wn75IG5VnvI8PQUaP5pCfUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJehpIeAAYGVmmY1
+VYxaisMMNOdsMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEASqgjS0E/ZS6uOWaCjueIzgyhdPoq9CUmDDRdw43WDRIZ
+n5ZNmTfYao8TtNmqA0RUy5nAKKZ/ClM8qlsxqCdkEggixE4ltkWOvyr6kqk91iOS
+RWuGYyU5bR3XF7S+XjGxz7oDBDkw+H2p2ZteAhDCkNQjM4hPfykKFfbpr9x2Rg6X
+NtLDiBlG1B7Lj4BqRrMjcxdAKjO+Fc6pn/17yR1c+12wKmQTna+il0YC1PQirKFv
+ekUyYieCximqmjOsYR7xeUBZ/t81PNRH5mb/QWqFqgNz7DRXFFHsMX6lwdlT4yby
+nuIMu0Xwhnq6xrJyLucKDfJJ1uIudXSieZfm+7mJ4wb6kv/hFSluGZ2W8grTXCm/
+a1L2hYxVa9b5XD71OeQDbiT3C3oe47eJvez3Ir4hptERS/pc2QolQTnBk2j/QfE7
+Ugz0ShaA0LRAsyg29TPE0EDLofAbRnJzI50bVueTAxTuBQc4YFW2L8UH1G2jxOnS
+WFRCC/z62AyYFzPsD2GSaJTRqw3dnh357S+H+u2L6mModMjOkRRT9OOj41N2oEit
+iOtoELO3mtmLLBLy/oCWADbJSQAMDG1Q1JyYjqhLgDOqsr4HsejuqWu8eIYNOg+i
+kW4plyMJnb5Hs0H2hVgRBsfIHpOc3FHC2mTMPFvYfED+FsyOUSx7hLlBYnix/GQ=
+-----END CERTIFICATE-----
+
+
+EUS ntc keyid 23f4e22ad3be374a449772954aa283aed752572e 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAm+aT1VMuZQTgQAAAAACbzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAwMFoXDTI1MDMyMTIwMzAwMFowQTE/MD0GA1UEAxM2RVVT
+LU5UQy1LRVlJRC0yM0Y0RTIyQUQzQkUzNzRBNDQ5NzcyOTU0QUEyODNBRUQ3NTI1
+NzJFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0en2pJ/IxDvcecmV
+yUZGzxoBiZUNfm/yyp1r/Rr6Vtg2E6ibDbjnCwb2DNQJqiUAF8+GtaW1VukYYKk4
+cxO3PUb9ceI2cA/v7dJXvOh9bxhi9iHpdNbPDIM3PpHVS2Tq3cl4mOLTzORAjNqG
+kfx7Shm6fKqVklCCsgeqsrcKthQv5LJDBgduVXAvwZmMDHFl6uxO/Exnzvij2bDl
+npMGera4637VP1dUKcAeKePzNfg2f6wuBBAeDbX1rRhLAC3+uL//q0vZTH/10lRS
+TtDTMSoaqrmIC/Pr2lZvRj3+sPRdpQs+Y/d1WM0pHEixI749HdxtVmN6wuZFbmND
+ZgX8LFUR3WOyH4hQOPAlTkvkXp2JZ4IRcCURQg7Jxg6OEQkKIS5LLF8sxVMXcXyE
+b90dN+uzq2dzIMhYNHUeohCVhkjY0CLYINAsaaAEJSrHDiXdDljCuViwDi/TSzqa
+jbrhYf+tGgFicLcZ2IXKBrYJfLvHWyMALvQRWx1NxMBSjR2CiwUmKJEyTy3VQpDV
+gWFW1GggR3UVbZFOqZ6O6UsXRsr1qNhLMBe+JaHKC1q7oO7fkZNcCjNpLKcMVq8z
+rhyCWjaJx7tD63/wVn1Ef1O+OaYSr5YeHCNbvYq/4OxmRTto1okuJzy4XSX8SBPW
+Au0oLBwNBACToZpqQaj7grwzS+kCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPHpo8CVyttIkDcU
+Z/bW+RX9SeW5MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAETYPUCpA6Oc+xBWTT6gJ/3Mecfw17FHyu/tbuI+GQb9S
+2GBt+RhNQg6UTFygbIr7/olKH5eHQrHXder5ZlvztMY9AKuCfGTGnkA84K3Ts+z8
+oE6JlnYG+RpdY+AL93HvYnL8ZWgtLlZkXRgZMg+nuoflKKePopGd+Y2YT45ELzTl
+f/zXvm07zwWvybrDXbA9h+oFXpLPrr98dU8N3sw5kpczR++0y/aveVS1c6YalbWN
+yfzjmXGyJrKeLLKg9Az4vB75aXg/2ig4APC36Nu/UloxXvm/1SQ9Kfl8qVSy3g0K
+TFxmj1ZzYKLaziu26qW1Hg68p9kzwfDL66esrZ0hTqSMImY47Hzstrnc2kRDwT5T
+FeGzaexBXFT+fd0sf8zcxISCvcdQEh4QybxHw+SqElgZNl6zdaA2+XOfguvslAlZ
+jnRy5ycEcDb/zgyA5w2dxQs2NFEIXK1tRC0H9v6wSSYz5pLT0wNvTeWKfNU4AWVS
+NQd3L1NyIXEkeUUZd+5p2FhunkJ+U5F3wOlbAHMgFAmOclBs87EOtR77QOFzY20+
+8fx2paeeAmkDLqJm0joOEdCpcrRREUAmG1xlt7xSvvG32C03SN1r5mASlAMCAukB
+2vDkVStYB5mVAC1dRQsnc/I6xcMj2BuYMkSDhHhrrebdrkR1gZ+Ni4sIDw7KHT0=
+-----END CERTIFICATE-----
+
+
+EUS ntc keyid 882f047b87121cf9885f31160bc7bb5586af471b
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAXvh3ypb0eTPegAAAAABezANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MDgwMjE3NTE1NloXDTI0MDgwMjE3NTE1NlowQTE/MD0GA1UEAxM2RVVT
+LU5UQy1LRVlJRC04ODJGMDQ3Qjg3MTIxQ0Y5ODg1RjMxMTYwQkM3QkI1NTg2QUY0
+NzFCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5GZWRrhChWOrEnuA
+pcH6Y8zgL5sZol/Jhwg8fx5q/cd7gfqYFqw1Cz7p1hHW8cNT54EsLMXyHxImzAVr
+SiAcgvNOH7JpyDTM1JDue1aLwOZFsGBGxTBK9LY7TwOJyRGMwiFgazNa4337EYck
+SrIMGykKsXiv2Af9RNKQgp+aeLNNHcnEUVM/lhutixsR75QTPFwQC8UUIP6AS2w5
+ytuLlHxAjbDRTFkPkgiAa1KeFmKLSkpBldwEvnvJhejzmj+j7qZ4leGHhbjJqZEK
+lEtKlytNxbGsVKMf6Nvor0Tgg3MCFbkP8y1HY/rauy6AYNxmsTQZCM7RZtAF2CyA
+i6b7ZDdyYJCM9VHcc+U4FP/DF69sSOr+oSnad6TbCaLBL8b07R5gapvIIOclVFvE
+PrfGIpldvY/+blhpK5OePldYn/bmgHlub1DmFaNt9nEp8udTcXrIOskxlrguwFI3
+Uwq0xC3Sz7iha/c7L5GbPehWvSlHeXRRM5omx5R8N+AUYjsm1EjOEkTMLJGHCbGM
+e0NsPpv3FdcQqinpNoTs08YcxsADBassJWGbJSzaWs9V46gReh2PgQoruhdWg3Z4
+U3Fp13Gq/3E0l998SqfiftrWS7+BCqSnkmqWEf+alorcpNU1eIinU/rPtjYVWI3v
+tXYj/u2VLdbG+ilMuFxPre7dgyUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKEnCgBZ1WyeLkZB
+AWY+AQ8GfqbBMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAP3Jqbci9LfFN0Fo2j4D2XwT9Fyh6a0ARRuOzWGmfMz+v
+hzT26eiQOk4BXhMEtanCjrNjY8/qUrorRWafw4pVjZiGoogMxh63adKIewmvg9sg
+ZG1eURau+U5pw9chFVk1AJu4EnGndc7xKQ7iJkc+DAdCNAqM1Ez4afeyjeAV3CDf
+Aqr5Dj5dpI6+g8MGvjwX+9EYG/pQg2hYjqm5iNe5QTBebpS1CfdEltTC3CU68c33
+Z0esuUqiR2gfGgD73hhFqGYMzxD62uihUD7ki/IvAZ/Bqa2ujpDrpFUnEh7YWzyD
+QepF14ZZt1mu5IxypVyqwhfB2Ff1ouqDX0rndUZYwqbShaalthiSDUspITrKPY6k
+OrohxYsGzPIhyYI9HwiIIf8d3ABYAKsPqcsgImEGT7RxG9A7HFwDZ4XPmYsM3G54
+NKv6DxbqAMiwMrvFPES1KPMAQSehKuD9RE/pX3W1OYaIaU51bPR7DCmmKGwo09QP
+U4W6J3u9F5T6ay3H8wYsJmMLMRhUhs0FKvmqEV1NVRkgToQK1ubkWEkPwbOPSZhH
+VkIZ/iSIt2Q9R0JrSMLv0vJNzKDvkkXqVP8JTYIGUailx9DMrq1hrrBZv4mbA2K4
+yTRSvHoHykfh7FiJbduRl73MVGw7JMJHRTSuX3ooUsw5zhsXfwZU6TNXwMr7rWA=
+-----END CERTIFICATE-----
+
+
+EUS ntc keyid 882f047b87121cf9885f31160bc7bb5586af471b 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAnDvB5f8m1gXpwAAAAACcDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAwMVoXDTI1MDMyMTIwMzAwMVowQTE/MD0GA1UEAxM2RVVT
+LU5UQy1LRVlJRC04ODJGMDQ3Qjg3MTIxQ0Y5ODg1RjMxMTYwQkM3QkI1NTg2QUY0
+NzFCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAr2C4AaMpHp3xv4GE
+eODWbPUP2rXcvCiE1KM+OHUq84P4fjk+AUT1tlsrCj/6Udh0RfMDl4U7E6KxmrUU
+Bc4TI1pnY8B4AX9xhEzTReZv3RcFFTM9n7Sgb0VLMrJMy/tF4bi7FiNQK8B3ndGc
+O1cxTL6rlwIdN9R1eIJLV7dW/Z8PoAo5xbe1YuiO2eZaF77R1QLTt2qZCCZlRD9W
+32JIOG5l4YGqG5n/sU7P/ZFvX20pcYZkHNx5I2GOXWa4GWwuj3jOA6Vdh3hWjUeb
+Qt/QXQd32W/dhpHQMTYWz/YNBHcjveQHVplRKchRCpaA5wCagV6/dK8aWtw8oxuh
+e+LQ0QG3yaZ5U7sZFI+CKGYfEjDOt0on0+fqV3ffsBFIb/tyZXHBHlt7XjuOq8ku
+n3LVzck4yMl547sKBm1PTMfTYkfIGs11Pk08fa+Tog62Km3DGnWBo+LYepmVFEMn
+ExCCKswxxYjtEBKHj3nt5K5gSkTEM7s55qijpnVeyYkMWh6rTnIAV+eM1tVwUbBE
+4xVmDra/D0UVnmQm9gJc9/0hCsathvXe6O+LgOJ9kx0OzblEnMOEVUu4VXLUPyUX
+XkOTEnKBOyjBLIzfI3YTkBVyTBW4Zl3Y6yUB+ew7IZisvBgfXify3UEMaVp04KE+
+mepipINN1NmZJ5PjAxuNqYebv00CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDNpwso/h5JRhYp6
+1mod4WkAxEaoMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAH1OygGMJuCtoF9F6AoJibtRnklMaNjWNzRIi2PqNti9r
+mAj8RO504aVdPqFsLNzqlRmPFVj5cblywoZJV5yzP0pwdIIyLoY/aSIZJuD1QtGF
+JTZ7p8mFEFlSt0IwO7h87+cdwpxdRFooArTKb5PBdm3F5MwPOjfS2qvckogt6cPW
+L/kYU0ZXxkozIjIHXNe8O1kTTdikrHlT7IiIztJkm8LCfKCkmjM3VpGIbY5nNt9b
+I/7aN7KCUvJnG+KH91xH3D2dvRZhq7uVPdradoBuTG/RGyXd70A9utq8W1jGRnf3
+EWAyNg9Pwf/2JaA8dvs58F+KI4+q4TkUivAGsKdQT+4PX0O5E+pMQL/NmwlReiMX
+dnskct/SmkZoNkfpS5lCpEcGIXHlc9tb6ygQuvgNVa568B/YPecBQG+tuU8OV4Ut
+UrxJOrlXKGlO3ZxZ2YtAdUUqaNulVMN1gRU8sK6b2+W8GpoB2uevZ2Wuk1sUy6ty
+TdJq52xfzZipbznQzxC0tVQErLd7EV5S2kpGLycOANECPjB0Svzfu3D67Qied00a
+9dMUGdBHo1RTUn/rnOzf5ekdyVrGXknYRJiaVksjaVRliv4MjuyAAp0FXb89c/1s
+vcA0MjSNXFO1Evrq67DLm527WSXRHc93NcsSWtODpAVLu9QTT5xXAk8zDJHXqrc=
+-----END CERTIFICATE-----
+
+
+EkMfrCA001
+==========
+-----BEGIN CERTIFICATE-----
+MIIDNDCCArmgAwIBAgICEAAwCgYIKoZIzj0EAwMwazELMAkGA1UEBhMCQ04xITAf
+BgNVBAoMGE5hdGlvbnogVGVjaG5vbG9naWVzIEluYzEbMBkGA1UECwwSTmF0aW9u
+eiBUUE0gRGV2aWNlMRwwGgYDVQQDDBNOYXRpb256IFRQTSBSb290IENBMB4XDTE3
+MDUxMzAwMDAwMFoXDTM3MDUxMzAwMDAwMFoweDELMAkGA1UEBhMCQ04xITAfBgNV
+BAoMGE5hdGlvbnogVGVjaG5vbG9naWVzIEluYzEbMBkGA1UECwwSTmF0aW9ueiBU
+UE0gRGV2aWNlMSkwJwYDVQQDDCBOYXRpb256IFRQTSBNYW51ZmFjdHVyaW5nIENB
+IDAwMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABA8ri4sMjK5RoF9LOA8eZs9ZHKJ1
+dXT/w28Vtwe6yBA4Op5w0n0o3+9NPPKJfsw1YDoeKZ9kwvpxTVM7kBtpKOw6NRRq
+bUAkzAfYqIwpHPPhN25JSOXhl3bn36dSCfUCfqOCASEwggEdMEsGCCsGAQUFBwEB
+BD8wPTA7BggrBgEFBQcwAoYvaHR0cDovL3BraS5uYXRpb256LmNvbS5jbi9Fa1Jv
+b3RDQS9Fa1Jvb3RDQS5jcnQwHQYDVR0OBBYEFAIsvu1ddwYPKDPp1TdrqLwwjNm6
+MEAGA1UdHwQ5MDcwNaAzoDGGL2h0dHA6Ly9wa2kubmF0aW9uei5jb20uY24vRWtS
+b290Q0EvRWtSb290Q0EuY3JsMBYGA1UdIAQPMA0wCwYJKoEcho0hAQUBMB8GA1Ud
+IwQYMBaAFDq8/wjfXgEMK2QHi8fOlQb0CP3kMBAGA1UdJQQJMAcGBWeBBQgBMA4G
+A1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMDA2kA
+MGYCMQC3Z7rH2wyIAhKM/2TopTbWUzrTTlwyjHw1ShOcovNEMgevVM/+AV1SAGSL
++n3LengCMQCYnzH/Wk4o4+0lOrnUDLNT4L7N6d3IIFGs0XARk1S/RCBoyGSlHUP3
+7JhNd0voDIc=
+-----END CERTIFICATE-----
+
+
+EkMfrCA002
+==========
+-----BEGIN CERTIFICATE-----
+MIIDMzCCArmgAwIBAgICEAEwCgYIKoZIzj0EAwMwazELMAkGA1UEBhMCQ04xITAf
+BgNVBAoMGE5hdGlvbnogVGVjaG5vbG9naWVzIEluYzEbMBkGA1UECwwSTmF0aW9u
+eiBUUE0gRGV2aWNlMRwwGgYDVQQDDBNOYXRpb256IFRQTSBSb290IENBMB4XDTE3
+MDUxNDAwMDAwMFoXDTM3MDUxNDAwMDAwMFoweDELMAkGA1UEBhMCQ04xITAfBgNV
+BAoMGE5hdGlvbnogVGVjaG5vbG9naWVzIEluYzEbMBkGA1UECwwSTmF0aW9ueiBU
+UE0gRGV2aWNlMSkwJwYDVQQDDCBOYXRpb256IFRQTSBNYW51ZmFjdHVyaW5nIENB
+IDAwMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABLq7H/y6uXdkXZWYlGAHJGjaPsS6
+cnLxp+oMnOQhr/wuTviTiCWA7gFaPOeEg5JSC944VG54M+JS0jKnlM38CMPWBKQQ
+nNEaWWMkJbhI/DychOqZ9bHVN0DmsrBWeSzFdKOCASEwggEdMEsGCCsGAQUFBwEB
+BD8wPTA7BggrBgEFBQcwAoYvaHR0cDovL3BraS5uYXRpb256LmNvbS5jbi9Fa1Jv
+b3RDQS9Fa1Jvb3RDQS5jcnQwHQYDVR0OBBYEFAPRzeQ46j2zTZQxgcHNUX1ogGLv
+MEAGA1UdHwQ5MDcwNaAzoDGGL2h0dHA6Ly9wa2kubmF0aW9uei5jb20uY24vRWtS
+b290Q0EvRWtSb290Q0EuY3JsMBYGA1UdIAQPMA0wCwYJKoEcho0hAQUBMB8GA1Ud
+IwQYMBaAFDq8/wjfXgEMK2QHi8fOlQb0CP3kMBAGA1UdJQQJMAcGBWeBBQgBMA4G
+A1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMDA2gA
+MGUCMFWbhtvZOP+xqrxC2N5ArgiBBfheFTWM5rectLY50LQJpOMaiVSFs72PUrhz
+IFX6ewIxAPL7H/hDyflrnB1kUrcbMaRxjuV8xP6h6bT6hrz5x4Y+nORKkxbz2KLU
+G3zS/IDHOQ==
+-----END CERTIFICATE-----
+
+
+EkMfrCA003
+==========
+-----BEGIN CERTIFICATE-----
+MIIDMzCCArmgAwIBAgICEAIwCgYIKoZIzj0EAwMwazELMAkGA1UEBhMCQ04xITAf
+BgNVBAoMGE5hdGlvbnogVGVjaG5vbG9naWVzIEluYzEbMBkGA1UECwwSTmF0aW9u
+eiBUUE0gRGV2aWNlMRwwGgYDVQQDDBNOYXRpb256IFRQTSBSb290IENBMB4XDTE3
+MDUxNTAwMDAwMFoXDTM3MDUxNTAwMDAwMFoweDELMAkGA1UEBhMCQ04xITAfBgNV
+BAoMGE5hdGlvbnogVGVjaG5vbG9naWVzIEluYzEbMBkGA1UECwwSTmF0aW9ueiBU
+UE0gRGV2aWNlMSkwJwYDVQQDDCBOYXRpb256IFRQTSBNYW51ZmFjdHVyaW5nIENB
+IDAwMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABCtznQzLxTR4YGov53b3NXkjNBcb
+iWeC7XsukpYkm61dxCw+bsP+jm1soaN9/WDcodzN8hlBFVYWwL79K+S5w9Xojnik
+rrnadWfCJ/LwmY1esyjQEmSbCXiukCZGfB8Nq6OCASEwggEdMEsGCCsGAQUFBwEB
+BD8wPTA7BggrBgEFBQcwAoYvaHR0cDovL3BraS5uYXRpb256LmNvbS5jbi9Fa1Jv
+b3RDQS9Fa1Jvb3RDQS5jcnQwHQYDVR0OBBYEFOuy9OMS5lKcTtDNtoIoWArlID1F
+MEAGA1UdHwQ5MDcwNaAzoDGGL2h0dHA6Ly9wa2kubmF0aW9uei5jb20uY24vRWtS
+b290Q0EvRWtSb290Q0EuY3JsMBYGA1UdIAQPMA0wCwYJKoEcho0hAQUBMB8GA1Ud
+IwQYMBaAFDq8/wjfXgEMK2QHi8fOlQb0CP3kMBAGA1UdJQQJMAcGBWeBBQgBMA4G
+A1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMDA2gA
+MGUCMBFkhoH7ATgC8Z9QAsWJ6YZzI9wsXMcLjytBY1Ae9gWkFQEnfrx43gd+/pRl
+2Mpy5AIxANhHc4NyRsFsZ828jOUthQIH0A8rckSDwNkoGWGVAuny/S9Gww6k5EM4
+EwQq9W0Syw==
+-----END CERTIFICATE-----
+
+
+EkRootCA
+========
+-----BEGIN CERTIFICATE-----
+MIICRDCCAcqgAwIBAgIBATAKBggqhkjOPQQDAzBrMQswCQYDVQQGEwJDTjEhMB8G
+A1UECgwYTmF0aW9ueiBUZWNobm9sb2dpZXMgSW5jMRswGQYDVQQLDBJOYXRpb256
+IFRQTSBEZXZpY2UxHDAaBgNVBAMME05hdGlvbnogVFBNIFJvb3QgQ0EwHhcNMTcw
+NTEyMDAwMDAwWhcNNDcwNTEzMDAwMDAwWjBrMQswCQYDVQQGEwJDTjEhMB8GA1UE
+CgwYTmF0aW9ueiBUZWNobm9sb2dpZXMgSW5jMRswGQYDVQQLDBJOYXRpb256IFRQ
+TSBEZXZpY2UxHDAaBgNVBAMME05hdGlvbnogVFBNIFJvb3QgQ0EwdjAQBgcqhkjO
+PQIBBgUrgQQAIgNiAATvuDTN8TNvp3A9fSjWpDARLmvz7ItQrDq/mmuzvzInwQfs
+YKUUJza4MXB3yS0PH1jjv1YMvaIBIalAgc+kahScQUy6W2fy6hd36pazmc/vQfG3
+Gdhw56gGwRHx4rn4TuqjQjBAMB0GA1UdDgQWBBQ6vP8I314BDCtkB4vHzpUG9Aj9
+5DAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNo
+ADBlAjApzqSmd4cCMKC7slJ4NE/7zweXZx89JzSEnEWGcq78jbbXCw6yM+R4nCNX
+phflI9QCMQCeFOAvyR+DQvThfGFINABej+1zeDVIjuZHat3FHVyV0UQVClPgMlZu
+TntipXwGOVY=
+-----END CERTIFICATE-----
+
+
+GLKEPIDPROD EK Platform Public Key
+==================================
+-----BEGIN CERTIFICATE-----
+MIIDxDCCA2qgAwIBAgIUeJCm5DJJ3LZLjf31LBZG2MOb7gswCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTYw
+NDI1MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBmzELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xNTAzBgNVBAsMLFRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIEdMS19F
+UElEX1BST0QgIHBpZDo3MRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMFkwEwYHKoZI
+zj0CAQYIKoZIzj0DAQcDQgAEdPvHsaWD2zyRR1J7mw9BrOWxq/uUKsIcktxwUGPA
+hHiCK/Y43Vv7ndo5XwSAIsOyP564zLeocOMp8RS+lj0L0KOCAZwwggGYMB8GA1Ud
+IwQYMBaAFOhSBcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBRRxzy838mQqmd0
+F81feLo31KjXMTASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAT
+BgNVHSUBAf8ECTAHBgVngQUIATBwBgNVHSABAf8EZjBkMGIGCiqGSIb4TQEFAgEw
+VDBSBggrBgEFBQcCARZGaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50
+L0NSTC9la2NlcnQvRUtjZXJ0UG9saWN5U3RhdGVtZW50LnBkZjBcBggrBgEFBQcB
+AQRQME4wTAYIKwYBBQUHMAKGQGh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20vY29u
+dGVudC9DUkwvZWtjZXJ0L0VLUm9vdFB1YmxpY0tleS5jZXIwTQYDVR0fBEYwRDBC
+oECgPoY8aHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NSTC9la2Nl
+cnQvRUtfUGxhdGZvcm0uY3JsMAoGCCqGSM49BAMCA0gAMEUCIHrLbdmf3dL7SIiA
+7Fntln2cX/Kg4oOxVpH5MJhiSaDRAiEAtsITmuEnCPCT0Xrelv/xNm1vD3VYOPLG
+T4O4Jh5soec=
+-----END CERTIFICATE-----
+
+
+GlobalSign Trusted Computing CA
+===============================
+-----BEGIN CERTIFICATE-----
+MIID1zCCAr+gAwIBAgILBAAAAAABIBkJGa4wDQYJKoZIhvcNAQELBQAwgYcxOzA5
+BgNVBAsTMkdsb2JhbFNpZ24gVHJ1c3RlZCBDb21wdXRpbmcgQ2VydGlmaWNhdGUg
+QXV0aG9yaXR5MRMwEQYDVQQKEwpHbG9iYWxTaWduMTMwMQYDVQQDEypHbG9iYWxT
+aWduIFRydXN0ZWQgUGxhdGZvcm0gTW9kdWxlIFJvb3QgQ0EwHhcNMDkwMzE4MTAw
+MDAwWhcNNDkwMzE4MTAwMDAwWjCBhzE7MDkGA1UECxMyR2xvYmFsU2lnbiBUcnVz
+dGVkIENvbXB1dGluZyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxEzARBgNVBAoTCkds
+b2JhbFNpZ24xMzAxBgNVBAMTKkdsb2JhbFNpZ24gVHJ1c3RlZCBQbGF0Zm9ybSBN
+b2R1bGUgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPi3
+Gi0wHyTT7dq24caFAp31gXFDvALRGJrMiP+TunIYPacYD8eBVSNEiVoCUcVfYxzl
+/DPTxmRyGXgQM8CVh9THrxDTW7N2PSAoZ7fvlmjTiBL/IQ7m1F+9wGI/FuaMTphz
+w6lBda7HFlIYKTbM/vz24axCHLzJ8Xir2L889D9MMIerBRqouVsDGauH+TIOdw4o
+IGKhorqfsDro57JHwViMWlbB1Ogad7PBX5X/e9GDNdZTdo4c0bZnKO+dEtzEgKCh
+JmQ53Mxa9y4xPMGRRnjLsyxuM99vkkYXy7rnxctSo7GtGIJJVabNuXZ0peaY9ku0
+CUgKAsQndLkTHz8bIh0CAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB
+/wQFMAMBAf8wHQYDVR0OBBYEFB4jY/CFtfYlTu0awFC+ZXzH1BV6MA0GCSqGSIb3
+DQEBCwUAA4IBAQCVb7lI4d49u7EtCX03/rUCCiaZ64NMxxqRmcSVdUx6yRrbl8NN
+FNr6ym2kTvwe1+JkTCiDxKzJsOR/jcPczAFiYpFbZQYLA6RK0bzbL9RGcaw5LLhY
+o/flqsu3N2/HNesWbekoxLosP6NLGEOnpj1B+R3y7HCQq/08U5l3Ete6TRKTAavc
+0mty+uCFtLXf+tirl7xSaIGD0LwcYNdzLEB9g4je6FQSWL0QOXb+zR755QYupZAw
+G1PnOgYWfqWowKcQQexFPrKGlzh0ncITV/nBEi++fnnZ7TFiwaKwe+WussrROV1S
+DDF29dmoMcbSFDL+DgSMabVT6Qr6Ze1rbmSh
+-----END CERTIFICATE-----
+
+
+GlobalSign Trusted Platform Module ECC Root CA
+==============================================
+-----BEGIN CERTIFICATE-----
+MIICszCCAjqgAwIBAgIORdycjBUV21nQRkudeekwCgYIKoZIzj0EAwMwgYsxOzA5
+BgNVBAsTMkdsb2JhbFNpZ24gVHJ1c3RlZCBDb21wdXRpbmcgQ2VydGlmaWNhdGUg
+QXV0aG9yaXR5MRMwEQYDVQQKEwpHbG9iYWxTaWduMTcwNQYDVQQDEy5HbG9iYWxT
+aWduIFRydXN0ZWQgUGxhdGZvcm0gTW9kdWxlIEVDQyBSb290IENBMB4XDTE0MTEy
+NjAwMDAwMFoXDTM4MDExOTAzMTQwN1owgYsxOzA5BgNVBAsTMkdsb2JhbFNpZ24g
+VHJ1c3RlZCBDb21wdXRpbmcgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MRMwEQYDVQQK
+EwpHbG9iYWxTaWduMTcwNQYDVQQDEy5HbG9iYWxTaWduIFRydXN0ZWQgUGxhdGZv
+cm0gTW9kdWxlIEVDQyBSb290IENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAENTps
+86FDUD+bep3kd1U5pnita316zBktOVNWxZQ+Ymua0oaR66ItzHrl19zYSGbW6ar0
+1V91kktxWDJ6UFl3MyH3yXKsCHS2O5vxMlfmdRp8tpebMorHtIWf9u1+ctNFo2Mw
+YTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUYT78
+EZkKf7CpW5CgJl4pYUe3MAMwHwYDVR0jBBgwFoAUYT78EZkKf7CpW5CgJl4pYUe3
+MAMwCgYIKoZIzj0EAwMDZwAwZAIwd02iAb5aN/pQGWdTJ7/lgMhFCuOLGtQ+ocdV
+/xmoxdIWLtggAuq9fFDfsu/vzeJ7AjAGhdk03AjHpLl0dAp7aCI8D8qupwyYTBaL
+rSJCZDMHhvNhETbbLu8uEPKt/U6/mGM=
+-----END CERTIFICATE-----
+
+
+ICLEPIDA01PROD EK Platform Public Key
+=====================================
+-----BEGIN CERTIFICATE-----
+MIIDzTCCA3KgAwIBAgIUa2PTGhcW1ntLDO+ZVX/qS9PxLecwCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTcw
+NzI0MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBozELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xPTA7BgNVBAsMNFRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIElDTF9F
+UElEX0EwLTFfUFJPRCBwaWQ6MzI3NzYxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20w
+WTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATXfDh6DUGnty9I+Mzh03wtMy+dJYAs
+kQ0hSvi0r1i6oK4xKY2AM2tc8AuYk+8/BMPOMBQ1SZQ/h/tVEP8Bv7Qmo4IBnDCC
+AZgwHwYDVR0jBBgwFoAU6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFAmS
+FlOcyOe9A3cFdQK8j8/xBz+fMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/
+BAQDAgEGMBMGA1UdJQEB/wQJMAcGBWeBBQgBMHAGA1UdIAEB/wRmMGQwYgYKKoZI
+hvhNAQUCATBUMFIGCCsGAQUFBwIBFkZodHRwOi8vdXBncmFkZXMuaW50ZWwuY29t
+L2NvbnRlbnQvQ1JML2VrY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMFwG
+CCsGAQUFBwEBBFAwTjBMBggrBgEFBQcwAoZAaHR0cDovL3VwZ3JhZGVzLmludGVs
+LmNvbS9jb250ZW50L0NSTC9la2NlcnQvRUtSb290UHVibGljS2V5LmNlcjBNBgNV
+HR8ERjBEMEKgQKA+hjxodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQv
+Q1JML2VrY2VydC9FS19QbGF0Zm9ybS5jcmwwCgYIKoZIzj0EAwIDSQAwRgIhAPwE
+qdbnrfr9ocymzXuOO2eg6CX1co6ClXm2I0kRiuCeAiEA7Co/yzwlHl1tGRxFNse5
+GYJcINeg1jak4KIt2oARTAA=
+-----END CERTIFICATE-----
+
+
+ICLEPIDA0PROD EK Platform Public Key
+====================================
+-----BEGIN CERTIFICATE-----
+MIIDyzCCA3CgAwIBAgIUO81yle53sU/x6H0c2k9h0xFcEv4wCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTcw
+NDEzMDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBoTELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xOzA5BgNVBAsMMlRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIElDTF9F
+UElEX0EwX1BST0QgcGlkOjMyNzc2MRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMFkw
+EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEiJpjt4It5CWUwac/MzKEwsKIgNuuxCKE
+QdXogNlUif2glKt4POgzIcJkVLJLyyM2Ec/140ru5BoZhDMgOA9RGaOCAZwwggGY
+MB8GA1UdIwQYMBaAFOhSBcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBQxmbXW
+LVfTBnuVPBDED3t3wGHH5TASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQE
+AwIBBjATBgNVHSUBAf8ECTAHBgVngQUIATBwBgNVHSABAf8EZjBkMGIGCiqGSIb4
+TQEFAgEwVDBSBggrBgEFBQcCARZGaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9j
+b250ZW50L0NSTC9la2NlcnQvRUtjZXJ0UG9saWN5U3RhdGVtZW50LnBkZjBcBggr
+BgEFBQcBAQRQME4wTAYIKwYBBQUHMAKGQGh0dHA6Ly91cGdyYWRlcy5pbnRlbC5j
+b20vY29udGVudC9DUkwvZWtjZXJ0L0VLUm9vdFB1YmxpY0tleS5jZXIwTQYDVR0f
+BEYwRDBCoECgPoY8aHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NS
+TC9la2NlcnQvRUtfUGxhdGZvcm0uY3JsMAoGCCqGSM49BAMCA0kAMEYCIQDyG/Yl
+jsq10e2sL/Zt8nMS3qX/A8QGEEEQoLXhylrAnAIhAMpXdvsHgjSf1cnvNHTe/AJI
+JPt4OouB+++pjcIFBgJa
+-----END CERTIFICATE-----
+
+
+ICLEPIDPRODPRQ EK Platform Public Key
+=====================================
+-----BEGIN CERTIFICATE-----
+MIID4DCCA4WgAwIBAgIUK2W4+9mqRBEoaVZRcTqjTJGlG0AwCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTgw
+NDExMDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBnjELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xODA2BgNVBAsML1RQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIElDTF9F
+UElEX1BST0RfUFJRIHBpZDo4MRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMFkwEwYH
+KoZIzj0CAQYIKoZIzj0DAQcDQgAEAT0wyOmzp6qeiNa01wnbVbjqa7ghrOVSUGsP
+jPRui9Pv5ppneRpIWX46DRqLlccuhQ8zyWT+8WRvaYVjFbI3Y6OCAbQwggGwMB8G
+A1UdIwQYMBaAFOhSBcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBTnCD8iFSp0
+kuxZsMQkNDdkixXbtzASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIB
+BjATBgNVHSUBAf8ECTAHBgVngQUIATB4BgNVHSABAf8EbjBsMGoGCiqGSIb4TQEF
+AgEwXDBaBggrBgEFBQcCARZOaHR0cHM6Ly90cnVzdGVkc2VydmljZXMuaW50ZWwu
+Y29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRm
+MGQGCCsGAQUFBwEBBFgwVjBUBggrBgEFBQcwAoZIaHR0cHM6Ly90cnVzdGVkc2Vy
+dmljZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS1Jvb3RQdWJsaWNL
+ZXkuY2VyMFUGA1UdHwROMEwwSqBIoEaGRGh0dHBzOi8vdHJ1c3RlZHNlcnZpY2Vz
+LmludGVsLmNvbS9jb250ZW50L0NSTC9la2NlcnQvRUtfUGxhdGZvcm0uY3JsMAoG
+CCqGSM49BAMCA0kAMEYCIQC1AP9ZtoaRdXQ1PbDCdXRV18T6CgycsEWuLD8FMOH5
+pQIhAKK2OjBsvdJ/02nR2NA/nn+HCE7J6KcBGnrXgrBNhJqD
+-----END CERTIFICATE-----
+
+
+ICLNEPIDPREPROD EK Platform Public Key
+======================================
+-----BEGIN CERTIFICATE-----
+MIID4DCCA4egAwIBAgIUXkxuzZRHJyFImHICvQUSWQzc2rwwCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTgw
+NzIwMDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBoDELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xOjA4BgNVBAsMMVRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIElDTF9O
+X0VQSURfUFJFX1BST0QgcGlkOjgxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wWTAT
+BgcqhkjOPQIBBggqhkjOPQMBBwNCAASIKflBTHgWAfxZ7s0DDJzHr4P+NRIOij0T
+l+3j87YOQnUupf9b11ungwK1xu7OEAMkXAZOrgC6Quh2N7D35FpCo4IBtDCCAbAw
+HwYDVR0jBBgwFoAU6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFF/F5tdR
+fOAWxhYRC1AU2CW+MXp+MBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQD
+AgEGMBMGA1UdJQEB/wQJMAcGBWeBBQgBMHgGA1UdIAEB/wRuMGwwagYKKoZIhvhN
+AQUCATBcMFoGCCsGAQUFBwIBFk5odHRwczovL3RydXN0ZWRzZXJ2aWNlcy5pbnRl
+bC5jb20vY29udGVudC9DUkwvZWtjZXJ0L0VLY2VydFBvbGljeVN0YXRlbWVudC5w
+ZGYwZAYIKwYBBQUHAQEEWDBWMFQGCCsGAQUFBzAChkhodHRwczovL3RydXN0ZWRz
+ZXJ2aWNlcy5pbnRlbC5jb20vY29udGVudC9DUkwvZWtjZXJ0L0VLUm9vdFB1Ymxp
+Y0tleS5jZXIwVQYDVR0fBE4wTDBKoEigRoZEaHR0cHM6Ly90cnVzdGVkc2Vydmlj
+ZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS19QbGF0Zm9ybS5jcmww
+CgYIKoZIzj0EAwIDRwAwRAIgIQlaL2ssGlrBMigtnjoaYdC4PaCBTZabfonH/mSf
+WuwCICS+0WCezJI4q9Uli/NNd2QbIOXCws6uYm82mf1ug3ql
+-----END CERTIFICATE-----
+
+
+ICLNEPIDPROD EK Platform Public Key
+===================================
+-----BEGIN CERTIFICATE-----
+MIID3jCCA4OgAwIBAgIUfijEolWRI6DskStNws7uEjWMXmcwCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTgw
+NzE3MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBnDELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xNjA0BgNVBAsMLVRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIElDTF9O
+X0VQSURfUFJPRCBwaWQ6ODEWMBQGA1UEAwwNd3d3LmludGVsLmNvbTBZMBMGByqG
+SM49AgEGCCqGSM49AwEHA0IABFe2JNAM1HZE7a3Cot3iSiNWYdz6/tIWI0uYpQEK
+bT69DWnxId2gA9hBxeiCPzVUgwDIhMdNIn5IUYFQfnegAWCjggG0MIIBsDAfBgNV
+HSMEGDAWgBToUgXCT9jS1aUhRxa2zgx7W7p3DzAdBgNVHQ4EFgQUHPj6cjkwo+cx
+Kc19nzqEXXHKcmgwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYw
+EwYDVR0lAQH/BAkwBwYFZ4EFCAEweAYDVR0gAQH/BG4wbDBqBgoqhkiG+E0BBQIB
+MFwwWgYIKwYBBQUHAgEWTmh0dHBzOi8vdHJ1c3RlZHNlcnZpY2VzLmludGVsLmNv
+bS9jb250ZW50L0NSTC9la2NlcnQvRUtjZXJ0UG9saWN5U3RhdGVtZW50LnBkZjBk
+BggrBgEFBQcBAQRYMFYwVAYIKwYBBQUHMAKGSGh0dHBzOi8vdHJ1c3RlZHNlcnZp
+Y2VzLmludGVsLmNvbS9jb250ZW50L0NSTC9la2NlcnQvRUtSb290UHVibGljS2V5
+LmNlcjBVBgNVHR8ETjBMMEqgSKBGhkRodHRwczovL3RydXN0ZWRzZXJ2aWNlcy5p
+bnRlbC5jb20vY29udGVudC9DUkwvZWtjZXJ0L0VLX1BsYXRmb3JtLmNybDAKBggq
+hkjOPQQDAgNJADBGAiEAjdzufne0DyVRp08H8+BeyDTN4XZLfrcZ/4flZWgeK1wC
+IQCzAiEENj2VsvBvnic8m65EtUl80yjxgVS+fHLCWW9Ylw==
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Root CA
+==================
+-----BEGIN CERTIFICATE-----
+MIIEUDCCAzigAwIBAgIQRyQE4N8hgD99IM2HSOq5WjANBgkqhkiG9w0BAQUFADCB
+ljELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTswOQYDVQQL
+EzJWZXJpU2lnbiBUcnVzdGVkIENvbXB1dGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhv
+cml0eTExMC8GA1UEAxMoVmVyaVNpZ24gVHJ1c3RlZCBQbGF0Zm9ybSBNb2R1bGUg
+Um9vdCBDQTAeFw0wNTEwMjUwMDAwMDBaFw0zMDEwMjQyMzU5NTlaMG0xCzAJBgNV
+BAYTAkRFMRAwDgYDVQQIEwdCYXZhcmlhMSEwHwYDVQQKExhJbmZpbmVvbiBUZWNo
+bm9sb2dpZXMgQUcxDDAKBgNVBAsTA0FJTTEbMBkGA1UEAxMSSUZYIFRQTSBFSyBS
+b290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1yZqFFg0PLDo
+cW7Fyis2Xe5vERxnJ+KlEMUOQnrw5At9f0/ggovDM8uCVW71T6e24T6HH6kUQZCt
+yddtsaf0tebmA3TxjiuBzBAtT6qyns35+sXuL6uZaLnjGKXDv+uByOzpmBXUSwq1
+tdSTPQ0wWWQ6v/qwKofZdxAaPCTIBw61G08rkUT42a1hPESmVFrmc5hcnn4AQmJE
+cjcOhClwIKE9OQw8TzI+7ncgCZlY3FZFKqHp7NRNnaihpmKbHvn5wXIUnKuvS4iZ
+HqSbzGBuZ0ogqJ22ruDJi+JWYUWBmgI1JO85CPJ1Q58t0ME3hM3oWeqV6adWUcIc
+IpclkYQWlwIDAQABo4HBMIG+MBIGA1UdEwEB/wQIMAYBAf8CAQEwWAYDVR0gAQH/
+BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3LnZl
+cmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwDgYDVR0PAQH/BAQDAgIE
+MB0GA1UdDgQWBBRW65FEhWPWcrOu1EWWC/eUDlRCpjAfBgNVHSMEGDAWgBQPFPXj
+IIhEFsomv40fzjcV6kVvBjANBgkqhkiG9w0BAQUFAAOCAQEAWKL5zsV8p/TZk3mt
+9m9NAqXWBDVHBnDgBE+Qphf25s+3s098vkWVLTddH3PtddF3MEYC4W8+dn4tyFe9
+mQ+96q8dwJdNabwBokrZy2beL71CXt/4jYNN0j/N9uYO4vIDBFDKRMWCtUO217+w
+xQTSOv5+mpgFw7UML/QpgpdmZy2i+eZPxDo8dzT+YJXC5vsHVSooA3rWDDzvnoLC
+cmDDiT3pG6AdjAN61MeeHHmoJavV8Tvdoa3g14Sn1lL+TQ1xaznyh520sX0dXPTp
+GqZbDzqEMiVbG7vFECqINE96/rwppJlWK91F1MZikGXr7FeF5C0JutGLb0gaYOmv
+Yau4DQ==
+-----END CERTIFICATE-----
+
+
+IFX RootCA
+==========
+-----BEGIN CERTIFICATE-----
+MIID9zCCAt+gAwIBAgIQc3HALwPpy5ENrJ49S+Yo0TANBgkqhkiG9w0BAQUFADCB
+ljELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTswOQYDVQQL
+EzJWZXJpU2lnbiBUcnVzdGVkIENvbXB1dGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhv
+cml0eTExMC8GA1UEAxMoVmVyaVNpZ24gVHJ1c3RlZCBQbGF0Zm9ybSBNb2R1bGUg
+Um9vdCBDQTAeFw0wNTEwMjUwMDAwMDBaFw00NTEwMjQyMzU5NTlaMIGWMQswCQYD
+VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xOzA5BgNVBAsTMlZlcmlT
+aWduIFRydXN0ZWQgQ29tcHV0aW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEw
+LwYDVQQDEyhWZXJpU2lnbiBUcnVzdGVkIFBsYXRmb3JtIE1vZHVsZSBSb290IENB
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2VBrQOh7Y1WHczxt1IGn
+rlBKKr0K6OZXVllr6F5vuF0lneajCRpxZJUne7v7/apxesr59LrQcDbOktlrGXXz
+OXjKBaXZBkKOO8ROIE2Ae6rslOMynlPHWP4HKdogZe3LPPViuC14uhgz5iXJ8pFf
+UQdKxCdKWTzICg0B+l46pp42Fxr83eR72O9kSzEqijkaYdoDx06yxWALguUGzS7H
+5sycnu2tAGDGFrmsQoh8mK4FUi5vce8JuWuhirCXZzmP/fV4tYndw+HJS/D7XuWk
+BWcbm0clLTbmYZ7Ae1rl1XTP5pd8Q3cHGB6R0HcXyACyE4Vjp/g0J3HJjHd3L6Tr
+wwIDAQABoz8wPTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4E
+FgQUDxT14yCIRBbKJr+NH843FepFbwYwDQYJKoZIhvcNAQEFBQADggEBAH6Ujdhq
+L8b38+swPJ2Jowu7UxcgzRWr2ayLqx8MwQkN1giSLsxcj6sHseMwqHLz2fCFfK2W
+Si5ZeyIWlB1TOJtwdpcmafFNPs0hOWWyl3D4uY2kfiQFu+GdpRtM7T+lsgDLlXvz
+t6nW2TscwGRKZA34hhvtE7294JJ56DlIcdSm3CY9MBvJ+pF2LyOC1NddHDf8ywKE
+XA9CXVmu3dpvwE+s7flQPS2E+y5EaWkXtKso2JTaHMS3PSwSJRhmknf/QtEkPZfb
+jzbhZZxVu48EZKOJL8lXzqm4hgpf7kX+WrVsCAny6AJkNn1xsQfvT0Y5OaVNH2RF
+j4ORjyt4A5du3H4=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 01
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEnzCCA4egAwIBAgIEMV64bDANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0wNTEwMjAxMzQ3NDNaFw0yNTEwMjAxMzQ3NDNaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAwMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALftPhYN
+t4rE+JnU/XOPICbOBLvfo6iA7nuq7zf4DzsAWBdsZEdFJQfaK331ihG3IpQnlQ2i
+YtDim289265f0J4OkPFpKeFU27CsfozVaNUm6UR/uzwA8ncxFc3iZLRMRNLru/Al
+VG053ULVDQMVx2iwwbBSAYO9pGiGbk1iMmuZaSErMdb9v0KRUyZM7yABiyDlM3cz
+UQX5vLWV0uWqxdGoHwNva5u3ynP9UxPTZWHZOHE6+14rMzpobs6Ww2RR8BgF96rh
+4rRAZEl8BXhwiQq4STvUXkfvdpWH4lzsGcDDtrB6Nt3KvVNvsKz+b07Dk+Xzt+EH
+NTf3Byk2HlvX+scCAwEAAaOCATswggE3MB0GA1UdDgQWBBQ4k8292HPEIzMV4bE7
+qWoNI8wQxzAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV
+HSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93
+d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP
+MIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO
+BgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB
+RzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw
+DQYJKoZIhvcNAQEFBQADggEBABJ1+Ap3rNlxZ0FW0aIgdzktbNHlvXWNxFdYIBbM
+OKjmbOos0Y4O60eKPu259XmMItCUmtbzF3oKYXq6ybARUT2Lm+JsseMF5VgikSlU
+BJALqpKVjwAds81OtmnIQe2LSu4xcTSavpsL4f52cUAu/maMhtSgN9mq5roYptq9
+DnSSDZrX4uYiMPl//rBaNDBflhJ727j8xo9CCohF3yQUoQm7coUgbRMzyO64yMIO
+3fhb+Vuc7sNwrMOz3VJN14C3JMoGgXy0c57IP/kD5zGRvljKEvrRC2I147+fPeLS
+DueRMS6lblvRKiZgmGAg7YaKOkOaEmVDMQ+fTo2Po7hI5wc=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 02
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEnzCCA4egAwIBAgIEaItIgTANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0wNjEyMjExMDM0MDBaFw0yNjEyMjExMDM0MDBaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAwMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK6KnP5R
+8ppq9TtPu3mAs3AFxdWhzK5ks+BixGR6mpzyXG64Bjl4xzBXeBIVtlBZXYvIAJ5s
+eCTEEsnZc9eKNJeFLdmXQ/siRrTeonyxoS4aL1mVEQebLUz2gN9J6j1ewly+OvGk
+jEYouGCzA+fARzLeRIrhuhBI0kUChbH7VM8FngJsbT4xKB3EJ6Wttma25VSimkAr
+SPS6dzUDRS1OFCWtAtHJW6YjBnA4wgR8WfpXsnjeNpwEEB+JciWu1VAueLNI+Kis
+RiferCfsgWRvHkR6RQf04h+FlhnYHJnf1ktqcEi1oYAjLsbYOAwqyoU1Pev9cS28
+EA6FTJcxjuHhH9ECAwEAAaOCATswggE3MB0GA1UdDgQWBBRDMlr1UAQGVIkwzamm
+fceAZ7l4ATAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV
+HSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93
+d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP
+MIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO
+BgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB
+RzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw
+DQYJKoZIhvcNAQEFBQADggEBAIZAaYGzf9AYv6DqoUNx6wdpayhCeX75/IHuFQ/d
+gLzat9Vd6qNKdAByskpOjpE0KRauEzD/BhTtkEJDazPSmVP1QxAPjqGaD+JjqhS/
+Q6aY+1PSDi2zRIDA66V2yFJDcUBTtShbdTg144YSkVSY5UCKhQrsdg8yAbs7saAB
+LHzVebTXffjmkTk5GZk26d/AZQRjfssta1N/TWhWTfuZtwYvjZmgDPeCfr6AOPLr
+pVJz+ntzUKGpQ+5mwDJXMZ0qeiFIgXUlU0D+lfuajc/x9rgix9cM+o7amgDlRi1T
+55Uu2vzUQ9jLUaISFaTTMag+quBDhx8BDVu+igLp5hvBtxQ=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 03
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEnzCCA4egAwIBAgIEH7fYljANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0wNzA0MTMxNjQ0MjRaFw0yNzA0MTMxNjQ0MjRaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAwMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJWdPAuH
+z/p1tIwB1QXlPD/PjedZ4uBZdwPH5tI3Uve0TzbR/mO5clx/loWn7nZ5cHkH1nhB
+R67JEFY0a9GithPfITh0XRxPcisLBE/SoqZ90KHFaS+N6SwOpdCP0GlUg1OesKCF
+79Z6fXrkTZsVpPqdawdZK+oUsDO9z9U6xqV7bwsS75Y+QiHsm6UTgAkSNQnuFMP3
+NqQyDi/BaWaYRGQ6K8pM7Y7e1h21z/+5X7LncZXU8hgpYpu2zQPg96IkYboVUKL4
+00snaPcOvfagsBUGlBltNfz7geaSuWTCdwEiwlkCYZqCtbkAj5FiStajrzP72BfT
+2fshIv+5eF7Qp5ECAwEAAaOCATswggE3MB0GA1UdDgQWBBTGyypNtylL6RFyT1BB
+MQtMQvibsjAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV
+HSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93
+d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP
+MIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO
+BgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB
+RzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw
+DQYJKoZIhvcNAQEFBQADggEBAGN1bkh4J90DGcOPP2BlwE6ejJ0iDKf1zF+7CLu5
+WS5K4dvuzsWUoQ5eplUt1LrIlorLr46mLokZD0RTG8t49Rcw4AvxMgWk7oYk69q2
+0MGwXwgZ5OQypHaPwslmddLcX+RyEvjrdGpQx3E/87ZrQP8OKnmqI3pBlB8QwCGL
+SV9AERaGDpzIHoObLlUjgHuD6aFekPfeIu1xbN25oZCWmqFVIhkKxWE1Xu+qqHIA
+dnCFhoIWH3ie9OsJh/iDRaANYYGyplIibDx1FJA8fqiBiBBKUlPoJvbqmZs4meMd
+OoeOuCvQ7op28UtaoV6H6BSYmN5dOgW7r1lX2Re0nd84NGE=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 04
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEnzCCA4egAwIBAgIEDhD4wDANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0wNzEyMDMxMzA3NTVaFw0yNzEyMDMxMzA3NTVaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAwNDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN3UBmDk
+jJzzJ+WCgrq4tILtE9KJPMGHwvCsbJOlo7eHiEb8JQzGK1prkPQ3dowFRXPnqONP
+WUa36/J3R32xgvuZHqAdliZCt8IUb9qYhDenuXo1SSqJ8LWp30QIJ0vnkaQ2TCkO
+bveZZR3hK2OZKRTkFaV/iy2RH+Qs4JAe3diD8mlIu2gXAXnKJSkrzW6gbMzrlTOi
+RCuGcatpy7Hfmodbz/0Trbuwtc3dyJZ3Ko1z9bz2Oirjh93RrmYjbtL0HhkAjMOR
+83GLrzwUddSqmxtXXX8j5i+/gmE3AO71swOIESdGugxaKUzJ1jTqWKMZcx0E6BFI
+lDIfKk0fJlSxHfECAwEAAaOCATswggE3MB0GA1UdDgQWBBSIs8E/YQXRBCKfWsDr
+SZVkrNRzvTAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV
+HSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93
+d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP
+MIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO
+BgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB
+RzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw
+DQYJKoZIhvcNAQEFBQADggEBAFtqClQNBLOzcGZUpsBqlz3frzM45iiBpxosG1Re
+IgoAgtIBEtl609TG51tmpm294KqpfKZVO+xNzovm8k/heGb0jmYf+q1ggrk2qT4v
+Qy2jgE0jbP/P8WWq8NHC13uMcBUGPaka7yofEDDwz7TcduQyJVfG2pd1vflnzP0+
+iiJpfCk3CAQQnb+B7zsOp7jHNwpvHP+FhNwZaikaa0OdR/ML9da1sOOW3oJSTEjW
+SMLuhaZHtcVgitvtOVvCI/aq47rNJku3xQ7c/s8FHnFzQQ+Q4TExbP20SrqQIlL/
+9sFAb7/nKYNauusakiF3pfvMrJOJigNfJyIcWaGfyyQtVVI=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 05
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEnzCCA4egAwIBAgIEVuRoqzANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0wOTEyMTExMDM4NDJaFw0yOTEyMTExMDM4NDJaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAwNTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL79zMCO
+bjkg7gCWEuyGO49CisF/QrGoz9adW1FBuSW8U9IOlvWXNsvoasC1mhrsfkRRojuU
+mWifxxxcVfOI9v1SbRfJ+i6lG21IcVe6ywLJdDliT+3vzvrb/2hU/XjCCMDWb/Pw
+aZslV5iL4QEiKxvRIiWMYHW0MkkL7mzRBDVN/Vz3ZiL5Lpq7awiKuX9OXpS2a1wf
+qSGAlm2TxjU884q9Ky85JJugn0Q/C3dc8aaFPKLHlRs6rIvN1l0LwB1b5EWPzTPJ
+d9EhRPFJOAbJS66nSgX06Fl7eWB71ow6w/25otLQCbpy6OrF8wBVMtPMHqFb1c32
+PaaNzpCBnIU7vaMCAwEAAaOCATswggE3MB0GA1UdDgQWBBS7z3zBhCExZtq1vlOo
+cBTd00jYzDAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV
+HSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93
+d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP
+MIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO
+BgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB
+RzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw
+DQYJKoZIhvcNAQEFBQADggEBAHomNJtmFNtRJI2+s6ZwdzCTHXXIcR/T+N/lfPbE
+hIUG4Kg+3uQMP7zBi22m3I3Kk9SXsjLqV5mnsQUGMGlF7jw5W5Q+d6NSJz4taw9D
+2DsiUxE/i5vrjWiUaWxv2Eckd4MUexe5Qz8YSh4FPqLB8FZnAlgx2kfdzRIUjkMq
+EgFK8ZRSUjXdczvsud68YPVMIZTxK0L8POGJ6RYiDrjTelprfZ4pKKZ79XwxwAIo
+pG6emUEf+doRT0KoHoCHr9vvWCWKhojqlQ6jflPZcEsNBMbq5KHVN77vOU58OKx1
+56v3EaqrZenVFt8+n6h2NzhOmg2quQXIr0V9jEg8GAMehDs=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 06
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEnzCCA4egAwIBAgIEDhD4wDANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xMTAyMTYxNDE4NTJaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAwNjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN6eWKNT
+MT0h1oPGh9aqqrJAJIcXVXwHcWHF5RX0HY76SDKfRWWPtVD0P5HRugwlGUKftu+W
+T4llcJjJCpeDrW07rqYl2wRHNMR4do21O2AixVbYF07XRL1uRFVmVxXNXL63w/y4
+Iqs9+rHs7hpijD1T9ghZg0MVmPtkbwQ0fVrgAh1XV8xuMCfB4T8QYzrki7+YcywH
+nBdoSw21i9ApGt3id7A33RP6PbkQ6BpJaWIqechax2jYcPB5tUwrmMhW5xXvC6nA
+HuHaEkGDihMH/pSx3fplzffuqn5bS4qUw9zQKbtevPyTXlZkH0yMtecmxo+d1rQf
+hgLvbceNhwp3NXECAwEAAaOCATswggE3MB0GA1UdDgQWBBToJmnNnyCYJwKXSZ6u
+uN+n5os0IjAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV
+HSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93
+d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP
+MIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO
+BgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB
+RzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw
+DQYJKoZIhvcNAQEFBQADggEBAKx96oNsigWFgO/1yFhTL0LAEIpfI0TZnHBSsQrU
+ez6xeDQUDxWNE0fiFEAFtzWN7JNIjhbuX4+d9zpN1h/ylsXGDj11QY+O2JnCkf3+
+jdllCJBTyV9tigIkYO8Z604R2Tl7Jv/9QQmuhcRZF13qTMrOsx6zhtOvpcX+Q28L
+FUkc6fpxiwQpTbBeoakEpmo2DJQM4Uo1NbcOij44q9TJyoyLIeTNUpykIGu7/PDu
+ZhgHSpy2zgGGtr8pKMhzwrJ+zd3UrIve+9odJfzsasILU7/YXLKAgh4PBQzTq/qz
+rTOkBix7tGVbOA2A/wSoSseL5nbk3gM8OYxuten6f5spGfY=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 07
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEnzCCA4egAwIBAgIERT2I1TANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xMjA3MTcwOTE0MDVaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAwNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPBMm1uf
+PLwlCRefXg8x3OswKQD1KEWOACw+kU1rKeXgkksLyrLdBT9l2dSo7qgmnIXEGdum
+QKiOFNxfjIwaQml6WsRZSzb5IxEPkdGAPThVQMAaQzFAsGBUx3oUTuOmpllQwg+S
+Fb40c7EALraxdWoi+8GNIe+su8jCcMZs90mC4k8FeCXKtRwN2ECk8tBZAyI5wz4/
+UsbKBv5Jv09gzCig+xFz0u4FoUHTDo/6Mtu4bBrrWzCfdsLkYpZWEuySmg07BKz6
+RSWRLHb3ZelIvnH1BdYZzGc6iJ8O2eHXXyN7evamhVAlPLTDqP8WyAkdvL3qD/ju
+49W9kvScU8WhXJMCAwEAAaOCATswggE3MB0GA1UdDgQWBBSnVZi4Am+lRK/8vEuR
+BsEvltPwuDAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV
+HSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93
+d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP
+MIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO
+BgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB
+RzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw
+DQYJKoZIhvcNAQEFBQADggEBAIwzS8afUzJKdbXnNbzbz1JAtUQkBghhtjr1C3ms
+T3at37EbsQqMXwMTE9xPNpfC1dKzLHRjczMogYU3RouKXfGofx0AjH64rmGUYNIa
+wwujWjrAgtMXFu6Ko3yHvN0yigp297SS5f1hdwrStSUl6oY7KouAuTF0dUf/dQX4
+yMvgSkOP4Adtw06/pPRkV1JWPTP+uGV7wKC6Pz6ynKocssWGOtjitlxhF/lNM3zZ
+kpStYV9yXkbC62r36vHhmi0EV46iJ8RkzRiDOI5wD13nHFan8b08m6vXaP9sQ3FM
+mowj63pQl3M9yi3OrFdYb9ELhnHpURELD8khVfBkqIih7mg=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 08
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEnzCCA4egAwIBAgIEfGoY6jANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xMjA3MTcwOTI0NTJaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAwODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOJaIJu6
+r/betrMgWJ/JZ5j8ytoAA9RWq0cw7+W0e5L2kDLJMM288wYT+iEbfwx6sWSLAl7q
+okXYDtTB9MFNhQ5ZWFLslFXbYigtXJxwANcSdPISTF1Czn6LLi1fu1EHddwCXFC8
+xaX0iGgQ9pZklvAy2ijK9BPHquWisisEiWZNRT9dCVylzOR3+p2YOC3ZrRmg7Bj+
+DkC7dltTTO6dPR+LNOFe01pJlpZdF4YHcu4EC10gRu0quZz1LtDZWFKezK7rg5Rj
+LSAJbKOsGXjl6hQXMtADEX9Vlz1vItD21OYCNRsu6VdipiL0bl0aAio4BV3GMyjk
+0gHnQwCk9k/YPU8CAwEAAaOCATswggE3MB0GA1UdDgQWBBRMS01kiQjkW/5aENNj
+h6aIrsHPeDAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV
+HSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93
+d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP
+MIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO
+BgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB
+RzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw
+DQYJKoZIhvcNAQEFBQADggEBALMiDyQ9WKH/eTI84Mk8KYk+TXXEwf+fhgeCvxOQ
+G0FTSmOpJaNIzxWXr/gDbY3dO0ODjWRKYvhimZUuV+ckMA+wZX2C6o8g5njpWIOH
+pSAa+W35ijArh0Zt3MASJ46avd+fnQGTdzT0hK46gx6n2KixLvaZsR3JtuwUFYlQ
+wzmz/UsbBNEoPiR8p5E0Zf5GEGiTqkmBVYyS6XA34axpMMRHy0wI7AGs0gVihwUM
+rr0iWOu+GAcrm11lcYzqJvuEkfenAF62ufA2Ktv+Ut2xiRC0jUIp73CeplAJsqBr
+camV3pJn3qYPI5c1njMRYnoRFWQbrOR5ADWDQLFQPYRrJmg=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 10
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEnzCCA4egAwIBAgIEM5ao/zANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xMjA3MTcwOTI5MTlaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAxMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKRlTuyM
+988TVLch/7OdoQpY019PVwqniuplnAGaS7C+NxQonCcjh6dLekLdGYkYEv8QlmG5
+Kf2117ft7AEJQCS+oa5TBJmfIZilvlu3IkbssMkqR7Fpw5yzC5qRF07xo7IURgwX
+6iSeli2kg1cPj0lUwxQMmgOVZsayHLz83Bd0hPiJzOkYs5oRvbXZvXdE7W1uumqu
+ufJPxpHezlbIHfMw1nLFKBIm0O9FfOtAmE63Iw/i6Flouz05QWo6uzRSPiwKlkfX
+44u+G1TKfMzj/g18uU4Im+xrq07WyIZ1tyTXgEHfUW9kreWHudO0DKpgQ680VGNd
+dRYjYFPMPCzuGqcCAwEAAaOCATswggE3MB0GA1UdDgQWBBSwgDWbWaqTiACkrr/R
+DMcM8BsbNzAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV
+HSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93
+d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP
+MIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO
+BgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB
+RzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw
+DQYJKoZIhvcNAQEFBQADggEBAI1H2eG4Wpv/GQ41omXwBPANExcgxZZIPIFqFws4
+pAM7o1w/RBCFLaCINrCITbxSGE2YbKOMj5VUY84IbCkQqemlLVmMHoRZmP6StQ8/
+DeSeFquVCRrKCwfdHxSKV+sYjCnVmwGjkQi/VYsILsQUN8V3m3bjBp5xpJhQXYSe
+sRap/3moZ5lgPAhQg7AC/ezATwvOSbYxKn8Ib5c59+c2q27U8/nMOj6eqUxRjUNZ
+DjF5iN8j8CQdOrJJQpRvfSflceyh2jUjMWwC2kdON6WrBwSk0OQGK6ljaUFp4B0I
+BE4Mub0MirzHqc2B+NLeJ5bmgPTTP1CKH9YR4Nn04QYcT6o=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 11
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEnzCCA4egAwIBAgIEasM5FDANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xMjA3MTcwOTM0NDJaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANpJ19VO
+asFjdFHwNZWj0RWszzqYaFooM3Ewj7GOmDpIWLwNZt5hCmegtZb2pI16XXKjmNt6
+lPMk/N+SU7kqxVjJ+zf26IUa//KPalrbQ9hHM8r4uFQpqrsmV/C5jA/v0CtsTFYZ
+a1CNhyfeiDGKOkJmvSQO5Td2ADg8eEu/ojU9k7hFt/21aKFVK5sguqpWkhSnJELq
+3X4IvhPqcKekxj5PL61otJonLsJQPSeSZcmTd09GN/I9ISFwCLjFhsjprjViJHXu
+SBYwqw+fqAD1CUB3cFYpLMrlnW+yJFxyLXPAkU5dqSu9Z7K1c2cvFGkx2fp8z8IE
+QGqU9umJ8mnvHh8CAwEAAaOCATswggE3MB0GA1UdDgQWBBSwKYEVe218wyEAFjgL
+iYlQUkNQ5jAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV
+HSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93
+d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP
+MIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO
+BgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB
+RzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw
+DQYJKoZIhvcNAQEFBQADggEBAAnneKcE6RRyN+IKxCqcGK/HfRjn+aRLTzDrKmPt
+mjLSfzWcDGUZZ3gcb5cnedduQYqPVblpOk+k0JzaEs/bFxdbYUZ4VpyNNWeSuHkS
+0nZMXVGFMhzoYnlbZFR/zURgKW8SFPMpyzVej1rqfj3SJlDc7A6nFdX91f4ZUbNp
+/bNvMFueCiS3geZy8lzkoHLQNc/TPfmcLkaY+3VxBr3CnezRh6w99FIelL49qFbg
+jFBEmnshVu5gI0TP6arOUpP+LCyulo/Hb3lBKLxgWAnp7EEy4ooFLJUWdHG1yWF/
+wq+62bUqNS3Xo0aHRYn7xOxvDYLTUHvrLJ+AUtcAWz7MzZU=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 12
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEnzCCA4egAwIBAgIEIe/JKTANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xMjA3MTcwOTM2MjRaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAxMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALULsMl0
+TB+WYghzTlkDDYZ47nCLznJTMwcZB39cuE5WEEVaya1nulYxZeD5wcDmRQnootxD
+DZefiFHP/lcmiWomA/qnwobFFRYpORmt8JYTjbVO3cjF1wWiF8O3u2M6jRF8rW2V
+wYy97qvEaHLsuGepTwZmv5d1hntizHh1v+NP4zzltMO4VRSicP8PdxS3rekVmXQZ
+3qG17+KBwJHnQyibxIS0Vez7Bz6K9DIyNfnUtrTlwfOVwTJObhaI7wUrx2s7kh+G
+vxxSr6Rx77ezxSrDEjm6XVgjLBMIqb7se3scNwllG6M3qWqmZjuFYkKiuTDwRSYL
+dQ7TrWFfFbG3xPkCAwEAAaOCATswggE3MB0GA1UdDgQWBBQ3Nd3I4wC4F66+A1A6
+ku3f3xrHGjAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV
+HSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93
+d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP
+MIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO
+BgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB
+RzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw
+DQYJKoZIhvcNAQEFBQADggEBAJX/SG76Ix0sw0Dys1Hl+DxBUltgxDYYeCa3Fa6Y
+t81JmvMmSoXRa15v6h+FwiETaAJP4vR2VxSxiyeX3mQfk25NXWGuwP4Vu3EVY86l
+wmefN7S5waLRoTE1uRjbD7LeHdi8tRzZdgBSbw1xePBZ/qc1bJC49LRQqWnf8OIS
+XOD/2MThp26AwZeka3qGhwVghEBdwgwqFLHy0ZeanmX2hRFn+la15K35mxajKZWl
+1qS/c0u8/wIWvO2bU2KkPWtrKW78w7cm3ht+lUEQANjocnR+gzdk14f6B07SY/Bd
+gmwVMhcrp/E9DK8TQvjxDbTTs/bfHC66ZbPOgqIeXNYguk8=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 13
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEnzCCA4egAwIBAgIEWRxZPjANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xMjA3MTcwOTM3NTFaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAxMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIz8Rlvr
+xEWhF8znIg3h2zT7jQyvKhglxxEmcjkmL7qvqeWRwNptqSV2yIkFfKdhGAv2oHNu
+lmM0fkk9apiOehVR/vLvoEAdXFqLp8l5+TpLGRTcLyTu+ON6zOIr827j2jw1no+L
+qbsB3C5u8F/ngbx+x2XTYWFJIGBJh0x8v4nGH8LZWftnXHQk4Ere78nQBzlF8Yud
+8XTZD99J/MrK1twuYFT+3fFu82DTqVpkw4F2ZPozlX+j2XnLGTK7arTkEMpX1EWa
+13+VM9Fp9mWmUrrah4qMop4hhTogc/l/p2rDp9gP5QPUm3Rg+TkERKCrx7Zrw/u3
+BSDhrPkGcJGMq6cCAwEAAaOCATswggE3MB0GA1UdDgQWBBQlg8reNo9pyA9Y00pI
+st5lPf6vmDAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV
+HSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93
+d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP
+MIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO
+BgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB
+RzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw
+DQYJKoZIhvcNAQEFBQADggEBABQm3vpFSEoU3htlSbQ18X7Jnv5DbeTmoEi8NXfc
+W4qTaRYKC1+efgH5ChWpBi9xqGrSK7xls5n9xlJc4CVuKkkN7fd9EiP5MxNZP7wW
+Z+Zbd4NIdiyyXtHdI9mQsV01A1qilhXNNTxSmTgjQPZU4i8Pt6zujzmUkSZq8GS+
+juH/O1Fjr9qeH8tFOQdHH96L2W7eWW5xHGF7udUCkGIiBcLPPgNxz46VW9q4Ycj8
+uxg2E5XULwFTzbJXa8uqaN8R+T2S8NqJBVO+gkh/purXXbrlkhLCMeWtWOrDiTXR
+WpiTv4ENvd8RP2vlzO2AaVYR/EumoR/qwdIcovppwgTyyOQ=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 14
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEnzCCA4egAwIBAgIEEEjpUzANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xMjA3MTcwOTM4NTlaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAxNDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANWy64+P
+I90LXKDBXUN24noDgP2OseUsLCcNlh6MD2b9YubtazZg/72LBzUXlHb16cLqTHYv
+X+7dO165F4WnJLxMBhe4OWYzbdncQHZAhxv5nfThcB61ofVkf8V4ecu5c7KnK6uo
+U2smRqN6pbc+MqTI8D41yINLORrTY/H30d8r7jkjP0c4Tz4tLo74PJU5tN/DYMiu
+uIthEedXr2RtwBpo2qkIx/gGiJTp6ZHFkAUGjdmw+HET5qgKsEXbTBsj/zihBgmM
+LhhOHPQqQ+podT8mSZmQSOijw0BgMr6xRXBwvL46k+EiY49vGP9QXDX7gnzl0MEv
+J/RcD1nIpKhpeEkCAwEAAaOCATswggE3MB0GA1UdDgQWBBQiv5v0l49PRaTp2/cp
+2KCK3KCoLDAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV
+HSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93
+d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP
+MIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO
+BgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB
+RzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw
+DQYJKoZIhvcNAQEFBQADggEBAKE+bzD+G1DZhqUCnaLUAlN+ZMFJsPIGwjPRzZFb
+MQLZcvkc9M3KV2pKsg3MrD+6kK/+XEYL49C9eWRNrUtkZl1SORzUELnUm2E3kezx
+plnCU5lzsuCS+iYptVD17uFYcybYMOAMulCRyjMkYG1cQCdDczST3VWPzON5+6+v
+eo5Og9RRPsVByHGoHf5lcmTi0vNKvX4QtoyZ78VQ012c5Q3A1fEldLl4IFN+sfu9
+Af3o/as2GQs3KvgCOB3usgnRvojBu+MLxw4pk6ju46rCNTe1XIwHi0Y2nxZbUowL
+dldRwQEbQhhma2FCecsgBmMKqzLsi1B/fkKeiF2fE7mo7YA=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 15
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEnzCCA4egAwIBAgIER3V5aDANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xMjExMTQxNDQzMzRaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAxNTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKS6pgcg
+OQWSozVbMkdf9jZkpGdT4U735zs0skfpjoKK2CgpLMO/+oGKbObm/DQPRQO/oxvq
+jJNBKz55QBgKd+MoQ6t+2J8mcQ91Nfwqnm1C4r+c4zezJ1Utk/KIYNqpFDAzefBA
+/lK8IxQ6kmzxcIFE4skaFsSgkearSZGG6sA9A51yxwvs8yUrQF51ICEUM7wDb4cM
+53utaFdm6p6m9UZGSmmrdTiemOkuuwtl8IUQXfuk9lFyQsACBTM95Hrts0IzI6hX
+QeTwSL4JqyEnKP9vbtT4eXzWNycqSYBf0+Uo/HHZo9WuVDUaA4I9zcmD0qCvSOT0
+NAj4ifJ7SPGInU0CAwEAAaOCATswggE3MB0GA1UdDgQWBBR4pAnEV95pJvbfQsYR
+TrflaptW5zAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV
+HSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93
+d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP
+MIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO
+BgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB
+RzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw
+DQYJKoZIhvcNAQEFBQADggEBAAnZDdJZs5QgAXnl0Jo5sCqktZcwcK+V1+uhsqrT
+Z7OJ9Ze1YJ9XB14KxRfmck7Erl5HVc6PtUcLnR0tuJKKKqm7dTe4sQEFYd5usjrW
+KSG6y7BOH7AdonocILY9OIxuNwxMAqhK8LIjkkRCeOWSvCqLnaLtrP52C0fBkTTM
+SWX7YnsutXEpwhro3Qsnm9hL9s3s/WoIuNKUcLFH/qWKztpxXnF0zip73gcZbwEy
+1GPQQpYnxFJ2R2ab2RHlO+3Uf3FDxn+eRLXNl95ZZ6GE4OIIpKEg2urIiig0HmGA
+ijO6JfJxT30H9QNsx78sjYs7pOfMw6DfiqJ8Fx82GcCUOyM=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 16
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEJDCCAwygAwIBAgIENc6ZkjANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xMjExMTUxMDE4NTdaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAxNjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALmNQtUo
+RiADamYT7QWhvhFDGufeQ17FX3KBRlK5Jl7CkDXUAbU4qchLtbh1RQ+uj77e80MM
+QQjYUWQE895NRhUvRxATZzp8fyNjBMc2O5HA4P2fx6nsdRUhpgpgQoOc93rt4yQ9
+D1H0esw5Z20ja9Upjhi5pHg8YLKhzRsyEkkJ1YRGSe5FOdaqBaWQLBR7TwYtUUVw
+jq4iTsZai1HXpBhjJ9qPO558eW+LLbPSvbObgpveuo0r+ILLrdt112+o+jE2gmiL
+zSg1Uzo6aKSv335ZfYuWVAL/IqWkpBj9tLVJ8hjDkI5mvc6rPi/l7gpKHZ60Gihu
+0HtsESWB/a6giNkCAwEAAaOBwTCBvjAdBgNVHQ4EFgQUEoRi8qDRbN4ZRvEABUSw
+VbwRPRAwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g
+AQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3
+LnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU
+VuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAJjJENKPWl9U
+OlDLwzJNyAO+9QW311+7QhH2cQv8LOPXv+s+3/5uMNhOCmCfJieUoq4Vo6Pibo8K
+bf0b0D0DHVM5SpOucjXinCcX18g6M7IPr3/ABx0hWP5NQkAExcm5R2XGsBua2hUj
+BKzjqe7zgHLugt0V7DDPC7jmdElOHTHmK5COItL0QysrOrWdhrLTrP+HbLRRJbO9
+WsYNWb4w6m7X2rvd9CJmjr43aShAYX3s42EmjvBI7ddlHQUwAcbrgt3zmrAtYzIW
+2Zg/BQARfBJIPuyvcLJVzDjJJBjUxQsUYYSZAp4I1hRK8tTWBf/tcKN4jfIiGTfz
+H0PQrjHMW64=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 17
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEJDCCAwygAwIBAgIEJCe5vDANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xMzAxMTgxNDE4NTlaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAxNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALDzzG8C
+6MBIZQEQJzEGlkSoFfYx7UFnbAXOP35eXkDfs79tmXh/Kpvo+LgDXAPVwiJgcphS
+MNTOhAes1kA/cuGk2/BpUE5W+owIB6cEUm6sHjea5VnrS7rZ205lKzsU5ThJel53
+aLzgv/r4AMYfHyJid1xSbheQor7PmgcqWPag8wQrUnn+mVe8rcPJclQotmsV1SY/
+AMUorEdxbeaTgZkP8jvCjywzty2Jtfju75BTtg0jBDEIHWVuqOwWx879nvWpBho8
+khOU1FPZrHc5fVm0w7ryWCZvZVWUacMAeYfVqDOOEPxUzZMDA8NwB9bh5sY/Nrz7
+oeSUr7Ps2aJAf/kCAwEAAaOBwTCBvjAdBgNVHQ4EFgQU7D+NTMEqvoigGQZOimK3
+AY+i41kwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g
+AQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3
+LnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU
+VuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAJ1qznUH6nCB
+1akxmhMYWBEjQsqHdy+lwYYMNHl98s9AnHWMXzpGcGUJg695D9hQrw4kHpjn9a1L
+yxTA4NPz3W3k5gk4Jtp20yJeClGXEIcf86WsJwyC1gDGQfV2k+vdzlhpfCJLVq1i
+Ec0I/AlwOJBgRvLmldPuYAqtDTE0drffAkhaMoEr5d+X5cC1iAsvpPw0dL+AqqFh
+3+YVDtrjdmhcHtopQfzM4/voZr9F+t+WBdg+NIfZHJZud/ZX+4FrNco91wDueryU
+Az7W27Cet2fUk9zv/GYMRVrS8lO7K76Leawt4fNtLDBVQLlj+3RYyU5cK8aj8yAe
+KboVHBoSukQ=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 18
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEnzCCA4egAwIBAgIEW1RJ0TANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xMzAxMTgxNDMyNDBaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAxODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANs3+XqT
+S/vs4eR8quyXIgPFixBg75cWbSjl7yXHylta8sLrmog5xtMdtjtUZIE6ko34PQ0r
+b2nLnviHzmKsVGcEgVqB5DYR4p1/WcuQXY+POaWeWnHUVI8wErvjfuCBkkofL5lE
+wD+HaznTRE9ZMFpmRGGbC5oVsGSd1OGefjeaIK3DMZFQle5YQgbFh5CccQ8nTOHK
+cPqcgEI/ncAZMecGMZFmXvgxn24tQ+PCutuBvmY1BYt76US5MnKr9rKpcBtmygRY
+xTMWmEETr3lTlElvEzDuMmj+cjrbweMZldS1r3Vf+hCGrDidcQidu3BY5v+ZifUL
+Db0ekQBo2NVFUTcCAwEAAaOCATswggE3MB0GA1UdDgQWBBR1aP8m830RJoVntoZO
+xyoIyBiJHjAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV
+HSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93
+d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP
+MIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO
+BgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB
+RzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw
+DQYJKoZIhvcNAQEFBQADggEBAMuw0E9SWAmRoMyYeH4QfA0Eu2DHHsAVvpTWICqN
+YCWCnDku3PEUJpAS02Iu4MN2EUjywgIgccYjawfiI1xQ+qKJWVVXo1rScfRn3g4a
+LyfBzZDo/ka7dK1azNDI2ieRrh6pPvIgYAriipX6kVTNV2tTpQVF+OoeXOvqMyIY
+sIpwZCIwSTvgwMIQblik9IQt+rxh3fqESlAZ9NztFnA+ftTS1YeeQR/OjLxUtUX0
+lbKHtjIuvokyEAj1C+TMASt2CMsRuSf5U0nVA4Ekci+XzCIhvPnB2860TMvq+hzy
+ANAzLSZsSZOo8KYY9ZgBdksLpPPrOYTFSMXO+oom5xh5r/Q=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 19
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEnzCCA4egAwIBAgIEEoDZ5jANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xMzAxMTgxNDMzMzhaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAxOTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJKGIVvI
+WUB2oSXmfiSzIzKWcBiUabZRK9wBSyidvI+EYOplPfuH+rzSHiz/kh20pM8bu6c+
+gK+79gp5p4K9P4egK2zsqph9zYzFwNmIBjOaQiYUPp9QFtZ5RP6XMH1eyYK8UWVq
+/6WDmDKGgWrK22MAxV2LYCCQaEa2LSN1MkVFEeRC1lRDc7RoCEW2dR4tbiDCdFjO
+WznX1nBctU8uupPdaiPclL8PH0bX9L9XuH/OJ8HN1zns/6v4c1SokJYfHqOYn89R
+uynjnV3X79+65mm2BVZFsCPV0Q+i6dj8faVvjLA9hubpILw74g/hOA1FSnOfl95Q
+yVTEffwXijRd8qcCAwEAAaOCATswggE3MB0GA1UdDgQWBBQd3g9AbRIsPlpPhh+U
+h2yeGs3TfjAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV
+HSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93
+d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP
+MIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO
+BgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB
+RzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw
+DQYJKoZIhvcNAQEFBQADggEBANAH4pGKFW0codMGIaPVYWmsWz1zCe+AM+e24dKQ
+Sx6VXDrYYoMdoO3D+loqVDs+zQHguJij93R0k4VgZRRIruODk8EDhppobt0boXl4
+hB2U6uwERND/8rUtF08WzA1opau1R46p7Wgyo1yNYcYKSSd21+YgiKMglYH4bz1T
++Tvse5I5ujZ1BvTlfkFBNnx09wUmGaL7qn/FG8bnXy+oakkIJk0OhGjVyQ/nRw1Q
+HSRcKv11cfpqhHR4ekZsJ3RiHWRZgD7uVXuHV6LNcKKK3pJHBSLWaVnPtCG3a5iZ
+AjKPQ3bIOLfNC+k1TcA3z3FjX/SBKo18D0/Y3HWN8UzTg1Y=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 20
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEnzCCA4egAwIBAgIESa1p+zANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xMzA4MjcxMzU4NTlaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAyMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAISatv1/
+C6U9+bRoGnFIRJP99ETyRdBaZZbjMzomJ0+n6VsyZKU8HshD1D56e7td3nOqMixg
+ygaBK3Fq6jgR4nEDafH8bXvhY+6nLYzqgWub8htqAjOxyw9AVSJaeByr1Xo9OZJX
+06exrdSikAW6ANcn9khpEpl3kUB/z4qY+tDgabIYQokVvEZ1KCYXbAKTQaV1j2CJ
+DYExo82lQJepEATiVpXlM71UCxpdpeudiWKYRWY7oV5EpyOcMzolYVfQ6c/2EDhj
+6CxlYALKzu7xgNLXfhUCJWPjCK7NDr86n5s1tKHmJUdbHyqnes8h5p/7MVAn+BuA
+auk5MR7GY5TfkwECAwEAAaOCATswggE3MB0GA1UdDgQWBBSP/UeIDiOaOjog3hPt
+8QHogqnSHTAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV
+HSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93
+d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP
+MIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO
+BgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB
+RzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw
+DQYJKoZIhvcNAQEFBQADggEBAJWePIX29bPvG9qnOWWGOuIsUhChgOzaLA/LkJEQ
+HnRMPUU8hO9RGMuFW0QN62eSKel/H0M1ty3XtjMMxRg7DqJiRN7FgPkEN6gCX9TZ
+lyNyxz8gNULrhQ5fB3oorQd0Miwo4zJ+GjW3tmCkfPzoXz8h6gRlIRtY+6mvaVw1
+ad0QgF3Dp6R1yY1jmCHqG0w26PU97G6Lk6l+y9cJzmgVxVgmYdRXQvsb0HVn0Vg7
+CYcq9L+VXwRmLH5YkehVS5r+VBXYCMiTCOLZ4GAtYkSQIUqZZk4lgM2uBXBdqqyo
+0JAQaJMmyFG7GkB1SItEl3RGdLIX4pdbwRcRecB+TOE/dWM=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 21
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEJDCCAwygAwIBAgIEANn6EDANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xMzA4MjcxNDAyMjFaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAyMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIFJOXEJ
+l01sCFDIpgME7X0gmxuI9DW2lTlNrZ+05kGAAqOUCWbS8EEDyIZZYA7qjipcaXxf
+mJ9i0zoG2hC1AHXzfzzmrQcEE6DhCeFv5lKzk8Ta/FV5zLmRXppw9cBbzg00HWuI
+f0PEM0vY7GopP/q3N/d6RQac0DRdPVNOhNApApw3omfAzC2Nzj4sdvIaQPXY1GOI
+Koy7ktgjVoUmZ1Po8FHni2geh4EKWyHvcZZiqCCN/ZTFWhJqES454Ncy1zxZkJX6
+/1K7wOjFs9zZBNBd4A1cURLz33t2YCq+XcD4+JtViJokxU7boSNK5Ji+mwLLXIBI
+0dyQIQcFuvwOKDcCAwEAAaOBwTCBvjAdBgNVHQ4EFgQUoMnewI/TmotZxGvL6H/Z
+lIxV+XAwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g
+AQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3
+LnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU
+VuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAMvISZvt0QDC
+8OW67Lcn6FKjl95hm/MdhNX3QwkRaSYFCpVDW8dk622SFrwlzKoMAnNSlpwf7MOl
+9n5Fkd4gSlyMOdBIwtd53mAOVRCRIhHgrrfmi76saLsaNQci3kjnCDYL4U68o1dQ
+41zlCko8vb7EO5/2fBKG/DS1gzGW1y3ctEpYNn38TunrDYgkUksNKaSZtmrfXNeI
+ZavtFtxRQo5v5VNUqOkyfvn4dB/og+xFnqOCpi7FLNAfG/1DnLhvheHk5Ii51oKs
+iOIcij0vGiyKbozlNvHl+0xe7UOT1s1U6YdzWz6YmzyCEjOkz720TenG99l89UZX
+71FyouYrMhw=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 22
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEJDCCAwygAwIBAgIEbzMaOjANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xNDA3MTYxNDI5MjJaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAyMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMP3SruH
+YcDDzDP2QOwNd6RGhb/C8zO+37ifQeiDC4ZxMc5chxZiJN6N67R8xdwWftmM7W5G
+d3kFipZAFwxDJr0ndoVyhMLLsugdV3hBi1u5i2KkT1RPsZuigpEekFE8fR/D5G6z
+bNlu9gejaLDQpAfGB1ouVZekKuDoA9nSxKVGyZWJaObMfBnmUse5KZKOrQjBu7sq
+Aljlipp5vK+c6pCb/x2ntSgLJzef7GrrQDCgUfs7OLq65VAhnyW5hhRTy52wUp6g
+maTPnL+NPWallVlEwVdayO9hMMBCnb6c67VsbRQvaAi9hfXGXZY/+WmpOIpUgB0Q
+Ey+91F8R20wpt7cCAwEAAaOBwTCBvjAdBgNVHQ4EFgQUKtcOuQlixUGlXi0VuFv6
+0oYVTw0wDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g
+AQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3
+LnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU
+VuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAADJyV2Sc1nZ
+P8nEvTa0E6cYu4+PRnLLqdDRmAM3oNjx0Vg7lq/Vdg61xvZ4SpKig+3qVGsM3pYJ
+K8BriSU+uFiUzKyeMdz5O8B9Sf/oW9EiVidq15juRGEIrQmewA/rZsTlPiHg8gUv
+gWc6YzLbicKtlwmg2tQDNDAoDc1212aG/XI8ZXzgC+9IS7Gtgkqx9tV81gw/jO5H
+mWQ3ti1ps9Olvd4cQWmpYPFmcIv+vklzfnIumLLl94JUL2Zp72D8aL9ZPDjLKj5R
+zuEzciOHcoE8Gp5YR35syM0sRzBUMKKqCI2GmRSODV8MMI1jnSjIfVSAvpsgaC8b
+gAA4qxUCCHk=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 23
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEJDCCAwygAwIBAgIEXYw6ZDANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xNTA1MTkwODM3NTdaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAyMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK6fFwMe
+1o2UdDbcqcVPGPAU/5E7j2n0OrUYOFOiL+QxER3HSkV3NJLuuVRDWF371+RsSJpf
+/Q84Zh6xNj2Cz44nlkswhU7oFcxUSzJK22OJ/HvEP0uXk4CZvzOtQ6nL3lVUlO/A
+j+NvvKCx4/kRQjRswPHTqs+iLmY02QljexW7bwLzUkpJI3+XuYmfdWVFDg7XDJ/p
+5DJ7hT5y7bpfyJ4AhJg5gTLG0iwO1u/L2861mbSBF1Y3K1fw2tJUH1BNuEvs+7qF
+jQgJFYgLlp8KhfVh+LJT5Cs5L3Z/mM2ONxAacmXMhwAgMTfoxhRwVv+JPnY+h257
+gxM64v9KgzI0k3UCAwEAAaOBwTCBvjAdBgNVHQ4EFgQUpNGHJjZOouOyeEZM3H+t
+lo4BXUswDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g
+AQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3
+LnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU
+VuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAHSJf3zl9/hn
+XhfH+Ijq47GjiUJJnvJwkhA3OogrFw7/uuJXgsVGKS+jAto7GacgqxAqdoOY+RWk
+1p31x53ezE+WpJMV70Po69hXPhFtLo/Z0K9GCyodw8URwatVSTK1Jm3FVRcvs/QM
+bdNFyX2nzqLL32hkw+B3/hvEalqtHxlaq6Q2w83IViZLpM8zhB19zDuZrHOi0HMd
+pjcT1GXBYmUY9IdxGVpyuFXSEYkmTpS/xE4m9zmxhKXCI1XYnZVupKfmVkN/ZUcd
+OV3SXCQBQsNJE5+KpY1pEaQvzqlFACH3TOvr7eeG1PCeqrThCYEluSxYTv0ITGyt
+I0umB61/vwU=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 25
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEJDCCAwygAwIBAgIEFLjKeTANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xNTA1MTkwODQwNDdaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAyNTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANtaHXlX
+JprVsWAKov/mD3JPCnD9pKnoI1ODtdgOfVNk7IHHHuqeX4GezJ062wzT4HXfbwLu
+kZ34+fyUbWgaq/Ig3MYpLwfF/V/0S+XOiFpJiIYK8Vr7404Cw5Inu0gkGUbN8+1F
+JXC2jjtvVA5CbzqHjcA+KRNc9PnTyhguSCFMcTxpVLAemIlOX5uvDnAF3yfJG7HI
+QtyUm+E757DxRX2MKe+/BALh5IgPyBDS38b2t7G9c5gA6jH7XVMd/7zEtWogHhWE
+7lNXqlgJFxYGkDDT8toy3qiOusagHz0yTnFS2R4Hv9BGItdnM/MxzFNN2AnIvz4H
+hkuOtutced3o+y0CAwEAAaOBwTCBvjAdBgNVHQ4EFgQUl+XRzYsEl8BLRlWoacjz
+DvqJOI0wDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g
+AQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3
+LnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU
+VuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBABKmY19oBOwZ
+fJPhhjTGmxJsUM2mYAb7HvmLPp7iE0iGjqgzMRl6xCCpd77kO+m9sr4OFf2JygCS
+wO0F+ZaBWJOFtlHhyHGyjvspP3tbpGqCO+HO+JAICjtD78MzJZBMbpDRBsccKe1I
+WvBkP2h5QHBmaw6ACTbFBOrPv/1VQiP2nLF5QzHfyHAVIzemxLVlhptk/Fnr8gR6
+ronVPD7EYTdc4SgIxQaKuktrrnXZ2O6XALLUkW3WjOLetCR1HdoBpBiHfgxYNg6b
+zHFZ7HdLTWnzVAHia/BhIfFlucNNo6DrHk4yKVOy5/yIXgI3pjR+HlRXz9WEtTiu
+dQh/7jQ9tss=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 26
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEJDCCAwygAwIBAgIES+VajjANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xNTA1MTkwODQxNTdaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAyNjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVaDtMJ
+CHVl6pnnRAPGGlZ/LoIXC2j74FH/e8FJvFmtb1FGDLkbtBJvjym8QrFC9eU8Ljqc
+Pcu/hquZZTrDl997847fvxFjkX4rIlCUSjoZlrKhVFvoQdHhD9XaIwAj2rTzWGwj
+2tgJYd8PGVOHKW2dShlAthCsfzahXlli4G7okfHCgQqV60/uHXPQ8Ep0oif+119I
+gfmZRdRfQ2Hy1c5W0mBlR7CgCtw0kE2S0xNWo/uVByK0Ivmv7tGoTOlmwtV825H2
+ShQL3SiHoU3cf6OQV76x0UuhrMfk+mz9gwXFm84kXUeu8T/NbNiUiydDx0hbjlr8
+Vjv0e/qN9EoWVlECAwEAAaOBwTCBvjAdBgNVHQ4EFgQUSnaetdk8gzpVAPHygTJO
+7wP76z0wDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g
+AQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3
+LnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU
+VuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAKmCYBT716GH
+7tvkl2nAyw39ksJ2AIuqVMZuMkN9TAVAGbSzZ7NfMP9WNoaFG6/5CBvvISV4KB+x
+8SF1cBzziwV9RUNSNNK8rfkaHhPqZTQfQd2faBfAxJlP59EpLME0mI4/2tp26tXi
+vxbHAGBzfJQQmMmIDSc5Q/QzIFUsfQ9Z1LaPoZwg0oww0OVlVtWwbZh2Zdv9uSlx
+UgAhip0BKL9HCLSXBo77e2UpjybACypV4aPYBvoSLeGe2D1QIZEpQPNtSXG9q5Oc
+cuSdjfj4eqEwaKHCMLKBt+GiDNLR+Eo/eI0qMDoYww30e7V7bMVWATilgjgCy7KW
+aWHAjatvTm4=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 27
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEJDCCAwygAwIBAgIEAxHqozANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xNTA1MTkwODQyNTRaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAyNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMZ9YGRD
+ueNdXAEeWAjS3yF9/atwqG//kJl+Hxmgk848qv7HfQyTymTuUM10lgFdDxo329Gc
+e0vuo2nNINVlHc7x0VTNvSwQxDFNG5GqWebX9mUSbK9FRdpNyAWBvHmY5nfVeiNl
+qQY8nDW4QmLlLJLy4XwxPLLblyu6OMXzFJbl/4DqaBEm1lJcgNMLQrKIzHbqY6P2
+xg6T3zBy5H0FARvQ4QJU+Wjhw74BdWHntGl5v5Hp7uRlkEnPs/HsB1DZ7hzBWeHU
+8OPTwZIdporTeYDkz2vv4K17j0e7phJkrzUSD2Y4CKn023jmPgvr0ShBFxdOhUde
+F13ovzZU0w/8GBsCAwEAAaOBwTCBvjAdBgNVHQ4EFgQUZZV8rhLvGxqHXZUalCWx
+vB0rO9MwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g
+AQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3
+LnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU
+VuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAE5SYxLxwnfa
+kCfnOQGPwn2P7Cf1OUAyheX1XDIO4sv8Qt2T/2uobVCk6oW1Grg1cgKLZzhPnG7u
+F305hlqNmVhM3kWXN+RpQvASHV5yszyOVXEGagGTDJJNsvqqOHU/og4TjwDU4kh/
+XPYo/u3xZQCsveXX2pwD06NNCmJyqXY4fPrc06qzPy3Ukqm4Tod533aEZJeikO7l
+fvPp/X3diDCO4+xPdULW72iQnPoowG7265jFiK6eJPc69mlH7fHBCl6DBplWDdn9
+x4yGYNVIa8fmWFVoiUSFK94kt8aQczBXSULS9b2OjWTL8p7FPq7kWwCR/wcDigFB
+UwrYTF+zN0Y=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 28
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEJDCCAwygAwIBAgIEOj56uDANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xNTA1MTkwODQzNTVaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAyODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJaB6YDb
+sqxxKtzlf4e2AJNERvNn8ZtfAoia0V2Cx1ODPr9DOBlyJ2axY+g5orNCd3W7CIMt
+bBb91c2ssi71u2y4dav2Mjyr/7pp6cPT0BrpYE9wNml1+5ROYb5OjUGgMvBUlhxC
+7uDFWHShZ1fgTKWdklgdzYN9mUFc2Z3cHrmGpF7bfk4mEQdpb2qrTu5k38IW40vz
+1VxIFlkSPXtOaxhjmi+qbOlLzlMz1/tYAPXiJBcrKECOLwB5v52eAhCEDGi/SiK5
+g4SAE8qHfoX9XVPZ/b09bH/sSIJ5lJBe7t/kHh4xSKOaLZPeXjpP+DzFXfe1OhXQ
+OdwqqvuhxgfLB4ECAwEAAaOBwTCBvjAdBgNVHQ4EFgQUbe1wq4Qa6cIqA2R/yNFI
+IYjT2uMwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g
+AQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3
+LnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU
+VuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAKLEoVWuOdoN
++eMatz8x/CUBDdbqgcPamaR1XzFBiYEPx7S59nL3rOxbRlx6YEDqIh3BoJNaIBZt
+NG5XEVioiAxJP+r1MGSdOHAK55fEkgcsuyofzjuWCFJwgPkBglCB1Fs4zL37ngat
+zPsGnHuqyG4huZN8U4CX5CadRlJ/cpLP4qrVxCGKUIQtZdGawcGA9V0qZjr2OyOm
+hvSB23JRJglrQ3FwdX3CqjapDzalLnSzaQBLhlIIlf3UifORDWxAEevnH3TShkBR
+lSVNB3GXRn1T35b8chPKu9aIYCBW94yVG07uVm/UE0SnwE5YIxMsG161TpgTYw61
+QzoKKOCDmKI=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 29
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEJDCCAwygAwIBAgIEcWsKzTANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xNTA1MTkwODQ0NTVaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAyOTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM1CQ3B3
+aJCs4znGLX+q6EO7LHZdJ2hcBEHSeDYakpBitMlcxXITyGTpHLuSsRUfF6NGpOdU
+xmbyo+B+qf+5yA/lTZR59zRYxkv3sMpOOIId0xjoLW/jh5A8pzyj5Z20jv47PHyJ
+WZvoe7XkOab1hDpBLUoyHxVJVUSLccoLX9pHXIahyZnd56AaoWQ25l8LBIdMDbOX
+BUa9gGFXBYxVdqXACyvOcXPIh/OI3E1SZ8aPpcR/zuPYSRBxzXdC1DFiyyhfW6Xg
+2qDpEP3OVmxbv3s3AdUWYAkDRBlf1yeEVr2YSDgvxfzq6/k6LsiMVyJyNRlpLpDS
+P4acNNixr0mdQScCAwEAAaOBwTCBvjAdBgNVHQ4EFgQU9T5PR14NPG4rPlbjroq7
+lTEiYX8wDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g
+AQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3
+LnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU
+VuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAE32RSaqKXQY
+09Oqvl0RnpmnqXd4X7opdam1XxbohB7tsC1hjsvZ0zSXZ68MJUhqaoEZRAShS9xp
+JZ04yiaYB6cqMPa/APlR1+CW/Ff7FroRRaxF4Jia4EBVooWb18uR4YBZkCyJNBkn
+ch0YltTMKpBga6+n8nJUuS7idTyw38cts+gPZIs8jS6+J4/3Bkq25V1OmbQvjwcA
+6xZ7Y5PPGPUCWhIS2C1syRGjOG8xVEjRwC8KwbQ9tiH+LjbWsyJHC7rltt7bp4L6
+YNmtpBF3sdtUopVbw1d3zXi/nJydqpXJJhgp6gsj1lFqE98oBwamuAUq6SlW7o1r
+MCA/Va9Mn6E=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 31
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEJDCCAwygAwIBAgIEX8Qq9zANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xNTA4MjcxMjU0NTBaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAzMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKxXFBma
+vasFsED5VxnkRpjuLhuEV6yf/m7Y6Iv7RwZlxEoNOvLd6pbbhZIHIbWlnRlurOff
+A03nhGoX71Dg6yG1OPl3cHpWczOc1Y0mAp+0+IdTcmFJ/nh4+TS7CgIXCYVB81eP
+c7DLhFhRV9BU3JJlsAh0EEVboiixIfL34gV0QvKAzEj9i36gbxeBX1/OLR8tOZYA
+t8BLKOdt4WRQoI9Zakvs6BCoxcffz2JMyhAx6Ys9+H/WCnlVc+9ytCStQ4Hlmfee
+fge4HHJQK45EDFoIz4sTdDMVYz3NNn16MJVNrbleZ4rLdgTij/52OBy5ORogfj6v
+R34oYyWmsTv1J9MCAwEAAaOBwTCBvjAdBgNVHQ4EFgQUpDhL7jlmUzU5zQpzbR3S
+whNTjb4wDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g
+AQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3
+LnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU
+VuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAMXxs2M/TTJu
+yq9Zy0ftbNhmgIClw0FpnDs9JlDs8rVAlbYsH1G5QtHOoYS0FZiNioJMAEphsSHv
+g2FSA2P2F8G2mZRKcj+GR77YwSpPlnD7qg9wHXjw9y0bsmUrVqAJTJsikL5VVRyW
+l4tzM3TQylZWztDK8mXd9XbthD4bGxNmSeo1bhC11vUNplU8sQNZwwhCTIptc4jF
+1MmuAC8DhjMFdiXDnN40fq00tW6y0I3STVnbIg5jm4u1+4Xw8vJGT02SR/tVJT4Y
+XMYLgCg8syHAfPZt+McGsH8OHw7mD695SFNOv6x41R9WZS04DM/ETJC1pzYNAcWO
+FuW5d3CuMCU=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 32
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEJDCCAwygAwIBAgIEFvC7DDANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xNTA4MjcxMjU1MzhaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAzMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANXP/Ytm
+oI/kJjA092EE6+RQ/Oh24AWtJwJEz5i6cmlEZYMcqrUR8AlhqaJqOZgZrTrh6A/T
+cfJT2z+4E/x1jKHdNQH0y/P7Td8uubl1hfY/1AT8lSKbw0ObBHSwRVnjt6XhELec
++4ULU2HivNpiBxrGSkm4hB/fEyfh0k/WL3GXgmcqXVxlpG/9gBuJ4JYRc1PLZZP7
+HkdCUY4EBseSpVAyQcjkIngAQtNxehbHFCAKek3LUfxoTP6Uunl+tKLRQA1uxsxI
+i1OHZb0f0FRQ3wxeDmpy2Z3HEO/4powLbzTPQDSpxrOSZ3wj8u+ES/m6tK5Em+sl
+lVNeffcu455R0LcCAwEAAaOBwTCBvjAdBgNVHQ4EFgQUg0O6whKdeCmcS1E8w95h
+A3v8yVUwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g
+AQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3
+LnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU
+VuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAKpqbtAIm8Sr
+5NZDeDECSCF3XHO49Z+il/Zfvv/5woT8/PFZMdm3nl6L5Aekq3LehYiuSfptnna+
+E850eJg1EpX2cxD8MgTc2iajS6I8CO1I+lINyEuYuIQYsYlfse8Llmw+cc0YoyZb
++fqgZaSkClroYPpASfqSjaWjUxUq4OfJFdxMvSftgaJa+z3DuUO0yQ1L7EkmIAW/
+MRsgl5vFaCiGxpJkEHxzKlfaSbw+6K9RW6i0eY4X/EY2P+97TxEwGMpmZlovuz1j
+V2SHlAopMyqGj+LT9WchxfGCzTnYRGuEsBfS7tFBC4EmTlDr1jgEdi/zeLIOPWS0
+shWiMlG+0BE=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 33
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEJDCCAwygAwIBAgIETh1LITANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xNjA1MTIxMjAzMTVaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAzMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPfxxGeU
+blTNpv2K9ZS2m9Abqm3s5ouDOk1K1rMmuNSBa1VbcdE9/qaeR6LHCXI2j5WX+kdw
+A/yjwXeAZSV8yA7ygblRAnvlPCznQbQ1dY7QMcG4mW1J7i5eABAegxi3ZRCaVEDZ
+WCpKhZfqzfRknC5uF0aMMAgL8V91/IoEl0YFO6i8Rg3joJLdMEvOK8bYEFjJWYc7
+YEObcviconBA7u8P6b2qdS3aIh2df/s0+/+uiPjKVj51EGhR0tIIK+pM0nCKcpjr
+mOj8yTZEr6offdqRR2NBiZfBoJDFE7LKFpt+PzM3l4n5BACNwBAzVmZZTh5JQnga
+pOKnX/h+aUqwnUECAwEAAaOBwTCBvjAdBgNVHQ4EFgQUdvp98MB3M9yM4k6O/xlt
+J3iGaNowDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g
+AQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3
+LnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU
+VuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAMp8iDz7KC4J
+E275CZjm9wh+Mv+jDUeg0LPIcch8A7wnwX1i8hXlQUO8q0+as3bbBizGo+KUMTUp
+DJ9hsH7YqBbW1QcLJnOAGynOz0wIvQmqrPUTwoQTjaoEKVjT8SeNPluFGukb22kz
+jW/K3584JIXgRF3MeVWAKqF2SuH+aB/kzZXZQ1NH072ZEomV2i+R7JQdRg+As+xG
+8n/o5x/iPdGq+A5w3lr9VlHZ5APAV7EiUJjDKFyeUU1k9WA1TmDww5KL0JvNA8fn
+k8cwHaxdJ63UEevSAN/vx+0CPZ1T+KxTN0nOff+hLjYvtVU7Bght+KRIi9j/zn9I
+nQRoO5KMhnU=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 37
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEJDCCAwygAwIBAgIEB4HLyTANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xNjA4MDIxMzEwMDZaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAzNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMLailaY
+24SX+8A3SLQW1ny1gtHXO9cQcvEBtWyoIGdKbDWQ1Bx1q8wQQBYhIFTQepXPotQL
+vcwAQFae14bdLl/hi7gXiqvWHX3O7HWWvswSW3UXV6EjaCH6YRuhfTnZavFBYP6h
+Dc+k+u5Wq9y/q/nS0niYcFZpbJ1BL+3G3e0ZMsxnqtdGxhMQOrDNMahtisiBDLE/
+jvEsoXtrn/GXttUAZ3nxx1MYCazaeVmF59g1zaBpzuRjg0yYPYTP6RolTK0Xf74w
+hfY63F61PSYHEdoRj9mB0JO7VE6cJGbGsGgEDyLzi2Dt1hodMNtnpegd+je7ns7j
+pExQSTYCGig4AeECAwEAAaOBwTCBvjAdBgNVHQ4EFgQUL1crut7E0Y4Nkf9DdftG
+jGG4x68wDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g
+AQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3
+LnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU
+VuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAL4rq9HarSij
+LQK3hDSOsojjRI4w7H9v+onyh8Cz68IVgLDkPtbVIAe//ElyByB8lecamHb+qY4s
+SjnEydotMbvZSeEDMOOWqBgDzubqN2RU2FWDZeHcMXIruWVAKKrB+YtKoZeNlo4+
+Ix+a6TD1krBxcW5VENtWlBdXUxLqgRvXdwGZ/hG0QAfwNACxMlBAJruoLLatk8gt
+FSjiuir7a9a5vDykJBVQc7Wp4ZQJhuctaGo7BOjEDS4lAmniAf7rYJjuixPbYsqD
+XpZuBODkdGwnty9qc3vWfxDU1zlpXFnBuHCGgVdk4Ab0Pm/1mWbMCLdUSpt26LkT
+MC5345ECIDg=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 39
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEJDCCAwygAwIBAgIEddrr8zANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xNzAzMjExNDI0MDJaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSAzOTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIoklAvm
+GqTgeYk4pxLXG0hE9DUc8hpICF/lwI80g8SNU1mleSQpFqW5kK24rXhRE/ebix4A
+Fi9UoPhBGhBcW9TPytMWsUwGy9OqU+ZnX9CSGFtRAT+Z62fpe0mDcooYeTrieyKe
+C9nT4ILbPRrrV0LHU8XBLBVoapYkKrhZ6ePTFdb+RAbibpoQVLrDErRG6RaTkwGs
+2lyle/MAfPFAgMsom5z7MsYze8DzqcRCOLLxm3Wj8dvVst+TA5gEJ+4mcps3+MmJ
+RDvubFK0eZphIBi60/Jq4PW8K8O6WS1ZgGQAKiTCkz7pRjRp6x2ecfWlKjD/zUW3
+ZJysSoCgqsV9xwsCAwEAAaOBwTCBvjAdBgNVHQ4EFgQURvJvljMGkeVhty96Y9zj
+oFFwOfswDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g
+AQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3
+LnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU
+VuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBACIOSV4IDxBI
+Q653+Ry3GZ0MmEDOK83J5uhjmQsXMc2mQr81mwuJt8YAd/en2jC5QcErB9FRj/SK
+1xyqwcJJFhpq+VkGEJR8kiggHrbQQA7hhpGCprqzF14MqsMzz0bKFza1uREZC6fd
+DBzpvADDcuvMPm9d3xK6YcEpypxN99E/yhiyM3H840FkqyOati6HXTr0qdcC+tAp
+2yN2m/iM4X8mS4XfEmVHRmvblutBEN6848mQqm/eb0XAAZzgMkEquTiAEuTj+FHp
+NN1qZYkAqXWAimZcEeQQWlkZIbGoD8QOpHOGx/rNBWUkJKFI4ipr+OgVfiHPQoEg
+3gPpvPKMZXU=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 53
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEJDCCAwygAwIBAgIEC/Gs7zANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xNzA4MjExMzM4MjFaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSA1MzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJWs4L3V
+UiRqEu9B/aIcIU19FA9tnhyFG4mYTUBt4ho4FfeYbE3uAzxpNo819VlzId/pt7FD
+v46Da3vs+ut29keREQovnS1HpOxZhWVh8j67Kr3BFVSzd9OZRyCDMe435cRHwP/3
+W0LXkpADFwaF/4O7/i2vzK04HK0Wb2vwIZFIixrQGVwavn/7YFeh5NQm8OU51XLE
+n7GIXhHAyUXV4RpKcHhbDPuw67obUqkvulswEHe1M/hsqtPaY5cWeIl+Jjv9/kp2
+Ikl6eDclp7yHXc13Xvh2vqfrfeC2Bz3SPWLX4h9qptyC5td0tONfCMbzE9wk7D+C
+eeM9b6W9kRE+f1MCAwEAAaOBwTCBvjAdBgNVHQ4EFgQUKneg40LLxscu4/r8Owp7
+zqfJzk4wDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g
+AQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3
+LnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU
+VuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAGhDSonPnyer
+gyjkb0D/mejWOyOWAlM2YCktqx99hxWg8m/aIMRBP/xlVkd1GR4pp3TdP//EE4JQ
+Swwk4A81K+HY/WRflX8R5+SdaskKAXWqIwmXILVuxgXJCnAkWAoX3ZK+eneWSZ9i
+pGp0n33b2lyNh110IitPpgip73Amj7Jp5oRfN7SxeAxLYgxnjjvsnWOd+OZ+/K2A
+GX+rGzlGZ36RvaiGUY4cJyHSdoQh3sGm8xjqTf2pddoWydoxmgifzG+01jLRi5Uh
+Gbyq7M+wuG7aFlZuPMN4tBltBZAqxk9o4Vsf5uT/wjdWjWP+V62lutDM8lFdq3Tq
+egGHxNUN5IY=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 55
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEJDCCAwygAwIBAgIEekrNGTANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xNzA4MjExMzQxMjRaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSA1NTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKqqd07P
+hld0loCD1hMlbAW9F9jflzb8uwWdc3mzCpmmPAE3qGUFq3IyBMxUzJKi1AQrjr51
+czUc5UukP7EpNeD+ewv31xvv5ZDpLbXmJhLfkq9tD/hSn3Ipkl+JH4r+ho2m2pGf
+RW4N2z+YJjLO0Y2KKdcFT8ErpQDciepZVY/cPRjYei9H2AR4gTSm4CnAfWdli/BW
+Ukm2ApDo5iz1Sis4eysUen62Mgi3zFEnjEa0C1jLhJJfrUZvSfqDckYDRNrVWO+D
+iIu/Dso9D9bzAfYoRK756J/nflqqaRLStTgQK/6RF0+SIuRIGylxZNDjAid1MabE
+lTg1AltwZ5quwDcCAwEAAaOBwTCBvjAdBgNVHQ4EFgQUNHyTyr3tYWjGH9yHQKc1
+PkZ1FhYwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g
+AQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3
+LnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU
+VuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAJzWoFwYEuLk
+RbVjk8OarbaPwNJ0vqE6FXgMCaChoFTMk7I900LAymJ2d7ymfMDyCe3YPEi2Dg3D
+keZQUeJ50rki6vzVQgVbRy77oBQ3JEY+E0q1kSu4ifBKJ7Otpbiri4vOnCuc6TGn
+lsHQBFR49gYdk7H6+o3DmUCNl4of1b6/cvFOl2YAxujjeQhd+G5gYR/QIW3bCt8m
+dg2DgLuVqOVmpVqajdafh6LygfQPkKwmycyVsTrlIDprnvD7iXsRCJZyZiz0u6ZG
+FPBeWiEUXlkjOUoR1EvU3NNpWkkFXiLeZwog6aNX5dQ9OgIhvcnpz/gzltm31/Va
+4FQyxfGuToQ=
+-----END CERTIFICATE-----
+
+
+IFX TPM EK Intermediate CA 63
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEJDCCAwygAwIBAgIEH9B9WDANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE
+RTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n
+aWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD
+QTAeFw0xNzA4MjExMzQ0MTlaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF
+MQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll
+cyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk
+aWF0ZSBDQSA2MzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALkHRgiW
+Vjfv9aSAZ1+5jqsOBr+02Ki2X0fCZL71YSNiz90P2vud+iSeVBTSjDGrHLd3DlGa
+MYxe1DPF3PVk0QNMXVledT52wOuGp5s+6uoSX+4W/zU3efC4zEJvvGz9qiwwDO4W
+H6FgjTvVE+Rrn2pbrzW8n2lIvHnJLVGzHiSZfayQrmS0rAHrrbJSFvts1x/Al4GL
+ky7RyCgqJw+KxDNZ16x4k0Gv9PhboKyUc+h/Hn+2w5RcAlKTZukLCfujg6KRUJek
+v51ekPQzRf8mw4z5x2Bd5nmxNNWJ+4CGoG+/N+mP/n2gaYMZdadQzn6l+/WtIKhr
+6QWnAYye++AKbEMCAwEAAaOBwTCBvjAdBgNVHQ4EFgQUomzurJX6M2cyGdDCp3Y3
+EC+1P/IwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g
+AQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3
+LnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU
+VuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAEVQDi0bnfgY
+GaCMLvCnwhtqgc/rCSk2VYGlZ2QS8q+MmnegR9Lb3vZAsDT8c2TgvrnK1pHrFbsx
+vZ9xloJkUt+aCIZ/8PR+wFZrsX0P7mLT9HgJDrCciN4b/giDto9IQ5WBtp/Fr3oM
+Wg91QZdONHDtR/X7UYZMm6Ev6vQAdnZkSHnZApR+0yKoBJYININZfI9ePZ+s5Bll
+meTVjyKtCG8LgcGDDq8Vaodl36VQya5TEkT3e6rLvl9XyhxG4R3xzNEK/0x5Rh4C
+ZQLB4V09fbciSfsXpOflmO5rF7kDBIJyLhwWONtnsW8m3hGI0qhwb0MoLQ/OW4CA
+7wYXq7TEzK4=
+-----END CERTIFICATE-----
+
+
+IFX TPM RootCert 008
+====================
+-----BEGIN CERTIFICATE-----
+MIIFCzCCA/OgAwIBAgIDB71yMA0GCSqGSIb3DQEBBQUAMIGIMQswCQYDVQQGDAJE
+RTEPMA0GA1UECAwGU2F4b255MRAwDgYDVQQHDAdEcmVzZGVuMSEwHwYDVQQKDBhJ
+bmZpbmVvbiBUZWNobm9sb2dpZXMgQUcxFTATBgNVBAsMDEluZmluZW9uIFNNUzEc
+MBoGA1UEAwwTSW5maW5lb24gVFBNIENBIDAwODAeFw0wMzExMjAwMDAwMDBaFw0x
+ODExMjAyMzU5NTlaMIGIMQswCQYDVQQGDAJERTEPMA0GA1UECAwGU2F4b255MRAw
+DgYDVQQHDAdEcmVzZGVuMSEwHwYDVQQKDBhJbmZpbmVvbiBUZWNobm9sb2dpZXMg
+QUcxFTATBgNVBAsMDEluZmluZW9uIFNNUzEcMBoGA1UEAwwTSW5maW5lb24gVFBN
+IENBIDAwODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKdYBZJDm3wk
+4f43wHZFbUy7gawds0C615qSx7nxxsObjo8hFbGIiLEqU3NQUQlpxmuC45iOgjZZ
+GcEkdUfJJGMevybeSzDZD43EAU+k84FOnYDM2z6SpJmxzfwjpflVR9Hc4SAzqpsQ
+7qrnIvtBJNZKjCzMvnKkI3lCZrSRS0fT0FK6SQmFCL+oPy+IwQvSK2kqkdXRBjGt
+KQPvMWK1JccVOGCjX3IcIPkTgchfQCYBd73DajFjKxpGzNv0L0RHJ/8Rbl9zJqto
+QoRstt9V7uAs5k5iwk2/7j7z284i71pgjSlhx5ZnBj/1Fai+w2iiZVpwiX7UhqSx
+QfFF6FiuS+ECAwEAAaOCAXowggF2MB0GA1UdDgQWBBTRoAWWqkeklbC3hkoHGjpM
+rdu+uzALBgNVHQ8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBATCBjwYDVR0gAQH/
+BIGEMIGBMH8GCCqCFABEAQEBMHMwOQYIKwYBBQUHAgEWLWh0dHA6Ly93d3cuaW5m
+aW5lb24uY29tL3RwbS9DZXJ0aWZpY2F0ZVBvbGljeTA2BggrBgEFBQcCAjAqDChU
+Q1BBIFRydXN0ZWQgUGxhdGZvcm0gTW9kdWxlIEVuZG9yc2VtZW50MIGhBgNVHSME
+gZkwgZahgY6kgYswgYgxCzAJBgNVBAYMAkRFMQ8wDQYDVQQIDAZTYXhvbnkxEDAO
+BgNVBAcMB0RyZXNkZW4xITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBB
+RzEVMBMGA1UECwwMSW5maW5lb24gU01TMRwwGgYDVQQDDBNJbmZpbmVvbiBUUE0g
+Q0EgMDA4ggMHvXIwDQYJKoZIhvcNAQEFBQADggEBABlv8CyAoWqgyMTm++2CXEbt
+9xI/XboYAkk6BR5QJgbRBFVyaMPzQ0UZd/EXbML2i37jhM+C8ZvZH55gnJSxMgCZ
+Z0PWKJMD+jwGB6oMGO9uNq0JYiY2xto+akWrR12FO4dE7JuuSQeCjoaeh69+jl0B
+qw38lUFadM9hEHCU+1sPm5CgnBp3o/5ynD0DOB5lOVuE1orHFckvteq8yXWuKYiR
+FV0iin115/1Pi5SsvfKyIxR83EqklPoxyn9gYQmcKg4TDcJwM2ag37AfyAuQDctL
+q4F8q/AXBPWMMXId+6KPIYDXn7P7tOPMBAG47vr3ow9kgKCF42lGb/M7hRhw6gM=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Root CA
+===============================
+-----BEGIN CERTIFICATE-----
+MIICWzCCAeKgAwIBAgIBBDAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEhMB8G
+A1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJR0Eo
+VE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUNDIFJv
+b3QgQ0EwHhcNMTMwNzI2MDAwMDAwWhcNNDMwNzI1MjM1OTU5WjB3MQswCQYDVQQG
+EwJERTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQL
+DBJPUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShU
+TSkgRUNDIFJvb3QgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQm1HxLVgvAu1q2
+GM+ymTz12zdTEu0JBVG9CdsVEJv/pE7pSWOlsG3YwU792YAvjSy7zL+WtDK40KGe
+Om8bSWt46QJ00MQUkYxz6YqXbb14BBr06hWD6u6IMBupNkPd9pKjQjBAMB0GA1Ud
+DgQWBBS0GIXISkrFEnryQDnexPWLHn5K0TAOBgNVHQ8BAf8EBAMCAAYwDwYDVR0T
+AQH/BAUwAwEB/zAKBggqhkjOPQQDAwNnADBkAjA6QZcV8DjjbPuKjKDZQmTRywZk
+MAn8wE6kuW3EouVvBt+/2O+szxMe4vxj8R6TDCYCMG7c9ov86ll/jDlJb/q0L4G+
++O3Bdel9P5+cOgzIGANkOPEzBQM3VfJegfnriT/kaA==
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 029 Issued by RootCA
+=============================================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEVv0NbTANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTcwODIxMTMwMDUzWhcNMzcwODIxMTMwMDUzWjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDI5MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAxmiJEQsOfFoZlRzWl2jwooUjcKloAgTk4wQmWZqW
+BhqY5HG5jBDmik8sSCLTvEraNRgl1fkMQn5f80Oc6HWveLV4yKPZtI46N2nhoVak
+li3shZZLdblA2w8Vs50nBq+ARyssbmSY3n/K1u6AblnEA6socaNvvlEX9YzJUuAA
+CyQkez3/u7LE7HmUi9rbkPnziJs0v48Nuf/f3wJAJMyalkgk3hZpZU+Ky+bpiaLG
+vcb4V7/2o4KPdtFK3xaBKI2Cx1jpCQIR/2x7BN73jOzjDSeFGB+dNwAoRFN+tYX2
+1/Tp5qQ8RvQ//E7YlybuPd9LRG7j9ybvFPpPF93sgNtkDQIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUGLGvcLk/mRly82JVapo/v0uyTg0wDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAgQiOzCuv7EMV
+rjwH9usWev5aAVCgk8sxVqKcSqfzGzlf8X7ihVnJyQI5vmZK+go97rCOfpr3mOMN
+KjEdbD9y5mYeQseakrUnzk//futdAoMOoRgMb7iEzNKY735YhTlqqPTno8OXjuhF
+SeMhrPHUZfjWXkiNoyc6eahNEQ4Z232LyFrCEwRMIi1TdYoKGHxDe9CegU0Eu9Qy
+ax5ETcMHr/3PMJ8w2gPBsQMnBzFyahSDnZJBB44Xn54wv+qiy59xl9SvaAJgrK0y
+4MWDrmQlrEUguxLBUOMcvfDXZTEh72jbFoV6vA9HzQbaLFyvx5DteP2XwTiTE0+p
+3wQNaFszdwLCwOHARQ32+TzpFWO+4cSTFhLyEW008CyYNwAMx0UJqG39+W7BNtDH
+TtyfIa+WLS/LczVe/eF7TomQCUri3hWWGwgHP4HnEH8zEUA8MeGpZtBomF5itXKH
+vpeuuYBII9CWgaVhaJEs9jYu8cck60sToLzQIaYgyZQ9ICZo5lSdpGfuXxufvP2G
++0NaGeCc8m57lTHgKuXClvJ9lVkJZDUvAkHkjK8lix7NYs3QHYkkefS+Hobx0gOE
+trp0pGqLBe7zn3pJdJbvmm+s3l+2n8Nk/xzHjUuMFnZNunnYDCacrdFtbk4uFnFJ
+cNrPezJSJUEnjXlfJxctJ+nsFApPRfI=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 030 Issued by RootCA
+=============================================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEDimdgjANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTcwODIxMTMwMTIwWhcNMzcwODIxMTMwMTIwWjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDMwMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAqvKSP8pXtgp8vsgoB63mJmlV0vjN3PHPVeVY+zxn
+KxCcOwjP5BY807tKDmqpjcpxoFDLM0qaMOugqnqkCTdQg6LTcml53m8n46u/ncZC
+NZP1f+oFe4TbboZA3svKLMS92OuuV27fgyZMWJ2VZmIXsXfaO+UtsNqpUe2Hxif5
+irSREkL/o6Y1Pm7sYzxHNmmapV6vi4NwK4oJ7fcWjT+ZDc21beeqAGQuuMTOZBoV
+6GuwdHJqHnDqkgd57ZHp6qQ9zky1nwRuzyjN0/PLCaDVRMmTiw7EEQXmdveqP39o
+7ITy67PVD/YnUf+uWT3xIV8whyGxZ1UxnRVV0hSBJgih+QIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUlCdhTT1IqwPZR0/vqpIoMSGpAzUwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAfIfXVR0CT2sJ
+hUSx50XP8s0RPvhPIgOSZunBJ3x8H1YeDGBMChdk25gZY6VzlAR26hqCT4BDds3Z
+r8X0aoafPpzkNIjhLKdCAWIDSrGpa4gfrbj9r+Hu1qq3Fsl0dDdqHOpxb6xF/cb9
+bcj3av9XzWA2osSPk/v8FwV6muXj16sCWTsnaz8qPx064NhH2RuE/AuePHy/qDS+
+UPo4KidQNoSaZzw0647fAqkj/8McX4TohjhGF9exAezUu7MOVl/zHaRhu16LJQx0
+OLR9mn+gGeAurT2sDyX1Ci/HaCojwjbY7xvakqfiTiJ9iC9bAcE2ig459jU47X28
+pcbr/HAudddt3FzaP1aAt6FWxJaBMw/guXw8AE/MhLXYwQyWWMeWPof9CCW4oSem
+s1o87jwSYq5XsdKR28ULYK5K/iKoyCq3/eXQltU4DNHPAPbGzWw2Ocm1WXdDkqdv
+19jVv7y/XXPeXxfvxDgmGrSKBcJlBZlHy2Bx/M48UAb1munD66ZDHTIoooqc5JEh
+lJaTxIGP1oQWuOWDBn2WHnbgA5iv8p4SLoYC1FM4skmCOy+57iERY4hbUKSbJd2I
+dInT8TNgqgMjGKX0E+1/dVGfR90MrE3i8jqtBz4G1mRNAuYUkgTMYChjqwiCMh5i
+CTEHdj7wd385OyhwgXHPzf1XPSXpqgo=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 033 Issued by RootCA
+=============================================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIERVYtlzANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTcwODIxMTMwMTQ5WhcNMzcwODIxMTMwMTQ5WjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDMzMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAqF6yFNXvXGQt/HDujfvXtvzHZWkuUGX7PAv6BJ9F
+YZBQmMu6TstJDZYjMJPVOT3rNmCgrqt5wSl7l3VeA+R3yUAejIIK7tkUPqoR7dKp
+moUtblbtjn+aD1lMQypmiaWwMAGwI84i2dGwRbQp91W4n2pp9ZMVQ5euwMjSspbL
+H+f2wnvXF1N6wSELeVV+P2/V3liSI/d4Cjr0zJ2NFSY0jNPgtBV4zZMJ1XhmixiR
+Jib3ZLXjNL6bFTKq8JxO/9MaIocj/ZHGHT8vB4Us5rwz7N3PZt1YPATmSD+NWHke
+hq7xLxVtlmLVROKXlfeaKnUL+CHCRlhz21wdwmUJSQ5K/QIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUX+YYDCV/JhMLmLDg9aNHaDZ385EwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAj5PDj/b/UfZa
+tES6DdviiuO3lHIcV//pvG2QTSijvgoqfqDuAaNdqqJyEjD6eZokOij/pmPnAWux
+9nGTbUWYmApHW7iPR4Hvcp8IZGRmoXfL3I4dqb7+zkA5Dl1Qzxh96fZaCE9q1OaO
+WMk1yK4m3ky5fKHa8KifMrzAvygRl0Ctra0VoziHlobyBpLjnf1exCtzUpaqmNe/
+exefBTbzjmjKUk9xsdy8xynDeQCs5Hu658CilusQExDoDVagkp/ezzhcu4NX3tAO
++1y1ri3VzNSSgox7HOqb86+5Rv8kdvhvKrYrSAlu07PUUULKXgt3F15Q/LoJMRFF
+vFTl1tstn2Gq8ru8xaSrmk5KnKwPeRx7v4mNezj+dEma5LqNf6uBmHqD2XACh+xs
+zWHNvqsfSNfLxhRhXOE4apdXqwCEiQhX//8U57Mz/UIlBdqCsX9hJeWAgleKQeHg
+VcQzLAwsNUX1fqJht3toI+WCXSWIrqx6OXbu8wYJpsUUElu3ww+zHHVlCubyr/tf
+aCNOH5jSZxOSXTa9EKwmBmffs0OMloUgTfcCqcoCmF59fH9kLf6k8gMRNn1IZP9A
+M+AqrPw8trApPCyD1oY1wAPerh9CHGyViL1hh/2LE8AEpuEy6BHDzTNKgCRhL0Bd
+UmfkXFd8zcOy+Opgj7lQN+OQDCNNCWc=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 034 Issued by RootCA
+=============================================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEfIK9rDANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTcwODIxMTMwMjE4WhcNMzcwODIxMTMwMjE4WjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDM0MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAyLdb1TmP6fhElRQMq5voDKwFKZhacbR18Gp3E01K
+9s4YcsdWnwcYHhtv7Q/LHkpI3WamRVOTTKVO5IZVJ/Pf/Inm71xz2flFeorQGgyu
+/mzlIJ8JwQv8zZZXX9VsFK65FdLRDQbwWFceXMMld+bP7g/f3tN26EaEVOkpWGHU
+RRGS6h6BoVtysgnVJOSHqUmUnuGR93Hrb7HAZAqk6pIM7cS4eDwXfHwCRoymc5OF
+nHzC1hqh8oFd2lHpMMxrg0CVm63i4LsuDUXCA/Cb9rZhzhBa+WLr8tYnFMFTWZoy
+qGQk3ld1si8mrt4EvcuRclhJxsyQQB0F1Fj6iWuvRYj47wIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUN640a6pUxRPP8CkLsyGiKjSkqMQwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAKVvVDf/S8h6a
+kbGwXKUYZrGbtlg2dWVkMD4vuDMyNhuGWNTjgaWyN9nGeSfppb6lu/60jdi602DW
+DnyIPzGCRCzkl+7AAjLAK5IH01odeFEXRHCP8oS5lCjYrrRRKn78+j9G4PlqS+kF
+zT93nY0ttll/prx4VRrYKX+59CJv2vGxWutBo635AstQo115yEdgH8OobVNvJFLA
+ZsJ5FssnZdQ45dNNFHiEZJ5cQK5SswAPZeu3iuhVuwofao4BZedCZE+rkUEL3Cgm
+IXzaez+LN6ggDC6+vSHNgKpwyGc3PR83CQwgnT2vXWsacG1pileOL6IkeRBFa10O
+SwOY9tqY2WEaP12T19/5UG/j+KrWZc01Ho8JYJaMZz2pSHiMi5edxGN79Mdftnl2
+RbEimP6ZbqJ1JkTsq0akvwynWh9uCTo62FtdiWTk691aKsZxL7wY9vhdlF3Va4Qj
+2aGYVwyId2BRMeCZTSdltz61nzbZgjdaB71/FE2mXq05H0W+klwxVGXALZPltMNe
+oLhH4D+pUXKIyZ56zmRfGHJffiTDJ8yGsa7NOwvU9NzM/BLmdKrR5O81+ml4QeP9
+3fJxLLGVhffcuEQW4zDE9qmK8HU2pHJpOj1Y13Z8/FirHdkqTk/VLhcl31QZIpFL
+PM8oF8K1AyvTdS7qKqjsB/9kHUshy0o=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 035 Issued by RootCA
+=============================================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEM69NwTANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTcwODIxMTMwMjQzWhcNMzcwODIxMTMwMjQzWjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDM1MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAqjmSiRVBk4MEMDzI7vyyObVhQx/NL59pLFzuYDnI
+FX8Lez+XLLC4FTvQQGov/PPrx37ZrZefhyuNoB1tVZCj22QZcWG+GEXKt1rXTgRb
+7/VT78PbmZehjMgs8cGQM0oWkbrHqastkkfScn2NR6oxNlUFjW/tl/Cw6L1Hjto7
+l0Du1/0Zgty4vm+tD3Xbelzcp9lpnKCYOnYY2vPE+LEG4711wIvRszdww5lGEBLG
+kNI7ALFbI/SnLIXyZFE7fGGiSPElpjirjSmXsGDhfa5cQfVR28YD5dpUh/De5u4A
+ObM0TjUvW+vnytOPs9vh5hYj9AAk8/X/UfhayE6lwYsrfQIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUzncVO24RDKSuKXGgmFHvSZMmICowDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAFUoMlK6p29cR
+VUpX67g1Yb8j0ei61L3olwGMEO3OCtGrWEFI/icQtxgoSLx1h8GSVBHAJQt1Ji8u
+OjA4s8GjQQ6V0GIRK3ixvO12RiF9qjRK2IeYL/4ggG7U/xGho76LhWre3yTtCwTQ
+sCn8EtTbfgAPMARkzk9S5yiGbxoy2WNxRbEzcYrc6M90+6TCNx5RbA+z4Q9ZTFC+
+rE+CDBf+x3UCjxPQe+VMVhhNgYvlg4S6O9Ql0qLYVUW+QdR9IQfHgJ9PQHy1Y0Ue
+EuXGhnpQGPkagAEeK51w6AuFijAmr0y39LLc00Qe0b2LIgP11XZU66h4uF74OVHu
+s8cNgqo5UP3jZLd+7QAtBv/L7Jk4fKNT/Qd98NSOdJJu2Mt4pAk/nEU07TNgrK5y
+HNqnIZt3681gK9633H61WC9hHEPW9D1WQlIhK/FzuCWdI+hD1ny2BlAOsABfaxQR
+2sXmj1SYtRfKHGEXAlA6+mdnE1GHPLxmQjqWf6skE6+aY1Ge8oWd20M0D2gU3ECr
+GnzBFt55bCv3Yh2MujOQmimcrspa3MpNgNK5Z6O1cWfBZGec/84K+Jz83GKofzNl
+/NHFN5to2Ex47JzEAWh1BDUHfIEDPZ4ZVQr/2mT/PgzPqCu4snasVWPz80CwyMAY
+A3VriCkcBwy8VsmJweQUSe/8JLxZVtQ=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Root CA
+===============================
+-----BEGIN CERTIFICATE-----
+MIIFqzCCA5OgAwIBAgIBAzANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgUlNB
+IFJvb3QgQ0EwHhcNMTMwNzI2MDAwMDAwWhcNNDMwNzI1MjM1OTU5WjB3MQswCQYD
+VQQGEwJERTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYD
+VQQLDBJPUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElH
+QShUTSkgUlNBIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
+AQC7E+gc0B5T7awzux66zMMZMTtCkPqGv6a3NVx73ICg2DSwnipFwBiUl9soEodn
+25SVVN7pqmvKA2gMTR5QexuYS9PPerfRZrBY00xyFx84V+mIRPg4YqUMLtZBcAwr
+R3GO6cffHp20SBH5ITpuqKciwb0v5ueLdtZHYRPq1+jgy58IFY/vACyF/ccWZxUS
+JRNSe4ruwBgI7NMWicxiiWQmz1fE3e0mUGQ1tu4M6MpZPxTZxWzN0mMz9noj1oIT
+ZUnq/drN54LHzX45l+2b14f5FkvtcXxJ7OCkI7lmWIt8s5fE4HhixEgsR2RX5hzl
+8XiHiS7uD3pQhBYSBN5IBbVWREex1IUat5eAOb9AXjnZ7ivxJKiY/BkOmrNgN8k2
+7vOS4P81ix1GnXsjyHJ6mOtWRC9UHfvJcvM3U9tuU+3dRfib03NGxSPnKteL4SP1
+bdHfiGjV3LIxzFHOfdjM2cvFJ6jXg5hwXCFSdsQm5e2BfT3dWDBSfR4h3Prpkl6d
+cAyb3nNtMK3HR5yl6QBuJybw8afHT3KRbwvOHOCR0ZVJTszclEPcM3NQdwFlhqLS
+ghIflaKSPv9yHTKeg2AB5q9JSG2nwSTrjDKRab225+zJ0yylH5NwxIBLaVHDyAEu
+81af+wnm99oqgvJuDKSQGyLf6sCeuy81wQYO46yNa+xJwQIDAQABo0IwQDAdBgNV
+HQ4EFgQU3LtWq/EY/KaadREQZYQSntVBkrkwDgYDVR0PAQH/BAQDAgAGMA8GA1Ud
+EwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIBAGHTBUx3ETIXYJsaAgb2pyyN
+UltVL2bKzGMVSsnTCrXUU8hKrDQh3jNIMrS0d6dU/fGaGJvehxmmJfjaN/IFWA4M
+BdZEnpAe2fJEP8vbLa/QHVfsAVuotLD6QWAqeaC2txpxkerveoV2JAwj1jrprT4y
+rkS8SxZuKS05rYdlG30GjOKTq81amQtGf2NlNiM0lBB/SKTt0Uv5TK0jIWbz2WoZ
+gGut7mF0md1rHRauWRcoHQdxWSQTCTtgoQzeBj4IS6N3QxQBKV9LL9UWm+CMIT7Y
+np8bSJ8oW4UdpSuYWe1ZwSjZyzDiSzpuc4gTS6aHfMmEfoVwC8HN03/HD6B1Lwo2
+DvEaqAxkya9IYWrDqkMrEErJO6cqx/vfIcfY/8JYmUJGTmvVlaODJTwYwov/2rjr
+la5gR+xrTM7dq8bZimSQTO8h6cdL6u+3c8mGriCQkNZIZEac/Gdn+KwydaOZIcnf
+Rdp3SalxsSp6cWwJGE4wpYKB2ClM2QF3yNQoTGNwMlpsxnU72ihDi/RxyaRTz9OR
+pubNq8Wuq7jQUs5U00ryrMCZog1cxLzyfZwwCYh6O2CmbvMoydHNy5CU3ygxaLWv
+JpgZVHN103npVMR3mLNa3QE+5MFlBlP3Mmystu8iVAKJas39VO5y5jad4dRLkwtM
+6sJa8iBpdRjZrBp5sJBI
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA ECC Manufacturing CA 036 Issued by RootCA.crt C v01 00 EN
+=========================================================================
+-----BEGIN CERTIFICATE-----
+MIIDRjCCAs2gAwIBAgIEfrquPzAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTgwMzIzMTE1NTQ3WhcNMzgwMzIzMTE1NTQ3WjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDM2MFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAEus+QlTFxQlmsyFp4vbjrrtQVJn/WhaqxZPDmtZzwSOEL3dRO0vIa
+yDpG7If66k4jcTnA7/bdu/kSfkWmMGcvpKOCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFDYrAhZcqvUXEOuN
+pEPtXnoHqWXLMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDZwAwZAIwDXTuJnPXYmuS1KSJ5loZ4Tq2ydcNXFUN
+0fPST8/WWqPAyipDa7H3q66sablvN092AjA2uFtBfwNr+S5KMh9qedkArG5CW6Zy
+4nkMEez14v97SfWe/MONY0eFbGNTfbSUstA=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA RSA Manufacturing CA 036 Issued by RootCA.crt C v01 00 EN
+=========================================================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEIght6zANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTgwMzIzMTEzNjM0WhcNMzgwMzIzMTEzNjM0WjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDM2MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAq1qEAbBxprGQ7XTXh8d3RrKOdllPtAZPdXzwBe5O
+si9D9xwhVnl5Yer77KU0HKIrymZMIxd7LiJ11+GLFIqPeTwQr/w4o48QHmalQMCa
+9/ESj03T5v1yDe4l8O8vycmkGGlP59MIFpWC41j4TrhVYrBskeU2zsH7kBEUSzNR
+5Z585sx+PvM9f/s06d2FcjihBe7zXZPMeMtGhIp8J9nXEITnYwZzJ+RsW4kALwBV
+lZp1HXuvGjH3IhTUhXIIEvYdJ7KOd4XhtPq348oOrScyMjxQXkw+kcgzDuL39MB/
+fwqo7YQ3qi+8hsnqlZE1Uds+ILiGiK0EHQ8ixJQND/nDDQIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUfLS3jmiGFL5EIcWFjxW5bV6rUe4wDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAokHQ/1UR+BDr
+V75MjThS71x3Cv5SU8s+KGg46wES841xo79fMkNfST735VOskVBOoY4FbKRftHMr
+IGZBsVtCZGSMVvbOVwEeXIfLFlAw+2ngvrGdqJ+hkqndF97JQLnLMhBgnW29/u3E
+N/81GfAPpMbQyiIhmeRFQGYgsWwRXF73XrwtlGNGmAgY8DFP5ekKJlf0vwOMGS/r
+9vtRIHZbiVCPDIY29bAC96vmfVtFoxTxDoojKwrnKjo6eIa7kzSVa5G7Sv7MVcns
+wdHqWptLEWeEqnCPDthJiXNQ4f9I6BtwVnnuF/QHPQCYc7WkEKhsqYruEbEx3W/Y
+fg7z1vTgkjq1rXip6R8GFm7FjztA31QL9aHcoj5JPSAsEbuyjv0EGlPHGqAnZF9Z
+rksB2k8X1wMpQIl53kGZC6gx+ryOxzGowd6Fy6xQejLUwVOjXk2HbhO1VC1k6NWx
+DZ1YVPV3i3yrekQ1dekhVXY50h3u385b1lER1zqraIRfTq4L4znt1kLkhuyZptPj
+QXReZrZ16KmAZYCo6u0aSnWN5T4g5gNyz6yDonC75X18urh/m7D6dAtPhda8iRJY
+8MYGqqkDJ2kaCle1pwcR/DdFuxKUatJXZU5UP9Eh2bWif/0ey6j0PLddg/vzUmSr
+9x3S5qahN8S35J7GTDp8WK+L1VgV74U=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 000
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDRzCCAs2gAwIBAgIEH7fYljAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTMwNzI2MTM1NjI2WhcNMzMwNzI2MTM1NjI2WjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDAwMFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAEgjgiLxUMtWktzkf1glqbegCSR/k8z8prL0bLxlU/06KlCR+q6cqh
+y0bDX3u577mxJQ9z0jEXoWQG7sUlDHmMZaOCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFHOruBoCJUVjN/Ar
+Jb055li5DwD/MA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIwGT4kzJwmpfto2RR3JQTV3kPJ0HoVUBCg
+Yo83ehnBnxj0PHuzH9UBEshqgTRGqxvBAjEAk10of8yeeS8b1Rmk2aSceZDEOEpF
+XHWOBQYTjqvliBomaEQEaYPogpHUTYKIm+XY
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 001
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDRzCCAs2gAwIBAgIERT2I1TAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTMwNzI5MDgxNjI2WhcNMzMwNzI5MDgxNjI2WjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDAxMFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAESAXhqsOQZFWz1EIJ7QFVYjVha2NJZ/uBOSRzFhO+akmaSmAN1xX9
+Do8KR5OoLiofunDiewGO1LcSQ4Dp3/Aj+qOCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFD/j4+A4PsuJkRgY
+j04rlkTb05o8MA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIwEq4g5bzryxKAQXrV1/xSg5ST5dzPT8eZ
+FuN2TvKbWoh0qVZSwagytT4KQ1JZrw+XAjEAriM6Wole0yJOQK+vKVDTuUVsRFCx
+C4xpQBZML3p5Bgx+JNcgooBCagIBSV9sAKY3
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 002
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDRzCCAs2gAwIBAgIEM5ao/zAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTMxMDA3MDgwNzQxWhcNMzMxMDA3MDgwNzQxWjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDAyMFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAEfhDta1mpOBvEM03eU6dh4BXc0WW8RIoEayH/Xj55B3i8sPBI9orj
+0Bdee+FFBJGoiLRGNbnS+jlXWLDGmrbq66OCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFMppcEWGc0k6iuGZ
+TvHikjjyf0UYMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIxAJnQmCqeG7ibKhgQztdl3q/vyET+VvVf
+EZZFadCznGTCkMKWrNocqSSs8sH2HKGaWwIwHf4mh5VrDTwDNBRLhas5tn3UUlEP
+pfZ6pk2SDIX0+G4uuPr0//Q5u/IXzub6IA2D
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 003
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDRjCCAs2gAwIBAgIER3V5aDAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTQxMTI0MTU0OTQ3WhcNMzQxMTI0MTU0OTQ3WjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDAzMFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAECjK/9FKtsbnyopQGwokCmiJARyiyr4/G9Lthttr86gWbZ3MQsQ5V
+w+Api4ZrS01BO1F54Qc3aI2Ji3yPEE2U0qOCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFFVd72wz+DBEi62s
+/+yx03ut8eeGMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDZwAwZAIwZ9HqVEOTXAk1RGCLWk0aLfppEwQk2/VP
+AuQumUi48hbpfK41ZjB3IYoS9lgfEC+QAjAvWrLXq1v7rIm8Pcf6iZ+rlI72d/39
+q4sIXNmXHqUWrIegp+usDAGjAYDpBffEbow=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 004
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDRzCCAs2gAwIBAgIEfqIJfTAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTQxMTI0MTU1MDE1WhcNMzQxMTI0MTU1MDE1WjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDA0MFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAEU4vVtCu+sc2VldUl0QToWhbfRiAhumb2S3Seqm1P56agXPJsXw2h
+ssA8ic0Jw7h1bGpM6+EzNBesTpGksBYuLqOCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFL1sacB1nqqV3W0V
+bqZBcMS5s2x4MA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIwTJ3astNZ2hyRMPG3RO1BeKieoANrv0jr
+n5GONNPGZ11mVZYgFVSiheBZ9xqOFMvZAjEA9Qk+Dwmei1FuY/ztnGeRLw7bJ7lo
+u+rdhyvlzIO6aI8x5wgJsbcX6ST5QEncz99t
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 005
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDRzCCAs2gAwIBAgIENc6ZkjAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTQxMTI0MTU1MDQwWhcNMzQxMTI0MTU1MDQwWjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDA1MFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAEucLf6j2YEKqnWByXqcHECwNKzEDMtriPScrXaP/5G6qeJgzYgIFI
+9kXeaTRa8uGsyYnqhIqkjQx7CKoOJM42KKOCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFBvWRfwfkIJ8KD5s
+tSaFn/qw4MYrMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIxAMTfYD1Y7mRiquCTRLMhkfYVUEeuGpW/
+fYwVZP6rZVTbPCC7Ak2c+GS7mdanU4NfMQIwTqjSj8HxgtidkhOGXh5vIfdOZKN2
+uAgvKaFoMewKrB9HWqL2fxyfw6ThGAF/f7Wt
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 006
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDRzCCAs2gAwIBAgIEbPsppzAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTQxMTI0MTU1MTA2WhcNMzQxMTI0MTU1MTA2WjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDA2MFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAElzqNqZ2XgsaL6hZirvgHr+E0Xaif1BlI5t3fNAWVGzUAKHhIpja3
+7AobOMWvUxYj+OYs1Dt/LP3TNq8o4pz7iKOCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFLLTzAgUTFCAjCid
+EZYnR5v/wOSjMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIxAKp47gU65/w36GmA0STe4eJXcfHuzkza
+LPin+gTJBhHvNDUB139tfHQxB81Hw3AZyAIwc7kOzw5qr+EntqPlWBZciXrx5ISo
+2OQeQiNkjI5t8ng22+VQQvgU3GyOh2On7WwH
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 007
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDRjCCAs2gAwIBAgIEEoDZ5jAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTUwNDIwMTUzMTQzWhcNMzUwNDIwMTUzMTQzWjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDA3MFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAE17ITpvjV5tEaD/9X83lNW7dkEv2ynWmXk6kxUF9yWbuwWzdogpOK
+ZXOLaVEGPIiwu+MyrfEuccgkkw1c0KEhhaOCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFPZcKJs9k7ePl4rI
+0Be3lH2pNjelMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDZwAwZAIwMAhAKzoKbb0YB48gUSLnxJ5BKHi/9Vor
+h/8XCYbdY8mOREGD2iH+le0Il5CDPp4vAjBfsnbHqpTsXWCUhv8mHVwojbm3e6P1
+xsp/k8Cil24vmrfNN7tJOqwiB3U3L7Pn9ms=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 008
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDRzCCAs2gAwIBAgIESa1p+zAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTUwNDIwMTUzNDQ3WhcNMzUwNDIwMTUzNDQ3WjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDA4MFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAEsOw61JbODkPWdM7hSgj9RowIrGVhP0sieh4HWgP9FlMMKoyKSYwR
+jxr0/xoIYzWdJ5gwnQSNtRj8CU1V4zFXTKOCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFJUyFTuqnXRILSdb
+Gj5HUwnTz+UHMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIwDb+D8PxfcmwLrjzU7ujv+tugIXiUeYUN
+YVYcmKsQ1Z/dKb1KpKgsVX2s6MMjtymAAjEA21sgUQ5ftsXQRL3kIRK+wymyBSAw
+4J20zn3eeUf9sqDnE9t+iiF7UNxuRdNSm6D2
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 009
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDRzCCAs2gAwIBAgIEFLjKeTAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTUwODI3MTIzMTQ2WhcNMzUwODI3MTIzMTQ2WjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDA5MFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAEYVkDEvkG3vXJQKrfnkPXndhKFO04BTQu2srPbx4fbdBxjQlZ5Oaj
+cqugXAJy1z4zkO6mQJMQgcEczvRfgMb6eKOCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFJK7UcuXkAxM41C+
+L0qy0qW/ZF05MA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIxANij6ey5HFMcpP6155Bx4TEzlqoM2xOp
+C21B4/BQDpysARH4cqtDzNtz3r6bUjvv/QIwf4vgrStUGjOO2bMWfvkK2y9fLj5S
+WDq8vuIRd1L5/XdeJDuGIumbItoXs0s6u0wb
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 010
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDRzCCAs2gAwIBAgIES+VajjAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTUwODI3MTIzMjEzWhcNMzUwODI3MTIzMjEzWjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDEwMFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAEmNM2OAm+Z8nWW8uHW1r2td77f6n1J6nQt8tT4PG6nx/PInVVpo5z
+CB0wlYJhZT/bwWM5fgaYBe/KsruY7tUea6OCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFB/N+47OQIZ12WPl
+5RCNVcmE3Xl6MA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIwQm072iAm/wOXnhC0Zn632aUqJZESMNfy
+/iA9jmpWqfiDq3mpIni+nYz8FJ0E5qM2AjEAtFT6U066B4jGvuK2uMDcP8IHxSle
+pjHLOVkOV0MoZ6CkK4enQu8p0qn1PqNOqSGT
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 011
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDSDCCAs2gAwIBAgIEAxHqozAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTUwODI3MTIzMjM5WhcNMzUwODI3MTIzMjM5WjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDExMFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAEEFSwmnoHF+cFvvzNGm8WrWz7Dja7KFVsiSYeZzE9Svn9AduLqbfC
+hhlUF/JntiuWgn5LK6Z3ITHPEg9DgCa/3KOCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFJF3PLhoJOHBlUnt
+isEz3ManNpuFMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDaQAwZgIxAPjxzTlhPxleoQE9IGaEXWP5w4OjC+Zw
+2aaSk+f46h8O4FZK3Csf1XzIoa0tLG4O3wIxALssqv1PeM0rotzWRTjTF4cJ9GfX
+TvSHONnkZyiiOxMJGgjPmW6fRZshWROK7eU7uw==
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 012
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDRzCCAs2gAwIBAgIEKJea4jAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTYwNTExMTM1NzAyWhcNMzYwNTExMTM1NzAyWjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDEyMFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAEYqL3MCTPWnY/zRKxE7mVU99FeoZcWXoSt8cCN/Wf4nT14/izfULM
+RGhiOnjCBt5BTrh0yuTEY1FGd7IZJjoho6OCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFFUu4WTtyGmy9qNe
+7aKEUSlLH318MA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIwURIrS2Egg8/ch3NyXxNRRCTqjhB0z/kt
+xo2HcYZGQqQrntZG1jG5Qe/GkVW/H5iEAjEAswUat1IN7i9Qv4S7Gpwx2diuBEdG
+PWwHsN8it9wublUnSNbcXp/mGEeHajzmoLod
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 013
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDRjCCAs2gAwIBAgIEX8Qq9zAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTYwNTExMTM1NzU5WhcNMzYwNTExMTM1NzU5WjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDEzMFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAEZ0AYmyso6QQUfTUmJWYCfc/ULgPC1zZaJlFefWAJd5VWnWYS1HTL
+433jR7E78yiyQqMayx6CWsv5epCYl5ktiaOCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFAHZJmCgGreK3A5x
+tI4ygAWIO6aMMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDZwAwZAIwVNWonYIAladCUPYQ125cbghpnX2w0t6/
+tLCSG2ukE/KqNlsrVu65SW/y5FMOsswgAjA1tGjUM1xjQp5/KVL1dLyECwppV7E4
+PH0DE2uw15liowUsMS0XO/2NrguI9HLg0FE=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 016
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDRzCCAs2gAwIBAgIEc6L7YDAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTYwODAyMTM1NDUzWhcNMzYwODAyMTM1NDUzWjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDE2MFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAE3w3hoSHbvd9mTyx88k62+eX6ff7Uz4XnTkQhtzQDyJ/cQu6dDqm5
+xgcZOV0rslfUo4lwAlC0cuXTBA9kohXD6aOCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFGNTWbC3f9X8QSDL
+xSCwlXWKkiIHMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIwcvlWT1oNXG1c2ybwZ+sTxCBudlDQkW45
+MJIWQKtX/rAJ4/vDrL4aRJZ1VaGTSBrnAjEAr1QOmvVFkRqUlFkAn6uwE20RZHai
+mFOa+uAUNoQxKtCDoBYCug6SsqAAkEbe9olr
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 017
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDRjCCAs2gAwIBAgIEKs+LdTAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTYwODAyMTM1NTE3WhcNMzYwODAyMTM1NTE3WjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDE3MFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAEmpQH+8nM1cCHRoJAIv8FpdSBLYK/C7OTbBkYSATJv7wFglopOUz1
+Bv5ZY3/szKKagWJ5vR0d4YHcbUg37d6O8qOCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFF6n6KrNLG9YR3RK
+6WDBp49Gb93fMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDZwAwZAIwUU/5Zgx58MLFnvIqWGFxF6//7TyLkrpE
+wybMDhR5AIKnb6oWGVcOAXu1nJOtb/tDAjBvDwcl/Cca6jjGrCGQsKXirjrKyE7z
+FPgVny9iHdFzqpXFfZjDCcbAxMoxSJbQr80=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 018
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDRzCCAs2gAwIBAgIEYfwbijAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTYwODAyMTM1NTM3WhcNMzYwODAyMTM1NTM3WjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDE4MFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAELhEPzcyxRpTxZX6UO5SbBknnpFtvZrftZhyZQ7JMDl3TznGsye1J
+xa8PgI0az8Kc5XpS1fI6ERfzyN7zbdE01KOCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFI/SdpH2FM8T5Yk1
+mmg/9CJK1kCIMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIwQ+HTwWourWY9A4TLPLNUlR2TXO4OAPat
+qF5EWVzSi98czvfnF4wSpjGIqJZ9gaqeAjEAzJnP2ZWr0v+QXXTuOQpAOE5Rt2lm
+DODb/RTpm4cp6AOEscy69nThOxhdoNrBzZA/
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 019
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDRjCCAs2gAwIBAgIEGSirnzAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTYwODAyMTM1NjA2WhcNMzYwODAyMTM1NjA2WjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDE5MFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAEO4lkvFv9iH2hQVjcln1pixkf5G3FRlILgoEwz/SgvgS7RoIt6IwB
+bG4U/x0v7i71TWtBoHhlUdbOHFRhraXqi6OCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFNYVpU0in5zGEpIR
+yO027m4xvBCAMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDZwAwZAIwSwLaf9295b5HxZCdSU0FyU9m4wSeWuLg
+gSOT/I3ISIHo/5qwjCVmxKcwBQ/iKkMQAjBGSEOPbWmJAmoNug4po/+A5j8ABgWy
+gzzyzCilbc6CQYtQ6vX5rMu8tVMzSK/CR2w=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 020
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDRzCCAs2gAwIBAgIECbm8XDAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTcwMzIxMTMzODAyWhcNMzcwMzIxMTMzODAyWjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDIwMFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAEzKTn7nVzQe2AdMdg9qxZz0QL++TGcgA/rjBVvMW0eERlPkZqXpeH
+8gfBbEJsh9+Gbbi5A/bCw8V1uIG5xdm2MaOCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFAqMF3ZmfO6YhXaN
+rEAeAguYV2FjMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIwb+IGlAhFgotHys/m+6SWE3nrkq3TF8BB
+GR+RVTwR3BNQ2qiEy3rwrlihQ1hochslAjEAplp51dndKI84th82A/ec/PpXy7Q8
+YWg/t8ZPq6EnSDiVAD1ba8JA6fbjk78i8ZOU
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 022
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDRzCCAs2gAwIBAgIEeBLchjAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTcwMzIxMTMzOTA3WhcNMzcwMzIxMTMzOTA3WjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDIyMFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAEt+5SPdxvaWHAUKuv0gtia7dbIQSaVslB3aqHkzhfS1930P+FZCmp
+TVbIxXkDTza+Wwtrofi6Iv+NCnQBslJu/qOCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFIzH4wB9wx8/J0OF
+yzCHkzmb1p0bMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIxAJPeOMJc0a3JD0BHPbLphFHMXlz8cd57
+5aE1sFnU3DYSkasKcZLs/UCJNpPJ44jR/wIwJ0gbuL+rSQ6DsBkJZvByyIQ2bwI0
+3InIj4rhlXOCqCcsgSQ93oE+Z4v7rTPjm9HI
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 023
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDSDCCAs2gAwIBAgIELz9smzAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTcwMzIxMTMzOTQxWhcNMzcwMzIxMTMzOTQxWjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDIzMFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAEChCyxDkQ5gqPnb0rxjHC0J1CVYS5EoD3N5hYibRO9Cz7zY1rTmId
+99hqLReSGwp1MTF33puR7iMhl9J9mooMKqOCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFJVGDFA8bnCROXQ2
+IJWDYLUZLDDaMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDaQAwZgIxAN0sm9rM09N7nls64JUNt+oZw5+LbGj5
+kMQtv5eCeTf48+shuxg5bLo8exVvo+HfwAIxAL00c3Q2+HZdaVxxwJ8xTHHYh0sq
+SFxF7Klf6Xm3YdUaD7Gv6zZnenuvmBnXanlP2w==
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 024
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDRzCCAs2gAwIBAgIEZmv8sDAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTcwMzIxMTM0MDEwWhcNMzcwMzIxMTM0MDEwWjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDI0MFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAE3N2ifVI147v9Ob45NgYIOx/AVYtiNlBOeqdgHDkvrGakG07xLo9+
+oqgeT5URbs1nF4DXcELHdhabJczZHg91saOCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFG385NAcN8MLrEer
+yKoLzgWn5FfgMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIxAI+jH78HK81/l3Y/UlTkTVQ3qedvSvLo
+CgzouT4rtQwso6ELJGmWGGHpy3YG+4ervAIwWo9A62/8RApgHP07d36EQigY6oA6
+NvjGTKw4gU32QFtpjFbzX8tTOktmTLBY0aI8
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 025
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDRjCCAs2gAwIBAgIEHZiMxTAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTcwMzIxMTM0MDQ1WhcNMzcwMzIxMTM0MDQ1WjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDI1MFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAEmWe4heeMd71Kv8KyxqFCuDLpJHA0CKCHUlfY6tF397N/sdcH1MMy
+aVOgZSpldr53EvBhbQVbtXePZCQTBb2Cs6OCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFJwktsi2Ra81b1Z5
+yUgrZfDmlojIMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDZwAwZAIwfT6ZwuMZXp5wMpxVI4Pjoe2xH/K+3KQy
+RhJ1RYo8/twdYXbIEiBOqkIBOVuhGjwkAjA1KEquyQEil6Wx110ha5Wr8sZsLngZ
+2HZdQT0jmZw/iWhTfBbenRatzXyT9Cnt+ik=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 026
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDSDCCAs2gAwIBAgIEVMUc2jAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTcwMzIxMTM0MTExWhcNMzcwMzIxMTM0MTExWjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDI2MFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAE0g4Rom+SJ6wArAW94cN2OL2dg+o5OOV7aYODJHeY85wESoc0+CQn
+0cBGfusJg5GWWK33yD4ac/V1RqZdv/MD26OCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFDHFzkyTLGGOORqE
+IP5exrRxRr+LMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDaQAwZgIxAIVABxnsbmjgjJlpst+VaZJnp6kS4pTs
+i+pBos+G7VbzjF6LsxuR7sfcWdmmYLc1NQIxAMZO6aXxyo1KO4PFzMbxsc423C4S
+1qExK809xBth2b5TauKDHffiZ0lyJCtkv3ckVg==
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 029
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDRjCCAs2gAwIBAgIEQx49BDAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTcwODIxMTI0OTIxWhcNMzcwODIxMTI0OTIxWjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDI5MFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAEMuIACikHeix/6rU9HfN1T30Jqz6IGYJkYmdPkEwArIvkMeiKjQ9x
+njQJy6DIikRlRpeZmqBwUP/IyFRCfvWAbaOCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFO9r2jKd8yLAZa4P
+2boDZkXAewMBMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDZwAwZAIwN/s6YRS0ZSKi+u4fNqhAbmmOWg24Arx9
+2EmbIMREUQTT6UIlImq3L9vmt0iSqrAnAjA5aP5J8Ww10Vba3Xji19Bd/NADTkgV
+QT8M1T+suR1/MFXMFnTcx1jPDcO1HWS400Y=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 030
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDRjCCAs2gAwIBAgIEekrNGTAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTcwODIxMTI1NDA1WhcNMzcwODIxMTI1NDA1WjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDMwMFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAEviCrDW4/G6BBhxd9PCEOG//OXL+NeAV5DrbZiY/Jik5dl0pVMwxN
+7PAv1y2vcN0e2i7a6VGAUDT0y1PxlKQzAqOCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFCWeXLxPA08cre+c
+4+SONC4kt2ksMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDZwAwZAIwYld+v8sE8M93lCm+M06LCGHi9E+6YvpM
+Ol4NzEq6VPBm2xKqmdPx12iqmPANWXdTAjB5BB7H3aSXuvidxNlf3y7SaamV5Dps
+Rt1C2treh4G5OgNU2ds/ChZHVpAY4YlfMHE=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 033
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDRzCCAs2gAwIBAgIEMXddLjAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTcwODIxMTI1NDQ0WhcNMzcwODIxMTI1NDQ0WjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDMzMFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAEjnIhe+AWszJCCSgIp33E7JZxztqFUldI1lIkVaPGFQSv4aIeEnh2
+s0a2yJqE8b0OA0Ory8Fheh++Lb/QvxjOPqOCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFBAyeHmv8qcFQOBf
+VQOeMYVIviWPMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIxAJ9HvAUP5vwRJuB5J8UX4ppHsESLIscO
+sRka1R26MO4gOQhmhMd3132/K3gm0ixR+wIwaXGX3eeO6Wx/QFhFO/rZghw+kUJK
+Lmzsz1G44uDv1ZEuueBGDX97Vpons8TRxTiz
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 034
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDSDCCAs2gAwIBAgIEaKPtQzAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTcwODIxMTI1NTExWhcNMzcwODIxMTI1NTExWjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDM0MFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAELEOSkTcpnmdVWp+UfC8XpkEujQrVpQuOkUdaxJx4YVILBxH6euHq
+AZSo9NMfvNHTa5QLOm1m3DQJLaxWVf9Jx6OCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFGSdpbdhn73Tltnw
+6G21cW68rnecMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDaQAwZgIxAJ5nBp67z9ZhR/+xAd8QMJOiQ2byRVyc
+uxlRkC1+551Z/pzddQz54IXOkrcxjhPk8gIxAN86bh1QpCun7fYzrxCnxkWrroA/
+RVwrwKHbtmu/YgUlqEN0WKuDeIwO77aY9SKEqg==
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) ECC Manufacturing CA 035
+============================================
+-----BEGIN CERTIFICATE-----
+MIIDRzCCAs2gAwIBAgIEH9B9WDAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTcwODIxMTI1NTM3WhcNMzcwODIxMTI1NTM3WjCBgzELMAkG
+A1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG
+A1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH
+QShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDM1MFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAEInKYHLxvJcrYn88LkUlsw5qxb/tZt6IPodtzwxqHxrpDIjlEPqrU
+ysq13/gQ0gZQMRJX6YaiE6jghmvPJDFYkqOCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj
+Um9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFDZZjyLshMPE9kDS
+HBZ9C5ETe5CkMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj
+Y1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF
+Z4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIwAmzO1C8gimZcFnV6K0wvtdlajkNiw+1y
+9x3J3i547hvGvoaCKm9nTkcaxcS1FiSlAjEAu/p9+RJKhGUzLm7nMXf1YqvKkC7G
+0vjwKQEotnxRWvGvD+m3PV7sJvyrYBDVDVMP
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 000
+============================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEVuRoqzANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTMwNzI5MDgxMTQwWhcNMzMwNzI5MDgxMTQwWjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDAwMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAlT0/sSQRTPxm2js3OayWqzZQZGyyV256pCKJZbJg
+YHyLzOjlwZvenaexI4pPn8aetl2v01onsFSqsoAD37UW2FtfX34PM1FAtL6MYLpZ
+p4/B2/8CHlXi3fPND3fBfRaMCHNy2JbTWB9dUaaAHjSL7DlODYMeWr594/wbfDex
+/x1b2A0HeKFgqIapT0uYo6MLFtQOtdRdyf0ocqzC6wJrHXA87xZilKpwuGmG+hBM
+J/Eugkk3rZLSWFGVx7qvaK1Y7purnMXG+/bkByRpkWJPbH8E867DDrMNm8ySh0xd
+7ugx3h+BME3Jxap8vNzmA74oHlluCTnIcYulNQ6io4jTwwIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUaRRqw8+zZlx654EBzKXBQlXKK8gwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAnKGIqDQFYlDi
+zCPtIUq4pYBpqrlIGCIK3Cfcfbgc7HOpoT28MpifZf0SjhdiXNv0s3ur51thnsSj
+t1M0M7OB1LP58crCDPMAJHfafHlEUCTkWf9PD578YIYepXpHXvXJJGlejK49r3V/
+HTdNK1E6xhrGQtUHwaf2f+fT0BnU5k+cdtOn5SG76N5Wp/wBXROTWX9uAdxPgN+y
+k+u20FCs0ON6dnnp2dMyEADBn3zBgHqGLya5om3ZKi3skrE9ZOF/P1y/SXvsXcbw
+DRLmptvuKiYg++qJhxA3bErHfvpo2unuq1JoZsDO98CBl0lql6beq2JNBYemVWis
+7P5YBSJ7oKPb8/5suGHn5gYlJ6UfcsHmc9Qqki/XbYQPjGXsqtlf9cnCimrudGOM
+ztvIXq7a4H5Khim029p0Rifobmu7ZbjvrQ9vxtZDhDN6SqQGiZhsi0jT5BisjAY6
+XMfXIFmItwL8GEFEN2A04v6AgQfBIVR/y7+paINQdgNZ6s/utLVXRVjvFOQOBl65
+8rw6k+uZMMC5LkSTYqFXrRoDKIZMpKEZcPsHPE3LHzQBd+EWGAiTOHPVatBIigal
+V1MtHOpUvpvinwXj36KTN52OpvoEQAd4ixW9BWSL/dXO1BO/HnXC4AvGc7EAVuL5
+dlqgUo825Gqt5BBm3OOlwVTVY/saBEs=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 001
+============================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEDhD4wDANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTMwNzI5MDgxMzM2WhcNMzMwNzI5MDgxMzM2WjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDAxMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA06qoUKCYkWAXMEtP7vwjNwiEYY+imalziY9q5z39
+6UlJ1AUE8+gsxDBTxeZzKgsDW8z+5Io7UpPDLLNTVuQtqZDsjBfWh1iH4FcQm1yt
+trS2O4H5untO9HUX9uGHZpTsxYtTeriTfENnLRswenTd2GJ/NOpl7WW+YJCFpvBl
+Q9F0PHF/NWZrh+8j+fFJ0p2+VRt0E1I2O6v6nM5FIK77G1rXCvl2I5tmLs3GS9hj
+REI3wc/6sI8Uu+m7i1XyMAkQ3m2TYugoBzDuMVDbP9sZcAQSVyJeqciGLvcNAk3N
+Y1IAnqo2r9u2fh6OWAm4dcg6Mf8s9jEHIwHr+OBKZf5wTwIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUyIx1+wYnC/fqEkT7nCXf0gm3q80wDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEALF/p3utcdpkn
+Biu8nz7o8+n9/v2F70cdeecEzJL3YmZiapbmeoas7Xj1bcZmlyu++ta2v28x9vwZ
+RmZjwqVI3VcsEGXnYqATSLWUHO/cNI8U20JE/xeXhOV36ZnTjewBJyZGcX+J1J67
+X9GkbkwTOvewhJ9PA6oI/uXY8OQ43PRSZZHExA3TtnucculgBhBGJNOClM5PfLuf
+G3WwaJE8ejM7DeN8RSmw5bpauMbUw5J0/NtdDAWB25uIokKzQS7UULVTRSkSqPj0
+/YV66sFOc6i7lGfYYcxX1xlL7xegW87IuxdQWe5dY8CzCLC6t5jWKzMdNBz5tKTa
+tX73GVIcX8Wtha4VmZ1woftjYIz7oZ4NY3FWPxYxlNGrzXj775jnxKipuXFiB8ao
+p2SEnEuYh1vtUqMnH35xzHLVQh1magAT57H+eKCx3dZ4y8/bcksf5uAjrHBizv3w
+T/udd1PLuJ4zEtfXTCaMV6yeShI9FAo1ewODDPOx+ZuCn4Iov3l7IkXViVuCTWlr
+ZJb6CShnCtzcf0hsfXVgKJbYOY3MxIpYu80H6+Qk1A62COCecpABigCQqwjtvJFt
+8lL0AJ7lo0nZwSSBjBQecrZ/E7bM1VxCGd/HcZbKBzx4Pn+Sla8eXNBxD4TNBTjJ
+adInH2PBaVZwyNKiMuadenzOrWg0k4w=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 002
+============================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEfGoY6jANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTMxMDA3MDgwNDA3WhcNMzMxMDA3MDgwNDA3WjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDAyMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAs3ScABjzini2dUqiGn+i2EnipmaMJz9zKhe5qXvA
+yh1kp0ekrVYr89lRq3jmIeOdwDD+3Ax77ANLHRdCHFIhpsMzHvltU736unNfmO5A
+hAAxcXNwEi+u7IxyPM2sqcjPm2aCqJoiph9n2rIOs6OJD9NbV2msdxsG4on/2E9U
+HHv+PgHcg6OqqMotfoI2XYr9WYWXgl/tprE4CcpM13fWvZ0RRyHNexlTg31s+PJ6
+bXbdf2w3OaIspSBi8EB4JtwKbhhjW6CHvnq3xM/05Sj7rORMGc9lXa90JuzjAxtH
+Rzi2DbRRApiQHP8DCUtCRQH1vXwq5OUyJVVVGaDgsAyUJwIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUwu9kHDKcsKny6uBL+xDJm4nDRhQwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAse5qdigWczhx
+JcahxsbuWzOzlMNRPo42zkQmENnaNkBaCIWFqRU82REljuN+yU/cLud01sKN0KqU
+UtyeTDnOdNSWPBCR0VfXgxor68np90bGplJmhFOAahUM9yFdIzGfu/Akzielohnr
+PCRwlvCcCVlvuN+9uoFd/vOiINR00Esn9/ITpDMHgGIW+dIvoDCm3Guu9Q9RbPso
+C46fPPN7lfEW7BzxM+bSqA2xR7NrTJ9HFMVx0FgM7Dx3amfL9cBUi2uZwSmwDtCL
+AMjqDUiu1Lizyzvl/v4LxpK4ZfJQlbVZrKRcW9UuyWYOGgegkMJTSdNOZ2cDFOxz
+T1m9SC4yFNoPGgO6vAufuH3v8BDBIwAvc+V0zf1L5XKiDvXjU2vgqcusnloy8LQI
+ExhZnLo5Fri4IdjJrlCFSysgEdwLB2V9N11goxZaknPsqg1+MNJqrbFv5BBPaawo
+ZxxgRKlT+a2axFQc3+jA3sC3zDZrBTZeH7CK4MPndBYSrsU5edE6ylripaUivNCB
+TQ9cBHo8l7I+7neSl1V9U7g2OXtUKE1CclYfKCeduRfjXGUXStI3t64Mmt5XqREh
+WExC6lv3UTGYrd0+WYYWc34ebQPTd+73OA5L91L0FE29FZkUUlfpokXxvCNRy7Ma
+AwywUAgHORd6y2cYsNa9WCzeBE9Vxcw=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 003
+============================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEasM5FDANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTQxMTI0MTUzNzE2WhcNMzQxMTI0MTUzNzE2WjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDAzMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAuUD5SLLVYRmuxDjT3cWQbRTywTWUVFE3EupJQZjJ
+9mvFc2KcjpQv6rpdaT4JC33P1M9iJgrHwYO0AZlGl2FcFpSNkc/3CWoMTT9rOdwS
+/MxlNSkxwTz6IAYUYh7+pd7T49NpRRGZ1dOMfyOxWgA4C0g3EP/ciIvA2cCZ95Hf
+ARD9NhuG2DAEYGNRSHY2d/Oxu+7ytzkGFFj0h1jnvGNJpWNCf3CG8aNc5gJAduMr
+WcaMHb+6fWEysg++F2FLav813+/61FqvSrUMsQg0lpE16KBA5QC2Wcr/kLZGVVGc
+uALtgJ/bnd8XgEv7W8WG+jyblUe+hkZWmxYluHS3yJeRbwIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUQLhoK40YRQorBoSdm1zZb0zd9L4wDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAeUzrsGq3oQOT
+mF7g71TtMMndwPxgZvaB4bAc7dNettn5Yc1usikERfvJu4/iBs/Tdl6z6TokO+6V
+JuBb6PDV7f5MFfffeThraPCTeDcyYBzQRGnoCxc8Kf81ZJT04ef8CQkkfuZHW1pO
++HHM1ZfFfNdNTay1h83x1lg1U0KnlmJ5KCVFiB94owr9t5cUoiSbAsPcpqCrWczo
+Rsg1aTpokwI8Y45lqgt0SxEmQw2PIAEjHG2GQcLBDeI0c7cK5OMEjSMXStJHmNbp
+u4RHXzd+47nCD2kGV8Bx5QnK8qDVAFAe/UTDQi5mTtDFRL36Nns7jz8USemu+bw9
+l24PN73rKcB2wNF2/oFTLPHkdYfTKYGXG1g2ZkDcTAENSOq3fcTfAuyHQozBwYHG
+GGyyPHy6KvLkqMQuqeDv0QxGOtE+6cedFMP2D9bMaujR389mSm7DE6YyNQClRW7w
+J1+rNYuN2vErvB96ir1zljXq0yMxrm5nTeiAT4p5eoFqoeSYDbFljt/f+PebREiO
+nJIy4fdvKlHAf70gPdYpYipc4oTZxLeWjDQxRFFBDFrnLdlPSg6zSL2Q3ANAEI3y
+MtHaEaU0wbaBvezyzMUHI5nLnYFL+QRP4N2OFNI/ejBaEpmIXzf6+/eF40MNLHuR
+9/B93Q+hpw8O6XZ7qx697I+5+smLlPQ=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 004
+============================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEIe/JKTANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTQxMTI0MTUzOTE2WhcNMzQxMTI0MTUzOTE2WjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDA0MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAhFAEamE+AGtKlpCDU1ILU3NUVjkrU2MiD+RcYM44
+/+t6Ho90lVLIarwpjUC9E6skZDwSfjDFv1yR+xJ6nnfK05PX6CcW4I6xIYsPLESQ
+Pe988Ug9FoTvqgQ/yy+5Ru16xFNWWCCF1KgMwyxgaX2hnkUU7aOIVPD1pHS/17TN
+6F2zl46OL8qX9z9yHi+DRtjWZrQhQQ6lvi+hU+fgtFKGUUdZL/jyZXALVMvTt9hO
+o7HPJDbzAIfCY5TZQByTbUwN+61twPw3m8QzNI79GlDDewD2nVzomDJUvV02Dbrb
+e+NiLnZ/jZcHzWmF0ERqXM/sNnsWxSx7ECQV9mb4LPscCwIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUJjt0TYVBK65uE+lKU8I1GFuk7uwwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEANY49i1/+6S9J
+VS/yaHfxn49uVFMwJNeM7Ez6sANMxZ6UlSW5tz1xcwBo9ysViyt9W45MmKbXz0jz
+HQBTuq3jq+aDjYJAtpvlQoqARSa0P6hXPMYXXLas7z/DwUeWomV+iYczG067Swsh
+jQ4WKtg3o4f82Zmd39oJpYgIbJJPC7KyaNuDionRw5fiVfgEPRmUsB1jQGWz/d/r
+YWjFU6zr6kqrVoostGls6PXxfyYcw9iiMsHWgsekyW3q+4mDRSaLJMyixw1Vwfy0
+TmYjrwg6hi9+JrIJpnFCb8aCjZvZ0JZj+tWgjGnmw0acej2SEFItMBz0UHQNXn0j
+BLVYfu9RwulqFWd52pumJVHECoDEQn93MdzippYAqEE9kaEl5wt8cd+9uRCcBuy2
+OPleKXWvuYEEjqH7SbBxHiZuqdHZvFkfRdSNc1dW7sKE6N4UZ+b8+UoCha2pUzE2
+yYeE3dkv/E1K+6uq38Fe42Iz22hlZrEeA3aGrHopOFvUY2MOM8ksdDBwQZ5YzBQ4
+HcD5RHrvsYUbkcPnnVVkN+M8IKJ+6LVowx3EG+ytzVixHrSVJ91ooG9ocD2vxZAU
+bY8gLugWaRbOZkgYaHTj4Rjq3ZxuEPXEDKrSm7nUgMMlq5BDYhVzBWXrJtyYIv37
+QHaD0AfWGx+CiPbtXWmvkhC+QLzYnWI=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 005
+============================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEWRxZPjANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTQxMTI0MTUzOTUyWhcNMzQxMTI0MTUzOTUyWjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDA1MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAlfxzOag9lbqDszEJONeUFuI7i0ai6knYlGyaiAiV
+kxT3dQ1RNIkypxayrZsJ7kosQ2AtS88YzQUpkq6iBqANkyH6HedXtZg5pnKYUrt5
+alIcTxb5SQi6swokkBuDS+FzW+/e7tw/GwhGW5mbaCAVTE0KB/efe5RGkbpBZULA
+Q5BIIAJdwylGq/BjPBLElNa5L4WLbKHsErG1TXKjG3Jx0PcSIpXNxe+QOv8wfT8A
+IfEtlaW5kroKplO/dd95gCDpGrYmKI2jEq0h7YR/HBzNFnB41v/QHmUYmOp9Ko66
+6BnnP5lEnK4WdGmceX+nQX9uoXkQQxvKrUbDqvcZB3/tjwIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUKf5pYw6FOkzTV1+EOSqb7S1+jKIwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEABvP9TBP5I3mE
+N3kx0NJVf1ugDWLV9mWzwC1sM6pTH1i7V6GvD0tMFi6hCnwug4DUZV6wCObys2aY
+Nhp7kAqSs6vzBZ9tFMdoiXX8ozqCx1SojgPDqXdrBsjY/v8COBKfDuKuVY2SlmgB
+oE7msFFTIhm27SqPS7o/u2oyQCvIVjMt6uzmZ1lVIxtjCDDb3Ps1Xwp0g2BAJr2y
+/2EJB5WnRU1FG0rjG+GXMMWxRMZb6UUFfOuWdouemHBfvZqesAVDBRqd5HYX9xKG
+6Abl4YxcvJUYSPwwhA1ysxPnWLQmtJW9vtLfuaoPadDETwmZdPz69eS+5MfVmVNi
+es338/AygwibpA2g4ym0le0nTKyPSJDkDHtjdQKQLxKBCZNQMzuzn5FdjuU9Tmpx
+97tNEgYbKcjQ1oOD0Eji4ik3EVRulb8XvY8DD7SXzntHTRHfmWR52AQuX06GhvfW
+3ENiCQPtgro9js8snOD2CCvKOp1eW4eT6/t/5/Pa0YcbvcBBzJ5Uk+QetayjNh3x
+ojTmNVFyXnL8iht5S5Mh2f42RPhMpN+lNBQrNx63rL9IRuC7fP5MWH0IZl0ngvW9
+0tcSInFqdw7ubtey6O2DeeYQZs5up3hc2DISnHohypgSW1gqksL2oG4mF/FJO6io
+h42jrWytzG9zPXJ0y8aviHaqDgz7qJQ=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 006
+============================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEEEjpUzANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTQxMTI0MTU0MDI1WhcNMzQxMTI0MTU0MDI1WjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDA2MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAkjXzEvxdokqQEvdnL7mssJ8fIkBYIleYHjYpCYMy
+zQGzKXjA8G81A4tj6zTIq8hfECnM4cafDoJw/RypvbIpdBBleCbZpm5CYUKLB4zY
+af0ru5KQQaQwDzYaDLA466l394s9r4/htNp6FETMAsuUOmefFfiyfe/p8zeOB4Wa
+I2RegtRfqZw4P6v7zoyHSLq7z44BFwuQb6Jq1MnU04NT49dpAGabvOIycJPWsvlh
+g3wnSWtapO37dYZxYkUdRmL/ihp49d3QBYlvUnZCVQeFEA+X/w56LANtMJH/8DQx
+GrdMnN78Tw1+yjoqmw9rlr0qnehgi5bBPnz1WB5rbER/4QIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUx+4dnPaikaBuT1uIzrJcruEvgnswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAP6rKaBGv9Avo
+kjEZvDyBgajuZhPcM3iD3AeBslUImSnxXPnlm2oyUPtEunriPU4Qmfon4QeDMvPS
+2tig2GAokmDPmFZyBURaOpc1uDa8t5TEKyZqUo3sq1n/H5x4VBJ3wc7VzfUZ51Pw
+N5sYqOftuI0R6VnlFeUgce4jbf8nMESmPUAFqxYkD6kq7g57UGQT/NaTFaUIugFX
+L+8RxCXEhZYDQgWyQTQFlBB49xZMdqPbnMI08Np5gFVXeo4HigW6pZNohBDgt6cg
+5OvOfPypE/kNKcWCZfihOHjdyrI/+FWgThvzcZYmLX1DYziNqdZOsyZushYAznxZ
+rA6HuCh01vN9zGrbD8q+2Ht3CFCu9ffKcSqDRrc4xWulyysDcOW8vPeqTuAlF1H2
+s70iwEWFvMmxR943iBr/5TO2eg6gmZdbVSEkxKYnoU10MuAfajQdy/P7KK4Nhoe2
+W87h3NNgVickFfKIdiGFRHqbtVOxMEvfMpZtIAC18lP2sF5inSAiLtFRSkmUXLw0
+dV8GcCqaXwYgbmuDHgG8RlYXOEkknMtT6MOxU3ocQb90HTL8hnqEEVrVfwSvG1ra
+hJqBE5i9RFD6tTeDl6Z4NNC9UpYXYK1sl7Kp3evFagl/y6TLspmjC1/zp03aZeaT
+aHV9ERAp5P/XaY6KpbgdiqHas1gdAZY=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 007
+============================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEJCe5vDANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTUwNDIwMTUyMzM2WhcNMzUwNDIwMTUyMzM2WjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDA3MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAi3cytYnPPgOFX3dzERwxtvj7sJ7/ZwAySgvUc2+1
+kvPxHq0lxoaLNcDen0tMaUScEb8TkgRKK9HOOVwpMm8IzxTr4s3SFzk9dQVSouNt
+qqArgagPVfvgAeGw/kzdQo42WWcUCdK5BSaymv8HQBIUR6d3zE1O5u/d1pWaYo9x
+IsmLj/R1Q1kI7KcMF1LWkSfOUg+YpZO+qL+mKP7qy1fcf4OnqfdVr4j8dkchCp+D
+j/aUksKlzrWoFFZH5AxsCZiu424A88kXHXevVtq3zZ8nZfaVt4FEgv3daEHaSzei
+2z+i3ldMJsW3+5Xw68ApG2A4PZHsiRLWz0chJtH45fjIzQIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUnH31qRw9SbvnN41KuhL/jnii11wwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAoUK5UZA1P1Qq
+QpAOAAlykC7E2+x8+rjfubRX9BYsZjOuMWtJA5pbtgl0vhDQd5lmrU6F6M6HXWil
+xOEpJ0rtTgOvDRJNeaVzAsrtjFo97m/H2nAaBk1FlVOIn6fLip7fRuPwKG5m19E3
+F2DPC3sqltYH82YaSBItYFrOWbdy6XzE9l0CydMYKNbf33+KB6T+WqfrW0TWWlAP
+AylyG4EN7yf+etW4QYbDOIJKPqecPkms2UbV6QWcDoVI1DaR+vOVvkaLcCRODTUz
+j3ga9NTeFBE4w9BUEtngNMK+man7WwAPLt/nzt7/uv3hJPDUVTdFBJB+Di8Ike40
+m4xBrqp5xsHdaML6cTnjUukUZIuacIiLIj9B2I5j9Kh+YtVaxO23Fkqv000fv5BB
+LQYBEle01vVm0enfuJawHKICzgGIIylfuK62utdgGNFkxSDVD1l7C5fo0vPwcU2Q
+7j+RAg8n1UVwY5XTz4gnvz1qby9Lgw/h7jfqswEOgYa5It41cSzsRbJXajEvczPB
+XXkeA6RMEtb0ewEjceWsqvxZ9IDWlEbahFWP8nHnXZwelcxLTWG3tDh6Pe9xPD0D
+fKOBEw5vnCQtiHW+OIv+oC8bFAkDLe5dczckIbwzDdFhnh3j+opATirdjyTsmkpk
+NF1yp4dtA/CQ7EONkPu75lLFxY3T0zA=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 008
+============================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEW1RJ0TANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTUwNDIwMTUyNzUyWhcNMzUwNDIwMTUyNzUyWjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDA4MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAqmjZb/MgXagN1uQaLtroNt6Uy98SRsWsJSElrVk+
+ym9JSFuNzei0Whh8KjMO2OVAHbViZM8Rw4CxGnbTqlu5X5vjLWhx+7f9a/CsimKO
+XAeU8cmjORRPAnqrg12Q4a5tKYL/dsiRoQTK/u2NZ/G7f7DMm0MtCuyUThV8SPSq
+8oDZM7FXqmwF9WCLRfHitXAcAqoSrFpRSZ/rTmz9bil58NE+5MDB+cAwsD5SNXZN
+Rc6Q4Ddr8PizwW/dk/vMZ6BAbS9bYUmwGdgdZ5yJ5s1hx5HqTvy9RVfG3dxuJX1z
+vZjvalxBeCJoqEDPjXuwPd1okUwkvfXvwj0MzH2Jni/+hwIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQU7/7sXgFhAILA4xHL0HoyBECLMrgwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEABE1sRK9RYbpA
+dPjCNiBd9SowEOhoQx9j48snWbcv6gMatcCtdggUTZUHpVB/K4uTjm6+Y9JX04Fe
+YriXkS20UdbRz51Xx9ZZyTz/7UhISkpnAZ4nQ6wIqdOlN/Db+0q8i0jBnITPmw+C
+21qjHccbWIsFcpPUsXWniG4/pUfnMhFBSu9z3uAGH5qAzbQvvtygAamvtUTTue7j
+0fo8SOmrcmnHDXnEJdYjiIpxh56+rJncPaJq3xFUQnGz+Ml9fizQCgwuf5pU9hTK
+n+MdZ6cqZVpD8RtJjyQAr2GcqvcJw834uiKpTyOC9qI+LM0fr0levkGDMUW2SYxm
+LM3+vvfrUIp+jbaHYir4l3DUx5HTeFWsRjXdN6wn956FgKdjw+4cMltfqfVrIW+a
+TLOn5ki9jBl3/ynKJcC31LDOlKI7i9IBHMOSrSFf8y8kH5KvNEKmbeRGSxNpvUYZ
+HaGemroeVyXLDd8Ulfpw82EmOT7bZnPieSZRjnonBA6tv6nlvpvDLlQYbuFzpnNk
+iFc+AXgUfrdGsUANzxbjYBxkWRS5Eu6fKUqA+F3Ii0IbVAdEqwOcrogKh6PgS514
+6gJ664llmx3m8tBsPPdzQUSUxKgcVcmwLkKJGeGTmV9SmcoCd8LWvZDDn2+zFugi
+qStrGPW9mdEpSKtQxUVv6uLxVKV6uxw=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 009
+============================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEbzMaOjANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTUwODI3MTIyNzM4WhcNMzUwODI3MTIyNzM4WjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDA5MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAukUY4AlHEhX92oaJaEdagOpl1GD3SWZ4ukutrzpb
+yw8Kbq2lqRFbx0WYePHlMNqe314wpXhtjMcJVG42RpZDCTOZxaFnsGThPrpLlTlN
+e0SSIbek9oU8+a0KLet74Y9KTBF32SLv+6Kibt2POtLVOiVTdeZgOZ64jjb3DHQc
+PSGNTWZ/OhIqXWRIr7pnuvqltEbftmFNB3kGoDNWLIawPqflN4mI+YZuv1xPz2M9
+ld+83l0LmpGoPbmgYwMhKFeVfYI6jiDPFEk+I//FrXo30GZ6wZUX10ox8aOa2UOS
+I3XPNOBaYyOzKQZr2ed8jK9ySmyVAqkIkZoNx1xx2ORn6QIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUCQyq4YWKPDo7bU34l4kW+yBfypAwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEApUpo0VkZDFDK
+gUU5fKY/Zb16IkTUb/IFt6T7epGB+mTv+lrg3RPWNYecWcMGFFYLSDnkeYQ4G7C6
+ubkneBiOq9PKEJpv8Eip/sID4JcLiV28NCpq8EqqC5FRygcAaPR/BtqP/Zje9sJL
+8fjl9PryzfV7l41uTIxn8Gu2OMnqs/oTUdiHUcLYVTaBBolHhsJ22++Jfxvk32q3
+UiX5X6BDn5YXHrSSm89lsXk4P9fgLmjOPVunYejnX8JdedoV/JCFO6YJDbYrllmV
+hb9s/pWWKYcWcLCOuHKfBfbpoP5wSEg3iPRAW8L7SEc9JQk8kQ+Z+WJyR3DkBe2h
+E0RyPbZWefTY9fnZPI3LSYp3jCCwNz4tjb18wlaPz8xS2cqNdKHuIsrwhXN77XKZ
+NzSiHREfrlOQNzsC2M0f8TPqh4B0DXH6cHZHCQOk/2FBvtdallRWR/UeD5WOOUQ8
+uzwi2c1vXTAZDR1bM/lxitg23OrqQwc6PDCN10mnrqRdaDq+uAwdSpiSjiIN6AoM
+CG7Q21vsbvT+JdM5rhYDLQuHxCPM4uciclnCDHsOBjPXKW/FzAIt6llcSG0kLlp0
+MfzA8P8kw0bcePFq8xMr6FDpd9E9CGCxkXyMn2jLyOOz+tJB/rwTKifhWyscUl0y
+9YYumbJ6vVq2dAwyhAWL5YYW2Y/zZwo=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 010
+============================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEJl+qTzANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTUwODI3MTIyODIyWhcNMzUwODI3MTIyODIyWjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDEwMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAwEtScKQB4zjh2Ci7OOxmnIhSVCncEZYYc9daievb
+XPn8fsWp39O9RG+27tGWQgTrxtNnm12dOEVUWCG2azr3o1DREr/ESOHQ8/3kXhY2
+86DmGZS4M02rya7uv+DWcKuZi9KR3NmbFHfqp2zp9S9xjUaugDVQYqsFJ2EYC89J
+7obFHcfw0KYiUili1NDGzcYnnTSKhKPTsVloTezq6HgqeZArkOX/O1NIZX9RRpAb
+DnJ8GgVLqZ4gCkbFTbA9FY1S5fQsTTU3nv7HB7LkAsY+BPNbOjY4nq8nLc3LP4x1
+wj7iisx9Icn/fIgFldYFDHy09hlOQntWM94hLXIT0nc/1QIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQU2KP1VghaaMiqXV/gebzG6cbTd2QwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAo2BsBPPBEiXO
+/fp4Lj00Dz+nb4g0SZLC0zIp0xvzM/ibGZufYb854+kq9RY1SeFz7It+DVOgdoCh
+GdFc6CXHqZdZoFpFkQY7I31OPkzy65uQnIzsRLce+Ct4Lts5+I0XHDpxtGOCLaWo
+Ms1bTleWljsxgmw3CWY9V14tIF5dEEmnUgjgbDo7Ai5nLahgfqNU4XfXK9zSRX+R
+V0IiYDVFDQqfzJ4GroB4ttYthzr1x1e+vJd4Bh9ErF3v9L8cCthKytOwu65npYBG
+UGH+aWRoaX/3pROjXEZFhFHfNETFc+gVXesIfYeJJQPygudADNYfVtAsDF4qx3JT
+UUlgmzC3z7YivGGBD1Uoj2b7x1DCCy0x0v8ibXbgd7nT0g6a0lZGt4i4gvbUUbEm
+463Vr8Bb1XgA5bsbevUdR8SmuIY0PiS7qioQs4cRGagOSVG0MlKtDD9E/jZ5PUZI
+RpTduKG/lLwH0HHeNgKmDt/pTQWa4/sUgp/KHqg1E82J7sCu4vB/Bk1pTybe4GV/
+YDSc1NGABsWRzZnrIHrIVsXYM5rQzV9+/+BxRmhEqUVUGNzsFYW/RRieNWyojYG6
+v54K9BtAELt1tWXBDE/2Np/RFZQNeEFh2pkLxRNOXytuVoXwII7QNr4TDef2PmE+
+thsvOkC60E8ZEsKZ8GU3Q32lT5CExWI=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 011
+============================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEXYw6ZDANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTUwODI3MTIyODU3WhcNMzUwODI3MTIyODU3WjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDExMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAue1NnPP7ZWDRj1of4h/vyabVX9ZLHiwuBIZkheDk
+NF4jsn+uR8xud3RXZrNd6lga6kmJPBwwa60HNc4bJ1XuFVy6Ch2V6yYNqzrIHgTB
+zfc5GqfjVXir47tRws2Em01lv+hLPcx0wdJLw1WVadwjPjKDVauNMTaWcZbQryXn
+ZQkDTlNJqMEwCdYrnSxpNtgvmM/OqvdgQyGTV+N1A1uHGTqMyaRVzuq9BGyLfLrd
+bCgum4OUTlwmhVkRXCoo4loa6Mx3qlP4WsPLe0pnGnBNXzUO2Y+F2Ye2S45R58ox
+keP2fznHY0z/7FDAJSYZSmfnjGwuNGANhoqzkjmAvfDOXwIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUXCkgdCF5vHBNsdjFTDTKlEBWF8owDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAYeUbnJWPImxO
+yGYdc9kPj9xGd59U0Y4bypm3z2YW4tPLr2c5MP8Tte0Cpq3AD+V9MlWQW3VRhcv8
+ATEcKyWoOEBSPzNcSMDekjwAnS4mAOEdlJ5rG+bbixH5116QYUCkJvdVYIb3sZTy
+02hj2Z3zofmz/9CSCuKqeQdoF4l/3olR8k46Pd/Z9DUZSCxW26WYzviYORzAusoi
+H9qGgO7NLkFeYBlKFrkplOWlNTpM1psfAYhIuhhnIGarcp+59owc99n/f3VS6mQn
+789KMaVPJYqOC2/t1R5P/hgwoDxbjoRmy74f+nUmMdp7lF55GsN/APQ71LgqDg8V
+LuVVuaFSW5kb8DWDjG/z5fNR46/TBI2VFAAabuYmfC2y9n4CYRNdSHH8FnDOGdxl
+ll6VJi3x84ywPxNf3m9ok8j+lmoiGm82YUlZbAnjFIoNtNvFIh5NoPzf6/LHEKYD
+zOaK3TimuJESzPuxjTumUj06rceOokczl2oVvGzvHqWYAWU8gJQa1aY3LkQ0fK5q
++Vc/+uenilJEXEQZX2Y5Px8dLDcr9rPiMuxY76sEcg+PFvJLg9QIhKkgzt74v8Ih
+aeDhrhAwKgDKcWAohYA/WQluxQommKp0N0s/Oi6yICpV73l41ea7kKzrjMu40IUS
+befqsgmXOcuz+HHnTsINAd1EK+kMoFI=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 012
+============================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEOj56uDANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTYwNTExMTM0ODAwWhcNMzYwNTExMTM0ODAwWjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDEyMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAmRofX7r38HF1HfxgMgmjSvbUTA/PzJy2+cFlXqyR
+Uzqh94FRupAD8zpBD1D+qyjr3VDhEhfc0aBmhpQTytMIzWb9SJl5ZDXRlqY+o993
+4bkpetcCBFvfTheA4dIopNr9+N7v7m4MvWriTc4QAQKl04QZj0NEyZSW5e+yD3u6
+4d1a+xw25basgJCAgHb4l5bkkOL5DVAIMmUXiFWFRXa65hMSm1YBGzPmfi7ufkaW
+dokdXZJjV6asff799x39Y2PlvisZcWEvL7qhSUvXvwI/6JDU1RWoTuJMw6OkWGY7
+t8hP+I9zFSXQZTwuER5oE4BSqZU8FmKIUvJ1OVZ2pmTuFwIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQU311tq1EC3xih93ET9Jg8Ysuvc4UwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAofgkjR4XQMxV
+891IQs3jKjie2IZvEqPFsBOnkMwp0Yb/82f4HVe3A7c5YGnmrN04rOAl1xB063xK
+m3Bfm6y10p2NHyTbI7japuITYG0fZP50LEQT+AtNyUh6iRXLxeGROD5HMLcF/k1n
+BuZ8SJ2XO+HTmMqsaAsP/l1EUmhMUlQkgOhwdN/ELnRqM9/RYVdSk56I+RVp+b4E
+zuqhIFfas6wfC+XoZIqXpVljux33na/6v+A/dSxR6uFcc5m1NPVv5KKQaB4Jkze+
+UlaVm98jKJbV1N1FvL5T9EoKN5EZq2KmODvqhn0JO6gu5D/35aR87BHUuW8vDoSb
+DWkbi2Y89BJ3eNTPR03k6uniBzHwFYuTvuDNPIVG237HsQnK1PT947aGE531M4jT
+Yd4DQqSBCgKc3T2a89MDfosN7Qg+OqlA1nA1eHVWyRuRdk3kr/fy6rWK4DotZWFH
+wkN029E5PQNd1cAVFioSTwPT34qPd4wxEw9FMnZ9eu0QpyXBQwJO3sKrN8czyk43
+5zeIuH4wRz6RC25RVqRKm/OufIcJKRAdsuryTBb97KwRRtVpD7amPaceGWkLCcgH
+/6iGnsVP+MKDA3Wzw0xn7LxYC29/TcNZZbVXcVxe/N+IUSeZNhekOqvjpQtPsG4r
+RHaB/fhyBjos8Emj9y/jvLbMQ/ypYMQ=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 013
+============================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEcWsKzTANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTYwNTExMTM1NDM0WhcNMzYwNTExMTM1NDM0WjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDEzMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAl2EhmwUjS2q7V6oFKcnBvB1NIzGWUx69wF0Fn/89
+dgovVwZ3hYqyGvZaMaojcJa8UtdlFq0FrS3G30VZlIwAcaVQA2I6LjftvVdYUiC1
+lvmyjVFsO8pXMIN8azbhDBTAclOqIgAWToMKjmoaLfgY4c400+GnOlMFezUAwGze
+Edhv7IHaVO2kS2fbA97bzAzXJiFWMW1A0V4/yBrLHr7hBm5SJdjgFYPuAqfr7aeA
+dmWnR7ZPlcN+48r2K4JAjic5qbQAWJ9pUVOw8/i1KAyo/IchDG0sID4dHI2atOLg
+ukejlUaIlGiUbqCEdY1jB0GZICuy4wg7rIvyNZvzm2uSIQIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUESJ6siiYMomtLn7mhBMhkB71kvYwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEApfzZ2HRYpPua
+H9KLRfYMg2AOLxxcZfKhvBPIF2E9jQ2I4H0wE23nWRHWbs/fR2LOY4tKTtKQkSpw
+l7Lu/zBri2iogp/X0i4/FTlx0OTKkfXbgoMa4W6a84DB3bIcpx+uWgqU9y5IZnym
+BnJrHyRNgln3rxualgTkH9SJ2dgCWjVxd4ekM9tgEXrz/DNN0AxkJqjb29AxboGq
+PCOlb5bLVODUaC4UjiEMTOlXPYiu6cf0zto9KCkV7TpvlX8SfFYwds6dIjcn4px+
+ibnFk8Odi1Zjv/FGu2QC/b29jhEgzLQlhfaBBhOcA8cw27Xi6K7R7oxlsi/yC7nZ
+FEXtR+Smq4HE1FFWGQCBzg+kN0T0L5mB8ud472cMJ7XAGH7odlHAbF8kqHOuTyqR
+BYNgJA6SldVFLtaXaF/2J8PtZe+qQkaHqW554GJRKSR1Y6D8geWIFJkv+3mvK1rA
+dvzmeYEf1PcI7PR8JeHMOEw9JwE8VqtXTH32zWJn+d4QuU3pgX9Icb+2yHHCwz8i
+ySGAvhIb7/h/nWN4LmHQ+hdQ1UFxvYQOMSsL1c69ahAAX84s8XZrv4lkTigFV1gV
+HpcMGjtfKUsoEo6gA07+DVSM8C/1F6YnElide3GWLEY+LnBoloB0ka9K6ytXTjYI
+Jdpqp4BhblKl466LOKmsKm3VqKshehk=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 016
+============================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEFvC7DDANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTYwODAyMTM1MDI0WhcNMzYwODAyMTM1MDI0WjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDE2MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA07bl13XpI1uk8IOcJ99Z/G47J7SFTL5cr0U/lAOY
+d3hu5CLywtoXv/1BZwlflhLA+4OLX+LfnoGTLyr7KoXBsJyIDEYeoa/edTpdEhRE
+Cp2zPKaSKQiCwQncGgDIjBYr0bop2GtZoTmb3njCA27vIEKo1iN3IKJrHGdcQZH5
+qoCGPVDMj6LN0fMR9ypzhi6xemye6Frm+sRE7vdzYslHizQIhmuxXGyU6dmj5aVV
+rqmfdKAhG/AIvRYpf4nwxbaoXNExaEIxA3INkxwP8/dPEj6VdjlPMv8EuzTZ6M1w
+Oj4t3VPSM+wU+MzQnnAwUo+e9GRSMjGIvfocgq2vabPZUwIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUxm79LEkkbmB90J4XLlp/jj2mD2IwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAX4En48dnljkW
+rdC1OECq+6nFTlPPDYpfcXz0rKjGC/wpKTlvWVVA0dLj41y7Asev8+bAR7J67ma0
+yDwvAYsRHUmpR2cN8VPUPp4hdksAQWD78laWO3/oRSjcTjEnTN/Z8tMt0ROG6yGx
+1vh3JidEz0nzBGhyuX1yfzYlDCeCWZQPJTghf45KRKsZYq6gbSPcvWX3XzHDmzd6
++y/fWivl1LUqqBWD7F9nEnocCjYqGXHHJKjMC63XLrk4ilc2UrNpDJuo8jMdMM/w
+/gJjk8qWMJ9BlGoybs803QYv1dWkayDNTOiqU1Fwod8SjtV38BZIf1DrwVxNQl7S
+jQicbh5Zrgp4VtHNaZWOE2/6B8P+KiKf7Nzollb+tn5c46NF0A6PJxkekpItAALn
+U+AynGMLIfDw0HwdZ+1Opn02YbCh3rno3JbymJP0DLOgGwtS7b4EIJuQ9FY003wg
+yJ6g5b24y2KsBhgdEDZiHodiylje6UVkGMMrvHdWLEPGtNUylzTq9sgXoIB6JW52
+d2oM2FGpdwvgJBcP0zgBlD0JUG0VgoqzwUAXwzOWWCv3TtwAngMwpH8b87aq8DQN
+urKZJKPI0i7mhw+1yQ5Iv5QbB6H4d9KwzS03IqksJD+HuBGLTzkWTZj8/xWOkD91
+4tRRYXiS8KNhZiIahOBz52dNt+yPy7g=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 017
+============================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIETh1LITANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTYwODAyMTM1MTAzWhcNMzYwODAyMTM1MTAzWjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDE3MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA5A0BkjXsH/WNUL8O+YlAPQcXwHbM2SCt7jfY+xA0
+uCzBAn6a7q1ggyyJHqIEWdWEhlXyE8EYK4/6v7cWg/h+TdZmlLPF/0YaF1zNV78V
+W2S/Z0wrgHfZzjVj8ihbSFd7BdmbrS3sKmyf8OWk3LJgoRY8cwiKv2fsTP3iC1tx
+05+/2TsHPI1lngA6taSZtT6kA8Xcld6mUnbzGwhRwtZH/oPaD/7OAq57p5VkdMws
+qGBjy9CG1UXUshLsJzuFVezT7JxEiUrxhOFbC4NlhhDheD4jZXMNPFUzIhD79g4f
+6rPl/3WtbzdWjOxZkSlnAQsMUsQGGw/Z2stv2eYCRBcAKwIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUwAROOyP0OyhUu3atT915vGKYbFUwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAtHI/O0RgS8HQ
+2QIPWF3zjWK7v+TN/R+t4K1uTSeS9g5Pzj8JMTwsNAmjU+kgZY5WxbCIVszF8sXi
+yTAJIz2G2gwuEqhnoYQ5JKbzxol8ulpNELfExtMsAveX/tn1MbgtBpcw94VoNDcR
+4P3RxpYcZ9qg8vAV7uvUD1JJni4VmULHGGdzXvtV2sCw3OGzrle3lfIoBF5Vs6Od
+0+wHb2igK62aJQkgQIFN2ZBaWRxSwyrZgXlc7CTX7oEV/KoHdyJH0fjVyLUAs+Yk
+Yyirg7eF/BPD1sztVQI31eabaiBKk+brUZkFyiBHTsLozH5snzaAQSesSSF+OKHg
+MZ2qH/xdl0XwH7qDW5iSf9Rw+vVnofiX+TIS8J5iMRV5PMB7Zq23j6vMtf4BN67r
+R7oUioPy0z+gcm12GzTIZ6yZsX05D/PQ9KsreO1LP1SeqZ3rGo2mzFGIPIuKqkVg
+415pIqzArFSTi365u43KRitWrFHLVqbNIrfO5iBEjufuwoLchCUfK1OiW6u9Ycj3
+L/XgTm+hGxnyc6DIK5QJOqbEFn1nIIcxIIRdXzDb55IIx3+LLcNrNqY/pwe8g4gG
+Xl83tSIK2r/C18P7/JRNYSp398LcN/so21I/XcG6qtFsqCFwODJnx+9ed3A1bcg1
+AAk0rA06qGwW27QA9NGfW+Bozk5NNo0=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 018
+============================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEBUnbNjANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTYwODAyMTM1MTI0WhcNMzYwODAyMTM1MTI0WjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDE4MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA13d8bhc6JlHZaW5lk/1W8jYSFxAJPfw8vCfbbGlR
+rrlfJjHplcRTiq9/+YIJnKepyu9ZGpfVZR8++NcxJ0gPw9opaQ4A8LC+d2ZL80g2
+Q8Hu9ZNbCBD9p/eau925d8Z023JxVZkSFYAQaAHGbiYbfpwWgyG7x1OgEO6kqKjK
+cOw3kuu+tDQBVwS39B9SBALXlY44j1CvBxa4OkG44Sq9SvrTTBmjCsNBrnMIbjWn
+t4cTHMsZMT23Od7Hd2qvP7Zl2MlmAlrA0AiFrXJ9/WXsglMEA6H16jnzWvl/NQ66
+U2a/Accsc+j8gC0HheGFIP3zuPxTuQGFjtU4O0/LitUOvwIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUjh87HhKdSt7XYx9bSit1gorygSgwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAPZIS+i38p80Y
+WdqcSe0dN1sepE5Q7ibhCy8/6sfXPSh4H96usBReYmfHzx456iy8pkwaBBRDG9OF
+8U8UDDSAAre7Vec2uSBg+N4dyzFTU/82HhnppYdb0K+s3jA2suHsz90ORZ4zaG73
+322bIXnLmj1ftSFrdCPDKb4b9gY6+A4nG+Jk0gjGblr8WJqcbq8nQ0bMbtoqWgvR
+qb1FFAqtgKGB4krr9xfLDdTWH3Xha24qzkk2s0Noll7Y7aAx/PfPTQOW/sWgzWri
+h26e6EUbgUkKL2Pw0KbsypqVBKE4BhNYf38WFQ4KcUkNH042BAlwU2zFWXvJ6nhk
+lXON7YeLT5bg+fbIjU4e+jEm7IroCK9p6KURWjoOz1ErdvagXcXDifUf8WLV5rX3
+mOouPYzDbxPVKsQqetA2kKE07QCcjuNGdDAP1eME34ntL+3JbUpQ4JYNUu6NdXYB
+twVwA91W0Nx9H1Rlbf+GGq7+WOGsEPkdnRN3zyGTJst0eaYZbRZtIH4SvccDFXr+
+dFCZQzpQW3M6rIf8KKS7IkqvUDqd95SiyyVfM5QxFEefweMFl+EMi497gVGJR2/t
+yc+4zrXOmwXEJxdIZueJmSyO1zVkH0jF8G+skyJ4wv1ZXghn/Chm9IVpW95JTm5a
+Hl3ICSVYBbGFDUIC67t6BJprXy33fms=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 019
+============================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEPHZrSzANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTYwODAyMTM1MjA0WhcNMzYwODAyMTM1MjA0WjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDE5MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA21/GD5Jk7IgyuVi/coUHHYN890HpShCa48WVhi/+
+D9Pvc8avo585MYIHHqFz4VZh6RUyBPLIxxvg4Zt7E3P+edxx4Ov6DrnuIGuhA726
+cDLn9tynWonacFG5q+XiLpyHaEmxdWK/LEWKMT1TlEwnSDSB7cF+eOWbrCt9tCQG
++gqWVj6SAvTqT37ZGFOywU579KaYEaI01Lf81Wu5bifoHwicV420PqcDsHyG4+q0
+LntEcmZCck4XFce2Kwk0rt6sKg2yKf+PKU06QbAGTtJEMY9q7hWLboAuZ31tMfV8
+rQN1if/dJVeVuGQg5e1iDkC3BkyKef+0bPWKMOtPQ6irMQIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQU6QYXl+jl6MaPk17l6Xa8j6F9dSMwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAJwFGx73+ZMAq
+zaa9EroKhK7ECSx+8InpjdSUm/y8GRUtR70SKoJuJHK14rWVOC5Lanrwp0gXsa0S
+quiGBDL0bzG1JTtNGBIvwD1C/8L6vQlxgbwFuB2Dah1YdPgmvCck4xyYua4qlwav
+0hF1nxccYzmGvbxxYJH2zyz6/Tees3PIw28Zhujsa3W2xUHd1lqazxvOchDR6P0u
+BvKIZZ1XXlgMnhaVd+ZYW6nYAKrGh5/d6fIp7CJMP1QFTIj7OHkXZPAvEarjo8Iw
+54UeKM/t5axLP7hXBrYS84pbnni5aJ1C0LsjKsi/goMV1O16eQ+UOg7huJR8rQm+
+uSVjVaI5cq4tdRytGNix401TRLHfn2XQ4ea6EUSbbFR6STioKB7HrMqISrbbwdNj
+aa2TFNkcC/GZ70v+UsKoYmwqoOh1rqPGlnajaSE7bU+2uLXDYYqLtsjPg4vNE9IN
+LXwEvW+YcKjB8ZMPCfh6gSbUmZ0j86WXXCgPCWUEQgeyT1oRoTkB4Ie4KpkSBUsk
+wyg/mKHFN/edv1wZPUCz/npaK/XBQdkHiGLmp3oMscwuPgBHXOlU1EHH2QpnQr0f
+zFpBgzeC0P8d0fK2LFj33tvJcHgZnLLI+d1Zw1MAJL8xnH7QR+jRoNR1sNRjqUG6
+EqbwVM0ToXnZ/umHXLI5ZicMb+fdz28=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 020
+============================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEUFU7tDANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTcwMzIxMTMyMTA3WhcNMzcwMzIxMTMyMTA3WjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDIwMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAhLyPhpe3CcmBDqyufzYyX159EYaxCxeO0GsSQkzo
+K503UaukVqxlbLFmj0WVuDvDK3Z0YzELq3OFCZlHBORok4uUpWFXtW99anDSW7xP
+XfQ7X+JGwEi/RAGw26UwjHnfYxWpxTPmzm2NsfXvwEVAA2/h1yv3wxIntq0cB+Sq
+52r9kCALfEEScZaoO0f97a5wyiKnmHkP6WVLVCm6CYrBRkgAgBTpk+O7Il9l8dg+
+/28bAPt86exBVD4kTvZDq+3OLviQquHvOObDNl1FZimpJV5oVKxjyjE/mf0FmNPs
+b8xjcIvpWHQXjDAaxBo3WQKdFKUQW2Uzqyxw5GHCujpV0QIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUMsbldmY/7oDWTN17GOVgOGOzvIowDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAQBrZVZFzHZdG
+0dJPwphGzsXV5b/zBVX0wA0BGWh0TYzffqlSOmkrN1SXceDxgaUyi/ZQ5bEhvJys
+0BsHl6Ovq44Xk3hLfbFVKQ8aLV1mfwWSEYREZMCleJmleBi+FD9dDxCFem6UBe2a
+giibX9Am65XYtGGL9F48A/WHq4bcs5frM+Aq6BqFNUU1785cNWCTjpLmCbDVxwYs
+prk61dGD8L0uQrFGZWZHJ4EUlBtezHAHTOat3tg5SrxkCs6D5ThNl27TDItRqCCB
+ROhueR2TDAvBVJpG3Xeg6AGhNwDv9MWd/kQFjUDD0I9leWhpdTQmRb8DpVhXTxwB
+f8yiOIGh/Ry9m6kdxeMcbExUyW/XZBiEXFE1qlPPuJsmPTddYtL1X0aaefeN/Wik
+kKoE3vKvN6QduyIpPI24pybgzyExJz9N6asLxvN59ECb4Hpt/dkJUhCU6d+eB2OW
+KnMLdTHLjxPy5ijJN0frnX2s0p++TV690ZPwJJhP3+qGzy7pk89BVNRbKSEfRJCk
+3/5gWo8S5O2Us1PFsN3gkTG9wUCakhmNRJjWDNxmU1vnTtBP2Z3zYps2/K1SZRxh
+8vz5iT8goxi7iW+jpSZ5Pa1/q4rmPv0OBbkUg5mSf1F68drGfUtnEkiTRo4g3SGX
+HJsfLGq5sTYivqQONogTY/8yGT9bLDw=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 021
+============================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEB4HLyTANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTcwMzIxMTMyMjEzWhcNMzcwMzIxMTMyMjEzWjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDIxMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAlB5EbbHJlUM0PuUeNVQfPrGaVm7t5UwYrbgU4loi
+cjYA+7pDJND39g34LJecBXe6csr48QmWc5gj+watzIelr/XBOSGfXO9fX5Uueuis
+y5rlQH0jo6VD2qCZHcF4GT8theCx/fxNdWX+U7EYjbmfvTFFqEIRMwvjGgmUHGoi
+W92xoIl/Td/h6u/2IG/W9lud33ghWdVPnNo8UyNyDS+zpS7CRo0ufYGYun8I0LxL
+ILceKtVdHdzsgA/UWXx+5x9d4z/5NxNumyBGb2yw3q2FLVzW6cDGPCNJo71nbXX8
+6McLdoo6/WqPoAZ38Lmg5uE3EXGMFLxvQlQuWETUbjPl3wIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQU2iBu9dps95yuk8Xkcv/pSAFyzI4wDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEASvYoQD5PVK9n
+70uR8krUDYoqcW+JPvK4zYoPL9mjpFfWGMpvQWaxqqgJujb52VVoRs5svyj3m+lt
+v4f+MwaB5MbNt8RzX6PqFSd7ckAuaMAnEe8jvKABG2kHAzvECKQYttEt+NpE9O0i
+QQqDiCXBUH32EFfeXkvcDTwUF+hnBLZ9R1cg0eQfowr0n+yqkbWxbon63WoIJVNK
+rctQ1Uzn8KIOZnZNQYIqhLEeRaTZ6DMCRETLYIIn62/n6ya7JCRt239rQA/jAOt6
+/oaKit/M+rfZX7zKVIlp7Lw6tFVkN/3v5SdUjmGq6Sm2d8mm4LOVEcMINuL4PrSn
+uEMvFen7TwhZa3u68dNjYubB1C7pKBDZCvgS1r074/Gj+dwGhbS13wDHa+ne4MHB
+WX+8bj7IOPqt7HI3aG07YhjGgvZfnJ7JDkzHRXo1ab6FAg5/6mRagWnwyn6TFsPT
+f/O0Xo7txKxahndlolifGKSO74BEwZytCD2CpC6Mb7VdLRczQrgs9l81LqW2lkXe
+xGmoGmpe8ZuNsEoAKMbXmjVe3YdyBnpy0gHsYseFNGtXRKRb5mtKyQgKiJfqwjkK
+IYpUGaAs5gOQvJseHbSAz+k9R3yC6PrJpX1FXUK9xo6dR8IvGkdz7NELPWZ7UqLQ
+50BKxd6gCYJpW76RaC8lAoCJ/I7UVbE=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 022
+============================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEddrr8zANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTcwMzIxMTMyODA2WhcNMzcwMzIxMTMyODA2WjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDIyMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAnFpFSA+DGquMUBFXwRPfuqD7xt8iM0P5erFCkhqW
+zt9DRzHt8ZP6+oPa+rlKncXyvpPAZckchkMRI9c6VRLWMFtMKxgnp19Z1aZKHWNo
+dcLACmHQWVaw7KRraVrGLg/v7oZB7Hlqd/OByP83r1WoR4hWzhYS98bSIYAlZYOk
+bvGpyilwkKBBiuhyBylGg1PS06b5sbEUgxlb0YA8pWrWICDYIwQTRXcrXZqqXct5
+wnuhoTHnxGnhBmbrnGkhAoTomXcFdzBchk/NBdUsIWZ3J1RE+1rLftcODqZ79hpd
+Ixi3ltYfVBrBsAKTrP+7Qh4o/xncu1cZTYO4Kj4dQ++RCQIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUcCbQntk13NxE2E19p1zPCrwf3gowDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAiPpFXHrY2Br9
+z4Uw9+7YLlyEWgZfH6BRrDzXUHzuePRSa8odikOrDX/UcZYjzjJOOmDZhMDH9RGC
+xf5ZmJgDBirgk6GF27qgKyGi6TM2SMPp1EfPC/QigAEeBdSeHJPqfDSiaHaFRCuB
+MZSdy6oIXZhfaKd6iT//m2eYMHu7bVWBB/g9fwTvmSkim8EGjMOkiBrZWsejkbwu
+/Z9rTTw/fsZs1gCLLIiCB9oQbnsz07VIPqucup+rhv9XVJ/cWs4qo0GeWKuExGuk
+ZfjXSqIlmldb/SnGoX8U+GhweElMLWTYAResAtaEMDg2vPek87PXywnRWbMEt68t
+PSwxAM5bqeD7eSl4WR+kRgx8harnDrBi2mwch4C4IqMHn6bP/OysDODw72o62nXu
+5jqR0UIz4zGvkkYlMuPcQ1izfYcd7m+MB5spZe9vxbVaXkPa+XF2b0uZNMyyOuME
+vMubFylnNiqmcAl8U+8RVRlLxG2Hh35KK9qIlQ2lZ7hTPRmQpFC9S4uRIzonXnL8
+7L6BVkn8zjCtL3xu9S7Br77y5DQCR++WLACS+tKY6NXmW4pXEcDBqwWsKTwaXjvP
+ICAGfLGQZ+uFoKhRM5w3OySzsWV5l2U7hxBrrag2L6cNkUbVvSrEjXxaDq9xQTS6
+8OY/sm8ZOVzgfXKihvQuMr9uE8wq3s4=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 023
+============================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIELQd8CDANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTcwMzIxMTMyOTQyWhcNMzcwMzIxMTMyOTQyWjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDIzMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEArC6DMuXAKAHFjEfXCBzSolXaP7y45XRAZeEJ9lqR
+sj9DCvSJZYutu88cY/ZS3bMGlteQL0ugb9VuaNXb6aPU/yhykkx+r7Hv+xivIcIn
+9cpTgp4fxJMcoajWbUyQf8iRLF7kODr8tdqU/BYJAkhc7CpKI95SBFcCZ8Zp9wpR
+UJV5nyuXWYeluTIrAYWlza8PTqs+cQYi+eXkbEhVazol1gdhEP4alPkZElJwKOGb
+AULGDRAzZV6kAyjFpR36eQHF8mPlVP5ZaknoEXHimKrd2aZFF+ppjwUuFsuwg336
+lP7Gtzit3gtAQXH65nXz+UETdcbXIP18uGnu3cZWOfLEaQIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUSskM7mjUtXKd5DV9LEdYhPQJt6YwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAOBr/pWHv8eZt
+QLema7QWJUFG6CkV643c/94zNMMFWxvkx595B2t7jZsp41zBzEGI+m7XYFk9HDVF
+l2ZJrGXwMEYwLjkrDJ7uorFvmCv0By2H7XbC1eWBAr8eFl+AQqr//Mqt8FjFBs7B
+LvK8cUMRico+39/aaa6iNTJaAv5hBjOBkMNQOaNmsI7XPh0T87rpcD0pK/XEprg0
+/xi3OnjkeMMTJ+98Va4Udg/EFcg/PSwhnQOi0y/uEvz8g3ps8RSEAVFw+4is3Z3z
+J1YQ+Omb4muk0/M6n1AZ2vWWgTHTFV/a+zkS4p2fcw7/p4u3THDFiGrxS845Ps3g
+flrd09HtuukkAl1iI/UuhigT1COGdtaZq7pWUPmrm8QtFA6zNPcOKx5Ox7DZ0xJc
+K3skfIJb3BmqIj06MYFEbOJYYt4Ac4gfTWg+JPJjmEzqCr0+sNGgGmCOw8SelTtc
+/KIN8MhesIFzuRnqYJ1SrIBLOROehYbFEdK8OZEGCkRpYkVqXn4CM8ypvxa5wggM
+if1t5rDPVRAZddJj7zlPms4mEf0nx7HDua16Fg5TYpb5RP7ev6k+EmvvPIopHk2J
+SrvMVNjlMicx7NvPCa3oUMffso5OjQIv2nE3/FmVdVtmT2RQxGKfh/vWq0kmGF0t
+VMmzMSa6dSLvRaDJcl515LeVS9tZvEs=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 024
+============================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEZDQMHTANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTcwMzIxMTMzMDM2WhcNMzcwMzIxMTMzMDM2WjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDI0MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAlxFity2Oj+nLDYbvoLMjqmgv3/UQFTVWfhDUpywt
++DeMQq8JteJmxWXZMKsMMRHG/1FzOWjnqBWcyUCqVNBSFqkU5GOw66Y1ahVrdtFg
+bG7FqqOcFOFHN3RljRDEboh26ORlrMB9h8XkB9VaHkYcLvWu5w2VtXyiP6LSVWq4
+sbErcYwpsdFupR47PKbqUg6DSJzZV43U2ypiGQxw10Yz1KXGOXZhtozY5nmX1W4r
+78Vb+R6t0wfFE9BpraE94NvzKUMAkZddgf3uDL1BzKaTCMe9pK6VkWnUU9Yfnzu4
+SBiG3DF1P8ZFCXyiJlG2isD4LnuEvW1y11jpJSjX9JQYOwIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUJlzzJHD8TZPHAi+jSrTICHlIRUswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAIVJNce2jrlnC
+nXc1TZ09ztr53mVC8E5PJwlf9mo3bM1DQjjcK6Lqehm/O+2pxEOllLt2txaYBWUc
+anuDdLitxbSq0o+CnQ/KR8nfxwEEuxI886tlIA34UIh4Fs9O+6wKS8xoJ5quI5wp
+R4m+hAy8b1QUmTTum0mbBf0VDgHW2KmcaFnawjjAzGKNQRgqAI3WfSKWFiImTPtZ
+eMb65U5WxVC9Vv2Ge+wQIkx80Ppm1jKV9jRaXG0C0ssciI2IXdIcLLMDgREOAEyw
+v7JMu/k9Vqr2nj8hTk4ZjoXOk4K4GxOb3qmTRKFKY0PLIn+C4skPoy+l06WgC60P
+bcPmV+UxYaKPbTK8XuDqwjra8eZjE2glUNvY8VVRDWsqR43Efqf7dAM9mC5hu2yd
+t33BJHkweOosoJfuDVWVZlQBqrRvr4j/P7rVW16fSv3ddqUlwkV9/fE1pG3K1ak8
+WBxlx0jARAt+Wt3CHYZ6eS+txdnSyREDxFM2SeN7PRNIKOeOb3WKRLrshdLaFH/j
+Hujysgv2TnEWJowLe/KIPx3SYnaRF0UvT50lbWAryIja7LJrFNl4JAawDx9ANC+X
+mwc7yKo2vd16zcX3pG1+4sAD1+9JyqPOMP4VU8VqWKz2cD61CwwIBYnXxS9KGz+V
+8s8K1sKzv9rxJExbFtBhTlNiVKFJvdc=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 025
+============================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEG2CcMjANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTcwMzIxMTMzMTA4WhcNMzcwMzIxMTMzMTA4WjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDI1MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAmPGDHLCw1mubjm7m4vlAa8uN1AviYgFwjiaqjBg7
+ubye56UskBqSZcvWVaP9ep54vxDZE2L1RrVy47kGQMc4HUjrMAv7O+kqJ0gZKU/S
+pimoC87RiXILuQrC3SQfWiajHAMkZ3IIUz8wwTHSR86gjgc1/fj90skwOL4MG3tP
+8Rqh36ETtVfTaeLd25bhgckDVw5rLH/PigI7d3WFh6S8eE+21wWSloHLMpBqqKoM
+zYeBInlDtBfnryps8FBmhbbOg0RUHcTRKONW7A5T0aHgyf2b+7P0jlywqDXRWi5O
+fbLOIHUj2lZvaDcufETeuCOboxTHWLRbZDSlxuRqxP8BawIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUKkppgyWhsiBGTvAJsBiSJosl+E8wDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAIWXOlu07AR5i
+befH/JKbJVZKywvQDn4w5Pi5SpaV98dfICFMNCCD0I3u6WMTA6UNAcad1XfPrNt5
+0mXYZxispIOTxYJ4tzQ0YpuaCulULklKoaWD58rPjRMbLjPwJiasV3LbDl8WVilo
+Dry/BmKiBUrP343xngS5TkyF7Xpl2NXkqWyV8nuYOjqAAY5prXnFdaPCamya1MGI
+/Hh6fNcJAyLlyrxfDzJZ2kJKiO2KtdNIa77wl7YsxibW85WYudzM4+gbKgMhb8pQ
+acHL/cL78Py9DgyKneHz+8LbWYHuLN7BR5vFa3C1Flv/e22yWUwSI8FWCf/oyf4X
+wPgJGWoW6BH3HYjrfzjqLuM/r9nZG7FfMrvAoiD+fVj/Ou217bynxAoQszeGjMDd
+Vx1LFVje6m7diPXiCauLO0+JFC50c51oUWyoYtvl5cX1weWa0E4vSeJ/hc60ddfR
+3Sbn298kmWIe1AxW3bNbfzPJRDaxkeACcbjTcXpLp1C0uK3rBUrbfX2xXwsyQ0GF
+fR/cxAFaAhJhRt7K0fijhEmaI0r/pBtsKCwkcg9E2HWmeiMCBHcVR4+ZATqWe6u2
+ej4e82bAe3QoH/SzzI2Gipj20YEncIuN8KHFIg4mjuMLRFD2bGHGx2uKSJAOSiUp
+ucbI8QJL7ZjckWXXR4Cj7micglXK4/k=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) RSA Manufacturing CA 026
+============================================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIEUo0sRzANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTcwMzIxMTMzMTU2WhcNMzcwMzIxMTMzMTU2WjCBgzEL
+MAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa
+MBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q
+VElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDI2MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAtCO6bM6wy0aNEmYNXK34bMfimGQJMTlfu72qqJBv
+ytkRClYYl50myAAGu5/mCkzjlaUrGSld2f8MCr0514O3lVkFQOdaf7zHFBxcEfvy
+Z0fv8O1/OhoNN+9GEnPkXfpoNysQNa5JApCKXNrFw8JOfHjxQ5tzSZ1god5uMCSr
+G/H10SP/YDjpWHw9BgYdhVE+wvJSnsPa3k3k+UGQEuUdm7LOTFEElCUrLESTCfo7
+Ls9N7dxdP3OGUZQW4tfkw/ZebJ7blcQTvk95ROh/SUoKMRIe3NNkNIwyZLJkHa+N
+IKINZ7PvuR67EHxZocBPzf8FfRVkljQP37o5LakS+LTxIQIDAQABo4IBODCCATQw
+VwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u
+LmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E
+FgQUmmQ7xIAH4IJHmEMANrZYQZtwwHcwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB
+/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g
+BA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS
+uTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAkt7WWZQeuoEa
+KUgjTdR+hFowYDmowa/zebc/g7knMOL2GVx1F47p93wiR4wxMsfYUb9gJMXJ2w/F
+4e5yXTJav7F/YIdRxRB3LLaFlT/kBcCCfOOsDNiTE1jkn+ZaTP4mgA7vMoZbej9o
+n85moqYzSxj9Vj8fs0z3tA5lnbpX3mDd/YQ9h7GZZVpsJ895k+030r6uP+qfV7hO
+yzLYQWbwf74NUd9iN8S+xvO/JNOWMtrgaZs9PQiDy4zrK1f2VveCOqYXpEkHQZYS
+s6VU2wvjpL3YAdtyc6djCDx8300xSnxSwZn2tEypgGjBnNXBD7zwl7odbRAWj7Hr
+WEPBEueSFQzojU0V0YmnidSpx/+HvDPL2Fv/7HQbSJ6rifcKYOOY/LbMylWY204c
+634eAP1nf/e0eVoO2LFM8vcwH55CMGtojyYOXoqWz/fImbCm9Ts5HID+YKwYRE+v
+0cZxw6Uyib6ibxbiOs8w6VqX1JxUUa/Z5ocl4HP9V5tkt/WiK+I67ZhpKhcxez9I
+xQcJj56P+W4F3PyVAhFUyE5cFoJ0LdZ756q9OK1gzUVk92r+CvZCXqQ+Ii6c37am
+Z9Vm+8c3CH1dne4oLpZvSnrBU6Ndjb02a3tAFGIJqXQAtG07cmBBbm8NPvSE+65U
+4nlf2WMqom/qnrExKAqVFojOHAKg/Ps=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) TPM 2.0 ECC CA 039
+======================================
+-----BEGIN CERTIFICATE-----
+MIIDOjCCAr+gAwIBAgIEJEBefjAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTgwMzIzMTIwMDQyWhcNMzgwMzIzMTIwMDQyWjB2MQswCQYD
+VQQGEwJERTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRMwEQYD
+VQQLDApPUFRJR0EoVE0pMS8wLQYDVQQDDCZJbmZpbmVvbiBPUFRJR0EoVE0pIFRQ
+TSAyLjAgRUNDIENBIDAzOTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH/VmArA
+LCMF8yt4fOpgFDNtQIByMchULOXfAiYaQRfYQ4jSDfu5L5UomXpssdFcPSYd2a05
+xmd2A/HeSmP2mC6jggE4MIIBNDBXBggrBgEFBQcBAQRLMEkwRwYIKwYBBQUHMAKG
+O2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVjY1Jvb3RDQS9PcHRpZ2FF
+Y2NSb290Q0EuY3J0MB0GA1UdDgQWBBQ5tVhLfPFnAecwmOIUup5lehAJMjAOBgNV
+HQ8BAf8EBAMCAAYwEgYDVR0TAQH/BAgwBgEB/wIBADBMBgNVHR8ERTBDMEGgP6A9
+hjtodHRwOi8vcGtpLmluZmluZW9uLmNvbS9PcHRpZ2FFY2NSb290Q0EvT3B0aWdh
+RWNjUm9vdENBLmNybDAVBgNVHSAEDjAMMAoGCCqCFABEARQBMB8GA1UdIwQYMBaA
+FLQYhchKSsUSevJAOd7E9YsefkrRMBAGA1UdJQQJMAcGBWeBBQgBMAoGCCqGSM49
+BAMDA2kAMGYCMQCKyV90uLjYXeG+waQjv8BbsLUaGGbwgCbN6vnOShE8eZOv+UI9
+lpnddzQAOvH3F/oCMQCNDn9PgbwAa6PdG4wOGJo2qojMXwRLz59SHpGvRYi2Jv8X
+BIYjvam/7uzBzX/b3d8=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) TPM 2.0 ECC CA 040
+======================================
+-----BEGIN CERTIFICATE-----
+MIIDVTCCAtygAwIBAgIEOB8u5zAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTgwODIwMTMxMjI3WhcNMzgwODIwMTMxMjI3WjB2MQswCQYD
+VQQGEwJERTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRMwEQYD
+VQQLDApPUFRJR0EoVE0pMS8wLQYDVQQDDCZJbmZpbmVvbiBPUFRJR0EoVE0pIFRQ
+TSAyLjAgRUNDIENBIDA0MDB2MBAGByqGSM49AgEGBSuBBAAiA2IABCCw6GpgdnzD
+rmjpcdnveQuwWnzi3PzC4ZwYcTHIoIcFIvZKnfyN0iABuU/DNEkIiBufNqNk0VBW
+Nzva1kY7BwyyyfHQMDQF9/pITYfFnH46YPQ73hC8z6WQvGy7fWZilqOCATgwggE0
+MFcGCCsGAQUFBwEBBEswSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhRWNjUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0O
+BBYEFBwh6YfjojX5mLh/5xE11xsf+M2OMA4GA1UdDwEB/wQEAwIABjASBgNVHRMB
+Af8ECDAGAQH/AgEAMEwGA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5l
+b24uY29tL09wdGlnYUVjY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1Ud
+IAQOMAwwCgYIKoIUAEQBFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+
+StEwEAYDVR0lBAkwBwYFZ4EFCAEwCgYIKoZIzj0EAwMDZwAwZAIwPrqpvvkaAbsw
+mnER/VAo4g7BuH+sHpltd/pz26eyCtr1xsHTkQr14jMAaCCFdw+jAjBaP3vGR9KW
+vSFo7xsgohrnLwW/qmX5MweP2SU9TjfFpfOzIR63hkVsop32FboV/8Q=
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) TPM 2.0 ECC CA 041
+======================================
+-----BEGIN CERTIFICATE-----
+MIIDVjCCAtygAwIBAgIEb0u+/DAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTgwODIwMTMxMzA2WhcNMzgwODIwMTMxMzA2WjB2MQswCQYD
+VQQGEwJERTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRMwEQYD
+VQQLDApPUFRJR0EoVE0pMS8wLQYDVQQDDCZJbmZpbmVvbiBPUFRJR0EoVE0pIFRQ
+TSAyLjAgRUNDIENBIDA0MTB2MBAGByqGSM49AgEGBSuBBAAiA2IABMSnWthFA/js
+2tVanRDB5jfjeS2FJ1WD+k5HH+528782K0ssIGAMM0EekBM4K/saYA5VjXujVh50
+oejmBi4SLMhesgMX9yTedaDQ67WtgnCEKGUl6HC59SRry0XvsGYt6qOCATgwggE0
+MFcGCCsGAQUFBwEBBEswSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVv
+bi5jb20vT3B0aWdhRWNjUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0O
+BBYEFBwyRK/0EsRTBMDIdgnsRecewlYQMA4GA1UdDwEB/wQEAwIABjASBgNVHRMB
+Af8ECDAGAQH/AgEAMEwGA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5l
+b24uY29tL09wdGlnYUVjY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1Ud
+IAQOMAwwCgYIKoIUAEQBFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+
+StEwEAYDVR0lBAkwBwYFZ4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIwT9sh6m7Rndjy
+xRH3njazRrYgQwICvdNDQ9P80z1BE3003SkCZxoN20IpDercWZwZAjEA9cHtFcbX
+7JzThD5sXiibq/cwoCFfqY+ih4iwsQzdDhAZ5+w0fTQAP+4H6iXxq5FD
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) TPM 2.0 ECC CA 042
+======================================
+-----BEGIN CERTIFICATE-----
+MIIDOTCCAr+gAwIBAgIEJnhPETAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh
+MB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ
+R0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND
+IFJvb3QgQ0EwHhcNMTgwODIwMTMxMzQ2WhcNMzgwODIwMTMxMzQ2WjB2MQswCQYD
+VQQGEwJERTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRMwEQYD
+VQQLDApPUFRJR0EoVE0pMS8wLQYDVQQDDCZJbmZpbmVvbiBPUFRJR0EoVE0pIFRQ
+TSAyLjAgRUNDIENBIDA0MjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHy6yq3F
+3TCvBXY63AGJzHxRf45Gipj7C+W9mnAyz3LAEMTIVBtS4XcvHR6oQBt7RRvrpwLe
+TJjg1Ngg0F4zHPGjggE4MIIBNDBXBggrBgEFBQcBAQRLMEkwRwYIKwYBBQUHMAKG
+O2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVjY1Jvb3RDQS9PcHRpZ2FF
+Y2NSb290Q0EuY3J0MB0GA1UdDgQWBBSxHzPMpgZWuiWcLpBaO1Q/UkSXkTAOBgNV
+HQ8BAf8EBAMCAAYwEgYDVR0TAQH/BAgwBgEB/wIBADBMBgNVHR8ERTBDMEGgP6A9
+hjtodHRwOi8vcGtpLmluZmluZW9uLmNvbS9PcHRpZ2FFY2NSb290Q0EvT3B0aWdh
+RWNjUm9vdENBLmNybDAVBgNVHSAEDjAMMAoGCCqCFABEARQBMB8GA1UdIwQYMBaA
+FLQYhchKSsUSevJAOd7E9YsefkrRMBAGA1UdJQQJMAcGBWeBBQgBMAoGCCqGSM49
+BAMDA2gAMGUCMQDtid0qUz8rNZM6RL6rZJFkp/TnGK02NDJxagGxALYb/fopOFTi
+o7vPa5tK3AkUTYkCMGPRO189BXa1pCHN+f5504WalgQtwCXBVGuDRikyMGQlQ+pl
+bj1WIHraEHemKemcSA==
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) TPM 2.0 RSA CA 039
+======================================
+-----BEGIN CERTIFICATE-----
+MIIFpTCCA42gAwIBAgIER44eKjANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTgwMzIzMTE1MDM2WhcNMzgwMzIzMTE1MDM2WjB2MQsw
+CQYDVQQGEwJERTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRMw
+EQYDVQQLDApPUFRJR0EoVE0pMS8wLQYDVQQDDCZJbmZpbmVvbiBPUFRJR0EoVE0p
+IFRQTSAyLjAgUlNBIENBIDAzOTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBALWm5gz88K3Sy/isxkOOI6CgwdMarVGWyplY5lA4IuFVBXhzAPkJ9j7V2J1r
+0MYWFN316C7CSq0Egzl4lhorCWxBwAzRtJyze1O/whfhDIt+vz5Y0oWZf6VJ+Hm8
+xUGC3Y4kiOOoxwcRj2O6je4pG2IQFNOjWJRptedpVxs40FfwPzQyQ02QlbKCimxm
+fv2j2QWbe5/zXZDvu1tit+VpsdArlVY/50d1yZtristSNAJDSqujYv9e1P7p3HWn
+0u+Pu39RLmVUdkxZhmc5BlEjsicA9J6Vc43/OPrHSbTjHtR5TjuQE+Jikw+qOlsX
+HNSu+7IX8fJD+VLUWpYBELrseBUCAwEAAaOCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhUnNh
+Um9vdENBL09wdGlnYVJzYVJvb3RDQS5jcnQwHQYDVR0OBBYEFA2ZaVGbl50y7kuA
+MWVmTpzIb50NMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYVJz
+YVJvb3RDQS9PcHRpZ2FSc2FSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAU3LtWq/EY/KaadREQZYQSntVBkrkwEAYDVR0lBAkwBwYF
+Z4EFCAEwDQYJKoZIhvcNAQELBQADggIBAESxfFGILeC/800JE3wk6d9n/1miLP/T
+pPDgET2a2zA+oTzuwTYwURM9zenYFJtooN8WWs/DbYUbUJlIHvnUDHtsBjycCHry
+dGqLzK5695YZjVOfQQaMAZTYX+DbQnD/yGO8d9mOfvJ60daakjAM/vUcuJBWckN+
+y6vTMMNM8XNX6g5Clq1wwKqJfZrYGc0WBAl7Ce1PnW3JrL8fFjghPKJqx1tyEUIk
+06DYktk+SMp2nZzpqu/jQeADNnTWNS6U4kPIO5za9QflknMVoOcLHzi8R1VeuhC4
+9JHaTjvQDOG3vu5cAI3B0Pcwjra7D2XIhevZMXKFwG2c917LtTBs2eSdX96veu1w
+AUcSm0mdkJsasV2GtPzBuidA1da2VreHZbj++WMFA9b/RPvDVuZb4OTSRlZ4bsy2
+HgZm9emRv81xPt+w7FRsDvHRh9IXeuQLSuRTyasuiwjuzGbshLeZ+3TgH/D+3Ahv
+gNzCtQgc3DH/zklADnbndVS6B6Y+8OoCwhKRTNwhESPObYr/jD0LyU9+cYW6hHG/
+Mt3w33Ot4Zl5YlGH5tWGOputa075PKGUKB66tOVLqtiU3A/T8iO4TxAk5r3u+WcN
+dp/KYlZfHphTyxL76jUpdhOg5vq3KIiNOo0B0DPBrI9hu0zv2ixQ9VrrTNmSqPfm
+lS0hAEXMzh1T
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) TPM 2.0 RSA CA 040
+======================================
+-----BEGIN CERTIFICATE-----
+MIIGpTCCBI2gAwIBAgIEEpl+qDANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTgwODIwMTIzNjI0WhcNMzgwODIwMTIzNjI0WjB2MQsw
+CQYDVQQGEwJERTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRMw
+EQYDVQQLDApPUFRJR0EoVE0pMS8wLQYDVQQDDCZJbmZpbmVvbiBPUFRJR0EoVE0p
+IFRQTSAyLjAgUlNBIENBIDA0MDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
+ggIBAIvCHKesblOFZ8vmu0+E9ymDL1ebAXShjihlfPB52Zul1GsSzkGZjikIMAUE
+E8WsSCl4mNIzDKm76bfTPfjEo06Ztp327LwGor49sucp8S4aS6WiEJ9Ni2YuP+v4
+pPSckv7t9Hzf732YDIrahZA6RSc+Vza+g3j7bf5J7F7M/OoKrUDlgXXna4wmjsgK
+kVTv/Mnqc1i8eEMaKIswmr2ZD8kEtA6OK95Q0/TaBDmIs/keGiFtokMT0/OL3xLn
+noI8dVISWKCy4JYYj4yYs7IToAz2NhX1iS2T/L99AzNZIegw1hQ4cUTvL/yIuM9e
++e3+dQws0N5Vgcvfp/KMUKPq9aku8B053Gz3fL3jNCF+bT6uBxB9OE0dTW74go8Q
+KO8TACNryjpGe1NdZGcnNjmY3LySDLMTwPwBBjin7BFYkQYLMT391ZG7LPO7Hv2h
+mWjGHZ/Fjv7SY1xSCvFL0Ll+R4Z7WNOKDNIH0wSEHOW6k3tBQkYgaQO/+blbkWsn
+YSCzLCuxntw0X2j9MSHABRzycw+Jfjp/6ya/bjL32FU9RGQRO1aOvYvOIWvOCr/l
+ZN0LZn22C6LWi+J/V3P4Fx9CIcO0daNwdozbDwKBDG3OP3gLSFbksoSgN3xtXbem
+36xuJCRSjxl1lSFfbJ+GmjW7U3hA3Z2qo35tqGO/UEkI1uUNAgMBAAGjggE4MIIB
+NDBXBggrBgEFBQcBAQRLMEkwRwYIKwYBBQUHMAKGO2h0dHA6Ly9wa2kuaW5maW5l
+b24uY29tL09wdGlnYVJzYVJvb3RDQS9PcHRpZ2FSc2FSb290Q0EuY3J0MB0GA1Ud
+DgQWBBRE9bvUvZBBpOhb94vU3dAIBUA5sDAOBgNVHQ8BAf8EBAMCAAYwEgYDVR0T
+AQH/BAgwBgEB/wIBADBMBgNVHR8ERTBDMEGgP6A9hjtodHRwOi8vcGtpLmluZmlu
+ZW9uLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNybDAVBgNV
+HSAEDjAMMAoGCCqCFABEARQBMB8GA1UdIwQYMBaAFNy7VqvxGPymmnUREGWEEp7V
+QZK5MBAGA1UdJQQJMAcGBWeBBQgBMA0GCSqGSIb3DQEBCwUAA4ICAQB3Bj9GzKLs
+y5r41nMa69j+Jg3FPq0uQk8XQY9xzDserF0kK0j6wEHYP47OJ749pxn9a+e//VMJ
+cdfw/dDF/nPFlZ0pOA1XsdEpJZTt5j+OHDg4Z0ToAWSbul8gd/cOZa59RJlnvqjk
+z8627Z3L/V9opIcMvgONgU+e1tLvjhu8zLL0U8EW+nHCJKH4bTY2r36baWyXa7nZ
+XewzFl24zq5qweLRfx6fi58mEu8cqzDRwkbqb3obwZVW9fRagv5T1CWQInlMbbET
+Aln0WH1Kw1XvqOBkQ00dw8EOzbxxuD+JSqjBbqGzh1qeL/HDIRh+v4Qpbcaz6r5y
+CRFxu/nEchIBGjdUkVdGD0AblHV7joBWnr9eK+qD6uBNyAIl3rfjVNgG/M77YrZT
+aCF29ONfXoHjVPMovDJAjCJyW0/HZkSKIoPK1ZkVNNotHQCHOhHSNScy/B1HvMTh
+oQKkWLegoonMVDwzDqFT2H65e0FLVO/XWKTEW/z8WRbQ8812J1BSXGdU4jLWunmR
+xlGDYdxaet1j2LXvOOsyxfoyVi5SgDnHWyHGX6071s5p3rQcpiyxJEh0+4khuV5V
+1P7YXig5hiAEXlYrNByRGiQg4hUSEBQehuvnhJB0ZiLyoXaCulmT9o4ctvM2WThd
+2sieTn6+DW9ln0H27BBN+AvkIhTKP1ChMw==
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) TPM 2.0 RSA CA 041
+======================================
+-----BEGIN CERTIFICATE-----
+MIIGpTCCBI2gAwIBAgIEScYOvTANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTgwODIwMTIzODQ0WhcNMzgwODIwMTIzODQ0WjB2MQsw
+CQYDVQQGEwJERTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRMw
+EQYDVQQLDApPUFRJR0EoVE0pMS8wLQYDVQQDDCZJbmZpbmVvbiBPUFRJR0EoVE0p
+IFRQTSAyLjAgUlNBIENBIDA0MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
+ggIBAIP4Z5VoOlFJqvY966nmrBRV4RH0KRC/aW6E2+Cq+aT09+JSAOqEDg0TE6Fb
+Tb7Q/fn3FlRCIC0MCyl7p7y5E8+VDd+og6cZ3E0ppPVsTEjHplIq9QnxnrKu5D8o
+yn9g/VGBogAsm1UTNN4G3f5l6fQft3XsX8vH5k1g7QcEVNXNE9a8gw6NDNr8ZCLO
+yvg5Sa88v6kq9CghNVjiSIQlKaJ+9uwJO7SyCAINlL9ChJNNTP2jD75H/6ZCGZdX
+cSZNNNPW/wAyY7zkZ57BFkBakMVeKmmMnaJWF0xV2BlbHFgcm1PHMTc2qV32hBeJ
+pA4Secgr/RzvrC6M/Vk4kgclxIQU865TP06w2xTLVx9bE841cho9NCiXG8xgEzZ3
+yOuQ+97K/5+LBNGr8kOdYxEXkiL1ywjEYKQDzfSQJMjI6AunycUqLQgkH6T38rEc
+FGJQ2/EbAD8zj/HkMjPzSQdqzYSlqcmKZ74FBsfl7yf4H1f8rj++NlIL94VAmj9W
+I4WmnMy7MsgUfRfaZN/kyT1s/qwK5bwpv9oLfIVU780F2FjvBJFSytPZGjKsDYiC
+3wIw0XdWv9VMws39ECiId8J6d+NnadCW+JLVLPl/AskdJhscELQdfgF2/TyI3EqS
+A/2UySeF5OZ385VLsXiF+ASNKjv8nwwheQsqx5/qsRydKa15AgMBAAGjggE4MIIB
+NDBXBggrBgEFBQcBAQRLMEkwRwYIKwYBBQUHMAKGO2h0dHA6Ly9wa2kuaW5maW5l
+b24uY29tL09wdGlnYVJzYVJvb3RDQS9PcHRpZ2FSc2FSb290Q0EuY3J0MB0GA1Ud
+DgQWBBRW9rWXOWMBGFuR2ACs7pFiGeOmuzAOBgNVHQ8BAf8EBAMCAAYwEgYDVR0T
+AQH/BAgwBgEB/wIBADBMBgNVHR8ERTBDMEGgP6A9hjtodHRwOi8vcGtpLmluZmlu
+ZW9uLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNybDAVBgNV
+HSAEDjAMMAoGCCqCFABEARQBMB8GA1UdIwQYMBaAFNy7VqvxGPymmnUREGWEEp7V
+QZK5MBAGA1UdJQQJMAcGBWeBBQgBMA0GCSqGSIb3DQEBCwUAA4ICAQCqOpPQfLil
+RakU9Uv1gzhCK1UZJsLMDtk1aD4tRGgFqZB9QsBjBpaD+LwCsgSfmUgCdiYoBY/d
+NMRDxqacXqX6FRun9v8JjfBd5iFDZ8rtPTNZv2grWqc9Hug7mgYIp3/+6bTIi6c0
+pEq+nsKIkHjIzDvgqv6iLGxzgJm9OjDmYp7k1zuax8dICVvafilp0rK1yieWpaAj
+w31ns9Txm4Hruh51Y9uzNFNj9EC5StbjVxg8qeZCk5hS76mU2fPsa17iHpLU7Vft
+VvKyPMjgpSxbIVWLt+XQbnVZdqAva5gGzxEY7TOlTUq6Y7VjC3k1R76uP64AXmIx
+OpZ4wN5gs1vdqs1SjG6qRLg9qmYjvxbDHlHg4MDRTkLxDjvbllWS2Fi3tNPU/U48
+e3ZA3N2JTxD4wSfiFOvWtYIUgkyHVVgZFfJOY/jCpCnMVJSbw4ZWwDdemsQX/0cz
++UyaxM/FnvYuoQBBzyP0kISwhf7NkqtKWsbPROFuasc5QoEL/9XrLymXfGvnH6yz
+i9Wr2vKLkpRASz3To0Pvr/fXMH7fyFL6wmtPvYoZ6xcXQdPRC55254oDxGwY0KbG
+2m2793RJBNbWVy5IWHgLpRGum4PpJ4Lq66SYKqLAENqC4BytzcW+rpo8gPlbHVu/
+lzSuZgod3dAJpbdiYsm6GqRokX3/X9Uwjg==
+-----END CERTIFICATE-----
+
+
+Infineon OPTIGA(TM) TPM 2.0 RSA CA 042
+======================================
+-----BEGIN CERTIFICATE-----
+MIIFpTCCA42gAwIBAgIEAPKe0jANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE
+RTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP
+UFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg
+UlNBIFJvb3QgQ0EwHhcNMTgwODIwMTI0MDAxWhcNMzgwODIwMTI0MDAxWjB2MQsw
+CQYDVQQGEwJERTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRMw
+EQYDVQQLDApPUFRJR0EoVE0pMS8wLQYDVQQDDCZJbmZpbmVvbiBPUFRJR0EoVE0p
+IFRQTSAyLjAgUlNBIENBIDA0MjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAIVUeKYRnVu2bZCwKKd5zH3oOYz73J3ZPoMviq90y51mccnCiydAwR5k+uSr
+NBjIUUVpQc11K005HbU42lA02XHBlchHVAd1rHPUp55Qvscsh/OU0MTV7Cb7LLnS
+Mm9hD7K5bwdNjnSxD6gayoBwAOa5p23FBuqCiUPNzUD+1rtrkYyFD3t8WmnDbfxe
+UWh5wWzIV0PGV7sKPOov+IXEfXFF+fWAwsGXTPi5+cibRLwoy88Rk/+vRLVxg0eZ
+OnxH8B+qcpEIPmXfxbdGqUoY82icT1Nj1EjCjkyMTAxH5Q+8PVDHDjyRLNg+6aYt
+MXYTX0D6MxhobOVjYLgZAnQPlkcCAwEAAaOCATgwggE0MFcGCCsGAQUFBwEBBEsw
+STBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhUnNh
+Um9vdENBL09wdGlnYVJzYVJvb3RDQS5jcnQwHQYDVR0OBBYEFF0IFZUfX2Bjimnn
+JS8+xL7NdVSyMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG
+A1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYVJz
+YVJvb3RDQS9PcHRpZ2FSc2FSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB
+FAEwHwYDVR0jBBgwFoAU3LtWq/EY/KaadREQZYQSntVBkrkwEAYDVR0lBAkwBwYF
+Z4EFCAEwDQYJKoZIhvcNAQELBQADggIBAEbItIpYAO2jCA78oqKiTxuMnUr6uUzi
+EKrzKe9nss4FfJbqx9s7E4WKlUW51TnJ1rysE15WHi71k80qNXhwZTykBmzmd6qH
+JsR17e1JqnotdmA16z5Y6vC3kp9gGa46Jxqz+8SFkGfkwKNzvBwjlixWMcWdWw0A
+aBKhoyM0WGNZgUvuSvCSL8l4rwyuCcLBp2ls7hnU1p8tvvgZSlbAjp4ulSNUTfIK
+A4PQGLW9YMKhBjq+q7S6ZmWp5080nikyk7bvfI1wXWqlPmIwiSn8+7zKmgjbMxd8
+HN/gKNGXuNhQbG9h0tKFgsDufQIffzEZY0rNrRAkunOJTZrCG6PVJntP7MGfrtbN
+RJVAqb5T2+WMiaJj4iaflP12aStL0DoHnM53uNQ6lcWe/uqzLHMnjc49tYWCf/Um
+7yeboZF22bebjkseeKhjoOlm+lnm+3FcJrgwXEBq9/5EnrKc9zuZhmuwMB5JFtOn
+VhRxDXvI3qj88PRt9CNoQMV3MFS6xofYTyoCqcG8Fe5XpZhLRRKLaMaK3VW+4mMj
+67/QGXfGdF7f79SrTjsxGM8LNxcQnqURbWEbw2LQ24B5qdxjB2UnlzxSgq9LDpmx
+WUcE/gwzHxlU/VOsYZPqpZoe8qHYALtZgnoNK8U49TMz/nqWpRp/rw0SkI/HTFpJ
+tczrRcnoB1PW
+-----END CERTIFICATE-----
+
+
+JSLEPIDPROD EK Platform Public Key
+==================================
+-----BEGIN CERTIFICATE-----
+MIID3DCCA4KgAwIBAgIUTunPNQNF02rDLKnlu+pbcfYgrRcwCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMjAw
+MTI3MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBmzELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xNTAzBgNVBAsMLFRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIEpTTF9F
+UElEX1BST0QgcGlkOjE5MRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMFkwEwYHKoZI
+zj0CAQYIKoZIzj0DAQcDQgAEnYB3CwWkfFdnJ9vHIxlxy9MYbbzB6jQ0PyUzlkTF
+GZgEAafbmGoWdoO8j5qQHwTLe441dO8fTwyRDjKjyuNdZaOCAbQwggGwMB8GA1Ud
+IwQYMBaAFOhSBcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBT23K44CDJvEKRq
+YtVf4KnL6EGj1DASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAT
+BgNVHSUBAf8ECTAHBgVngQUIATB4BgNVHSABAf8EbjBsMGoGCiqGSIb4TQEFAgEw
+XDBaBggrBgEFBQcCARZOaHR0cHM6Ly90cnVzdGVkc2VydmljZXMuaW50ZWwuY29t
+L2NvbnRlbnQvQ1JML2VrY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMGQG
+CCsGAQUFBwEBBFgwVjBUBggrBgEFBQcwAoZIaHR0cHM6Ly90cnVzdGVkc2Vydmlj
+ZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS1Jvb3RQdWJsaWNLZXku
+Y2VyMFUGA1UdHwROMEwwSqBIoEaGRGh0dHBzOi8vdHJ1c3RlZHNlcnZpY2VzLmlu
+dGVsLmNvbS9jb250ZW50L0NSTC9la2NlcnQvRUtfUGxhdGZvcm0uY3JsMAoGCCqG
+SM49BAMCA0gAMEUCIQC35k/pck256qAn3p0KVsodOk1Rv9Uw6oYewjJSR7ddewIg
+VzJh3HspyWfCM0RWCfRem4f+6tmvu//747agNqcHHFI=
+-----END CERTIFICATE-----
+
+
+LBGEPIDPROD EK Platform Public Key
+==================================
+-----BEGIN CERTIFICATE-----
+MIIDvDCCA2OgAwIBAgIUJMaOmkBae0m0M3onhTGMSyi5URAwCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTUw
+NDAxMDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBlDELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xLjAsBgNVBAsMJVRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIExCR19F
+UElEX1BST0QxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wWTATBgcqhkjOPQIBBggq
+hkjOPQMBBwNCAARj1wH3vjpz0n7HixEdu/Q8iA3XjCcDterGhwRBKnuFu/uQ250j
+S3Vrf9VYlTmUPD9EHdUwwCrPeuRbrJJ8+DKmo4IBnDCCAZgwHwYDVR0jBBgwFoAU
+6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFCz89DsWyL/HgknMlx7lcyTW
+OfB5MBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMBMGA1UdJQEB
+/wQJMAcGBWeBBQgBMHAGA1UdIAEB/wRmMGQwYgYKKoZIhvhNAQUCATBUMFIGCCsG
+AQUFBwIBFkZodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2Vr
+Y2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMFwGCCsGAQUFBwEBBFAwTjBM
+BggrBgEFBQcwAoZAaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NS
+TC9la2NlcnQvRUtSb290UHVibGljS2V5LmNlcjBNBgNVHR8ERjBEMEKgQKA+hjxo
+dHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS19Q
+bGF0Zm9ybS5jcmwwCgYIKoZIzj0EAwIDRwAwRAIgdfPUh1wH/eKcByB2BxrEP7/4
+bt3FyVJvQBhfPnBOmkoCIDFkZmbIDhXdlPOAvJiejUgHG+KaREnUxSKeDk+XgMDS
+-----END CERTIFICATE-----
+
+
+LKFEPIDB0PROD EK Platform Public Key
+====================================
+-----BEGIN CERTIFICATE-----
+MIID3jCCA4WgAwIBAgIUSuGA1U3y0XMcqbGsJZXvvFkfCyQwCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTkw
+NzMwMDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBnjELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xODA2BgNVBAsML1RQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIExLRl9F
+UElEX0IwX1BST0QgcGlkOjEwMRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMFkwEwYH
+KoZIzj0CAQYIKoZIzj0DAQcDQgAEj9WEZ+vecTwkNMPfCswILr2P4rqdDduq/GdS
+kKY+U8AnqeOpWh4uDbc8VmSZ9rs6yAG5dqd12r4h/oKdUfQtp6OCAbQwggGwMB8G
+A1UdIwQYMBaAFOhSBcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBTKcSqfh15I
+zee/ZX+3JixwPv9f4jASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIB
+BjATBgNVHSUBAf8ECTAHBgVngQUIATB4BgNVHSABAf8EbjBsMGoGCiqGSIb4TQEF
+AgEwXDBaBggrBgEFBQcCARZOaHR0cHM6Ly90cnVzdGVkc2VydmljZXMuaW50ZWwu
+Y29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRm
+MGQGCCsGAQUFBwEBBFgwVjBUBggrBgEFBQcwAoZIaHR0cHM6Ly90cnVzdGVkc2Vy
+dmljZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS1Jvb3RQdWJsaWNL
+ZXkuY2VyMFUGA1UdHwROMEwwSqBIoEaGRGh0dHBzOi8vdHJ1c3RlZHNlcnZpY2Vz
+LmludGVsLmNvbS9jb250ZW50L0NSTC9la2NlcnQvRUtfUGxhdGZvcm0uY3JsMAoG
+CCqGSM49BAMCA0cAMEQCIGx/iZo9bQm6PjZNlkkvvlys2L9ZvRxnzg27zVrvkOIK
+AiAMMcXHdgsuLfQtUNep+uycG95uBc6zu05gZMTVMhA21w==
+-----END CERTIFICATE-----
+
+
+LKFEPIDPROD EK Platform Public Key
+==================================
+-----BEGIN CERTIFICATE-----
+MIID3DCCA4KgAwIBAgIUAu3ZmDsi1KQeQl9cM6ifUHuup2YwCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTgw
+NDA0MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBmzELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xNTAzBgNVBAsMLFRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIExLRl9F
+UElEX1BST0QgcGlkOjEwMRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMFkwEwYHKoZI
+zj0CAQYIKoZIzj0DAQcDQgAEiUVjU37rsmLCoQ7MYeOCXxbOvE7yJZ5jYkFvF1tL
+stZyPkVPTUS7wkMg72pweWAVCuNYBY+3OdtT3XEzL2YJ/qOCAbQwggGwMB8GA1Ud
+IwQYMBaAFOhSBcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBTxi/gccYC9QSOG
+RsIW779umVLPGjASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAT
+BgNVHSUBAf8ECTAHBgVngQUIATB4BgNVHSABAf8EbjBsMGoGCiqGSIb4TQEFAgEw
+XDBaBggrBgEFBQcCARZOaHR0cHM6Ly90cnVzdGVkc2VydmljZXMuaW50ZWwuY29t
+L2NvbnRlbnQvQ1JML2VrY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMGQG
+CCsGAQUFBwEBBFgwVjBUBggrBgEFBQcwAoZIaHR0cHM6Ly90cnVzdGVkc2Vydmlj
+ZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS1Jvb3RQdWJsaWNLZXku
+Y2VyMFUGA1UdHwROMEwwSqBIoEaGRGh0dHBzOi8vdHJ1c3RlZHNlcnZpY2VzLmlu
+dGVsLmNvbS9jb250ZW50L0NSTC9la2NlcnQvRUtfUGxhdGZvcm0uY3JsMAoGCCqG
+SM49BAMCA0gAMEUCIFSuATZaoaWDRvFFN+0Wvzwg1rJqzQvNdtLKrDRUeRlsAiEA
+lKo7/80b1x/0w7rYYY3N26Zd3IWTYMpJGL5OCvjUzfc=
+-----END CERTIFICATE-----
+
+
+LPTEPIDLP EK Platform Public Key
+================================
+-----BEGIN CERTIFICATE-----
+MIIDvDCCA2GgAwIBAgIURR2MSilWjn/sh8LzdhFy5KEdm2YwCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTQw
+MTIwMDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBkjELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xLDAqBgNVBAsMI1RQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIExQVC1F
+UElELUxQMRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAEcuwvyNIK+oJU1UovTP2L2QXVQkWmWpUO+QrNNk5F3q4t8PbnEiFi
+TRj5SUcKq6lcfvLzxJr0d7NpjfICAvBELaOCAZwwggGYMB8GA1UdIwQYMBaAFOhS
+BcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBSOGthGk9XYmxRyzY+ZkHbtxBFU
+ADASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjATBgNVHSUBAf8E
+CTAHBgVngQUIATBwBgNVHSABAf8EZjBkMGIGCiqGSIb4TQEFAgEwVDBSBggrBgEF
+BQcCARZGaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NSTC9la2Nl
+cnQvRUtjZXJ0UG9saWN5U3RhdGVtZW50LnBkZjBcBggrBgEFBQcBAQRQME4wTAYI
+KwYBBQUHMAKGQGh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20vY29udGVudC9DUkwv
+ZWtjZXJ0L0VLUm9vdFB1YmxpY0tleS5jZXIwTQYDVR0fBEYwRDBCoECgPoY8aHR0
+cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NSTC9la2NlcnQvRUtfUGxh
+dGZvcm0uY3JsMAoGCCqGSM49BAMCA0kAMEYCIQDnoZ1uLFe35n9Sy2piGvcJj6Ma
+lpdPJfEogmZLu+SrAQIhAP0B4jPnWcFHPDIlXh2WoOysRbOOkOff78W8a2/9td68
+-----END CERTIFICATE-----
+
+
+MCC PROD 00001881 OnDie CA
+==========================
+-----BEGIN CERTIFICATE-----
+MIIC8DCCAnWgAwIBAgIUZi+xu0T2Z9Z3QmBZ6iOovdIWCc4wCgYIKoZIzj0EAwMw
+QDEmMCQGA1UECwwdT25EaWUgQ0EgQ1NNRSBJbnRlcm1lZGlhdGUgQ0ExFjAUBgNV
+BAMMDXd3dy5pbnRlbC5jb20wHhcNMTkwNTAxMDAwMDAwWhcNNDkxMjMxMjM1OTU5
+WjBIMS4wLAYDVQQLDCVPbiBEaWUgQ1NNRSBQX01DQyAwMDAwMTg4MSBJc3N1aW5n
+IENBMRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMHYwEAYHKoZIzj0CAQYFK4EEACID
+YgAEAyt8PUvNaHB0Z+a8lZbzruMMTSZRdAPbyP5rso75X8zD8bRaLd2Imj/Nsqfn
+kcweLFjp/DSQrDErBOy90DBzLnvLQUv5tcm7nBmuYudcnZHFmTYWm8p1aPy3lS9r
+6IoCo4IBJjCCASIwHQYDVR0OBBYEFPMHujM0fCg6HgwVCK0C9cjKBvReMB8GA1Ud
+IwQYMBaAFGGaCniWiAPMYZCopT+QbXV8n2lqMA8GA1UdEwEB/wQFMAMBAf8wDgYD
+VR0PAQH/BAQDAgEGMGcGCCsGAQUFBwEBBFswWTBXBggrBgEFBQcwAoZLaHR0cHM6
+Ly90c2NpLmludGVsLmNvbS9jb250ZW50L09uRGllQ0EvY2VydHMvT25EaWVfQ0Ff
+Q1NNRV9JbnRlcm1lZGlhdGUuY2VyMFYGA1UdHwRPME0wS6BJoEeGRWh0dHBzOi8v
+dHNjaS5pbnRlbC5jb20vY29udGVudC9PbkRpZUNBL2NybHMvT25EaWVfQ0FfQ1NN
+RV9Qcm9kdWN0LmNybDAKBggqhkjOPQQDAwNpADBmAjEAjz1UnT4SgJglAgJtSvpQ
+eIrtmNHeA03tlwNxgGoTm+8jPLd/59E/2mwIZT2eeQ2ZAjEA91DbMoWvfI0mYR0Y
+08hIx3A4C0+39WPcNv+uirNnBOn09EACxfVfWijYLFljXL0A
+-----END CERTIFICATE-----
+
+
+Microsoft TPM Endorsement Key Service
+=====================================
+-----BEGIN CERTIFICATE-----
+MIIGCTCCA/GgAwIBAgITMwAAAFm4K9/t6wIyPgAAAAAAWTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDMyMDE3MzEzNVoXDTMwMDMyMDE3MzEzNVowgYQxCzAJBgNVBAYTAlVT
+MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK
+ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLjAsBgNVBAMTJU1pY3Jvc29mdCBUUE0g
+RW5kb3JzZW1lbnQgS2V5IFNlcnZpY2UwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
+ggEKAoIBAQCbi5fATDXjleuXc21QiMyPmeUCjF4CJ8VHFvJHxllsgpNJJ8Wgt7wd
+IF1HMbldCf3EL6HIzRI4PSZYD0QdO9SkDRH5ptQ8FOrSwYHaNh1BIduYk8L0xEre
+q07zwmmUKMMoyyA3FniS1VbYMv2wFzJaqs5RofDq4zEZq0WVC+GIvv88sUoMmsUg
+KgjB2VjSs9v0tJmi74HQM9RSayAmnjUHeFAegpYkXCfrB+OEXefmjNBQlMeFqY00
+o+LmfwRyoe37UTwXo2AiZeMUZ9nccRlCi85pStx4vcwxuxJgxB5cjlDW4xHRU+EL
+XTEtvNmIfNtQRbcngVXhjUfYT13cUbzbAgMBAAGjggFoMIIBZDAQBgNVHSUECTAH
+BgVngQUIATAdBgNVHQ4EFgQUeRAMLqNcT8FL3hWbVjJvtzHR1RIwEgYDVR0TAQH/
+BAgwBgEB/wIBADALBgNVHQ8EBAMCAYYwHwYDVR0jBBgwFoAUeowKzi9IYhfilNGu
+VcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDovL3d3dy5taWNyb3NvZnQu
+Y29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIwUm9vdCUyMENlcnRpZmlj
+YXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYBBQUHAQEEcTBvMG0GCCsG
+AQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01p
+Y3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUy
+MDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCHdUGF2gHV7TW18ElZrOCRBrVJ
+yu3wDmt8dsTlTHaFyUA1cut3baIAansPFue5afbWpXNOe9VZakPQABm2P2BBtpEV
+tVGl98/Ifxgq/QRyln4gDCGWOb49hnDmyX+kn54cFnLLb47LxSSEpnAQEfrRTvsg
+ks7b/drzQa8lp5kJkW+KxPL0r9ajvcA08UJmK6znKA/Oye4UBTzavs2axKoaWm+o
+8K3EBDOSAj9CZIaLgAeJNO2DGAyFBgzGbBL9MZR0lMyHeOzWMCST3L50g3yrCiVf
+X86bUV3bAYE3Kqa3oCHw5Mw50gvcFNPHmMbxcVXRlQ3PtfvdSpw3mDGGm05fFycy
+2omOSdMfKj6PgvcUkLet12xzAHeW+K8ikpZdHNJkQoRoBNcZX1Ek1aTuA/hn+0m/
+Vnqd7+ohNVpknpRcrXjwuWNrDLavkcoQlY3JX2dYG0Nc6QHEjsVEi052EfIt5urD
+AUEXcdYydBxoMf/6MLSGiKiSsfQbOrYBz/nrbRsoWeM/xf1iQD00Qw2ANw3TdTY+
+fi4MiwReUu3B5o2SkgxmHnV1y6H+bQqkLmOPLc0qtAWFq8+PkPo5G7fj063djT5M
+Ukcw+dZ9iMawOAyzP0EbNIgY7GaB9nlV4zzIZlqst4I1orhG9hujaOjWGYtBfTZt
+JlC5INCx6XHHd6Q27A==
+-----END CERTIFICATE-----
+
+
+Microsoft TPM Root Certificate Authority 2014 (1)
+=================================================
+-----BEGIN CERTIFICATE-----
+MIIF9TCCA92gAwIBAgIQXbYwTgy/J79JuMhpUB5dyzANBgkqhkiG9w0BAQsFADCB
+jDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
+ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UEAxMt
+TWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0MB4X
+DTE0MTIxMDIxMzExOVoXDTM5MTIxMDIxMzkyOFowgYwxCzAJBgNVBAYTAlVTMRMw
+EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
+aWNyb3NvZnQgQ29ycG9yYXRpb24xNjA0BgNVBAMTLU1pY3Jvc29mdCBUUE0gUm9v
+dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxNDCCAiIwDQYJKoZIhvcNAQEBBQAD
+ggIPADCCAgoCggIBAJ+n+bnKt/JHIRC/oI/xgkgsYdPzP0gpvduDA2GbRtth+L4W
+UyoZKGBw7uz5bjjP8Aql4YExyjR3EZQ4LqnZChMpoCofbeDR4MjCE1TGwWghGpS0
+mM3GtWD9XiME4rE2K0VW3pdN0CLzkYbvZbs2wQTFfE62yNQiDjyHFWAZ4BQH4eWa
+8wrDMUxIAneUCpU6zCwM+l6Qh4ohX063BHzXlTSTc1fDsiPaKuMMjWjK9vp5UHFP
+a+dMAWr6OljQZPFIg3aZ4cUfzS9y+n77Hs1NXPBn6E4Db679z4DThIXyoKeZTv1a
+aWOWl/exsDLGt2mTMTyykVV8uD1eRjYriFpmoRDwJKAEMOfaURarzp7hka9TOElG
+yD2gOV4Fscr2MxAYCywLmOLzA4VDSYLuKAhPSp7yawET30AvY1HRfMwBxetSqWP2
++yZRNYJlHpor5QTuRDgzR+Zej+aWx6rWNYx43kLthozeVJ3QCsD5iEI/OZlmWn5W
+Yf7O8LB/1A7scrYv44FD8ck3Z+hxXpkklAsjJMsHZa9mBqh+VR1AicX4uZG8m16x
+65ZU2uUpBa3rn8CTNmw17ZHOiuSWJtS9+PrZVA8ljgf4QgA1g6NPOEiLG2fn8Gm+
+r5Ak+9tqv72KDd2FPBJ7Xx4stYj/WjNPtEUhW4rcLK3ktLfcy6ea7Rocw5y5AgMB
+AAGjUTBPMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR6
+jArOL0hiF+KU0a5VwVLscXSkVjAQBgkrBgEEAYI3FQEEAwIBADANBgkqhkiG9w0B
+AQsFAAOCAgEAW4ioo1+J9VWC0UntSBXcXRm1ePTVamtsxVy/GpP4EmJd3Ub53JzN
+BfYdgfUL51CppS3ZY6BoagB+DqoA2GbSL+7sFGHBl5ka6FNelrwsH6VVw4xV/8kl
+IjmqOyfatPYsz0sUdZev+reeiGpKVoXrK6BDnUU27/mgPtem5YKWvHB/soofUrLK
+zZV3WfGdx9zBr8V0xW6vO3CKaqkqU9y6EsQw34n7eJCbEVVQ8VdFd9iV1pmXwaBA
+fBwkviPTKEP9Cm+zbFIOLr3V3CL9hJj+gkTUuXWlJJ6wVXEG5i4rIbLAV59UrW4L
+onP+seqvWMJYUFxu/niF0R3fSGM+NU11DtBVkhRZt1u0kFhZqjDz1dWyfT/N7Hke
+3WsDqUFsBi+8SEw90rWx2aUkLvKo83oU4Mx4na+2I3l9F2a2VNGk4K7l3a00g51m
+iPiq0Da0jqw30PaLluTMTGY5+RnZVh50JD6nk+Ea3wRkU8aiYFnpIxfKBZ72whmY
+Ya/egj9IKeqpR0vuLebbU0fJBf880K1jWD3Z5SFyJXo057Mv0OPw5mttytE585ZI
+y5JsaRXlsOoWGRXE3kUT/MKR1UoAgR54c8Bsh+9Dq2wqIK9mRn15zvBDeyHG6+cz
+urLopziOUeWokxZN1syrEdKlhFoPYavm6t+PzIcpdxZwHA+V3jLJPfI=
+-----END CERTIFICATE-----
+
+
+Microsoft TPM Root Certificate Authority 2014
+=============================================
+-----BEGIN CERTIFICATE-----
+MIIF9TCCA92gAwIBAgIQXbYwTgy/J79JuMhpUB5dyzANBgkqhkiG9w0BAQsFADCB
+jDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
+ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UEAxMt
+TWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0MB4X
+DTE0MTIxMDIxMzExOVoXDTM5MTIxMDIxMzkyOFowgYwxCzAJBgNVBAYTAlVTMRMw
+EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
+aWNyb3NvZnQgQ29ycG9yYXRpb24xNjA0BgNVBAMTLU1pY3Jvc29mdCBUUE0gUm9v
+dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxNDCCAiIwDQYJKoZIhvcNAQEBBQAD
+ggIPADCCAgoCggIBAJ+n+bnKt/JHIRC/oI/xgkgsYdPzP0gpvduDA2GbRtth+L4W
+UyoZKGBw7uz5bjjP8Aql4YExyjR3EZQ4LqnZChMpoCofbeDR4MjCE1TGwWghGpS0
+mM3GtWD9XiME4rE2K0VW3pdN0CLzkYbvZbs2wQTFfE62yNQiDjyHFWAZ4BQH4eWa
+8wrDMUxIAneUCpU6zCwM+l6Qh4ohX063BHzXlTSTc1fDsiPaKuMMjWjK9vp5UHFP
+a+dMAWr6OljQZPFIg3aZ4cUfzS9y+n77Hs1NXPBn6E4Db679z4DThIXyoKeZTv1a
+aWOWl/exsDLGt2mTMTyykVV8uD1eRjYriFpmoRDwJKAEMOfaURarzp7hka9TOElG
+yD2gOV4Fscr2MxAYCywLmOLzA4VDSYLuKAhPSp7yawET30AvY1HRfMwBxetSqWP2
++yZRNYJlHpor5QTuRDgzR+Zej+aWx6rWNYx43kLthozeVJ3QCsD5iEI/OZlmWn5W
+Yf7O8LB/1A7scrYv44FD8ck3Z+hxXpkklAsjJMsHZa9mBqh+VR1AicX4uZG8m16x
+65ZU2uUpBa3rn8CTNmw17ZHOiuSWJtS9+PrZVA8ljgf4QgA1g6NPOEiLG2fn8Gm+
+r5Ak+9tqv72KDd2FPBJ7Xx4stYj/WjNPtEUhW4rcLK3ktLfcy6ea7Rocw5y5AgMB
+AAGjUTBPMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR6
+jArOL0hiF+KU0a5VwVLscXSkVjAQBgkrBgEEAYI3FQEEAwIBADANBgkqhkiG9w0B
+AQsFAAOCAgEAW4ioo1+J9VWC0UntSBXcXRm1ePTVamtsxVy/GpP4EmJd3Ub53JzN
+BfYdgfUL51CppS3ZY6BoagB+DqoA2GbSL+7sFGHBl5ka6FNelrwsH6VVw4xV/8kl
+IjmqOyfatPYsz0sUdZev+reeiGpKVoXrK6BDnUU27/mgPtem5YKWvHB/soofUrLK
+zZV3WfGdx9zBr8V0xW6vO3CKaqkqU9y6EsQw34n7eJCbEVVQ8VdFd9iV1pmXwaBA
+fBwkviPTKEP9Cm+zbFIOLr3V3CL9hJj+gkTUuXWlJJ6wVXEG5i4rIbLAV59UrW4L
+onP+seqvWMJYUFxu/niF0R3fSGM+NU11DtBVkhRZt1u0kFhZqjDz1dWyfT/N7Hke
+3WsDqUFsBi+8SEw90rWx2aUkLvKo83oU4Mx4na+2I3l9F2a2VNGk4K7l3a00g51m
+iPiq0Da0jqw30PaLluTMTGY5+RnZVh50JD6nk+Ea3wRkU8aiYFnpIxfKBZ72whmY
+Ya/egj9IKeqpR0vuLebbU0fJBf880K1jWD3Z5SFyJXo057Mv0OPw5mttytE585ZI
+y5JsaRXlsOoWGRXE3kUT/MKR1UoAgR54c8Bsh+9Dq2wqIK9mRn15zvBDeyHG6+cz
+urLopziOUeWokxZN1syrEdKlhFoPYavm6t+PzIcpdxZwHA+V3jLJPfI=
+-----END CERTIFICATE-----
+
+
+NCU AMD KEYID CBB3F726E72C37BF7E9C6CFAA6EF06F88FD1FC4C
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAWkcYoIEaHN2cwAAAAABaTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDgzMDIxMjgwMFoXDTI5MTIzMTIxMjgwMFowQTE/MD0GA1UEAxM2TkNV
+LUFNRC1LRVlJRC1DQkIzRjcyNkU3MkMzN0JGN0U5QzZDRkFBNkVGMDZGODhGRDFG
+QzRDMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApMsmpNyIsRavY6bK
+Sgq9DUsxBzZprBXhH+8lUTaf4K+H/hxOuoMURu+PQI6cB2OUQN2/BbE6LtLqjE2O
+kCpdyn2Xi4WZ/Mg0vUMKcYqmH3LAdFMzzzHYBO3F6SS70ByAuw9hOujOX0zR+Ac2
+xzW9qrE2EhhntKgQM7meWbTocZnJv0G3+yVpZ5j1yrNhq0aupjNYF9/kGxR1Y4rh
+NezWJrZ+lZYSoLlXEC6ZJalbAaVW8QKFRXO1WZP+yuv40WOghhcj7pGYDwRA0lqn
+5Q4kRBiAwrUNoEOMrMHKjgacguvNRo9sYgKT4AMVuDMNGgRqxzMh7wbSkUB6dvw4
+Xm2A9QIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUwdnka1fhtc5jJH7otmouFzdnAKAwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCLuDv4
+TUueSp5xu4uXZuNY03OOUhvPD8yabEq9I3BXIxoQ5DUQsKpBrFjl0MnOQSX+Fboz
+YitPg3mk0eTdPuB2N1RUrCgufb0gtoNTcOCmq59VEQYNpoYXvhEhs0KWgTSPce/l
+S1vBWqq0fDRET+Vy1aZLjG+dWrCfhyRXBoEtboFhJXLWKverg+pdR2DDagptE0mo
++qtNejSJqPE1sMfVPTDZw0yW7qEcC4J1uKyW3PYGthxc2rqVENzPo4FbAe6RDOhd
+tbphwt7m67VtWEEGB+CqS5NcQ3pmhqssBZUclqvi7IjQLPpnKo8uceIeZjXg0DAK
+9Zf9xVrC43/WpjYfSlOeUPT4fk822uR4m4wqh9Rd2To9CBb1FK/GI2vZ05eMf5px
+pMQxcnk06K/Qwz1fPS/tFO2Gy7+CAer4lIgRjLvWl8l+fqeq2pbHIOgFx+NjBltt
+XSIstkLltSCmEMipZQT1hkLF9o0nhRAKP2wMQfdCXWS/LN1St7uWceOxufHbMlr6
+cWxK1pjgb0K+NPvEJKnvOxW+MK3T19u+FC1MopKPIlvWLVxT5qnK1vALqj9ESLlQ
+sd/I9YSDS/SofHIf7ihhZqpADn8DDCY296/VUfhCN/LK5Tkg4oiRuc4f4FVC6PVD
+KhTnNrB6O9eBLlikwOlLiExDSn2EZxWMMfELrQ==
+-----END CERTIFICATE-----
+
+
+NCU AMD KEYID CBB3F726E72C37BF7E9C6CFAA6EF06F88FD1FC4C 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAjvxJ+z8nFelVwAAAAACOzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkxN1oXDTI1MDMyMTIwMjkxN1owQTE/MD0GA1UEAxM2TkNV
+LUFNRC1LRVlJRC1DQkIzRjcyNkU3MkMzN0JGN0U5QzZDRkFBNkVGMDZGODhGRDFG
+QzRDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA44Ysh/JqZGAX4efo
+BUEKmddcfKobewbboTmqWoi88FGVJ21NiLjHvc98FvL/ct1Ve5XZe0d59XogLRE/
+VncmfGQnw1lGghdzO53khxmqEZW31f6/xCnBSEvCSnrNJYbwi0BFzvz0OUq+6yW8
+ZdzpQrAGy3zYURv417UXblIkJ2eveLTq3Z3tiib3gmINU8aJC+hFLsxcuN9hki6K
+VlJq3lh12q+pbZJEgAzh7Apu3RANNlcZTrMePQ2BrrhMYuGbQux9S7q7Crec8AZ0
+waen5yebH9XOFLOft5Xg7FrVV+FIghEC2tZHEXYp702bCQHsSEROFyL8XST0mL0+
+SbJwDEO1HbU+ODNmFskldtb7N5XoFZgodutC2etpic3UgqmhltqeecKbL9BPYj+4
+fraJpbdzAkPTlbSd+egoB+dsRS4Xvlw3NOcQWfkSl6yTqvf4Os570jJV0heYKtX/
+yro6j5Giw4/tEaVcn7U7Lc91MXLjEc6ADrcOYVfstij+oGKECag+kHhzyyqbB/fP
+yxCVVtVvYnoQq2DrOgIOkCDhdGWI3raPjcUCp4fJ+C84/zMn/lfr6k8nDedQh5EA
+0rPGCGyp2QHB+uhGAVNBFeAnhyD+z0aeli+osIO6LdDO1or1yAOjc/x040Yhx01/
+fEWayU7xHx1DX8ytaK3gG+54YrsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCwoFMt1mK+5bD86
+EiICUVxCDtqaMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAO3QK0myjXT/HVVxGPV1scRE6InKkMwAnUPd/GCg+x0Jz
+rsNy1NAq/h51oKok36lQ3UwDVOfv9AEHgRKlzjR3fS39GQAkmh40K55dQq+o+JQQ
+vmEqNNnPrVaGQASA8M3gA1elZ/qGGlggF+zjvt3awtMtncMDpN9CV5Eji18y9Otr
+f3oYNcVLLBYHB1AJtpz5C+/ski77fOQgP0MiabXVTZc7lFSVGs1d2R8BpzYwa6p2
+kTSlayg0sT9Nl4uPoQwn6AFSLikU5G6lUjmfmh+/YwPLwHQSxEkKGH9pzE9o17MD
+MFFal8/1uLrbZBbSLRg7A8sUE6a5bpEJzLHAAfLUluglkW8efVCA1cQ0F90orwmT
+jcClgq8TLz8w4q3TlOur4LMMd/dpfJoTlj5/FyFlo13x+BgqFdGFxj/fEiaSArEE
+9/vjpPvAOr35UdRNoiJ0PJXLBWGnhxA8/RjP5CzWFRpS25hW+DM1qHaVVWdooMGo
+TUs8vmzRfnj7KoBRsnSspP2RmXgxB0fO5EWw+YXaRLAJJpSFwIH92x7YA4bnZdlP
+6j+48jY/XmijWeWvDKudqBjEhv6pEQdKfNWTXObgAsHBS3b35cL8korN5rtMyykS
+cCazP8hjuDZi55cwO/wYu1IZD7RMsKBMb7UwSFq9QQkXkgqxwMHttigEsKfyc+g=
+-----END CERTIFICATE-----
+
+
+NCU AMD KeyId 578C545F796951421221A4A578ACDB5F682F89C8
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAFcmpejOhVyE4AAAAAAAVzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTEzM1oXDTMwMDIxODIxMTEzM1owQTE/MD0GA1UEAxM2TkNV
+LUFNRC1LZXlJZC01NzhDNTQ1Rjc5Njk1MTQyMTIyMUE0QTU3OEFDREI1RjY4MkY4
+OUM4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAougXj6NuBrlwzXIJ
+8MzPVH6zaSo37uBnVeRsFnncZqYgz7hKk66U/TrMxhkRN8SGnRCKBx+sNujxVNWT
+9sH0p+LDP3ElG+IZ1mQ4EwzIhjzGO0CsGLnKQbEmAKVi0YTTr35TbqMFlT1xOmHo
++fmYiZSFd+Rm7ql8nOh5ipbkaMmBzUD0+oO5K+DOm9Y3NC2N97+npOkPAlGM6cIB
+Gc6rbNf9CVYB+/PsEbit97YB19PrVhYNd00REynyJyOS2giKQ3J/QyLFniDGyBxF
+CTQQY5itqXlM815NBSdI5jyy5grT4CnXzabeM7GQNh8oZmypVmx7j7O7lUDb7JTq
+pCV8SwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQU0EVRTP7Zl3hIzNsSYr6WUWcPVfswHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBVoWrp
+sWC5REVdYYFJo6iadOgdCmxDxLtdbBsefZTZo4EYkcyISavzf7FD2VYJlbRDRfv0
+M36AqfPPQhyi0H10mVB7p8kLCQUjO1RsZzLKwbR15w5h0HoJTnjT+r//chPNn6t7
+dvIARCVXiyjmhVM1ggPtHdl7C3C9yn61HlKP79VuPAtLBM0ky+TPj0DkcgmvFxT9
+XhXd5rk1Wm6dk2LsYoCoMm2RcU/Tp5aVwTpducMBBPiZXZVRrVXlTI2Jent0/grd
+7a+BcbXWLBAdhF0XWpB6d0IHK+QRyF0vTwfWjpirdf90woXFZrIVqufKJZCOmNvG
+fB/uD4xaLQ2106IZ5avl9STGSsjRs7CSats/QBmbAuaZqOsNbmP+5JvnABwVYiNf
+l1j72pGCRT5jDx9gJwUV6g65urGydOwMH7wNYLY+xAiyiqz9mykReS/17FXSkzGR
+YvkcRPSKYl+CSq82d67Sez8ZUpnMYgKdnmPd/qBb0xFKmNQ9XI1h8xFZd9hs7MN0
+zZanILieV7Qdlyrtovy4Ngeqh9dJs6KQRBSAkgKBcAK0kiTNlBqL7Sz++Y+Ni5LM
+jiq3x7uiL/9HKQZbMfAeHHpCg/6bbTufdQAH+YXQQnGG51XfRl5zllUY3PXyir//
+xdTnjo0xwnWDEn0TInnBEUbRWl/cTgO8gUYSxA==
+-----END CERTIFICATE-----
+
+
+NCU ATML KEYID 16B341E381CD5C3E799AC838CA17F1F7F3F7431E 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAj0e0edm04AMmgAAAAACPTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkxOFoXDTI1MDMyMTIwMjkxOFowQjFAMD4GA1UEAxM3TkNV
+LUFUTUwtS0VZSUQtMTZCMzQxRTM4MUNENUMzRTc5OUFDODM4Q0ExN0YxRjdGM0Y3
+NDMxRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJ1M6N+Pb2XwUj1i
+QofMfv9VCt5EZc9mbnN1RFhVyoLqeAsGQ0sGT/xGl13/JiZ6sqUC7r+kpxUJFjnP
+VNbcHXFg8QYFkG4AVbj41AbY8+inRX5lYqeQafu7EZWM2qhADFjiPlG1phEXaVnD
+FRF3A5qlgPVZdo46vGjHLNWDP71XlXPjZVQMJyj5ysddme5Q89tCJZzUpH3/QiZS
+KYgR2AdMQaqOFIWuwXrpwteZiI42iKV00GPPvgX3fwbkbDV9fLIjtzgGMJ740azD
+WV4o0r/LeKmx448O1hr/wYLkwwC3/FsgiGYqWJ0Cf+nukMWKcdvNVwLxDbKDyUJQ
+yxs4VJfhBGYC/iqLLn2Q9Wj8kZwiZpDTL8UTv91JIxFilRYid1kJoN43VpRrUS1j
+LpNpGUVXbc/rIxqKruvodXKut60GTRiBXWppwk6eN5fHYYobkQM0GnzSZ8pr7xo6
+3jXHONIQ/6RyBiXX44XtX9cxGMu0D4n5Z78fUsGpr8X7Ag6CbJnKb/R4HXh9BK3H
+Cg3iJrhjbCDq9WB/Weh9KUYQtq8IZRGTOyt0OYEa38+lNr1RHTqWgYVMLhO6+BPO
+IMr7IimeRvRRXbyyF+PWK0w81aJG2JotZUR3R7jnQjoL1HzZAjyMlnELeAF4EuUM
+6sGiRl8L86hI0DrFuU6QK3K/gCIbAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSfKDm9EFbvQ4YL
+hva5Xu2JPFwMxDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAG1ypRqEL3zaXeQ7oqoCPWRwhPcwrRISPnhe8dt5Boew
+iYwOMzLgzmyzllZiMDzJa8kajt5rGPrD4li0Jj+DsVDa9cpSlhJBtVW9G1cAN/Td
+xQ6DJEKoSw8xNixbb1sCbaxLfhzaOLBlK6XRE6nh/tF5ivpmTo7k4A1B6OujEt7V
+kc3JzoW0Khac7XPvz0MgF0VN71IuYTaWl8CrUaErc5D4OUlh1gyFdqZXWJWYegQM
+7dd3ONWYfLaiXz1GLD/WdcoMO2hAXHZMrJdSbeY4K7MBK7XdD17HdZAVqtCdGLkk
+iVSGI1YGexpDbi/WZtH10R8AYUKK5phaSeL46agI4jpOyd6gmqn+OdjhPm2PolkD
+sBONwVeqBzdEghiIXQuNV17G9v9KfqWfKVIe1d0ATB709RUOwfE+C5bYA4TzMwN4
+e+F7DRgbNKbF6398MTZIxz52pdQuAf7SKPnDq3Y20jSfIDMQdzR3lu7Q5dtaP7Zl
+i3BNdfePdzuaXt7CakLHteskX0F5uqXPI4f7sm4ov/wC/6bB9OrU6N6KoiymNo0S
+UkNVt9wHChoBDhn6vEmfCMpdfd1PLHfVP9SDqUMJBhQSNTcMwlCdg6LT66ka2Y2O
+pGpK8ShqBh7RFQcUoLN+54D9TzkLKJt9gqpqo/cdsuVtmcGLSCbJy4X0ysUljb40
+-----END CERTIFICATE-----
+
+
+NCU ATML KEYID 277631D059FA7A9553FB59DFD6E85BC122300FF0 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAkLpeBGbckgOXQAAAAACQjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkyMloXDTI1MDMyMTIwMjkyMlowQjFAMD4GA1UEAxM3TkNV
+LUFUTUwtS0VZSUQtMjc3NjMxRDA1OUZBN0E5NTUzRkI1OURGRDZFODVCQzEyMjMw
+MEZGMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAO7O9f+oe3b20lh3
+uHTSmutODxtV4XTSH6sy10nejkbDEwXAxgr6ywW5vLoV6JVNG7ixauwEU4gyDJ2Q
+NOXgk3uZ8Zta+RTYyCiG84BG4nD/mLjHYB9BXs396Sgt8GMjbTb5CXkX3LoMhsZv
+pMLihDBNVXAH2YMhHli9h40sdLdppyk67Fn0EN1+6gJrOuE6k7+m0qNrG8JxnuHG
+xHrp5nPJdQpRhnyJ4bfKFipbhs1FqW0CNVKbNe3MktcETx+jP/8tFM6+CkxxziuV
+pjGGg7sdvijB6AqW+M0UjCAmNbfGKa0uWzeWZEFDB1nd0c+qM4MComDQ0JdEjQAC
+h8eFLGQxfFaVdIM1F1P/r5k6kYKDZRiZv77UWZbgHiL5198MFU3t/pPlLR3A3QJ7
+VBZsWuY+Ela+6kdzaEBZFKEUt879/BKMftMFMVCX77cy7IdJOQYvIMCRkPiUGIIm
+NWXevE7ckZWd+TUi1bLgRbfni1w0RF45ViOOqa81moVfu4ol0BfK5oWXFlTLIZD3
+vyI8na+pcjQJ2DHYx+ZJAQkhjjgyn9HiL0fDaU29degJNn5Qw+FKlA5Lk5rlqwu4
+vMGuZVuwLPjbhygHjv87GD7qayOQ8fxp4qwjUvaC/1b0wReqnxG16UqP7IWk++dt
+3wLb/gfjWFg9cmNf2g8pyOW9weo/AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSBPP+9Xb4QOExP
+gnR1hLtzWtM/MDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAHoJ4kuMaHW2ZXSindUSwKb/3bjzU9WUiV5N3JQr2mM/
+XE+Yoasy6vHrzCC9MKZ/mWPikADxvY1tXKGMneaEs62im3SxPijkbeKaByD5cGkP
+Q0eBE+lO6+wgVH0JofDxiMJ4LkGKq62hfxRNSHIDvipYVlNwwN8ZVhlNYbsDyJD6
+3k0lJk/Hhl6XkEXCcZQGUIon3Qel3U6ibeqP0DpxVQ9XcHLLJV+n/k04F4aFuTsD
+/epaeiJQr4mxZEnpCZB33AimHzj4OhV98nVWQETZyQ22QclUsRUtjdqQxu8TysZm
+3K8LdbHOH0ViWhoudUVM7Mn2wqswEkAWz51+0wgu1BQ7342bvRAB373fBpKvH2B6
+EaTg9A/vHefCSBI21DUSZvLp1K5PZtlrKeYPdNdM863MHdEL6/ux+C3ya5sBjFsE
+xEbUDp2E3kC9sS4rVGiDFil+hzE6dcZJEcvx5lvFtfHTaLum+SBFMG6lNKXlANdi
+/XVFe1cDfAwYgg8NgD4v6YSrdrumev5B16pk3uFSWHPN+8hv28JX0zqQrVjRj5gO
+VQTkYy9BQpDlMpYax1FdZCFJ/Cpz3Mi1YUjodnK2DAlA75ALOJHrNNwvCJDZbu+G
+e/M/psklytrVQ/LunbO4ojTdgrd4e8chHg0YeT9N5uc56yxTDcru9JUjBqo118mf
+-----END CERTIFICATE-----
+
+
+NCU ATML KEYID 2D605CD882B2BD716CCE71C90BC774D3D5BCB1D4 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAjyDKOZAblaD6gAAAAACPDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkxOFoXDTI1MDMyMTIwMjkxOFowQjFAMD4GA1UEAxM3TkNV
+LUFUTUwtS0VZSUQtMkQ2MDVDRDg4MkIyQkQ3MTZDQ0U3MUM5MEJDNzc0RDNENUJD
+QjFENDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMp8k1D76qIlGClK
+Fk2yKIrpMwhyY+EOgw7Cn4soT/VYehHnnRgcikGZjbGnTIMOP7BWDa3TdIdguyp2
+xo5ozlbovaCuJiN83ulQFVXutuWQ3ilLwBkKnWruOTm3VgUIP+5P09qi3PcX1YX1
+MvqPvxf13wZjiVVsN5vMxBEICH5D2WbFBVmXf+nMybI4LbPzpJr8F9QtZ5aKKGfd
+6yJ9iVKfthm94dkGXWNfUN8FIXNj4vPPN0eL9VfESD7PaPxMZeZqqZG++74Y62xb
+RsgXyr+HV7vFS/xUA+JtQ3BCXU/2iZSCNdgkt86Me/SPcsTbHzsJEzwwHhSjAzOQ
+ymSU4A3qb0hjh9A27uXy5ntKS/sR3NecMuxnqk1FVBpWe6nHGfJNVu3H6XNleq4Y
+DwSWG+4FsH6JcVqhO7cdFbUf3ZggRHGFcxpkamkrQ60w84j//IG4a2hfZbe67sDS
+4U+rmPcY6fB+mIQEcygj4qv2K9yFbLsPcKZoeltgH/0pCEN7vyLsRS7WArfZPdt8
+XQXDV3kctCHJAGH4kSeY1KB82NpLha/NkSTNwLwt8v9wQ37adB+2zcT7BO7gLZB+
+RkoVj0FkEa4VOvDvDtr8y9WQgTlYjVzoK5EQ5Pll0NbWNGl16o6Oonh9z49vWyII
+kbM3dnfUZdW6cHRPwXqUWEO8nmgjAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRCoDUP1NVc1Knh
+2FbPsAzu8GCIBzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBABEti63k1V1WQJEJCdUYWsURQCUKliS+0yiItc7o5wNF
+F4M+HTzEq7oZH4eF7ZCv+FY0mx8lKvQq4jcW9avus3wIGk7ClGISLrD68vWZMjzM
+Jh/cyDpOxOA+mV890oz0qhxPZdKtUZTQWjxE705O53+UpbWUexvmjv1YLQF5vlwM
+TUIP9z1BpcSWFSm/DB+m9Wf2+sr73MxgfGP2TAHk2kFDl3j/mpd8HBJ5SayiGILe
+1po4lxn9dhQAYktvzcC9nUM3q2tdVhC/FJSGDi95jcc9BXsozHiw7457Xktf5pSz
+ncPPA95MOM5yj+VBfQQWtD1a1Qqy/GMQHiL4MOC+qSkyhx28usVZhX165hrH2T9Y
+ZVxEFceygUV0+DZWyoQ6eMmPOzxPkMpvYl+mohQvB6pQkj2QPjxQjKT2A7DY1lu9
+FH1LxlISFAQvHPQkPacv4KiY1AOFkiEm04zNSWN2Oo1mdMO+luWcLtMx4JEE5FeN
+Aq4BqB9NCg20kz9cSUpcpMBOjfVtiCapLcikqfFtA8z48rNatsbe2VfLPk3vZQWm
+ypuRNKKkeGhoh+Yku26TZezoQL9MMxAsrkmpeE9o7ryxa/TeL692iiFAYG5UInzw
+u5RGKLWpiazJZz2hVF08yIn8S7LwiFUKUcaxrauUGeKQdHu9StOK1ysK0vT5atYc
+-----END CERTIFICATE-----
+
+
+NCU ATML KEYID 35AEE736C9B4D2861309E7815C0FA4CE40D865F6 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAj7xqYC/HZ81KgAAAAACPjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkxOVoXDTI1MDMyMTIwMjkxOVowQjFAMD4GA1UEAxM3TkNV
+LUFUTUwtS0VZSUQtMzVBRUU3MzZDOUI0RDI4NjEzMDlFNzgxNUMwRkE0Q0U0MEQ4
+NjVGNjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANrCXCjyWyYRTmkd
+dSQ1+yX2V4FcMqOnjot2YSniFfPZ7fGwfDfXfJyeT5CVXcV0rOvtSw5hSH3Qb9V5
+UgJ973wkh6bE/y8pQ52KzXysGf5VACE7cxA4Lr5rXCRRbaX3RizB/qtvS3dc4MTj
+Iz3cZ5r1NZvvuF0ECjKsDAb6Zv7v8ywbcR3OWC8n9BjVEZ5H40ohhIc3tgGlbtra
+rBQ+wZat1rbhzh6Mp3kQONAPuy/ZeK3PCoEvINfsnd9JKUJOeyr/JzUTLwBnDS0z
+Hjj0E7gspdR/Vp+eTD67y4czlYhQQ3LHIC24dckOxFaRfAjfDUGE46WxUYFf+XWT
+RmHfYo7+GRfanlRsCYaALMT1gBqyDc2dnTZJPikd57wFGe9qcFPw6RsNHzopAUqo
+oD4RhVMSAvGADwvviZ+AvS6r6i2XCsiDdNlujr9tOb1AgDY58oVy+c923ITNW4O4
+XKVBz+Sagxao0m6uIk4Bt4FSuRrvy1tfPp0/3bxyJoROu2mzLbwjQCQGk6qlJZLc
+nKOBW6DunaXmDQuJivaN0b/zTtcRgnMrrebmm7hBbUspzirHhSVJ9r6HoQVAExjw
+i2XZUBoRG3mew5KPYB+d26CZt74GpN/cG+K5wxBVi18xjLWInMeniyVnv7MBSB1X
+k+AbccgLIb5F+QBZ+FbQyJ0eQtrZAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBREW20obHJN09w7
+hc9LLN7lO6ebcTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAJmmwj4oxZnoIuD6brxRZh6VP8DQ+7N0zpahXMwCZhsc
+52JG8y0eY1gV/0VG5bzJDrJYFQimv7ZPcY6u0W6Jl02F6onv6PnYJqcOwRfnYkzx
+8A4aAPxDC52i8o9bN19iweXIjjqc2ivaVKPSaeKH4lWmcrgq5oD+yLYJnhgYYlw1
+JyHB5FLP+98MG3a6beM3Yos7QI/PjzIFQx9PxFzCivWZPj29B3mVTLpDaBAT1v0C
+GlZdmEWWP3sACcae7EcGDDzXWndmagxWb4F7x4kRuGwV4eSCb1QygaZeUNcvTceW
+ZTgJdlp5rAn89CpyieBAYwEqJuRE4NDnnvi/CLvgtgOs/WrTMrLr9hiLufoX8iLm
+oXYPkh6yZzZ/WmeHbUzvcdSOtl97001j1XKFOAYxjP6CRBQ9+OuKucxyxXorQN7P
+XzX8LDly0W7Uj7crmi69MMMF8clZU5D8buyNSBjvnuLLJfUnj9NSVQpCXidyzkba
+S+rfW1zr/Ny1dqOYMCvY12V1ePmcJVltlGRy8DxOtiynTJ0C7ObPe22VGpJ3RIjj
+MVuBHgpqe5uWtYSzjH0Ox+2QdE/ywN8w7AfIccCj9pC9uvfziSwYyVgfQjkxvx9g
+VON12786ze8WM74NX/D5s7sj29lMRZoU3LNfUcI6ekSobQDUl/ISp8xth3A6kxyU
+-----END CERTIFICATE-----
+
+
+NCU ATML KEYID 4666DE766204E74DD29BB4FDC58523A1403D6A32 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAkEVizcaAjIhPQAAAAACQTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkyMloXDTI1MDMyMTIwMjkyMlowQjFAMD4GA1UEAxM3TkNV
+LUFUTUwtS0VZSUQtNDY2NkRFNzY2MjA0RTc0REQyOUJCNEZEQzU4NTIzQTE0MDNE
+NkEzMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL7fgCYS8NIlRSkH
+H7rycsqUOANooIsWlD00aRUuKjCO+8FINgZsETGdW8soLrmscfHG7wg8c23btoCK
+6THRD2cuGwG8gmuZIXi5Vkw2H6lLKqHxj4JqQoyP9904XU6PsAmipybOuM1SaqwQ
+YOI80Aa6w9AT7N30QvG/AsQAMu40xMs5PmpO3T3WJXUnOB0IiBgqBpVHesQpQ79a
+dGGMu00gv6EqWKpjs4IlFhUqm/erGxtVv9tD78Et/qTMH6vR3RLW7NvhepPh2keN
+zeZjW/tbyaNmuvKoc9pUKoLmJyWBsIcSZE5oUJyuYFDTJa7y94Zz2G1KLgMR26y+
+zwvVq6Wc1ZnVB91qy35LS1YxLGoK0k897EgtXhTidA7j1fYAdoJF8y+JN042kYkh
+w6hymotkRcV30G6V/XKeToLE4JmafIdXzHq7XgUx+l1hhVWRTTVnjb8hz9gZ6hXu
+A6P/+/c2SpHpXtKSp95mSpdg5Dl6crsGG0CPiJiWlkcaFnvGvKIihAiYWkhgGI64
+L2QTWtuG50kp2zOVNsT+albqEen+sLxZ78FLt9IUBP6HRfGkAQJxQG8fDvp9Cxwc
+3oWacwI3O98sdSJBnnueBIl7XdShzHWy0mFskT8Eg9Re45HNDVrWAOB2pUWR/sCV
+6AJN0zDPCj3A5P3eIOEXNONhxmglAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRYGsv0YsORhZIz
+4VmOpQw3HCLFsDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAAzDdCF9ZHlMcBLzu9DCz5EKYSkxoV2oY9FAnjnjCbcJ
+d2sdZWcMdCwHGAUmv+8heCSK139hX8GBfHHun7C8jSAQgLXTj1AvKRrfAGVrd4Wb
+VNAz9JkGYw8QifgcgtZV18kz2KNk3zt+X4YIqHPKXNpzgmUJT3fApbo5fmUDDTd0
+4g5mQsjnUl6AJ2RC8FAIKBT8AVxVS8cf29V8wemcq2QiFKzDRsdVwI0t6zrKl0FS
+AnImP/uYutf7EOaQWBgNajnnTSRq0ekStPx4KNLQgiHH7B221JUK8t7qqRyimoH5
+6iT1VykwGEDW7YXUu4wT8O3LbMMeBNT72R/04ioEOQHzKQkltiPDVf7gvYsr8H4B
+cIfcNXCTqi8utfwMuVHxb9ssUzrFWBQBjHBdKny5jWBM1ogycPzJg5F1lsPP+fI+
+i+9ew6/MdgI4CNn5iP0OXnSA/XsFW1K1WGbBiutcIsUyFZpntT7jfYp3nrpplcp9
+xXvbjcF+RngAijMNfwQDliCKCHor3iz4gQIXkDwvoJKe+dWpoyDcfosgmidxx8nr
+keM2pSdumxQAsZLMbip245lPRlWXJ9lrPxg8rPmA2q4tfOprcepY/Gwf7rE6TzAW
+z7NBW1V2sEn0Vhs9zSksVIAOlV0mxcRnTzHCKY8H3Pu+iR7e9PtHe1nqfA+xqUNL
+-----END CERTIFICATE-----
+
+
+NCU ATML KEYID 55F4DA39CA65B6681F2B7711BC3EF208A8679D1E 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAj8MWKqvd4x8kgAAAAACPzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkyMFoXDTI1MDMyMTIwMjkyMFowQjFAMD4GA1UEAxM3TkNV
+LUFUTUwtS0VZSUQtNTVGNERBMzlDQTY1QjY2ODFGMkI3NzExQkMzRUYyMDhBODY3
+OUQxRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOtDhDtIzu/l+k0K
+Hqq9Yf56tCT9WSz6idcRr1yISRQWZjtQh4O8fZCwb92Kzu3Hd5OysKljqzPcMZ6+
+Nqy5laFYtC7ijOfCm/yTtdDOidHG+mpGM3rdwMD2sPu20MZHt5RRLW8AJ0zM6u/k
+EH+A5S450glnEyvEOtv8HO4EqRC7r/6WP/KhAR0xSYQebWvtLH7LT0HQh5ymnNNN
+zdvxRBKof3+F4XvE0CGOIRtu8QHyarMUHJJuXHd4npIE3gQHBHAkdvc33qCm4OfO
+iFwNBZgVWU9id9SUEjXmUgxjSgnAblW2MqBJLtVKKLvvbdqOqZlbOYHfG1x4gM02
+LvUCIaK4Xht2B2zYsW9ChZKZb/mObx0Xn7EoY0G3j1abrJr6Ezg6gMrzS0moMFTV
+UspBTLKwgqV73ydkYUoiGAYr0u6j/LWJRdoIVBATiIClGkVhaMRZaSqIGTA5ls2T
+xW8w7WX7WumWYTqHetQ32VVejiisknMHB8NLerAdPN4QbbGDE/s6batpUy3/FlPU
+9bxrGqiCgbvmpMcGwJp3+5K+AnExWMwMTkLSunR0ccSYXLtEtCLVeBPWRfUhdSRR
+jQdV+PEHcfxJrcrb8MsaC6PJkVpSE/T16YN8Xm1DpjT73rYFEuws4ZvaF/6biZ9M
+B0OXj00qSnOUwJdGKGBe9IiZlvQjAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBT5X/ejvCQdj0n8
+BSrvFe/arOI9KDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAF2eKrjyqWrS+aWsY+QuiC8P3T8BYhwJh6mFOdOo0LQL
+eN+VcjXVp3kV818BdmjjRzEKp5FSGqu1O/C87StTdUwOyECbJaBKIgskYCSIcJ2u
+D0u9krDcsZlNn+Sl08o5H/eOR2P6Y5KVW1KIVWb3MI1qnHpwKzqtWpnHMmWsIFqr
+NQTbTl8bLupIXJorwre3AwAnaAjiwJxX069bEYlfr7BwmkjiB31qRQ9i9r3Usg8P
+nPYfgaTYxnNV8gKLv67rR+5Z+GsCvY8cYglZ+sFmfYEnv5Qrlp06C83NCBQFDqrv
+aPMVC3o5YoDPE3ITZlVBw+QTZEO3m8oby8nkqm7QI95Y33FYIHOVwHWIxeZnIhEL
+IE9ubYeurKqzVNR0lyqoqRsTqm2FuPgERNip2BK3+hs9OiqnB9tGl2cDoIHR0iTJ
+WfoPfOt+yuRYNn1ZYuxDq7loWZxLzkRXiODuebkjWTYmSurLUiMdEm6CCKLff5Jl
+FMaK/KXeESKckVFF0vQzcfBsM88+sRt8sqJLKZycEcmNVQGoF/0Sce6ePJ6GO68O
+uj0EH6fjUfegu2nsdvzjOvff3MdEO9ra98us8GHaCRlu6AMFHhONQtmZHyPkYmrE
+c/zmRxR/XZIkKtfUhzrdJH+GT1PQSwdsoUtSRyILm5WYPPEiseIFjA1Ak3StMzy5
+-----END CERTIFICATE-----
+
+
+NCU ATML KEYID 81B5D99CBFAC98C5D61A8EBF26A86A086BFA3ECE 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAkBe0qkUhlPZyQAAAAACQDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkyMVoXDTI1MDMyMTIwMjkyMVowQjFAMD4GA1UEAxM3TkNV
+LUFUTUwtS0VZSUQtODFCNUQ5OUNCRkFDOThDNUQ2MUE4RUJGMjZBODZBMDg2QkZB
+M0VDRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKGXhIATpLe4gtQ6
+Q2GHSJDPsM4ETVvPXNxNC1Q46reBAMDOzKslpTPsE54kpa41LATgM8WQVZz/KScz
+NeEDDyQ0sTAWxUGQcnEnzdIKoBTYbdgzgetfd0eY93nzjm0dNAMa9osjY0FTI1r9
+JzGEPoZUiEa+rejqCzVZgCOpatQVum9jXS+/p3yHnxi32KvTcc0ksYtlgRbqzIdV
+NNP3FJOVr/wwMoOZhfIg6/bbyIjjRUcA+wXmG+CAAKUqxfadbKITZGJtZY0vYWq7
+EmNmAM1gLY9FpPp1y8pHotKQNuR0p2+mpLp5YHeJnmGx6nXnli60ShTg+7SNoXpt
+EwisxHIrvCK6oCK1+KO8qDkLdVzeTCdfHnN5xZYleWe6TR23lpFF4oByUubZre7P
+Rv8eywelwb96oYXbMLOo2UBFbfMG2fzuaeIHe9TrmVs5tVYqug7038tvQvuiYkdR
+JRy85Ugoh8dncQEKwdmycl5B/l/s0v3hX0DquHqSDS7WZTC8veVrSLGPlkWDhrv1
+Z4c443pQP2+R8d85g1/V+EIb/bCc8QNIqzWIS/8bKHHlSG/7cFFfMYYRTe1igZ0W
+yjT0TbJrYKfgqrAtKVW/cNRdDj5JBFspS3y6vf+FHCn+AW8vTnsX1ht7yWB9zr70
+8WFkdttxkg/h3oAIMrCamfHOZVzxAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSril4E0PFFqVed
+KblxC+BgEjlJijAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAAcKspoJMOfNXFlDN3AMOB2uszKW9UcZtKzx12x/WhIn
+PJfNqluC0sy+U7KLxRO8lnko3o37SJmxzzToYKp6kLU6MwLjwK6Kdw8fJ9AOSNmX
+L1f4I4G1UVjvdctqHoycNbzBRG/QGohyyk91IsSJ4mm4fiVSqVPWGeS+NEiOyHUS
+vNgK033RjuDC9Aj42puA6bK+OMLQK9pDctae5JHfjuXjx7fMHumoXR8eIiZPKeXD
+GdLVOOH90tlbh+AR15J8vrMVW7FuwfGKU8sMGNWUQWgudeAbcZ+9WPuXkuoX4ntZ
+K3DxCDSkfvC80nDYfTEjW2zy2l3THisDY6gAWd9EmKQvwk1kS9H/smN8MVJiRZDX
+6uavMjjKGZ3bhasvTQ3fnqhvsTS3vOxOH+lVdQjzDRYX5L00YZTBnHVJQSfDgZ0Q
+pYElmuD5XA2Bm85yXrKu8NPjzbUhaGGV87MHGknige7tnDndrFP32o8iKf6dWJX/
+HuK+8y9KYL2162Zla2RLrQBrz1J1rV+WAkDLX+LZRmiVByiUGBR5jtjwAIukj9LC
+mo4OkaUbmYrgjhxZfoyDH4KqW7xip3gNtUdJbhCFZweoUmkkbKzKtvCSrXHoGZnr
+R4xlyYt8bFh4EoLLXH4vfRV5oQ7IStxAthQXD0VVikU3lHVLubCtGTTIMMzIOPUW
+-----END CERTIFICATE-----
+
+
+NCU ATML KEYID A0854BD197F8212FACBA38991BFDDBF5D13CE9CE 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAkNY9jHHWJRg/QAAAAACQzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkyM1oXDTI1MDMyMTIwMjkyM1owQjFAMD4GA1UEAxM3TkNV
+LUFUTUwtS0VZSUQtQTA4NTRCRDE5N0Y4MjEyRkFDQkEzODk5MUJGRERCRjVEMTND
+RTlDRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJx2Uw4ANaC1bSfl
+H6BLhB6Sd9ZUknEC4hxsRhB2lH3KxAPeDxIM/4ZySkIkRhd6uMajJIkVPonX+2RL
+vnzEy2xJHyQvbWVyZ6gVXi/oObmmM2cMEkAyrCBXIp2JSXNdaWDozxFWoR4nLhnQ
+z0Kj0EBv28JNW8718h1mi8ItgZ3C88Cej4KPmr6KRG6Q6ahq5Ov1knAjXPk5WroW
+R7j4KQoMkGKqYf0R3lpzakJUEMkpvcbydA6IKYydl72kDHbqNmSW6ZU7YUheF9xZ
+YRWOYgAhEpTcve5WZxsn0OyHLmqjSj150EDbkT5k7o+XZvIde8I9NEPbwW2usNPv
+P9k2SD6XGn1BCNoZvhQNpVq0LpoGayh8CRRG48vEkg1K52Jj7iZw5jYteIrmiJRh
+qxMiHFDH07Sd+MHDD5KN4kEMBc99ZfdtFYwtfOWAMPX+L9g+vQplHEwpc26exVat
+gB1yZBg49WSZ+h2/kelPMc1F9OCjezcPcsdHiueYWrPS7OwJ9/wyvvsQmHaarLy3
+ph4knllQV5myWvjqDnUD/f1b5txP2dXdYNBxBeB2nERfYEUEevCVrErBCNNbioVP
+frC87yk4ae9CXES71gPDVi1dmciOEjFO8xMfOacY3j7pS7FuFKT3hnPFj907rdNf
+kR5Fgs/dlhczVcRoQnSHVhZRoh5NAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTOuY8zcJeBZXrH
+L0q+UIRZxQ8fOTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAI/OAQwtMMCbpfJLzCqpeVOWhfIxOg/rm4efYndgY17/
+Hx1YDkgJoKbWH5j4NhdxqWzKgfiW9/HJ2a5SfM3e778LOITp78s8eso71qiqTkgH
+KBCgzT3uaNt7pwLMNMpxNjQmpByGflzM/AJQuYsa41uHN3Zx0gJSPCozZC5tb5C+
+9nQvVauhfLiSPhXe6jfmlVat/HnlTWVrnb2NTxsAFOtOes111mxqGlW3DkcvVwH/
+RUsRPnrv6/joljv3uxjbNwbix5kvxUa2D3HslAPZFDyzt9omb3HJB4K4FDZ9sMX2
+SVgEaYIoVKeFSqkeK5RZ5WLJy5YaJh3bLOvYGeqPZAs53E1IfcLK7udRG+OrZ1qs
+IZjZNt7xlQ+n2DMIf1+s0hmcn1Vz0jR8R0FV+CdW6iGZl3diGUnUrOHgh+e85jXQ
+Ac1nnT9RwfSj1yCtyNNqLbmg/3HS2ydOARVIFu4FewRzUHY430zH8yH4vcTv7iO3
+5ve5FzcDugIW55z4f83TcKheIFs5WKZVgtMJIik1+7utAu7tzQ4hbQZQEGF+kZry
+uUQ86eYQjs5unqPxkcLo1b4El/xlrlOH1R5aVi3nX/ZgOY4WSPR1zLQ+oT+kPnrE
+FfhBzeZtM9+ox/jA9qygc/UajZtQaZ6DbX4H85RFedfBxxjMOLkpV16Xb/+0gM1E
+-----END CERTIFICATE-----
+
+
+NCU ATML KEYID CD3401AC6E1C6F93DDD869D46A518311B3747895 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAkQKr+ZQtHWMDgAAAAACRDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkyNFoXDTI1MDMyMTIwMjkyNFowQjFAMD4GA1UEAxM3TkNV
+LUFUTUwtS0VZSUQtQ0QzNDAxQUM2RTFDNkY5M0RERDg2OUQ0NkE1MTgzMTFCMzc0
+Nzg5NTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJ8LFl8UTZ2Ga6p7
+pWcderDhkaavthmTUEIckucrLEj599C9ggwY6cB+VIyVUuy9e9LjvCOKaSAYblQ0
+LWIFCfGu07eBw5LE8bpEsDrqw1AHSapvRFWsYZQA16CX2vhvUguxrW0UZ+LKJd9P
+hMPFdtMuKeas24jbReuE2F988lDjpG0qltVV29Bd6m7uSkYT0qB+Dh/nEeYuKS1I
+2mEiYS8YzO5sLOKg7fA1UnrSP4StnzgnWtuJZWYOcrpS6v2eEkOCpPwcwNOK6a2y
+VDhOUgt/EFyZLYwEwjrZRDOtt/KT7MONGlmjusNRCyyS5yRH4eMOebZfuH3mzD3d
+NyxpiiKTaSJghan6yutSQTI+Azj97Vrf7eZESsrdn9QQtUmlzLiIIRFnIrOxBgdo
+WPyiH2BMlpYRutcJC2a0OBnwNqRihOeyJWhe8cdPTJdNPAlCSf8+E2BFM+qRSsOs
+tT/PEa35XM7CRXOV8KcawWNIN530vojE5Tl0nhkAX/ghm6aqjwXsyZbReKIwE0R4
+dRxzHNCS8dQ3Bo6n9wiOERp9YNKPlMczNl0Im41+8L8wH5mhR7+77xOCvGsJKrgZ
+aQqiCjT1/q4Uyrc3eW+U7tsUoW+X/cCPFUo+5NRlJJEcCSrr6FW0Rr7PZf8xf0EE
+g3PaMzhZtq9smbemhZQ/MskdNUANAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQ3gzNFzq/ujWeA
+4TYmNDmGocv0RjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAAR0ecpVaQhMCgcAHoN7Dq4xhKlRTSj1uToevx+RcoKl
+6TuyQCkAMZ6mPC/uAJcQKHfZqs3+e4kp5r81sSs5wAKcve31AcY7MY2nRCLmdcTs
+4UIoCBofYafmItLLsv29g7ZFYHRSuzgErFrxTHqj+HcsU8LlTVuQzkr93ymfJtPJ
+swILHzCp0XttZe5Go16xUoWaZqLl1ca2myW/VvKAZtuowXnrRmc+mB46DdxnIutR
+V5k/QX7q/p6D3WAibc8/fQwzokrq2CKZFGWuePEymz+5c5Y+Ull8l1h+ZuygvPsP
+kPRRlvD990UhOUw1eRW2ZOwz0UGJqBduWS+Tq+ZzZrY0gL/G2PKsxJqHphKYWok8
+2mOzNqdVDN8VJfSCbaFZtPWaUo3GKlnC/8bYisC4JXOWQ0tdjwl0mSFeRvMaSHyT
+6rBcMPlQLRBjbByFyfWpiHwZtiBobIQoCLsHDNLRYVfJpzQ8Zp4nkpaVBKhEV8x1
+DGhb6ii4pKEHdSVxCkUlMkOoSVcPjtwGsCPZpkvmfjn4D18fOjHxTdNxAr0z/Z5U
+3t9i+SxnFDbE4mO5scqhBWScg5ejX284Nx4c17yCF7O4W08YNhiE8XeD03Ag9EcY
+3E7QQi2u8IVuOdzVaQAW17PQfbHq/TE9kAEwR6idbmGMTIg2cx1CfHGxJb+e/PpL
+-----END CERTIFICATE-----
+
+
+NCU ATML KEYID D6F56ECFCF7EDDB7FD87ED01E127EE009A463BC9 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAkV5Ycs+IuqUCgAAAAACRTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkyNVoXDTI1MDMyMTIwMjkyNVowQjFAMD4GA1UEAxM3TkNV
+LUFUTUwtS0VZSUQtRDZGNTZFQ0ZDRjdFRERCN0ZEODdFRDAxRTEyN0VFMDA5QTQ2
+M0JDOTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKCxkUFwQUiRsQ9e
+5vviwZFxYrEwgFYLZbHUUFw1WkA+GH0pfvE0ReWlGSrjlI2Zip977kPqyMJxh7gw
+rWsQblATO/Om4WaxwObnsdN+0+btMOh0C2rTY601YRjuUnJXPdGmQBdc/4pFBjLz
+akM3LvG4+7caaRHl0lfSIwkShoFrghQFvjpXCZWD//g/mj0tFweulYKcvypnpcNc
+nFwc6jixff6/J9IkcAdEDvTODn2lX59xJj3scL2Rh4Eg8EAA4xqjlK/2qs4NjWGY
+iEQyRhpoIlOFX8jmuZRMVWX/iXhohMGBwtgdD75J5BZMzlSpVmLQLDU7EqALoIVb
+uOFMoyE1toltIBlWWSfrKiEmNqbTqBDvlOjXlC15y5zWng1GeipHiZQoMipIQZCg
+H9lhy/ISqk650qkfmyrNuqxKWsTOKU87qEC3BrX3JBQs6NINz0kcPsgltO3POUea
+26gowu+ECPyeS5ZHOSSU02UqFqFARw1W+Qlr7GQ7T9xbO2IwiCo7tC7x7v2Pu0E6
+FQ3bLSErScyqzhF+nEKUDMZtukw+ASD4xO4r59xzvkWPeruyEL3Wx7NvMPSgatqA
+Uz4z9hxrW4tqXoa497rhaAIt4VjpEE4M7PV3BZT860g9xRt2+deJukS0zS1e2Gew
+VlN1k5Z3Itqc9AA8taUX1foMxQpDAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSkBYVZlFUvysx1
+qLCpTjYsUNVkjzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAGxXjluOIKxLtOnaQjdYnpDHuNoGXJDF2m7CVedV5RTo
+ZP9tty/20BD3DPltyrzqN87DNmmMGycVan3DZaKMATIIIZF73T4J3biv6rm6Q1Vj
+ldWk+uJw9+s4yUsTekF5iUbuEU8vywNYTF2pjtML5et/FxU39Fwiw2OvDQntbKmH
+s1i6kP1QlBvmxXkMPud56DdrnHMJOPbQoEIxxYpe/qh+iYyZKKhPktOKobiDfqTZ
+EywN+E7gzbB3Nz7V/P4qZJOTDVRVu2tx81Ms3zphcrgV9gL4e1NyVcunQXHesPGE
+4yMqvtLfEUYaLspxrItV1+Vks4vsa99JEqEmyJI0Kwqxt0Sb3wykdrzPelFYZ5sI
+dVzg3HcyWYrUKovjDcuN494DzYeaEyI69AP9qCwiMOE61IGB+wF+O4HONrjo4rW+
+KXJz5JdtzDylMf3Xx7zDqhsWuYbARmldqI/vx9e+dVEpwRiMBro8trmlcWWQ5nub
+//nBZsTee2tBeocmH9zhOae0YEpjIxrJ4Wq+yHS1rpOE7wxOSe/IfC4b5UfnbSKc
+v0oU360PinNGslOGZR4ZiJYk9+2WgTiwDm2iMJvoCMZGZPhWZ0LEb+srAW5ItUOD
+kasckXjwnYbgCpI0gX90FvbFutQij+n0zz+n4VHSRO1UrQK3FdzQXzz5f6641VyY
+-----END CERTIFICATE-----
+
+
+NCU ATML KEYID E0028D87CE6C67A8751CC4B5D74F57622E75E42A 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAkb93pmfvR28bgAAAAACRjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkyNVoXDTI1MDMyMTIwMjkyNVowQjFAMD4GA1UEAxM3TkNV
+LUFUTUwtS0VZSUQtRTAwMjhEODdDRTZDNjdBODc1MUNDNEI1RDc0RjU3NjIyRTc1
+RTQyQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMf3rofE/aQglSpB
+0N9JUYLomwX7TLdCtzCJScCKfW5SptgZX97KxhuFba6R2qqfE1NbABvw7ZK86cY3
+8DRNtKFxG5rcA/MW5QY1fhMrwsI/2yLSwRPrgUUmip7NDTWfjKSIYN6Yso72t/Zf
+r3STqckd+VZxWbhDcsTRW7uMJk/UC65A9o5Q0j0eQyRtKSrgiBOCwAXHZCZTMN+j
+ZzJD4RY6DXF4YusjlrzMwsY8PR1MtUwc425VeKH7m6NYX89lKgUI+EaYW9M99uuy
+z6W9DR8yKQ29aIR2LJHEdByTXx3wCrayLiHewTGegZmOb8/gtv6UQt3TEvVATli1
+LoXWq3xVMCbPuoMZQPAnmElJbKoujX4Q7AJrZtUSwezHW1ElUK41ewm5HaR3lQ/X
+H+1dtLfijP0jd7ZtLwkrh5CSSOdflol6nOuPcsMD7tm8bhJXFpnDwGcz+zQYKduZ
+C4HnY5LM2ENmS8TFZGevfntAUOsXkktjklXOxoTrKNjPy34aKU5dsex5tRWZHX7d
+lscvaBlfgt1m+H1eEQyBn1fc6EW/NcHx8GWxk+Tnl9sgqUi/hdm42VqXHahGqa00
+We4iQRSGDPH8+jac0GLAQkvBTxeNM35v0TCUHmwXIHYWGoWaZ9cOBvRW///hX4PH
+E4PPu0danDG/iCbTQ+wgDbODra9dAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQcMKsf5wMtFrKw
+gJuiECRz0LZj9TAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAATnGMLwWBOChKJMnPacAydTuvIIJeW/gFZ/pYIqmaaP
+O3I7YWxg2lmoej39uaB0Mdr+3XINrj9+XNwRnwOs5jamdU4tKccSGYgkb/UGI/xK
+g+KCA0RFf98dNuKjwe6Go0vXryJddw/+CELR3FGJ+BFDK+/fwIWillNe5WrVGDAp
+nKPu2W+9mHe8SPjC8xyq4IFZJtRSAsZX0kskqrhD2LMmfdDB4vabwzk2c86qcuMu
+DVLmOsvhwBogcnCekabBt17LPEMnxuEe3Awln8Ofrhm+wwK3YVMxoy/7g4NnyFB2
+ozYvs6Ll5wfFtvdCZT0PmVQ/WgzYCyjiENRqMWLImQ1fIQhNaK3PObOa+3cXkGpP
+f5RFdbf4tlcF2ICKmyCf1wbbvTnuLj9yOwjRAWX7l/8DTg0nq6QOTCJaSO84VmfG
+o+PTRZq7KixM6rkkVu5enLvCamFscR7WYJKlcjdD/MYly9rA36ZVQpWIBGmTCW0y
+RDxgvMcupM5AWmELlCkSbRj4R6cEqMl+njgI8h0yCrv8oezatCftaCZQYWDP7Y3M
+E1mqBfaA/B09P4lpBzspc8ia/54zqdrjONFn6kjvN1jy00TQyoR07oP488zRccgH
++P1sDGXqEL/wZi9prxyqz8tIln3BJKUbbyuvmxZuc09X+WIb41Tqp/VphieXHyKw
+-----END CERTIFICATE-----
+
+
+NCU ATML KEYID F761A3A1F408F1090797B87127C2A2397C0ACA24 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAkdNFvLkryvG2QAAAAACRzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkyNloXDTI1MDMyMTIwMjkyNlowQjFAMD4GA1UEAxM3TkNV
+LUFUTUwtS0VZSUQtRjc2MUEzQTFGNDA4RjEwOTA3OTdCODcxMjdDMkEyMzk3QzBB
+Q0EyNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANs8lDS2GbB0NTyE
+bsXHnm6+o/ObYxuQiXmDIRrEKxE9QLEGNAJUmkG8HG9gKpzcYjvCIRTjwh3HiGXM
+qGqqF7opqQSoFHziXWEamnDRHqA3uOdp3zP61Cyse0cf0hv7VK237PDwfw138a0P
+glB6H0Y9efhX6+pCpFnjEcOkr4t6QHwDF9CBb0FLlQz39hKO9hs2j416b0nCOVnH
+nRHACjsa+P1txvIGbiIR+Z87+4j//INxu5FdtTllxCvVYtbNl+iJTaN4fvyI04M3
+YOaDFTXxl0y8D6o98upwdKuS9PzFIW0c6e2LSte1xLV72Vcf+tTD1+OxMMMDt7Oo
+zg2+PURno5aQSq0hkJxXrABWSr2JKsnsWnDFQ3Trc/gV9ZfCl0fwWYCV5AMAZauy
+d1T4CQSm1t9B3pYGbXxVDWjefzGrhNcVaKq/HMI3qDoU8DznhK/HXMPuT0PX0eds
+A09PMlHheb/zKOyq3lPk+blSObDpvr7ZBVpS89zyUT3rwxpAQ7z8ycUagNqkh/oB
+LZgegL8Xjg8PN5TdYpLtWf8MpXV8lDZMVhNNQduU02GY+PZEMJXAjcUg3I8qT9y+
+hE7oxu0cgomebwAaCwJPOuDZC+cZUMTl0vPKHIm0nBDxmCPTZmdoYl9wv2ElNffD
+lhrgB8ZgfZKU8goTB2S4ct2wKgp5AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSm/r+jTrzBvknN
+5iMz/iA0e2lo+zAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBADMBAxNM3mEkTlF5roAPApr/B61eDOIRdYasbA7FEllj
+sJn+wwXG9ItH6chflM/Ws8C1qlL/c27OawUnDfyM+CZvY9qbUuRhxWoGxiIvl7Rz
+4pWNx+HtMMNShLjyQq7/XUxgUgnjJHT5iro71t969s9zFhMJICybngDOnwUxxC9k
+Ue5RPBWEEX3IwKWRiLBIyKraWALNWED4tjUKGXnEyOghJdTBzP54ITdz8+AsreYw
+QqP6j4BHsNUFgL1RMuoKzwXIYOYdNZMAQlyrv3K5Y/SQ10iRI9t25nHDDoeVpLU0
+OpVYJG7Na+DD447jkC1UhPFJExgCfSDjz6GMKsHKSArLBvmNuV/M3Htccz5n1b7o
+CqMvsjDq0gC6hVkIwUTPxBFZJgM/TNkF7fQ7PD1QvbUPDZxr7tPS3UhSYhDjXo9r
+6QFqVAKbMaCKPUy2PG5bybF2M5/yaJGlcO++4K/9RE0vy7D3f9erHqk5nc73R/Iv
++7awcEyXISIdEuC1zzLsa6pVN+SBjWuPpLdRPJtILq/7g/VLVE5RsGOCEDzLuTkZ
+gUx0OG1NxzN/xzxSlIpLzlDmstEHT7cBGRYaBHtHJ1wl1l7z4vTga1IaytWBSbQU
+/aXwTzLettXl4awZtW9kVk/KWBE5oLIN+YYUffd3wukHn9LK40ijaU2zxlbdrLWj
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID 090CAAE1858A3C3A3B6D4DF8978916FB205FCA90
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAASe6KDbNAcwMjgAAAAABJzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDUwNDE4MjQwNFoXDTI5MTIzMTE4MjQwNFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC0wOTBDQUFFMTg1OEEzQzNBM0I2RDRERjg5Nzg5MTZGQjIwNUZD
+QTkwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU+sVQ3vDjf15IqQ
+o8iomkxYZLmJQdPsXmxSjLtTkEEAtLeCHVylU4fXkYaGQc820TyI9vWH01sNIKsu
+C7VDiYtA5hh2jJEEIO6gx0B5CllGIr4ejgoHVF9uItHgk66RQF4WToEwJPydF5og
+eiV1kS2NdoMuyqJTFQH+S30udG9AoCMyLgfkbuyUK0Yx82XWcIGPoWuJcAj+I+ky
+ysnDpHN0Wu6SRfrF84zKODm/wRfmVTpBil61Q7azhwTyQtwZYbkmpAFAVJjyqC3n
+HXUZS6qFGS2rNt98JTv7oDOb7Fudb+YOyZkimBv7jGDB0UwxJZ4k2eVMsPniDnU9
+xRZz3wIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUQ6/C9JJ+TKS7QSmBt8ddZmlM5MIwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBzpdT7
+U6Rx+MDogaa+aBSDNouqdNU79KFvwXcFTkPNeB6+Az7z7Ej/4M8PBu8SAyV2w3CD
+Gl9OXx0i80CUaTamUBvDkDmljMADuc5358r4nOIlOj3u/m8E33OO2pEGuCUnlavY
+x/V6wkqDZUVw3vyRQsQuzb1fkYixqFBt+5PyV3VFEr9tVVkaFveFy4MU+egYNKC0
++tlI11HDNtVtxFn8/82QMTlyuo8X4o6T5sWoI4z5z7L6HyEpgdI3zT94iDd+6EnD
+zGFOSPR8mRtPWhuWGn8g0a9xefSLMDfVEFMG7mQ7ripkDlKmKE1S2F1r0yoZRkA3
+deP2r88eh+oK2F0fvHpFdU5V/cHAdwTPq7C0ForBJEKZ0gHxG1tZ4dYeIMwZgaK1
+Ze3Ngzlwr7I643P87fZZoWw+3kSiraE7EA8dWiJMZpD2kUGUp4R5CDDdboWOHZRz
+SK1bq4Ojv7mVmeHULBBv9chsZrmaDRU9h6AZFkNw4xGCVz9+1tyTo6UJG5L3tPld
+LdgmzKg7F5WAQKpXZw+Hn6x6m1j7DIuhMJrIDRg+mBy0Li9WfvrT/AwPFFxYS1fZ
+BvZjim86tP4/LNM3dRdktfwWQDGBmiwHLsdIXyRJLFhhRThZCZtSjGCnfFTKKN4F
+CRJwNflhgf5/sA3NcxNLsXVvHtg/J8rtexa3OQ==
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID 11227AB228983289AD2E7EE6841321901EF592F6
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAASgIRo0C9c4MtQAAAAABKDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDUwNDE4MjQwNVoXDTI5MTIzMTE4MjQwNVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC0xMTIyN0FCMjI4OTgzMjg5QUQyRTdFRTY4NDEzMjE5MDFFRjU5
+MkY2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp3ySaJvd1eWUTJHM
+liYUhy7q4vJ45Y8mnk3G6IKUuVHSZ5IFO2UlBebDM433VnjmDyZl6xBQk58zjvH4
+wFWiftdHjh6mXXsqcG744qHYqJdM0dEvYMzVM+HPDCRByX/L2DONCxXgGwo5Tz9T
+AKq1zoqBX3wZ+BkpgTj3LOBG2MXWUa/W4+RJ6jQVZyCgmGWeKwc1o+S3IshWywwS
+RR3mGMq+YkAXaQ06qGC5X+GyE7sMNYFQHZexSJYsQpEIIh713Mk8kv/8YZ9g5DxE
+n8FQVAbGEHaP1WZQ7MrMvh0KfX8yeEz/FEnOaF2kkgv0nU3E7H4lf6E4oldld+mt
+USUl2QIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUqGvNsVSHQCTLsw8qQGUwiabSF5YwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBgbJkK
+9W34NGFYcoxsgOKHHzBsljHSgCvXDj1/SpulbyL4lX10MwLBVwuKZK3B1XGxgQR/
+5P87C+7LPRQ5eUGbnPeGMcGMRl58Brt4FbaPdwjc+t7g7m/+46TwDwikSRbA+Tt2
+FFZ2cJEWVuqKW2YVEwjy+qxBVI+0LkF5aBSeUDEiVMyZwppfMSk+bd+CzEpYIRCF
+Sp0IjPptuND6zzSjC8gt7XnEWCzg14V96nlw9ACoP6LXqdQRMGPOm/0QZvbCsi9D
+rvbJ5455I3dnzuKJFdCl3CtzLfAtg/+iulMhoRCWd8QC85e8JchW0jnKxVnpMvp9
+Mnoj5TWbDBAaXRQ3MO31ShAjL/0aRqEvVX7PB/I6H/boM/PTpV1NemgGiRSdERWj
+8Klef8BvG1OPtQgX3sB3MyNBW7BTUZ5GEuUcEF0AFuAWmCO2vhDvVxTsXE1v7qVL
+lHBgOG3c+9+WCGduQjdrX9dvRbrTehsB4tl19XAhCc3FQKCwJdXDRDXh0NOwEpBd
+SFWFm3dh5rYa65Tubb7+uLUTU2RwvxfyfNgCtIuOsKaD7Muph9WjZnAUZbt5MiLI
+fU08gU9ynxlJ1Cl2xmLoK70++fMvc86OBopiNg9InnYteu4mPXQg35lTW3V7KAJ3
+9J548UGkoDP24pEKZ4XDRiS21WBXqvPRMPt75Q==
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID 11227AB228983289AD2E7EE6841321901EF592F6 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAip2ufBOXMTpWgAAAAACKjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMzMFoXDTI1MDIxNDIxNDMzMFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC0xMTIyN0FCMjI4OTgzMjg5QUQyRTdFRTY4NDEzMjE5MDFFRjU5
+MkY2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA8kc7oVR3WP/+EGi9
+D+TuDk5YrH6mHblI17eSelKDcPJi77Ry75asJ0weC/4n3CKsWlj6+sdNslcw3P3l
+qLZUiX9FMYM3RkARZ/F2mmDlw7brM6gGIa5m3T1rGXU6WNQqaoHsj5LRDnRXLTtF
+3zSwA4SUfnclNqhEJvmGkV74Mjjeedz1gHO1abhyWeiHiAcY8uGRCJ29G8yVkUgI
+HBC/HGTrYEKNGywubrT6dw22LrzGOwpKJyh5taffM5NC1oab4OvX2HlAgjC+dRG8
+GcSoD1W4yiGpPRJfoTHAD/3gMO8G0yxX3Ts4/Jy25CiUjDVbE0Lgwe96B3nkiaE/
+VxWl6ZW5tY6TMtHS3iL0rgpJr2tkeYeXy7GocYQCKWtIVqQ5S4hVVonDPwXy2+LY
+W5VDoZEujYN/pmU4XWqKboqATFbYR+ClgE177eWiGLVl5zGNnkjalNBq2qrbG3Pc
+Dw4o1mTQ8SmIxcDUy5heTtd3WOdGq3jG8Ylqrj7EnEs6xonSzfXRjSdfeNGh3VkM
+nQMfEGP5JDKbS1VGWjFrNaMiMXGe9b2729RHNRQYu8g77MR/4XwRzSaMghkal7Bq
+I2WmHr+xMaltZ+TO4gTjPw07D4IriRPoe/8+AU5U6gBtX1svqvlUHTbacn2X5s6A
+086kieEnAlz7wJC+iPgXlHkeHnsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMeKiqbiod9dz20y
+gev9sVNJnGIJMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAiLYecsRcFEx1UzBtpgcRyTJDf3ORxq8+FPWdfcDQscKh
+arWcU7fTlCXscHyGRRCMZyWeGsUEzuZVoBDL+4WHedACiA0tfyMVPGtKbdF6CirX
+/GgbxJ2jBB85C0g0apNxgqHiulmmEOYECSDaeDvjne8iXOFoL3Q+68eSQtZhSDrh
+w7TKWmtpFDH7uCQmicl1d1D+F6/+M5TmHrcBXFoyM5DZ19oKGSre7OpoHt5d/K22
+kJV6Tohm/YTZhARywE69akUGcQe9Ez66uKoEJCz/YCgcEc6+dzMqIOux5DBMIdmj
+lJW5I++ppFQyYAWpNDInT7fv2fh/0BU9OvoEgFCSgDNv7hy9x36bFkwvHcXVcPhq
+qjhMATp5mXcXhCFiwtA17B8z+PdMt1uIX2gOcXG23dJzhGYwatbeSMstiYdMrGmk
+jIbkV8ARXrnYD8gPtyx+xM5OW3bzzh3kTMBfYwYdNUmHAZosxe3eTGHumLytEiIF
+b0EoFGMr9zY9KVDS6JjHDPaQKyEBD7G5bB3V1+Q21ZJXZbpP3G5G7BBiEMyepw7R
+qavvxGWW13f6WOyL8aecdoGtbebr7I4Rk7j/vmYpcx9DZ+XT758EBuK+tYnvBaOO
+kvzaJryPCkFgxz1JYWPooxWTbhOu2VeOfWn5UABN8zdYkbQa8rSjegvsmjqch6Y=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID 128462F2A0D16CDE1946F1000544B055BC113D10 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAcNgQhpbR3xXcQAAAAABwzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkxM1oXDTI1MDEzMDE5MDkxM1owQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC0xMjg0NjJGMkEwRDE2Q0RFMTk0NkYxMDAwNTQ0QjA1NUJDMTEz
+RDEwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApvlOh/AEQf7Jl9Qn
+E2oirapvpksApPqbfdQX7KZeewqudvNyAJUHo7PMWOrUAro9cCl0G8cQZH1HEBs4
+uGqD92M2zJ9Yu3OWVlPV9e6phR7jzzA4UkvfTIz58NqCErlDBkLnNNdeqy9Ap3WX
+ZkKl27lPKmEVsPAJ80b26ziVSL+DsWs8jM30thgKCqsm+vsh1SyA4noj1m8Jb0Od
+7unzzf3d3T6JvmWeBDm7/b5/lzerq1qSPQFrMZYAedmAlx3omvDo1ZqhLnnGBnJd
+mEODFbwZrDwNJvGnFgxXpuUwBlVBzU1vcwmxUhs8KQ47ATFSC3Sx3UEhe8eT5WEE
+tLWOX7xRx/8HekMS+s6tyifEKy4tF8sHRpiVs/VRM56ufdkGYC6KE5XVB45JoLYs
+xDaYyV2DBIm5q4iCgHA+07ci3ZgG+A6x1OvuTWStFeojDY8tUwczkxDUSZASqNJU
+Ygh4c0hMt8IL5Z8ig166MJRROJWLPmJL9SobL5Xu+JXrQHCVl82Ccrm/udnU4zI/
+X4RH5xs6Sqn5uNyjRzBrYB7eZ5c0sYz9e2gPb3bVSMfPo3dJZzkVtl+z7Q/q9TBq
+I3MLYshCby3zsJMI2V2LQE7MPls7Uk13jcSWHvf1yGD+xNXmBZ88GnnYNi+XhpJd
+JMO1T8G0eSGpjB8/dMAufWleD9MCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDtGHKrO22sIwLAD
+5XVh9qMAhQ39MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEACP1D6HRrXmZtsaa9up4xHPWZXFhDi60jISZ7Ylqovgxl
+hO52rM6FJpedKJ2AXSzSrTyuutZWS1bHDHxm8X3jDMwPQKFd5o6opJ5mJkpUSDiT
+woBSNVwolnubXLoAU3DKx8DZfNDinMklMmRiz+3wpQOu5hHpO+RiMZLg3HlbX3Mi
+V+OibeBfCp4q5/8/DOnYM5KQrlwE46+lyPIJAN9DMheC1AHxkd2FWbyhYArEhk8w
+3o2//dp+vkVTaAC2VZjAPGtLmRsE/UJvTzAM6csCD7vBva2e0EfKzceR3cTQUwMf
+zI2SIOIdZnwsyKu00Bu6P5FxnBXxRDBlnnhIuz1Ib7roF6u05yVqlqGJiiceFBMV
+nGCHqlocv//uodoKamuDDU8LUks1GC/wveCuhw3y5OIpd004cbRPDoGTW7TmEWB0
+01ncFN+IU1XPM5rYH/qycjkSnoznJJwW/taVO29QvQAjNfbo1j3sKkJzQhQtwrCO
+1AG4LKoUe5VHVzbkkzUr4s/nrs2coQ2szUPm9mXQQBUrtYTm2p827yN4mrQeE0FZ
+07Dfo8ilCieo+AUtWOxgquP5OGeQd579MZoo9Pg/NiRk2RQhP/QVg+nK9/hwbcY2
+16rMhs6ImBRPFgdEwdFTKwPOeY0wXRBrlkVrA8f+OCeOyLMn05Mcydy5FetPgDQ=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID 1BD645FC1F90827C283E6CB526859FFAB0E0C62B 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAiHpBqkjgsLvNQAAAAACITANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMyNFoXDTI1MDIxNDIxNDMyNFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC0xQkQ2NDVGQzFGOTA4MjdDMjgzRTZDQjUyNjg1OUZGQUIwRTBD
+NjJCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAoFjp+IyVhdkcDiwN
+nc35YIeM2aGV2CjmJeCkuWofgg6dnurduU9LtBVrbkavRyAAm37bGnWGwqwSawWn
+KLrrAcQ1pTEH9OSDKSW8h8mr8HQYvk2TQMBXsulIDpdf53HMp3LclIoy9oAly//o
+GT3NImX0b8K05ahuzfDNjgHOrwfO+koOphkl8AGLQV3KIATJGoCpN5/Jwu+sbeP6
+5sUkmhNqKJ5ZXYlhlCx1clcka1CWD8j7tDosVoEO4bxhCRFBMyZ/253p0hq3havu
++y8GT1l6ezYCFjt5HyN0sssnZit5JEusRMHzrzLLUWIgYF5aioszaX30HlnTfp5i
+VWQIgIXW5fQWZNmLRCEYEYPuk8X/lpxA8cTGOyTO9FmttshcPe4hitwi8cMBm0Xh
+TuI1jkw7jZIwuwzJASaJbQaqjKMCCkQP3uxSnmZ1/FSwRc61x9QSDSk5jf46caOb
+JQgI7+RebcaKs6cNNg6jCyDOAI3RpGDPUC5aQx6SaIu/NM3mCKnJcjZuNHmIPMfL
+QZJ5WuBLRvu2sccFCo3otxu1k/qLZ9g91XzuY3qx2BcPFzA+jSrexPcpSedE6Rjc
+KhGU6yVzzgnqGhP3gcqEiQkR1fRetKdyIPdARqd0MofK61bxjOzoZJ7UW3ewEj/C
+WcnCYs5qK8P0o/rbRafmTAWgQL8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJEnOMDnmQurpg50
+U69aejpM5rYkMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEATNW02iu2/fmf9tECjZ2uL24Vo7oJjG8k4RrmZV6zwULa
+bKPsInqL+lyYWN5Ccv18aPZq7iWUp+CJOvjK3Mh+w48NnG/fk5DSBZFbI99XF2cX
+1dKINrF+DYHEM7z7183N/aGEym9L+VnK+SPV8n5HZn+VAkpZxkjWLUMeCP3ZL0sW
+03jv+vmuOMfMHPYKMu2GXnklYsbXUWlVysU+VEI6nFFthcWKJ/QWyzvkUypG3trj
+6ggbW9Lf14dETLMUkxx2HwiKbg76VHO/i1OsJEmknlrmawwEN7iWZx0y2jpQXncN
+VR0n/83KnsTdYVFH32AoS/PS536x3TlgCvcRrWl+lwX6f1N0mcneir+c3MNyt0Ds
+XRWSNhywCTPEqxo6qS/Ff+s4EjQp8G46gg28gXRQom8esU2erjaCo3r0+wo+Gc1l
+hbHBz6fDuTWpns7w5B4NGZujPv4M5ayU+ysvHWzKf9Y7WKBiHVwmO826P9ugOFMR
+YCE5ZThPzczBpW4oY4WiZnpvhuwOTseXUggy4bLQKBWyCKeYhiQwGn7MV1r/YZZ0
+nLsGLzSRDy88xP1qks83t6XqJRzjjfrJiWH3ejojpYvDDsW9aNJvnMXXK6aCoMSz
+lhuFtx+8GVJQRfDiiT5s+GJUEJC5ffJChS+t7izAK8rgYP6qC7zRhllmCbhDLkc=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID 1DDE0F406D122C3E5A4F861F94876C9E1ACDD37E 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAb2uiwYFoGvC6QAAAAABvTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkwOFoXDTI1MDEzMDE5MDkwOFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC0xRERFMEY0MDZEMTIyQzNFNUE0Rjg2MUY5NDg3NkM5RTFBQ0RE
+MzdFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAy5aPaOnaFCPdBRJE
+vkRNQtNJe5odMYOXQ0eL6kYtNN6Rng/URDzZvRPp6jN9I6fx54Kg+wmQftW+mAxH
+vQOGddZ+iaCZcKuOOhTEFf+l+8inxLUR+LAR9LLDvK1SYCndaT0YVVK951rYr/Qg
+xXJx1rsO8kgf163vbCKPw8sIQ2bhynCyrwNBT4BHfHwn+sljMR9joem2EBilcz7U
+dHx9jCHtlpd+UVbz/C2Whj2jeEWNS5bHXJ5sVWXecALEqt8C0a1IAKATTUear4BY
+RjvKOMSo2Cqt2ibmrbId1gjfm0fhjUf3SR1N5AJCmpmdHveNSwMmStMuOZ9OxObg
+9vjrLP4OUDPro4Yz0jymYGbPfG1JaEn6In7OJnAh9uD2B9RWzxprq4Bg/J8C1Ks6
+2fafTSCbGdEpGdiUWPo+ug2CrAgcWvYcPj9TNcbAeiCLbXj+5H3gddZpIjCXwjYk
+fPwW+kK8BL/X6p/LUqMYHW/FzfUVsGmWGASVq+Gbk8k78q0k0zNNqtWNCPyiHw97
+QT8wD/J3JyKFHLj2eL1KqRZWkfzn9cU2EMOXV88+XP66B/1A2qBI8kCZiFrRbyAk
+rd0Dcs5bF8XpghaWigJWpLv87xY+U4ZuOnLros/47QdEhcztdwbVu5WR26pqD66+
+qNBCKSh5hxy6WebHEJm7oB6jJ4UCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKJYFAEu6Zb5oA0I
+h76P/Dx2gcaDMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAG5nzFdzx9pbwSmCRroesluBhiGnYs3ZDs+FcOEc83U08
+0MrTrUS/JYIoa5vIgYbxUGLEvlcN6P1/sLyFg5Q8pF6rFnYOF2gPKZyw27xTH2J/
+QIJWMlcKF8SVeNzBrD6dAX4AqsIS8ZMbDvR3p/0BTGzdSnqOkvJnNShjfp5tfhbm
+2q3i5BzkX+lO4/5EofzCPRKaQ8x4LxqgEEnQkS+1sz+UamPbI3ryLMvczBerK9xy
+ppD1uTiOTJqvaEhF0A1jE7nqJm/0gqAuv4q3At4M2KtdcB9TjcbDvOLT2EHrBxYn
+UIlFpDIRgUl9u/YmDhK+DUtLfZ+Lfp9XUek5mFoeokr2oLU5YjKwX/p1uIaKau0k
+LteHkXwhKB35r7g6ImyWL818cLJK6socMA90u3eVQUQkqgqqol99mY6TCvtHueLG
+/6l6XYD+yaMnwWDe9y8KJNZbndC3lS+ahN/LCcHm/Xh6mn1hwXuCqFuWzu5EWfiE
+mEWS9NRtiodfNLkyyDoH0NNNgdG0kpIo1IL9WMLViuRNQ+LhaMaUdOMpLXB1xxRG
+vHBVIOfvWV8Tw4tIkVVp9TG17iWm9ANXT0mFWvsDjaEq+o5B5TLg0bBucCM81jXl
+6DA8dCSwuQkX2qoAwf49fs6DvBhL6VpSZR3N4MJAuACQqH/oIADpVv9IV3eu8aQ=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID 1FCDFB8ECE408675D963E5E5108D55C984DD797A 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAkj2ViSQW/0leAAAAAACSDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkyN1oXDTI1MDMyMTIwMjkyN1owQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC0xRkNERkI4RUNFNDA4Njc1RDk2M0U1RTUxMDhENTVDOTg0REQ3
+OTdBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6u2xB6faiUDrt3bH
+i1EWptqoRcX00O2GqLi0MTd4Kc9zQqp1ZxaLFb0DavJyK+mjNU9jvKFPqVMSGYQs
+XBBXmhbX6j9d59h8xzRMUPH4zjny45u5B5TnleFj4GT5jLfs8UZq7+FQis0j4Ooy
+foW80aXSb8FhxWcX8/fF0qJgHHRJOiFxn16SEeF0xIUfrNvcsDfEoiTliDc6G0yR
+f0nfrPJGjzH5gAwCFBfkNhDpXMCa3pKTA8MBsCla8ckFIHfTgQd/4ZG6LyuPKnCT
+SVWi1fg3rWpUgwBFjs0+i2XlyLiVbMrJaXKSrDcP8N72k1Ijbszcd4oNi4ilbL8M
+HEKVoire5Fj1Yr8Ks3+uvLCxImcBTx5STEU6jZ8owcPqcEaqWmCGmQ1dwHiYEd7v
+HBjN4PjkuR96xfTlCkqZ6M3n/wWlBZEcJmfCq+wUQTWS13rx5vsITRadJhm3+l0G
+VYRmfhVEoIvcF6cRqJRbUSJA2dL2Z2IrFTfC/P0qRbN7NTSsBd7uaJauLHImAlw0
+vZZ3UmATGwVmvICLxouPWkOYWul/HKjbcyxwz39kX9D5SzVYbLpj59zo7xuOUYZK
+8r/Bt1od/fV5PYo39eZNKVw6TD172W7FRGjPWn12KqkEI3sKuwCthc792hYCt6Ns
+lU71jlM1UeGjckxUevRVohgCYBkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCVPPx3dXP4HGJGz
+Z5LAIb4kAYz/MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAXdlg8mcknVqCGMKcVNPc69OOUarmsXg6AHV7qt6J/LLq
+WffGDqbIARJvt0DO3FNBiRqc7fZOzexRBFak0xNriooZ/v2PNCcOK/RWedJvE8ti
+R5Os2VHduFqvSboRW5aSagr08BaL0rV+IJTWeHZK57xXks720tcxgC9d7MRBKxms
+uqXtV8YO+D0FuS5BxL53q32a9ame+VctpzhvNVC9IIpEWESco0GxzWbUVO/hxQuQ
+wdzVfzJfjDRTmLMUg7cWSqcinxwNXaBvbqZyfDZMwj66lQ3xR4+OZf1KZ+fYVy0D
+8TcOsMkk0VJrToOEDkixRcMTQ9AkOsI5jmxssHRJmMwSwHKISkRzbtb7u2DWPQl+
+HoidCz8T2vVJx+BjmRjOeJLlK21EntD5X/MgBdLufVoBgjlDDHlyOW8jAKNFnsia
+fUabxdxbEL091CxJRcktyu6HDUUWWZXEiXl18d81ANiUZKO7VEe3TZpwcMQFIsHH
+Bb+N8O9gWy9E4uIwql2VdQqOipLmWbDgB17RpItGmsunshxfT1GxqEBQBULRrUv+
+ShmBXPm54wWfo68NHpKwtGE3pBs3FabyyGK9GMBnQ1/KkMgqqNVlPY5YyxQPxGYW
+lvQtWEHb2udsu/mWesepOBLZpXwJLenwq0311TPenIuahFhKVRBIBNxtwdXfGEo=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID 22BF9BF4978F4F45A4E9DBF729D8A08ADCA0A82C 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAcBUxQeXvFAGugAAAAABwDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkxMVoXDTI1MDEzMDE5MDkxMVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC0yMkJGOUJGNDk3OEY0RjQ1QTRFOURCRjcyOUQ4QTA4QURDQTBB
+ODJDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAkNJnQCWtlai3wVPu
+jUodNI2hbxrhWIH8I0a9nNtxfpmE64ifRIggih+WT8oJyZsrX5OudTUkF//7kvoi
+IvA4Qo53LjW28AMVKVTx5YKIjJ7jB3rBRWnEmZzwVZ3XJ9euo0jiQvLy4BUtf33X
+ui8P1DtO741q92CG2dd+xnzqNtLjr6uTxJAEg4Bi2q0NAcSpiGsImkSf2rxaG/Tz
+GR5Wx3g6aYehynYUMfi5m+mgFdnR/k0ZovM1umA3Y6ynCkmktEw71hINAhNUZDCf
+fh1jallGwMq66hUidRCaxmRLdXFhPcl1WLajSDzUiV1cDIn3AWZ5KnKr8GKOrwkT
+YTjLGxOLwtQesWqN1dTIXvBUfdxlwoGdtOTtlzIwXdqMLIF/f4OSCMsEOf3LZhda
+H2530qrtEAu6YbK31p3nBHqWl9kXNC1wjk3niRSQ8N6PObwX2yZOG+mKMJBr/n88
+3Petegw6NU/GJvSrFZxIIICv6iHoS2M3EV+7fyodPwbV2kDfdLUOmv1OAjSvsr7z
+zCxacyyfsgb32KhRPoD8GLffpTsqIXSIW7HREV8DDLNNAKLDsjP50vCM6v7rqnlT
+ZGCOjlH06EKfunCVe1RQIf3XPG1MI6nRQUsIuALZzMHdZdAtCTdGRI1Yctn9nhXB
+ilYD7cpZ9rCuywyNoV3WcFOLPksCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHuq67yA1sw0gTgy
+BOd97z2lyOh0MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEADMdqbOSeOs2G3dhU0EMoh33E4oU/l6Bt5Extfv4pw4xz
+z1W/+/BSvGjXGPOMh5YMS5FN3tgEdmDirG5n0FCi5MTLbQ9Bq0mir0yHY5fGeHev
+6I1WhmH+PaIt+muHTCSyDSwjWp2pdGy592rIY+ck0U4Oxdgb0+gAFjONe9hXtD5Y
+aIu7PyLOQazPolToiQs+OtZGEy7+nIIwm39/HZuStCxmUsn3Y3EdCGCuyqG5l9Ul
+jIjtxgG5s61bEziiHqHIrIzSgVUGRogMYovgoMD9tbrSrizN1bYz7r5edgqPOAIR
+PQgsScJMzwKQ8mHGZ2CGPeRcp0/RsG5Zq3b6QFXmEQBOTXvLnaSL4aJSsUq6+ZRT
+kPXOmlY7AUEqcrOTzyHgFhWTTG/UBQBm+Szy5uWR5Pg4CWGmcLNOHHAj94fdlOqI
+ovruFbgOaoh1O7nzHzIri3lGBRxWUk0hUuDxz3p5m+jTXOI8q7swL1oTAuHf98Xf
+BNOLu9+ON5BdfMa+KnmtosBFD7CjrxVk5DBh7tb/a0QnKI/b7lGOnCT6raMfbvr0
+CN/85VWD41mA61vEtq8+rVugamN81hOnIDYZMF8+6dFsKEMdrHbytHvax+LntjnU
+5UxQm3XiL2bvKbOmHilD/yQ+GH84LfaO8C+eMvnFoLaKTXZO7phJHvEwEa9098s=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID 265CF32470FC4D93C7022FA34AB4C8087948454B
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAWHMraUqvIwtdQAAAAABYTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDgxMTIwMjUyOVoXDTI5MTIzMTIwMjUyOVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC0yNjVDRjMyNDcwRkM0RDkzQzcwMjJGQTM0QUI0QzgwODc5NDg0
+NTRCMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzWsVw0kiY2FmguFW
+Fc1eJCmvWPdPgvcQNjsJKPVSIJMvNuDHFkh1ntcoPl0LObNvIM+AtBbG64bPLld+
+2LOttaNidMj3vmRpu5zKFpIDaIYIrhBmWpAgh7IgfzcnapVjI1NABN1z0PEzuMBn
+Mo4VZZtpht+9jeAASSvbZhLXeRd8zytx0X9OkasN8AZ22ejiSQQnCfQu1bPQIKEk
+I6qtIR518D8H9pPIvi0rxwPPlbgkNMum2xOedph0wssUXP85E/do6DNrJIwDlHdB
+GlN3ZXQ0aFPW4igXevXEF6Dy4zAJRQ1cev1oFjMIeHKzJ5ydvU6vdBrasfJXCRbD
+4XYYWwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUvj+Re68yxJ/hkycj3v1Lj9VW4pUwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCY91DX
+uOzt8ByEPqXW/MJvEN9oX6yPHTRvK0sZkBO70XtnR6BtZmCn5OGcK8K9WH8AJnFJ
+dwmEyC9iSJuNkNZVCaqxjFfmDzQ8IjaAH/ZxM7Z/JF4TRNfEI84j/vgR6vDYHBUa
+yuG5phUL0hU7cQkDiWxHp/a0zZry4jObq4tQ7rbJZTLxkxSseOE6vOndVir7nqEB
+UuHZdwH7TvmSxMOYoKLLLXpEQrlTI/XYvAYStNSRm0cprzVSkl7nmz5s23PSET34
+HP71C4vMr7sSYFPxkD2dW4nQYVIguiDWFwzoREKeCWbpFMGUH+5b/8NKqj3R8Vic
+YOwj08w3G2S1+hIUW7zsP4jfko3HqyBXvU91zOFYXWsGiGHnHOXcGvkIp75Y39ce
+4rhfWIkZw+Y/IFNpNWXPG48MhgS/NdtsdDJgNd94G8oQDbXgMPwrxs/4bD84H+y2
+7B36c/iBQSmwk410XuLCBp8x1Ja1VCBnuvW9pkfQnMwksGRwJE1iL9jbtRgG5gN4
+x4+DsGijccPeC6NprGFKcNMgbIOFdRmQssVIsxDGkXyjobpzIf/lR6zv8YI/zd3S
+YTwmBnQjORHF28R/xmArHJBz0ppdYG15k4s5Lwz9GICfoVo1gKP22i3ZyUNN2+1A
+DrMHOsWh6jzKO/H/LdBFRKVeJ9LMDh8xdbxfjw==
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID 265CF32470FC4D93C7022FA34AB4C8087948454B 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAii2xsZ5NZi2yQAAAAACKDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMyOVoXDTI1MDIxNDIxNDMyOVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC0yNjVDRjMyNDcwRkM0RDkzQzcwMjJGQTM0QUI0QzgwODc5NDg0
+NTRCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAx/yjQgGWenToHZmM
+BLfkVMbz/gw//2Oi881jpaRTqBVL8sYCPCziVJ39K4qAU69dymH42XhOIii/c7KA
++I4XSv0QLjZ5YkNQj/BHzutz6tTcVolVHdLHHuDjmJ+FRqnajm8mAVurLEAaDrL9
+YvE+DXFHon87hDDM/O8fZ68vkjB/iuE/DIOuZo2L8gTDrDXaIj0qTYDu3RzSfX9h
+h64CrAZiwNW9f3Sn5Kahk2CfMls5RY8BOpv6nccvWmjejMYQKTs/2WcjHI15//Uk
+o2KMVMbC02NRTN2r6MJVuLcSuvu6dNg+JM+F8nsJqW2QY7LW6Lnm+qZ0T2s36mQF
+p1n62NzC3K023nYwbvjyC8CeUXYngnYJxB4b1+2siKo7NlwuUtYJOme0ictglDjN
+z5fBFM/kt97/aAaWdizr8+W81NjFhMq2Q+SVsDr8R7ACXe1CQ3diuiaJcPXw6O8e
+6BKb2L2nlaJOCXakEQvOhMMDQNCnVDMeWSUo20RRa4S90//ovNpdMrso+KimYyTc
+Y18EDFsNwf5NU3bKvLqTyIRMWqHH+fdlENrcu5GeD493r8DrNBiiBaRMR3jTfkJv
+wzXDyOz74oVGzjrcjqBHQDcz/Umun9yGemLFIjy+WmcoGV8mzwWt24+gjRAdmCVt
+bxDVyfyohjyl2YzT4smQZFWiXhECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFK8Gi54eLqRi8yGv
+vnHo0jmuQN6TMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAkfT/vFSy7rGiPi5re+s0ziLs86vaI4g/1/eUuki4tmOa
+unCGjxWWb5ccsHMpEKeNKRX9a5MUpF0jVh1FOuZJsl/sZdboMSgMj2b7aILSwQAm
+ljZrmlzwicZuyuPZDef4WD27xEo/m2eOdjdk0iA8HlOYVwRYyOW0t3SlApZ8aDBs
+dC+11BngJLqcyuiWgkI5v8FaU+mj8QmEckwxUTJSNM5ftgAKfIhGjuTsHuELPGXo
+lNhQroUjmYrjA+YoZbCsvgx3Zcq627Thvv7KVwkwf/LxYDpBeF2vSZ118OsMsXng
+uYC6Uv8rzEubCHDAtE178darVhVigQMkQR1yXQ8ADMItJ9Wx9zYfL2tMRiDsIm8r
+PZvL6bx2AyCnO9D7tLbl+A1YHHBj6iWm5taxP8ayZlcu41eBZvdHoMFv62q5cUTc
+ACs1R3d5z53CNWTqXgJvWbpGmakh7YXtC62k9c0Q2t6IiswjUl4JtlghRYtBz/bv
+KvUVkU5v1Ni988bdX2dz+hJKx6onPi/0PHoaYWkvG+r6B+Tvz4xPk0D3OA7rF+/B
+x8VRQ46BWPHDFUjuLOQSBDgUBh+Tt2a2d8QKzq3aNg+3IxpTHcOgR0K5VP3ql89w
+/iQA7ej5Ksk0FjJH6VXZAPctOGFWVvPrbr5hjnQqYN6GRZtJJb7uaWAk3ngstB8=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID 2A4A698325A1B220464EF009B01892268B25F84F 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAe8Bi0/yZRroYwAAAAAB7zANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAzMVoXDTI1MDIwNjIxMzAzMVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC0yQTRBNjk4MzI1QTFCMjIwNDY0RUYwMDlCMDE4OTIyNjhCMjVG
+ODRGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsWjmHwGFb3JEdf5e
+1+Ut2CsavMC92HZz4dqUuUs+QaYTDo+USEnslmw5xOhRaH6WdHOTS1uXXLBLP0Xx
+1clWjAqvvPxQlNb3a2rny32lF2bXZaagEJhw5x7jXPrNt1lfC7qZAsVN8qmAstA8
+rG+K1Nv13bQNvLUcnxS7DqOVhv8B0rR+mMcnNPESFEtAmNg2tZPbTbLOGt1Trf+V
+9sVAmVtOJJZspgJtNarQiCoIzeDJ2q6vTOr3Vp2q2mtvAEHRxNUgO2CWjTmFrMKd
+itNlz8P58IL4+1fmdDkcHf0vKcEWjPMwaptoWBwy6jP4OEdwXn9yBRZORfoggjnk
+0sm/VUTW1WVEOjzaMm6bvPx7n2Ntv7Vbs2fGuX6rkFIqkEQFYzfHf6emFofg62Dw
+GAVMYRqfH7IOy7n0ksnngKLDyKASpp2mjEb16FwjVD3UGlYbBbFGZ1Tgw8xZluYu
+XtIYNXqxdbrI9h1ojmJf3CHRL2J7ie4M7m4Qxr+RvjhFQE2s3WXjiFNjp73wbJjX
+mijZAlC4p/Q7mvo99JYpWndpo9FvgpcdwtMzFpni4B5U5HGM37sXIyH30J3GSjHe
+MfoboP70OgiW8Nel/5IMwhCIQ4sOodhwo5TJ/04k6Pzv41CxxKkCEISv7Ym/B85T
+HRi9jjn4Qdnyn4D+I0pIMVocJMMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFC3woPGoInsQJj97
+tuKiY3i8MoSNMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAXDYiZ0dXxfHb7VxWEzF2XKGC2zd+F2RvvDDvO4m+uhXg
+k7TI2XLgmo92slFhXzhx/ioRig6g3MyWwaF1VsKvt3F+H9VtYh+9E0SXhQFzilZb
+F5zU5UZELj3gUQgJtLZPXUtnJGLQAI2lWLzq1IIiuLXngdQCqnR8skUaFeoUWF8K
+AVoq8VI+PnHhq/3SDjUm4BQhQEDpUItSITDpRhMtcZt486e6i62BokGqlx+vD8CA
+OQ1yxs2z+TF8+OW3LmpjnWaP0fxXca+xid0WqXs7Y4DZ1Sk6EOEw2CoIOnHL/6Wp
+KDtr2qXRjjytEaaVM4RafSYmN1ssrCYtF/0yZ/+iHr69fjbVF/8b+fILQ2mTU4io
+ZV68IWPSuj85NXZ1e+EmO/U9GWSjXSAQAOUEEpU+v3m2yqjKDFSJRUtPYUO0rpEX
+UzJ7ps6fpoE24PpVscAtBa+PaCnCl//6wXadvf1KW7mQIMYbsuvWOhddcwwm1Dnq
+HmTIlGfqlCExz+7TVssxvLfBF3In/BSgPCJLKh5KiOeZHcV2ixXDbrPS1hxUVdYF
+VfaJDGWBlmss0mIhkcNGYUE1wtvyp+6h3DOrvQYgz4BH3BAdrWLc3dRBP+lzvrNk
+Ap2xxqKrInSyP83TlBjAAxRvy5Uk22hcEDgsvrJZPRA8KwfonHabctCFUI4qIdE=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID 2AD70EB90962C541A55E2D15B85BFAD286154F0D 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAb7AhPYiZ/Sl8AAAAAABvjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkwOVoXDTI1MDEzMDE5MDkwOVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC0yQUQ3MEVCOTA5NjJDNTQxQTU1RTJEMTVCODVCRkFEMjg2MTU0
+RjBEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAkH3VtXXJAfsfy4Kn
+Bpqw7d1E+ORM1s6RpswLQOQDB6W2h1b+8/btf8tOG2NttI6kQ5Cp9GPV7a4fupFZ
+32VvuJs+mdlr0XAbx6NeCSTf6jWekPJ4odzMESAnYhxkybOiJjaeYi+3F5TlNtVt
++d4+hVnE1Wx30DeFAgViptK3JlpEB7qZFm4PgM+s5ej57YjYBGMRkNQ36JDfIOve
+9jQGxs9Nk0WcWRUQhou4ptUdwGn9EHuy2Lr6FrJb5fMv0Y/hFudhYMN3bhxp3mUd
+BgGSEJByFOyN8vdMt9jxyCxVFcV23MsRjV2vLdxZSILAEC6zVQqVF8YAeiHozw3E
+DaQ/tuQZJAVsyZ6WNmqzavAv35KxTXVTv18w/K6D2cQ5RJPWWoKizfOA8t22BZ2Q
+pGKyZcP70nbu/m6nHjtYPl49beFyTpfZNFe5DAJs2wLWreEVqCaIQHvF5Sr2X5nX
+sXkO72Ag/AG/W0ynPoR7lLLuhhtKtwfOhDZo7bANY1hK2hld6nAVvtAG+0RNPMkW
+iMZB+2RkVV/fnLjsJEK1Uh+INZUMSv7AE1A0ezDmAj3YR3nM8jOYeA+7TeVfCfH1
+CZCYsa23R85OxjNir1dqadpvWPVoZfQ7WvmVlO9I4oBp2S33ZPZI2sB3d1LL+pK3
+S6NNLQML+p/hGe/HpHtgbhaoIIECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFN9+mefVLWPIp/bD
+TqFmfUfWGOopMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAYyjDy2JmRpiu65GuMp+27FpbTg0nDemP03tSNEbwRiB+
+tPkUMgG7XKXbJp2AP+3eZ7QUZ1CwZe96v9aNXu7QzzT2D7Ah7iUtoGN9DQxb9R3P
+Gk5rctmd3cET66jt5seHSzBaVyQrz5WMFPeIIlnS207XL8FAQAbG5jnJu9qb13pw
+eiUfVXxOyF+acCQFmjwz5uRqO2yXVexWsr/zus77NbL9pw1LrOXU4OA/5GZyaTwL
+g1KqPz38YRCLzyitUELvYRN6+1h1pkRW2/qHRWywxiF4mgiSr5UmtghtdF/EzfWW
+qmH4f+e9Bveeb/5WNvx1kqYeWbH05rnBuZPUd924ViZY1w6vOeBTjTDsPUWkXzzD
+Yl40/Bvr6+vPeZgULLOuTw37wJy8Evbdq0sHO8XeVp+f+h+omXifG2YzIpiddM4z
+U0yyzuH+ENFLBVn90dkVO1C6pJiEpx6zO5cp6lUgRchBMV1qJ4uDyuNDMUfy5rSi
+XyFNI6DX0Xb+eFwPAYcsKkqvSAjRrxmDY7bPk72hPl+9I6fP1/PLPmQpyDErFh00
+6HsCNB3nNRfW2/T1ZHe517X6UAlXkyUeNFA8n0Mf9J31WTbJqXq/q1KJDQnQZTlP
+uT9Yp0gXIuuCbwmAU+S5ETjGrtaDSlj85YuBWXAhqyXyvxbpCBr2bRbkbwdotUw=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID 3735DDC8E300B817AEBE03503A92EDDFDF1AC71A 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAcKqOtLNsmiUsgAAAAABwjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkxMloXDTI1MDEzMDE5MDkxMlowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC0zNzM1RERDOEUzMDBCODE3QUVCRTAzNTAzQTkyRURERkRGMUFD
+NzFBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzbCD7k7V8uEQSjE/
+GDSwQxluR64FtTctk8OeWK9NNjZWiAxwRItm0e+ZuStJ4sloadVzLJwd8TJQ6iRp
+pCAOvx5nPGTMBe5cmMTis6qjqe+w8s/dKIR0xig7pg9i1SaRNeZ90t7XoEebo9L+
+uUP0DH0/wc1s00dw1X9XpKp7M9pUpfAZKfWiGFoAKkJvevpTbqCaiZ2yJFqs+Q6w
+f4Uskt4bFQ+dpr2y/luevttOmoohNBsK4Zw7Bv0zEc4IhWlhWb9S85pMxu14i7oS
+C5Z8wLya2gp33Zf/zuvN8+JUYh03gEb5AJVq9LbjxYQMADJAptCSHRJWJnI6nPrz
+ux0nURCQhWBGNAWyoeD6uaXj0WQdivv+GuCJefv3FXkeviPr8B+wRGTaeEmb0LuA
+1TnbLnJrKHoFcaXlKZ93Org/U7h7NlIF01M8mdqt2JvnINS0IstYGOsRXMJ4Kfgu
+JVAMX/CW/c0iNvdZJvJZy+fiVLwbHXVLwJZLpgLUeIM028h8kii7jAL3hrRes9ap
+umTTeZPjH/kHcD2ydPzcbQQmoGxKN78vlV52KbHIFriRxoGAdiNmzfDngonmQS2I
+I459btnc05jm/AlDg4VKfLG3A22JkwM/jdHivUWY58QY6IVC3OF9+cU66H47kf2J
+to/uXf4xILITs9V48rr2TvUJSzUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPJJWGLyKlVsPfA+
+oOl0w8+49km0MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAjykhN1exY7MjB3DvUhevnthSlYNAwHVw4r47m6Z/7USt
+/UecCoqNe7B65eJrcSQMIgCXOCRPpryqry49PJ5eqImZalwNZYdT+0YyatbM/URP
+88ksJ38asUIZDnGxQkDRp3VeBWCTnyv6VsELOqj5b3v8immrU1wwt/v9qe4ti5tM
+n3rTSmwtMQxwpxezJkJQMNWJq/XgstiJINpLfKEjiN/MPr/8B5msqWUEOy1uyxqO
+pnYMJ8TwIO/3UNEEGeGNcl2mwIhuy7MLpeLVcFgETXQ/0BP/cKAfR5cqKFuxC4Jp
+B4E4ZXQuxL6pvcYmtySi0pwjcLd4ZK7efvPyGATfd5r1GX3cU6He7soHc8nycMeb
+RMOamQUlPOwdeqj9J/ifrG2EBl45rrzK9z0/M1kikBmDdWRnduT1ez2ze5c3xmnB
+etPdoi3abDLc+XczYNUIqVDRelSqpOmJfARIqKiZkXokUvWh0TywHm0JjOE/25mt
+XJopQ3AHWnK9Y+3LdGUxsOiBazzjOjOkdP1LDAUMb1QZAvhHNFRQhLbcs1eihLWr
+2xiONaVU6J6B4ao+vqyAnB2t2zBMIzlm8G7olRUkQaEDRT4iEEBgU46EzvO1zLFd
+QTXl4gHveBnbaFJlvxdIsUhdWcsMim9452vid3a0XoCJUpIIrSZcUPTVDEdBtds=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID 3FE3E3E0383ECB899118188F4E2B9644DBD39A3C 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAiKPhhZJa0zfxQAAAAACIjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMyNFoXDTI1MDIxNDIxNDMyNFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC0zRkUzRTNFMDM4M0VDQjg5OTExODE4OEY0RTJCOTY0NERCRDM5
+QTNDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxgIOkt6d4FznVKJC
+5mMM0jvYRmp3flwZ3CeGxIFZW155LoQIafjEkjj4QEZcYSdUi7uHFSr6y+UcLYaK
++RLLHl6ItvDbNhO/ycj8Lb4tP1UnSITZrOyGmzwlRENDk/0u6lC8AYdXQtqvcYWd
+zqdR+8tU+97B3zuyDjXIBso3J+7x9UGMyrLV5jsb128sHsUR2coH6ojG5KbiErR6
+RoMaCHdstqxcgpsL0dxSBQYBxDgVWHjxjoTrJEL5yDffnZIqYoYdgZ//+K23WBC3
+iyhnXwR4VwqaAo0aX09D6xX79ZIrM57uEVobbHi0gqRQFT1NUdpkxBe4VIUb7CS3
+qpW7DEEeZ2L/8fMg7rTssodO2diCJSYkYh29Huc2Efn1vYGgPraNHghHXG8fG/Gs
+WySSqqbj3BKmG3UKl9t8o5qyzVs8WZMZ0WCzm/gGDZCYfGKYvCF3S+5PuqxQS7mo
+Pl8fO0VBLeMNKAOWJxEbSiGo0gq5GwEEm/yvZFZEQwZr+ElWh3fpnDtXkYaCz7f/
+yIQ0ThH9O29SCqTScz1NXHfRodtdU6dob326T8jy51Ol6u12NFCKGJDFtUWKYC5h
+rb6XKQpuvLOpDkEaH0xcdw1H8rA5ZwsdPWUZUPHdAt5aZc89SXEWrJGL5FBWCN0X
+6FIF0xgE5O6s2LXWhdqMU+FmdckCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHMqhk9V77llaJPC
+XtLMVasy6XoeMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAe/3SKmjnilM/uMmTHbsyV3+V336IxfG75kWpvVMQAGGl
+na6ziab0XwhaKslwtFWqRsjAvfsoVpK28oLO2lRm8/efCmCBZcP5vOFwuyMoOiYl
+SIUJhFT84QvPGv97qAjZSpZXe1szgIehBt4Zmfj0EYWmRIvgJmqadPNpErzsc7Oa
+NLuFGtWxygH1irxUlc4Txo/MGiDHSUTSDDqrYMPeodrmld2QFRxcilx66+4EOpeh
+ejqFiRWsC5CedmA/s2+M2fpyXRzeBBguU+mSORyhdoAVScLY0uXLHqq0Ci3bsm1v
+H0DFFBXr/rByfjvf/7J6YrjSH60SJqckMyr7PPVzi9TFMttYj0p4TS9dercFi9dN
+4TQJW7Fkdg4vdrMMdPS6ZZkQbb8hLpwPQg1i0vRmvD35RwSJEZ1WdUA/bZNG3IaR
+mVmWb9vhUbRw+fF9PDrC806ED/hHQScypVzbDwg2CMqSZXlZXyaxKk9TPIbVFQGt
+PaEDWMl1Dr83fbJp0DPnv9Gcx+ADkTqQAOw+oRoVeIC7nA6/qkgSjuuRsT6hYMac
+IwAFHMC4FcjOM01Ky1TTjrEzK6+Ln5pIE6NeZOuNt8PaWhbLgokvaf9xCH/pKraq
+yTuO6X2e+YdFP/D/pzG/rSNSQIpP9/yvSujZId9FXf+rM5aEHBMVWWKme+9IpDM=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID 4AC90CEE68D4B5729DE4357D2C475884F409B7A6 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAfDHblfnn3wwdQAAAAAB8DANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAzMloXDTI1MDIwNjIxMzAzMlowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC00QUM5MENFRTY4RDRCNTcyOURFNDM1N0QyQzQ3NTg4NEY0MDlC
+N0E2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAx42cPZMGWhs/vKzv
+lqRuwRgEOWXapEL69NunPCIx6u02JIl6yVWHRx+dL3kN4HmMZnG6Dk+I9lUfTtPa
+sbLQIp4CGM2/ai+TfxSkiGOe3z/34EFZF52O4uDPvUO2t7R0m+7Vw8i7lIaZBpQT
+0R9SFK1M0VGoF+ehXOp6rXk47EhxLJb/wphBEURWR/qK1aPcTzYz4oSmpHPLq2ow
+0QnDRwMfxLf+v3Dei54xq9oOMqSy0K8WNiI4qpkR7/rfy31jAnuCHnGcaBR14WQe
+0j4eXjT/HoxFlU40ks73UmklFjzaAHEshkNTPpj4cxva1jUZAqvZsMQ9CeuO4JSK
+sK80A/qgJS838LqMnIVp0tsW145tE3n8QPhsRao5jl6A19c9mrzv/5gPGEMrq7Ba
+BbOdhg+srm0/c/UZAgw4ybLgnhH2YN9xnglN2cSj7BbJ2rcfuwDK2Na8yaWKrmOw
+OI0USsSQsuUdFveJXgVY14e0Po1wzQ7wsbMBPiGW3HhCLfPIk3LpVQ2vIigVncxW
+QHoMrwEbgzK/G0Ud4vfZl2UQ/MqXtjnwcogdTXPBCNSOIJs2NyhAPjIBuFkT7/Mb
+p5XMbNsicKujF2ig81Uyk3U6VECXKjC4Pa5n4RQ9xPDMW16IbS3q94UtQnOq6Ajh
+WV37tL9wCVY0ynvZO2HaAUc7KTsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFC4y0aYbBM3BfOe1
+7hR4RVXjQkMAMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAkxc5kX1frvGH29mn8CJPrAz8h9pZ7Otz6ya8AxxNaqE/
+cvLKvuUCaP145P60dJ8jL87KWS6hstu0hmME6mLwN8KSj1rkmHyHMJUmXIHw0efO
+SNuanJ80ulDR9O57qG3Hh1bx/scA94CzTLkm5sDU0OqreLEvqboO5VqOHMt55TiM
+jZ2EUaeIpX5bV3WqDy+nDh3eKOvt4d00KfQ7LST45tC59KDVtG46z+Mt6VwKKP1F
+w7A+t51XMCKE1lYc98MdT6RySSRHLIr8Qm1YArcZo9pfZbt9AygoeK5QM9NPZDOm
+31O1eCsn0I1e3L+ZLBimB7iPL18GEORDai714qlf40yTvVskPlmZPIRHUVq5j/kQ
+a2+0XCbcnMo/88qRiQ/QnssBezkI56uiGucasNn8W2vHnqpDmTGG/KZc5m55e2ii
+Eei3AmgTUgDuuO4J5BeKCaMfziYEcEX9bZOs2zT5ZzHR0TbCSxFQ1AUbivNwMXAo
+YugMHpYk2Bi8pbhkM0TEPC3+/9UfVKsvbBL0nw6nJjE1KSWWZsJa8apUEQwlt2YG
+T1TBeobtNg8tQwYu3SvT3zH0TNNxbHS2iLt1UBCmYqxOACvg5DzPqR65yxb0QPp1
+xwHllmljiIBVIclGvqOyV/bPlkxoZ/lDsSU2aYS10JGnKvcOiqLRfjh3ygkiUE0=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID 6DED70AB841AE9C22A03647FC8D1482188D3DAE3 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAb//DDsdTa3NRAAAAAABvzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkxMFoXDTI1MDEzMDE5MDkxMFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC02REVENzBBQjg0MUFFOUMyMkEwMzY0N0ZDOEQxNDgyMTg4RDNE
+QUUzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlV4z+sVgWQQMKZFn
+j3naJ5Fb7ZzU3JdsYVpJC4TFGzP4G3etr/vqguPwmxAUMD7B32lx54h/2dQVWsAK
+HxwKDlZ9ZhKLykE3pOcyf8vTmCn5laOk6+0J639m2+D/rlmPPwgBTu9GmQ+7yRbz
+mtXgSfOyYcV85a+HlJsD4OgAlsWgMIihTdDNIG2rtvxIzQynqr5ly56Tu2mK+EpW
+FcWgIZWfXEXELd4H8Ej9M4Nb/Z5hURAljikVfzz77Z2RkvYV9BTxRqEV4VkNwAod
+hYIVJwmLjct5+XeFHB4msn56iSrvedhPkyoZnYaGgO1KOyeayuePFlz5+U2JedNZ
+bfoUev+6RBIzdaYMsiAX6oRLSKb/f7S5W1UIxswkgTu42ZVRmVdVOURbmu69mSPe
+QG6xa+TebRne5/KzYsnMXaXB2h2A1LBBZ3Ap+CFo8M3HRPGl03ylFThgrQwnbFKP
+lBdGdeyaPmQiVFtfiIrOh5DtESWE6luNN07nTBF+cRWXhjh0z84zpXeAyjZVKcCw
+pSYu/pgavJlrgMiVzauBCUz6QJTYGnJbTR96TQVFbeL8mbC41GqW/Mczp8RcQfTx
+Qgra1e3N9Ij84sxG8l1FlOUzxSN6PwvsiHBoQEe+PUTOJQjSuKu733BhGdJ1QerP
+6UvSP1by2vBIp2Y05NS1RFJR58cCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNWmt/QqsR0JLf7i
+VaPs5B8+3gdwMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAnViyRMRm49cWSrTtdIc3+62u2SXvB3T9mFqt2OMoTQQf
+YegEkOn2C2O/RoOBPbYwlRAf+6pGxkZi/gApwzzpjcU9T2zUudgPLCFBreB6hHKM
+JOyopCrrg4H5cK1kPVBFqRdFARJXPPHt4dUKbJAWR0qrafVfu1bq6HlNxseK5sFS
+43ekcn1t0UPnGa7EpflI6MamFzh5Wv0LkrzxCUrvKHfUsOaGIrIBbu8Vci8tklcR
+V7NO69053vPpfYCZqHrlQ4J5W35He9BVAS/ubHQyECRWfidkz40y/boYewyI2Azj
+HscRA5Xo+6+rmFtNuOJd0+IHVgK0hceZNQwerzuylxODO744xEeQs+sga4dKdtDg
+cbqnxsP4RF2MVZWEJ5TvUDsxc3O0KjpfblcZGL3fky2nNFyAMTy6fZg0KD/OYFf8
+sa61Tij3AsM4RW/QL0sI+1AyViv7P6CuwpH5BrIkSIafBBcdvtx5tb9YUOV5lm8N
+ZQHUfaBr/obh81OnGJOe5MSpZq2E51S4BL/NK/ZAojXfmNTjxFR9hJVg9K/MBI0X
+2qntxAAae8rs3wNOZqceVXXdhKZSU1V1rI/ydMzh5y15FzpXV0BlzSwfHrpGof2d
+7Kv3TCR58wFWuXgjP3v7M4fgEomP7Re7RYm9EdtcJfR+F65OYaV7GMfQ9M4mXq4=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID 73ABB81A0225456337F02B25BD39E658B90F00FF 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAiZAzVGio/SVEAAAAAACJjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMyN1oXDTI1MDIxNDIxNDMyN1owQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC03M0FCQjgxQTAyMjU0NTYzMzdGMDJCMjVCRDM5RTY1OEI5MEYw
+MEZGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtMKHEzdnQR64AkpD
+1+4k5LNKWbZsN4pXzGQ2SlFAuiVllsKD6N/6H8Zb4Y3VjYP6DgNkERorabFvs5tN
+eAARpUSP7owB7HcThANikbEJQSwheEP/auQyKYvn6/kx7sNlv4wA2j73Zu1x1uH5
+bdkrTJeUzTXQtqEG4d/Jmqdu8EZ3hAaaprZE52p4EllWthzC0X6wClC0ZcfOaRXg
+O/dIUI2ZKahDCxr1UJ0CdY+VS0PcVcKo+eVn08ajeSA6h/cAcW32ecTwxulrALMv
+oHEuzb8xcvxMR8orzNA91r2hg9ejDO4raC0yd3u/bhhEQUwYRtzbMxkKGleH8Yy2
+grrsX/U1NXP0B7PvTJVZcZbjG75nhQMB7kz/PvZ7UcQD3BdADBhcXE+MpoNIFSEE
+sm1PdEZTj0zVV2RU7DuKRXaPmRiTVigY9qVNBOPVrcxAfpE6lM/3WQnA5m7tTKqe
+/lybni96yIIKvzZfj3VmmolOXdwLqiRhzlN+IIziwwLvrKq1faPWXDOoxCLovhdc
+F7QhjXKVm0PWwXHzF8mSowALXHH3wkl4uEYeKi++EkoIGDVs1UFGyC08SiWw4/Nm
+A/7OyxisIYgx/2cMlyl7omrE5h0JzjskdNezCF1cOqbBYXm0N9vxWJhe1dTqbEyV
+h4q8UQdoFaPC0RAaC8T14StyjzMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEZYTfQGVgmhij8c
+XfQNbA8pVAEwMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAJdXZbZwoSoKcvYHTOWjigELIFUFyeGxCgFan94TLBFvi
+iQGDbTxGWE8CIxPJHuvLFbAqQV/58PvDsFGMjWBjrlRFURmVHC4mfq/4WRr1REv/
+v10IApUiA9t8lvqjOzIKpa9QGEBzP/KPcx6DkpnhR1PDfuSjNMNg4/7iTTXD2IIK
+9rTJJk/2ASViJzmRnWfYkzgsGIlTumaKxd643eLKEzCCBcmJfr/BRupJbfLvH6IQ
+XTNnY8NXj184iVw9us7EwSDOTWOA5GqBel8TqMgVAkm4OhhmS1Oah030NOFMMVCi
+yo/w+Zvo2jqkkUNXHJA6HLF6MaRyeIlqdDCQDK8N/2PUaPqCpEGjhzvgN5Imm9PU
+UhsycRdjiLmistzDq2VxxqyQtZGtBfC3FM8VE0OZfP25Uhnd57YBBzO7vliQdwr6
+oFkAGJFTjTmhAnY4oaeZybmU7fxBF7ZNJOATN0KfUtP0Fj649d38TlMtr++jBIkc
+WTT+oPR4Pii+8L41sdqxuC9qeBdol3SQ3hNd1GK07VutTmu+2eWS3cpByoeTnRYI
+gmGE9CsJbAXsslgd1vodNvQFgbXzxAJZo5p0YjIx5UfQCYjbnzmxp9T9Qv2qbcbI
+Mrg2mqzef6g9glnKl3eyjXHe3VyC8DhJPaN9SG8fXTTWVZy8/uMsFHsqqhoqhkE=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID 8E1F3B1E129D4ADED7631F5B4A2B75828AF28128 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAfI5wHyFXFnLvgAAAAAB8jANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAzM1oXDTI1MDIwNjIxMzAzM1owQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC04RTFGM0IxRTEyOUQ0QURFRDc2MzFGNUI0QTJCNzU4MjhBRjI4
+MTI4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzOJjkcakOG69w7S
+8bFoXlQi2OF73uimgSUwl5skAIfyWZYkNlq4hBIyusv0jf5ivPmjc3GhI4tBi1cm
+FvZqXFV+88lZbd+2NoyPeOrqHUYUJCbzU3pyaxWQ84zv8QFQ3vjpc5+N2USWj6O9
+2vxno+xTrSmUiBP/G+duQdMd8MDubvpaO/Hk7MFz9+zK3K4/ogOruLqBSOzeoCav
+K1msngTNr7XIPFJqJefvZEv4a45QlR+oqWnNm4rGXu2/z0Q6H1k4JIIxxIN+MT7e
+RalG6uDQ0OulEaBI3u1+ILWcSh91OzfnxA++K23nixSFZQjdL79UTaVJI6/E/w/m
+cpAIwjil9yCF0+EJ46RGixRMhrTLjAkpD15IXazP09x8dVJpvoqHH+lPyBz/ogq1
+SxZ0IE6R+neuYe9w0sG+DP6eB4Hr5Q1Zjm4vIWfRo1bnXmlfVxe68PnSPvcidx0z
+7ruRGoYN/zp7IQge+JR8yhDxV6YnWrdwpRW7fG5x0dpaWAmny3U33avG6exCH1gw
+ktgHcbR5ia54NkwjQ5uo9RFe7pMzttUB/dG8dGMnnCaTu4V+ABguLakeUEZf4Khh
+QYDSOFgajb9vKZL0TYUSYEJ8Beut70rM+9ZX71FKmdemTqFdr5t2n0Hel8LhotxV
+G8DYdWyd9QkKzcVuF3z6vK3utY0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAXRSYQZHiDZBPfW
+VmlBSDOHb7IoMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAFKCJUKArEkEMoMKt3t+dxvAtWyNnP8aK5i3uw8VwUd70
+aACp2fmiD1lvYiYASwp3YS41ZsH12sUPPgy9sGNdbxtUNCXZbkyhLw1frI3c2VwY
+ofPP1ueAbBE9cHAA9un817nk9CHLjHNKUbRb8KWMdCmBQgOk25Ck3OttRk/kJ1LV
+erSaPEEB+V7XFJ1lo2/cLIW6+9vWMXp3nF/Ucy82Cga9QgCbQkgns4rxFeDg8/HS
+oodYt8Hoa2LMrn1Dae09tqLv3CgQF7ORM3hmosUKbDJpV13Aqzz8fIo+Dx6GJyYm
+mg+qM1sHRg+LIgaD7d7qiHmAuKR7hiuqehCN7wogbLAVhIZ5Hat2lohO4mfn+JAj
+u0Q56XgZsyh7+3fPtoXRTmDIc3Sg2d3AecO5fff9taH42WiGfDLi0/cy+QyZv2wt
+LdKp1D/tyU6ckK6rK1aX7oYtaOEWcG6Ce2epmYEETimapOweB706iYCCRFOZwsox
+cnxyfWY6QDLmOjx8lY3Yi/ECmjnBqBSq++vkN2dOF3MnzDcRpkmIWp/P1boMt+Oh
+R+2mJM6Vz+rvPwmGpXhAmYJjMT/XzWM4enJzD4SqIt3UYfKAZUr0KwRbrDtYwAlF
+8fbXXZRW1/o2JiznBuo+j++lEbOwC+Cy1HoppiTikR9nGmBsz3k/ce0SrdrZk8E=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID 9532153BAA9D74482D275B1A3E475309D3CFE507 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAiyFiU/kZcMBiQAAAAACLDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMzMloXDTI1MDIxNDIxNDMzMlowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC05NTMyMTUzQkFBOUQ3NDQ4MkQyNzVCMUEzRTQ3NTMwOUQzQ0ZF
+NTA3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnACWioM+WxkcsHEZ
+UdWz18Zv6LAtuJ/OkMxAweNT9SJkjTv69PHvGIcpgPBXww61+0fBMRSK86D0N1WF
+MpMPXz/KIB+smxdkou8R1Ntfb0377NHExwPc/S88P9voddpzebAEyp/CfXGXLG4u
+P3eiPwfbx69Ljxl2sEzLzbyPopNelFW1PJrwDOk+cZQZ4chCuvYReEFALcfPLokB
+/ZwJjDBR87xIL3TeZH5lpRazRFGCbEYIjBvh6Ml56EQ81dsr3ZXIZI4OETWGDBds
+6GVwiAhErx/t9gx8bzlZa2rdSaBDZykEnzCZA9+TOzpmHW2TQJFoTDEOI8BSnykZ
+9oUXLDJPMIKPv6Dz54RROyq8/DF385KDPM0FO8fV7Tc0hp+WQ6KnPsmYzwYld4LY
+rbBvQGCQOH1gphR9WkmviFKBuG5DHwlIljNCrxXAEvShYw5aFHmVO706k/nRrM+v
+twwrgNuP9wgYIPduSmYF3pHX/KWZWfQWiJGxdj4On6WUgEY7vHjYNzi7fW2Y6rKr
+9dQ4M82DIkuNGRCjIwJMWvMxtKrNpopFF+MtDRxP4L4Z//U5GB1ddj7Pe4n4ReM+
++Me3yvqZrKlgzebkEvZYdKewn+lAF2PU/xajVU4s+gtlR64RbHvg/kbdwd+g5npI
+9f8IA3Xxkv6lREYLv432QNbpkP8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKlyh/aJYynf1Nr4
+AtuBOqMMkIJMMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAB1iQy9kRB5jjC9dRHNkmCBp3+JE/iGRyGwxAKURkgal/
+15f4yhFEhe53gvmypZimsyMxjX/UKxQavHI/WNivd9nxv5+fASvDxJpHcUWJePkP
+ZxXleaflthwKNt3qg6cylGB9d9srHR8vPpZ+yMix4h5oP/OoMOQwoPhMwAdpmRve
++gQwgjiiZW9q/dTyfOD1zpHEToblP3jx9fSQUGav1M42wsT3ooxwbRYKJosh1Txt
+bqTRlck9zSEHClEs/1iL8KnLAAqkRpHiIX+RKpJHTnhSBM8GYA1QAFCteLRDiaxW
+mVTUZuflpEbwKhhWJ0y7HWdAerIRKgdHlj/w0jrMttDa4jwO8tu5jrpYIj2bvmI7
+GbfGSo84F1t/+DChJYi0lGTO68EANk7vPdTxHHxo1XXq7B2JOfyNPaHrTRS8nnSr
+NQnMhMaIpSyC9lLsqWSMpiCjwc5tvj5TxJE1BB89SrP7wEdLHhizZ/Q/YnKheSrm
+0m358EDiG9VI9msoiO/RcILZD7AVpH9ilH8j6QDdyl5ev9MsILb+ap+LLobHwcH9
+TIzMIaRLdYfhNWLcSyfp2bc0wxedmV6P3x7z80srv89Ri/52xbt7KLFl9jpKABr0
+gniDGH3e2bncbgqLaTuGUOhXvXdlH6bl1/03EH9GAWQwalGrJIz49Ng18wE7GDQ=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID 97E5D1CD8B0497C04B4655A869C8F30EFA89388D 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAkvDCLzrOQVfXAAAAAACSzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkyOVoXDTI1MDMyMTIwMjkyOVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC05N0U1RDFDRDhCMDQ5N0MwNEI0NjU1QTg2OUM4RjMwRUZBODkz
+ODhEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsE34NWb/TMEUwcK1
+Y5nlkXLuMkXzU58wAgOBD5HAOx/CjGS6n1hQVQzeovEHl/s43KhhQ8YdHqYx113j
+vnstmF/NFjAxH/A1LMPKm4C5ntEqHHDwCfzaZligoO4qGmszNersyD6Ap9LvAoFo
+mGZl8UZoYSBIezBw4Ohvz5shBwti7kA6h1SyWDyjU+PIoz3xbuSDbyU8iNqoA/CK
+oaPy40hESBFg744HVYGBc1AH7tl4jOf0jehynOQr/sKkFAmk7vD3UePJAeyi2+Jb
+bXLUfoHfC2z5hiubXZAoofgiT+sYj6Km1Bf9sYD32Gh/2FN1kpwudQyzxy5x0LLr
+QmAtbr5QE/6XepmF8J2KXZKrJTct5Fwp0GlRrAmWyC+w158DersQPA5YOeMHNmYT
+C71Rvt3aJ8+WKwojvuLBnk2icOfYL6vxseZlKphditT9gTx/tCFXPBtrT0fGpRUr
+4W2dwZj+paxTfefXyWtdbVIm6VLqvInC56dh87YhkTiFq1LW/4VE+U0DksKkoCoF
+BQo5jp45XEJeUg5zUzBbYm2harIRwrYHWyg8p92ZwWwvEwGbGHnBZriO+G7jS4km
+vVSq4/bB6zCCJ5/6LucfN7K0jmARmg5RcCPochXgZCXE/bKwSxtqjQAZValtcRiI
+G4wDB8s/FC6A7A/rcO8SF/ZtgkkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDDkR0nTqAevTfRN
+eIyN7ng4T6C0MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEARvDIm1h4PYOTvrzgXoQ9taRWNWLKGvBo6GU9ou1GkNTn
+eez4S97BIMDzIw9DOJOSJZVZE/YB5bRdcc8DOoofmRhHeQ9cf2bghvTc2fElbSYr
+Nlscxs/w7hk4H/7kV3/5zQ4XdHijKQAND8D786PPH5Ad0eFBgf+tkf1Ak5+/CqlC
+usHQSeWQHe4M1p7wtuIh8U1o4Lk7eqwErh/fgmFtszKep0gBC2D+XmYCYWt+A5jE
+5MoF+umKdmrCHv4/JN7sKOrf9bUPCCK8fr+FhPloi1hOHbI7cliSCZinl+vq6ZHn
+bd94GlMNMNnmBPgObHq4ZCGwCzWGxEua4nLpkzYroEluMldGc9jcESjyw5vAmKs1
+C4jXNjx2xx8j1FK5w0brvCSKjlP7DkyP2dCNhWFUFxtVS2dlOFifK78Kt17gS6S7
+Jlpcwn+jLTCc7E7ErsFKS26VKGccVvqZ1+iu14gPzdQk6PPxvPYhTxEHmQkgWe82
+sw41WxC6YLi4u2p2DcUR6Ad26lfwi63hOOQ4wTYWwzjdYgKGD3g5keoVYC/i5Uv+
+CmNiOLLx1Zw6kiZXAklD++zPn1E5JQXGrmDqnuwFAX6mNbaIjrhDlSy2Xg7TVGZJ
+qC70uNamLksg6umnzTu4b/oCUg6flo+pqfnWW0q089e4soO8VGGWr6LIuuORqnI=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID 9A643BC48007E0824798430036B658419B70C077
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAWBHOZt2t7ZOqgAAAAABYDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDgxMTIwMjUyOVoXDTI5MTIzMTIwMjUyOVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC05QTY0M0JDNDgwMDdFMDgyNDc5ODQzMDAzNkI2NTg0MTlCNzBD
+MDc3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArBAnstCNkbE5mx1B
+20b5RvBAYOOtNWtFMHFwB9Iiz96MArb17VEvaMYubPn2hC4WIs0aJua/ODjFsapJ
+304XihPICKvBLgR5yarUJm5zO63926GF11Yu0GyhjXbhom9WUADrgV6Sq0xS7AKE
+ebxsGC5k8FRisPnNS/jBvf6VEhs5KMGfOahfORUi7+e2AaXt2MxV2rP2p1eFFumJ
+RaNA1mEJ6K1NvoobDK8FdXHvROBT2yU8H9ZNKlgVCdZWFa0icpMOnJZAU8SAPnnb
+WnS0H9fxOTvdlj8pe25YnGZRvQ8PwxRlkCU3TinrMcFygMzomgoVMQA3fKCVBkbj
+G7lkdwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUjFOc94mE1Zi5D/sCmARRevS0VuowHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA98OIE
+YvBUYVn5fhulFNrfbwwsctC3qjLBP/tRbeKPkZHmGyTcSoiLZlohpHeDn1nkvHH/
+gquGZpipste1lalVsf+HhBUI64jN4ySUApxIk3eFYtCsjQorQ0zupWzARDI/Pzrl
+VNx5pzpzbSgpI11qCYCxWUoRSV4YiazZmzVTIIWK2n50dJ8l2GBuih7laN3kihpA
+CIsmgG5iLmX+4tvRC76gUfhBvhkclmsGVf83DmVgbw/DRc/9Q8rbyNro0qne6hXQ
+kHS/tFne/H+z833Ypv4od6nCl7qFRFRL4SHr7lF7DWP6bR8nlifcEaoDxE5xp9Nm
+eWBeUkzmZ+BMnfw4WeU6L+/0BSbojS/2YYn3/1xvyZ7RXt5PmUFTK/NivNy/qGqZ
+el2YFRPHif1jn5nq75SvEcGd6OkCMybKXGK6UO/YGDg2cg7J3IAX6i4/G9fJQXkJ
+B5h/wAJFTFG/gQCW/CL1HZ4wzzT2TN/c6mut/fNHWbQvHSHJaImEgVgeuJAHXuW4
+KA0YEDRT1WtrfAXuruY7ZDzwXlu6vM7X9oVTLhbWxQiYCfFw2NWY8vTYWC1osfev
+AUIX1zQ9pPPwGw/DBPuhmkged3TbdvXv+XUMejjUl+4oQYEYuzZwtI7nOpe5lp2i
+REAmAisWY/OKMlC3MIiGzMGKWxUM0jwMPXZzOQ==
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID 9A643BC48007E0824798430036B658419B70C077 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAiX+rIyU6r+dKAAAAAACJTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMyN1oXDTI1MDIxNDIxNDMyN1owQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC05QTY0M0JDNDgwMDdFMDgyNDc5ODQzMDAzNkI2NTg0MTlCNzBD
+MDc3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApLwx+d0ftgNX9qsG
+i6l//XRxlfS4k2V9cQFn8zCBHdj9RT72q+KdXyTojNNTXiPf9hSqpuaP1g7phhj+
+pXEpu4m0nDI1mXNno3tPXowFzlbQE2vmPAtpnEBdDHBJbJtiDwS3zgzqZfTuCg1r
+eWV1mdomu6+ublinFQipPyhFre4Ocp6XroOgWj/jbL/NI/KHo5+6wVK8Cp/bcgX5
+8h2yjuTsJQBNaeCY9TABrhiGKnwccGiXWj/VxWjLqnlqdR+7n4LjDy84SQ3ybERV
+UOP3lxXCL8s0LvPR/fTD2Fh2GNE9jTpHvpJO2Uq4kFFolfyzHgHZwO5NtZNSU2+d
+cLHkjk6NILsfIsPMxq7fO9ieeuekwWDj4P+Ju0VQDN2AM16mQFo8whMnV0FDqeW6
+V+0D05afu3QEyapKBrE0G6AuX5ahJd1VLhWix+BCFsgqU2+d30nM5raKtAUMwxNI
+NwIUoSP40wmYJS7gN4qTr+O07tiGwJjp19LGxPIFl2HvwBrOQ9mM6tERRpeXHSzN
+Xgt3UqyetF2k3KtiZ9Eh9ygaTvxlaNoy2ztr9CJ7uxa8+B6Too7f+grfAUTDev1t
+NPZme6PbuBfK605jwhS5c2wT6GzWlZ2B1Z+SgggVQ/fgwQAw5SbJoPOukib4fU25
+ApYvRqTHMoDgvJLMa8VgcY9+iXECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJ7M8BW0UYDDZt+m
+q88vxVPmY3myMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAW5UHTMBNIBMB9EUnmNY7Wa68i8vpyaGGhX5bxsCGhnP9
+p2rAfqT9Gydrf6dUXUi42jpUpJSRt0XvgAZD4iS3qmpIc+QJaB09tY02LCT9SVNJ
+EeYpgAAVq3btxqS69NFn6UY/Vw2AygjXqByZQR+a6NforSqlPDeFh5N7tYWGY8gZ
+YPsnZOXVbogHPgsLwD5mMySpgl6oWMUQwPrKkAUSUBuNvRBTSjCpPi1yj3CoZcSq
+UFTINfbK5qVGfw6j3j/JJfHaVDz2Dx1Oe9WNGVupkQm6w8GSpxz9WvyVL1uurzrd
+EOpzVbjaY3KZ5SzpRRRZJmfd5xBWGZgGTk1wDVvVBENw2oEjzUH4W9PPAYUmpi6k
+Lw6e2wKiBvYakhekAyClBYaYCC/EUcTC+ijgAEW9vDJ/SUz9HJCxR56r0ZPYoSAt
+nwAeliMzTvEGs/hrGBQ+6cWE/avDrfF0VoppLz8npl0EPZXV2MwkLyC+EdK93frN
+gGRQ/zSVfqDSQrlbOZTv2dXM7LtqrX/HrfX35Hi+zIzzUc4TldPnVdW53eU25IZQ
+LEifGRBa4s5wYGbBmIrKLgELZv0uFRH21RVJPDrZFTY1HZ+3D8gds0/19FClHAU8
+zlGqE9iZMWqBLtoNkPO7PBWAsGDxy/F6biO1nWPRwWUKFJsmmRL26A795KBvtro=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID A4384BEE3966533539CD0A736D1DD2C213538DBE 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAcWL4tnoXfjHbwAAAAABxTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkxNFoXDTI1MDEzMDE5MDkxNFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC1BNDM4NEJFRTM5NjY1MzM1MzlDRDBBNzM2RDFERDJDMjEzNTM4
+REJFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvnRLTsWlaMDcMxxM
+w4diMNBjrTCDL5Vv37fckhGznnw9eXwlRRfo+jZMHhbUqgPRLgrbTJY6TdUVTKDv
+X/1Sf899sRYnc5c+sDE1NMAAXSpDxKvTIsphWlVrMlRZp0uaMT0aSAAdCG0KotgT
+Q5aWdI71qo1qy0XIGcaIZQ0OucAgQFP8VHoSUPuIKvXxm1SJ2yaUFNBUiv7cqt/W
+DNZVgXdGTu8ooSLsZYE7MOVGZCKOa/HAuITIfydSlnktl29IsTa00C6pRSCyzjXw
+o/21+BfDmOsTI5k/K4I/rkPA+T+5Ut8V72b4DSNVIKhLcKmiGhfCnikcMO5zw6xj
+jIj36nn+eImCNS5zVW3+CFFJAopG5NYfocA4jVLCvMuMZKIn7ul931mkZBSkWmxn
+KrIog2f223VfQ4lGEUTJLwpuoxiT3Ufu4BYbWLBaJTjG3/F8ENVdtgJGggs8tZl/
+xuuY1VD2gULVuj5Yp7gAtd8++YXnRiPazvEE5YWA6ztymklVDCoHF4LBIRSbRFV9
+Umvtc1gmFJUTyk0uZvTakHEERi1w58QFYwqvpRzEcOfe06VGfgSxFVpbX2WooVwD
+UXUQ9km113449uGQDlvnXaMUBe8QSwfRikds8ASgmnjJIwgEIfBNBf+KGv4tMvM/
+XGAkCVA2h+umLKJ2GIAFbZO/UP8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMw0ujhUut37/vUN
+DIDA4dhKZS1aMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAmalBI511Xt1IpwsO7sR09pitnpJ96Bo9FSC6F3srVnco
+pOIkrLmZdtXHGpdu9EDoyQtRuNtH7Ih1y4QFG0v0AsWjCZADv/zjzhTikzD81FyY
+6THTIYa73upl3KsEKdPSxLLqv8MX5Hvvs643y4BHQ5/VKylitnPM2D/6b74fK52L
+8kkfeN9qHa0UzwoQG2uuRnh9RTruxsvxVnXUIkNnOrifB0IlDkzvsICx0bxfWIzs
+AEvvBOdMDLQe+mow7xlaZPwGMDtm5ul3sd0CETfnEf7Lx1RGZDdgYnEeTT0KED+R
+Pp95f2hxOEcjvpY2dz22DeY+NxnyzUIsA8TWW2dY3kpSYkYEMHS/iBp7aRzQXIIc
+M3tbq4CJgS/3KoTZ+qPZO5dI9L/9DUNSD0Z2Zt7jfqH/UdmeppdBA4RqM/1qwdjG
+DsCBQcDpCy2xWHXXlx9UBguoVf+J+w9+xVYFKFNpvesYzpfgFmoSrCZGTaUpV5U4
+bT8GG6zayFnFVOGm4kus6AiGhz4//oNBPoRk5ndwcpfglx1U3FVFncQxH81J+mqA
+uhnzLHTDuvOIosZpL+yaiVyWFxc7TJIfTMrDqY/BbRX22aH7xs0iU1iPvUX7tJoO
+PdRHDs5XTFrQmNkZRTW2sFruxVD5VDJ7DVu8qv65sTYmUEKZ/LReTbOOGyDKOmg=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID A4D18726364EA2E3B278464CDC7FAD968E015D4B 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAcSzImw9Xze1RwAAAAABxDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkxNFoXDTI1MDEzMDE5MDkxNFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC1BNEQxODcyNjM2NEVBMkUzQjI3ODQ2NENEQzdGQUQ5NjhFMDE1
+RDRCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwv2KWljw2531GWl4
+y+AbT9pMaEjeAnmqLcIA0/K2nrv/fYZ9OS9mY4KvP9mQtEjaSYg4lpBInKKkE4la
+IVjKIe0ZFio/vUB2nd92pKSLnzyq8HuCcFzkib3JEDTPTQ/0xOox04HJQG1cWOTr
+JjgDziVXrG9h0bSk5BH2BLboFSIy/ylM48mhE1/ArQlvlIZIlsx+pwJvMRQx2UZU
+xw96aBOqJj5wa9xmoT/Oh1JLZIirrVfL8natb5GPChoEzypknOUSru8ZHLAC5aI9
+hlY5xc7Ksv3UQWVHlXfdkjZzBAv7yATABvANcxmkrr4AbqIdu1o4ez+QieahkigT
+sDtIugWI/xiMy6e9WNDHpuTwPd3zFhvXLeBXounTJVZhoEjFXPrnwN7cP2vx/6zw
+EQ2e1Kh0uzOkjK9afz0vg2ce5hXrdbRAW8CTMhj+ggmeU/mPiy89fpGXQrUBbLmo
+gmcSoXrfX65vUuqpsEzXvEv1A1+szSfIkz/LaA0UUhUYSIkb9VPqi/bcD0iXBIvt
+g+1HqeC8sPtSHm0Eg+8HXqtSi8Noh4Tno02UA407M8+ic86ABBD04D7pHpDGwsUu
+05isU20/aXnFV7SBICn/2E1J24571UFfpO94A1GdUkk6L1t1bsxS6QfBxv4aMXT8
+pVmCq8ZVM4xw5QX4XsnKY482Es0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLKHqjYzghOPyyg+
+6A3jajMlEDbSMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAnV5iS8oT05StLjuAJmKSAZ0i7X3aS2vv4wzTFczKncU5
+be6cR9/Lp8MxZpzAOMUBqqaudXfYsDi8N7HXaaBQudEFCQr3fuGEvh1QjSP2x5l7
+1QMcCtlXUfTZl16O+y+OnqM/EPwWZTDC0KTie9Nbw6TVwYjH09h4O+OE3sIOsa0w
+GX2Gi91/iqjSvsPx9OVr+HHyohBaAKTgaL/qgmNuqdo9jJkXYf+cZYihsoxUI6b9
+V1Nw/LOlArQgcIssr4oI+OUsV42m5P7c04Emn6kAbhxwfWNfG3LhNSxy3mfHWUH/
+dRF55Wnd7t2Dq1x4zG29ko2nTMZURZ52cT2gbiyqaobnNhVNkGuLJZoxFE/oDHtk
+7Vgz0VY78dtwSVrEMBc73352CmKwo4luSKz4Wz1MDAoNenLhKtqxYlTBTS82uH5N
+BS//tDAUaow0wZOaNZHS6e2rYKeCLJpTsuI/OeOS4l4plGPTx12BppYoVWGvq8D/
+VNDXXN/tSt9to+oCcbou+IJDMYC8cYlXEd8dQE9gtwZBgMlN420Fi+Wu5Ps0KF3X
+IWXyfAT2jufjR1bGWOd8C8rOf+nFN1ktvbbyIg50FObt6e22hxsbZcX2aSIvlIZG
+MuDeYlDDFhlaycWDeaZ0Wd/NSZPO6W6LvKrktRvGV45diYGtgknH4psG77qJHi0=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID B02981157B6D7CC3210016380B898950524350E6 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAcfBIpiWu8SLkQAAAAABxzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkxNloXDTI1MDEzMDE5MDkxNlowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC1CMDI5ODExNTdCNkQ3Q0MzMjEwMDE2MzgwQjg5ODk1MDUyNDM1
+MEU2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAm1duihpHvjo0O+9v
+vQn4/M6vnhbIfhBbJ85IggC1b2hQLQiqiHaKEpUDT1kxcO6mTFACcTgOmTcrpY7D
+m7M/wjq00e56eukRpM9KnD4efTwOkC0fp0V3NfGN/cATPPzJmXzFCe0JY4T8qudj
+2CdNC35sp5qY1X1A/vgi0ldxHnNaiwEOT/HEQzdeF9+6MqJr6Lj9KBxe7NbEIbsw
+oAuZjZDMe2V5EL5Wy5JzBEYF4DClMM99SXYTdOj7gm5X1wU8mUz37aULznvt/EkU
+kW3hwNVnqY60Q3D1mb3l9+I0pY0/TRc96P1Tg4D8OFVDhb8Ra//3Cm0DzTzAbabF
+v70rSehoh5UBWpbhu3hpgUfnyMVtLZCpKvjKcZaeVMCIIOEeXagACRz4pteu/tMT
+bwuk1NXW+yb1VzAneaKz80CYU6Q05f0e04Kh2KNzAuvfFbT5EoXK49TJH+F3lYbe
+yBRYIJ8QUZJthhCeD8Qj9fvZIV6vtzCcEhtktLbb9jpbz22Vocg9pVRLyOrYMi/K
+vO0AeYW5lT1lgAo8Z8zSUirKOEmChqrSLSKp2hHhgWlkMNdU0RIGd2b0393ZxN1s
+iiANXjlObLFLm6s0sDVSVVoYGWIKnkCj46lWskFE60Nx9EhSwSvPXsRZRpacmeUl
+6FB6Cb8bj1V6Bj/1etknNTMACu0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOR2xV0mQ5qNQGqR
+/33dGdgUzQADMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAAI7lTFCIQVP9otT+sDzuF20phV/cPrgLZbieSouq1Fg5
++jNLKXCSbTXEFUwo8tdP+ZHfBoyfynXfqSqIxQGh+w9nlAU2gSXaWgW2Rr92Jfi+
+uYcp4HhcfmgtPSSCz9/BRW7DGCPNqCJi+6uMrQE0M0DNX9pwSi7S/YtRzUrmD2SA
+I5spCmPFxhSwVIt56zzvtmo6wgFh8PeYYIULu03kFdUa48+wi8+wKke4PV9hWOms
+PBIYR+0gwDBu4C+DEpkwprXWrZbJ6IhFGBlAeZDQ/CUGFNvnbd+3639mZOCIIvNs
+2vzyRwCbHy7RaK4ELSLenN3j2K0InfURe/4/zS0FHQohAjjuW6XyPboBWsRuAFef
+A4QqVD4DHA3tbUqKFZQDAD8YQGE3KAOJ36t9yKqYfUllyYDDsHAGeGtxsb2tV7F6
+SUv9sUxOvNAKeMk59Ht7F92HKDVfy+UsIdJsWxxL7QIuMl1j474MwFgDmdhHDKGo
+ObbXFnwJdwBjxw9GIZr/jAxyTUA0oCS88sWX7Pt2T74kqi2z9jtgVQBLMRKAQ12o
+y8O2o47o60pe4D7DLUS42zOBPsXBLHidDx6dVyVz1m0ZlMWA7tjnNtUwIORl5ghE
+WjQYfaqPAd/jgJ2PTigsli8vXM3Dkk5YTG67W8kmlTIkxEZk3LLAe1j6hTfJarE=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID B080359B59AA938800A4AEBFD10CC70CF01B1B37 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAcbezU5hP+Vt+QAAAAABxjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkxNVoXDTI1MDEzMDE5MDkxNVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC1CMDgwMzU5QjU5QUE5Mzg4MDBBNEFFQkZEMTBDQzcwQ0YwMUIx
+QjM3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA8k1WoS96+eBd9DBX
+jm+Vtbo5FCO07fNmXvbsIINUpPJr9b5jroaTUsEvmVUHdGFQRJknNegRWGRGC5LK
+/ILJpjh9yWKv/NiuAC9LslLwYGPnjfyX473HvxzZ1qcDuKvyeFUtGQIisWgmL3L6
+vrJ+4ImxRvdeT0jf2zGLbCFY6v495CcJEZM5ZMMW5y0WOukjMNcos2/U9c570rGj
+jg9YV6kqpQBH+CwULpRHaka+D3LASL9aaL7Divs8rPJfC32S8BOekqVXF2DBRC8r
+/2/kwXjuX4IR98xmnSSH4c3xtnQflqKYkH3Wr8jQbCqZI+QXCRcF1oVaTHDplzst
+M2KWTAZwtWVOcMFRzD7pIxewDq5X/2/vsb37F2QMeT6aXUqCwkBsCfZQ0OIuV8QF
+cAi3zzJJ7O1F/l8JJIGibanvLtINU3GN1DsTDv+jkOcQhNA4mliUxSAa/IJBjhHU
+xTW5bwwEljXAMT2IdV+xY9EhdS3lhx0pT9GrC5L+l626sfPTfuouzcOzIjzS+sTu
+ntSeCQ7Pta695PBlsQk+0sPBMoAXjlGOTRbbRMc89Xn8m9VuL50lXSHXcfDSvt7d
+ZOewhjQhvyY1y1YQPglNXrd80l/c712YlyRwIXdY6R9Ha6IAfXuPk4t9hn1rKeIf
+8bKF8Q0AwYjmOQd8ZA4qLGHKTeMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFL8VJNRHP/aNvMbN
+p6rx5Gq5FFCkMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEACtaCoCHgAQIWf3D72cAu1LS/cMznA8DN4M29s0IxOa3D
+MLn9h9N9gcaBaXKecUjddGTWKYHkiCCaIOXs9VnFfuGu4p/fe03mOcldJXQUEiPo
+X23G0+MLZElgIvMr2hvUZExc+muqUf8dAq+sRlVYRmKD7s3eGryhzKEgAe1oabdE
+8DUamP3bBJaEiKMC0J+JC5rN28Z4ubNwXouwYJ0wDsgzWOLEmybeMoXbfB8kX1uc
+aeDL1e8N92Sga2BB7lIHuogQkHnNeL33f5MGGNBKbzjc3hmHxgpC7x8liHNImYVb
+Z4a75QYd2gR6V2xI4pD7DqkPYowxqfL7hjgRvV5rclXtJI0QeoLzrR5HqCFQKQdb
+sdNpLKf3uPl5UC9PVXSKVOMvLz4GIa7c6k76Bybfw2T7zdGCeVk/BhpefsxswTZY
+Y2cB61gfv3oSFYsVPjuF+iKpITOd7Em238tzWrlxR0AdTkqildytDkco6Wt6pILV
+aiT9r4YGKMXCs9aCRP4NGzNmy0HbcNcp/HWqY5xrqjPEZJO5pE3CZLEYmCzyeNJS
+fE1qU+S3ZuSuC+3v3W5ZwHmjpcN7XxbRcZMbT5mieJpynAZSt0zmqgaoMBAVSnGO
+eVNktjKt2eNEKNjzuLb/bRYa2MRIIUGRi0BoHUIDKx8Jhh3lAC5YB/gJBKEnego=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID B2D3CC08144C50808C289D119627479BFFC0E4A3 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAi0YZ4Vu9a5RWgAAAAACLTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMzM1oXDTI1MDIxNDIxNDMzM1owQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC1CMkQzQ0MwODE0NEM1MDgwOEMyODlEMTE5NjI3NDc5QkZGQzBF
+NEEzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2D6AJHh9aOqBrAyF
+X/qX7604yk7k44GxnsmT1ZHA0owj9unuj7wQDtdfn5FjQKh/Rn1ERNgfYccmAwNt
+WIlVSrGABL/2tKlHe9o3tkK0262hZ+WR9a5M8Bob0LV8isqbBcrmvelPoME9Bhum
+0HaAwh5CwHDUvAQiwAuH4LuU+gl6csIGASpsytE3/OOruwFuoanthwlKnfVHE3LT
+/THDqlE8Xn7L4PWR1kJjARPPHYeKfxNbBgBEry7EL7/F8w0lVdXl2x5XgQ4/jbFI
+E8slGwICgS/IdoIY4/d1QcLUVxKeHe1Av9GO7pYGuybHvEmKwTemMPQ+00N3JTIQ
+Ua3Mt9FjkTPRk6ZGdnXy3dQ2U34BQj/lQCJdRfgjqYuSCVNtCR6mV+vta2uh0f4G
+ljLM5JvhzjERpSpuOdFithnYptaNhIB89QcaW9oJYMF407LRrXrDwQq3hJNjiHXl
+hsdlBn40o/ov/rthn66DvPTe+4rabkLZ0XbFvGXSS7MzqeSzANLdhmvm45WpI2UI
+n4ZTutZ6d6BZ2DCMtv8aIflgfqb/XTL/yZ5enyqoecm7DeHvozo3WE4c8QrR/Xaj
+U+i1x1oTSk735uUge/Qgwf25boysn35RSq37dZvwUTSPL8ODvzZOS2Nqle+dPZNX
+KXZ1lYj1YRzvdxLBLPqhhV1VYxcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLFQWwmfvfBLLGQm
+FTDa9ahGYN2mMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAEWiaLGJtd4zX6t/G6394D07HPPfbRGB6xncI3f+PUiy+
+rKZgoHJvjXtD922uLui00y7Gg3w2POEA7jK+9LHT9QEAsDpdHaViqO72/FQSaLP/
+/Smf6mjpfIrq35cY01c4Ye4YD9J/SjKE2UfP2YB9zzK6PiWLMlyadAQzPxFm0rvF
+3KYFLWpN4qGzvv/zGkL3Wp8oUVx/Y/bz1MMHOM0c4CIZIAP3zED24RLokfvbIPHe
+DjCBtKjDMFwRGqjVwT2R/kJNJS3O1FsKuUAMBpLtC3wRcHGzFI8nYnopMKG3lXOQ
+yDAd8TeDGahxpsM5lFe2dLg1gtp9MzGXJ/mJ31DHgkB4d2K8a3WqPi1bw+AtuxKU
+FSPH2cztzfqDr8jRCGGPwO+M6uk/nutrUxWs915CSdE3ctMB67MYqTV0PPkES5as
+xlnA/wM/HaZ44Vm8Dbe0RANOwa3gRkwZPvIk0AyNPm5JAZVzULDsinGNLMrhMfzz
+/KRCuIFeqvX9nv1MuM2wvwoIxgryLNrn4BJX/oZD45Nl52yAx7iocSH8sFlGOCyF
+7Szn9AcKWksJtGiNQ1C2nYAFNs7JBAfvxARjWT+RM5hJ+e+JORvGFnwbcYcMHVUS
+FWWMuhP3i3BHQAjxQQC+EDnU0uvushD6t40k32DtguR+faNZu1Hx3PWQE6v9aLA=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID BD6C69C0759EAA95DD6D156EA64170C4B9B36C78 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAi5FC5WcZKTAwgAAAAACLjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMzM1oXDTI1MDIxNDIxNDMzM1owQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC1CRDZDNjlDMDc1OUVBQTk1REQ2RDE1NkVBNjQxNzBDNEI5QjM2
+Qzc4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1O1LpBnw/LFn+j17
+ZtK/DLwpyTsYYAyEn4YVX3rbLHhxVTD7yX7fAWY3yOhB7VRRR6H0MwhPTXncClmT
++MswgHd6feLeg2qHf1E7IZSKFpbJW9c71K2Y4raOiWrC2szS5otl8FQ3HheyEXpN
+KGYSl3jZV34oFidCr+vE8rnSFv304Jtugd31fCQChGfoJzkg3lP+pOyL3SYvGFwP
+jwgSkIAICwymDVhCtrB1Dzv/nps7uyqFFlP1GIIRGc/HxKuwgPSTZ3FTYGBfemcs
+I+igQZxYV9L5cMUoKylzz/eybU5l2i9MClAxANrpSL7tvhdc/GASzio7IrucP9fZ
+yVb2ctXr2Vs2R28YPS1eRuIG5zc+zYhwBwpL8eNwBpdFWDFTCmtUBjeE08sKQ/G5
+znNc4Bzx9C0m176SHjo1SK1ykQ++ixNjbvzISXOKoKgSTSZm8GncQosmuI00eQ8P
+9ofQVYYoN1TvfTp8PDMaLhloLPxPadFGXyyS5yqkNXPYgDh9/uk5yh/FXRp6mybp
+JXOucbSZoG4/77Kc96qN+2xk4JPU6dcpizrV1MheOFARZ9I8/pbpXUbSkap3FzS4
+3j/4dHls9fChUMeJkpyoXwcEFHz/awgyQrlAiLvyVvlnDbjuxQMGCyf09haMh4ZS
+TSlAyH6Ih86cn/jpKxQcKYlMoRECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFIXpIcHyrroXrF2Q
+CVGGrYO3jz9NMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAOf0+vS8FLlvlo8fSn/gdxRqxoKHErqlT08kb3iOm/QGO
+u+jyKQuvd3lycQ6FO87cj79G+pKSRaWrsYOUIC3xtvgrIwJkgYmOy9piapKbWd8+
+I/QSFhlw1L2JKsm4ReAL9R4e6IjeEu9CLN7518wANEgWUtKOxonYTN2Ga0ejo4rU
+79hWQ5v8NoI7C/25VG3PPH4drkLyv2TTgwt7NnnOsexDihBW7/cSTE/w0O6BHMTR
+FI7wlRbh3rFH6lqCaS8Wh4QG5jPUFSuru5qo1k6M5YYzEeQequ9nODuzN+KeIUDu
+yhLztjNqKpQQXKS119eoTnjL+3TXt493wthUx0wVIgsGfvMe8MgGCqibxPp6H3En
+XTnADB27TpcU/6c9qZk0ViqDIEoNOPXn3mIYng0+aqJ5SwP8jxXDwsCgfL5TMH6j
+TBFFRUR1ZXuIv8YMOwg/hrAWPYCftlkueeT/OUmAMPYJ0/zjwJobzAbX7RTLI2bi
+ToDOlhrxvoEuoMQD4cioAvxC/ssdgEiUgt/9XgNyfEVAmcqQ/yR+qIgi9a4wReva
++KsXfDgl4U+P1eLPbiQelH/zquS6cZzAhsw6IKSN6QlBDwQc39kTsZsOzNAWoCfN
+o+BvQc5RcHrUTDMvpICdlr2Ka7YbIBTcEtKD5vHh6sB4fxDSuHGmgnYyjTCQ8kc=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID C0044E3B23F43B2854BB76AD4FDD79BC62986C55 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAfqcTrAQj/qPAwAAAAAB+jANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzA0MFoXDTI1MDIwNjIxMzA0MFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC1DMDA0NEUzQjIzRjQzQjI4NTRCQjc2QUQ0RkRENzlCQzYyOTg2
+QzU1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyQBvi5CRRS+QtKhN
+iLuTpMQ+zf88hUOTRU6z6QFwc+bj9W1E38wcHIAaJk0XCXAavnp+Hkv8wlJZSD0s
+vC//ALCiV0r7r18mMWeMLk87DN6skRoAbywHWC8VQ2g3sATE1Fox1IOW/ZyeIDUY
+VHakk29f6qce9lHYovVZmsxuYs7MCu0bKf4cVlFLGIVaV/LsnWtvtPVRDWIkVGRd
+QEIscdK+fWLsWvS1JIzFH+ZU/9SyaKIzFEMD1CV0JjxmPcEdEFm+uT8rsMQtEZMD
+o0PMgNVdiGtMQ1l3OYjsYx2qFx0OIDwakVNyX+DEVv6NrpJ3BYoPrSljZFkGSs5L
++BHUYbeb21SyPIkH9bx2zksRoDv0qMpR21JBHU2mzfyMIMmRs7bQa4lRXNKA0v3l
+NWvx9vLyi/HPTSt2hLyo9dy+APgUhgOsjYl9hitiMWvYOa2Jgp8N05s680r05mH3
+CgrBzR9wvgpeC+1LBZBahOv3OHKrkSNK3nAKDneqIm9N68xrMwAXaWQ0NP0WXsmX
+ASVlXoeU4GbSIkfY1HBbunJ/xkG8ow5XorqjxapSAG+2Zz6tr2AkByaJ79aRMUGx
+1TcOgMD+hzEACb5+uueggMQqdODtZe2UEVoO2t61eeKEQOugr2wS2XPJxh/h2+Tl
+9obkQZNzzK0TeUldCrD7oW+jINMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCKkyWCFqPAxxo3q
+hMMAEuF2kZqyMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEALhea3qI0/lblf48IyUOz0AWx4PTzbADsxtgEM1B3c0OQ
+af7nn0jODNxeElqniA2fdP+pISdkl/fg3xroD4ztaRizlmSHfZCbDc1idPdnm1F3
+8BDzMaYOuW51YBaGyi6tylYydTUMDvr6U5LRIPDpfSHKzDe+fsXo4ss2cFeNT5Qa
+B+6ButdOsafwTh5A4cteb/yiatL5eYPVhN1es/FrHhx+qGbOxgZADz59XTs2YZhg
+QP6HOYD81sHQDxfYfyRPjIrELe1waj3sKwSoAU89OyFLYuB0otCR6XJBkDD5wckx
+wBXnFF00mDKCdIhXdoeXFn7u6wn/R4U1bWEAphzxwWKmgjFBv0JBL0hh8cdX4vHT
+VuGJMbd+elOiuXiL0bxCv9WeZfCtr7D3HroFWon7pad5ljGfaK/Ci/Wu/DYNVo/H
+QZ2EG6khRWSbT20YSWJp1BZPJsEYR4rvE297eRKiGpfI+rTDZhOia9vV/vZHu8NS
+Q0Q+ObwrFpSqUFtVwgLCazGx1y72LQTqukZ9g7Q+ETAr2QcsOuLcrgkgwhZDELxe
+s/vyA4RqKXTIvAZhOExJDYX3ztUUZ6ljr51VP2r7P9K3f44Z2v564Uszj+/Jyuqy
+aTR7s+BFEQWR8py5WmsOTkZpLDvpaw+Uv3ymGM9rT384SNtcXBhwebssQ3Y/K/4=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID C7EE1D9CF6A291A06E4F5B88CEB25CAEE12F827B 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAi+eV0qbx6IwTQAAAAACLzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMzNFoXDTI1MDIxNDIxNDMzNFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC1DN0VFMUQ5Q0Y2QTI5MUEwNkU0RjVCODhDRUIyNUNBRUUxMkY4
+MjdCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA7HluUbth3895/6Ux
+Fryo7zpHEF5ZDpFI0MkvSvm+FHgAQ2OYg4dtKX0R6ef263id5UDXh+7cE7fxP4HH
+t/D9HvXB1toGGpLi7Fj+R72E5CfXjMt5F+An49bW88hPQbQZIKaKt7RDF8ozeMNs
+MzDzZ7VZnjKvryJiQ4KzX4DiWch+UzGIjcTwvYcNsYGrpGwIeRfucmSHOFOKVe86
+FC58yZHrt0W+Rjlj4AO3wjsLPkrFDOppSh7RgcbEf/+LjzowbN3yHmNLcy+pHEQo
+eiFbLQlvC3ILS+nX2z+szwxzcxn0+wxiQcUb7ZnKPY2T2EziPMYxrVjh553mItIA
+bwjFTyy7byoeMzHKwfFswdrrG0h3RF/3u6E8iWLh2nfFquSdLLqgkJ5d3al+tJ77
+KAjryhXTr1QszwTyhaOXljskGDuyHqQuf4FZZsOI+LfD73Kfyqwe0egOpw8ECHpm
+45WJvUq/cI1PvJRcNAe1RZ3NCm9el8LNMStLj/MUoeg81EeCEuEx6skd/vxyu0LQ
+ruJpx/QFCmBeRHKNEnm6hJ8jVjUmf3KtbtJ473kNzxW8ZLPaXwJt9h6rpucQabgN
+YkJaNWFzvYvBbAcfM1q6jwEAggDpufjRhh2+4+dbMrS07b0Jesx4VOtpXheo7FJp
+PyWa4oVi0FSUxoDb/PdbwZerD98CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMuWcy53kQoBEGRW
+tCxHzWAfLkYpMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAGUHLlDxzXE0ROuszLIlGx92Hzu6iWWSwzqwgSxCtk2cI
+ydU9LPWumbyT1SIUVLZD3myByCfLZpE9sKXL3MUsObbcudnvOtvhOJfkbgkHOWwJ
+ezNFbUg8HjgghdcNNVKx3p7BFUQIrA0sxz5qh4RF1tnCft6zNmJoCQUs3uqswtAV
+UIcWThjlhvO2lD0+KUnq6Sy9yKysY4wGzdjlvweFUuOAedGL1YlYXdlxI1JNe6MF
+rCNOEHoovd+HQuTwk/2aJaxYsmRIMnXpFx6BZ9EH83P7xZqDLJAjJ2aGyzM91lfe
+SUW6FB2mDmIX/fPikD6M9J9YEeIAYdneCGfSvriP35076n93zviWQFsJ6alQJe3D
+eOZ+o/EFZJm0Sv9iAkkPzeEMohF5Uq8w3n9/eMoivfs0YcK0gsMJ82KfE9b6tiLF
+NuctcdPkKDkW92Ij07VXMwlr6rGCRUooKk3OZUM3DxpapP5bXCpSOoJ4ShGxZxyW
+StP4A+m+0yZKdAAFxQmBpjfiSLcCP0K3tVsyxwhcQgm7cOI9wTfNuuCu+sk+WaOE
+KCkTJkp72F6gEYDhhB5XSDiiV4SyjKhdPrxGm0ySb235OfZN504+gX/bE72VcKs6
+5BefXnwOTtsWKlIHyCG4iz/bG2t59UF2ByUCb1zQs5Wcj/YLo/RRxBS3tScuRGI=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID C88C75FB06270BF7EA1244FB9C25DFD209B7ABCD 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAjD1WO8fjZXzdAAAAAACMDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMzNVoXDTI1MDIxNDIxNDMzNVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC1DODhDNzVGQjA2MjcwQkY3RUExMjQ0RkI5QzI1REZEMjA5QjdB
+QkNEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAz7rp/taxx1rQYUG+
+MdgLJPqQSREINJqXB4hnr69H8pfBY2eayu7D4Yd98ZwSt0SkEgkC9ThDRPmLzY2+
+zM/JWs04uyZOF3qjl68KdQ3d4qcZURP4dvw2SsVVH5ioCNscqpGoQSrvAGhYkHbt
+4qBQFctZaiE/jkxiLzkMMcWW0ETS2s4/fES9u9X5jGA6cfev9Y8S9vbYkEwe7lIx
+NecqLmXqt1Pgcne1xkGZHpQJdbTuXBpprAMb1iNl8MfeNwHYe2TzLk+J4eJYZvRI
+wD9qMl3nANV4KZJez4EhDS5KRSqKIK1Y7MTs7VB+XWWvuL2GKtLSPGmtUtF/E+ME
+XST25yX80arSxgSqFhox/chxfk0D+MwIUAb1P2sOghITP0zwmZHVoTYeAr2zep97
+MVncwP8lh0SaHpeDvVZoiyQdwM48DawU8xWZmC4ZWMjoCsrQashdKC4hsMrhJ+vg
+xs2clMeLvCwvadToH1o3Y2o3UY/DHptXQRuiqk8Z2YqPpsCtXb24Sn6retIUsvas
+dAbWOdq0fdjE+4tHw3NkEqcZHS+mBZW905zStRObho5EzUC/0os4jvBQVi68U7o2
+G+7JmY6iK4IQJRzCh5CR2v0RaxBeTA6oGZ+sQ+neb/iYvss0ExJjsro5VnzInnBd
+vxDs0aDpkmvk7pwvhiTAZW2k+x8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLId0MskBrvuq4f2
+Il0grQ5gddp3MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAA2F0gw7faEhUoITRrVRdwURylxp80GeOul1QvUhl7WKQ
+2gUVPxHwqJ9lkG6UARZccwfUrqnwl76wCNBjBdUtRkesUG51WS49RpJVrjTwcYUD
+KCxxZjUBItzfgizzwUqGPHwqoN4snqsBzwChTXCWw6cazocLlYc56tah04HaodDo
+lvjcrK1be/KPuTHXe4YEguLIn+5RCWprkvoivucsQ7GbwElM6sYdENZ7Rx3AoCU0
+43aJYjd44CTGDh/j0WEqGSEYU67Xsw8uxE8kiditSBajq/qUn/I9yZaMGDUWEIqw
+SHcsexsDuZKDLMu1O+qD+3HSiVbVVwt1SNLpmz3BttWapJs8ssPeOAN/C97i4fUJ
+3fytasklrBwb6GK3wiu+xNW4K8l5neNYyBBYsjtkAWC2Y3pkzJ9cmncfudNgU7F0
+x+6VjV6nbioM5C7EC0IvUfXctvKD+zGH06ZdjX9tgkuL8UKf+7f1hUMIuE/x8h4c
+aIzoRsFNgROvBfOsTNXmRIYjlSnc9Rp3CW/EpBFOLMSNNQWuUGruzQFD9ocwiCo7
+1S9ax4dAwKWVG/QRw/fXBz7pKh/xe4ZXlGltW446yQKh0kXbidhUJ6R/4ZNG2s0G
+vODrKAVEmgSda8l1DnRHaphDKA790DuhltapS7dxXnpuVZ0rm1VVfoDFCzKPgss=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID DA206EF5DA6CF79CAE93C5E472FFE9480172CC8E
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAWJsX0zGUaMAPwAAAAABYjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDgxMTIwMjUzMFoXDTI5MTIzMTIwMjUzMFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC1EQTIwNkVGNURBNkNGNzlDQUU5M0M1RTQ3MkZGRTk0ODAxNzJD
+QzhFMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwbYHyXlrc6z2iWdf
+FgA9Dwv42WRLeh7eedDGsCyS+Pw4oQywh5n0ExKsfHcaEmkJYGZlC4YhMjcA2VHy
+0/dGGf3pcmY0mPkzR5cPygordFrGMk1vMv1Jjm1mn2UTdTQlLYHo1gkFG1eX7nQ6
+BsfswWfrxiZ1uIjey9fvElFh98/CgaB6AjJHn3rQMuZj6EtYocAJgWk7+sTEICR9
+q/qc6Q76o9AvPGVCYVlN1GS1RPH3JhHOwHsKeuK9oh207yeWwGFBbpUtB0zs1cPB
+sb6HndMOQiZHtJOVGj/0nxChGKtHI+5LiMRnnuwYMdJWRyYhiBa4oRleRSSE1JMW
+28VaFQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUUz+vIiS5iyALHEAJ8/mOSYYS6FEwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA5OgmX
+wbWNdO6Syjm7rrgbe+Fd+0FgyTA/0tfkcOpsvo+cwFfmpy8a4/3P9Epm/1hFWeUH
+SUwxsVfElxfTYdCPWdydY1xvBG2u7gKJyagGWQeK3CLcn3vwN1HdEM+9gZeiOrSN
+fYNTAoH/RtwQEyDW6s2yovXIBDGTMQnkVzOODm3kxEQA1+lcQxAubW5xxXl/Oqg/
+g2oDeXQIG+aZ8QfD5WnzBPIJDx/jC2r+fTfHsWLeCUbfWwrJNZtdgzsIyvtzT2+3
+bCgnVq38EawdlUlaCziWEd0VIVZ6dbo3KzVMfsU3jhbUCGe1fshoFEUvVPgtmTHn
+uh9/Tw8gIig2YlYg/GSVR3d0mE+cwxQUtxDSoMN7zX9InnHff8G+fJfMrRPJWulr
+WXUU6hTC+7C/XXNJeYys7Hx/w/6qZPUy7R1QgNdzuC9YG17IWohzWqUxK5CL9hYD
+fT4E1Kj75xNHeegDVUGtOzakD9ZQ/Lb7y9GfUpKKAOlFs9qiOYk17nvIglDtb3nw
+xWrf7xLpFSqLUbBDHrbHCW2fxWXM0Ys1UcW2o9RSb53ucbsJmSlu0qcszyix2+AA
+ffQGhCoJMKEf63PTMVwByUrUPS2XFjb9YbR7kgGIRYYobK610E22KYhUGyRfp79H
+OKsC5BV9CxynGwjurmkcJwSKF488MCV1vfVb0g==
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID DA206EF5DA6CF79CAE93C5E472FFE9480172CC8E 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAkx+O9MVXgwqXgAAAAACTDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkzMFoXDTI1MDMyMTIwMjkzMFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC1EQTIwNkVGNURBNkNGNzlDQUU5M0M1RTQ3MkZGRTk0ODAxNzJD
+QzhFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqtU9ls4rjU3z8ssF
+R4gtQqjSdtKWi5dJPcV1xLdAWTMbIjlKOJhaLjDP1wuLYjO7Py0SUBb2mrG1WLGD
+Yi5x3EH43OSUwkX8blD5Lm2EanrtRwTVgVyAApNyURiDOGlTpDUOwHd7Koomo94I
+aSLthgR2tvzt9Qs9Abmt7QnOaWsi/ci8YYCSRHoLEcjDgQIKWHBvxZaap1TwrfCi
+xjIeVeH5L4XUZFdQPlA8P8PGn/DWi2HUR4t6tkfFeeViDGkd+gdrhel5O8/HX/ty
++aPvjJVt1T/jiANbe43VXzBuQj+mirD0EwN893/380GxM/cbVudZAdVtr5Y8ItZA
+4AOT7zX7bu3vaTvv0IqLeIcjL6yIKtfINUELKi03gIyikt2KBsiwK9QoEaId3LrA
+YKTV9Tc6am4Yv1Y1gmngfInGr9lrBG+sMsMdrFoj1RPjnZTM9BoRAw+ip7SXxA56
+7UhVMHL9Cvc16ijY8y+4CsH7ghh+PoDng0Y5f/5h1cT0kjF046KX21NkYRcxzkk6
+J72DvzyGNbrLRUaJ1VyUuUEThEUyl4tFN/vFvApTYoFsvBoCYXZ4KbExJRUNwm4Y
+EtdTlCnXk9OA69PyO2PzNxpC/f3uGvSgHVaoZkGxRBW9Z/ERo6gdLOzjxjlKUopn
+bO7tvhP+mNMOqNZHwE9f/ts5CzkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDEWpx8qumTbZ2VK
+uQTtymmoGayIMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAN+t8OfUVCFqGxBc367kuG9rklOcr2VqNUqKb5ITS4eQK
+gSswWJwKmpgKPERCtM0hGRvjCafFAMVMZ9jdC/f9X/CsqBZlXUbRq8++AvKKrafR
+RdaXf8hT6dZSEkfZa/oPAT+2RvWrEfK4EQeCEpgJ2trBVjQrVFkFexlNgU9mLhaE
+zT9Y0uLSDOM//ZpAvTJHxh8ZmxBAp8n6E0Sk7RRyEJ3XkYj0LcLVOzeXp7otJNrb
+2wLFXX2qddhzi3CoWOLicMIkruOQgDJ9BkzJtfmwIgzkzd8A4eOv0vCexTYEmZXG
+fuwZ7ZaDkTAebQkwg06yj7/pt0L1/Bjvlafi9ul5QmQ/M+nQWqk6kHXcr0EGGo2+
+7D9VPZSq9irmLIV1ChHW+Mfmy+00zAKTM0PGwpr3WB/6BGU5cS7YAE3uaec7Sb1V
+PLadqVqhnLb7+9ypXUHj8GceF3CI3u50eowNOPBcHWtcczP90+fVT9z1TnFWhxx/
+EMN1Z1yBtTchHnU8hYVhlYWTXAy1F8bJ6dnvMj0tAMyryQGgcUAeupi9Ad85ukn+
+CXWNiQHwqCG71rV+NNbtPHt3pAbAgvP4Oq/yeD7yuLyqfdKhKLosK++XTxDShKV7
+4weSG6qaT9DP3dLOj432TIMq+0RwszOaJ9XHZR+n/C0DEVM8qd7q6B13WAfpe2I=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID DF5D6DAB5102DF18A1F77113F4983C62CBAF7385 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAfxPJS7w4ZicegAAAAAB/DANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzA0MloXDTI1MDIwNjIxMzA0MlowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC1ERjVENkRBQjUxMDJERjE4QTFGNzcxMTNGNDk4M0M2MkNCQUY3
+Mzg1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAs4arT94EUeF2eNqC
+RoDx0Md0qYA8j4zcsstr6l7Qo8BS0ElOJ1q6saL3aaTiMIl4N3Z6gbY+JZbMRSe4
+MkgwzCXbLrFiKDq6vE1+ZIoiDZ9HJefiukhn7dt9JDBupPR8+ccbZPaCdoFjHlhu
+9m+CGV4qEz1fAGwOBcYDmlmerKJIHpAPFG6jyVl50EKgoCaG9G5UTvtTZZWUCOyH
+ssIjjG7cdU/biveW0BboF7BfZ0TcuDDpGrqaoaH3GaoXRsAzWEKon4s9r6dZp/48
+4+KVZeEINcu3kXQtvIYPkyqkATHiALBycXKnZYZjhI1lKjG+e8BwyQNnnIVh3u+O
+8kD6UgMe5k4e4Yl72D6rFEh6Gq/UbJXas8pC0jfCApMvMwdUXvhAhZYK/Jdj8K1P
+IUiNLMROnEul/0FRxrIbvOppB6LiS/ohoLI6/5nKsbzOVIc87zxqn6rORVYmTe1k
+Qs0Itbznk02+IpAdYu6xQXgSdvYPF8MuHilln6RkkZ5LkWbF9f29Pttgl2gtFE5j
+b7R+GfUCQbB5pnFb/VodXWJZ8N8muOeiQCydEz0up9OtyoVBsdKgTPpaR0OS7o/I
+Ez1Vnfq7sspu41VjBLmGszgHXUoiVuyyHq3uSBu39WIvXQ6T/E5M/k6J7G76NsiA
+M//Rng/aEl9GohYAhU/LnmY+pUECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFISdnlQAnS+85Uw0
+lx4s2SsoNZ4YMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAb0ddhgAQXyRKmPy57iJgHL94NLYsrogT3q7KOCgtZ/tP
+hnO1owNHfrzz8+J6fnipMh9hfcPylgIDDOVB2SEhoxPtoR2tjJDAjz4RVVtW3mLL
+PogzLareTe6EWZ0hREY5/WFVTyh0e2gR+FMeUjnJ5p9ifY2+RUqxcv67iAVV5Kw4
+UXPEab9EAlFV6G7At8Y3LJMfBpfPANTSHTA/aPbflzPnPLbsDxDK8p/as8BPOIIG
+7snzlYbd3bbUcPhMAuJD2Du9Q5RthFLTAG3T1qjvgXEANTB/d7rl/6MRWCc0bGv4
+AHPIHdKyn43lR/omnGIvOJDJs2Riu85iyWYtFsSg+oqBcTxSfooYOoa7jsI50dQO
+hODYwIlrL92MdrywFJfycLLshWUAhZExPDpD3EC5FTPnkoNRO9Mqauk6BnsEQIUH
+Bz6q+qCikkfaPjytvzEOZRnsuSU3GsgHjAEjl4dhiw1Ax3ontSsCBCRymoBAfDu4
+YLwkRUKuVLRBOSfMYLrFmHthTGdRMwVoqJirITtWM3Eua8XiM6AB38husvLgq7l5
+tQig8QbCHHTlNsFAgoMx9GXnqqesWFgSEGByio6GbQGaAvRb2tiTxjNyH2Juwa7r
+SzYrZRSbGbG3O0ZxHtfU9h5vB4e5gWo/PUBBIuHVVrt3XMma/Xj0YY82Uir62eQ=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID E9061797E8E5E8C68F935EE5E976BC8FA17D7523
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAASwwtCT/DnFVSwAAAAABLDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDUwNDE4MjQwN1oXDTI5MTIzMTE4MjQwN1owQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC1FOTA2MTc5N0U4RTVFOEM2OEY5MzVFRTVFOTc2QkM4RkExN0Q3
+NTIzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8HBg41Omuwz7NphI
+x2fE5uX77xY0YsHZAUhYI49V6bwDb7GFeO4JnAfn7wgrg4TkdAhVFRsvhpCuG68P
+vizqe6YTNsqbk7D5kEqt21s4BMyV2g+lZgr+H7WMFgGtfNtRQBUjKrFozTRRDRqT
+mBc4HRjDXd6+WFK8XGzLr20fYl6lGviNj58g4DGneePgCggn/zEmXRYB9yl/Hhjx
+Q1nMElw/CjAeSIiEhCgHB8DZDvSKfgZHFWSttchdPUvuRz7GKsis9C+vJsyKL3xr
+hTB5j6j6ulePyq88zT3tkn0j29jt7wMH8qJK+8n0SX0vlBxygTP1vkn/3rMcl0WD
+HADFLQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQULB312pe1s+xuXOtHYrSC3nCa8MYwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBiSA07
+0TayJ9L3ltLywSolmFfhEtI4sBzeiOu6c5MxZyLQ+uC50gKVgWrYCBFJ0tdqSTFo
+dF5YlPA+U8jRwysLANC3URiU1eH6Jir/PRI+SzYu1MikBd/kZLsaH4ySMaUFqNGM
+gKJlygBx8rGzI1OwzijVCmXYf9ZeYnBkY4BHss9ZG5KCxJtbfwV0IhY9bnF38QS3
+SnnnKaCBtrHk0xUxI6su+0r+l63uA7G9EdMrchDg2944nFE2whAYahXvBW/viCUG
+ngWUR5ka/UVrP1UP/smawRtd1GXQyO9hSZJlP6uGGGLZPisbrwWkZ9cqV9vsQsks
+aaYAC40ulZY/Q6tfGaEiE9lhRMxyaPI0qaMsNJVQraX/5hVrZmjH8YR+aI2iQDbs
+xnT07Dp/apXclYU5N9zi3YJNaqrEjVidrU1OlAi08vU8zN5+quTTXZ6uN1tQ9Dbl
+CczRhTSR6FZMB/zVNZQ4wy7My+PklS1nliWmEpt8Nfyq2FVDvzrQvCEzos9lCLmO
+xAYwSzeUYWP2ulTwt7sT1G1l8aCYlKuQqIuTH4qCxiEFhKtRdPqwGcN9Bdm9hr8g
+fKEhEmRmTsCMkvL2kbWyMr3+f3tFtzz8O3axtiyagBu4BuzB2CclwowsMtq/jX1E
+7aHg82O4Ix1N+epn95tEG8Orherke4E3fD/lrw==
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID EFFEEC5E01610082C0E311CBD07A3204408B32B8 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAk0XwRlfK6KBtgAAAAACTTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkzMVoXDTI1MDMyMTIwMjkzMVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC1FRkZFRUM1RTAxNjEwMDgyQzBFMzExQ0JEMDdBMzIwNDQwOEIz
+MkI4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAot3v+77+w18G1Jyg
+mHDJ2n9g1gndkPUi44uL3mvDctcPrWiFgaxR7m7Cet+LfTqDqUyg4oKLotR0nDk2
+GJEPTmB8qwyvy+RusQ7IsXR50zIJxvHqPxBfZE8UCarhjgpdnpm6cYEFcUDC7Ye5
+5LK4yo5913t9QASwc0pSfPTHrBqlVdZ2L6ZX4+DdXpOwDnZJgPIcVyOGA8jzEgNj
+JduRO+Oii6XEQ6CFxgGg6U+oMwzJs25qJgS41x7Z52tY2gPXZgkWwDZfgrKO2qLJ
+qn+oVr9t8ANCFEIPB3UBJzb0qgzz1C6KaX6tCbp5TvK+0dBftx/GH4V/gECxOiQD
+OE0lfzwCY1W3OtDXL7qQmIWXQvfIUaZFjaHacOv6rpRX6LaF0EMaijjF3ubaSGbt
+AAHXRXLt55xZVc/QQ9cbDxRac501UmVQ/5g9Eh1MpsUJoDlqrAIVKdgz1AIsxt86
+FcCLJ1IrlOl/++YDvSbYQ/Win1GmKtWHeAVoOCyR5rVv/bL+2ml8Fvgv760ewfDy
+pni70CDj4oTsi2nCZANxZUtTcf731zazGNKz/fimF6eLfQA73P68K2tsvjdQhF2i
+uOlXhXbEeXVw4IjSN66WhoQZ0E9JUUVTq//nxkDZzL0WKELdyMHtK9KqcM3KAmfJ
+aHn9Ycdx6v6OkwQNf0k3vAIfTq0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMZtF7SgJCTC/NqH
+Nq0BiDHPLg9pMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEADa7g7U/sOuvAu8tSvM1dw5ImsVMDOAE3v1VY1hIh8b9P
+xDMZAiTskt3UicYjvAqUX0Orl6jV0KrD5KeRo7inBX6InvFSLBP6/m3iVJIfmrT/
+rOx79rDldUKoj8MPaZxrRoYdzNddpyjfqQspWLM0z1nNkDtgkEZPrBX8XP0GG8RS
+TOIkkR+PiJy1/jbasEkgXLuNY/wQcVMwewHteJF5l+YwkgOxF1EewzCNIXVH1VBF
+hMcZVc+yK0nshtMnf5Qa6ingZHoOcF0xa0iArgxdAmU9IdzvK57i/xsHteNlBzcf
+cuJZuTB5M6e5vL/IU7QsxAvRiYFQepRgrHy9trKuGQxg7DReuv7Xx+wDPCgHBVRM
+ynPdYVT4i51fy8zVDQ1n4EpJvKu/jShArB5HusSM3m/5foLkNcBN/xiMU/wO/4Kc
+emmpjuxIjB5GZNpMiQfc+LaJQCLQycqI/TvmhmtUn3BBg3cGfsDT+qUH45CYyh8Y
+hx2O+Hqw9TjVDb/R1OWDS/b6hLXD14MKDRe74DYlBXSobtpDSSnPeQXJXrHasYjF
+NbRo2IiKyfEkGAu32marTIv1g/GwtassSscQexl4/Sl7bw/7mdkAPTXLUhqdX6UG
+qBWIgCCnZNM1Qf6Nb083rKmTb52ykIa4d/X0oSaV+cXWwatJH81IjxpdmNPMUsk=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID F53E4F475E0D3C6E2B3E56E3AE8ABB953122617F 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAchHtZAjKGBA4QAAAAAByDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkxN1oXDTI1MDEzMDE5MDkxN1owQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC1GNTNFNEY0NzVFMEQzQzZFMkIzRTU2RTNBRThBQkI5NTMxMjI2
+MTdGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuf5gkglMAhVmtGRR
+2yS0vTZ7eZwwBHsHYel9RBgPJudFqQCZ4PovJgd/6B0SuRiZ4+RYjfSO3KJts9vQ
+SpwJ6OrmnvGAdRpuhEBtp2l8gQROp/9cZLKfd23KveyxXgbNkHuj7ARfJU4cwJu/
+ABnUQpRN45v1+bfOE4hxPeXCaecJtXggIEWycauaRUJ2vRPCLkXgSy+x0bVAvzSH
+k5Abn8o9cXKudEQixhBO/WzffPrtERfUSXN5uSD0/TgW+qcnAZKr+6CdIsQvz8+H
+uSS00SyvAanxGscWFjcOoZcbqoC7jw1upbfFjCMmDnYa5YcZoQTiBxdPmonnwqCS
+pc48QWsPTwkEMPZjxRvwWh+pQPUJD/WdsY9Gz8H7puFr2zxjoXm74tpAPWateaU2
+NCga5VuhVSvAncj1rJWPxFvzPKJ6Y6Rk1hW+BaY4DoXuWaEcgwXyibYX+6cImV6r
+hT+9V1bdcIzPOH1MmTlLo/Acrfpxg9a+AORq4JNG4qnCKB+8u+NXNyRt8ZmMCaz5
+Zl6laWssWhLwfVSNKPGe1GTrPYJ2c/o0USlkMsEY9CrezIT7j2ORUvsrLnlK4OT0
+yG/as2thqNgSWOv+HOvG9hA81u0F9BU9+U3gz49OYUVRbpCc4ZhvA4QR7WUlU4vn
+BevD8RdBTGIkgnNrpWdeqydcI2kCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKgCEFPeT2tmx2lA
+ZxNyDZ94NdRVMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAMMRVaOjn+azoBWVBj2zp90ErOHr6USboYlcJFWXrgeY+
+sMOZzyUMqGgA8Kq4iRlSWo9VEv2i9ReslFhgwsU9nd0OtGwgain4jX21kEHs5AUJ
+t4JE6tq/JrpiWvR9gvrALXrAyHTmzRSmmPtRetXj7v0ZxVkKNlxknbOrt2DyFoNH
+J/DBEQIVWOBTy9hEX3vkt+3FCPDaMorJr/lE85DoVN2B8UFMIa6bxN3EwCiVOUMd
++P17IgaiOqh4meoEbHi0kstCN/Q/+CB9VRZo1WdKhWCevwIe6UbEKTvkE6U6IfTt
+/FJo7IWNCR2EFBnsMC5f9zMot1+M/MkYKLTuG75gq1uHjDWY+0H3WufHHdoUmfsA
+kVNTZIP6pr5nJC+A0y+sODC+7t5DwGgXaQ9UWKBiUBdOcdk7eqTEIa1T58TgX+ak
+tU3SyWw1wh/W8BnF91bg9EsA/z1DpcO4fJx9aZcLgwnM52JOb+x6p59h+LcONu/Y
+79CGmfFwx4rjzu03s2Dbmfac6bCezqXF4vU72B4aTpt++wD9qzJ/qpFmavOPHeL0
+W1NgywaLnVdR5QosFyziv1cEA6xNKetyHZyOONfb5lAG4sVntcDxgRTOaUfpv84R
+EMjs6iqA+pRacq66Tl8O6s8Z1Yp0zJi+4VP0n9HKYpTnxBY4zC5FTsXZ0e7eyG0=
+-----END CERTIFICATE-----
+
+
+NCU IFX KEYID F65C289B3D93B78F978AC8D017B7947DA93637A5 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAk5iPpINfFok4QAAAAACTjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkzMVoXDTI1MDMyMTIwMjkzMVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC1GNjVDMjg5QjNEOTNCNzhGOTc4QUM4RDAxN0I3OTQ3REE5MzYz
+N0E1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0HC5Y5ge00mASJHL
+ODn1eREQru5Tqa6E34hUZ1f1QAbjDtsFioqzzgbpHWWVbil+fv2fP4EJgs0FgkYJ
+Z5uTJl0QRObWAbDNkwciZNsXj0XwhF8/676o3lgWU0NeSNsq7PEjzlku+7aWZpF/
+wBz5Isna8zNERAeW+SuYUG1MZyMmmnO9UcpAgvaucESlRMnUR+6Zrg5JoMzAwAci
+JUNJrUbxWlWUOpCTuSJoRVQD+nuJSQxQYRt/f4SAITvuc5TB1QgWphxkIBOW+2xA
+xqbdVNcrXENbH6grWkCyYCN0rAKJw6HL0TIgTJ9XB0fqSULddw4dCEsn9FXwc4XF
+ZL5jPirq7Z5W4tYQLe6KtkOC00gq53bpVSGGPz0z9GsDln0ElqeIO8Ivc40ZNhim
+P6rcGwvgEV6eQIRcTi1fRxp1jwcQhpFOaq8bLcPODyRpYbffRU6f5gwxHgyCNclR
+1tA9rKXNZdJw7NFqBuwJ2zI3lv6G3HnijMouZuTTb+ODkTRP+pVPKEmubnZldScH
+gzCFcVt5NBKH4e3l8oVJqBB3Qhs2IP+dFLPdgqG4uBYhjnCw7W1QxI8Q2Wn7jg57
+pPoqTkty+hIvrrJXo2lEjCMm1b7ar0mxaQdhbBCw1Ir8BbFyhfSh1BW7exaUkEtq
+oGjDg5L29ds6XQcjyMKw0RttQlUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAeiwIjLvflqwN03
+jCfMpCTkyc0FMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAndmDv4auyYRGZR5Kqo0wK8hqORC7R4QSHtDEbTLGV+Fg
+4Xd4x2AGO9lO1ENK5guXolq+fvibVlqgUzCXJmAU4JiMhVj6grC0H4/opU+YaQJ4
+u1P+QWVRDDI5AYk8A6529+hdjJEhe1URaNKGPlBn0xFwGQKud8pNw7OgEi/u/5Hy
+P3an/3UFts/dnQwbv9Y2eedexgX98v2wh6k5CC4uIdKK1ZtLpGbL9e5p5K7YxTmT
+hcxOSCZOF4ItIM7ngIs4MVI3GqmvW+i6jouPIZkxmamxMUN2mlyqQsmhKWocQ4z2
+rTrGX4pQdJ+bZE7S+kGcIfg3Sp8+o4bmeUo4KVlvukTKCXC/Fit8yyIEDJ2XqwEj
+0E/3lHlshzZWWW9Dcmp0xBGnOQydm3d4PJQC636Zu95AI+f/9A1cFyOqiUntbpeo
+5Djzl8els+nASrlAFgQpYi3hC8xirQhWxWg6IxlfbkUCxJu4v4VyMB55StwLETjh
+Fo+Flh70+bKx15cuffrCuf5nk3lwdDS6y9aD2F019g5VwAAKbQhffyvdn2lXl0jU
+I/LRY5+yMioFHzEzpceHOpyYBG3u+0p3C9cOC7j3dWFbVfgnv+0qe5dp5eRA+rGZ
+8AfqgmR6kL/kVn2puNLACEqwNLpXd/E2W6Ios8SCA/z+lrUe9fLLGTRgWSVtbfY=
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId 2583CADE368F69C80F58D34A48B2DE653DFEAF98
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAA/xTsdFvw2KGQAAAAAADzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDgyNloXDTI5MTIxOTE4NDgyNlowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LZXlJZC0yNTgzQ0FERTM2OEY2OUM4MEY1OEQzNEE0OEIyREU2NTNERkVB
+Rjk4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkHcsO22QUP9WTZug
+uqppRRn5cVKQ3bLMbkJMvJsHwmkPevU5CHpzGBXCCsTOwDV3uxNwNZW3uY372T3a
+mjO+rpXNYteunhaImjPRa+vwFRIps3skoxmgVYyBbZ4qgvyGmzCHLAQoy5bJcdUn
+utqsaCZagV/x6cBN4V0cY5rC4n0CjJVY0tnKxJdduhkMA8YUBF0+Np2LDX0Xq576
+8fnXmBoI5fVU5oxk0JdqOifTcGGEJfqmEPREIAUfb6+NGH8f1E+0ZmcQKNVHMbVo
+UdhAxjSyU9VRKex2gas5wsoQPZt+/lEYI98gtNiUs8m443Qe570wRm8o2J/H5Dpo
+oG0gNQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUI+9teAZw4UuRbM2taISutc6WW/4wHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCcoW2l
+UeRUUTZCf9lhwXYogiuWTW7ICD6SbdRQxbxAAxlvsJzuFbq0ejSLJYKrJKCRrdEV
+k7t38HHiVzRnQJApCeUHAmcA+Jm9GTcbrtAiqnSE++Y8FT13XTQ4iSo4IZpFOpXA
+y3JWT2ic7Tk1AFOBKy5xhk9I9fAu2/L3XkWZiH2qQiJyNnj0F/xIwucvzHgC3mXo
+t1yga4qscjM2k7l86nNyDCxioF0QSYYzHXLcLzUtU/LjsJlG77ubvURhWtnNRTCB
+t4TcZaqDFHwp/fCilOhk6tO7535LS8pv9FdN0VGY3lp2l5nrjkhbaS3I+TVc0ZUJ
+AygBtsUkyRS7fLLnRT8MNu5pRqUO4S0M67owo+fMAB1OYt7z556sxZbz2lKHt8Ry
+3GLngBGDBgm2/g4ONGt3h9DJOjmiXfvIt3oV0U3q/wlSYZabFcuUcIJttqn36YCk
+8pt6hB8v0dMdGsZWTOdDv8h0VEyyYNqNlTnDtpmOZcoQ+u0LbNJQ4xxD28XNMmAc
+Vwe2bChWHpym0Q/yHJ/9Hbj6HNlZW4EgNYGpbUeWECgbbJ5rwzi12itaiqPWs48F
+GOwweVcPJwvRZAvmeHAvV9JIooFD8YUgYf1dvIIKiHWWjN4QgPdPYVimUnt9u6qZ
+KFvFA8UAWwxCMsK7Wv16bpBWALTgWhL5L4UQsw==
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId 2583CADE368F69C80F58D34A48B2DE653DFEAF98 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAimSTVa3V3JiAgAAAAACKTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMzMFoXDTI1MDIxNDIxNDMzMFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC0yNTgzQ0FERTM2OEY2OUM4MEY1OEQzNEE0OEIyREU2NTNERkVB
+Rjk4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAw+Pdsh9/5Pv+zaOJ
+mdD9B0irVA17ZwPQ1XKmLZeiu79iCqN5MLapEqIdPm5rTRBX85AxBY+MaiKv1VuH
+RO9SgeIpVHrASKo0mv7LXRNfXRQVt8HTCkYVcZ9882Lhw2Q4cmmsmqDK1OBFx7Gy
+u1SgBLX1LlOWNKvfk0DPOIhh/NbfBG8hIBOm8XEwyckTwtWwGYjxkH2Y5geE1yvv
+6/6x/aa6oJ845204KvTyUQcKrpstYzW1QR+jHcqcsi7e4OrORFu1tUdAhLEe+ZDz
+/dtW3ZM8Vn4/aVgo78OZIN0qSPm2KEbc0f0eEVyo++7UfsW+WcnvS2PCGSuSrl1b
+9pNVCQ6lWCWYHLd/09HbgSiR65jTgS/M7Cogtt/bVheH68oltNnXIeO5k4eWGRMJ
+UMaVSFK6GjXrxoDZooKx2G7QadYjhuDEQDJBrQOoeYIhieYQT2yR8FRhMTnaE+Lz
+MD01xPHXO4YTyPRIDFBE4jdQo97ld+xAdR+XDHNADa3lwyExIJHMSVqzRxCGf6l1
+IjoYGViaVT11V42jnNlMH6KtFaBx6dhZq2raG3F/8IQnGh3qzKXfBsFIYaK8u5RY
+XqgwJyFUwcON1Q131KonfeEei4rNrjQjRg7sIMVy68JKskh+ncPVEhSR3yk2weUL
+w9i/wHMQPC75KE1LQgtDnPRm4gUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJ1674iOn+cSxt5v
+LyirFWTXAm40MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEABbdaIzd3vGbZQrrfy4P6wte/OrilLWgD5yCuLnqnJ/7C
+CuH+9/6kjg+SoQrLcw6Dgq4YIOCPnf6slHYJQ83yBx4waK8ZEcZSmCvUuj+HzeuO
+Ddck18uUjkP91vfHVQ17tKntDAeYhJ/OXyYz9dWD5sx4q5yV8UFE1Zo5wgLNNgWH
+NGjAhWVbczw6Z1HESWJemKgjnk237fgrGF3Jwilt4zniRlzZLIvD2XnX7nPMdWAy
+Gz9WTWgnnufRKua0X49vZO2bKTKgbHpOt4zeRFMXU/gDSCmWE8Ty3km67bluHkeg
+9+W6N/zuJfMENdRdUDVNGizhZ2zg1WprFUAvsQBTKl9NbqL9IRgHXfaBaSJWh/wa
+kYKtXvskD1YzmUU16T8f/ymdhUFV1ab0OMaE0oPGa5QrfdSHqn2rVb2L21Wmn3C3
+Ykwn0NaniE2zzjhlJGXCEnmJ23LNKJYx8IVrkAkEC4jl1JWdpRMQy4HVVnyJuUow
+7uLF2nuo4oMvBDx8vm98RvNiTTRnc+nl/FxXdPuc9izLMjkCBBz9l94HlBcRH4BB
+zHXVpRYgxzpstoNPSjt+P9oE0eqmG9A7EsybXY4tjw2maQxJF2DUmcGkYIWxZBFn
+E1fv2VIxEBUapJ9cGBc92zFqI0rUQxAEd1z9lnC4STWElKdo/xhpROXWAuDLZCM=
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId 32C6E576663FEE80D64CDD7B18E5603863B3BC8A 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAfR0YGdIcMwmcwAAAAAB9DANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAzNVoXDTI1MDIwNjIxMzAzNVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC0zMkM2RTU3NjY2M0ZFRTgwRDY0Q0REN0IxOEU1NjAzODYzQjNC
+QzhBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzmTBHyELrpLEvbNy
+SyyxKvSn8JroiF7Sbkys+8Ho6iBvzZpo2YeuFZ5C7qVhOoh0OI1omA6L2alz4ZdE
+OjEP/cv8vzNZIJjwiLnT5umigIEGK7QvA2QpyNEHZ1eiMkj91dE3VXfVO7UWWla6
+/qzjc4nhQzRyNiAVfpf61Dt42sB92j9c9vu9449XNLVhGw8mq6uGp3osbqfAxIss
+p+trkoMBDVBqrdBMiBpsP9DLxf6d/zDlCWTOYGVuvXLGbGmag1rovI8Ik1rWbL0n
+N9O7ZsgjOboE7CVdyhYq3NgL+0GnYeOBZGS5a0HVrzHGfVjFy+px9idWb7hGFiQP
+rnq4tczpKMTxLhJw/b+84sPCrNjwgy2UkgAQkSW3unAHe6GZAtYtousdeaa45UrV
+4UM4/2eaune/3cPbmu7O31iKSGwrNzOUr0hqtg7azXFf8Uw5wd3aJLBogkT2d2Xu
+9NbRdA09y1emVff1NJe7xKI6y9CapMr9N17OsUJ971CweS9CUrcEnvI4VDMFixnn
+3rt5SmJ/S6pQWxnAs/+49eklG8L44dWBSZ0uc2qcI00IqNv20s9XpXrr9hSJbQQP
+FTPztEqjdHFSsm6MoCH3Msli6/FDpteZIT65EZ29TkfzmnvgSuTbyhgZGficpzo6
+I5owVBo/o2yIoeoEAykwymVB3TsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHnwHV+kUDrHXj9C
+pbVSh6uBq+pHMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAMGl7OSBvKemq/ZZOspocQECRIA64HELmrgKC1U2rsCFR
+atVeeahgaAast81OUDJmhpCKeVILi5/I0wXfr5M0rSZE8rywDCsYc5vNTtPik7xI
+ts+oKPrVVV8cyOE6V2G6VuPHotnQ3j+c+kqxpC1U7mDw75ySziVpSXEge54Jkewp
+n++Kq+wbBqoWEpq0SGYJAHNUlv69jkkVTWmH4CAVyb/GeaRLOwar+fXXOgTD7Ulr
+TP7/S5ezJ1y9/4B2FYTsrxm7BwqKv/3092OhRtb+DzWXIBMgSSrFHWtBgR02IC2p
+9GTfjCe+XlPKcyW3uVBWfWp3r+7iB6RFvo1Ye//KutrWwSalhtR6iuzVSZAa36B2
+AxTdHDLkc29+vgY7FOlTGjSV7UFlCMXJz9nn23kce6DCrxkCgSkWj6/LupnDZKu9
+jfRBKeRl2C728IJjoE3m9CyzMstE1aDxNHZAEpVRNIik4pKE/UzlYCDTrfoDOEc0
+ctujbzS40qDrz+SxxA11ulIPUha6aoDsyTPEJzyoQDICPgn6uIbvy8L7aK8DVyDh
+BYrpGp++8LERDk998mndP9ilMezbO529EgnlFQfplVjaPZH8nNWswezTSj0u0bFt
+u7OWNx0MqzwtqdQU3FqtizVNt1F47WHwuI3y0thqFCM316WmCNSIE50fsGJWaUo=
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId 3893cdbdd873c4233315e1b13ba96a0d23cc10c7
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAABKybt6sVbTB3gAAAAAAEjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDg0NFoXDTI5MTIxOTE4NDg0NFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LZXlJZC0zODkzY2RiZGQ4NzNjNDIzMzMxNWUxYjEzYmE5NmEwZDIzY2Mx
+MGM3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2sCwYI4jrU//qGQw
+vfypSifHlzMU7DH2CbnLuWxiUlifulNHTINeC/K0Rt9VvMWsdpyzSFsCVuXj/YhE
+dWJME/w4WvSsnPQ67TN06eiQYXPaOvfpGMwDrKAyVMQIKSA6blFPLFgOIuuMLBt5
+DlHw5CL8ZZtm9fLf4xfWgxeDkYMwcxgo91hqdLlW3PHuCWSQVEDjPEssTS2XaTHr
+uHqUEYmBvzCo7gQiRsfUJVHoJe6gTjvAmB1Wg520nxpdEwQsNznLXW1a6sM2/vUQ
+wQ9nvAqsTXXmiKTO4oDRcTrmcVb6im5HU6t6phMmqjLJtJTm0wiLEuX5QDaLDawC
+JGokfwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUQU5gpjg5bBlPx/TCpWEQ+lq22fgwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBQEBE0
+EkmDybn9pa+121YALG1AFQ6mOOAcoQqfyKxKF45Y+Biq9PCndAQfguPF/2/uaRD9
+2o6G0sAVCgS1oTO6MaaeYbAHt9f2UoTEhQr6Y2Pd8pTidbwRp9Ry6mi/YMDHU3Vd
+KvPESaQypEpfF8DXrfjBBdFN/3LwB7XEH9z+JPdkyBHhiJkftFYIx4QukpSOinp8
+TqA3cAsjZI5VdmZ7pLARmGjSrwDTlqT5BPGt2GTr3XePh3jmjH53il5pPZdzwWe1
+y4sDXmCIWPx1WRiZblw75Ei7bxG6Ju3FINrpSxjhZoJ7reojTbvkzTD8hP87Rb+v
+2Hqz/D0emTV4f6UNL7AT5sFiTG+Hizo/3dVEHjLzv+03B6xFVekWYYPwkvrRBvMp
+SzDUvtru5oEJ57AK31UrYTwmAQBYFn+5JX3wE4zKFotrRksfg+1/4dp7fXLwNBxA
+/6nYF9YvEquMcWq+qIC+ioZfK+YHdzk20NeWYFIeSamLXAg8FbmndhZTzvne8jh7
+dAkxzSFdLjOqxvo4QRb8VlKQEAs/yYup/lxTioyGIE1c2QbqCPszQS2sbSPffqAG
+S6dpHfEe6TKAAAIbIqng4kznxZ61mY9qfd9wtxB69adiUluXLXEpU4XPmolM5tuz
+6AUxKVT7HfQX49p+3PTzKAeaDqfsKG/ffPheag==
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId 43325af5500406548930cda9a67dc78067b97801
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAABjRJA6P9eWDkwAAAAAAGDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDkxOFoXDTI5MTIxOTE4NDkxOFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LZXlJZC00MzMyNWFmNTUwMDQwNjU0ODkzMGNkYTlhNjdkYzc4MDY3Yjk3
+ODAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1Sl/b0nCPT9gkCnM
+zLQ7F3rhs3D8Jx1eH6SgJ7ox2eKJQK1VYu2CI0QqeUm/rJoVLYnWoVmbY5jywRl1
+AliKg27Gl5fR6Too9Pr0jXycd6tRpb6e0aCONT6PHzZrmncu8iGQWyzPs2mBl0o+
+RWDti6WWvs0DJa88fy6IZ+9WFzRBX7/fvhmo8v4YeCZVRrMefD0KPwt6mycAH9fV
+Okm/bYcAEbqp7t9xEW5bMbDuTqqRf0DyYAsgwC/DVkNj/kR4g1u/cqE2t2OgGPd3
+3nu2VMx9NutvABpCB645MjyN+UfdWffKSgJvlxggIZTaKuNXUSFyISgt5mddj3WG
+8M09KQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUoR293aI1X9HXAx/ThC9tOKoxyPwwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCTxttT
+BsmetJOxiy1sF9wB7hXj1qXwDhHCAdvDFAQxmat9QNrpZxKKjRwn8ZDROTfRCroX
+Mue7wdF4yF9dkPAKMH59sEqtJbT+ZE/fxEs1GhPVkRVQ2JlrH50iyh9v9XQ7rVRM
+3zI3HRjxD7moWuJkxKhx5/WN1rE9bX/SwinB8ntp7SI2JY0U9U+GhdyY7W6c/5cH
+cqAWgcOPhvar62tnFoxXRd9GbH5tolMbVJdQTqJh9iNGsj9K4PbJAOt4I9A4yMVw
+cewDkVBi6Ae068iGQyrHmMnAHkjchUU9o+I7CRk7tPiTWcIUPrZYQvu66hKcmUGV
+RW2bEnzCEsY0jjCFl81NxKexAOvbz4vckbHBfrjO9JDV/6QtiA68zHrk53h3ro3U
+MRgiXNuOuCqgn9dBNuR3Pl4YCzT2OCQPeAVvL+YhUC4mKrsFChoWW8AaHPq+P7Ti
+tYqyt3mUv5JGFlUAlQHkBIFqQivQtQ+Thy6D8VUNB8tYLeK5gY2az54M49kKU5UN
+li9uTTbhCipMnJQYGrrSdAQkFNRPs+oPVz6s4UfD8s/pz9H2OmU/G3e3OyoIKz5w
+L22JJFSpSvy0R/hmpNoQadHFfjReJpte6UUNtsp46i3+lmqXuk5yfFkJec0FGJDb
+QBu1xpXV6I36GuPf0p6ONUqsVFPsqNAmkqLIZA==
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId 4A769EB5D93C833A5500F1F281324EEF03FBEB3D
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAFs+ZhNWartvlwAAAAAAWzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDYxNjIwNTgwNVoXDTI5MTIzMTIwNTgwNVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LZXlJZC00QTc2OUVCNUQ5M0M4MzNBNTUwMEYxRjI4MTMyNEVFRjAzRkJF
+QjNEMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0COSzgikrMWzQT3x
+S7EwPhkp+bdROT3HkN7knCLkIEyDGu3owxPWZ1hBiRo05K/Iv5UaARWAiN525kWc
+UWs0yM1IPYLTNJVEGMQGoZRKsweHFQB0q5V/BK1hD0u2xwaCblBNT5Zd/+Seq0xZ
+npNsD4TsUPRxNST+xbHi4odxrUizSwllXexInKg445vdG6y2YW1PEvdwBMi0lLRP
+wd1Yd7eYo0S+qSBrqTSGhBgCal4vM8RCe3CAcLxJZzq37MGrMkPW7HYt7laxKT9g
+rLrWGye54/8ig4Maf1kvCYbvtWapZFIMcpNilCioNJqykqy6zkHo4bqd2RD8i8Ma
+0O8dvQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUY6qiPN6id7QR/S7xIitGjOMA1kQwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA8jdxR
+LnK8fBk5CLC/9cPMw2TjuoiJl57fHv+9xajcDFCI3ZXOBIhPu2S1VXFFJNsmRRBU
+bE+Z+yeRJEk/X+yImY1rkb5fBUbF3QMkapuXI9zkYyu99LnMd+D1jzbJn5+DOPdr
+uzZKCzciPcj9nOTTLNuvgMOeJB553hT5H30rgHhEad9nuvgPeUQQdNoA9MPjIE6R
+j5IIYCO0jwFvok3njCCZdtj/I0i4KqCSukCPNLok3g95t4xOsaG+Eg3o1JKyOIas
+PM1Ggb9aItbtzZ5v8X/4nwRHefGY9nfD5h8RxXYIuHVNQAi3E8q2u0m+Su/4vnBa
+nRHQkOZCZWB2b6770YohDMYLDjPhEhnTeH5DpWtZdNwHhNZvoAfxfFNU+vxYejb3
+9AvTrheWdj5sWUPKc3YRaQ4e3PJIusOvUi17PDhc6OnNHYi0HU1g48vC4CI2Pw8x
+sUaVU7pLlF6IP6nbw7WkVFXP6jSWMoChJsfMiyoiVe4wby25c+Oep9gdwqMyz9hE
+zj/icVs/lquzqw7CvvuTbMcsz8A+0NKrXGjQDh0tSe5oeNlWR1IJBEw5FJxE37Nv
+PBAW22lBVSKtPybXHcPZey/PgYja9Auw68e/yBum24sBMfnUfxLRAAtMb6FVZGUv
+AMei/QCAzZPCrTdFfQpdy3jpBw+vudKm+FnuHA==
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId 4A769EB5D93C833A5500F1F281324EEF03FBEB3D 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAiOERLFHg721SAAAAAACIzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMyNVoXDTI1MDIxNDIxNDMyNVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC00QTc2OUVCNUQ5M0M4MzNBNTUwMEYxRjI4MTMyNEVFRjAzRkJF
+QjNEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApbShaE2l7gbW2Qt6
+3DZVqZ3lRszJ0cp+YAgif1/SRe32EjLv0VJ7xlQxIbohdV7UlzF76y7jJNPKDIps
+ImBWjacJ0NLxHNk5cJ+Uiv5t9IDFfpCMV/1ODmTlJE41/Keo8oXqqiVh1N9/FJ8B
+YcPKoVujKGZIWpGjlyrVPSfsyW48cAS2RX6Zf9bpX0eLyTLYDcUFfv07+Bow6FPQ
+Z/3jZkVbS+6NTY4LJCUrPYZTtLCDqsWPRMVPO4+ifJQYZUBNKaio8PekGaliIP2C
+K2n8XMzza75kx4rxsEK2ZJJ/WmW8hO6IydUqCc9BCnUvxXAE5wlVFXGwLu78vqtK
+OFpTLc1xwscfd1UkEOvj7Ok0ypGpnw9wHAZcR0E/FwhB7D2NMzFIeQ08n/63G8F5
+4gZ2X9at6GiL5Ithlsa0lIUQOj4w1Lv8aGfUtBYpudidPbLQSqI+aaiK6/SUXq6g
+Oevwj1gecDCbJWOb4CEiiuFxWYOCoS03YNOf0Xcjmdtrk1JJ08Mi5fDdKq7yNN7n
+3cAjhomyWINITzGSieX2GatXrJF7KDoXD7NFRoWjVqjVc8KbfIuD2d4lhgNLf7YQ
+cqqsy4iLP0Y4RBQm0w80eIeEkXjnQsAvBAvLnX1/+gJfzmjUAqxLrpJFOMLJsUsv
+jW+9mI2ohOpm4YXFTMseO9MAT2MCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHuym96qNtIYxqQg
+Rprt3NEge01kMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAmuNNzRwL4JSicpQCyzbLPlqxUCoorxetD+1BMjmGmNE0
+yiWy4ylYJ4LbZVf+G+mydSEgP56hJi9AVc03Ef+ZWQezxwX3RVQUy0RfZ68/N+Vn
+oGelkjC+ok3sTFg29sTLUZ5XIqovuKsgfs8K/xFGFTxwGs8BOhypmR32XuckqcGg
+RsQMHi1D7fZn/WGyWzF12VZf2x05F7NIWu6o3UrQsKSeket1K5i3FOjYqDEUWYSZ
+xbuZhiScmqZJEwO1++2vE8Z/PrVg2vHQarkKb8BEKB1U19kPA8TSLxwuIgX17j3H
+4awqgNNhTh83GkCJqbfbPfYJRPwhYkb6L4XupB/kQ7tG5dGVGRtKuFyx9TwWQi9N
+3Dld3n+vNDJv+pG4oAzoEYkRMoOf30MRcXoIF7AEvgbeyGEnHYCvuQaqk8jZ5RTh
+QFzSh90r2IrqdB1XKg50aI/BPLk0g013/uvu2Ec8T7SBP9XavRNmVmSL3Eq2s92p
+EvNcsKayDlnNDVMAebGwVCRW0FJzVWlSbE5IAhag5rO+/tisKL2f2Jm+nxQDtQvi
+y0MI3rtOykhySL1cOmQAhjhyeZ8aheP+NX8wwsWwzHgdFc1Qb0/K1YCduzOvQXdh
+vLvD5MQfr0xKV13r4Gp1CVoOIdt6fFka9cOvP01Q43+W1FJtszJyVNrnkuTad90=
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId 4c4b4d648908e45bfe5a10d36387a688aec1cf78
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAAO7cJBmW3TbggAAAAAAAzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDcxN1oXDTI5MTIxOTE4NDcxN1owQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LZXlJZC00YzRiNGQ2NDg5MDhlNDViZmU1YTEwZDM2Mzg3YTY4OGFlYzFj
+Zjc4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvdhgAKbS9mrN7+yF
+IU+Wqw8RlU+75L04zpIY2p6ASwRzo8oV3fUwxMooX6CKzADrCKypLRd+T7UyT4hg
+KAtVS3hvzeaU1FZD4jm7/2CwevFtDq6VqjgmAffSuqs9ma5hCG0VZd3ngxrKvFaD
+9s8t4a094dusCrdVyLuCKMMy3GWFSsg9913qSykJClgFsEBmtVCR1F5RvWzZpCMz
+Ygq6gEshM5KzW9JEj5gcfE+0gkQzUNhvk9XM7/5qdOlg5fuCdFhvh6PcIn1Z8De1
+vzTN3PMYykxKNa3ZUSxL7FKZtBFycKnylHD+XKE8sbNoBm59/LqauQLFwuo7YfeU
+R4MUQQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUjAVON+vj4wf+vsPQGv/AbhJfA2kwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBG2lUI
+0H5ueR/eFXf2eYeS7K9gMbGjz+O3tDOrWCDLuk7GEOD2TaJv9Z0FeTRMjpMsg3Sn
+JWa3oRb6xjeA7l6ojhNh9nio7EHZpiK6vECCvI4lDU9hjLdW8dMaO0FKOLyOPeYn
+lI36RPtW03pEjGiQ6tcwF290c3QF5WdpzAMIqdL5RlIswg1XCdEHZ0XyfnYNOFZU
+X7rXcEucmTzZi5GcWrt6bECV+EfOFKAs6eyI2uDy2bdpxHoGugwZyh49YmBi7g+t
+rRfMwA+8j81EfAluC8upoju/Dms39mgaZYZjTAo8/HeCngoMvEuSUUS1XU9Nj/Jx
+KXWZZwFmFEp2jRA1h+8d7XV7pWrq5aUt7u1UENhyDoiCSEa2S8e2IZzTfaxokywj
+r7QVarYZPp6Ml8cYVPCLAGZLIOVFsUjLAUR0k2O6nbkSKUtH85YSsdpTA9142Kvr
+SM3RNda9s+cOzUW+q55B/tK/WciBT7NJj3kfR7bxTi/hnA8qDNntrhPySVrL9e1i
+waffTQLhgQeIZfP0IwnksKMOAPqTGnsRW1cOE3D7/2Rn4tKDHlJmiI3pLsy9QBMK
+SytoEdHdxzBLIIbo5zXs5Fh6trszEWdqh4EWnbQOvtYCSyJTEYQ3VEL3guUqkZoD
+4Jkcp2rIk7UORHYN47BqS+Z+GPMONt1D9MnPJw==
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId 65957CAE12EF1B1A875D951A9425B1BC1D2B3BD3
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAGEt23sn6nf7QwAAAAAAYTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDYxNjIwNTgwOVoXDTI5MTIzMTIwNTgwOVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LZXlJZC02NTk1N0NBRTEyRUYxQjFBODc1RDk1MUE5NDI1QjFCQzFEMkIz
+QkQzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtMxcH88ZB9hblylC
+4fnPFy4uSMYlVNRx8gTi51iiCxM5L/783xvgae9rdiGP8x0BDjBNHHm5/2m3yGoq
+0qPv3mW4KsFuoZqFe9LSlmsXUlstCS9jqulm6mBACX5jmHHZdfZD+1/+3vlV4P7Z
+xbLqygcIjqO/659oOXP2vvlZTi3eA8QSGMuowhSDKWkNDmy6o7ntBGZUThWW11rp
+x2k2Qa0WpIu7kpn1oH6PG/EulygaL3L7vpLZtEoFzYiOq/8LksgaDhEpyvK8wAbG
+mGWvkwq9PdTlnCSZP0MfLhdXNrRORENmKKzkQGDCxXAi3gLp6N0OsbBQRI8tBH3x
+JTlGqwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQULGp/EUZJ0nsBzDQeFckAsErFjfMwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAdk9gc
+Ou9GblaU8RqXTg4qyP8WqsSWh8tFKuL5vNX+M0UnwaNXVFuCQsx5HDH9cYYa9n/i
+wKeT8Ke43shX4krqLHBjigtKOvUXzkYFxR9bFgr9UgZKRkVnDwyR4v9cGUhwJkeR
+83dbKUymaQbJoi9iEZv6UkqwgYnQjGAo4pKmmvLy7B6+vYiEX89EcMyrtlpr5bYC
+420/2KFnemq6QG1FJ00HBIqdCk5OOaPAiHANXPQ3V/hMkZr1LlYHgXtsUYiOetb0
+cDUP39TwJChkKv5HWbUtlQpbWb7uMKMySE6+8SujCXkmI3lsAviXC6U8vraNYSj3
+UzHuD6XCd5q5EUq3WgZzpytSwq6nXK1qxa5tElSkmDs+2HeCT1OYDm71kejFMf3x
+suFRQa91oMLul8zFagZ2YxHn1GYI6mFjg8L3BEhPkyOsfRAAYM9GuWOfzdzdxHYQ
+pXEUtvF7BOiTo+KsT7NyjRTh2LoMb6w1divNVCU2hV8dC97D9ms43GwbYqnvVSno
+j2vWogH+85466dGCbsxBbj9NstrfYzl7U2TiqANslKCxqxXguZGN4sAlirYqgQx9
+ltdpSC8fvvs2XVYy9UfbHyb6QdmJ/zzlJ7FSaJ/VEePX0Y5rMyaY+efEGEU5wBB/
+e7UQ9IHxSZv68/t3W8XcLXafVTiPwSYlOzL9vQ==
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId 65957CAE12EF1B1A875D951A9425B1BC1D2B3BD3 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAitcE/GvRDoztQAAAAACKzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMzMVoXDTI1MDIxNDIxNDMzMVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC02NTk1N0NBRTEyRUYxQjFBODc1RDk1MUE5NDI1QjFCQzFEMkIz
+QkQzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtBFuX51q/Cfknh7L
+cAmutBM6M9SI0ZMdSDb3nC05Y8Ky4isGRC8SU5uiAB1LqQy4JtaQkEwZHG9H5d8O
+XL6cOdy4Il4Qs5W5AZw8et5Im8KyQxFE1o6qVw1vmMrG1vH/hXp9t+wG5hl1UTac
+nqZnqoZ2887gQ7VodIRACfTHSqLLsWx1SS11E5hle/MhCwnLIRBuipDAUnobH46a
+PwSsnK3yx+Eio337nEgxPdO2MkG1kQnf7AifCUgITdGu1qgDw8Ixv6gGBEQQuxCY
+nVYSb4jYfzy6M1Bdmad5/HFJbrkeC1EwzihTKqFsLioMSRz+sEYePAs6X1P/XOQR
+YM3uMMN+QR6yGchXUQtvqeCdN+JJGwdGC5rE88qy2T8O105MipG4T6U9ZU6t7Mhi
+l3Mu65oikYQOIO1/+tgzQ+FbeGsA3lgO3HgWCWzvkEZ+HemYoxXw0+E3Wts8RLFS
+i9FvO/aht8XK+Cs6Iflx9uALrp/WE1Em5TUMkm4A6Ma3Pt3GNMCG/CWxYIsLooYT
+8oVkoOg0N9oJKewMYz3B6yWY0jYLc5ABHBF2JUeCy0LZSC7EXwV8Ytdfyi9gs1PK
+NqU7x8NRxpoGCEnGbNPUHGcEiUHv7Yv6mk4Him33Y94KrocdwXHX9TkO3dAHmOA3
+pFJV79+xgmsxAK8fdKZ6a0417ckCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDs33rLBzVmOz72g
+tm1CmV0d3zHZMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAYfjMWysNLihFEF8fmD533eQrvUwaUG3AiHkFKKRWQuIf
+r8TET0Vq+9TZmNUudbPygdKlKKuDKRlaHnY8xYqD0TH7jsolqD3TFSfZhbXizJNg
+JXx1GWY5mJab3qPMEKJiLCEakkGaHczyHk/EXa9FcDCoSP24w9hyhHB6mBdg2Wjs
+2CdR2ybnI/9NrNsAPVTNavdmiRuDw5R9nmJeHiCP5QvWVwWhz+dXzEOkSjQ8S/mT
+j8sVZAEBUjQGT/KVto9hj05oMNv2DJiY2CcJNWAF+QS6WL3Q1iDvzzJRWnUcuUNc
+jXUeiUZGO9Ljf4MHRS2tqLlgjJNu8JvRhDnasHEgYMIldqgkrbjihSvxAoOC0aDx
+tAaB9QkkuJC38+jM4ivmmvAg7SVMrcxhMHlADLr7N02++0IKwl5bg85RcwUVztzr
+6e2duj76XT1KtVuXsg6KafhRUXL4iyaZVkg53hdV8NiIdqxny+Cn3Iz0ky/hQOU8
+Yyf6PP+DXXevu0HTAv7TRnTmggkt68cqrQWlIhdcE6m0EsweoS38BkuZ1xXiy+tl
+pAvoVIvmtsB0VDDSyLRuaevR8QlZSPZFy4/rI9/WacT4EfWQXa8TSej9+YamI0Zm
+XrdUQJ6XYXoQDa2Tds0dQhJQ4XB6Zoctmm9bk+VeKHBq1xMckl6WSb5ZTRPHVw4=
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId 7026D09ED935DCDC44D84D7DA75CCF0ABC1FDE0A 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAfdKp/WcH+r42QAAAAAB9zANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAzOFoXDTI1MDIwNjIxMzAzOFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC03MDI2RDA5RUQ5MzVEQ0RDNDREODREN0RBNzVDQ0YwQUJDMUZE
+RTBBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1JGM15/ekXdzozhJ
+1idiPmj8jYMuKheY2x/V0AbixeD3ZH3NdC4tnbGaqycNPKv9anOgV+F6CMPMiqa6
+pupFIF90ks9fTgXtk00leZ8LRpy2WW5uQQPLprJH8VZw1NQS5A/8XPYH3biCGJYb
+AlP9bEJPmW92LUqk1rOy22ccqkhAMqRscksZn0iVts4eWv0oLev4xv1N6Uyr/th+
+IZaj33lL3DLXvrsvhUIylwV47sgVwRC1KK6r9P3/omRCh+oWq4k8XvUvJ0LyROtp
+Pff9aMF1MD06dMkLIjlX/pOi16x6yEN+aqZlkFx//WBGokeIADaf75wTl1bj7IW5
+UFwQS9zwoHA/FjyIQ0RYJcQpQtO0tpBiIXlShzKjrbAEhkbaTs3rWMP2ILUyidJD
+DO0cbFFWWBa9d+AjAVExlf5EYRB0YoDroUSnrH6EzmU6US9QYUQBoaBMHS197RKb
+48ad4Bum48F1mQuSvRq02uaUr7loqr3h7Mu4Vk3aS6YwMWQVq0kD1A/9XIPOgCPf
+CMnFe1/oIjuRFaxu2Sj9W0fXfBFicJCKoSAc5j65/Hil0VdSfoTbfg7R0Jy34Baf
+OOhyE9im6ls5kPoh6BRD48VpGiF+ZViQd8nh5pK+HJZM3nD7nx2CyyseEY/O6F0j
+VF5f9Gr41M58fjZ4WIEEKrt4wYUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAQULcqbIFTm/33L
+DxPqf4jF00bvMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAAjbCKvToJSC5UBUIH0J/9kf7m5FOk1oHkDH7YHsp/3Pk
+7gvpY44uKumVY1uNK/ko/IrkFfR/aV4LNVuV43gMUC1gpjzJn/sxcAK+YOCU+R4H
+nww/eKljrh4KQ3vjbqRvAVcqAsIsW7QaCy24cKxqnomiWy/BmV3v0u8kwKYD0QBh
+p5CWzOEhiVdObXl+0aXy8aOb94HSC1AxkU3CqdRB2ITMFoxcO6oWPT95cds/D1Uo
+uvYWgtXahU9Ccra8c+iy4OZqNKotBAtUNa2d52sCxDQo8DDdtDRzWv60YmK3F8mL
+wIKTMbMVT42nRKeA4AkYZiGboaf7M8U9MkJXGJRizra+TJ6agrSWyU2o/ZYgcKq9
+V8+x8rs1Rkwdu1A+VPA7UDGLGdFQloqqmCyC2Y56nqXyea2rv1rjCYo7BLDBXTo9
+fNF8oYnwfaDP5v+IPg1OqmZaJTDe6W3j5c2lZC4sXK7A3XW5yWY33JGyg3i5U9/r
++xI8MSqEfSQdWJxVqxVeueCtUqWbopTFsScgOu8MuNdGVy6DUQDglL7gCFeW4JZS
+FG0G94kU2CmvCSo2gZAHj78X4FlM8Fr1GJHDQnMZvh49tFyI8Wv/xGJNSgBquql4
+WEgn9Hf3gBJirY3W4CMjTZXa58ZVKdIUBSIUDMq9b8Q3tVIijlYIcUYK559Dcwc=
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId 7568FF26F37D11268567B6864EC72A08C818891E
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAABUoAw1d/7kjYwAAAAAAFTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDkwMVoXDTI5MTIxOTE4NDkwMVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LZXlJZC03NTY4RkYyNkYzN0QxMTI2ODU2N0I2ODY0RUM3MkEwOEM4MTg4
+OTFFMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxNwtpERAQhxlfasX
+nRuRVaWdtLLMjIBhziCTzmW0nCybZrqkqxBBzo31t9OqYlANmo7r6wUYMXDteSFO
+nZOaEOXtEtE9L1glxohpJ2DQjEUTrn/4fZQsoBKttYwWjoLrAI/yCl5GjBxyig/q
+JGNLTDiYarX3PhREIXccrws+tBKhTB+KOXlSufDusk8+cBtVDW5XzNrBV/euwJwx
+Mw+lkq62nynp8rvYaO4XnH6oPaZd6YEO7f7EU6AjEtUMfyYquHQjjQif7TKN0EeP
+9faXp7f5jYVdFjYaZQz/8GB3lyrs0+1ogfV5wrjW9v+PaZnMMUYW5X6r1J5RcFze
+TQKM6wIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUzRxe9GhIO84Y3yftIufJKwcpEFcwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAO8jgl
+SWn4LQhRPgh7K5TzGgZhhkRxAJLUemWVd8ItI24rrhN7vWDEdelZbOKc5Guro9uK
+fznJiXogRSGA5W1updTpHODvDX0M9Kg9Un0A9kSlXry+TGP7bRpEI2qOClBKgDcQ
+f2ePum6ZWDMjo21ISV1NYtcIpSzNlUzAZzT55roHKEmsEoCiFbo5tcrLrRLyiRnx
+483+h88YZU6FV3aVfTnkWRGwe3c/M6GvrMdk53jyAixf485ne3EhHVOTl5/JT+89
+lfk49SiS87KjTbxZIIksW9hKjzSutNd/eaRWYWW9M/FONwAfu6/Kyiw61NDoioeI
+KSFt/MlaAQU0m8B/vWPz0m9/E1w+QEKE5F8A7/nU6p+EpIYaA+OxfsHkHZwRqTJM
+psuuK8TSrOC0ae1P4WVLe7Tuis5fPSqD6fFM5lSalph2WbRZSNlxOzolPa9dctxG
+iHJEOCoWBCrbwDdNEZoCMuKNUydgt/+zrgqBGjFiUL1RkZpwisTQWnRUSSWFGhw6
+vpVbH8ab28hXAurG2yA03BcI0XkOdRcmqn146v13jRfQQJ6iSwushQPs95Og28q4
+Qr4+ljnDiaNOubSRcuIZnVHcFpo+VmXOzoEbuhj8bPWcK46oWKjxBqxJvuYxGDsb
+qDPd314rkEbKcVwZmuJ2HVKz5NXRpJUDFEQo2A==
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId 76FA7DF0C07733DC8CE24E8EFF196D27788668DA
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAVRUrDQQYItr9AAAAAABVDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDcyNTIwNDU1NVoXDTI5MTIzMTIwNDU1NVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC03NkZBN0RGMEMwNzczM0RDOENFMjRFOEVGRjE5NkQyNzc4ODY2
+OERBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzaK7q2UfYFM7lv2H
+xhzOD7/aXf3QNrO5b3mFKRgfeYuOCOQo21jgCsQiQnMdSA1yo9zb07Dba8Ltvwcq
+OimgXSfwfFkv3ZazTHca0KFZ5LYMLzDBhAPBAmNglhPy1sQ7PK1ilNgPyJkZ0U6l
+nJxJgeeEx0x6klTLzIybrYJhFaunbyFZ3NPGVyCnpbg/SROjjq8hqOMH/iKLODrA
+/Qw10T4kHxzKNNy2TCObwihT83i014KaOJUAO/NYjuBE1snibRhiVc+Z1YTGRwQH
+trl6CB+e8JhvU1FBWKSPZBdgnctz6QYoeXV7JT/c9dY+B04PoIvbfZGzpn84cd/j
+pEDmcwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQU1fONquTrj3/nfTVJFaz5dIZwPE0wHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAk4EU1
+B/cv15H0j2/j+1VSveA2yhM6nMiEZR+0pMyQwlvfPveHUUvs71RfVa0T8FC0w15Y
+OnKuS35L+NMeLJ7yteAJkUU+sDwaW53PvynTFyTjGE1JMVn5MnmUDvWuIzAaTpij
+Bj6ZyqSrvFXvdObilu8gSmxKa1F9VgY7pgG9MrAy4Vp1kIQ+YPAqzHJph4Y02M0b
+K0PbZCVeO7JIJ0i2V0vwt3cTpu19c/xBwFIuDTBWTQ96dz1tcgpw1R5w6zXYImpv
+xIosUJEBtM610XR9UCLWOEUp5ywaxxhmzUbpTQmkJKb2+GNp3AKPkLyxlHWjHcxx
+4Xwp/t4eG72Td6vxuYrx1AyMA40W0HULgVFniKQtWjXyiJPTcXloVMgJAgwsmtU3
+DSMQ00G4Ig4WKF1fRR5IXoT6+w5V0HkCu9BfrYqT2C3YDAdpS96NZg0kYSoTrTq+
+RptfsUEm9dLwmIhjEyKvatqfPU7t8ZxqI4Hxp6ISm/XPWm763Fj74A5qmDgnz7bD
+undmph/IXSA0B3yj07HaaTF6w3Wx4BBlKbF3xCIV+K1wUzhJRXG5FZvFjuFYSWYb
+knlSmAlcUHLh6QMAsHCisgs287e/2Kf2hAPrBl18ERiCy8JT2ygifRynYWu7Nswo
+AGSKxCiAvwysM08MnGzSONV5HoYSO2/j9YrMPw==
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId 76FA7DF0C07733DC8CE24E8EFF196D27788668DA 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAcEFaX8RLnJVhAAAAAABwTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkxMVoXDTI1MDEzMDE5MDkxMVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC03NkZBN0RGMEMwNzczM0RDOENFMjRFOEVGRjE5NkQyNzc4ODY2
+OERBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2AnezVVus6ElFh35
+b+fAV937USpGCJ8msKU2AzL1v3FGHoXmy6ERQFNFy8nAOv7T404VwJEdLlovQ1Xe
+N7f3LIAyhjCuE/p8QL2+TnaFwKkZdpARL+NYsnrA0ng1RrPwGoeljax6Sio/P+ya
+Y4F3bFUaC/MYAuRQpv/HdK1fUsFAZpkggpOfSrZglgx3tmIa3gIFSfB7jtyRw0BW
+rB1cFWSlKNKcyfG6FDor4KuZvVol423U1M/upNiM41PljK5HS+YuMdn7ZgPY2hgl
+/xPVUJD3pPgN9o97YaiwbJ0yeWE79GeyKjc6VCkSIPlXTvAegV30HXG1RAnD40OZ
++NsebpaDwv1D7WsdwnkyqwFrSsBmtBndDPPU5e1kpzxymYA1eeFEkZRPVZi3/7D2
+AT06fYbMxb8gNkyA/YyeHadOYKpOqOV53x9oMvqnz1qJgujwcC8Figr2EvEhqN8V
+yy5M8Za708aNigAXbxWcWAvOO/N6vmz3jc2A6+OrulJyCdZTNf25YIRvO1Uot9+V
+MAXKnsE7cTPh1ZMsC/sQZJQ4L5BDKZqPr6qh2ncvXZj1rDfPFjEwtXXR0D4+QNYM
+N+JObkFG1aLTlnBYPZZOkWgbNQxlMyYk3QeE3g/NUBUxoioSo4zq0336J4+mLcvZ
+yU4AnI7tU8QzwooWg5r0rnlvUWECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFE3XTfS95GHBVgF
+7xiZcmzMwVTSMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAjrU8R28/PdmKm4S+XPQKB2xg3oFgrcr0GdHsJeFDxH1D
+pn2hs7FF0AbqkSL0SwK1fdmX8wH88LvAC37so9OoLwv4/fz7sAoKZzQRbsZlBXSP
+f8ALN1xk1PVximZnwCOCLcd3p5LicqwOpwDsJo7hOj1n/10IocXgGQ62b89wR7/m
+LyJ9rz4iLxPBDXL79VKjsDZpzdEgEYEeuKntT8Xjpzz2LcqDZ1+abcFAoP+Czn/e
+oNsrjp+k0i+dacrhRAEoM5PvRze27jDDzUdv69i1ojY3JMfM0jivexPVhivRpmbV
+8qhZnnOnwCVSSFDVxEFB2GI6GYkNmExGcZHMIMX9sWycWjwXgMxYYetQnu3mJU1B
+5j1/cGslEsHzaeelfHRKvl4T29RrvFf+zZEgOjegY60g4UN86Gpvj/6NYAGym+1C
+JsXMgpo3HPelD+1pIIY3DOzOxv2o+k7CrJam43kzCK7hoWZe2kwdQoYW5D3dLnQc
+dTRShdNjOfOfRnfpecjasNNlaktcMeTjcTbMpkjiH10+N3HlHfPHZfI4v3ltQI+Z
+hkfa/+TDtXZIwK+cYt3Daq20u4vZOJbOaKwpPJ2Xr1R8+SFhHTpQOS2giPl/IoYO
+sOHMXaK4PFo/XcbeFhapE1tuGA+l37+/p621pHIIbC8C6a/Flptxf4a2bXaE6/U=
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId 78A409C457DE6926F6DF42C6114EB7E56A9B56E7
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAAkt3xPKTWp2iAAAAAAACTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDc1MloXDTI5MTIxOTE4NDc1MlowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LZXlJZC03OEE0MDlDNDU3REU2OTI2RjZERjQyQzYxMTRFQjdFNTZBOUI1
+NkU3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtlOVrc4ZONFwof4f
+0fOd1enhLfiG3tErY4Y5DJOu8P+Ey2SWNS7FCv7ul3x5BDzAqteVMHXpEuGiSDZ6
+UngTT6pu/VcEoI+XejK9LH73CmpYPcvSDHDEUOtpbzMfkaFZbTlL/pOMkxezTpHh
+lLLUWj51vYFx7mDtNscIJ5i1bzg4cLKNVNaF2yFq87VquHItJfAV/2ErYRaG7txS
+a6xEPzbMIeP+5Xpfw+D8LV8uejSqJztIArxmlURRhk/AUWQiNpl4UwuiPon625Zb
+TCrvtakq1Q+riktUpZENW9avAs1/HetxGtWC22eSU+CdUAZyaH1izYBZ0ixPNku9
+9b4JZwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUaq4mLbZKCkjBqeahYc6GWswJHyowHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBKZCCX
+YacQaSPuG4mGsY490DRGs0h1CuBE8pgn/edWb/BAc7L8Q3AwhKUyb5ixH6dVF+6y
+TKHXzo/4QWNCyrc1W4atHTJgcIi8MGSWP2eI+y68y82ZFrTprmXc/hMd1+OAkbIq
+U7rqrKwLMbXU4BqxRPBHevvkKSEABeL5sMyniVp1onFINNXs9iAd9bCjmwrYQ5hW
+k9d/TJ5r5p7/o2Jt9ePQGWmjk7za6SnkEghtBTV9IzriElOOauC0Chve3XAh7ZCJ
+0998bYqDOURuH++CLYPxEsg89KuanUUZ1yYOhjQq/CUV5NknCejFLNzlLEgy91uw
+hLUOk8Oa/6lEJA/qEPdXFfhPmZTMJxiH46WXxPZJk0L/uniElJmUqNS3uz1XaWUn
+LLpZN6Hqq3xU3pYJAEucNihAVxWscH/Rd7GkB//7Si968FPFFhCXsZ9S0S8FiKf7
+k821wDvdpNLs+Qn0J7wUPiUDFxDeKyVGg+u4iyPsSJxAzJrychZQUkQ++dnDYQp6
+23E1zmtPyWEd3M7vonHWMvrp6wdm1yTrMKWimXFoLofwDRtS7bSc3aQm3WJgddlF
+Xy+QV8u/OGLU7GfSVtdWE0mxSlmtOknE/yhDg1fJYyHmi6Hj99wWi3D6Bp/bklqc
+tslhu44kwetWQPMKyLC2OMdnITqYbZhzC6uYQA==
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId 78A409C457DE6926F6DF42C6114EB7E56A9B56E7 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAic77JyLcyNGbAAAAAACJzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMyOFoXDTI1MDIxNDIxNDMyOFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC03OEE0MDlDNDU3REU2OTI2RjZERjQyQzYxMTRFQjdFNTZBOUI1
+NkU3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0Elw+arL5oUlDT11
+GifVBUIMBeo3EcBEtSjjJ5mIRsEt8U4CRu0UO/mfrayQ5ZIyzt8eEpoanksSYt35
+3bChuUtiJ/EmM5Em1MUZTx2yGOUbNmhgrLh3mPWgGg924UILZ9SgHKCN0NeYqFnT
+cdzqiWySeYX5GSQlpoc6jQmA4PBpJv1JY/4sQxi7Xrb5J68osOmCflH/Gt0Hhnkn
+YEI6YXv9y1/xMFcOCy3nYE53eCxtAFyBu1+9z07gyzwBRdbgMrVTpqK/zXovjNSN
+Ew2shcUCmUFGwjRwdc/nI5gIcmHh/EdEdhDI1jMMDU9bfdI/G3iWFsO23ZAjmtlO
+6GMSgzmRG9189alv1lKK/gqFZtqVy76edNZdo4lthTzjL0iNLVsV5gnxxwsVkV5w
+ik3fGbT007+NVOg5E2zpSW09SktCo6D449w1nnepqKgzyyBIT5Zbft9f0P3ivLnt
+XAQAjaqPALNj4q8Hkbdkf+xhHSSN62fJp+t24zXYuzg/kviglsh+hv1HZKXnrVtT
+h3CTj8IN+IvVHrSNX4hCD+axIbrRiMSlnbcCbhQB2/hvziuFevEyR9BAW+RCOumA
+t0yNE9e6yst/mhL/fHZsd49KLBLYc98dW7756M5ikQiVSieTAzD3boZDw+a3GbGY
+5ZBr9P/LAJ4xkh1NSPAsoMf6RrkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFH37korFgKQufprF
+sanJZOsWbSa4MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAJ+ZSDg1Jei3/hGFHj0JtVIR7a6Lc+MF13gyR6z1sI4HV
+DReqbfF8QY8z/zY+26y/U4cCy7BqgYcOMQrB4s7rcx1TZyga946leUmbAwkdiP+T
+HU/Z9AChLxfja31kXZ/iWdgP1IJxWbXPJN2lBU9ODnIGDfUY+eFwvvT0E2xKIYhI
+3wb2xPEv24N3P+qOx7pf+wR1iFyXsKb3xUiO5AIZr11a3SX2UZqfZ//8J2FbH3+W
+PKTIt+jD6kr+lein3EUnASRM36DDfjitbf+vIezijpCNXpNi3KtTCu1opEzCRI1C
+ia18q58JuItJFZVd95RMQ6DJykH4Z/7u1HsS45s1r7GAFuKmqJqELXOtjmMqzm3I
+6dY+4XdwExpQJX2I9QmioFfI8Jr6in29wzb5J0IA8ICKNUpDQwrfInO1Ga5zThqa
+rPWUM6bWJmFG4yGjA0rfGf4Q+n5zpcQzCXn4asXOhOVnrokjOagkI/iidRhwXP+y
+DeXCXyS8V5JRDHXH+0sZLzdMD7bdi09zzvaNtQ8wg9vYNmm9b+9jv2U84VPeUEQf
+VtQlwCTXjHb0C7xWIR/ZcRPvsp9tSBGeEEd4JzBAs8RPTrc9huwV5lyV4CakwXvE
+wnj8I+ErhBla8A5RLEataAxUivtcd7VWpz+H6WrXL6GBjo/46J62aDlkyMxgzgw=
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId 88b3c13f6105d104229f5ac0eb499564acd473bd
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAAxAyb9OgfbrVwAAAAAADDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDgwOVoXDTI5MTIxOTE4NDgwOVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LZXlJZC04OGIzYzEzZjYxMDVkMTA0MjI5ZjVhYzBlYjQ5OTU2NGFjZDQ3
+M2JkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAosj2IRXHXPaLa9ts
+9GtPEkiQ1JCBHRVdaBIVwcWeoXak3i52Xd1JB+UnZY9Hyz99LYL0t4JEhngNA+6u
+ViC0R0POUmX9eojsDYIuTqleKFXqr9yBAP/61s9txntpmWvEe44C2fGD8PncDWT9
+RjMSxzOlkWzVqLwvwkMC+bYnsztdTHcyrZ2CEBFirMtem788PQ/nuCGhmDPEPuWJ
+l4t0yoCDA1MKz5FxyFHRKjctwmTMF+pJtKxz7OJGTAcGfVnlFP6sKCGL+e8x/sI3
+hkQyO8+/J7eM9DyFq+DbwKrKWnJl28gEOK3gnmhesWEpn8aMzUmKcIkwFAB1E8Uc
+jytC4wIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUJdOcnFJS3tDjODxotIwPQK+EYPAwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAxJvCQ
+vy93XE3kH/F+5V2hpoksHc8157bzZd+zR/bisG9ycxjxNaa0CempD+s3G4XPY7X6
+OUGNQZJKBEEK9NtZqrc2qqFMETg/a7UNljLWqXsV4Mdemk/Lfqy60vmEjY+cvm5o
+/18mFcoeVgBgHPX/YXU3G/m95lJiU6RrfowESt2BO7GosIfW3wnH92gpnaSn5w/y
+JaszI6ezx4JjhNPLHgGrh1okiR7SZtpReDhdOyErmy0t+AKP7sJ50VDVsdqCPhDx
+lT3YJyJwNUNox0CQlqeo02xByN43NaWTnNJnYKsEJJDjQPXJvs54yM88EMySvj0U
+cXENyVPGC5s8CEnVUzMi24n4xknufzVEyOak2ioy92IqRMS9JCYgzNc9K5Lr1IJI
+2LLoR1Cj4/EVKN9yc0ehHriQ+siCbByzi24UoLgzoUar3kI1pHAVmPZ/Tm3h75uA
+xMn3yXFjM1gU7rCG7Khq37mV5Q87L0ZUgnJ2kO9D0h7o4lmNtnr4acsMEQaxW0jf
+cFwXx7lpW3asI9b2zWE4AUL3YweoiuoD7aGHpTI3sx1sWXCv6OBTct9r4qhhgYWa
+isTsWRo1lxiA+aq2Ukq+1Z7vL+vq8fmjR+sLhwMIpfWJh3azs/6DqL7uOsGfz7Lh
+RkWH7ye+mBL58fqQFlnvqSntg9bOz0T1Xf5T9w==
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId 8FFD47880E239A3A3A20DE13EDF101E882A9D21D
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAAb41ruv3asx7gAAAAAABjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDczNFoXDTI5MTIxOTE4NDczNFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LZXlJZC04RkZENDc4ODBFMjM5QTNBM0EyMERFMTNFREYxMDFFODgyQTlE
+MjFEMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9+gyT4WaI0KLIEPd
+Dg5fAxjIW03T/cPzVagRbK+W5VZxUR+YoFYyRC9s58FZbj39LULB1pyC3xaXsOpS
+XQPN3AykkkbhsZFLQvxluAnOei7qY8QTEB5ZBPtzB/ouLfVt/HwAKA5SggJr1HvL
+yhn0ausP1K6pg0aUiHG5ryPtpK07b7WlU3D32S5O/0u8fc4mdxGG4AINY5emCz4y
+ggMZt/LqyWrkUwk6gFKWvZ7mK3NdXywCcx+n8k8aCYl8Mt9rrbdp0Gb3fYm0MOmB
+cmsxdV/BTCvo12QP39VFtQikS4aW2CxLWLBgcPq9rCSYRFSJu37nnywY5uWjmHse
+zGJKZwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUTSQynj9+Fc49oSqJCZhd1uDx//QwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBLLcU7
+sxy9DZC1GqQUnLx8Mr/wddbtC1HmdGjNxiL7zXHJHIZ6/9Ex0UemCH5QTNXqQG8J
+cSIa9LZDSgtN476F3EfI2RaSgq2RRj6CP99liPGi75J0zItVsrwsqL3bfcjbYnsW
+j3E+/xVVcR/7BddTboq9qnGS2PcCIJSqmhYRM3QLY4AC6ZftCA7VeFksdLO5Ko/5
+dGiQA8a5vV1TdQlus+z+zFT7nej0Nm/uraU4kTSYd9KM9l5c9rrVjBOP5DsnUZCL
+pc9tHho3qCCbQYeSd0hazik1QsTtL9AlagmZ9maHQomN7/LEktrxUzPDKK9bwK4d
+2Rtrt01lUsu5oCxDccsCFmyxkiwqdGYFJVJt45C4IjhtEq+3Q2uNaZ1f38exJTtk
+jFd5OvcIe5CcSybahHZTqt8Z6G3174P6DsEJfnzfKSCyl4s+Xdu5CaYbI74KZULT
+8dEpRPV6dj4UwFmQ/VegKBPpavPvLfC8lVq0opkKaYXMfrtCStwEJg3A+zsN3LJD
+gC5R67hr+8m1NQKEMUXalQFNTx4vAN2TuT/jBPBFsBbMloUDGUCLAxzWjndL+rPR
+36GDCozqFFASn8PScs+nnuDUc/flwVVRTtIdYgDc2u+YcFCfpQ48wr53mUvTOydq
+SW4s/XTzEFqoRizYaQXbg8WrjhP8LkboVc0yUQ==
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId 8FFD47880E239A3A3A20DE13EDF101E882A9D21D 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAiQx/rOtBKdBRwAAAAACJDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMyNloXDTI1MDIxNDIxNDMyNlowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC04RkZENDc4ODBFMjM5QTNBM0EyMERFMTNFREYxMDFFODgyQTlE
+MjFEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtCi2tS004DHL2a06
+myt1jg/WVun8bb5IoWr/fBpgx80cqimAIC0SnBbCAPeKsZReev1bb1RA7dpT8UNr
+W4ZmcHY/yIZJvBP9YmwNpRZU8XMZ1TNSFqdHmwuAB1hdJZWI+l5l8aT2F1Fx6oiu
+/RRyrT7FItPtHQCXzTQegTp3HcEM2S4wlf/htqW6biY7gh/IKv+2LIMnPC42AvdJ
+3YbHC24Tb8Ijkznt07EBa5j2X/yQ/bPEy2j46csbPvqRxAF1wyM+GGUnqmLfzo2m
++wKPgbc/FWzJLSt3y7gO/a9/67B6YfR4h0sh4Q3QyJ7k9EhTDWDt25dS6uqz+ssk
+DusybcTLaa/29ymycCdEVDqBodkKs+yPnJhpqtMBhrMcjvkwUZxEZzC2Vh0aPP7O
+7CY+tCvmb372KXU5HZbLoFkHShqiiajYmS8B892QcmiPYMW57ORpP4WpsrCDDlcy
+0ojdzrm8Bt30XzwWRRHiz+rYU1oY4tOqmGzcNMYo7JuacDsychhP8pmGJZTaeaZr
+fC1L+4/VmgaNtFCZYWSJxyB8th1GkxTb6gv1ykZpnVY1Xyg+DYDRAhHZgEURCetu
+LVoHCHO/q4FLTBZCx1StkbQ0U2G1OR2Y1skIxMx/JVYShVPZYDRaAeIrZ+aBST+L
+HD2QWzvBXYStPBckPh7/4kPW+PUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEQKRXDT2wuYLeWj
+8VVsfnhP82+/MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAAAugTDXx42XliuJUEN5RYxi0UCj53lf2+GkWlgM8PYFs
+ilAFecE6NMS+fAbwkSbVNQ1KB6Fa+htijcp/ptBPQUcs3mTzY7bzo0DEgnkYqiPv
+pUOxnoqPlohegaYMZSKDxogUHBQ0aM1sCNqvL0VERgzk0J1frfpFChDsmQrzlutj
+yz3hK6IIvMRUIUh444DnHKED5nqP013sH6YWHuDHOBO7p1+a2KhSHxpKvHl4c89I
+tYe/Hf3i8mCBa2Nl0Rl0L+C0YD73Ojn+k2bZOr0SBOXgJsEyuvcYGgv5axHOkKIM
+ddZgAH+GxrgzAZ/xBiQawc7jv0thb5Bar7O3L1Mk1lE4f/8OoepQxGTxVPO6mbS4
+GW5fnc1Y1A2BaMrIxf1y/9/rv/Ef+WEo/ANMk6ZMm6b1G0ZlbskjdpuOVmRa2GMJ
++JE7QYRJt2XF8W9LKHkWtmNk/kRLNCes8PK9RZt+RMm61rjE6nZMwRJbjBgalJ9x
+sf8gQtSkpEh78LlWCQ4WDyqml6VcADEqFlgWpKwXrvs+8g0TDPAMJMyt/nIEZbA6
+odaNQbGuEUYZRZxZW+HUxKXmbUxUELUsTZJy1x4CFX2XP39BtmkiIUrkRQVQp1FN
+HDaduLs9IDLjxdR31p+c2YyeM9pZ3y4bLxsEte4yQ3CuKpROhaBGqRpdXTs4n1s=
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId A0C9DEC08FD39A8B59C46BCBE87FD9948C55F970
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAABvhVcvzHrOHzwAAAAAAGzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDkzNVoXDTI5MTIxOTE4NDkzNVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LZXlJZC1BMEM5REVDMDhGRDM5QThCNTlDNDZCQ0JFODdGRDk5NDhDNTVG
+OTcwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwfEFWwiAankldPUZ
+FCZYfm3QhPuFm9ocGwSfZWfDrNU5HKSbZOjHV5xmHfZ8/fQVNXIQcbXR3ya+iyUd
+xJEtDhnUBLuOYb+MUMVRNtmQtuIxxL1y1aD0NF5oEhHGnMGbSwZnVXK+SZQfWgw7
+q0tpySxJ2JHsgCI+LVGSFMoBKSXqGMqJL8yxhTZm9vpZQhgsB2qq1T3NANCIMx06
++mbN542Rh4Wr7xmGH5SW0j8wLXiD/WujTyC/X2uo0bqe/OXgbpdCQuHPkq/e5duw
+d4EaPhtanXTkviMyWSb6iwUVpnbTEH5u0Qesb2zSxtp50xSYdnA9Gxlz27Hp0sT9
+MkTJAwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUg7u88gecv0N9qvWf+yl4e2JuZy4wHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBSRNr0
+KicOPgmz8BfET1U6PSGWqm5ww5U38Qch37+8ttdCdZAEzSsJ3u7S/uPJ4AvZLuoe
+cLMkc7c5FREzu3P4fCVnXUfaStHR38+Bj4C/dHmNY8BdOFwoF1jSOmkTNqw4efwJ
+MGf7zComN9zYy/GzgF7lW/hM9pHSPv74q+z5e7oKxDx0plDEG2LUNm57I2hCjMXH
+LcMpuKMCIa+/Pf6LDRj8zPz6dbeUjpzOgWe43Ii/W8i4Jm3/Zv3fLRhf15JFGCkF
+6apA06zJ0AXHcypkmEt7eH2v9Ur302NX5+ePzIKyjBMxcrqoUmMKLAbcYekiWH60
+3lBej8hLLFXDtFK6I9hjmu7u0ZXvjUV//vmicJlTj/1sH1kLhJLeosLi8m3SWAPn
+Pr1yUSRXjzVI2Fq0FZ/1DlWEtR2ZnYxJudEUUel7EHbL7f5vDr3L+vemHoOlqyr7
+sLLDd3nVAbygMnGwSs7MrKYLVAtEypHTbjImrNR2dXB/nYAum5DdGLQz136j9lm/
+2y679ZDhpiPIc5VwsD97C1ifi/CIjipUaY+t5/GAHmKmLUAK44hH5i/Hw/OBUkPJ
+5eC5wEGWd/brmLnlkhPvlHF3LYE9a5vbumlBeMlkD6DKR6GlrSnwDWTn4EJp8qeC
+ET+hWnMnb329dG9NoXSK8AVkTcNMOs8Q+M1Jfg==
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId CA6970458673493A8AE1994EF1E29238F27F4518
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAACpzgO4SpYHlzQAAAAAAKjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NTEwMloXDTI5MTIxOTE4NTEwMlowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LZXlJZC1DQTY5NzA0NTg2NzM0OTNBOEFFMTk5NEVGMUUyOTIzOEYyN0Y0
+NTE4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwp64rEuL+nktq2NG
+Y+1Owi55MmVCbm19APK9uXpxM1ZLmChEv6Hd6fddArmZ5Wfnv8+TwS7d10EJu5A8
+9DAwYrgLXmcwI1LiWtVwQ8tS5Bwy/pnZfPXmpv4jPyrgqe7Nps0yQL9bEAe32RbU
+JmfrW1ophnfIL5jKHbL0Ttmn7KfkZRmSu9zOoxnf1pOuU6IjJLHQzUM9DLskPeKy
+XjiBDFoxDZNVh3Ks+VZFvI9hGh7RYWNPRbt455z0wVCp/gAnN0FZVRoacx+DBg/n
+XKtDmKAAWN1zy/AO00vrUpryPL/k0h6v0+U/PSsu3ssO5HCYqOh6ogGB4KYjAWpp
+iI2X0QIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUw2DdMCjR1LNzS0YBUrGu2NXNLf4wHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAZx7dS
+VUP+O+MGrI8DDP4yTap+8QqnYAW8QJQKx8Z+8h1XtuTOHu34SLBWCyR6cZlQExkm
+BMyroGv1jXxsnM2/SIrt/jrubjgSoPS9fTvotDE1ER/BV6y/3xCBFYlRyvGxZTBV
+7uGoESSij+a+ghvJmFGrUb7JcVgtl66SUfV+SiRBqOJMEhkaJrEDMHwohewOvNxD
+yvls58D8kIyuWK87q48N7MRxj57DsXPkv9tc+YICRBuK81GE/j73bmHRbDAZX3ep
+zwT05TqrYtChZNfm+6lZ7hURzoV7eGe0ixlWk0ZtAiKPCbb7fB0RePF3Jw6S6MIy
+hCSX8qgU8KuKLObz6NKu9KWY4+K+wmlPAKZw73wLrcuejDV4r4P2uVLKIDCpmE9O
+dQU4ro902c7eN2q30jyGtYyWCSTzOmTt+deNtBq99wMH6S3n/Wsuqo1V2gx98Lw6
+UcrdqAetV21eYD41bpckaGpWFuEg/olVcZVk/kUPfUlEJmDZgKd18XiDMypepLk/
+4vTJ+MiLbw/WKqYe/wt5C5/MlfR3PTEfQ2d86OIXhxWF0nOvv8Eie3F8rDsakkZx
+5Qoi1W+zDRNKZo+PC9GxoAn/RNxw7Is61j/wjXWZjKe9/79TDW6h7OllRmA0FtIU
+nKELQ41zr0pqF6ExO7j7Ft13IU29V7bD7+f44Q==
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId EC3F8D4CC12ABE88A019064E8A62B7018FA2E359
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAADCTUF7UHaHSFQAAAAAAMDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NTEzNloXDTI5MTIxOTE4NTEzNlowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LZXlJZC1FQzNGOEQ0Q0MxMkFCRTg4QTAxOTA2NEU4QTYyQjcwMThGQTJF
+MzU5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs7TgdsEbD8Ucc8wm
+Bz/39RSdKGSCvivstcnTSIXVHmkOQ1VhvXZ8vvNPcwFyV8jtzwTAAo0XY5nJXJ2X
+55mDgPLRYR6T7wEqVPWqpxkhw6yvr3gaGXXERySwjc4WDhn8fiG5YM6EmKvdKLA4
+XTBOLQehROb8KZQA4vA6cHzvxjWOjaYRaAk6LaNPMbPGlsa1OoID/yAEXY+juZrF
+MHlOeKLIrnNKJU3WUrSHWBflvUqplCpG/59+//tWaaGm390wwqVYHdbEn7SLmcdM
+lvYuBo82Xm0c34fLBB5n0nDWl54Bg5woioRm0zBosCfTs1WQpbVKU0+iRbWyy6N8
+3anXUQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUf8eNQLNICwJKJIyEp9QvbEqJgsIwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBDQoa8
+dBYvSXShOyTJXwCPDno2sE8kcSz7Od22w3a2Uh9SgGWz7stlw4ZB3nMPkYi+l/aH
+chxoAwK1vn5ICfEhmB3kGe6tAyO+64De6se66uqOxk4pdySiNftXrJ9ucqD85LU1
+y3nmxrfOFywSKH+xUJXOHs/wudg3bfe50hRp41sP8xmVjZsX1zP7me8+/xi3Hor9
+6c1bDa3hfeguJa2pQt3ZhGKmYMPH5D113w6nzzoXGCrWtE6nIrtuM2wDEz5KofPB
+mkJEb/U6UwpVuttvmUrHihbEoHcYVUHiQvlfZzQy0w6esCeKDtp8W4wEodwy9p6e
+KfqaAuDmwpOi+qlzx9CcdhdswirDpdSUIoQ8HebASxfNI3dEpcdZWEAR3I34fKpR
+9yo8IPku1rlb5CtMvDziFEMqsWS7dunsdTgKJH+h95b4w9t7yFaisr3U9ncJy5/t
+BSjsSQoY5+biWP2YSFvcZQtZULpCOLFLM/Xw/K6AAr2iSjWll8m4gwzL6qtS37it
+CtLFC3cB65NFa8IqJvZ/wXoT5m0HOxqaFM02D2pFsmDnhfvnxK9pPLqHsautk3VJ
+kyRvRmREXLIr85vmC72OB0L2VlyQoIzKQ6WHlD3Is3Qan0EmTr2rdij/rFVzZexo
+Quh1fb/3Z7H6vFS6VGBTfV1dqUqaP9P2q/j/JQ==
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId a75598b8026fa544affcbc4b9106c12f96d3f0b8
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAB4K/1md2wI4hQAAAAAAHjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDk1M1oXDTI5MTIxOTE4NDk1M1owQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LZXlJZC1hNzU1OThiODAyNmZhNTQ0YWZmY2JjNGI5MTA2YzEyZjk2ZDNm
+MGI4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApxHyvkAQz9jWWwJQ
+qb/4E5YETXPwu+Tj3Hq/RYw5soVC04TDolKMGPZyxH2AMskAVy14rYrESLAxSTOp
++IH9oUmMk+/bf0YURT7F2pbWDiCq8reyHkZ+VUGY/eBzC3QRLTESJU1rhpBRZ3Ep
+BSCrPKrayLMPy8h/8jF+Hy1M7eJPhItSMuQiEYFRlSrdBnEp5jB21OOqi8oETWU8
+9IYleCP01ENl5EiQYYN5KRqGvknHFaHW8INCsmo+yWFmBm1JQM3Bt2WIz9E9SVex
+AwQek8HhIx3NsiG7PHQUMWivR/sPhaplwAZuKZ18s3udqye43fW/eS0FByse2D0r
+yIYNCQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUjJf1xEZadxthWCHyNaDlmNeo16cwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBlNrFg
+El25hhLCmksaN4LNNnjytGFbh5mf5m1bc8nHoT9PhnE+pWf3zUiwq3NoKmolBPc2
+UEhdswE6oY213j804ga/oziow1t5u3h1DMVUrvrJiZTuLqgh4mPFOUi+U7rj6+4G
+LnMD3DWm6DV6hmXWwKCBejvFrJKPBKlQpltcYnqCeozSsUbfTg7fdzD0E5EQKw89
+2Ymj1OwqTm7oc4gGe8qCbd2aH7dFbcevPRN8t/3/iEyfm5LKCnNbgyoUoJi84IbR
+UFRMGZ87Hu8GHIe4UQj1/00Zpz38ZQKULpYN7m7LTBwQ3bmj069NCfSjwA4H3QNN
+Jfa8hx7svkYXqsryzpePEQtthdXLK5VJBxyrpHjxLmIw3icsa5P8L9Ck9/TL1QZy
+l+PMwZ0RGpDVnKrzrvHsvXg5T+la3jpKb75I3phSpHKfxWwzsY0QsL/LWjtg1Mnz
+rONghxxW9CVuAqQxcLhxowJxNKEfFHN0Ki9W4PySta6q8LTRr3Lud2YJXkpUVHoB
+R4yXsfX2hSHgqnC8o7lyDKWaQYaVIWFh/pSdN1wOQE8uSLe71PVLtKNkf+VA7Qob
+QLQMkXRWUCCVgr4c8+wBV2VxuL2qM/36MQBqVxCaY3LpPWmLmJcDRMfbndiJIguJ
+9DiGeBuW7MPpwTodi81zCpLe/HtKyLeWnpb2iA==
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId bbcf7cc184213166dab5be53a87014ddd348d8cc
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAACEFKjJGkFsmaQAAAAAAITANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NTAxMFoXDTI5MTIxOTE4NTAxMFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LZXlJZC1iYmNmN2NjMTg0MjEzMTY2ZGFiNWJlNTNhODcwMTRkZGQzNDhk
+OGNjMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiLCPXvAM4d1C26cl
+CPRqya/WBDIQd2lCtzKHgDCn3oDRK+GFAiDDLLYpIBoDkJ20bJOVHFs8A9lnt+9Z
+kdjuJcPmvdv2WjdZfBiF7HBh/Z8OrGoo4xOfAvudUDtLn9dlc2V3Js95UiPAF0Iu
+Jfjuq2V6vS6+aEy5RCt9/cVi7p//DOmD544+8r6rCDBhT9GaVz1IT07TRXsyTAHm
+93m1gjW07riFPKEgvX4OtcV0KaxC7z9AYrq8HVIblOkLIYYYsOzeDOGtgs2gXu52
+CYFgwUonLoBjrvRvtSIVwZ3gzHUDWu+aOyVxe0ey9DtvdKajeGWhYXweFKMuvhNr
+ne/DMQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUqQIAWhO6d7O7EWDmvUw8ZXQczwIwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBKmDCA
+OJL7Ch8tE+lIAreH0C4L2gLPAjRWzyMb/dnfzxAJ/k2QvBfifszpfl7FyETN8w1L
+OsIFXkYJbTxhISWDJ4/x0Ah8PbXdSOIxBTIel/Qx66mJOhfReXNsT93ZkMJeTjAW
+swkldiSw7JXqsRoh6VMGhvvW1b/8wC+hqfcPj40KA/LQH7zRtHiystU1matAl6LK
+D7aV69w4razt0vECJOxD0AZDz1M6tQLiMO8vJMiUjSUzep4pRfHBiZHJTE1zpCBB
+XLQ7tozlytU4UNb4QPVBtCpE46P6ZJrduS1lrbwqWuA9iP+IE49UDBuWxtkl+55W
+2YPSjdqjqZ8GUIowF62x0tM4Y9xLJq2vK5eu/Wv5yJmuVAezk0VirEcWo7tfh0jX
+p8PI8/wGoYeN/WqG2kghuAYEjNN/NcxxjjPk/IS9ohGZH/azZsx5BL/oKf8acRDv
+e/SEPRIwsjw994RshvldAop0pVTBxlZxYg1YfJDj6Vz1NALg2cne/pddUSKNiSqA
+hvb8ycmB5Iki706u0Hw8AYv3Tyw0mQUqhuNBggC9QtMiLbwQ48qogTIFXm+zxfFy
+lcch6yNnKs/c8ezq45Wb447x7QLNupXxWrLFfIfTaUIIWmaEFGF2OflW7ec3PMH+
+6u6Tdq4pw7jUrVA/2u8dP4Oj3f3CHaGrnluq7A==
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId c6cb2a4db7294be911724f5041310b4c42f89bb2
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAACeAEIHltSKmVQAAAAAAJzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NTA0NFoXDTI5MTIxOTE4NTA0NFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LZXlJZC1jNmNiMmE0ZGI3Mjk0YmU5MTE3MjRmNTA0MTMxMGI0YzQyZjg5
+YmIyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwzArwO7kziXmsWfi
+e6VrfhWYm3YizKWmHyb1XLxPFRpu/mwgInerdIf7/p69bmjnhfbmCh0xQwcL+sU0
+kQ+spJuTSNOk3gUwqtNCkNtr2547MfV+DCPxcE7D6OX8Xkt0pb53KSRBYMSkl/ye
+B3oVvYV7ZCyd7CYZARw8ATLKmBUDQZtt+wAeZT7YgswJALEs2j0MNQxrADPByHup
+tGKYkKO29Ey4gjwfAw1DNdK4TTC1C/EaZwPxyaHnSGQz+FWLbyAuqT4OA7vxVRUS
+3od8uURnQbsSP0J38OGFpg7jRpbN0dZ68OosZBzI9TWo/nbWff3hRjBxBVBuDL+w
+8VQXkwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQU5FerUi+yesG/NQ0HYEePJqVRe5cwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBJtQ5v
+rcJ5NVdLIQktnsKkwl8iIH6T4Zd7H7K1vhVadpqSPVLY8eUlzVfshMYbv80vr4ah
+B3r+XbdZfI2e6NAyXeD35cNxxebsNw9AZXKHk3y32PC3x/aWr58Ky+VDOaTo5dBx
+z41J2+lbkn7k7aKj6tD48IJQcPl/w9u9/W51kS4eR5sbcQpKJ/+FZt0mbOPt7H/S
+GMQ2Ih1SHIjVrcU+Q1c9pOk625UfSdfP5PpFS1duV0pYCrRPyKwDnZ5DvU3UgDsd
+Nj58M7bp9xjv3V96U9oYQkFzIpRyeLTungjUFM36sl4WaBNBaPY4ATlK8sTkQq0t
+XKbtKiDx6gknijuvNjtaK32TT21geerfjmlm2hrTILeaaB7mtCcLvQpNYDKDll9k
+lNUFmqpXBUUZJLfQaSFZwbhDvqEpzDz7uBnRvrvzIRu5Q1VoT+ixnVYs9GOCqPVd
+FQYpUM81pqkMu7CpNPjwmSQA/lx3x1a+Krn+2ZuJcIaoZokiUZCrOZOC7D3kkrht
+3C/xSOmggjSCqxv+0uHAos0q7mPMZMGDA0lYw3zfeQrNmkXLbrzeZ/t+0xfo+F3X
+oY7MVYLncq25uZ0hqr/1C5XtMwJ0Hnpr8wdffB82njPXq3aZWkTXuo8/TiNKKLN7
+N888n7HrYCHO2JX12lohjD3OkW6/3kTXN3rS/A==
+-----END CERTIFICATE-----
+
+
+NCU IFX KeyId e82669cd9f2098270297499eaeb8dfa7e68b3422
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAC3cA3YwyDr0AgAAAAAALTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NTExOVoXDTI5MTIxOTE4NTExOVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LZXlJZC1lODI2NjljZDlmMjA5ODI3MDI5NzQ5OWVhZWI4ZGZhN2U2OGIz
+NDIyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqNDqktSy3KawY61n
+M1T/cc2PwcG279Z6w5Yttd1JcvI+wgzfgBUtwf0bmpBZXA5hKnbxe78lTAqftLGo
+yt7ZMVpvnh51FMKn8AdQo2nGXLmtKFbYDiIBXnKHJ7kY0sA163mxlphZJcjhF94O
+NqmoMi6H7ycfspFDn5m94fS/XZzGY18L7//9rN85B6m21ZI3ps5hl61wZlw8tGFx
+nKjPXOUP01Eez5JOXHkr7XnYFbij6Byl6NTfGEZinGx2Yk8IrWGxXNkmKtlpyLUh
+dtMJrkjp/TV9OdPcHpnF2cI85BN1erFCr7YMpALUBEQZ6XFp/Dt7x0XmgvFYqfj/
+5kYAKwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUhVyFqP+9JiqyPrttwM80KQnfxVIwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAQoe3a
+EuGwaTqNGZvCL4XN6zM7TfvF7XnhY0qtTBbir6BN4M8NrynM+nFFJ8/muvTr0zsA
+Zf+1UaBaXDkfETE5vXgtAJr8mIkG+UgHqKlfrsohu9XLsPFVEISn4MODjmJkdCGb
+RV/WLbUairppPtpZtO3bhx8+ugPWVYBh96VqjdoLH+MupKUp8G7tIiPEm7ly2nsC
+8ZyX4rofw78MspCMYN0yb0YkBCs22kHLpDqFMrR1mVTK+Zq3/nNnVIcpo+g7bTrv
+EH9w9y4bhxK+oVHsLatKqIHHP6VLHBjSEqbAROpM3XYXTWnWxbCldZN39+6Iznp/
+129dFEyOMhRkJAZY/hUxfNlcm1t3LVPjM62dNJRGgVMza6JHzZ6aKboEkwCLohn9
+bWrOP3S1sWUfO7KEoDU9rbRFTi5fUu2d16yXhq9FmNFTVeBruWeJ7tws9v7gnGlq
+ChdVQb4oQBlI0/sVWK5aGcpnjq6g7pQ5sqSlqO/MVeGMxsL6yGV7w4wshjEGrDst
+eA/JTiL1IugeokAYcxbP0pN535uy4gnLatUpcIpwIjkQhGObfqfiskXM6nCJ+Dgr
+mMa+OiUsF6OL3QSYF9vmYttpDUbcBVjmUOIDUOJn2zDB1sF2K3VDgIwvTyCNw9pp
+j2dBVw5fsN+YKt0MCeASq2lzJlzpcphNJ8UiyQ==
+-----END CERTIFICATE-----
+
+
+NCU INTC KEYID 14B8E7137FA99526C4717DFA881B24936BBC6BD0
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAXChs01NipgP0wAAAAABcDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDkwNjE5MTQzOVoXDTI5MTIzMTE5MTQzOVowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtMTRCOEU3MTM3RkE5OTUyNkM0NzE3REZBODgxQjI0OTM2QkJD
+NkJEMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMgEeMwnqMRXs4xJ
+7NbRYGJrJeC2InS6KZ2o0W6t7VefraYW3+TBVNWtehy+kvm8e3Jt+30hlP+1p5Ig
+l4qckvhcpWh5CPc+93stl4OgoWsERmfTwuuauRPhVUg0DagVa+QZ34iQYRaVlIBF
+PT8KhliRaheRHkNqkJ4lUagTNfCZatOwu2fBEQkgbqSvfmbRI38njLePY4PtTg5/
+aZCq9Fr3JzIM4KNQgrcO9kSA6AWbQ+OiyvCOUCNTmJG4HRBbU9xwikjpwAIp2ua6
+r7TuiBXJBYk/HVp8SCkya+Cu/Zdvmtc5SRuR+VYGVhNfSjsVJ67U2bh/fy8XBChB
+ll64gXkCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFGu11Z8uuCi0BP49RPxcRDmj+8mIMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAGfZ4
+necexgWhVrvAbWQ1Ci4tWpZPjZMGrtehd+dWjxOZ55vJ8JuiAhhQVoXnzzfJo3E9
+HvGyasdOzy+4yG8vvlorV/20yq2TG0HzgHimN32QU21v5Sus20crWTusrWYLHAHt
+q8Xv36hPR1cUYu+Df6/yHr1TW/k8oQqG0XMAnfSdu+/jRlFRKxKq74EGNsf2eFon
+SGbv9tsa9fUDAjK9DyqYIRewsEEC81ojmqLOV2fK322XTUp1tdAtFZhVjyyUSoeY
++ZBz3uN+uvj0vkOyfFIGO8POcrzs7zcIhVwKsbggxNZExONCrD1eupCFDI6FblG8
+3wGHvfThdDVVzs8wtuxEdzNb/duScKeSwuLNnUc+GEFoOCfNpTlxt9Ve/x56zuse
+Z+i1FnjPw6wksm3W2BeiflywGohX/05Fj9CXZfjG6nfWgv4tRXSBQTcl9UL2p/bh
+QjSGU2Kw/2xFNzBWV2RbShPDSq4QGWoDIcoSQBGP9qd56aNS0oToZn+KM1gaeeZs
+YU4r0D9mTgenoeE/cZYTjBDDq1sL/QsNDIXH8VHgXEy5X8Le7SHgaIrmr/ebYTDs
+Zub2R7cEVpTnHmZ6kZwAOHcPFDH5Z+lZnfGz27EOGYNyIW1vdeT4tnNYWI7bAEdq
+6HzGQtVM7kGYnI1Mb7qLtfvZWe6xEmZR/P3UT4E=
+-----END CERTIFICATE-----
+
+
+NCU INTC KEYID 14B8E7137FA99526C4717DFA881B24936BBC6BD0 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAnIFC3d4gy0QMgAAAAACcjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAwMloXDTI1MDMyMTIwMzAwMlowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtMTRCOEU3MTM3RkE5OTUyNkM0NzE3REZBODgxQjI0OTM2QkJD
+NkJEMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALJQf0DDJViFvp/H
+myMzI800vWXBYNiZsIClcpdF1FCpqemrxu2r686xO5XjFq97kqxu/b1grZFuhCDr
+O8c09FJ17TwrM+ri1Z/MrW19lX/YXQxElCtgGbcxENsLcngHYWk2SQ/Sed2Oqglq
+tMmi403Q3WA/ronjtNcosN/8ERrglCN6Y+wXMtqHVbTV9AJdxEhwG704anbzzgAL
+3Zy9s+Ue5u8PIXkZC66wBFbsjSvT4+Ugsim16dHmGW9caIUX8wVjlbop0w64WYwz
+RjaGzUNtl/G3Q6v2/894hgK8oCvbks7qhW8lenFrYM4L8Gxl2FN0usKIBOsxyrLa
+7XzsgeUkDDo1JczQwU5Stemn+a9C2dJRJx7i1l5FwCSHqc+O/N80tDg51bQgtMIg
+6coOSJy5G10Nvkb6cio3lbvEsIHCIPxFfg0RPW6Z+1gweQhP1fzbxMjVDlGuhvtm
+noZO0pZRiyYjygFof1gPyyaqZkCkCmnQj+fzwxev/PqzZx9gDycVbHx5YibTspbv
+MhvGxe5rSlWRjBKzfvvJdk7SlShSXoihCApDkGbtXmq9LSv2i7E30rT6IoP+jXDa
+GmaC/K//BJF4nOnD6l70DtnH8Ibxv8yHeq1ljJu1kIP0RYkDTkPcwbhpHIOJ0bN/
+Ch0DcKyNIKYEdgdB33GcZRXVtwixAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQPQKq+ZQI5KZuS
+z99ymfQz8t/ayzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAECf4m28qwjsXchDiqbMxEKotGAUkHiTkDhU3fXIp315
+DXgfzUuTwJNZkGye+aUACTAU3ktEGqvYQn37DYWETiFkWlrE/Kv1fq7oc313oa7y
+vCKdMstvwldgg7Zno1MUc7Rx4RopsZqQIGVLheUmKqUX4GjCgD5epPsPrO4j7lqI
+MlZwsXK5QrFHxHgl5biXuuOMEcsIeRyc4Ysb2PWi8u9zZfrEd3FTMO5aq8Oxc3Pu
+ZIqkxL4BDce4yajNkk2NBWnp23Y2WevF9k5ddc5LjUXZlm7ma9/WW7G56Co9DCok
+2fBw3GI/Vw5n0ZaTYCE4STjJg51Cmf+63PL7SZhTt1bGP4T86sjBviaXkkpzrkCR
+DFZi3Fgsx4YtS+OqPej66RM41T77gved7BM6GHBlMjsK8/HecMj6kw08yZJpq6Qw
+cuSbf9ZTGH5UMxBhrPi03/N46L25Qckq/FHiovK/TK+QxmKBwvO0IiF/q8UvZnGu
+qc8zgtaJI8Ax0rmrG65E9wXUoJiHNvkwtT4c8UTVTKmjtgbV7kQoT5Zkc6rc/XhJ
+xBWzVZpG4LSqEE/cpD4Nse1hjKE8qw18zuP/KvDXT1pqcQBBtsjt7k7m0NMLa5gk
+EmQqgQOLeH5buTv04QO9OACluwzrQ4LKNGblNwfySdglvpoWlHLfmfgqaot3Q61W
+-----END CERTIFICATE-----
+
+
+NCU INTC KEYID 2CFCF43B16C8BFC78249CC971EE57324D639F079
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAUUccwTE8/U2lgAAAAABRTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDYyMTIwMDQ0M1oXDTI5MTIzMTIwMDQ0M1owQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtMkNGQ0Y0M0IxNkM4QkZDNzgyNDlDQzk3MUVFNTczMjRENjM5
+RjA3OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALvGFL+z712uwcUq
+PBxH2NZd7HDrjeKXuuXpxfT4bMazdZWn4PV091wCWZHw9Q5FpH0F34KwjF+bmoQd
+qzlZ/K2XLnFYZ++PpVcsjUvMkqeDiGISq6bmQ151oK3l3+POlFAwzJgENN9t0Tkv
+ZiU+mv9hVdG2M0mBVt0DqA85RBZfv3YCCCqkH+J22q7w7VdVoxH0b0suOSEdalOY
+rirK40fFSNhLebAGB3phI2qz9IM6n7kxuJUT//k6pcmYqhg2UmDYv01yGjms13E7
+FK5FQQOU/cqfxN8QaL67fWoqo5QUUzCbumpT0bFRaRwaOJgWVR0hkJvFwDBcMMoq
+7wmEIVUCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFJs/f0rCaEe53J/YE69kQ+JqGxqpMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAlYWB
+aUvnZR0Td9PozILFBWYTNNC5aGMz6CB9rAMOZCxKNwsHrvI9up7mQyuGaKekTBJv
+7mWY13MtX1QN7wnkOg9dMjYzAQ8kMuoQVF1MjPClc/iG97ZT4wYJ9gNVxTXfQYHc
+f8XJ9Gzya1dAAaIQdjscvuWzCDqMbqAKsVCLdpwWcsIxzqdlkKifkLw5PMleQfZQ
+TrevhcAbfyIE7bfLLTqVJOxpfG7mWYpb144qBKhN7KjAY+PRE7Bkmyf6VhQic9m1
+VV62YGB00oMY7uqk6AADE+Jf+dFapUcoVoh5PL/FGaBU+HqRTOxBkElEFpBlM3Bk
+xC6X5GekQ4wy2T6uKRZz2MBHVIvRH6Tqe45DIA++IkpHmjwcQQEj6OKD++AXHMFz
+xQOaAnVVb50Dk0Ep84XL3+6OLCUSWy86RhcpfsH91RaIeIfQta1FKe9y+d6ObG7M
+muoEQipeuaiTkxOajN+EGMkQIBN+7yGdzjFtXrWZISB6AArKW73Kt7usgnIDGN9T
+PWh+dIcq5nMDsxXfZan4W0Bfsm+tcLQWEl6qa665xVNRdsMzC+9pHBx+jNZ8Lxg+
+5h19oIRvae09UKw5qH7bPcEyLIjhW0968pAnRUhDKdyEQukKPHRMDTlHNQ7QaZGU
+vVPLIL5kt7ZtKSz5T4F1nvtc0VLooYpawfQ+vMA=
+-----END CERTIFICATE-----
+
+
+NCU INTC KEYID 2CFCF43B16C8BFC78249CC971EE57324D639F079 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAk+jSthDIGGiVgAAAAACTzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkzMloXDTI1MDMyMTIwMjkzMlowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtMkNGQ0Y0M0IxNkM4QkZDNzgyNDlDQzk3MUVFNTczMjRENjM5
+RjA3OTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAM8DhJ0v93u7jldl
+tmSuE1eNyp0em4MxKRstbsu3nIurbooXbtiV5dK5ah9/ZBZfLzbiep+Li8Gqz057
+5774Ipg3jTAzF/6tLxp7R/hBCBBv9NFL4OVsnOv5SgEdYq/yMh1FHppnkTWQrne8
+dTDMmGcr73T477H6flkYxKLhu9aifAv8ryZX1tTrMmhRuFKgQNPstLmYCe8sm89S
++YpSXDddmEpSrjs81AIsHz/GmDHHhnluG64gRiKqb9zH5A2kQsOzi8OKTmUNK0Tq
+BIeJmoZt6nDnzwDKxHD1lOIoukAWTbO3IomLjvaIrZx7iHFS/psocuDLdFJTDrSt
+4HFAYoOe6Bzoq2An8wt6F+wKWqZ49fn+L9wOvaIDBbuBRScuGRFPisSlOZ6IRQYI
+g7eC8cwdqOhY9mzEFJVi4HBqGHEu7MHBjrt2PCRDCfjvLrchiuPHI1Pf0xF+nCHv
+vidwklKOg+WEIq8blej319UXN2lekg469Ngi2U6kxkgkzj851e8ZgwLL2ky3xFeh
+11+k0wWaTTe/ytXSgHKAd2hgmP5dkQy2lhbRCR1I3gcI8B7zLdBkA1QNd6OEZ+bc
+EAp7UH16RZFbH+EoBXCjmTDA5mG96SiMURLssad2nTangZixizeYVZhHr2htAWqY
+r4w0nbs3b1rFULsea3M1h7AYlVA9AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTvcZchP5DKGoKs
+DLZ1deJ+PHykCzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAB+04naK8xucgDa4Z1Bv8pjyABPasYdj3eM7juTbJBLN
+Q4N2MaESQm0eZp5LH6LAbDPseXO+ddaDrdjZhVehtKyNYKspcKg3ABE3DWha2yYt
+ejmjbZECMorydj4yvLvm5zkuTYsqWnzuQoYsVPIOpl0UXWsXymZ584DX0qiLGRaQ
+uCNX8TFKN38Pq8nWmOwrE53rirLGRVbpC+j4XpNcKwtpkjlii2rbzOiKKomRLbm7
+NoVNwh2GueHgUQHbWfAAKRqs1waExtw9vHfn/MnrwEENDvAMIG3IoVpCbXvah9Yy
+5tObTcKq+6DCNzosRhgIDPjrpBRMRRt/QMwt9/NjLTfUfSxkZ2NkhyBYeToIeBMI
+9hcM/xgMXoZHHEYQ9eCPVpXYT4CrGLeVTq8B2thYLHjrOFtruoyIeblLuAXXi6C+
+OBZ3BX9AVO54tydHjDovd3UD5BKKCHwYZhPMAdyv+wk9tf+R80t52yzGgkMm6i2A
+nt7H/lEmjTKcFfeY19PIiQh0PMJpaXrl4Dr20APpiL7yW1zYd+MaTES8kZrym0yq
+uzTvDWyp5CkEOyfDEwg6UEHokTzIdKFZYPvoShzH6YztfBIndi7pOaxo+AZ8yosu
+MNopl6kcCrC9xHXFleq+1ugpvRxNMBsP43pxMRfnEWHipK2TcVsL11Z9Kue70Pwb
+-----END CERTIFICATE-----
+
+
+NCU INTC KEYID 2D3CECFE6594829719D6556B600541E749FC635B
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAS4ZUZ6JMrp8bwAAAAABLjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDUwNDE4MjQwOFoXDTI5MTIzMTE4MjQwOFowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtMkQzQ0VDRkU2NTk0ODI5NzE5RDY1NTZCNjAwNTQxRTc0OUZD
+NjM1QjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANlqx5U+nNK9yUmV
+g3VaYfmA07CQse9sSG9Nl/1THhH1GH6o0jaPReBQnUhIfT0/oLD8OQkDfDrQRFgu
+3afGUX7MiwDnxeDOK7Tm1EDvWgZsUGloimXNbgb9W30BWzaABOGtqPVvlh33IBAO
+qZD+wDC2tR0hXWUbGgnZDHfmA5HU/eSAH33467wm93if0DkT36WCctYgyzE9Qubt
+CLW5QM+YWglUpJxHxI+nSvq9iNtq+3UA/QfRjdIk1bIASoRp1rshtfRBYTfow5RA
+LA5+Z2kJSn/E+q2liOYDRlT0yDC2HPVoXf2OHXW8r4lbXhQXNlzH02vedbf+0hsj
+kUrRi8kCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFGNrmdUwGuZwHJGm+8bGq42P0OStMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEANsU8
+HnQeZYpzFigXg6db03n3vWZCKhCfDCoIbFQ+NE6afvs/alL6lS+KLpOxGVWAPJ3z
+GbMBeKtamFVcgCQXU5ShjogwZlO30sfIeH2mbH0ArEXF95W9etZAYMp9SFmbK75Z
+6y6Y29a+VBVG1Zo0MB4IlzEWAAL9/ERE11Dnx/NZkZz+l73uv6PK8D7IrLiaE/bq
+cnqv9Rhf6c14wW6l7P0YhEzK+5I1Xndwh1ImwF4LcIyw6SRECa32FA/T1lHL27//
+OkTsZB92NVTqwJ1M4ghiwpSh+VuqJZRMObfBlloc9/wgxoH8BFir0jbpZmBmHMlH
+vxrO6/SpzmnzjEre0Y7rZ7G/TG96OIzOdEmY9HAJC2HxaVOa3A/fqOe8uEgwyRxJ
+qoZY7vRqzmDm6z76rJijmu2OsMCW5mKhIaUh+VvzexHE3P1WsxtCV0PJKEKgNZip
+nKZoWKdRY0ZJJDIXUe6vnJeDsZz4sijVHboglCfHtOJ2cvqgVfDRt9TxdiFWsQrB
+CfiLDoiB10qCUTh/80uDOKjZSuMWIrGn4svHgmkQVJzEuSDpakQRYjV8E8k3IMoi
+8FBjcLFwMl7mFeB+YHw4C69J0FhkcDb5sjcVdx9/sfMGrpRnCquCI+ySDYrE/UqH
+Mp1/Pst8Dh/ZeJNOsX42BN6dBoy8zPLtEVWrTGc=
+-----END CERTIFICATE-----
+
+
+NCU INTC KEYID 30B86F094DA6ABD52371043F2BF7668C783F0E66
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAXF0rbJiMCYD1QAAAAABcTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDkwNjE5MTQ0MFoXDTI5MTIzMTE5MTQ0MFowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtMzBCODZGMDk0REE2QUJENTIzNzEwNDNGMkJGNzY2OEM3ODNG
+MEU2NjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKaDJ5oUOFdYe01E
+o/VTtY3IrwnHs1adpEV2X6cary3uPa3ljxpPHLU/msdArn0un+LRRTtF12iNEYJA
+htHzMc8oCI+rcQG6MmMmsSnQ2qgC4BNk5YLoMz+SMH0DATqEVmCyjkvrmBp8JoqT
+x0MWWIGAU2xc1xY5D7QtL7eiizdg4KGq5jJZncmdzHe4e3lOt4i71kvurf2dRE0T
+l4GRCLuErx/P8+8s8Y9W4C5ObWadWJMQNJQPsidB2MkRiV11a1HoY5uWdzptKZW9
+BUsIglqRPuwmKcghMa6fKQumtCPFO12xwoBds+RrV9N6N0B+HHajNdsSFuSm+TNl
+25yEhzsCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFMyKl4mh9Dl+yEBJK8A1MTPlNvPfMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAd8fT
+FPj4cq5UIsH+B5+t9BEYeHa5qhJ9J8wl6Gg7DyZgZjkN5hiO4XIBYD8NfLRyThDW
+Tc4mBN8jDrKwFw8zlICzU32hc3pDQUuDVr5aUSGrKdi8LKBHny50t7WQQGXMvmJU
+NoshoexV+YZ4Lg1VKzexZ+onHMvR4GfXDlsRtusIm8Hze3mq13wG3NAGUu3CqeQL
+6D1q35L0Jt5Ite23mLnkzhHA1DjdHdi8LyxOCG5pzcliJDrz1C2KdLkaVyPU3Zf0
+AI9e/KUfRCzNCe7fh2UnSVl759EZXaRSHaV7qRB5PzGZlTSL4J1PFO/SOqfvGDa2
+7MPJ8B+lyRAJB4e6ByNk1OCcymyLCjRf9o28DHNJhL5foD+KhIY47K7pQJp0dRB5
+NSHdv7Y3iNWhiuZ2xh2w/U3N9HICEQTdBntVfQ7pnwTbvkrhWcz8dc6v9A1zRJtQ
+PcUPyB5yffFrg40Lx0FtNTzZHSHpPPw3PFLLuZzupd4vh7s98NSbKh4qdC0Mhn6a
+A9X2IVfT9s4tZas0AfT1LtMrfjVnGeA86cbYGlQhd78yK7OGLuKqhAZlZpcB2m5I
+yFy19JfjWeskbj/UMFLR3bSg1rZEZD6lIRoD0IO9nu9QRplXaX+A+8sZmMrJFoZH
+uzQncmC6YiIDQ9FGzGuBUlcrzI0G8NF3IZ8l6So=
+-----END CERTIFICATE-----
+
+
+NCU INTC KEYID 30B86F094DA6ABD52371043F2BF7668C783F0E66 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAnMyiRhCgCemTgAAAAACczANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAwM1oXDTI1MDMyMTIwMzAwM1owQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtMzBCODZGMDk0REE2QUJENTIzNzEwNDNGMkJGNzY2OEM3ODNG
+MEU2NjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANnWluPvXJTvYMvz
+abzc0aVW8eDsI1qWHpUv0soBaS/+km8wfM2XAPqNq399Fy1RfoIEdQYOz79kpghd
+YYoXRrJD7UXanmOCVevwqZNMInRjVO7SvHsFDMZl3hZ2fv5zo5RtWGsJsOIGLHoD
+9BvcycL2cxwgyIN5/J/lKlVTVTmj6hZRt+zFpcB6rv7GgaQ2L89kDSB4wZum4Px0
+Pkbt50lCVC5/qEsERjGVC+sM5DJfWxrd/G/9EyeRWf+OPH+51sKxlKcWZ8lwaR/W
+UkiSFNeXY4KjTyIzQk3eFaXEZWWLRV7WCub5QvRqtFfCU90j1LmkqrwKp8qZr/J3
+kX6E/NW61nKoPJGQnGMXjOHr/xxCJtb1MOshEF03iYOp1C2c4Z+yZSTt4futwjhH
+x277gIhdvRLdYdT1ePfP2C+XFPt4U2pb9/59EC7x5kIyElATRrYSSZX7xd0UC5gj
+aTuzcaNNw2Ruz2dC2CuW1/o2MPKHIONLIk1wSRWaYwkBesVxJa/bZ0O5gIPqGQaQ
+1bu3JlFLyMslwJd3r2sIvuGF2pWFJ6xxdeI6Eq/dbymIVs5JeZ86O88t7dUdNZAe
+dOa5Syj/Gv6hEWzMgDe6BknncKnGi9Cm+814uOWPhs+KYiOY6H+/zyx2AeMSuzT2
+A6VsLdzN/mMBq38ATwfZLpfAw8ErAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQep7PrbNZU23l5
+t4PSSKhChTULqjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBADM0S5k5fzaFlMgGcWYd4IICAXnuuJ69BFhghjML8nno
+cDFBUJEbotZzbFk6rTLCgaWV9Vo4VfiLDbOsrDSVDBgX44xB9m5gOPC8aNrz5t1G
+OOawJrGlWYEYt+QLmNN6EZql6mzICV4V22PBI4dAuTsRifrMZZQYUkx9weeQnEm2
+Evz+T9nRgo6+i632MwwTEiHLMUEvp2vhFXuC6RgKmXqy77TprujeZN9td0vRjCOJ
+FmPXH+zGIHlpzAj7V4xbWA1+mjSBnbtVHCLtzYHU+FUYko2C5QUCeIPVZRBQN4kN
+maTCVRXgeNTZxyhNeeHL/toTRY5xEXsNg3w5QRiEtvzKV8mJwFpQI0eNnadJqi/m
+F1eCjjQHnnCKO7jnUslVkKwq1SLdt3JwISoI1WHIfBLrCFKURiuuqdv5jhXbV7Fd
+TyCjteUf1QqS1QgGC2m0dv9zRg5jEoZQ8bV82jQhkLb8X2qZ1InApGB+rQJ12v3h
+yX/7nEUtEI4qm8DWcmRNYgPDP/DU4gzznrEDZC5Gtm1wd62eINtoU2aFrh0OGBy9
+cBNB40hAZVtcs+KbzullR0/D+oFYizAiCOKQ5FfjTZFM4hEA6ncCkr/17GieFKNy
++W3d1GTIKVqzm8Wuv9GDgGPumeG8dP7nP3sWwiTBs3TklvcltPjZVaylEjD1lRH/
+-----END CERTIFICATE-----
+
+
+NCU INTC KEYID 31734D6F8AEA913A0A31180B785CC0630894CC7B
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAQqMJENfdaGaowAAAAABCjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDMwMTE4MjUzOFoXDTI5MTIzMTE4MjUzOFowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtMzE3MzRENkY4QUVBOTEzQTBBMzExODBCNzg1Q0MwNjMwODk0
+Q0M3QjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALZYHJRB0oeiFL1W
+h6mujB4xd7cl9unjWWrV68X7A/CwvRDjyde+uZo8y2gc1LF+bQt7ZpEl7NinMnUz
+5rFrR0lj+NN3qUgvVvcuaJP4bUlzcRpm41MLuvotcUi9+3X/TPyS8XbngRABe1fL
+J1C08wOsNNwQgcwsNx1v9V+dZt1zoZjKOxFG7zcXtDL5TA1LzXZ+pmpUB0vre3bG
+QtDPVjzdEFHT7B/7gUxbnPoWucikq80DAPlCtlZrN0SF1Nzfj/zopUwwUQOe3NS+
+i9r4xi/ShAm/dYPTRcN/t8LW/35A2LHfAXSh52BGVf9YqK4McM9J5f1PD1bfU7cd
+jgDt940CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFAXzL8dajB1rCFmLOREHc7dl3Z8IMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAeTS4
+SUMw3c/3+TCMFrSsbRgILanFFelMk+Q8cE7gMZ2CZ+bL7PwOeoZGSfBlTEBHfagz
+cT251+J4apxb4INgiI1+mk8gEJAptrnZZBf1I1hk5HMEk6BKqdGsmE1xDbL7MIJb
+49Lj4XjhTNkT0gjg1KzOorpnYf8XoZXPd4oR+iIuwpyn9XNxhMp3ORyEUXcNJngx
+bVxV+fdvW6YlSkwOu+SDuA/meVEa4ySYto+w/4WraWsg+E/jvw0PJhzpieq+fQs/
+jK9RDjMFZ/DILNuDz7iaf2S+T3KFQ9Ot5aUk01EruXiVw4dwBQW7aL82jK3NJqnJ
+OYwRnC07hLKeYIHxJpzz7kbxyFL1RrNOgtLocve5F7LC1CxmC/zEc1Z2QHzXxCX3
+RNwTOIeD6/jKGnfop+2m5rLc0ApksvLZiDQ1Ub3ruErtDH4S4xcYp4dSwbAp8rcM
+T7QkThz+ulc3i+iNf7fN0yKoJFLnFvvDFn8EypYjg3395YiYk4yedFXKIsN7WVnq
+Qpm3zOUcmD2C3bnUukxm1D+aru0V0jQ7fVOpviKTiDFwtVkxXpbVW80CaXY2O7dn
+gU9icMoIryMepxLYlwZ+3tJ8gv2Fu+Ob9u6Syucfjv8p2hPaInpEwK92HzQaYwIS
+FEDVzeyMzpD2cEk7MNMSUbRO9xJSSko6gslxcUE=
+-----END CERTIFICATE-----
+
+
+NCU INTC KEYID 31734D6F8AEA913A0A31180B785CC0630894CC7B 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAnRudzat5qElNQAAAAACdDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAwNFoXDTI1MDMyMTIwMzAwNFowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtMzE3MzRENkY4QUVBOTEzQTBBMzExODBCNzg1Q0MwNjMwODk0
+Q0M3QjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKPzjJhxR1U1zan7
+69WtoUpCzWF13Y1jAwDGr+nnDxx14OKc2XjURip8L0//hZ3aJ19B2iNfwon81cfk
+BhII6h+CVY3hVAhvys2yGdMrSRaj2Pmc+eTlpG4amD3Vleqn5mea1ZW14CmX46SQ
+ZX1GyrR3zcTsLDrOwa5Q2itg/yvPT8j9Bu+G52FJNwWIIOkjY13bsDxsE1ZaxQuY
+r8d2JrF5u032Dr9Lts/g8wcV9mKzrEHhJWLklEWbSNFRsB9eD/HWw0iv2WJwL2AZ
+cZF6VLLnJ/Zn6CvHHpzhvQnvV+W0UeFxhvEYuCUgEHtj6LawuDffbm6b94Hc3I4s
+9Ypg/gfpcjKpL8+PPz2Q9bCkYfW6jehM5xJf6kYq6nqMzV4I0U2BCjbud7PYi4A4
+I9LHX/DJWIeH2vsuAeyWO1Icd1yi1b6apaQDIFO370KcSZ73F2p6u0FsN6oMomDZ
+i4il/pmSopm2R6rBtnM+HRAG+V1Jj0Gfq/VkLja52GweVC0pl9roZT5uVtmpf96A
+e+OMEm90zYTGKAYgfN4up1kENfpUDLavKksWVtEjVWFbJ1BZi5bkZDWfrzDebSCX
+98bfrhmD/0kZdouRURGSg9XUYEEYrQGciDnwv3jRAVC1+jCYIe8HNhjKdiQ0ZhEZ
+5xiyTqAqrkJf546FIjYZYIlf76oLAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBS8ly8oYtl8Q/Ft
+Zme76opMliH3xzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAAid6NHQOTgPAkwA5y7x2nh6rhU3XWucFx7+Zf2O2ock
+/OBNE6gX88dRxhSn/y3TCco4l/vmUl3+ujJvl//G27hLiXXbFMaQdmDXyg10ZKBQ
+vN30f0q2XX5+e6Gu/BkpYwcA9hrIgq6RGfVbXhz0WIqGWKxodT14mg5MSKzoByH0
+NCximKmfibi7We5NAXmVWnlXeZn7PZguzLiXX1JWqajw+WOmYI8IEn6ivDDkJX6D
+lEJA3L7Oh/E3yqRD5KAUqa5gtX3daas7GPS1HB1YtACS4veFswIHWTyMbIke+ead
+UFYObtkNC1OnkwKjlhpYw8f0c3pnqUc48HNTAdBbvDcwUcopsA8SEjSJDtSdwRKK
++TdlWCixYL0tmwj94w3k1cGwo4EgS75IFH0XlsSGcxGRzgmJsoU32YCxXpjVBNNT
+b82LNRa+4zJXFKpfbsitYNhnN+yP9AmvkSe0Zqscl7PDzNWsHbVfOQoZkwydarBg
+5TPS749PjPTDOfQBP7QzkaEcQIusOeKs7aKUOpuPAMjmjYO1fF33p1pMXOAt9aG/
+2PTblUoL1YPu9KsNIhlzm2ozuMamIkfuvs5qXhaRmv8kPLuI0/8RJZhZ5WLXNwm6
+/fUMs+neP/u5RPC1L1VhPBVgMQ8nEEduUZQA/+wF6SoGI2b865CHlw3BzWSgew/F
+-----END CERTIFICATE-----
+
+
+NCU INTC KEYID 51C73CBCDFC990AA677417CD5F78BA37D4A8D731
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAS/nxUEbCHUEKAAAAAABLzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDUwNDE4MjQwOVoXDTI5MTIzMTE4MjQwOVowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtNTFDNzNDQkNERkM5OTBBQTY3NzQxN0NENUY3OEJBMzdENEE4
+RDczMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPbp+JV9q3NPjGfq
+xBx5xXxSgho5lm5mw0BGilTRRJvIyrdu7IY66wmgAuQIXHNC/NU5zHSR0oe2Ctre
+dDEEXSlZU3lVXMvmhKrGmgM+S78pwgKbuQm3EbVflk4eCktFHfsLyyOjm2tJEG31
+YbETECH1gPndqoW2tQnF/t5ja78RLsKJNVZQ+Ve4ZHH/lyA7D2VZzSS+ycMOAFso
+dSRnFAUgkX+hosY1klxOn82TY2IlBoWtwgh1Q/b9fXGc4sLdlboNpRrfahiaFMBa
+tgvmeh8og+yn8GtUV0HwLoxO39nQguUPp60C728ZvEDVbPT7/e7juNFHgcqyUoVp
+ZSnKcBECAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFPCMkia2Ud/OlYLqKHNSOGPlWze4MB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAFNSQ
+jAfmlQfG+y/VGBKJaAvsbEtZTgzOdBeuNGVHNAnLsIu3olfaWKOjxMjP7fr1r8wd
+7CGaJnLiF7J8DXgovklTdQneFUPzKWMqE3cvDncf/M2fdzk/pKMDkaojYo08b8UT
+BAUTpNlFC9ONphHzc1NZbfq3AxNLt1/8NHvTEh2mwqc2K/Bp0aqmT5l75IZnV2mb
+Xn7pQIS09Ds8zWCywkA4IcviTKuQczYbFV+ZdJzZDqyVNVQLtShvHIbp10m2FQ5w
+9RpbavrzwemCoi5jk1TYpcR6EfqcDd5AUP5cZM/G2lOax5UA5vrK+8JlyZEm+ZAc
+PQ7hnPrB5KAciuKvEj1HhWlDF5MlsoPauTNjN0PZ+nlo8xgi9ku7ZssSD+U+Cisl
+zzp5seXb8uCq+XMf1nMUF0i5GeSI2fbpt6RfhApUoRfnumsSBtZBcfMO8+f5X4eo
+2XBPw9rQfj762hb+J0S+yUXosVGyNTpq5rbmMUGA3q1OoQv8HSVNXWgQlSuLQs+5
+uG5sNc2zRiHbUkmdbyOKhu4Pzv8c4xX0jhNOplhEqff/+BrNPyESF02ygfGBJZVS
+IUebi9EP32T17hGh6SlmF9cn3fLAZDANn7ZtGE0mnGRYIFzw9oC+FLKjyTukgo3K
+b3V77ZRsxTQUUrMX7Gniow6ZiQhCSocMQ4eIcqA=
+-----END CERTIFICATE-----
+
+
+NCU INTC KEYID 51C73CBCDFC990AA677417CD5F78BA37D4A8D731 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAcmzQIF4ABKnmwAAAAAByTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkxN1oXDTI1MDEzMDE5MDkxN1owQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtNTFDNzNDQkNERkM5OTBBQTY3NzQxN0NENUY3OEJBMzdENEE4
+RDczMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMOnqgloyCLYm13P
+/xtWEEY57KaA1o+i2wrd/hhbeOUOCYRIwhSoieJ0sNEy9HQVgYjZVGaZZeIP7+PG
+2aPJX9fC084akqgQJE75wKnVRsXaphaXEL46Nr5ToIpmY4xmFIgw0/OfufknijJW
+Xn7wsVI+jV/TWyEDR4YNfh5bLfqXPEwUFSYZmUCRNrNJPsjJ3T5GED0ZmjK4g8XQ
+VAwwF0VYr04R0+w9xddhbkgshMYkzPFnP8MexOrY2XiAmAdqKVlBZml9WHHf0rke
+5PwPexSVm8WzdOiaYAl5GqIeDWFM4ttaACHvHSOODlrr4kjRyWTTial7JIMoX+3u
+bfb72gPpsWvTRHPoDfMPvHZKa7nLivmMrbq2XIZ+OglOFE9EsRC8+ICMBrYexmkg
++2X+tVnB+FIzQsYrzrqcvQwBUg5N7utvxPYAlhZf2z6vglBn6m7kJ5PjcwBC8uBV
+Awvi2+Em9VUwgeRPtgGGpfXjnPZ7OToHTL9r3rfAeiJJl8pBxzS1/N01eEPt2pXb
+uqCEh8O1Kkp6OkNHM8mlDLYE5VprXtY5lsHfnaIEdHFo4s5dXDbODqXgfUtpEM84
+s4KbRTZCkmrJvE+pf2b10pvXoK2ghQ1rRHydwfbYxpo9HvBokDWyNUHkREcqvAK4
+pvHA/xCkIhFpRqjdqiFs1t5eowvpAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRGjWxudfNm+UdI
+wxPK6xlumF+GGjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBADLIYYNIiUZuMxJPTIK5qDuyWbGteT5U7toQCiz75Ziz
+uxAM9ksmDq/o3UbnyeCJfWD7JYfYGien8afXYHhAP6i6SXFHj8Pj926LnQZn7ItE
+OUeOsiMgiUNQ4KtsCMf6zd6eq8iL3UoDvlcyZcZOt6AZ4XHJY2OSpQGiRycrMxkb
+g3WvL5lTweTSMZ/X2bAS/4SsYMAB1+HynB7OY8aeiBQcR/+I+b5KAqVmN2YZBaoe
+r/NEImo+5u+t0My7VvH8Tsd41V5xSw1+v4ZOZ5YVXGGpk/gkPq14IELRPg8XojFQ
+0xx+u69Yig+tRqrMS0M3bVoS/l++58QApNRqAJMY55K16r4O94NXzXfQ6oODXIc0
+YaFcphSzjgSbacpdYgYEYUNHTooVeujpSB6MRjdrj0O21rdoguCGLu3i6N1m9Rt2
+Gwv87rmmf30xAXZZUrkhI/w+/sDusncmdN3Ez1krbBHCYeJmV5c4lqow5W2A/dFt
+iybozZ95ny51dZPk/tR2JlowjuduxSv7Txs+cYjAuEgic2oNl9omgTnwAgqOaIF5
+dSM13TFmaKgBlcfTRfJFLCF2ltOSyMfbaiaoImBUlg+M4htor0wTyUfRnrSd3djG
+UDDX/YJ41c3xGoFW7HvEf6pEXohNw1KFCmO3vNf1uR7qLiGBB3obLcenTyzUNqox
+-----END CERTIFICATE-----
+
+
+NCU INTC KEYID 5E73C89AA3E902B272B9F0741F7D8730E3EC724A
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAG1RgIPNu8TG4gAAAAAAbTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MTIxMDIyMTg0NFoXDTI5MTIzMTIyMTg0NFowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtNUU3M0M4OUFBM0U5MDJCMjcyQjlGMDc0MUY3RDg3MzBFM0VD
+NzI0QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKxAMgQASvjtrfJ4
+ANK0RihfMjkVTy2D1ZLi0aCYcRRTf8too0fGPY42SnCNTEG65JndAhhQfyWKc9YL
+pRNChgwLCibFaXYBPpXHqFuh79YmftSlGqEz3mZn26ysf1J11xwPAX0W0gQCWNuL
+Ea4wGzkuJCuBt4Z3i+z9dGRXuemFMEBtgXXD61AI5DHZtnFCQR68+dT85T/6wxXM
+ARwUylWuBOeIgv6Lk/5hZlCTl2rOLt2K7Z6b20WN7eZIwAkV6dAbkMMkOMBBV9Rd
+tSNI3nqQRgNHgunRMWM6XBOGzSt+pj/JKZIHxRyn77uCYJ5H14iDCgq6S7v63u+3
+FHo1tNMCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFHwOaU7LvhQ2+GeDDi9s9TNkbxFfMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAExS4
+TiqL+cT6/ZfyNcwNnrAyZm7uKoeotFJZ71H7GrkIgiXpXDgRgTuTTySvvl+HaUCm
+q+ZIKGtDKCYi6rMCqTlU6BsUsFe4Jy2mX992sRyxuUF9MpY+CrT2TeNwGy1Lif6D
+9QeFrk9Ug3XZb4wBfUdte5eqgRMBfqwyAUFv512wKrpJdTMdG/kmMNkzCT1LNhWl
+im5ZoepUA14oMM83Xav0wumykUygXPSy6VjS83PJ/YpUWDrWSLtQaROVPe0FQQ5G
+KLtj3Fd+it3qU5uBxDwmmsEWMfe5c6w/uXGE4f8G2awloaesVgZSsxflp+AOKQhp
+Rv6CnX9P9HbZbVPIy4bQfM+jpZgOcm/bLeqeAS+XqYwgGe1ZEdXYIX8bszjA+rHt
+79wFfSk70+u0GsCWZiAO1xkTiRAIiboKKYNd4rhO2agcVsZc/XCsgkFhnm9KfAEW
+n7X5YyAg83LYYBsHJeafuSuBDixdIWle/BVuiQyOzIShJfdhg7C+wctXITvBrEqv
+fDB2uCD2P4cLoaIlU9+QoKTHij3ZdIitxj2/YkCIgU4HmmfHNYRA9Qj39xqGpeeM
+NIdibCE3YPisQvPjqIy+U4RE1HJXfmFt1mrDyDu1rr0g+0gf8ZoN89h/P5cIWPfK
+TT25RoVSNUl3CjYbNIZ1wDlwiD9aPq1u/3quYWc=
+-----END CERTIFICATE-----
+
+
+NCU INTC KEYID 5E73C89AA3E902B272B9F0741F7D8730E3EC724A 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAlC+l3/zUaemXgAAAAACUDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkzM1oXDTI1MDMyMTIwMjkzM1owQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtNUU3M0M4OUFBM0U5MDJCMjcyQjlGMDc0MUY3RDg3MzBFM0VD
+NzI0QTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANPm0mnZbAfOoThY
+ttvnKleg5wODxk2SRNE6TtTh5u+zdG1e96sgvc5kSfynYzacT8DMUniMBeR35ehh
+/ncDVGH3WGgt+Fa3y5Mo6Xj8675bPpkE8xXi77PsYZI4NtKudeVqlZW3RT0XnKek
+ENLbBtFSiHSqPX67HkYlktpPvBLeKmLnbU2DzJmdT2YUZf98RGj6HAawvuVMEkKd
+tFyLO6JdlLHTP6+TFNIhmdGNQ2cE868CQZ6e0KBVs/eoQ+ZKrnSS2ZEHpsVsAYIz
+JX+zyy1Sb86+GTs+SdaqOgCJXSkAfxjneAX5aiJFnWQk7q4sRHoqPmVMktAL7qDn
+5Hn3EJYI5fd6eaJXGtGrnIOgPPJPMDO1BDVNSYj7ICYQuUGP5Tbf4ZR2QpvCCNHz
+7V4pLH4cUTPBxBTre3weTVbVzwrIs3zEvHoj0dLuv1iAqpRFvM09HG5Udx76K1kR
+kcOqwZdI3lpO/5EuvTnA545FKh9FNgQ0qGlHwgTR98H7ksOnER6OPkqvV2agYwaB
+XrqFdccTG4VZ7OKNKXwtbcSZZgMuxbFga519i8H60Ja9mTmX7p5s0E0lO9Rcu8lw
+Ih7SeVJoxKJb6z7osgj18Jxozx+vGN4VES+h9ViCvutoElIlfb8lYhXSBHs/kSNl
+rBzwmmWpBernDzL6MbaiQLYAIFfNAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBT2wqW3Ib0xl/Na
+hoEBBdB94tlM+TAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAGHd7ZvIjchygqN5sRBMKApblLtFvqfgVQtAAbw6q1DN
+KB495ZwxUmm5P+3TnvslFJojoDsAxQbFxKFrQDBugjsZygfKgNYKjdDbDPqYmFBM
+eNQC1BN0AvJY3d+QXvifCNqHx6GHIGmDoIHh6qo9Xq5ypZwshPFgR1XDR+UGNmui
+okRtY0CaYVcHt9ygKwDcmA4X6j8W/F9ifjhOZ7r3YY3zatS6SSTUZRFkV5FQdnC/
+fxC8763637mzlYI6ixttTMx9IkRGQAr63sVOZzPgtc1E0PjuFiBprqPJEtvwAAe5
+UXtvAdnAe7BYU1rlZ0MREFsyiYxrIUI5QhRi3AKDFAWF5CxWkRd6Pv2MqiHscysm
+6ERfUMZNTEvmx1L6PBOS6ZBLrkhp0YmBYxH+PAFo2FpZ0UUt0RZ8WXmCllXd2Jle
+dMfrAjc10i5F+Kr+M14tmYszOeoufy6nTGGl8iuCOdIDuFRjNPlcFHDHU/7+Dj7N
+FAvu5EYC0Jsgxd5IgwLLy0s9a90fvMO6Gq1+4/MvpzdjMWQzhNnwgs+Rrjxzom2G
+zqS2v+qdQoPSYfwjCr3Gpwoy4M3hBHXQq4uOUMCHrke0gw+sqtoN6K2T2/zjLj6U
+hFU0e3iwXI1QhySm+U4zqtri1tF7PAaPg23/W6kAQ7Pb9q8NYoKa2NEg9pk/o46B
+-----END CERTIFICATE-----
+
+
+NCU INTC KEYID 6CA9DF62A1AAE23E0FEB7C3F5EB8E61ECAC17CB7
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAW/BfJ5U86RK6AAAAAABbzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDkwNjE5MTQzOVoXDTI5MTIzMTE5MTQzOVowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtNkNBOURGNjJBMUFBRTIzRTBGRUI3QzNGNUVCOEU2MUVDQUMx
+N0NCNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANtplkmh3iVKauvO
+w1a5PE6IDzZxtvWEhQBIiuWaluYdmn/LtyVQqrZchVT0JTIRzklTcRDsIx5OOmKR
+VbHpNOS1FCNL/PUkpUdp7owNw5X6X2AUesqfHYAYgeQhXIRHJ+4dO0FGan/rT5U6
+PL/8Z8UcNXioPYlK3hsVNHWGMxdV/mz2nM64nIdZq0mC2wSSIJHWQerE1MMwR9Do
+Pedy8Zv/yVeRfIyA8Tv/9UmziFZyCUM1fumIXGaf708O5l933CtLGcy2Q0vyXrEn
+UGzOZ8dv3eRn2Ruj+GrFNZ64auKGcB6yU6GP/o4mxMUDoyuTihGZj8BLexSunNC3
+n7jdZ48CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFCPDBmszHYFkhsNbr9NKz7OkF52LMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAftAn
+cwJphGgrNaQw3aeGioQioUGM/wgkKR0a7vQlH1jL8UenjW6u1WGgHkxpj1YJ++xY
+iuCtlpQIJslPXMk6gB5AgECedUi8jYkgQlpSylx4YqJOG0h3csjD41sJ613bpclq
+WKXEWaBoZtqiHGI/lhDphN0SctBbaXkkGjXHX5qhHI0Puquiy84mCypQtnA2P+et
+TnGdKz9d9DuwlK0ZkCa1tx5X6IeIryNIUhpk0lUWkQr+SBEaFZLZ6RJZM0lkADc9
++jyhrSo5hnH6qmngptVv7IaIopdMMshgRTZQM6Z0BzSJ0BdKqmWq6VDmzS17kCKs
+LnBHlEhfXWAt5z7VQ+I0l9koCpHermRXdXuDNSB4nTWxkA3WszQHZpYjphKr5XqK
+2DXmdABseT8CO4mhTrFHASticpFmBKjs2HPf3zZyjsDbxSGvknWiGoVyP+ufK6mF
+BEwAWRYn2Z0DyypGRXT+tfps+kswM4zCTSlykGM/MYErNqK/4CzH/A1Ah2saW0eC
+2Hn1JtvusgpSbVoJ/tA9HEtuA/rMlHVh54StDcmTFr9n5pd+bUpSW+/J2tErm5Jv
+QBQ04nVHVNO/nYVH1sGfhMwQuvVjGmWZAalEO4rbKLSrFWBMJZTtB/hSMBoHTUlN
+LflEp/cOea06cgQnDK9u6fXtT8petuqg1QB5qLg=
+-----END CERTIFICATE-----
+
+
+NCU INTC KEYID 6CA9DF62A1AAE23E0FEB7C3F5EB8E61ECAC17CB7 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAnFSIjeDCns4rgAAAAACcTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAwMloXDTI1MDMyMTIwMzAwMlowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtNkNBOURGNjJBMUFBRTIzRTBGRUI3QzNGNUVCOEU2MUVDQUMx
+N0NCNzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJgra62xNaOjXZr4
+bN5QBXpX7PzhMjR5ER3oEj8HnLEil9ZcN5XM6IEymmmA3b6dwTQwQZda+jCgGYYu
+JE1+MIHmfay9nPeTH+8U5k4Ekns2ra/T+BJ9U24lQ5OYAHmwplf4HwOb6zWGCGnU
+9O+qKV63UY8iwXt9uzCVO2PwDyZsrMjeRj5iUKMgExq1v5yL+L5ugTjEMhBZj5Yp
+rO+IQZEAXd7iddC3dFWmXfcXJ6eCL0lxGmbFZNSwIo9iaQXOwni+yTFmxxmh5gu9
+V7xmqyw3wbTQrPrWwiSUcc5Qn3yH9/YzCsLM6CwhQLc/0eFIw8FHZa7xKtlc1nXH
+ZUsqkZG7cZaKHD16n1aYKVNBUJ6lw2D/hyJaoUWtSsaTYFUoZIC/hwsbVpWVEme2
+bv9HL+PwDkKJ+9PdvyKdmOZ5wymUsNuGPrK1WQemb1FV3lXaYDB4h2N3PKrsIimt
+E1uMHNwUjEfsdQ3R+JOCTX0LbY4rX931mkj6mCRrTa+F9+lN4Xs12RAn2iwHYVkP
+8QcPuszjhLV4PtjoVC2O8VbR/v/QLVjy78YfNp+HjhE0jjp+UXbnF9EwC1DCfPjN
+ULsMpntZr8nU76xNl2t/XKEl9tH9pgjmmQ42b63UCCo8sb9hghwzsiiBLrMYLRoZ
+Oz1eBJGVKj8x94h+Bc5msRwaVpQjAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTk01CDrezoQJu
+enEjBhBS6FhYszAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAEnrpgcQWYMyQx9xsAkQ0ZLofNzsF/kQ1fb055P4jV2e
+oN6xoHPJEAvklxXRPr8mmV+yFMqWGKpVZJtseMvyle1H/EeV9RLem/Y44nT1r8S7
+eQLUdcHemsmFEOirlf/WxtTFQSIbNxA2W/tfNI1x63eTTgH+w3vwC0+3i6ffY6zy
+5fwwfpIBqm/YwxoJt7IgxV45IQGlM3k/BDUkw2pFF/RKADRdLegPkOSiPSBJnJML
+Ret7rM+i5Oqg6sEjvUblfgM/sg/g62fLSiUlkl4re7M/2JaQx+D/eYQmPACrH+yo
+/quSdGMr67r5sIfDoDMn/M1MFr2N8MQCdMHTT0Y/DiU1quDzh/tVjppjejsAYNcG
+ysaJMnojwhGA14H53FXgGhgIyMYNaSBRCCLGId5PoTynafbD8gV+RRc2Tqa5/WuY
+pQ4Ins1RcRI9ZV4JJMvogtPmLdEDZAWfQ5gaX7x9XI37Pkgoy3RZDo0IeOgT61Uj
+ZRj3lcXXZBYlkD6tT3vGP4jsUfJa570pzIMOlkNsWHvSndj7IMFbUgNrx7Sb8wwX
+TaLn43hII15pqGYjGwDLaBPUS7GtJkSck+RQ13n6ozH1mwIPoDF1SmQrdyUaF2C8
+kJvTuaZ7+tPywXpDnyNCIZl66aC1vHL6RqViH6VUfi1qpN05ZJcXUS52+ytkycx5
+-----END CERTIFICATE-----
+
+
+NCU INTC KEYID B99E979AAE48774EA2EFCA9BF9AD5B04040DC10A
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAQuxBOb6lBJcmQAAAAABCzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDMwMTE4MjUzOFoXDTI5MTIzMTE4MjUzOFowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtQjk5RTk3OUFBRTQ4Nzc0RUEyRUZDQTlCRjlBRDVCMDQwNDBE
+QzEwQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJLpBUwCrqB9QBu7
+Yv8iHZlMmgOcMSZLgW8Wi8zNVcdiT3hl+s8D5oaLS/yuT5Wzk5RzOR1dIi19I0g0
+thPnS2h0EKtkad7pEh2u5/iUHf4g9C8cqnOWJUaXJmjZzvPNdYUWMMAOXRvFuSrf
+HjVQZdjKttIJr4IP9G7c0R50JrW6ip0TiDv2rfqsfLOO0TEo+V27R9Cnj5qdWWKs
+ZkZPDBNNic0A8K9cYkrJ3CxssbmATPLVh5CgBdH6A31iYlgXNZH2APk9WtMN91O+
+wjtM6O+oC2HwpUzYQObw8zG0Pb4dV9vY6q+k+5rdmX51mu5E05cT222PlmSGoBfq
+NQ35hdUCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFIagI5wBK3aq5mNI3LLOkhN/3yLUMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAL8bK
+n8Wabbx+B/L5ogl06DzEu3JSVDAZ2QRKecbCwPnIY4euZQ65KJ3GzTZQkDrxxIlx
+umwfPgOn6l6yPDqr6aQQUbWXSrVUFWlOaClaQPVuhwqFK6bIhE2RJ13hrpMLBKr6
+mq0Mi3+63nnrF106/gWMgn7Er/sT4954QtJ9Z61o70rCrZOgI17yp1MXOz3jjkr0
+I5QtoqAAzgzlTegZTh7F6Ghx1zxcsBIiRep+CCyCJqMbeU19Rz16AsX3YOXnJccT
+8uUSvc1OZv7kGrOe3XCP0nObymWeLfZL0avqKV+S5skmdYG1JKQ77I9/miFhgre9
+T2tBeD4NRta00aOo0AXXAqmjMW6umX14fjYx21ylRqLLX0K7TDtzxoWPMfgrGgDu
+hH5IQB2i6iql3Dv+olZ88Urc26OKX4ifqSnXfUqDB2N0SH3K1c7K2lsHvUfwkxyA
+WgsDEAnSNHq0HkmBbX4fMma5WqxX7hKvaa7GBUMZxLVmyvPjWvtJ9X6wXn8J7qii
+a1ThX6Y05kBZTGVndy0ZxKoIRvgZQeMuP9iABVDj6Wm9CLOtey4FLfzXxHC4+tA/
+A/SjTwJUZ2sGO9QX4+yyJ7x1qPk9Ac+6mluu8N9uGttU7r3On1rDUOhotGklGU2v
+nItRC8vU0o0ft8d1HZ4v/pYqjtpB+phhjRpJIno=
+-----END CERTIFICATE-----
+
+
+NCU INTC KEYID B99E979AAE48774EA2EFCA9BF9AD5B04040DC10A 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAnUxHNIhxsXScQAAAAACdTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAwNVoXDTI1MDMyMTIwMzAwNVowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtQjk5RTk3OUFBRTQ4Nzc0RUEyRUZDQTlCRjlBRDVCMDQwNDBE
+QzEwQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALfAXMtJ2m5Gkr1v
+RDW3frkgye3ABds8o1qKcTn+kqkL4wkb24BwLGrPZUnyOBESVlgVX7xhonJ/sHKa
+7HBqdi/NYvbbhKJ9h3xr3cVTsRrUiDH4THvrr0nG1Iv/CZBAiaZRAROFQ7EBd7u8
+C1bWRthH3cd8XQWdONEGLlze8Gf478Jb4GgWSegno7xqJF/lItFMPvQRe14C47+o
+ApZIAP6ET2/bRYRl5UK3t0MtCBWd9/ZekuBUpOjkczp6mAL7amoDiPcCDtheUsJj
+RGLLcKFCdQA+Df56bLp93rRkLoRlPPglQhru/NpQZE5owz7l7tJiWJlH50w3AkpZ
+VE1t/7roCKafNgk4DBw1asSDIk7+KhrqUijmIZFYKsZpfdHRQxzVbNyICukkN0aE
+HCjPX1M8zy+gZi7GwFamTAQw6olyAyp3UoBEW9NlupqzbWG3HqYynVuVwI4ttdiA
+t/X/c5A9kgqE0iukSw2wjs9xB4qREFo9yfD4kr+yjd25zRELPhKYRRBOqxuPedCr
++lBTEuTXilvvGLVe9+y0fwGxVT1yiBvWwi8FBoG9qJUyBzEa4FaEgpcbCk2FmM94
+4z3qKBBvnGCoLL8gM3ejPQIo97GwNdd/XtD3BdxLRd4mKnCY2He7oE7qwrzWXytM
+xobCuR84kWarjW9Tf37w3kNHy2lXAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQgZg/WgfDgm7AW
+sHcoqrC/pgXDZjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBADFnL1ecraifsEmStz0g4jwvTVxiacNdBB/rkuDj+TGp
+Bz/yNK1wV2j0niH1oFy1CS4uOcRd/n1xbbwkXw2GyH52/DBOExq5Dcgulvy6N7S+
+RjDJa6YvikZASrL1ZwcuJc/Fc5Dm5LpiKHSYA3G+9H1Cp6GKptoJqsWEwp5P/jYV
+Ji2jAPZpQ7khG9qXW6m0cpj76d7nNgQPpWoc4UGfpjmVc+Of4wFntqkModWxK5JN
+MQbE5WA1uQba92pd/yAvMjjyAhchatEqNexTbEuudsBVtVZ1hxSccrAXnCZdZevq
+lfuACMwlZRF0mCiqjnUaUeGJC6E0O+wpGwZTSviP/Eus/BdEQ74vxol+G8DVJj+1
+GihbJUkXUp1F040aiQ/KKGPmq/I806C00fqNv5Np+32npnW/2D9MMBRW6Sikxdng
+LgxyAA/q+U714i62e4BTrqEv3MCR+NJMLZHKuDFoqeHe73gJRnOY9X9MV6VP/N9R
+lGNtLWEBX0zKVXXCS94pUIXMyeULFU0qGVdXvyMXaCQSabRI7Otf8vH1fLpzUTEF
+5JrEGreZC9cgMabflgR3SbThsGUNjIse5N1UGwtyPfAlA202GGj3xLWZD3mqWdcJ
+FXuw6G7CZnkQ/VnhS5fAaZnphPGYIYuMw3MNR5xtKbtUV8NdwH1O7b45FABkq8qG
+-----END CERTIFICATE-----
+
+
+NCU INTC KEYID BB9805E319A78DBAEFA888B45615957205179181
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAATBsqIRUBYt+4gAAAAABMDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDUwNDE4MjQwOVoXDTI5MTIzMTE4MjQwOVowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtQkI5ODA1RTMxOUE3OERCQUVGQTg4OEI0NTYxNTk1NzIwNTE3
+OTE4MTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPIfQ/gq0ISlYby4
+622t6LpH+Zkpcn73+nvd8o7GOvgpUT2NPQaQNsiDns3q6nvbXeEen+d+3ucDbMFU
+aO+7g+PsCMirV+hvvtIPA0lTQwQmTfkh6LvQ+ajo/mTLIBL1HYDnwMajJk6mtMtp
+wgv+eVJclAXbxlW+xLyz+bED50vqPUxgzXhLzM21lbojreC5G044dxQbvxclcQ6W
+OtWqiNzGUKUhYuimjx8NzJ1ozsxjA/VMdxn10+BP/6PE91sqGm0pX+wy2o3HduOc
+0fmtxiEp07vynrKZDK0F5zWAjmlwVUgiGFbEFzEDVtt9XYcVYkJ6FqfLrtwvoMSG
+8styAEECAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFG1DkNmPqM0INpIYM/HcweNWqcNFMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAYd+P
+moVgXHLw72Zt9V0BtlpBQVfULI5bmEPH8JwpBg9tXKlfgGtyui9vmOP+LHzSp9Mo
+67WZ4Yc+voWy+LD+TGg1zixBP/VIz4VmDbkbpUO+RN/viMhJhKeTjtahYAlgHmec
+EnenxlqYxSsw7Fu4qclE0LTb9/09Hu5kHVHYxxVeOMEAzVp0MKuQzDwp75XDqoaN
+xxCHxTOu1S0YulqQLKLS+mk5F0uHNpuwLV26dXn4cQiWRjhAotn9RlZVnM7htVdw
+w2gTOU5IVUSkQTfjErPv3Rpy6TDlphz20F4tGXE2FJowmodGeuexCM0VkE2nxJuR
+rmcOcSJOCV64ZchzahPGsFrt9gI4TTUt3LSzadQRD2g/4sufsaKknluJmZISBwah
+xfPnIwCBBDfCc1LeD9qQ0IRm+2F3G0w3+N44ZB2QW6Hmr+1aibFpQ+9w012GHSRd
+gYDzl83jwe46LmVKaMYRI6ymdmorMQNw5s1eNVZ+m1TkXwvLcVZpYrXcet1bu5AK
+ehM6DnFsHdLFox6bDinpMCzBHBZvHPHk5J7w68oqSrBlQG14BY8hpvj/Qysutp+X
+WflmI/Q3gva400878ZeM/CEvZJ01HfL9ixArhcBBHqEyyWRP7E6jlkZ9H0pVxZa1
+G+7F3cOOs0BOB/ZseWRuyeGg5TJfDVyJMLrWKJk=
+-----END CERTIFICATE-----
+
+
+NCU INTC KEYID CEFE333390733C6727C7880DFE429AFEB557A892
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAATEdABsmHshNmgAAAAABMTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDUwNDE4MjQxMFoXDTI5MTIzMTE4MjQxMFowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtQ0VGRTMzMzM5MDczM0M2NzI3Qzc4ODBERkU0MjlBRkVCNTU3
+QTg5MjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJeYp9SL/9/8Kbkh
+CL/H6Egs5OsXj8y8JNWrwCefthA/olkiFRL1heqSoMBvtCq0AxiKjTb5EuSBdqNj
+/1hC+gHllqRJX7TWJRVtB7lSsadEvnzFcUbdHwHiYfVhkz3X+dw3/vhNAJUH8RnJ
+z3Rfu4DUs3CxivjRxUKpvaJd1Y3I92cwfLerVWzeVl6rQpMtRAU5/y54V/m6H4r+
+9oJ9Ce8yvnsA2H5BiWUzHwpUSIfNLlpEK5TC6Jvql+d8DyxfQLT90MStZVnccGK3
+ssqmsomxoA6/CH0yqE0N6OSJPIiUjGwzoyZgzDUNHjpUI5W1ipoIBXU2OSZJS7S8
+pZ7UtUcCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFNtCGgS8Z/Phu9V+ffPUmii42p93MB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAkfvM
+TYu+FU2dxZFzBu2LEEpmddcHaw73Pbo5T7k6drtoLkN6JNtdDgODAdprTY5Ev01X
+LSsqQ1fPWF6+6hCYbM8DH8Osr+7CPE+lpWcO6dA+GXzBUlOD/5xl2hoa79zG2/AR
+UHpX+Inl6XKHFebjqCwsFM7LRUcejk25bkkYZ9MbZHjXfIvXz5vT+t2WjO8xb4fL
+R7fkOob31EEHU0GznrFgTDEFxRQ8eLmqrtnFagiuWCBCRXEPDto932nZu2W+H60l
+g0j5BMTpE4i7XomeyXAUJkS66k3SRYMc3cAzhe+70Qj1fWXMtpGFFDrp+XHiYz9K
+ozTIcvcumxNC1g5ovKe8H+eT8FQ7RYiLm8hCB5UhkSD9NWOLis3mEpBQZLLcbRDl
+hdhjQwtGiu2Fl5r4uVTzCi28KPynXeSGNGdleEunZBovTTdPYfsrzf7IGqgN0pdA
+nOaKVGmzHoACRJmX2TkzKE8rELQ3Z99xqnnJ5NhOWQOKxciMhINi6ZDrH7d048mO
+3WD0pSLl550kOkPMaXaXHQp11cuP8WqrnBxTN/G2XnVvl6s29QFSJo2DXU0fKjUP
+caTpaxEfeF56DOyavGDnQjBFvc8thqxf42xPz42QAU3uClp7orgAaF8lXzJ1bMwZ
+wXEh/P0AOGfBeFJB/PHVD8fHqUdfGyBQNsajL0U=
+-----END CERTIFICATE-----
+
+
+NCU INTC KEYID D73CFE5A9E0180801181A1444DE36EFBF88BA16E
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAXLwMMtkh5fiOAAAAAABcjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDkwNjE5MTQ0MFoXDTI5MTIzMTE5MTQ0MFowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtRDczQ0ZFNUE5RTAxODA4MDExODFBMTQ0NERFMzZFRkJGODhC
+QTE2RTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJQLD7W/nqygJ3HG
+tT2pepdTfnsg/cRqtXM2oor5zy/DVjSXqfcS22URWBU91uiZj9AKyU0Fphhf7EO/
+GXk5Zm2AFRJDN6KvPPZeBNauW6o/vRbKQaUAXfSVfdOUzG+kMyGiOkaFsrgy+kQ+
+ke+2UhPDoLiye2t2G3fYEaXtI150M5fFdNMM6rYYD3xTqKebr34dg8ZzUznHKOS0
+MbfVxhK0oBuMkVip7xr5hUly2tZM0ovqT6j+JAc1u8V8VykEKeX3UqCM5tAjbskO
+PkngO8JMeDhLOaR6GSGHj4QI1UoPe6vRPWNbZ63sQLpZcqaOd+s6dY8VJSjklXIC
+BiJxUBMCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFHOclvrsyWMhihPNC/TTTjW6CD+4MB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAa5VH
+6WmfP+FTpUQij6Bh/6/ogFWIUxpD513fFL7Wk1JCeQ3cLCFV7/hqIcFoCKoiTvC/
+Ig/lugnPbAaRQptlU7ZA76pDQ6p32U+XPgsYU38+W6FDNmgJRT2Y3JlGdG/gCDDW
+XRcMbjSL7flhYKnyn9lN0t8MKQ7l4UE7iyCr+3N4fAlEWdxpix93+0v824VqLg9q
+suXE8ab1SjyxUBPy/ozJKovQGjShkcw9sDGcYWuzRTyHEbcB/j2guRWf22V8GuUC
+gAfwp0JZSnb5hlC4fO7F5M8Fui7iXP6jtiWpSoIWbB/frHzndtkM6EGw3NUQOs+L
+guQLCcKUpR709w7CnvmHE9AtMAB3ZAygmS/s/oAEf09fd2yiSzRc+fzUPxbYeWcP
+EbPx8YCag+sx/ZfhCDXsi4m4tY7nyv61oVWu9m1vwl3akl8ZeiSPvFwXjk3a6OOZ
+zE69lIFcPE6H9r2QXWYBkc1NbquJ110fHcUBImh8lpJifJ4iY9jvomes31B0vNva
+btOwubqK6xCk8jfbD72xFSWNO/33UsXDTExLiyYnGe1TNr6G3+PX0WD0NIceI58M
+Q6xbM5VXEV1dyLsOKXnTvTLsQmd9hdE49ORUmYV9fHUcQenHXBS9kJbTPOA+5Hp0
+rzpdp8olv8HD6Sf4P++ry4IPcia+/AMoJNddY3Q=
+-----END CERTIFICATE-----
+
+
+NCU INTC KEYID D73CFE5A9E0180801181A1444DE36EFBF88BA16E 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAna2JTbUaMfmOAAAAAACdjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAwNloXDTI1MDMyMTIwMzAwNlowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtRDczQ0ZFNUE5RTAxODA4MDExODFBMTQ0NERFMzZFRkJGODhC
+QTE2RTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJPfjldq2YQNA5xn
+0qy4haIcKujDbnoNvxil5lebOXRgBIvxg49YIez/dl7e9fhRd4pTsUr3F+cDFPZf
+SYksChFOBGMzhKr3rCoe2oxm+JgjI0o4hNfpM9oh/sJ6M485LuiddJUtv39L4hMh
+tNOVOD3Z0MNZmmEMuNjvpwlnfb/1zxqdy8z2lFJJ/Q2hwgDeLKBH6yy80eufu4Lh
+Z7Xh2MPmN+c1ABTkBjv+2FwIKylpmsvYyDUIlYuqK7wMx+1oF7DzTsGo9su2l0yw
+KOkYkSb82NUMFs4xZ3lisCwv4XzcBu2FMXwkraEd4Oxm15++MfkLrG8i+PpBQh22
+0nqHwO1ED2AxFilJgZ6DbL9dnuUVz5KpeAhyP0kB3kwVp3JR674gahAljiZASmSm
+xsEiB6PcVcxZ5S57DMpoJPFhjhxi6ywG5ilQIP2ozIoqiF+sWfIeWcjQMODW0TDG
++K+gLvJAU49QHMgqp1qgvyPmPzvrUIzOlWDaSY+dxuPBy4ycGZPxthbiRQ1Ea+ro
+jc7HDa86EZRsJylLPUDtvsO0ai8ehcGek4HWT0JhrEWGYQI4GrkDVlZB5sLP+/wK
+kb9wH5z4TudviTnFCcmZhNNtbUMx0GjnnbKDPWXv9t32JHhK/GV2o0umk4JqVJbo
+JwQjvanCpm6JNAd1ntG8YnkTCinNAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBS6gn0vRBrLjYG3
+cz89WTCcTtZL5TAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAHNlkd9mowLEn4xWPt7OQ6xy9ExSfASNRNsjfJfvwqPF
+aOxx6/MG8R1qAfFerU+2gNZ+kA4ds6QdfZEtD72idjFTWEZwehEDvODVfjIYBRtp
+vxDNiueEdiye/DQRsJhrdp+xRLo+ln2ZWoJ7kAIvXDgRZT7qc/TifDdKCROle1O/
+ozG+7FPpm3Mfl8S1XARzIfcwiD73g8felns7aSHC0iZ7OcK3AES3lBcGXmoLoEE6
+CMCBieS0SASqAaboIOb6c0RxHfkcCBF/rhnZm6QMr5NZJFIa/JngwXOEzhU+Q/2C
+QiFbdrH3uXmwJBG6uatO1FoUm5TPE2WQntxXOJH58sn3orcmQuKKglPBOiTPUNCj
+y3jlkc7fNHJEKlVU70G04WDH3BD/OAaL9UONhfJDnSp+J8F7+p+bY9T2a2lZIvkj
+rxF3Wp65IDC3NovCk6rw7zosKHuk6NqB5iSrL+hQUVq5OtrAMLrZuMn1U1B+ykNv
+5JxKyqO+ukqNZtT8p0hl79HjLRrkEOxn8Ggc50pZglQLIcVVs6Rds9l7uFHlLcET
+PIufvMmeeECd4TbYSJIQHzynB+rn6+dgag48naGeQZ4UDysg/GDsLURCDBeh25zB
+U2WeEox4EEvNSCRMNaWJjBXD5GJnYL9WuAdRcJL3uXu4VZKmkXe0Ikiv+kOJ6E8z
+-----END CERTIFICATE-----
+
+
+NCU INTC KEYID F99F207DFC8797BFF90D641D25FD5A45F76310B8
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAG7ciKpx0AvpcwAAAAAAbjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MTIxMDIyMTg0NFoXDTI5MTIzMTIyMTg0NFowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtRjk5RjIwN0RGQzg3OTdCRkY5MEQ2NDFEMjVGRDVBNDVGNzYz
+MTBCODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxB/aFgRVKFjwUu
+ELEwZ0jE5aHaydRVd9T4+KQCNkFEXw1CAs2cU03gdfz9209EiRAMJc4Hd3DWI5Ru
+z9uSD8+CvZULvH7Er7GaoPq8kBG+d2TJtbHITGvX14++zuvzUAyXW6ho5vuAIO9Y
+INWYaRdljAxUO2TgvxGZdy+bZsf5t7gm+cZj9DnGx+r2Al3i61zgDhyV9cix0ahn
+zWEkoS75UvXIb6SWo+L0O5W/gNuWrAkOfu4BMXzNndDRWCLqwbNWV/iz02HUci6o
+GLWpr01VFLGiH8vQL5CGmH7ubYMLTQ3+ADBWn+dy6Ef5ASCY0ZKJibOE3BpjThBG
+sY2F230CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFPahi3c37UZuXLU0WJYyLj5Ok6w1MB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEANQMF
+hp2iXr0Xi7nGjL5dclOP5qa0d4xp738dih3Fu4YV6fzX9c1wY6EWTBoiTEUff4LG
+P0B0gC++TFYy9zDAYOovoVYwq/iCW518DTQgIZFBtrwgrersWliRwN2+YYt78bEw
+8e34X2wOOsPac5v7aGU+H+dbA3LSlmVW+p3gxUXm/0VWfBcQOsG30PSqF76p/P/E
+lWGjCmHC7m3jYRxvQbm7YGeftCgeaaCwvc9+sSKzGqx9PqWCOzk3IT1TuB89+5Dw
+vrNq7l2GFVAEj/lQ7sZJ08bpjo4qzj3VS5TiOhCL5Tw4lecyqATsNXstTdVL9VUh
+NZdK1XhvXGvfeJFh4lEN/X9a4HjB4clAqMKV95JcuXUEpNNqPr0CdMqdLm2yA90o
+lVM1OOWe31EZupBhNhut4HuKiPF3vb0ak9Q3Asf+bv/LtuzxGAun1cCzfpFhEc1X
+cqqekOh+GjqZGaJj3j7yvLgPvpPW6ovyLhSANkgTGnQBucmc8VzaWESVCJgebMpj
+QEmn8rAqKWakmyyzo4DLeJ7c26C80xtxhaOanJJVAU1hf5/zt8bOTGKi2LLxi7v7
+GhPQnL802iOtm+WaK1Tq3EPTAccVoOWKxLGqQs+xx5vuU9gKN2R/rIe0jZwIro0r
+aMwOqCC9vl3yNcqVhRAyoOWPSY9A6GF/Znj1LQk=
+-----END CERTIFICATE-----
+
+
+NCU INTC KEYID F99F207DFC8797BFF90D641D25FD5A45F76310B8 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAndwfDVyRwdeXQAAAAACdzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAwNloXDTI1MDMyMTIwMzAwNlowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtRjk5RjIwN0RGQzg3OTdCRkY5MEQ2NDFEMjVGRDVBNDVGNzYz
+MTBCODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMZn+BtLRnwdovRB
+h8nF18hXaHvPyWkQxKjixtkGbkti0P7lCJlssywrzNyooEOsA1lUbC56jEVWamBi
+WtNhVdIoYEPLPhKj/o+KjMdHLLDxxv6r7368Y37ubiY6Tz38+5lcKFG3vV3FCyey
+nIomQ8cbKGsu3j9snHOHR8hTNFAkGKVU817OaXrFO3AB27zURO99oBfFnhT6IjqD
+j98Qeu5l1SQL8A9HIgknvmJCKEMzv3S5TFKkzHQOXsrWxta4YYecgmJGXTG8tHTk
+fevj28R4CRAuuldolercdTJ0XR/Q7G7ylPeXl6mx5bKtpfxPQCcxJbtEl9O3zBWu
+oR0iiycG0dCiNQYvyeliprIWCB4NLxqfVuHcnhswsu/RtwXWaRX8O1Lnt8PRbEme
+pctzFAR/CuNXcabEHHJ572Mb/W6INtwDcCq5EtwPnT/4aZEr3Z/NUm4K+FbNIkdv
+vbZxUorU49aziBIu1LP19pbvirKACPnFvTUerp1mwIkbvJ1HDwI9QuqaRLqa8kpN
+O1dy7VsoRJdf/TvN/RwkFPH5WbHVnBu8++hh9FnA1lYerMQ60GVxltwUYTAPH5ex
+EAcPZh+RiBPHCRPO4f4Tq9+wqEfJhf9TsMoHzrVs6gGx7r2Jnt6/OP4ePBhhXrhO
+6pUKcRk30BPnjdTu0yRy++Lz8QuHAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQBWj93xiOoarhe
+2I6ZTUZEg9zN0zAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAFInt7KNPgYXY9JE+aCsPEf5sFkjzO4RA+dkUntnm2nH
+XTmNhYhUpL1s2ol4IuBgQCB1WOn25Z+acIHP8OVeZnWStS2Wc0E+jtOr4aPZXJwa
+g0k8qc/rGPgSHYCbxHi9VGA/3Ft9BUF4K8fqxtP+sUkAKqpOqhEpUXlMzAlRGoi/
+yWgyN4ed3DfADPlhDC5TGHHGA5B1uzdhv4hvX4JHNg+rW4OUS2ya4C/4KrrpSNB6
+5CBRp5TMfk+XfoQs7IqI39hZLl4sOI4699TGmVt5YmOM1zFSs4qwB6wL7jJJy4Ef
+w7w4NqGX4TpVHElWALwUi8V2mQ1kqqIUdrluKCC6XKkbLJm8E1+1Rw01UTI7pJTi
+biNT9tZ/w3zPSuYsZfu4gWdgMhkO6IdORh7TiW03IO/iFxFNA0ZWNUsJaPChA/Y0
+oTODrCVwfKAjseZNqj0xaukvnPOZXvAqSSf+p/GsR+YLJkd2NedLdBdtbKuESQPT
+KjHRDr+w1pNtZU/etZK59JfhPed2fYZd6yPCou/H7xAdmVSNt/Nznr1eInvR2bT8
+oDuLGqgqRRQByycPeZbbAK2XVpT2iYfG6pjVOEvlrb8ctPbVsYi+BlW6/NYjlxpA
+anSWL/XtPlULxiEoYzzKrdxZwjr9w3x50tB+8W235TtG6cyfkVmQJ0T5Df4QDXFK
+-----END CERTIFICATE-----
+
+
+NCU INTC KeyId 0FA7B495048126120E12731606776F3D68A037C0
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAD8S5pSJztECMwAAAAAAPzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTExNloXDTMwMDIxODIxMTExNlowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS2V5SWQtMEZBN0I0OTUwNDgxMjYxMjBFMTI3MzE2MDY3NzZGM0Q2OEEw
+MzdDMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPSjnDK7Zu5auISe
+NRjmtu8nujXm9kGwV6zaoxQTJVDmQeFDyPz+EQOoh577KdSdXKh0eq7jUrQ0WkqW
+f7EBDPoDl+5n2ejsSCrBEk5OsigtL6pQnHo6pspGOHvrFsih4ruP5xfLK0WUj7yw
+IwATlEMFeiOYu4RwygBZ0ZdvSMGXRgsUjHCTNv+Z5eZJdiF7oe6kj1yrfq3jDSTK
+peBkr0sGON9QzE5CgSVJNNyGPrT49PFfvwSExezWsXGewfcKnqMBCjNJ6Lg0kaZA
+Ce+A4PdF/M1nHZY5DQgN/Jjm/2qgDtDVFsOS9wHiEUOb30tm9cV6ZGuAs+gj3xom
+OkFAW6cCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFK+PYnsQkh19FFkltqAv0oJGc1lHMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEARjm8
+nN0MYcakDeAGDO40jbNm2F9SINVEKjSGhihir8i3IHaJbgfWUtqPaNQOZg27ae2C
+8ohaJ034EnQh6y/rFnqZSi7+LXFN/QxuSvPkjYO+tVHUsJ3jhZB8ABWk3CWKMF3U
+N++zfBWxH8QUg/T4SV/9pBLGEwme7Lc47JvEcq578VhMhHIQ83FLKejXc4hl/C8l
+TxFK5nBdJQ6sDMyAs19guaTCr8aUHPCHR0bLorPUfstysEphAb24Y7Sb2NLHe7Gf
+prCtamkprJYpVE/xnm3yQAq2+AfXa6reXgvb77egV2r8hIztNty4Ai4Mgzetcijh
+7vJJTOcrogXkFlBM9GEvwzv1LpKfJwcxp92J4Nda50rEiCsZ+WrzTTsRfiUmMnL+
+yjW06FpJwUXcd2GKsAzKKsYo0uF1oyQ9QWWAMU3DjnhDH7mc01RHARhVGo/lJeTv
+1pucfSSZJEjtOJY410+S1HU/WV2pJy+qbaio6WwtJ1A5zmOlgzalTmKdvAZ1bNen
+4IVOre4NCsPjJazc8Jf5E+82cNQie7ThzXF5xLFmwDA+hQfO9WXDicPfsIogPD/L
+me+MHFYNjG/tbhghJDefGnxVURtcfrrqRYEfMG4kyIIAqYAIn+UY5Riiki9D7XZe
+3lO4Cecw6u3oI3/emAii7q53k/cYhiOoeouAzVA=
+-----END CERTIFICATE-----
+
+
+NCU INTC KeyId 14092B5F7814EC9B713E9A9B90A4C519DF08E688
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAEj+j7POBE6W9AAAAAAASDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTEyMVoXDTMwMDIxODIxMTEyMVowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS2V5SWQtMTQwOTJCNUY3ODE0RUM5QjcxM0U5QTlCOTBBNEM1MTlERjA4
+RTY4ODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKqQ8LurxYzB7Chs
+78i0caPu5Gj7rOS+Kh4Ozpz0CRgjqAN7wiYrmqbk26MTDWW/dox6Jbqc1KWnrG9G
+NiyM9ayxALCpy42l1evbi24G5yZAJpFlsBqN/+mf0YqeSQ/9ZDJqC8lri8Y9Fwoj
+S/a4qkXnCOg28Cmg1Pp6xz2RbFfwZ6TaZdRJHBNTANu/A4Ybxrjw2EUm9SzHOZ3Y
+fujcFuqbRebHI/40MJTmlqM2XAf+jFzie7B+VUWuoHqkqDAGYVsPInckkIxGWVio
+4zEnzyxNR+73aoXZu5xA1Yx2ov+5Tgqp/huPcN3/x4BT2Jgo0XPYFpMrVJutuv5Z
+ZwEgP60CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFDoZmoCDKXYVZdmni2DSSwdaLyWiMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAfyVe
+OyEReI/fQ1jetIPfj6UyKWYa5FhvTJK75X2905+xe9Lwk7dccSER16hxixzEyAZ0
+slaoq557xPdMVyGcuNvlfDr1HXdEpJqhOk/4hsJAfI6VewX7hTrmWdP2mFkj6V2Y
+XaheLuk0PE0hqO0HBgANcX4fbDGgLuN2j12B1lXuj1M3mPg2Ny0zbpr54jWEdS5Q
+AV4mz9XG8MugUvePKQrxvZTo73MnKvp+WjzdyCIi96FC3NKByPK918F1TsM1pTrt
+1ibBGImzl+eU8itO3tPtrbfIHGZermGQhZE3J4+0PvKn4KTUMDEX5MPwFlJ59gmW
+U2oldzJlflJikQuIeSpoRL1st+R7FDd7o1If2bBkqE/AkOD+qiO2olux/HRWpDsh
+EkT2Jsw/zwnuoi/IOGHfJ/vwWu9/BWcGcKAPv0/zoGW6bu1FWpWMNcD1wmXqaJDv
+VuT9K6YAqmMQh/qQHYR47buG2BIbS67iTNL1jEH8o6fceQkwUvOsSkQ+80yUew62
+vtOVNg/Zyi/omSLhHTUvxOrMOcgZpikqs7DZ2b+ciptli3VG0MX/WGk4TIkM0coJ
+YqMuV7geB6ozLpADBvHTfGgb+T9pBH4REHkAIHmOltL5u2VrY8RR3Tb1ql5sqfTp
+4trtQxcnpwRQ2V725EO/vDD9UPdWHZ3hgAxFARk=
+-----END CERTIFICATE-----
+
+
+NCU INTC KeyId 145126D0FDB53E99907D6FC6FF1B90455B9E324A
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAE6UNHOT/ez2VwAAAAAATjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTEyNFoXDTMwMDIxODIxMTEyNFowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS2V5SWQtMTQ1MTI2RDBGREI1M0U5OTkwN0Q2RkM2RkYxQjkwNDU1QjlF
+MzI0QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM8eUcrNMrR64+aY
+MNVcqQAb2Hl7xG30kJhGvycexQP8vd5KGASknG3hKxcHLNZJeXOK4w6FMtdxuZ6G
+8OJVPUc6PmnzvqtJQhidoW7XkmYmeo/IvHZcS1QNq3QK7JJ/1lZE08IOqJ1LAngm
+2/hUGNDqYnQCsJ+btreolq703IsKnbCzOtTxjhL+EB6zUWs1UwlXjngp0Tb36LL2
+EUjX8wd5Bgtdgvbfnymgax1zS0n28zrnAAvb0wKAYvaxnmefVznKOeJAMeZ2YqbL
+Ov30UPpP4n27Nch+y5ayeFHBjNFuQxhb8ReejLP3dy6fqdGyKnA5ddE3Ffeb8R5e
+eak9c9cCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFGlTxvGRz0Do4M0b2Cvrshb/HW0uMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAn4E7
+lLtZXhLjNMqp/jRrw86s8UWVmSlg/NBb2GSLn1dBrv5/TgJTZQayHXd5zg+Yg5yQ
+/YhME7HnS7Y5Q5LRAFDW3+wOdK5GbBY+dc9qD4E/aa9dmSOuwjiAA8Ez6nAdH7on
++x/UkTQh44UevIyf92nJogLl5HDLLD+rgXn1sNUxP9Ep3DWN0gdrH+9sDIw2lQ8s
+Ng8l3o55x3hGGcNp4PHTqK4a3wIQHsZzNU0dAofES8fPiV6DXzPaaFPIeM19lJaA
+swmgWrRJkQcIhhPiqkSQ6dUDJW9Rb+YDvKGhLMX8a20aQE7eae13IBntFglFjAtT
+7VitTd68SBsAcU4+Rt3nkhnOwOnjMH4PcfRCFeax0Mw1dttovHVVtOf0plZALF12
+uBAy+GXaO8scEdUvVpRT+M/rUkNEFbvl/x84j1j1+nZwQK8Nd5/XTAvglvPJsQL9
+DkJd9HtysrSClNlflR5sRsBZh/K/fpPC0i71Q32ysgIAYymJPOR2sedU6a88Mx4G
+EuGEUF1saKmLK4YZAAlcfZ6Uy1/W7CifLEjILBQpopi4gEI3Rq8AioF+AjyDVCwH
+rRYAhqxEXopkh0+90nGJWFYlvN8hNp7jerrJM9VfFyTSmwjchzEQWrWS2aSaOCoP
+enae6sb5QP9SpIFDwAD+rYyS5rCSQTO+k2aXWj4=
+-----END CERTIFICATE-----
+
+
+NCU INTC KeyId 4994C129F1A548D488586F22A2DF8603739B3BD3
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAEV15H+k+1K02wAAAAAARTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTExOVoXDTMwMDIxODIxMTExOVowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS2V5SWQtNDk5NEMxMjlGMUE1NDhENDg4NTg2RjIyQTJERjg2MDM3MzlC
+M0JEMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJtnDiAmVf7HUNSJ
+tGxA6W06MJY8OELuyDCARV5yVuHCFLzwHm3VQ307CIrdo0v28wlGk/zLmsisRJmV
+GOOjDEzLeUNnoI5vi+BSkDoUBY4+IW2SDS9H7IycI9E4YYGgmOzQaY/HJdDphcYH
+4nGetfF07iJ+jJx56vsKxvfVqDQCEGUARTWsGcMuP6bHkOkKzXKeDM0c6ROJ5dhu
+t3Aqy6Xu6uaWNlvbToUPzimp7OG6zY9eCFfK2bwcC/yf45UhoSACGlOhHFxK18FA
+ixDq+54VcBytrP82CWt3MDpg97JoEFJTYb0HtEmfMFD8kPDDUyVYBy3cJ9SoLv9g
+agWm8RsCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFNDbgr5lXh8vqVks8BBJ774J/AzXMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAJ5nE
+b4GngVmrom3JCvfubPqr58hQl0tppQS9aaJPXhvXt9Hpy8aBDk9KAUSDbXkTCYa0
+/TTmOxmjspdKDYdw4DjGV+ngp32PD22DHskckMQ2ycKY5yhbAwVT9QkMTVAXRlNE
+4tTcQ/1hYhA8X9xa0g+ujpawyiLnGmHpBvHWo4p0GssoKuYvu/fJvGV65Qk+5Ge6
+KesGoDFFB+PT+tXy/+lXovQMk2wyGZOweuS126fDphUWfkyUtHynbqrkA0SvaB2m
+vtYsRFKcLYmDmcVVxq9VeV/ZhQdwCT0l6gw7ZElO8f/0LuEMzPr1CCKKaEVgJZWA
+8JJhojKUhHFj2gwCbzMviLfKZtDLAbPj41j/N2yRojkr1gRR+BE+R9mk+9r7eXUc
+0dCm0VC4tMu3hPwnxtfEGWxP3rylSXWv+7MQqOrEmLQnmmsH23FtZ3zY1uz7Hc22
+ob5H9YEGNifAyeKzhfYPQWehF3pW142uPrpFmuy4dMw36IDamzy6jT3MbxE9K5E4
+Tfe2p6scgcaxu04nJtfQVeO5wy9+UQhv5YAp7Rvb1MPuakMGNRvzb5BjeVO0bnX9
+NELmqePKP5CExyV+OeCR//0OgYeyAKyyZ9VXn6wLGB1SG5JLXKtRmQqVwqXSeFN3
+p0Eg7EBQdZEOPXhRoejbPhr7uNB1If1HGKHHTYc=
+-----END CERTIFICATE-----
+
+
+NCU INTC KeyId 72750C52CA3E250E701DED65CC69204494A8573A
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAEsJtaK/IloASgAAAAAASzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTEyMloXDTMwMDIxODIxMTEyMlowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS2V5SWQtNzI3NTBDNTJDQTNFMjUwRTcwMURFRDY1Q0M2OTIwNDQ5NEE4
+NTczQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANkI6qrMDZto6eVu
+sfsrzslIts+wEu6kt8ALi62mKbQYyp3L7KHzCWh0MupmouMm1an6MDU1P1j0lUlb
+3uovU246Zg0U4XfNjqiYOwxapAvNaDCblytpimpxe0QoMaspQsFSkabHs1UTbl7R
+ZHKqm0Wh5+rDjiHDe0dbCwGEPLRh7F78ivr/6sgVbpmHfYdpVwWbkgwE+VfvRlzl
+W1yGBHVM/yKV3oJIdb1f3CjVHp5AxmC0XLwYrT9jNf77/n/A3bm0N9NHsGgm+nCs
+qIpDHhSd9WJninwO0rfgfUt4Gf6u8WreeMMNcJgzNPU2G1LucyH4iEEV94DJV+tq
+w3tchQsCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFLQF/BHsVuMQ6UPSfeKisokhOodBMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAEyQg
+9jtwWROJ7IBqaH6tCyYRJNIRnHTD8jarV8KJUNYW3q0PvhTvo4f76PfQIOF+ur4r
+L2wB/cjU84+0mnwhFpV7UyDVmAlN5ykkBkyvLiPoS+w5S+hlXtODswwwhinfYV8z
+/5G5rn1Nza1OZQrvoa4j9KicdUZUjNzabXCyMpVOC7qrCQ3cHx5hMVD+auiYFLNc
+A6CgaLbOpzhUfXknBVbt8cjocQXmVHSEAN9hGwtyIFHoJcWyHWA6MyrFzrYSbbCE
+szb92jaPEYKF24v1QIWqT3gruVS47XXGzU7hKHljmB5TU7Gkdf9iUVhVJnieTitT
+P0r9WudI9eJ/sUM2WLMX8n40pAtrW6/dpETGcVyVRs+05kVgXM/5BVe69memppEL
+iE2iBU7c46ZRVLtGXBdTpYDfYW7h17pcVTBQB0p5MFsR2h9inSemOEmAWdqsqCXu
+9Oa74P/C5Px/kOVqmLPaE3Oh8wu3dQSXVYp2H4GrJEEw940YOKFwVxH/Rwu/dmgE
+T5AKEXedS7NFzB99SoXqOUiCztpRqYtagvPdD0fiednAeArZBvO4gutmhlWrdSqH
+kqghnw1V0ArlCwk1Bsqz1Tog9dowmtShgvV2xW08Al0pLNSbG2ao3BbbHCLqlbZm
+U06fzmAtoX4DoEYctEPSR1j+GxOwz0ZISeHjoAw=
+-----END CERTIFICATE-----
+
+
+NCU INTC KeyId 8E1AD84693D5D89B1472CD8F999076EDC4115400
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAEJCEHQTpbvoEAAAAAAAQjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTExOFoXDTMwMDIxODIxMTExOFowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS2V5SWQtOEUxQUQ4NDY5M0Q1RDg5QjE0NzJDRDhGOTk5MDc2RURDNDEx
+NTQwMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKfp2HP4MLRJ6bmm
+fgCK3Pxezy/WcKp1QRvJD5OKVz07cIsBklO5/TwbAwXaRFe5/EfDHG5FuhcQ8NUB
+VbZQ6mh8cbwLXvU2mEuxKrjn85Ar67I3g/wOLOW0HgeWn3JwYyrpvPDac2+Dczcs
+365fMcveSbT1eHg2dK2zuEPA+kIFnD8rilITc8chVJUtlRaP1BgAX3otEI00u54C
+uQXNZLR61lwwgV4/DuRmWvqFjgpYf1UtcUUqEO1wTufj4TxjFgnkvPAxZxyE9w02
+AU6lxE2P9eaUrRYdIFJ5XCLM3I/pOuoK7UUp6zqWEArWK1QELy5y3RTZP3F3EaX7
+XN9MKuECAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFFElu+d7/VHmSdjfOrHk8vAnfIh3MB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEATYaF
+UC7GMPGiPZrxWR6DJihaIOg+0R6xCQu9stIidUhLFwMATsprggXnT6nQx+O16OqB
+Rr3QZvIge/HMNXJY9aFpEYYLzrNGsARDB+xBhgAg2iK8qJvpl0n2o+bd3oqSdtXO
+2PkGzPPYGUeAFMPg42wMEzoMHxDMTFQLpKu/yfVlrn13uS1VTCUXS0Meuwx1rYSL
+2CZsbUv5E4Nw8fTguweOs4SGp8R1n7Rehn9aACYIt1Nr3PZXGzkQC4x2hMjjW1DF
+u7B2Xt/xZl0FzFOOFaxhGMBGogv0pmcnq9T0nNbmkVi8dvkRabpWRAtPjl07UFRw
+WLNlBmpYKJbSEnPk4qey1MoDW/EwirhxOot2kgVPskbLqC4ClKjhl3iZ4qMRixBj
+TPABaeWOcsRymtSw6booe8hkn6FbdW+3gXGdNDQyKxqeWRgr6YsAlcvzXshjxiNx
+MX/9ozJ2mcbjxwuKMjDCevDLayX5utnQmZvjgyaGB1DfMFvCAtiePE4fylgonkPm
+w0gjEQpC2v+JI3iBYEychw1hXPDXS+1iWbynGOI29bBDWTQOckqN/7jDyLVyFPOC
+8f9ANKIZYY4hg9SeY93dGgSVcKE/H0ygju2cpWrw6hUx7xQ4J1G2G/EtqBtw/Ef7
+K16L/IjN6LDXzTiH9C3zCePBqKbBIHrArLmEZRs=
+-----END CERTIFICATE-----
+
+
+NCU INTC KeyId BF9C5C6FBF80CDCE74ABCD0E0E6004EA022A6606
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAFFAZMbW1AltBAAAAAAAUTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTEyNloXDTMwMDIxODIxMTEyNlowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS2V5SWQtQkY5QzVDNkZCRjgwQ0RDRTc0QUJDRDBFMEU2MDA0RUEwMjJB
+NjYwNjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALL20ryeezk+xJ3x
+07lf672PE2f0hpoUoPmo2DQhVJRRpuCVvDJhddhnrwa91o0coP3rRG18MkcN0E9Q
+dAbgI7heiOkelP0YUe9+jtK04dEjbrW/3xoCoK80f138LxITy/HE1hE5CWjVIBgu
+WSkCUQgZdcR5YVbpUljpnIv2jVaZxqsPElJLcko4XcQnEqYG23qF5e+1Jo8y2sk/
+7fjpowT+QDGVLUUIpRP1YLB7sohQi4JMEOxGtitf+DJ3WXhMLsT0+SJ8gJ+e3yxR
+RhUot+f8xVzgbkMvRl8I3+vFzAw9Z4Q16IucI6JX3U2yOw8Fa166znuL1bceSPTl
++09QhukCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFF+0/V3bWqLAFnngeVv82clbTn5QMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAk4nN
+F0gYDJHGFPgFrrBtDGn9q9hO0XKB+hp24L0XjL45KlnLxS45Kd9Op7xfxAJ4+jtK
+ve+qYaDAdx7ecrNNq+TyGUCS3JgZP4JhsOgXCKoqM6ynA8O6BZyxg38CrvNatJYL
+eeTxWy7I0qdU8fwyS9i749AToQOMBTMR9dpKK/Dff2IdypwJv1jlXPLATJYLMkCQ
+P0TEDo/4eMiMkYxEiw2kZCdxrVFcSX33vNz0DEZ6ndeenJmdMsRjW7YdNdkiC4tz
+9b4LCZvXK9mnYSirtZSO6Yw4ztDE1Xrh0248APN9JSRLsT4xrkajep+sYrPuF1jb
+69Yuzcxr7UbZa6ZuzU0SMFqWyDJqYY9vYxxr3K96xLxZTvY4SWOHNCRG7/znlGtM
+mkuGieNOwogzw6A+5sujcvP87S9Nxuw4zPGZfWme6uj2K275Gysa9ac4OT1t5QZZ
+u395hHQi1wMBdHfJoFPNcVZgKEyKJ7JMIhRk9PngSkHFY+giTvjqlqt4Lq+Zz/G3
+Gocq46o5pMJTT7VPIO3mbbDWqrCoMaZ2xJy9X4wA4Gw/HTCL09S0WwUSbULXjBC4
+MJ7TsMH7tpoWRv+6qS4LCME+vCuQ0cTi9h9mKa0hjq9uTJHQ9MPxArfDmTdPSVh9
+IPRsvvIsb1nSGRalG2EiaDSTm6nX0SXo98vf0ec=
+-----END CERTIFICATE-----
+
+
+NCU INTL KeyId 145126D0FDB53E99907D6FC6FF1B90455B9E324A
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAADxtBSPo83gNHAAAAAAAPDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDEyODIxNTgxM1oXDTMwMDEyODIxNTgxM1owQjFAMD4GA1UEAxM3TkNV
+LUlOVEwtS2V5SWQtMTQ1MTI2RDBGREI1M0U5OTkwN0Q2RkM2RkYxQjkwNDU1QjlF
+MzI0QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN+IytHl8oMgHHaC
+IlwC4NXGx77T2SuRvUN4D1oaelY6C1NDxOERUOug/ybGxanrOlXpp2vQa5cqy/Rw
+Nh2bxvlWDYOADx/LwDeyZalmu5f8MzSzU1sKD8g0VV5uGy5ASH2FnJekVrNqltif
+NbBPJzjXiAq/p+sFtwoDcdBumq5Zdh/zkwyBpUyLSmX/+fobDepo1/eIPc5dRsdB
+YbKMDAjNdDFs5eFoyyDcB2mKTTrqv9+mlc2Neqe8oPeiWW/mN0R1O6aAmtRDWRki
+UBbg0APWYMEqrzU1lvAZ9cSQNxCm7sFm2x/ZX95EsKDQUxraGlLLt7agr028W8uz
+Ji5XduUCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFCN9VL7n7ZcsEvnASwEnwTV+JElVMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAXSjM
+HwLx3BUkaEWH//kA9WLGrC9ZGxhgzGczjdRqKHVgW9VE9legTN/2DbqyABva1Jl+
+i8PfOBZqTRxOWZJ6PQgbiZsrfj4qK/HRSwhNyH6/cv+i7CATMB4hg9YMQOnXov9e
+b9L2cjkqpOYDx9iq/4/Ee7cvyhUXx2VA7tNzj9iqPVIkOD5wbdkXNyZMU9rfkkSR
+uTTmAbRYfGbnUdUKCuE8ZZZkdlG5HMxOjitlsg8Xf5KZFrBKHhqdefg7+UryVPK8
+BhoqTCO0JJedtB99PjNXsH9/22IYntdBPZU6gRs7kGmbPI7l8atKn4ICdMi5pIkf
+2XwOOQEerL1rHAaRmR9byaFeK6BbEf4X0Hewrw4dEsmDiKxv2E2Q07DzpG9o/Wpc
+lrKcKplF/0Sm2jhoFm5hXTVRKERLXOrUvKqxsldLezCxcTcfuf+6i63/k008Nxge
+Feywt02Hv+3HvfL4AVIQ3NIbWTTKuwvsLYzUD96Uw1qDt5eKWIINeCwMT9BO1SWO
+xt202+URuNatMQrqEZjLX0mLhKJckIm6ZAzrJUTUaur67k5tMHi4pItCG39QpH60
+w7mvbBntOeZEu7+blbg7q7V75/Vq7GVQd/MgkhmFurvojOFcco+ti4xhg7l45HrR
+PaZmFLmOkKT7EeYLCsD8roK9O7fRVVPBHuogAZI=
+-----END CERTIFICATE-----
+
+
+NCU NTC KEYID 08300F43A8F4B8C8E624A4F7060CF59E745015E7
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAG+OKCOooKgoowAAAAAAbzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MTIxMDIyMTg0NVoXDTI5MTIzMTIyMTg0NVowQTE/MD0GA1UEAxM2TkNV
+LU5UQy1LRVlJRC0wODMwMEY0M0E4RjRCOEM4RTYyNEE0RjcwNjBDRjU5RTc0NTAx
+NUU3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs3vREQbW6nU5yBLs
+CdvBXqJCLmkUYUt2PzQUg9a2euT/2CDBCVNCM5InsvkR3shmgGP00EBDuKRS/MgH
+hseQN7VOeZpI4OJkl4hd6PwyKOEwbLBhK58/hOl8+SY1YZspWQxVM1aWfRTC6iLa
+t1DFUnnnCkMF4jz17UlW6UXKsa+6acUFaNR3HMMXnggl7wOCB3eS0DxqTwYBczdz
+xrburUiXOBsWeA6LkuH6OgQeLepUcBprBhRzkDaOkyXaIWs+BmVZeavNcW+myMcq
+qq6eLgqTzGzdYnqTva92Z09aeOkrAlpgEmnTsCtHW4e7PnhemplbNhQmQb82n4cm
++tfLgQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUR+ISF/V1q+8emRuQIi+8N9Ju9FEwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBvdu94
+tnJrt1H2Tb2hq++elacdMWPDd0nNfDEB3Cu5S+8erE3QkBI/7SiViYeGLjy7BmBy
+eDjWVx/ud+vmjeIbKR+0MmULQATp8pd3hwtzS8mTbtvnsQgsZAgsSgYn/m11oxEG
+EIkRsrV6swEHxlHUeghKgxKnRCF5ubtRWn1925FmRxrS3meATaD8IsM4glSZzb5+
+VgRZ4SK1RLFId0gQ5qjsumilFPViMc1FRMykLlLmNoDchw29aLCXmxJ15NeQ8D8U
+eUoAaRJWe8riLCw+y2dGnesQgUueVw5teBcVrXFi8+lckqZiqx7GW9xn3XQ5t5Kb
+qcgLtaKHMpqcoYns3WkTlKYaUmSkEtfbfGBdjQZHywNkFiwJxkxcNOFRzWj8HbuN
+DKq57qeAS7d3nwy0hg4JH5lnLbzHyZRwRxsOsEFSLk+slt2qPKnRzAz72TcFofKf
+TYAsHg49g2sgep8Hg3XApcyBBqYQvwICvVYu1WwyLnRHL6tpf4Cvlvp8I7uDrx8H
+GZVqAVFonmwWyBG8GDNLTw9Ij9/+AgO0Pc5IX2D2a5ZTTUysoj4Q8YnqSJmHJKzB
+ewVPlfZMsZxCGP4Ut7nh+ldbR0h7omOsuBh8cfUG9SXUV3vFF6WGmdlU7JWZBhoP
+CVeQqmOMuluhL9KwGIdAjqd9MbgbqBOIkQuX0A==
+-----END CERTIFICATE-----
+
+
+NCU NTC KEYID 08300F43A8F4B8C8E624A4F7060CF59E745015E7 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAnxYDSvxsZdj1gAAAAACfDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAxMFoXDTI1MDMyMTIwMzAxMFowQTE/MD0GA1UEAxM2TkNV
+LU5UQy1LRVlJRC0wODMwMEY0M0E4RjRCOEM4RTYyNEE0RjcwNjBDRjU5RTc0NTAx
+NUU3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxMbh7pe2YOAGWFtG
+R6CB8QQW8SG+ZOM51sF3GoUMZAdkW/OIXOzWwnpGNyvSAICTS+zVZfhuNSObnons
+OrHS7w5ftQZ9S65z6WT9yqDX4WYIOFbWgezt/Y48GLN7ePrV6gEGHERE4kYWEWcP
+cNxV4YFpsanKyXQN7kuEvAmFA5dcyTRCD8ywVoBMRwelohbgZhP63So6HW6OVHFx
+4zrs5BTja8PJgCvT6AkGrhcfqepKdAdo4w9GIb5G6tKvBtBOTck7moX9uO23uMDX
+eLqZzabEpnPkv519lhMn/9YN2Z1VooRjYI0j0lcTp7GpTdavQnxAJAUuLIDsH96M
+nijuJEiqXTuRq+WJZHgPJdIMeffIuFmUriMY3EaTfMaPyST6sZECDcrOf0fMbOy2
+aZ0setEFeopS2SfD/a+7XwyeKChBQOARXd3iggxRRwVInTjM9gw3F4dOWOrpH0MC
+XX/LL9W/FPg0BSvtHkdhl/c5nyByXRdFdzK7PrWKAjKVCvPGabdMzUiV0i8PzF1o
+ewu/un0HSVZmQCgYn9sVgkbCK9/aLV3VxJLPIP0YwJUcDRx64/cN/7x7/vi+T+Pd
+NzZLfjnsICqBdTq/0I/iKplV3Gm/T0oWfFk8nJhlESxbeLvjvVd6CgKX4hf+Dduq
+Q0H2BxwdFXMuIf8qShLWawnP9RECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHZhRYUiVNBWCaP2
+37szWgXpGs6FMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAFmZ/8XQ5UjdGhZE3EJ6xzFo4aniVm1w2CfEQTVKeZf2K
+T38C5+AMEuD0Ol3YoHecNrsVb2RXS0vGqwloZLSQfvrDTJcfChrkMUJIY9uSNT84
+sh5Urv9qmLwD3ybsH1vi8BsLEfaSKV/Mflwaib0V4NeO3JsNMMc4v4wf/xvVyw/D
+Y6rXcLV+ypK3wSv8GXmYHm/VkuqtOdtselmT4zf+i9fEt3Wqa/2b3T37F1Qe3kEL
+5ONDHqd1hhVlvr1w/hpwqBJHcpaFaTfl4COa+W3d28iHZ2OzVxpLOf3ov6ZCCYSG
+Ww8IcrJt59wDCJLMibDndt7ClbqLJ1yZcHieRqVlMwAimYs2s/UoO/OfjR6oGnC+
+zQKPmfp9/ZCuIOpzgV20kPF/0bTYKPsRDoE8HSzXs+nQ/wvUjB5jOxx0Ba3Dfa8I
+6ThBEE8iB0t9tanaa3bKHQJ1Umf6czAcYRfwYr3+0RPcYH7j/ZjjEBV9sfN1qwzm
+3s59XDqtYZ9BG3lfLq/WQPElCqe0X2Iz+iyBZCbQm4VLLqRQnguTRtqVmxEE6N1d
+p30gkxOLkjWJPcWCGvYOwImwANRYGwTWkJbIAoS45fvzpHEudKa8E14gFgguaA86
+V6ryF9IVJP4y1S7u/IJhOzZatBHGso5XHh2cKm6B++TViH/M76kEAg5pAm/zQUg=
+-----END CERTIFICATE-----
+
+
+NCU NTC KEYID 1591D4B6EAF98D0104864B6903A48DD0026077D3
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAQDiBsSROVGXhwAAAAABADANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDIwMTE3NDAyNFoXDTI5MTIzMTE3NDAyNFowQTE/MD0GA1UEAxM2TkNV
+LU5UQy1LRVlJRC0xNTkxRDRCNkVBRjk4RDAxMDQ4NjRCNjkwM0E0OEREMDAyNjA3
+N0QzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9IwUMSiQUbrQR0NL
+kKR+9RB8zfHYdlmDB0XN/m8qrNHKRJ//lBOR+mwU/h3MFRZF6X3ZZwka1DtwBdzL
+FV8lVu33bc15stjSd6B22HRRKQ3sIns5AYQxg0eX2PtWCJuIhxdM/jDjP2hq9Yvx
++ibt1IO9UZwj83NGxXc7Gk2UvCs9lcFSp6U8zzl5fGFCKYcxIKH0qbPrzjlyVyZT
+KwGGSTeoMMEdsZiq+m/xIcrehYuHg+FAVaPLLTblS1h5cu80+ruFUm5Xzl61YjVU
+9tAV/Y4joAsJ5QP3VPocFhr5YVsBVYBiBcQtr5JFdJXZWWEgYcFLdAFUk8nJERS7
++5xLuQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUwhKpW876VvjAwW+xW90DNEezeqMwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAKc9z1
+UUBAaybIVnK8yL1N1iGJFFFFw/PpkxW76hgQhUcCxNFQskfahfFzkBD05odVC1DK
+yk2PyOle0G86FCmZiJa14MtKNsiu66nVqk2hr8iIcu+cYEsgb446yIGd1NblQKA1
+C/28F2KHm8YRgcFtRSkWEMuDiVMa0HDU8aI6ZHO04Naj86nXeULJSZsA0pQwNJ04
++QJP3MFQzxQ7md6D+pCx+LVA+WUdGxT1ofaO5NFxq0XjubnZwRjQazy/m93dKWp1
+9tbBzTUKImgUKLYGcdmVWXAxUrkxHN2FbZGOYWfmE2TGQXS2Z+g4YAQo1PleyOav
+3HNB8ti7u5HpI3t9a73xuECy2gFcZQ24DJuBaQe4mU5I/hPiAa+822nPPL6w8m1e
+egxhHf7ziRW/hW8s1cvAZZ5Jpev96zL/zRv34MsRWhKwLbu2oOCSEYYh8D8DbQZj
+msxlUYR/q1cP8JKiIo6NNJ85g7sjTZgXxeanA9wZwqwJB+P98VdVslC17PmVu0RH
+OqRtxrht7OFT7Z10ecz0tj9ODXrv5nmBktmbgHRirRMl84wp7+PJhTXdHbxZv+Oo
+L4HP6FxyDbHxLB7QmR4+VoEZN0vsybb1A8KEj2pkNY/tmxHH6k87euM99bB8FHrW
+9FNrXCGL1p6+PYtiky52a5YQZGT8Hz+ZnxobTg==
+-----END CERTIFICATE-----
+
+
+NCU NTC KEYID 9FBB79AA0F526278BED150929A7171E96A35BEF7 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAnheUdXpduruTgAAAAACeDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAwN1oXDTI1MDMyMTIwMzAwN1owQTE/MD0GA1UEAxM2TkNV
+LU5UQy1LRVlJRC05RkJCNzlBQTBGNTI2Mjc4QkVEMTUwOTI5QTcxNzFFOTZBMzVC
+RUY3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2M9jF8tBt3Mvg00W
+jmSyZHxV+k3y8+oJ/CFh8qLFLNU8nEQZWE2x70dv8fvSBFK1RErUcExRXHBRiRmU
+T0kl9shluI+5uyB7WNlCwfw8cnuB358AIBrvQoMlnegNdPOqSM7iOlX00ZxYML3Q
+CZpP1M3T5Ge0BRCY9WsQ+cP0eyVinUX/+uf2jaHZSfp0YnI1WMCOtO039f5CxJPo
+Y1SNrMBb07mH3x8ks7sZIQQj39tV/mAPYPcppqqAIPUyU4tPm4iRjSgk0rxO75Xx
+aXRLXAHKd5hxSy6BZXtntjiZ6SLsFRjFsmros8cyfRwQ+oXXUZHvrXOYb62fXGkW
+lvQW7vJdQtD/10MowXeiCoLqtHR50zMIqB1qN2kYztGAKtmrWPWP0+2bHQ6xSuax
+OHYoEBbnCEiG/RmgY8izA7Fx/Z9HJn/HijxMDYXKi4s9+i0D+lvdJTuLRnZJGqyI
+v4UZOD2L9Yx6pgy8NTi3CwqwJ7bGEiGO3bbg5xorzgZffmbSf8MH8AGT+mqAw5TM
+DU/wjj20qxAPI9DNsDlgOvKIRJihrIrN3GvO5b/mlgzlBOwvuSoyA2EyHynbTi9w
+3gQlF2/nHl5A3rlVOUGYhb+NFYnAhtxtfK5MpDINBlmCStlyz6CavH3ALR3WlITk
+jHpiUb2HveFzadPDlyG951aICNcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFg6GnRmveZMu5g+
+CAAnOW2E+hncMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAdgMa9yh6d62viFpr2U/Qi3/BcN47JS84xPRFfFTIMaV8
+r1/vK1h91ktDTPnjDpHzw9SAEo5JP5s1UptDRWZ9PDF42hId6HBUK0J7+ZLjfY7d
+o472aHNBHUzJ1oFzlOPtyJZaNvoQuwmUNQRzNWx08JhHqJ+ZvqWmg2/7uJ01o+Ck
+1nDzK7SsOky5HYrNRghpFhA15lquGOxEcto8WFt4XFyLsFVA1UtRIm5G1/xjvDQ4
+Xy9CefvH6jqRC3j2Jtzxvvo9zCo3/J3UHZ94cTjmfj4TBFsOK1tBt1uZYBj3VCxs
+0YAyPQKebfGRfIXpSsZ0GpE/Ldy3qEETAdS4njJpNNLoGoOZcDIbErJsgNeOyPyd
+kuq4Qa0aEfUeCae6Iwy6MEQlmwqyEXiQr6oKIPyd/eXQXMg7QSXg3ZT2TV/yz/XY
+70mAH048hnPUDkcoySbaTO0A+G/V4jtuKMPLLgOvMKzC/EooMV+5mbrO1jEDh1Wj
+8cGd5srxrgf2LU4s5rJsYsMxEuVcC/dizOgCkWfBjvOlz23ooOGKVjv+zwUhXYi8
+sEbC9rX5DaNzDHHes+yXfgIlpFviH77ehIa8d9PwbbDaV5lBFNWaQsOBQiRFyxgN
+3drw+6BWf3sAB9D9O0EgKG+2wNuCRYtqz1ebbf7KKaBWBEZZRDXpw/Vim9g0LSI=
+-----END CERTIFICATE-----
+
+
+NCU NTC KEYID A0D737290E16CF2AE2BEE7100CF56B2F04C5F043
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAQzejnI3diMv1QAAAAABDDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDMwMTE4MjUzOVoXDTI5MTIzMTE4MjUzOVowQTE/MD0GA1UEAxM2TkNV
+LU5UQy1LRVlJRC1BMEQ3MzcyOTBFMTZDRjJBRTJCRUU3MTAwQ0Y1NkIyRjA0QzVG
+MDQzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAttEtrR6v32u8zXJj
+/lNvjcTR1F6H8rsG+czTRyGwH1vrL0mV10HWEkNHUZdrSmdFBpQDfJNBwbDjXsND
+YjQaDUe0pnCVdgsQ/tiyFSt3hl6P5CLDx6kKN3Djf5cs/ZxDODJWZkbIPhg5SEqZ
+X/LqGDfx4znfie9OshdCtWf4sKzgJtwrc5QGlIeH+5MsijbEiKWFqD7g+e31XVHf
++5VgBKhsPdbwDDhGkXUPuDnXvSSc9nMNsFTUCW7CHZeFTaqt4B1x9Iw2adC5Q8z2
+QHqo+G1huFFsZ3xxQpEUp8Mcfo+fbLS8ngk8/0P+HaVhphgpWSXnzYN6jUhDxddH
+LqEbVQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUrlZRz+ScmB8Nyt+/GUH2+aPGZ6IwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA88Tqq
+sxeKdQRK7HWr6eXcERv1YJ3sBUaOwXbpufT/XjU/dPSCe/tmXPUrt4tjEByYNSzr
+SihPx9EzNtlpJkcrn1zFOn3IaVuijPEmFAoSDL+Mr+evUiLnTVWQihEw8nuIVQL8
+ZlPuDncY+UqdiWwkblicxSArWKY9vWRUgZYnhGCIRZrvLwjeAIGAf+q1gGQkOUTO
+iC6X+gwv+OjcvjqtSZA34Fxe3/HFXZDH+YgE6L3HdQCIKsa3lrPYmDQx+xPOTlAu
+7sjnW1cDhyVQjultjEK8vVAUYp+ebDla4MSBykd2B9OcuSEH7cz3YB2vGG8aSOfR
+xqjKvZQdCnUfQHHXYDKEQrL8uS8FdtHmKe5uzLJHUNHofcrAcbwPdlOjljXUz7Vn
+fFVAkuVKNFT/9IziyAfwdzXWllE1k779d1mlJ49/IxU1Wf+qTaZ5VEOUtxJYs2sv
+3IQLZbqQIJ+hxEgN9RF8cfyTWWIh0PAWJu8ttZ2PawtcLTHrlQmsK2ElCHh+QIM2
+KiS0uyqAI4WCVmxBv5HnVYgW4qSLCmdfcphSnDFFS5eWZHk3K48gjDvGwIiu9eFe
+Aln2QYFVXH7R3KDarWmREI+H0I8B/1OF6CTerZ9oNfaHKjqSCNmlJzj8eP4k+AxZ
+kKCI5Zgwfy4FCu7J7yzUs9UKsFYc4n69pTtAHw==
+-----END CERTIFICATE-----
+
+
+NCU NTC KEYID A0D737290E16CF2AE2BEE7100CF56B2F04C5F043 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAn2hFZyGekxCzgAAAAACfTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAxMVoXDTI1MDMyMTIwMzAxMVowQTE/MD0GA1UEAxM2TkNV
+LU5UQy1LRVlJRC1BMEQ3MzcyOTBFMTZDRjJBRTJCRUU3MTAwQ0Y1NkIyRjA0QzVG
+MDQzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAoK58OPQBp1AGhi8/
+SFjPAxnwZrvU9tGThp9QFawftVQT7/EKkjizXhgZc2TMnS/y9HIkdH92wOl3SvVJ
+Cz16yuCD3vWD5uXanXrU9GZ3D/YYziyazlpy35EbU/tV96518UXouy3Yj7+ogo77
+ZD2pvh3wltESkY+Ao0dieDFzkNi7TN9jZBTv5VkWfBNTZo20CTq1DYpwLP4/xqVz
+OmLdE9FaWa7WXmpPhcj+1UH8tG8YN5ujfn9BLWylM7aUV6FjB8cTf4NJLDqcMMrA
++MoD5GeofgyoycB4jwzgBe9og6q7/78MAcg1hEeiR+rvWmZ+KniUqO9FR374ioAv
+wZ4giFZjOXrgUXf9r+9RiHstaiqheqCBrqnBuaqrs7dq5ZsGwit6tAZTnaMD+p2P
+L72QXHJkk1mZskVuVkkT08AGY3BSczhEdpQ+9N4xqqHrlVm4iewXpme5B07Lkl3q
+u/qq9gpJlYxU0R5bQSCqa7t8kKOj6aJw6PxQxpixOo9JmqvjVjdfLXiCtva4U+4a
+xT/xP0+0bXDq70s79SHNTg3/pVJknAivW77g7iXMJlzJKsj0Js0zvo3XNvAjaBkS
+EF7RpDb5ysUtcRB3fh0dixT4ufEOi1pTvUmxMmK/NUNgzlYWVDOF3cd9limKCx/I
+zA6gqHKFbs23/sMg1GrL6FiJprkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNSiLlwHhlB11nr6
+TX78abvbAKZmMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEALsWzyIojvugrcIH1culbqoL+o93M3UsbTGzEznGuSBiO
+X2C44NFhpSIJ4RZeFRDBRYX6nTgqs9PpZSf9KCTBQqgzyX0L4xA5oZzZBiW1DTUz
+Ag3PUDiBL94o6QynZicT8r2U18xK2saRKuhN/+rN3eCHuLoi0dpH43x6J/t7bVFC
+yYlztaE5Cwmojyg1n9MtfnUbOODZe80j1bK2ny4TyxvJsko6RdOSnovHflqYuvhQ
+0tOLFVnngEcO39Z0xxvawY75mJOn2dQq/rHftJ52S+fA3BH99CK/A/nBNcmwRhqO
+PmJN7JHffPEijhb9XwGpTLQGlz3PJ/NcKqWDQjY3F3qHC+sSnD5x+g46aX8rI3Ju
+/l4M3Pe5I0WBWFWncFAKJxwQyVuJfMoi/t8fvm0pKiqUwPb0E/LTBIuKd572Nsin
+RINx+ni4sHNnvB59TM6toYX6SUWUtyd//6VmPIoXN6WBWsy70aT7+YaWU9n9lzuX
+yzraa4vPZleaPLmsXNsWZwMTDmKD4u0oLXN/3V6/z7YyI4BM8C4XItChieHy+AP5
+yFdeDAltPrwRhOkGpsyH/Dy2eFW79hpvYPIQLWE+rkk/utO6S+dnKtZdqmRFni3P
+IfGMeUcMpuwDT/hDnTVvcgPiUDSxGUx2ihijLGUd4OqN8mXDX2VMx9QmItTq40Y=
+-----END CERTIFICATE-----
+
+
+NCU NTC NAMEID 3E6C3B35EF144B0A76CDCFA4080B8B7BCA3CC8EE
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAQ2Jgj9/2xmiiAAAAAABDTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDMwMTE4MjUzOVoXDTI5MTIzMTE4MjUzOVowQjFAMD4GA1UEAxM3TkNV
+LU5UQy1OQU1FSUQtM0U2QzNCMzVFRjE0NEIwQTc2Q0RDRkE0MDgwQjhCN0JDQTND
+QzhFRTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMM8p52GsQsXt5Wd
+fz0dIosflZeppXfbG1wNHimHoaAELye4PHASFbZU6B44GLsjZ5XGx9uzQvfd1yNd
+5GcQatIHq7uwEQk7aA8DpjuZDIAOQ5q1+N9tpAQDep4vaDyLt34lb9l27LYyQJEm
+cSoDARDwaCrMseUJBjZa4jfaKD8wn+NAxD9g3VrxuS0j70ewcbWMAq7YzFuR5/K+
+PWhI23LmRcHI4sBIfjOm08N6LcE1M3a38RGYp/TcZewiFUzaT5pkrqZY2E6cInan
+8J4tcrykNpTvIfRGC6YTAukDYHOUiZynD32aOIv64gFpLASEul7B7pwRKbQlB+tP
+mKzloD8CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFFgp3Cn2JV86ic+dJr9LOB0sJ3L4MB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAHexu
+onUQrWWb0fI99fnezGZI//ENg3x9TTjbzhUQzaA9SijtapTlnrUrDsVMUBEJlVTf
+8zK7/E/EP6os7ndp1H2PokLW3O5WQA5cSFgW0WPdSadBkYoM6ujjZrJSBgsEzR3i
+WMwGL8LBCv7uWupEX7LcIUk1ZWpUhNwT7MFAdF4Bt1FVcAzxSyUaQlZR5/Ji6Myw
+HsMuUjm35jYBppMiTTlQ6nIxV6f/fFrZn7kAdrpQ5IqjWLkO9JJ7n1iw06AksZRB
+ZRIeCS3iS84DTNSD7JMqomY8DmK58drSgZgDVB5u73kO6uFXgTXcwHAutziGTEDk
+CiDlRRDJD8rFmiZUeg/Y6kz8P7wlAtX/QEEWPTEc0CifOnIF5XYRMPvWMAiP+Z23
+kedtIrGn7jYxZpzzUKtA65PmQzKI1dQ69zmOUqk/63EH12uVmIE0r8nabIE4YKwG
+2CmrUbHOWbbHWK2797pb7Dggo2ef0lRTKXlHK6MsFRO75l1B+wgAqlV8TC6SqFNH
+ssWHrX0tVo1uBEX7n5RHjIyOEPcf8OuB5pXc+vO86QIm+BsB7N7GrQ716bD2CCpM
+t+3HER1NDqpQdyPfbAJkzznZSJKEM9d7bcWZXIQrjkiJ8SnDg6BAQWwP/VTUAB8k
+n25W4+iHFky2CVlDPBeVIzj5XQUplxm/uBMnGAs=
+-----END CERTIFICATE-----
+
+
+NCU NTC NAMEID 3E6C3B35EF144B0A76CDCFA4080B8B7BCA3CC8EE 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAn7YRX13AriphQAAAAACfjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAxMloXDTI1MDMyMTIwMzAxMlowQjFAMD4GA1UEAxM3TkNV
+LU5UQy1OQU1FSUQtM0U2QzNCMzVFRjE0NEIwQTc2Q0RDRkE0MDgwQjhCN0JDQTND
+QzhFRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKVnX+EKnSDsiSPo
+SYe3dKEO7fL9jz/ojOG6FbevR2+DyaFvIbRC9xR7bvKtQ0p2/n7b5uI65ksOZJY1
+WTAejNmn1mn5MyYUjuYxLpTw5ooYYwVW+Bni11gFDOILftvPDUJB+dt4zB1fhkzD
+CuV4tqrN4YwWlnE7RWXIAsJYcmnAkcS0RUivUtyra1nt2fD94iNqI6P8kRDpYAHd
+bNpWrJIYhh8rJa78ygbuhMYz2HYb4+TpRVu29EMXlgTu56861i24ruAos9aCONuu
+oK7ud/uDNZk0mXUhwQ9O8LX3lCwczdMih1jMDwtVp/oFiW0QYswqFcO1LSAH5W5d
+t8A0GWpk19RDM527IIIjNiNrtxGQOUsWLk1LWztw5lBNsCUKi+OMcnAJpbARJ3dS
+zMiXRbf3E/vFd36xHG9J43jfB9m5HZpiIQNGdo1m9ofy2BcLu8ku3JQU4QwBR69e
+R6v5XdRmcKjP21xJuA4BAJVs+9cEB+fpoDH6uF6UASJqqVCPyv50QpJ0jFkuRqE3
+jYrgScoXxDGaoq7sFLCKQ10TvFnLTiYCN8b54sDaOX9dI7BOuq+maxfi7MAgfyRC
+8aruVMKePvYWqUI7VXYfo469MYEo5+48DZP9AOnVGh3OvxBDqAtt2Kou29WSlgpq
+DnJ/4gJ9T8BAVHfv296uWCQl/YerAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTBrrV7Hgac5bS4
+JK0JLjbjy5d2BDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBACAvxcjLolPAdBa2FaezyJiRq8WU7IpeOZy7ofSjtFfQ
+JABGdrNdfXGN4qVjpvnIYYH4pYbdZMeJ8p0J5q4ZgKYFQioiktjOQK1ncR6ZZrNu
+ZNYpel54EE+331olEdSvfBfBpYSL6EEcKxBEVdfkgk/8ELeW/AlXPrpRQix85LiQ
+7YjboukyxFgW9zNNzclDPJ/C6v52FKpm/8XOM1Kh4BnthbggCxnYq4JxwfvFirUE
+fSplFMSe6BZjcbJrA4UZm658ZPjkFEAyZ0Jb8DqSqMdcItq/yuBKvqafEWnTKWQf
+x2e9zWWp/b8LT24ps1NhyKHpI6sDz7v/0GBzG76KfUp1WuSdOFefw6TeaHlkMaFK
+xDCndZkW03rybJ3vXqDz+hHq+J1bKbGES4ZJakERhUZb+CUHtZAj8Nt3FD+HuBLt
+I0aDJmWFyac15jHaHSHXUf7FaQiRyjSamgLxE4M1sfKxFlyu0gg+qanB3EXfUIST
+rzpSwEZNempu7yV8cM7gtR21i+fqv8CJ4qv9XDC1Z/p0wn/G6SfnMbhypA6KRqAN
+ZyOC2Evv6Do6ESe1r5NHid7S2x2xG1g0As347SBLA+L86+1vkQ6pxgOvYnQjdij5
+EcZXsl0bYgV+q9PUIw2Fw2DzohZ2w4rHSH0KL/nT0Z4z6guu5laFOsz863nWXE3r
+-----END CERTIFICATE-----
+
+
+NCU NTC NAMEID 770E974ACAF0DB9AE67E7B6F5D410F9ACE2FAD65
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAHD5T/srsObALgAAAAAAcDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MTIxMDIyMTg0NVoXDTI5MTIzMTIyMTg0NVowQjFAMD4GA1UEAxM3TkNV
+LU5UQy1OQU1FSUQtNzcwRTk3NEFDQUYwREI5QUU2N0U3QjZGNUQ0MTBGOUFDRTJG
+QUQ2NTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWvGmkdupOBx9EN
+8ome4UZATQoAB/53g0cwXx/rRntCbbd2rOFmjijFJSfgnScbrXTK7IPXL6LF6SZt
+aMIZgUKT7UAKmgORXZVE40x69g8AhgnvhH7xRmFHeXAshi/kFiZ3xXIHT1QlpPSi
+2Y8RcmixqI4Q1J8Va2Vz8cDONPjrNvct5DiXlfDDO+o/T6JhG8d+vSp6zP+/GEBT
+Bx/wmSql2qWFpy46PEOXqE00HaWSgQe2KbKHgULooVySArhs/HQHAteZRt+YiryL
+BPNIInpypMGY3XPEC7X9ynjUPYyTVpVrHOfFIOYeR+RhxY/Tpgz6Ap+xSZoSlTXE
+4WOgBrsCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFNv/zI54f+WaA7PxRWAPdc2iKpaAMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAIoYf
+mRD7mbeUMKy6DReWUo1w39s6h2YbYAXp8/K3oAtlb0oGiHINemewXVO3jKKLnuSz
+B0QJrRVxMV8UF8D5KAFhfzNaxNh3+GWal7r6RdB0EI5IYjHDlfYUNxiBeftZCKFX
+M0ukeBLHzeroEZZZVSLRpnun0xG9S8306wP+hh3ZobHNl8uORlIol+qr0TrWP0wn
+UckrpEON8BWxVMC86njrDcf71euZRjHEFbTCbShU9gy7XHD2BiwCRmdDs+B4feQp
+Wjw8XxfjCiNlTuJcbpYr4AZZhm0EWHwPBAXcS/b//ML1aJmjfWduQvRXcGDnVdj/
+3Iavzme1voimP7rwVlEr6BidbCtQ+CEmeybkTvrjc+yv370WKQwBHnrh8UNNRGrA
+PuTggbWTe4WzKm+aI8c9GCOmsu3lkQSOXpbmwtKXtUVvn8mNYpvFa0TRLoGSLhQ8
+4S4Y2B25vv5eWXtXq1zQhJDQHVnj4cOkGtJlpHlMFSuzR1S/CWzzQLOikAdEPCIM
+iIrX5Pg4FQdQkgJe4YVnROLQAJ9rFTemeYFNfMLnUT/e7AoDsMm9J8gA+M79LDTO
+bX8uAXbGe/ZvVIZyqjnBG5C5G728H/o5bcoVwkRJCYBvPb6oLrakoQuk/a1Ty84J
+rM5kxhjfqVOnfJKtTaOYKvZ4setXKe/3CbcwzxM=
+-----END CERTIFICATE-----
+
+
+NCU NTC NAMEID 770E974ACAF0DB9AE67E7B6F5D410F9ACE2FAD65 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAoANGNTRMSszWwAAAAACgDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAxM1oXDTI1MDMyMTIwMzAxM1owQjFAMD4GA1UEAxM3TkNV
+LU5UQy1OQU1FSUQtNzcwRTk3NEFDQUYwREI5QUU2N0U3QjZGNUQ0MTBGOUFDRTJG
+QUQ2NTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDWRoCL+KepHrMh
+Nu07/1/3OgrTtWFlMB1WGowHM7lKDZZgBzks1eiKulPx9MEwImOEEzFA7e4ssxle
+Lcsx9pdym+GKBLxEst3rG/fAkLmAmLI6TVNAzFUr2vs6ZOA2Svp+ldKB/r6tpQC/
+XQqAVd81RRBAW8JwgRjR3O1CaobcmyTuQ0+g1GgcWaPrp+IX/whMrw5ZIMfZkjtG
+mZFcoF/8W5hLto/mp4xuvFUk4SiGSH0cmUJboA3MHZaRzPWtrScE3Ql8PBu0umsx
+HM3iKEU4/W20L63gisz5c44zlnfPw9TZxA2wWInheQAh5SIAJhaNNC3g6i78Vwmj
+J25exi1zAJc2orFYmarYlKd5dvkGXYavup9TBnJ7skAl34IKv/21ArvVXzlPXdTG
+hcUaKSIt91/PKZecbYZy2btXN4IRtPJY6boWwmiTZwalKyaU2vxnKX56UQ2fqaFY
+jgqJ1FnAawx83kE7nkDlrVAqX7SXmXZGKByqxUgQTu4Hbq/OwGdFQmEuDbM1sG60
+z+PSHH2T/3kNH6hhn7S6Iy1T/ZE/lkSAzmNQN0JAw5g77YLYRQ/QQsFYRg0psY7b
+tT5dn6IfNHt7YRwM1DphFfcHQn8hEYuJMIpKGrdlQ44lzHd5IYoQV9Ea4COmCh9i
+FuUmzgBEzyJZhUr636rjOCGTiEMfAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBS4Y3leWpyTbZu4
+BJUTSV4baP0ZdTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAB30NY3bputsqtmK5AT8cp3jabGfrASB8u0GNmvDF76C
+W/NULy5kyIUIGV/Me8pF6UJjmk6BKikackj9O0Rv++/NyAb9r3UFRt80Zu2KHKtU
+AjhfDbN66TxPL6/Z194Yk0Wxld3T7iammSqE+yLI4Cg4X1uTJySha/s8YZ+W+F1n
+kDEQHzFZR54coVdKac9Rq9AG2asFhp9XR3MJbH54oYLRr/BahCUw9JN7j/NqCGBx
+HvCcwkya9fOpEm1YxyM+q9pqoapO0p4AlPU4INOfFGkcIw6GWd5m9MaOUGHvV9ta
+17Ma/iX1sugeDSrnu+FWXRsySG4/SXG3R/KsxtFRCMu154eDaj1VrNWBy713RBks
+b7XyEzrU2sf07xE9V/fxMzYWt9zm/QVewT4KmUREV7Q6SwJkr8MxN1Wv5/YI0dKU
+9c1rECwzWsocGK6RyJgxBRlSuv+6ul4IQpqYyYNjkrF43K3oVcX1wAt2x7G1hvAV
+ifAFpXNOM/z1I578bP1rQLmfzlEtgxxt7QdxMc+DOuuJzmo9mMiN2mRD+EBhvNpJ
+SV0fX9xJ10WR0DDOIHyGX9usjhtcZDsrhTzu9CCvupWxIhyKkMz+yRiSIPJlHt7D
+TGPglvhSxqiHpPqlRl6Z+eWXonx5Fa2Dwy5+h+yWnRxU40wj8wIEeqQJ/guH67zz
+-----END CERTIFICATE-----
+
+
+NCU NTC NAMEID BCD3C503D39E51B0C50489E9228E984A7E63E303
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAQ4cTR5sK8yOZQAAAAABDjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDMwMTE4MjU0MFoXDTI5MTIzMTE4MjU0MFowQjFAMD4GA1UEAxM3TkNV
+LU5UQy1OQU1FSUQtQkNEM0M1MDNEMzlFNTFCMEM1MDQ4OUU5MjI4RTk4NEE3RTYz
+RTMwMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJkAdtJF9LH3DWlx
+/jVy1x17xz8kWnONKIRE9xNj32whoyRZogVM7zhWV1vUdWSJ981aZn8XuSPDND2h
+j9kxxvgOTzi2tBT7Zk+qz53XX/5i5ld6N+2BfPRI1b6Wbrt9g5qOzLJ9aEqPS4Tu
+AfuVwmGdWKpRBrsxlYgsI+X+eC7mlIwKDjhQkr0pJY/meWs1sPJyOGQ2gu1wT5jj
+AEOIZJfUxzujO4PJw9BctIvt9Xxactf3bc7cqPaQWGAJQFwBWwi13rlel0LMBa76
+Hz178r7zpsjEcWf6xv29VdxEBOEq0SopU2IA5QvvbEbh2Eubl1My4wmIIvDt5lPd
+ODzSsDsCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFE7QFS30dZPuwU6txPLc32VplX4lMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAGT5Q
+uGxD8K5NFcV2KsUO/p/WoBLTXaDWPuXQGcYFSHtWdvfdrv1cj03sg43+vhz1U+a5
+z/H3QQeqaMx2tX6DM/I7mHrDuo4+Bo6cAshV+ik9zWdiB3mDTmX9Ot6TfGtAInWE
+qVM/5MsApZJNifeAZP6wg4ka0RvMLTvqe/ZVXVW+eEWXt07PgcBr1go4XlRMQ5Jd
+9D5FUSkVtVmYB5Czz86yTSZkW6J+QeYLKVh+NG+MQlla4YxVqp6oTJd7J0pSKS3E
+2wXrs1jRtrzIzctWdfQGKT2eugTvXuY8OOr11r5QI4CzEF4PT0mpDV++gYIAjWbx
+HMhn/J4rQx6a0R+N+f8mzaGgcpuk35VGxiE4u8PD7SimLqZoq4MQ/UIyKZOBFJX/
+wAitwD8wt+p1ML62CWROitrminipkW64j/krgm1Eo+XdRVGkC/juVsUU4O7BhMuj
+s7gXspXYEjwGoLnbkmGPaIoAPMgV985TlVITmMluF33bzIefJ+NCiGEFxaczo1PK
+qfKsmKU162d5997K3byld9c/wth3Q3HTM5z0Olr7z7HZuEptbtT/dUD3SLiB/8co
+b7vRs7H6v+Q/gc2YwBJdEdNp8jHtSQh61aL27k4jd+3zj4paRdnr48cPHa1x4wja
+NvDU3qqeEMHXdU25lovHyrqpAy2iZ8UALCapAUI=
+-----END CERTIFICATE-----
+
+
+NCU NTC NAMEID BCD3C503D39E51B0C50489E9228E984A7E63E303 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAoHC2EVAZRmS0wAAAAACgTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAxNFoXDTI1MDMyMTIwMzAxNFowQjFAMD4GA1UEAxM3TkNV
+LU5UQy1OQU1FSUQtQkNEM0M1MDNEMzlFNTFCMEM1MDQ4OUU5MjI4RTk4NEE3RTYz
+RTMwMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANbSN5W7QMa8j97k
+yqwklAsAbn/304+VmMl2vOIZP5MoLYBfCGBgH8QMJGt/Di6lUh3ht9CiTOoVh54v
+l6PUvt6SoinAYeTkzD3nsUnkF4WQdWNLoVSZoIvpeowNc1wPwsztnAvLohKAupGL
+bwkOzmWgGAyWd9GOmgp74/F4JFnK34UdAp7iMoRTRJCmggSyR/hMqVIHrlCtuuod
+sX28QNWfPZugcSEANtVNvfODpzuHDzPTocI/xcGFBPrwckqYA482Qwnfh0tK1g2i
+liGXY3pzyQnQWqMl3rVJHmW9rUT8D1YAxD7m4AGuwd+Qx2h0cIgQo3TZgVKJC7x5
+p++OlvzWRdAxSunMMXhG1I62eBsXGh6WKASHKzsAJX/zpzSWwgXcJcqpeXLZacF1
+WJauNnOiPS2OREY26vWuq6C05W/J6NGW+enbNxGbOd42JbXap+hDC7W8Wd+NkoKv
+M9ThvtB/kHHASI0YcJjoXTmJ10Z8v0iPikEafLxdM3OLsopkmeYckZawJXs0M25E
+bh69ymreFzsxZaNNQeremS4Sy92I5CW9ELo9/CbHPtxwaa+vYaPa20gaU+J8s+OP
+VcQpKZYhPn7aEB6gzno60uQygZEzVTLoTucekDH7FbvkEW3rKBv0FKudVd26wXWv
+GFuBzwYxkmf/y/83ePvWOg33ZWx3AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTK01ITNJ5k0WXX
+PENdgPqioNE2TjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBACU65owdn7yjWx4b2q63sQkUmxdGna/tZQ4CwYO/BZRX
++816Jg05WFI/7z40xqE8WzVDrzpFuh3d3UpFwssKiq7K8P3SaC0FLMIhk4dYGDNp
+GzDMxge1KyB/IY+34bMTqJLUjbUfxl4/OoAaLwO2MEj1TBIJmwnWFU4ssGw/rC2d
+2ObcK90KCf/NRsUQr7GHyt1FmvttdpMzq8NYxRKmfu5Z45PSdnfRsx+rLAeqKQXb
+KE0cqLmHF2tKLTJNg+THiPj6uoTCOlNLa6BYCeF9b3GXHOGFAMlYQr3Amni4TDlO
+/gGzHpP7Kcy9sELoMrj5lckk1/YIXWY9X2x7uXxlPQzj1eLZTZZ/3t2yr5i24FWW
+QB7ozAtEOJRFoeufigTr1lYupqe73xJtr/SoOFtTmSlBJvSEa8yLGXLPyRmn1eCZ
+emx5xL1NTXN4gwi1MODfT2WFb+JQuhx/c45aZamIwTLJkEn5C3+J/E/8/9Lk1TDt
+1PdKGm/MT9KCn0m2dQQeHjFG68DEjXvTzLPIWiOnbu/PD0LzNATzhT/ewfak66IV
+cBSdVvcmIZYwGLYqXlTICu0XnQtIh1fktK7mcoSE1Gj24hA8Jw4B8FPZrBkOBd5R
+0KssTt96pdx4/F97TEsnkaB21Eww/DhMwrNYGiTZsh2pCq9ZSJQ6P9vcvx3njCHH
+-----END CERTIFICATE-----
+
+
+NCU NTC NAMEID D659BCF0AFFF2284AE8AC274C6D91215AED2B62F
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAQ8Bpa5smr9xOAAAAAABDzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDMwMTE4MjU0MFoXDTI5MTIzMTE4MjU0MFowQjFAMD4GA1UEAxM3TkNV
+LU5UQy1OQU1FSUQtRDY1OUJDRjBBRkZGMjI4NEFFOEFDMjc0QzZEOTEyMTVBRUQy
+QjYyRjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL/kTC8JZSfSFQOZ
+pulbf0RJbD3QthTTairuVo3G904mNM+Bg9wMcOGIUomEJokNYV0k5psKMo3YhqdM
+QmFgbxmzd/H0p5ofC9/hV0sCm0yMVpWht7ppSuXiE5+PD6PSji6Y0Tdt+5R5zH4h
+H4lObmsSKHE6W6E/+X4mzYNb7oTbmM//7/tw653H6r2T6rqw5gsNCL+/HvjVGDpz
+XXQG+ecjS/JhFWZGc1FS+LhHPeq+GfDqsf2O/dMPa2knk7klckBz9ss8oJZ00MLH
+CAkIzcq/CMPnRVDC7uWN9M+qCvEalSneA2QPtfDgpvc+mX6Ymvms59BBYbJI0+FI
+g7yVvI8CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFDCzd7yl4dt1GUp3bHRUc/sbP6d1MB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAg7+E
+/ffMcvc8zP6O95MAi+0WMT0Gwf0gSW9/30yUhXu4bJJYVJzC3r2LfpPRBXaTSfa0
+hKGh9vxYQA3tZiVKkg8Rmi+58iXEpdprhiwUcRlSOaBLKPu+wo2x34juE48/+PGj
++cAzjWv2UZa4ONQOwrCTlXkK2frGMhe4VhUUFsV7BXB3BnJ9PvVqikgYiOB1sEeK
+Bda/S2gC+l2KD/AKMjRBkiQ6TPMu0uupiLObBtJeK8wbh0W4G0LNVZAaPEbR+Yef
+5H5ReVzAisFregPCoCwsJPIUQYB7LsK+/bRShQkF8ZU1YBLTrRKhFGsaGMHMUiP0
+QDV9JfbMLyPnzwUboBvgmOl4EyAbK6qq/Em/DXezY39avc/Hat+xth8o0bdPfghD
+UZH1CrVbithsEIOS1u9qkgDT6om/S2BWWMrIYmk4klfrJUWZZDLwLuBcMCn0SeFK
+3IrOjSOlMneQRF+FEKWb0OdPSb/y0z8lHFLQB8f0kGvZZqA+IC8IS6eah66QhAy+
+O2BebkvLPfeihOrl8fQc0Fyb8NuunJ8e3igEr3TbMotmrpmVGoivqlZp+BQ/ZtJC
+dUDCIDW+/Bc7gS6+F6zFXfMdMHYwDDBm/eakv8YHE8uk01+YKfhBT601OCuCKxy4
+Xoh1ETe7Cn03u1C6jttheUMA92bRUzJ3yEcoj8s=
+-----END CERTIFICATE-----
+
+
+NCU NTC NAMEID D659BCF0AFFF2284AE8AC274C6D91215AED2B62F 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAoKBOXvkmWgB9AAAAAACgjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAxNVoXDTI1MDMyMTIwMzAxNVowQjFAMD4GA1UEAxM3TkNV
+LU5UQy1OQU1FSUQtRDY1OUJDRjBBRkZGMjI4NEFFOEFDMjc0QzZEOTEyMTVBRUQy
+QjYyRjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAPkln6tHTGYwW0K9
+myVALhgV2e4vo6lCh1DcStH2aU8siAyQCW/bDTSMY4Z+Ri/HRvtXEMNsIFjqC1mC
+iPB0ixj5Y2PgPw7A3kYffTnIeedQtoy2/2XOvbIU+tId37KRshgw9t1yIlzWe4JG
+9c+MEQsQjSTNh9ssFMcMAnj5PnNi63iI+rsmw5m8TZkd78D4kZPNfiXQoN+dTkLF
+twQC/0J62L3f7kufRe1NbjfvipipviiVk5P7UPlZ8mSgfUSXN2TLSGaw/JlcBSb6
+GQe7Euj6WWGfxoktX1S2aZAZXNDL6NmgHJ1rKro/uDq82lKw82uNmwDNmBISttQQ
+VsSporJxQEww4E+5oMRuDcHJ4b1SlkfH1xTrr4TfjNhhboZwYtbkRsTDX9oVSvsJ
+1LqrNITqfFcwXpUQBJAPd+138xrFB6SnZLNTFYA0xtlvzn9jZE9cvcLKaL2oe8UI
+fcWWxa/IrSqNl71CuSDDZWIDPcN8aVUR6/2/2crlAtQ9NRNj/jKXtyYJBadZD9HD
+4saHKVreaYqNp2cmhmYggJwxCGTIYn93LV14E9qzfURpPuB7GiRzxL9v9NY5N8CJ
+MpezaZkpDyTUYuTuZ7cJFxDuGRl/fvG9rN5zSXFbO5TNfoASaB1qpMYz/U6hLnY3
+ENe+8H+CWIRkcL7naa6H+1qur+Y9AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBThJJaX9TZKRYoP
+SvSL40b3yRmimTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAFS/6LC5CB4UlA82DJRsJ290EoO8QzuOyM8OYYP6c7dn
+kjJH/J700rGuyHtWNUCJSdrTUvv9wToJ18wDnUG4wc94xyOhCv5HXZSa9VgnV3iN
+EWvC3GT+NFJLoc1jbGbGakiaTmP52tUdEl1yoAO26XyU2fsZ5IzhKynfcexrWX17
+R1Yc9h6NnBE+PS/GnNLUMVLyIPY5EmXg6b8wqa4xApZfY1P5WnXr3yF9J3SXsB1X
+e9a+DiCL0oprB7/FjDsPRNj7PPjXUDenubr9qlH4GcXct2KjdFbifUQ78kn1nzDL
+sUvv5r5BAAd89DqVBC04sjJ04HcAOI9qW8aNW77ng6WPr/wMenmeFkXZ66+Anbbu
+DwZTn/r80D/YvYIiZPxORepFfV4XDXHZPMCHFL8BYN/aFhpGDsnVXrLhPRqshi5V
+NjE1BWXuhYRwPJ0wkMO4CBv/Ybd2Cu8HgGLMJd2/47eQb+k0icG9EuaddgC33sAz
+n24wiZI1SJEHFcHrDcSOOKMKDKo3o/VPMuYCu7zDXDrv94+GTCHKApHyXmeyyfVQ
+nTkvHGL5X45gd520cgJ6I5FKsxV12yS1jQmYwpBZL2mfmK53RleQSbUAyR4zTALH
+R/J7dIquxwjvhyZTm2xJMHT/fbG3K2r+EIb98Kta9pynDLK0sYdnqqHOEqcx8hRz
+-----END CERTIFICATE-----
+
+
+NCU NTC NameId 91EBBB7C51FA7F78AA3D44D3425B1D5D23975CAF
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAU48RDja7yUgAAAAAAABTjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDcxMDIwMTEyM1oXDTI5MTIzMTIwMTEyM1owQjFAMD4GA1UEAxM3TkNV
+LU5UQy1OQU1FSUQtOTFFQkJCN0M1MUZBN0Y3OEFBM0Q0NEQzNDI1QjFENUQyMzk3
+NUNBRjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKD7ErORTdbJrgVV
+IwH9h0Hh4XaHmeq4K/jA8rVifb7QyP9R8mRyxRv5o2/AV8/nglvws7+lP/cE3yKo
+KZgDeo1GMfZguHhoQOJsKzKUFRIcxUAAYi0yXlMl193N9bv79GdMN5ekMqkFW7GQ
+qmr5wjQp51joMdhcOl7mYCy5bnFk7iGgtwODmxf+ZqfHhvC7JksI9oGygZoGxcEP
+M/zb3zNq/NK+VMrq2lvJBBqcYU3atmYp2Ip5yec2H0oqfcIl3WEmeI4OkdJQPlTE
+sSCbkBrEpv42jn/pWVDFM10hlbMhIVm2XNYMQoaD8f89gpL5D04cpnc98cncnALT
+jvGHSLUCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFNxWmY2/Q6DiQRpOgPjTU4QrUuJ0MB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAGlEP
+xX2gZjBAVDnJmwRFKdcUIp8ZdxbCKLeNAgG6eArFKfqg+YjjzR+EDRqKTIvkBQvg
+1ySjRsC9WEMiuJReoaLIbkFaW5cQ8oZKBmoQYnySU44xzsXVD8pfVDknoLvAGTUA
+LYGvGUPVrJROVSYOc2nh6ZDMkqLw4gMvIJLnv2nprgsXYlfdgJyo//+ZLb9nwObS
+dKuVLY7bWsgwdHMe7TDDdtLZ2tgaQylInyHNZXIPdFgE03OPDgr4g0t1p4VR5MlA
+oQzgsppvNYUfcAvQsga+ldkx93T9D9e59ldc2r8o9NowZ6bS53/xE6k565l7S7zl
+BkSCUk/bF/R/1WJK4/7YtkfbpUDoR8c373jA9tMaZFgshlzbEQBXUh9tQ2PjG7fg
++57EUBMOxCvijQVsr77sXA4sHntS0w3DkOa4gPhOcwteb785q/1+66PETpYV6/5r
+tdNNTwrlaA4UO8GXk4eBkSSqkeCyhtluXycwJSRYcyBwmMlKYPEB5EFetS20tPXh
+a/hZTbRCtbpNkutg0nMk6m/rtIqdPzrY49dClrXUmTtfh6N7Mn8OZ84moneSq3y8
+WFUSyjldShIUFPPu5rrjrhbw6J2lJCvmaNh/P+BPVE8HmonefhU+JkEmM0tAjoSt
+XTSPr4sD20OKoAWju0n5r5wT7Et0FAlGyDdFpUg=
+-----END CERTIFICATE-----
+
+
+NCU NTC NameId 91EBBB7C51FA7F78AA3D44D3425B1D5D23975CAF 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAn8723KGhUY9tgAAAAACfzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAxM1oXDTI1MDMyMTIwMzAxM1owQjFAMD4GA1UEAxM3TkNV
+LU5UQy1OQU1FSUQtOTFFQkJCN0M1MUZBN0Y3OEFBM0Q0NEQzNDI1QjFENUQyMzk3
+NUNBRjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJNPYxMV71LoCXmE
+eFQf4sfeJQIJQydCPRoFQRPLBu7LdyFZeBpIiAmlwPykv97Mj8YsYIAakHJGKJV1
+FNiAIuJ6H9f2ww8pdhpIIwlYrP1P92l3X1HXLl2Vlx8VIyKE9Y+VgTJcV/le8JdB
+KH+sAhd2ut7Nhz1l05rxRE/pxh387L/mNWFsJOeDaJ7ECdIwD0VPFws+lSYdMgWi
+mgV6HbDbge7mtGHA76VT/1dnSHNnhB8SkOHXYys1f5aGJPcsBNZAG/VdKN9IsO9G
+vkRVNWm0XT+EjxWgm5N6XlNSeG4d8UcM1Gst0hNi2WS3ZF/TXVcN8mk3mzfn0JB0
+zi/jkzs+2n+HkhTp+R3k1vCazo1WqVZeycu7O54Y88LLVw+A4FOibaSDUTFvR+5o
+3uNYO17dmSyw3Rf7BjqN/NKYLuK3TN//RyqeRPja2sPLqauxqHERvymYPEffgrp+
+b5LWbX/l1vfBDPOkVD0CFA9xeikL72QA4KxJkmT39E3kxDKJwILG1ZniWTpUzNQH
+/YbTGXJNTE6W8y9rfaVhf+Ip5CsD8ZDMsjfqoDlESdCX+ywFgOfUttgSzhHpdwLa
+ZCqXZDDqxfMWl/pzBVQn3H6f8U2tmd0dl5IXnsrMi2syvg5C4ZWFbWA15+0Ml331
+4ZetJn2mtIZ36DKO6m69ahruxFMRAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBR+xciOo3ZpreWG
+hyISkCxoSlAg+zAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAIWSTfq8/L0xrkgp8ZCuD6DGWxRMga33Ma6FPhEhp0Hh
+r5I9lqCZQJM919EmsY4YGYoNKlZ7M65XBUY06NvtLrPtQuJJXt2xEDqJAuTRKgco
+kcPZIWO0L8rh7no/yXmXO3w6RH8eAiHOm+eQ1ELv41MOT8gR4WvNmsCHoU7lDlR2
+U+tkFEjMHNg+gzJbmdbBVtnvKE2d0YlOyhwsrqvsVMCu+B/zk1v9078E68DoXSh2
+KWzcvDytfzv7gV2r/1IXlfG2t/7RUUdtkrjYML0KlXE8vOIWZnFMV1pw+2hQYFLY
+PHyvBybdfjEcdI0tWvgYtCkfVsCe+0dWi4VhadA2K88DXagGCzS5FfLyrv4smjIk
+t7uvutMPS9R6MsaKMC9NzsQ5lnKWUfmEm6tDsx2sb3Zq0H6Epch7ox8ORK63ZdbM
+eDETMKnZ8R/DL54ABc3S5mJkftBK/3StVDVqo1ks2nndnjWc5OP+x1ZGixu9KPMI
+AMDYP5angOjL8KLoaKRdH9MkF+xCgzNv2Xo0CJUUSnrGMWbk4gu25ol01ry5tToL
+bA98piH/kEEnAn/XiSoEMmvQhj9DRmMynnP/E1bqOWnI4ZaBypF3rcnW/A7yrYUq
+j+tuxhVhrsLOtNQ4k1Ccou1MZt6AQxgJK8NpbTvDABVeluWK5womkEMqySQE1g0y
+-----END CERTIFICATE-----
+
+
+NCU Ntz keyid 022cbeed5d77060f2833e9d5376ba8bc308cd9ba
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAs0ODXDoF1cLtgAAAAACzTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUyMjIwMzIxN1oXDTI1MDUyMjIwMzIxN1owQTE/MD0GA1UEAxM2TkNV
+LU5UWi1LRVlJRC0wMjJDQkVFRDVENzcwNjBGMjgzM0U5RDUzNzZCQThCQzMwOENE
+OUJBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqERb96FkKKCAweVJ
+CuXHWBGD58/JlKRjoDGwO7Ll4ff0tWIJ+ioA+w3eZGrC79LYyKOsVuAVRnQR1TIg
+f+FMjd5zzQnxjeTtEDJmlCc1T/WDyr3QenJQLhecjt12SxScTMgAelnTPD2OyLdE
+5RhxHDu+yXuoWgu4dJ+DhbEmOW8G1ktKLj+Ji0z5glutP8+qgzatK75DHq7jj9Wy
+0Pq8JAaygMhpZCgfxluTpew1AOrovOdDJIddbXT8G52pLhkWFY20sc/WKOGybTng
+L+m9y2BhnPB8ZKt6IwdijY9Gur/KlDPGfUjV4wsTPzq4aU1769Lccam4cOQceMCG
+LO/h8QFNqt3Cg8Mkz/Dr4/hBfpNGC9RQ7Go4D4EfKboNxv3r85bRUrQX/NmY0uff
+4vcu6nHf0lnG40ClEubtF5AkMBZVBuUgP/CPExcm0GPCJFSnoUhkTket0DkJA8mr
+t9rCv/27qCqeUenoEpIJ7b5F0cZ0VlFyBsdNXfcr8SLUbIxxahNGDhsKB7UQj8RY
+BP0vVlK9hqk44YoahoSpxAU7Q87TlYIwjurypvhsomavCcue8sHbtyeLsibUqtYy
+Mtnh9nMrL6MQ2eDWH8RVi8Bu29eQ5ENXLLLKcuFp1XfWkysAVx2Ahde2LkIlgGeA
+TDDhPzuFOmCgHMg7y7TmAlPGpm8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCiBghoor3Nr8rRz
+seCZN7G7Dq0zMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAHWZAEt8Ix0IGcBsbwhRyul00PrzASZz+XN+q4JIicXYp
+Xfb84CEisuEFrlGsWivZBMtuESnDAVNcOFjloMNa4CeDPIhR21HyiUrrjeKvgt/8
+pUe0+7mm6J+Qw6CDUmdobxhIFEqYNj06KCpYzRQ+CIvFBGeaFoto7VhQovMcuVoF
+KioUgdD8H2E4MLzoh30YnONQ20Y8xQhWLBoUFRBIqjR3Wd3RX5UIlzwo1U/CGGOv
+eoRz/1koL0pxS6uRC7btIACeGXvgSQ4UnLQFC2GHlarA6wLa6LyUwt42sbQIpi1d
+bu21da3Mwa5LOpHeMz0UlwkaM35WEVi5wItuAHvolmI5vIJHPtrjx+4IAHY8TiIG
+fq8iqt8l5hIrbnn95bt1pIZ/D/W+3BLkmxzdvg9TV4cChp8Dia4ETBZZ7Q1lmJC1
+4/TTlAwsFMMfRcp94VuZZe7o0Cy23Vs5X1HNJ7urMxQdj2wQvvIc8PbV1ZlwF7pm
+j8HdaJmgXYwz3AucILbOqS36rZQz72c0cODFajSLso3Hn2SP/6jFwpU2bgED+owM
+5tZsidzWXMQRKBjt+csxKh+X7IaiHErD2594Ok6Nf+W5h9rtCU3c+HWX8zWbhKV6
+/dsBNDsvszO/dEpmy+4EQx6cpqdXs6T/sS3z6bBa3H1kaIdMHNCkRve9Z3JMLGA=
+-----END CERTIFICATE-----
+
+
+NCU Ntz keyid 03d1cde438ea3db34d943181c1cd517d688062ef
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAsw8/v+2L2r8LAAAAAACzDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUyMjIwMzIxNloXDTI1MDUyMjIwMzIxNlowQTE/MD0GA1UEAxM2TkNV
+LU5UWi1LRVlJRC0wM0QxQ0RFNDM4RUEzREIzNEQ5NDMxODFDMUNENTE3RDY4ODA2
+MkVGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmC5cXdSjxj8+qhnv
+mfZ840yThIyJ7HRQPWS4NcnilxSZdqNxrgMOj5HmDcq3qZRlG80b6Cy39HnPRakP
+q7RiUgmE0K6Hj5uh94UZXyQbl4aITWZfxXCwo/zTTPO60+gqDrBU7O+LTkjdXuua
+U4KlA4bT0X62D4hWgiLCAA5RJWnCxTX2dMGQjJ07+dkNI9VEdPhdSh2VqsVo0dI+
+X5PtbTcdD0pHa3KNmmKEYTprhpEc6YCkTpg78yjaFYmOtNZDvZ8m6kvZyTkaiScA
+kSgN+59OCpemDHuZHGUXVfeRuy+M50/OZcU/Sg1GwIERly3l0uYXObA4JAC083z7
+bxpwh2Y73H7v7BFmBNCrvwoQytekQMwvvhNqSxQii/U4yv7SPZgs+oo/fmWRa3WI
+jHggTUFlis2nhnAUSH5XbPvGgFlFatOzrjbNjxmKZ1n3676cQkQ63qf6RkJuF08M
+6p66tYVolGs37AnZTRVnUm9xXhXMTUx05OySW8FEbFGLym93ZUKVx86re9ueQ6/y
+5HILgtgSfUpNPsgji/O4ZrjZ5p0p2XdHc9A0oop/zeT0gulU9eWCKUlMDwhn8quv
+d2h7YcsZOyW3gpWXfE7vJIKL+5LfdvF8y3GWrgXj8HzvnJsUg6dpH770vtN2oY/N
+lNM5KJrLvY8nnfsbUBDFrN9Af5cCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFADWUoQ9kUju2F5H
+p9VeDFeJTlKmMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAnJZAoy6SKEn8eUyL7dwG3Kuj255/Xo2MS6mbQI4WnTrP
+ofuecThVMhbR51MY/pbi/6LLywyd8zA65fOmUHn1DAcV2MERyO0lwY1f2ri7Tsv6
+tC6UAW37dWadC8te0/nYQw0vQ8DVc8pYPgGNIgViYuw/1Fn+ZGEOM1BIBWSXF8JA
+Fz/4PiYzZ17Cur7zqLQk7Sp+5MzF1AqD7dFD9GgWrQa4ecCw8skw+uTR8xPYhcgO
+QK4biDtZRKCwZy7cE2x9Kr0YPXECbmIVZI76+wFnT9m9woluEJKis2eLPFpiw9MQ
+OE7NViVnd09z0lk1cLCOx336o1VKDi2hjsFbEWoqEp40OMIlKOORSFVluVSBO7I5
+4ELuCMSB6bu/bCSsvh23A7fewbhd1B7rscbXpZeW7SfiTxHUHC82bjn+Fd8uqA6t
+F2aYbOnQgZdpB38aXeYrhuMZ9mWIyY43Boe5mPpEGP2BmbFR02+Z/RR6jf7Ku4+f
+E/+cvWaN2HvHYNVzvVZ/0RzGKwn8yRadKqP3vzf0nEN94vsvKDaJxsxLbG55D4r+
+5jxkF5vyfbGhre6zMjJcQ11AOFzfq3xc1VHZasVs7JHnmCsIz6GlqVfl4+PDV3/q
+eTLxUvgX0/LHHv9v4+Ha4lbmgaizTMQOmTjMm4RxiRjhhpJu9/XFTLu/nCt0qE0=
+-----END CERTIFICATE-----
+
+
+NCU Ntz keyid ebb2f4e312e6529c4ed0cdb68228580ae5203d45
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAs4nlgaQXkAouQAAAAACzjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUyMjIwMzIxOFoXDTI1MDUyMjIwMzIxOFowQTE/MD0GA1UEAxM2TkNV
+LU5UWi1LRVlJRC1FQkIyRjRFMzEyRTY1MjlDNEVEMENEQjY4MjI4NTgwQUU1MjAz
+RDQ1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnAKMyBqxM8krItuN
+0LyBLUZaF2hfkuWoJ5Ql5NcRZjB8KswaPpIrXzdE8Ball32d27xURFTPk/N9FjL1
+8VRnvC9o7In1bobbu/g3aBWLIQSmqLVIC7HZ6hwzsiYgKrEBM712cJibE+FDWqmO
+xhnx1NP3Y7tklri8LJcdVoWALjPbSAaYAkCgG+EHzNc/GWInfYipuBoWH0MTbgbo
+CTnQhNlB3Mk830GZVGRIQ9gifm1Fj7gIz+yLZYR1vIaIrv/P1uoCltjTFVx99w5p
++9D6g7z5s0wmm4Fwt3V66rApA6oyDzAnzagtqPQ/PVuwMCYNHX5xm4kkBxrYcXqg
+rxmhf0CqbyNLrnsPQnKKR+w+jjxWJcGVNuH453laZX0vsm1RQCn8sw0QTFY0xT2R
+rERsYqIAe2qQELIBmUGlRI1+s6B8CXd1ZJQzdJ8+SKVoI5WVJ+AsK49e61ud66TY
+GTqmSVzWnTKgsCe0l87QNBfTZ4dL2FPCYWre7M4fKQJUrGEqo5mvokg6MjE/uGCu
+FZIa+zo/mzOBphmtGr9pH1xCdE55hHj8HtRQQsdnyko320e6vyfjtFpj3moZvQwE
+bX4KUHpqW6GmzV690SZzSD5HUMmfv2u2/RV3wbzhuUNAC9Ga975727NBaIz1quXx
+jvuZ2s9ljqVxSBDEuA7LT7Zi8JUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKiK9ZDhkYL9KqCQ
+yrcdzeVRMbsTMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAFKv9+79fu38BSlescAcd+KiLQC0LXS8o39BuXnzKopMz
+tGvKhRnwMZYVV5anvEQYmdrGzhkOETC2EuX3YGNy63ONc7M054BGvvGU6TzvT4Vp
+TJLKyuhIdgZSrnEOM9hKvEUa2PKImd2VIg13b8mWZVJyZwvVlCzx23jQiHq043Us
+vrgsde0UpmQnD41stCdyHlUSmJz2kUIf5eslmeDecwGmvlFWA8VlYy0uWLB+WyuO
+DgDjCNUsdnR2rrah8UwvQPvmOT+6S3UGUXEOmUFKnuIKPLn6L04EjXhwQ5x5k46v
+BHpNbxLzaLxz/86Hd9ZSr2aK664ok33njiJOE0PS7Fu93VKtnRifKWIHXp3QY6YO
+9NnHF09w88Ops0uGawpWOA5Yg6/D2OPtpOuBDNuBcSk5kV818oN5ddTJTQZBPZni
+73yP0ul+Hf0iCZQwE+mr62I/lPqP5qnncn4LBgRA5YXBF64c5CIOqnBG0L2F8TGz
+glUDw62FQsxQ7OBqP0qXM1IM/LO0Wr2I61EpsOZpdrz+knBPmldqqkqCqGGSVASO
+VMHu1fdWb+DXd/8OpiuG9e50kCsVmObzpiEYRCHXEXSvFskZYADjknsxrelQnxK9
+OKlszf58gYDrF6cvqQ8dtfWidMDPisLYdTzsX2+GgmSKoOxhunxGg5iDTvnSL/I=
+-----END CERTIFICATE-----
+
+
+NCU QCOM KeyId 79100C2EA35C4FC14BDE159B56326FB731D1D512
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAGeszGWXcuHxJwAAAAAAZzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDYxNjIwNTgxMloXDTI5MTIzMTIwNTgxMlowQjFAMD4GA1UEAxM3TkNV
+LVFDT00tS2V5SWQtNzkxMDBDMkVBMzVDNEZDMTRCREUxNTlCNTYzMjZGQjczMUQx
+RDUxMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOvx/D9shcI+lcy6
+7Gf8NYVB+hJE7SfuU2O0RiWmfsOUTX1FsgNWqz+pxlNld9/6iDcQdM3s4cndq35y
+Sm8cLjwhYZUgs8/4wJ9GDaIEuIlJM6QcCdC0q4VXJZOsXu7Res2U8s5uygVFA6+p
+gpPo649cmiMJvVD2/G31bG0ddJZEoshfd+8uGUzgnf1Abm+WVdLN+UFlWUhRW1Qa
+ywK1KbsvgzqH5ArX0blGW+/1J9NLNnERnSBwmHwIDGyxXumuDFtZ6BxxVxJlMGzJ
+by0pOSr3s3b775nTTBigZ/HjMOC+ofecVCHs08oRn9Yv0jDcigRw2/5ZxKl5RNEv
+eVMGWb8CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFARlutcftqqDpf9HPc5M+J+jkVIyMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAOMVR
+RKo8PSVwtl+QjjAIQD8MwGTzk/35t8tSeOaU/qipe8rBUrOdduhEgphXRlbXBNjc
+szMVMJqwrDz2JfhqifRGuOflfFSyQZyZzW7CTrEv1eaCS7MS8Ev7DedNVao/cOyJ
+9dwDx0T6K3kXdUDju+TcvQa/IHTQ1v/BKdzSmwUPoD3nx6QqNvLxopw7MV6ykRQW
+2niUQtdij5AIxsGApFbw9ffUnOO9mrv2veimrcGcjDXk2QDF2WYIfg0BKlifvmkq
+bmREva8B6zrX7KnWgFrNh20805JRVYfSNwAiwzaWyMMmNlR9od70NkRaw9EpeWJv
+U8tcWTf4OeUqX6IEYFBdmB+zbEg8Nf8V+bN6x/4XSwp5u9T3e70Y5RFa3ZjlAtxW
+DE1jJdUVGeBlOf0WHeZ7ZQ2CvlLjE/t/ZzndgNWj3p22cFE+OE54SEO1Wc0Dcxp/
+FHAKEnFXyt6G6Kzd/PnAvxcHozgadekQP8/7cCjmnxBE/2Ak7msb6kINGOzOFoEn
+CCFL7HeF/oZgU9xC3dqQ7Sxd83lN6SDq7fWNHAYq1L2Sq9eIBKGV28XwWJ/ZqTcC
+zdYR7KZUAn4MYIwaeZdCO84ehVCi22hcrr5JkgGN2y+wxIVFoQHKU0kxN1l/PXrn
+/AX6WMJZ2FWOFiZU7LTvykbGBoZ4n7oXOnfJQdk=
+-----END CERTIFICATE-----
+
+
+NCU STM KEYID 08CBB05CA4510B2A73299184EDDC9CCE42911211
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAuPOTkfU1tMgSQAAAAAC4zANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDYxODE5MTYzM1oXDTI1MDYxODE5MTYzM1owQTE/MD0GA1UEAxM2TkNV
+LVNUTS1LRVlJRC0wOENCQjA1Q0E0NTEwQjJBNzMyOTkxODRFRERDOUNDRTQyOTEx
+MjExMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtAV9g7TDzfzep4bh
+X49BFfnJKhxRMMaZ//V4h9Y8888Sxtv+oEYkhIbTNrLrl/BXolcjWNFrw6sHIL6w
+xS9MEjgsaDKRSEdmYR/925awHuXvTEDltOIju3TnUSsDRjY+N8N1993MOP9w8yoE
+kzvPorA7LARiY+wBQ5n7qPORQBbNjO9F+Gl7m/GWSbxrbOoZu5FK4LGgoV6GVaRa
+RJR8JI1nl5ymlAqLTXALdaoohJ3y7vGava7fFbchMm6zxgLHJ9mhZp57TmT2X8AT
+H23WUFaszMWawZAJ8j3lpLql31uZXawmliDZxrf6fg9GrEz71uPlQsXYyxoC0/Jm
+563LgIsbyOXPIRGx3lf6lyFQwm2PIX+ic1WT1EDLhRZHLaNAcPtIgiYuvOr8VGR4
+oke6PnIpJH3S+4qfrPAbxhjkCWYVKx961PZbEKsD+Pi8MjcsOiMRHodm0qTw1HGp
+og4hALgrCgsc5/RsOMyt0LnuWpxoQG89HXyGiMHp2dbcqCxEYe9sldsS1o1/1wBv
+QRnfeOOUG1tQn41edRH7GyxhfPSrepHxEPV0PMLf0I8rd4+mDeMj78z5Hy//MFDx
+LGWmMnM8ucOoQ7Tpfv2y7Hk6vIBHMYYJ5LL05zMwjXo/SMhG91eEBU8x65c09AhV
+XfqLmtfuWyMQS9rzYS3SXlkPopsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAD0Rx2dHFNm9uoF
+zhGudu9JIzCfMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAhExEq/hk3niqfQkTlfumRWuONMFTmkFznz7CHHJjf5os
+Yh0AVsiuhS3+c48JjAzv2hZUrZ9z9fLgBkMqpW+7eEs98Sq7lh+plz3C/JlYSnJg
+mG6YwhaWiWZGvLBsXK3V0pi9Op9OXDh3oxJbw7uR6xYsTiI10zOdVx509gahbKxt
+xQTlbHggUQ3e6rQ031QFgDSaeSzx2uGG3JiPoqYkFcpQ4C6/eLoKsSmGwZwY04HS
+MKAxxXodwwjS0SWSIQnZKYYcA7IKydKHR9iNxV72FUYJdx9YmmYSie7sqYO5IV3c
+mDLkEPTSZ6xxUiqIsOImxPjWD4/n5R9i2wuqKOH4MuUrWbDsM402plAzAd0BY1eV
+vZY6SWqrIQSMQW1Nj/Ni9qlhIpYa9RqbJM76ydDFnxSiGUgbqOtLMyv54CQG1zjg
+K82w6EJ5gVIaQs7awxQ+1XCV4F42ICDeBC0ETPyVkLnLQmBk5tcmmf6kqEpZi8EV
+BjevwgKIP0Un6RJvZv9wKJmaavOs5h1tmez4cDcq0JKvo3IssOQddc+BfFFEakPQ
+7m7QO5wvvsXaGoJJFgIetd2MG0lR6TmXg0nPepzoGfSY4NDNlUpTCw8+AeQZdBe5
+YzwuvLi1Y3xuy21VwILKRfpbnlirGOtwczyIx9BsetNkrDt80ULjdQRi3OKblTA=
+-----END CERTIFICATE-----
+
+
+NCU STM KEYID 1ADB994AB58BE57A0CC9B900E7851E1A43C08660
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAARCCxa+8dw8FRgAAAAABEDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDMwMTE4MjU0MVoXDTI5MTIzMTE4MjU0MVowQTE/MD0GA1UEAxM2TkNV
+LVNUTS1LRVlJRC0xQURCOTk0QUI1OEJFNTdBMENDOUI5MDBFNzg1MUUxQTQzQzA4
+NjYwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvD/+RcOOs0mhy+Rt
+pNqF2rETLDO7MEEwxWKV5H1/eC3iZGQr8zXk3NEy+CmV59Q3rwwa7MlJtwKxCkjA
+gaWQ1MtnxiyPDO2saZVKgBYvkJPq+fPDZxgTVAxIiOUElm3KyPRqJ1REtJWVvvj3
+40FgOlPs8JNioaO6n7FfPin4sF8utVSC8ek4WCTB2/p8NvqiJJMwDt4lCzjJ04Up
+qwjT72FcYIZwoaF+DOxgWnABX4mGbS+o2t/2HtDUUE4f6wrYOBbPqyqnaN5Uyopt
+GuI8doCypFHg17PowipaifR1gZNjTU3BsXfN5J7h06Znb0AJ939ttaAB+dKYtDK1
+UHz79wIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUm2JdAHEKONCoWh9AM2ULqAbVnW0wHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAqO1ko
+kuj7CbuShgq1VZf95iqT64OlNsQPnvkC1usCDOvvFR1+hOJ716J0qJBDx9HltNVN
+QE8mkQUOzKFLgpu87kMOlapAv65DmG+yePnQpbGp4q4UsdG1YbW/DeRCXvmEKaAZ
+Y8wlsemr8ffdTCKxe66IeZ8O5tELgWbw71asIyn6NXWcfxmlY8qZtALHNAsv2y1e
+k19iaowgmmAnBH2LdHr5YNvHIB2/v7dG0s32wo/qIMAdt2sNilw2k74Lq4tm8s0+
+9V+YSw9250QpO9QSixcBLvspctptEa+gnW4WUf3JnoVPcePEsUe8ct3O6WKc6fub
+mBa3leurvA0wyhG3tGHxqVnu34nKI1DNlT5rO+gimGzdKLYnbdU3PLH9NYZDg18+
+xHgonmWcPDSLNWzbP++JpIkpcgan9/ZTggf+93AbQMw8X6cy4v7pyv6Esy1lq1fb
+W/c647SdE0diR5/LtUUInxbcw7uQBdwaPKQ0cmK+BNnsxlbWKZOmruFA6X3kYCLh
+krv+ITi5YFQGTVXTrV4YfdfiV02tPLgrCAzasOwmM/YJdHTKVO96ksReg7VHivCb
+RwhRTaeR6i/FaNwqOhRSSJzhwobmB3tQrap9cuLoTgKWuv3IQtTsGYoS5JCJhoeL
+ek4wydzXJkuDuhS90kHBzUjB6FfJfXdiIi2QHw==
+-----END CERTIFICATE-----
+
+
+NCU STM KEYID 1ADB994AB58BE57A0CC9B900E7851E1A43C08660 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAoOhrhRmGH+3pgAAAAACgzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAxNloXDTI1MDMyMTIwMzAxNlowQTE/MD0GA1UEAxM2TkNV
+LVNUTS1LRVlJRC0xQURCOTk0QUI1OEJFNTdBMENDOUI5MDBFNzg1MUUxQTQzQzA4
+NjYwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAz6hEM1LygD1Jcf9h
+ErwcAQxtP5GrTd4hiC1ZLyo12EG3XjhbEsIRjuSgWFhNUr3qdAkTARVzQ/XfVspr
+i8+QUPU6l8wmUNSsF00C+wTDdQerewF+4MhD+8g58Q+Be0peTb6WDIuG9UTBHRKy
+lMo+k6h+ZjGOedWUWhTQ4C9cyrO900ShP8GnTo6kExuoEBHbtYEbauf9k/GHhKDi
+W356HGCJ7uq1mijjqBhEUVJ/qeu9uqFQd8dv31JqgPoXtdi87LF4+FTrEcErfgW1
+qmq+M4ujENILucOzD9Kab/KeUXOoEjISChN2phvBBcwu1EwefgDJrzOSr5xgYcE0
+4jI0Lvj0b4XeZQJClB8rX6c5peTnpPLnZWU8pI9VAcoy5V9/k49hovKghuhpsydP
+udl6aUn6QCOY23/5Wxb2Ke+w1fLJy43BhEiRcSi0kh9ouYp3ecSjCe1y1WxRguWW
+JFoA0tfHTQ32aG177qQGfmEPtVW9aMdSvjN1AICMcwx3SYz3SVmfg98yaLPkv89Z
+zfVRswJ97/RMv3p2H6zY9YAgIamj5bV65U9kld7oMdEwzpoEc+mLLMu7zPJJbFmx
+N64QPFUm9hBgatZGAPhy76mS7R3vct6KpQyJd2fI2obaAMdRExIHhGHM0l6pRiRD
+JSWTILEy8KGPVqRMXXoanFanXKECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEh0NqalB29FEkHd
+8osmQu7DgJE3MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAOEGfTAHps7wzySb/iWORBkWr66iL1xcHIsolzJqJfpIE
+RLc2BvaHiRSrGv4BSG4Jj7VDl7SDpWgbhyOihaou+3bnpxShDhj7dK6hFN0uQBu0
+J0Xj4dqiZjcIHfsDujvyaYCqwQrBVZ3lOo8FSCNVEnei4R+vDrmBwmLGg5PNpXWD
+FdEJdH6+/Rv01lSm/+VDeEADgqbziLFfpmoS2arp6qUJWpdwQLYoFmyeAd1fXFoX
+8IGp+2qCfcE/R81Mo2gnIJ7HSKwKQ4lVK1IsB7QLHf6bgb9BDGE74rceKB0h5TH+
+NA2kQNyJMOdLv9yFFrMOopH83t5CFmctp+76G3VQgMaACDOt1mNXY0ScG6HbWItg
+ZOrRW9XDy3nHYVSmyLGwSokO0ZdOeC/DhrpARKa2zlJkOjaupiGHnluskJVUEJso
+yGRMq//zEtriwMQiPcXCKdjBrU3X0KojTg/zCMKXYhym8WB7dj3Qn3sJCF/1zbjP
+MEog1L74QJ+RIwaPN2rnzrzh/qcBvZk1Adpow/7XQDyTtZUPuIttdkLYjG8bdS7C
+fipndkRTiVewmRcXlU9EtJe/VfUSGSQdiSPrHpKJsEP4gsoRIoSjfGhXXz//JZyH
+GjzO8g5XCL1B3bqgTOXDwjRhVcUxLUzZLB4Fh1dUvh422eWUKSSM+Su5RXgRyBs=
+-----END CERTIFICATE-----
+
+
+NCU STM KEYID 662D8F1CECDFF147A8B6F0EA296AF7F24CADF9CF
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAuWFA6XBdDE2bQAAAAAC5TANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDYxODE5MTYzNFoXDTI1MDYxODE5MTYzNFowQTE/MD0GA1UEAxM2TkNV
+LVNUTS1LRVlJRC02NjJEOEYxQ0VDREZGMTQ3QThCNkYwRUEyOTZBRjdGMjRDQURG
+OUNGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuEm7silR9WXAYkea
+D8pHQ3g67RuDfGa4KMZwgq72z0ba+cm0PN3fkjTif98WnjB0ari2v99GyGXhuYE3
+gv7qobLf1yA8mlda2mJOKCb4Ii2Ggg24d229QAfpZqY9JO9myHaV4Gq20vec6G/N
++8IFo/4/Whh7wiM4GOjR3c347E+CoNaoyk/MrkhkXmJXHYVf1VypjsYVf5v0mRhj
+CPfMyWFddNyVhkoS+Qj8lxk3mT3jG27hCuRvAldjLY0T2aCYoCpelqNYwsR2xicH
+/tWsv7Co7pMYinmIRYY/lNKrQwGSNWNXSRQR9ZpE9S6FzmjNIlSgXYDqY6JBnYj0
+mMlcv1Xbues3NgALOsq5pOSwf7iJ5/F0BUiMqigD3fypTwqOtFGJclLO9Y8yA/jf
+LUJIo5sMhFR6/bIxcFDN5bctpXpxvrAxUqwjSys3VjrrvXhQLfwwKnnvKTF51aRR
+//5msmoHYfOoG8ZBFioZhAoPy6fgsdklw2dUzDmH/iygjfjOjKIpdoenKYpHJDPf
+/Sv2N+NhXw9x1LCbVm/R6RDe4jlY3Cw5p4niflfaazECK/57hh9USpeom8NAVkyH
+JW5PAwBIk6HcteOlGEKX2TqBWdbjvwZbykZc9j5+yO/87nnF6JWYGd2T2ZV92mkX
+V9wzGnLuWtBNkhyIxDlRiX+0QSUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFA/xDSw8g5cVcTJs
+5E6NDpcZCf3GMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAiARSAvYq5L6tT7ZHFu1HBHGhIEItrqHLTy4rKumYpLoz
+AYeOrcb94DznA7m2gV6+PqmekIW9c1/aGxxOM4LhUzNxtdv+zlaOEYs4u1Ed0vXg
+Cc8K4mf3QYwzyY4nksh1wXXFzeFcECzmLVvR/LzVH3B9dEX81OnmQyx/f45YjMsy
+44juVDlU2sqKXYRan+SNpDRC29GDeSQpr3q/L550FzRcP0W+0H65vFxM134+TxiI
+k+U0WSVfytxuDPxUxtVRzAdtTtJaFEiZb9v0XuDgzUriuHY2dXECw37lZ4ccR7Ua
+MpTfK11/Iarf+ngJ65smKpZSEolPwq3K0o/HLZ7EndkyMAW4KNzk2/891ssu47+Y
+ayUw8us5Lp10N7Hy2rkNW0vVuxSS0Dc958Ch8B/y1yu5kzjVIuaTUXK1W3QmF/oq
+aOm7n95hOk3S4bong535efgjbHp3pU3ne04RIl0bqrFfCHtulR6/ycVJir70KRl+
+SxXVuLU8sJKXm2fdbnX1rCD7mePSrwwLrQQznEdhHHJUtmjBGaV7I9Z6n+zIwWTz
+TUxL65wysig2QWx3FnxQPCk2jxwZOwbnwAnh0kr/hMtCh77kxeVp9DDj2yDou0AO
+DCp3UjoPMWtxFFzLfS0DbIq5SEuYUQ2JIUKZANGIafsn3yEXYS4n9hyvFj5VNdw=
+-----END CERTIFICATE-----
+
+
+NCU STM KEYID 6B2780800A941CB47EFBCABDD8D1F01D529BF36C
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAuJ/ZYtypitM3QAAAAAC4jANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDYxODE5MTYzMloXDTI1MDYxODE5MTYzMlowQTE/MD0GA1UEAxM2TkNV
+LVNUTS1LRVlJRC02QjI3ODA4MDBBOTQxQ0I0N0VGQkNBQkREOEQxRjAxRDUyOUJG
+MzZDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsawDFWi/0qPpJzCH
+dHwVwe2gZolll2Zd02jabZGdyD1JkXGJhXc+DdJrcSUwADKqOEjJptG2vARPWB0n
+lz5hSXdHc4OcDy8LUxoiIG0wUysMBUW653YD0s8Q3Axj97F2AanSOSuQ7MuUXpIh
+OjII42SxVVNWRWHb4owgt6YC88oNitkoINlSZmvnzlu9m3y0m7NClEdmwMgP+i4a
+G5QnwoHX65j+CtNkzI4JnxY9ynFpTVcFCTyDQh4couwBF10E8fn8ScmC8El7m9Ki
+dJBaWPMHSPv4YSVUHNO26y7CALybho8004Pv2xzfuOTvHKEuainEpj4WMTSNxcXW
+teOqLWvP+RxeOwJwRbaBA89ZCeLPwG3gdCyDtNGcOLIUK7rh/LmfakbC9WHydMON
+BVEGXwFlBr14df4SnE+DeZ1GEuqEWIl6k30XkkYTv17y+kwC3tOnb1bD66zKY9wA
+d3Adb+GbesFumWfmOB6ikc6G2m3iqOTrkZuudQh6bMkiFLAmlYKgEHNrYvNSMu04
+JkCHaNq7rr9kwnvVSb+X795EQWg5Cz0MKcX78HQKSToNlVqNwdbMQSjh1qrPz/3M
+R9NnEe3/bk9CdvCXlHDFR6xu4w6JUf3CRp/Z0QfXG6vKJBnIQZ3YVw56lR8uRTYt
+wNbnn5LrjcYlAKhpUWhcTkIbPCMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPlDIyBEyaVan00r
+ly2w5kJiI5aXMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAgaiArybMN+tIplAiOLku40NymENP7Zhg0JPzmtdMQXye
+NcsKPJOhcMFI9AnxEGy5yjoWlX4FYEDkolLGWqo8VRKH812J4b9KOzjOzk0Q975/
+YTFT9dwv0e/j4EwkRdUjNZ+0KqkZpTqHLiBRStGEez7BvpegP6QoN5prEo5CTgva
+IRwH5BqSk2D7zB58KkEYOJ9ERPqE4BPb7qh2+0E6oOYP4Z7WJVOTB643KHbJE+7F
+/gArVgvnhn9We5sgIScSz8iy6CMWS3p3OKluBzhoTHLJ2Ju3flEScMFvU1wUJHRZ
+8boNy53Fw4sRU7tYRnSlrLyq0dgd4BZYpKF5kkUgkTVzFNvlO7pXiqVvtHt8ufB0
+1LRqg5eaHkSuvZ+mRyA7o4PsbLDv4ShxFJ9vnTT54hG5iI06Y97onUlbifRhlbqR
+1GtdXD0DiS7XUpazhmTX8z3EdeXPojlMEiQsvLLBGs1B3nzXlqxn5mjM6SK0HJgl
+jsDPy/LCBiqnVN3cVJ64+2kwTQYUsvPuOB9YxcGOv0PM+DhBcaq5Kid2ObnAtRhg
+VWGHAyNnNoQNVbHoXQbq+MxxDP19egwgW91YzMKdfEWR5Vwj3RnmSlGtcaPU2AQC
+9rB8LrS04FC5g8EQaXH71nCOC+6IO+IcsYonjaPX9KOg3mmfQE9yYqdSYQCUj80=
+-----END CERTIFICATE-----
+
+
+NCU STM KEYID 9DA5C72CA00BE14B85B3E535C8B07C83E85BDFF6
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAuQsUTCeIQe9AAAAAAAC5DANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDYxODE5MTYzNFoXDTI1MDYxODE5MTYzNFowQTE/MD0GA1UEAxM2TkNV
+LVNUTS1LRVlJRC05REE1QzcyQ0EwMEJFMTRCODVCM0U1MzVDOEIwN0M4M0U4NUJE
+RkY2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA31g4sJEbAWaYrU2l
+kH6Pa7+xRDvr3JP7JsQFGRSV5ok9tolxJ160QyNuWIq0c42NRswOGtGKbI/Kgqy0
+oaYd+Qs/29YURiiu2EzEhDTKDpcoPNkhZys0artLyKSy27NjIYs1OREjik2QyCRN
+ZnR/XRDgT2bi7Oj5mwMSt/i6Rk7UnVkRCcJaVbcuMBPw/XVCMjCWjOp26GGwlEI2
+ZTz3coXQbaQ++V/+jA/blCQ+2t6bCVd1Gzy5ZF+WpE5mPkVVztcqdi/yLE3txqdF
+suRsSrW6yrS8w0sm5HsJDsLfAuCObgL4FneZi5M9t3u6BstSOKzrPydsEHIgCd68
+eeH3xljq/A/xZnQ0cmi/ftsBy9MTJ0q5bvEOWw9agBdfR3Rheu5w9sBeIf+1JUEI
+KGOiY15uBp09jIboIr8WwjzxWKfDrBPhdP92Zsmrr/UX2k2NW6kN8FxK8yiUQ8zb
+9iUvPqh73KpFyyiZ71c0/LUGGhHgjDgxXQ0ycpto7R3ZdZ48nbAjD0ETBLfOLChD
+tKQLO9rr5SoAIac6r+I/4fHin4WGmv+xi35zHy9yPAbh7XL6NUL7P7hnsPNxpbys
+cTWRE5gVnSPXT6MXQu0YnbsPgWbjvjKDKuycuH1PxA1v5aGfzEXYvzIWaSohjEnX
+k3QxXo65G2/HNw4SxfCQjESDt8kCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNPD6lqYVaWPQ9SV
+v3MLK+ZsyrR2MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEACUuV4Bp8b2rL1Ekzu8eQEZBd8UUuiDcBubHYNRjcEXjw
+stHz8t1AQze/3eVhRnFdcnzuITlu1ZJCa3IK7NZrws8DeKugWxOSHweATH2t5v6M
+ioiR3S/725QFjZr7RCZDVH+FXkj8vVxGmU9NqH1kO56JO0gmk/nzuPs2C7SyevbZ
+XrB+2BT16BIxGLVVthUcDeSV59U9/AoE/D794Ln4AJe+5//4GqWLpWU96sNntXH6
+W1PuB6ZtUxbLEy0tjWashEBIIDl5htncxt3CM8JhnGbApACob+BItbkUH9g8cUWp
+Cc38t8ZhgnBF5XJ4PBo26vOXrIDCntiL4XncU31mJg9JKK6IK2DdIVn2mR9nYsP/
+qZkUHw5ms3ifgLn/roYRq0nLiVWaMkS5gaZRnvpMtkCOi1jrAS0UIhuGNyTGzFBY
+k0EUSBTMJpTSLkzHcUnzYueNijaxGSD9cv0MDweA1lLpB2raeusv4J1KHwseh5VT
+FSEkZ5gNWuNJl4XUNqrW8is0qe8sH2Hr7T3bcx3D77gcMwYGIQKMI8V5Gwc/ygpy
+LmpBaeJrN6U2Qhe5101zojduaAwlMmIfuF2nu66iYQzwM5MZ9NcD07e7VUVAlYHK
+UzBfNT53eoW03+CZltBUTP3S/ew0Aaegj+aVdC1dv7MI8utg1sEcbRIg27YsKaA=
+-----END CERTIFICATE-----
+
+
+NCU STM KEYID BD963E9AD574AAD94FAD6CBF416DD85B4A559942
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAubIolwyT7ZT1QAAAAAC5jANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDYxODE5MTYzNVoXDTI1MDYxODE5MTYzNVowQTE/MD0GA1UEAxM2TkNV
+LVNUTS1LRVlJRC1CRDk2M0U5QUQ1NzRBQUQ5NEZBRDZDQkY0MTZERDg1QjRBNTU5
+OTQyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAluuYcYaM+pb++9TP
+6mzEniemOPipO2F73qpK2wYLXBM3uRILolRjKXzrCxvYAfYqZ8SAaY/mIa0HBQaI
+UTwQu6F3BK2PO8jjYeJ/1HAdP55Uh/0p0ds0Bp5sS57ukNpjlB1r2ggCrynd6ayj
+AO3SpjDX8OUOaTyFO/N4PZw1y0TAmzOIzCxjfQrACMs0vdvAkKJ4UveDsrsRq8rU
+IYeqDMCPJDnCPzHxvP/vLMVV8i9hvaHhMyw5wiCuyQtrkaPcsAzor/Os1y2I9wsN
+pAxiKH70uo8TgyTHNObAY4v+StIyWm2Jkx7RWOcTzV+pFGOBmIbavM2CLviRq7y8
+o90BdZh0akNMGCfgc6Ay+BlUGasRasC/7p0+fPkCUcr9eVxZAmM/PFB/E4iHsIMr
+3IaPSyBEch2JjuhHaxH2ymY5GBvh5WYdSHCZqez6M+efTn7ohjj039xZhcr946hw
+lWuhM7FekhD0wJCAB2pngCG9/8rYfp4TswF2vc8c/p2VNUwMuAi9Nrj6spFnnlE1
+SIVXRmB+P8jFofDlKRykxoS9ES2Tyq/7+IeSAcZBNwx1M4T/AQ5uU9mkZ7Q7Do7K
+4UCr0evt9sGuF4r3n7jzm/aruPHlff1Nuxt8+I5v6Jv2p3FepVzL0XqXhH7gRb65
+D3dhn3R1ObYVQlrGkPvEOifZzDsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMA8MDFO8hv7WfFS
+YbXM93B/pEYPMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAA4PEgMwelUTaHr9c64aFyp9mreaAYmBt6eOzrIlMMyxu
+FLsCNjp+nUdhUR7Slo1dEuB/KVhRQIsK6D12+acRRkPijH8orTpH/jDnnIgJy1wy
+TCNKdzIaqyGDjIzPVXVRMqCzhV4laizTApuvoT2GdRkznabF+77OJJEZLRsBaj1V
+UOZO+KziNt301J+698gr9DFTFkAHjQxoqQB8UtKPdwmL15/+ZxoM5dvEckCeq4r4
+fGTqlHOZd0t6Xi7YNg+mKFxEC/5zbyYDwOSD1xPv4kKPq/elNXnIeS95AuNBb7z0
+095EcFKZCSGs5K+bNQQAJ7hEQHMzpOvou9oWg/sEoo3Bss/QXPQKIEN3buYWn7Zm
+vcuSwf8o0DjvyV1cyAEWZyi0JtxPHZ456UBsyHi8albRmqFfSyVBeidHtnkwUlww
+yRNn3k6NovlFDnEKaIeZr5zX/DD1v/+pP9dqVm1LQQKLANdvM3xLKNoaxIYq3hpp
+Ys74h9vIZjpcmyDB15DAg9Mefe+cfvj2qN/Q8IVc49N+2uCg2sc9sE5u4mNBQq0P
+g3Wa0WPAjfNxKC+BUGdgErmMFSrUfdD8qyovhUK8/T1fUqHEPVNi6CysS785erfb
+anrt1EOdtrM0+VwYxqixNSlV5yfYAHU2BQ61fi0OVTuJ9sdd9crhgs2d+YYKuvc=
+-----END CERTIFICATE-----
+
+
+NCU STM KEYID CF23E59526E446C3FE4F13EB686F624D705305F2
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAARHh5MqhrVrbtAAAAAABETANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDMwMTE4MjU0MloXDTI5MTIzMTE4MjU0MlowQTE/MD0GA1UEAxM2TkNV
+LVNUTS1LRVlJRC1DRjIzRTU5NTI2RTQ0NkMzRkU0RjEzRUI2ODZGNjI0RDcwNTMw
+NUYyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7kudFfo5X9GuWChi
+PoBtC31Jcc7jaKjsYb+ZIOcIa2RNBItOUsZ2vVr3+xmbYVyg4mrnF7ZdXj6p12LJ
+x8wFG/ZcjzPpbKZugysD6/ZiD71uIto52c+nmh0dKYqc7J9O3QM5NEY6OuG1z5Gi
+LxYg6lmwz9upRS5pO4TnDWJA5kbbTrxRYa0Zyff606Rz3uJF2w+sTJuByi+HBJU0
+VKZbgGyAcxa+cpq1WKWq73tOCcPbznXWlEIZvkAJbjLI2EVeaSdq4H8RskX5nJQM
+UaxwWBL6rR0HICt+qHYJR0pcSrqUmpCpmSMcDFA1+C8/XEPY0wUog7946YiRe/YP
+B6I61wIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUNgeqqIe7TO9P5oQRTUxS+6JIP0MwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBxpGnG
+WF83fjuABSoi2d+TzGIH5Mrd5tT7mSUf09ZVfy3crnB1l/vWCZpMS+UeZbAkfKB+
+El56qBaFBGY0BgNOwKSsLUOrWID729a52VX5PyzZQh4u48qbQbeiStR9A3PstedQ
+67Jwv5U5ptZGM7+N8clWJ9z0AGEgkQCn5R2MPtB+REfBaENnvYepBc6DO72Fc9Iz
+SyItdsjMPwxGrVSMCZvWid5KsTK9oMf0U3wq2ZCxCcXey4E8iNsyPf91Zq3IQXog
+ot0hv4vKpt14Sa+toCPL8WnQ0BK4InXqhA4UAkdEk17N84DbdDDqUtcuOa891Mav
+z1cOSc4iXMEC6TQ7CDcs6q58oObQ7kC44HeHhWBzax5XmaHfWbIglNKiPSxHwyvN
+d2pbF6gkhgqaOG8nw8fEty3rtHy6orquFLx22Ty1YGgei8G56+snUiP8J7xgwycH
+ouS0HNYaZHk/x0SUnbsufwab9I+mnu8QCt15ZMQp+t9WKT5oGocwokSp21KxqM4i
+k6ssaiuImfgri8d5wOCz7L4IzP441thnB78+Q66SPSLlP4k+k7OlkrBY89jN+AHk
+Enurwm4lZRd3IiLhBpzYKAo4yuCf0BR7sp3R8jrc6YKyXl3ugJFu6J7i1xKImlXQ
+nd0AWxnwNU+cPx0tG/cEKEUHj/8C72cPRLdp/Q==
+-----END CERTIFICATE-----
+
+
+NCU STM KEYID CF23E59526E446C3FE4F13EB686F624D705305F2 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAoSlssUL0Ws5dwAAAAAChDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAxN1oXDTI1MDMyMTIwMzAxN1owQTE/MD0GA1UEAxM2TkNV
+LVNUTS1LRVlJRC1DRjIzRTU5NTI2RTQ0NkMzRkU0RjEzRUI2ODZGNjI0RDcwNTMw
+NUYyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5PWFbvS9NMpe7WsY
+l11K8lQNEKS/jfm82cdNcXoP/N6dNlkLjyAX1xEEu3MMGVbkxLOJ6BzhUlWb5zh+
+SThkrpSV6DKPYPOaD3xBWmthk+C9+T+R+nrcQc6vsqZxo6UrncXMaTK26h821Dxb
+YP6Ggq5pnOp6lRCX/D9vjHg4WQXq5z4o8lrsWt0T3yTSVo/HgVELjrI5bJrVPGGU
+8yX0mZRpYwCPDLS2RnYIGpzpVSdYhVZv6Or4DOGEPQqwQZgaod9Pllx58nQVTDHN
+7iWr+off78z0/oUjI+H3UfLEdbqgO+uTqcoiUGhtdEVITuegGIuyR2XRGMGkzxTs
+lcdXiXvzYy3Bt8igmgmmT+C3wQko6OmM6v4nHjmrt2toIgVWRN6Ccm+kyKw7j/3m
+7zMjC2ZrDazvXM41iuWWEZBeKSJNlTYfuGxxuLDWHWUP/kfz88j1pUVhL90I/z9k
+wZTSIu3SOkRvJw7pWchvbf8DCAVtLQchKTkfzUW3nyBPFEyND0QZnTzTOwNxhibX
+Qy+QuQitt1AqmbGVT1TTGZRQzLbOVoMfnH2g5NXuzl+Lf9NAY87lyWfIQc7Cy8ce
+7HL1RLUO0S5KGVfwQR8be2JKjsCGH4PeaJD4Nt7OC5rZPTMxFXvepoxsMXruKOVR
+E89K2EMZgqhIEZztnb9oSBk7XpcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJAdawE61UwnOd5t
+xMKK3YeACwqoMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAh9WoDcM6FDuWeRLFPk0DtW8OsEF7Kuo7G3JVt6JUqagZ
+C0QlvtFobjTnng4ESsSr3PS5NSfYabU8mPKpakLXAoUmAg+OrJTq//yWG+g63yb7
+cz6dgtZ0Hp4Iwu2UbTUIMG1lGqriscwLPPnqKMQI5hZBgly0blxoqXqICZdpXFz5
+dH8Esaig7csUjLf3j3h1se1IfaTzUO07hAEAkw2eRLxDhs6NGHxGPswQLXVhGUXD
+d7dJSK5ITGOe82tQWQwp+FouKpLQo+Pa6jhsVVgALrliWZwUgU5KnHUh5X7Rqppu
+DEVxn3lrbAxWATcMWSEjDmyq1w6kD8Xy3mxm+JKQvxpmTzYIB6Li9aP+uLHGIytj
+UIG/4TYYdICPjpW6HW9a4QXSat8HqHhOl/Wsw4aLllJXCIjNheGc5Hy5AHTyt/dA
+bZBmRwvdi5/eiIlZHbOBYXi+6D8/bf3i3AJOkPAsYLEOY2KGoXaf6VmNsEDWfqqF
+Jld9ggS16+mOD4nlDe4szaTke5NuvahTi1gwAPfAemoONbETC6wH2PSWWm+cB6hM
+uQkA6PXk8EunpSdJeOKJikazJ5+Rkwp2BL/yObK782jrMjxMzak9J/TLh8Qc5IKv
+M61RMptdzP4u+csnrLBtuQZ1AUIgdEy6ANIqBtt8jgQ18RquOmazVDfXc7HEw1A=
+-----END CERTIFICATE-----
+
+
+NCU STM KEYID FB17D70D734870E919C4E8E603975E664E0E43DE
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAudirr4J7m+zRQAAAAAC5zANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDYxODE5MTYzNloXDTI1MDYxODE5MTYzNlowQTE/MD0GA1UEAxM2TkNV
+LVNUTS1LRVlJRC1GQjE3RDcwRDczNDg3MEU5MTlDNEU4RTYwMzk3NUU2NjRFMEU0
+M0RFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA7opxbz7RjQBihWTQ
+HzLSqIK1MN4LMS+lI5TKEBwjXk+QieqL4uRwZ6b9XOKlVPCK22HskseCu+f3v5ZA
+M1fb4jnzotbblUh+XmVDXojpJKG1Tp+elqpxat3wgNBFo9eBkWGLiiFt3ZC8T0d8
+vxYBOHH8hgvIScTBbqdG3Q9vSCKVTMQMC14CBdVqQ17r2FuOvphHrNBkfGvE9TI8
+RehdFTqPyzN1GSI69ed9CqMO1mOfpHvq1mkJei9CVnOOBobwCgyViT2P/odzdZ0b
+E+Mr7k+s3yteqGb2snUQt/SzCDnoWvFet6OAtjXfT8/jNEbdUaRfMv+wh9+hVa07
+ceQZ3HrIwpBSsj3G7UZqnOja4LulgCnJvDCjWwlVoQzapEq8oSwp8XJt20bI3WHk
+fL0+V48iCCISwZluvy8lODTjmtbneqK81oHCdVLw6OjofRK7jTJyVp+DuIW20o7K
+G8qf84cqDdcOJE7HFm2RmCNi/umVHhm4ULYYhhJD/hkYW5eWLWuTEAiFwIf8HA3H
+UnXL2SxP3p8YZOdno7hs3t696M2QH6Bl6qu77zHPgGNFfzr6nNihcxCtQVBihRsf
+5aAF2Q9t+g1ff7gDH0cZjwZl6KEzVcOjCLmvUI5sihEjOzWjLCDeBbGFWDKoMkQO
+kES8jPc31wkL8F0d3Bm4Qi6wcAMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGxjwg9jW16Bo6HD
+mqaOZqiHlwQiMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEASDN4MQXOSZ3fdwjIRYLE/KsMjB9TqnpeIpeUCKTFTvUH
+nH/q9BH5XYtqOMX4Xhb/N6qwYONpDK8N5UG7YkKaqIEZ18Snzeo/2RnK4sdp0Dt7
+W8YFw8wNPMjUEwp8vXgelnbJGNPnQ7vsL6S86xIEpPyza/tBdrGR2lkLBUOUPHTc
+kZwUGZa35fTNNYBFLMSEtfh3NpHyQl6u8yJf/oywhumI7r9VKgzLoQY1z9j4szzp
+VZDe7e8Aen26A17pA4NYTzPfsm2vPDyYdlp5/Hz1CJ7onxn3W9hAJawxes1URR1i
+mQXW9bOc8+CmsxO6eJL8T/TNWbomTu6xDUOx3eXDHIktFANPqe3i8iJny1Fanp4r
+3KMlB8Wr74W2t7bMJo9vhx7egMgeIHL6oE+hhCqQGNecLR1DqRVrosouTA0cp3jL
+PectRA1LqadffETGS7KWIhAj4YvtEhon0VkxeFYRCh9eOU2Tl8Qw+2BT4DGnLGpy
+2WXOBkpzwPFzq2iACbaaBAwOtEGScuThVjwlWscrwhwwaV2lbYoveWWQEZVt8SsR
+nyyKc17CtO2y4QTjH9tZEAJmNkQzZnn5qi96PGC0FVVAA01V58occrfWvejUGyyI
+bD6MqH7G+aFepvjtWHarYaAJK2RLVhr5TunM0h9Z3C64sfWY0atNu4dIUNjLwaQ=
+-----END CERTIFICATE-----
+
+
+NCU STM KeyId 0056A610D53D1B3B6DBD14094B2DCE7E1F756ED0
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAADNF32F2v5IcTQAAAAAAMzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NTE1M1oXDTI5MTIxOTE4NTE1M1owQTE/MD0GA1UEAxM2TkNV
+LVNUTS1LZXlJZC0wMDU2QTYxMEQ1M0QxQjNCNkRCRDE0MDk0QjJEQ0U3RTFGNzU2
+RUQwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7RpZ6ZyvUKlAjkV3
+Uf9ORAhpETHsQ23YpaOwLUf2SMNMPjRKj+10RHZj1u7pAB5RdzFbfVtPHYlAoE+7
+DIgAawbhO/XRsiwPsljAev5tzLN9jxmxeE2Y3bdyhlK0fuKwHIl0tH2i6Rsmawgd
+/CsvHz+ErJr4fLitWsfGpmJ6ZXsU6UDI6bmNVp3+DukWpGwRoQrJ2yh9dkbzmmku
+oZOThLM5zm3aWLBJqNus+QUqvj/8Xm2C0uzwicRJFA4N52Vn9A6r/9o0yGnuMWhk
+LbhWRSckzTw0ATtnY/5ajPwxojcAHEASRxuJnPrvHqbmxSqpYV/ZBEjV6iJS52RN
+IBhHuwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUBjM1HEcTnbFGaxkIk2nvX8xShIIwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAAgS3q
+v+kvDHe86uLuD+mN5SKv1C6rbvAp39C8pylhd4FXqxofYhq7OXGslk8Z3abLFvQk
+nr/4kLh/6/snfoqZzghYX2Zye3diJYXI1EWgIdlHkSYUBaA7PpbAhXsGMLfvP52f
+DNxLzFMdCqyiei5UFpPdommnwOuD6A6M0DJuY+kPu2W6AzMW5t6vZejorUf5TZne
+KDoMyOtV5qow9vitd+GvopDlav7S74NyuvoGL5fWMN1Uq+CooJ2if9T/z7ALvzPx
++3CeZwFtUzaXrW10mTf7HKIlyR2duyTaGshZ18PIz+urq+xJwwDu0WX5VPsSCebc
+CHeKXJhcLPu64Ql+QwJTepDaFPSUbaypGyxrgLx2tFM93znotK0HXdDsyhZEr9I7
+/TWVcdwP7khbNolV6nzmStXVlcXhJQ8F1KZXF8uH/eaDGwPsgREnUcig+xY5GJz/
+Msz301pMZKkgRWDoSeg52Su5s8C3kh4PpX9CDI9l30A4zN9SH1Xbusrpg1rzsl0V
+zTxAGQ/b0R4WKeHjrBq36/r+ww+LRK30KiZnswLeaEc0BzS49epbyocPrQPDtKHr
+tPPE6wEW9aewKJ7/TJc+AnWzApUSrujLfrsTBcR6C6QzBmius5IzXQG3HSWQHkOW
+YPCjccjW/UThYHdRc157bNab3dZiWUjMRN+V/g==
+-----END CERTIFICATE-----
+
+
+NCU STM KeyId 571f806b47cce79bfa35947ced88b8d1005ae09e
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAADbqd8i4juySEgAAAAAANjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NTIxMVoXDTI5MTIxOTE4NTIxMVowQTE/MD0GA1UEAxM2TkNV
+LVNUTS1LZXlJZC01NzFmODA2YjQ3Y2NlNzliZmEzNTk0N2NlZDg4YjhkMTAwNWFl
+MDllMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtUc9QrIge1pr91RJ
+A3GmVcUTxsmIBLoMtlQqeSkldiAGTQulvxrRBsYW4On1/KvTObryNrpJzIUm9FZS
+EndQNKzpBm+lJ0q0BEWCjtfqFGGDH8E322tTVkoMPHSqng+9isrvFAx3g1brNDWq
+sWgg8M/zTZHNk6D0JOTbniwNhT1VAlaqIzxIRxJOnkZjMND592VcvQlosmFto0Wx
+gontNDp0bhO5kTsf709lV7zgf/F1eNVXH3FcFKROsXSmmkDK58VXz7tQU4S/H/1H
+Vc9pXR/RM9GsYIZJ2KQjTDOLp1ueFMClQvgf0UVJKbGqoAg8HZ3+AavV+Sbg8LhD
+J3iqSwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUL5w0I0frKOTO/4bvyc2FryqO1p8wHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBUd3S8
+EfXvSHSeTsRlO5SJhtTvBHKtgM3soOfgv9JM9QCVv/3+NvWQgFeiKEAtsFXwfy3n
++JCkU72kfgqwUV53AcjygwOVaWt+ttqXvES/V4PFJDCBELj6eGmk3iu1sx+FKjN8
+djO5A2GftVvvQaCMS3DdxwEuCdzJKsFwuT4ugFxQfx8a6OhYLaheJa8fR8hsVBZ9
+CRWfgUEpuJJP51Htrt6TRmGjLqBbs0x6wWG42/RC3xVTMKzarR73xi2aRieXfeqK
+jvVFm6WVYqYoAVPEt7nIzcsoFd4idCBrwS2M+T4A8NF/Fot/QY0u1rPfYXa+CgTi
+YeP1UiRe2DVW1SkpAEcKwfQiVnzaXb1DMbdqQr9Rn66MCgzp6T+wdUu0PztXd4E8
+xb0Q8W5Z8TYhD7EyfEtrPpqyZzkGtT1LK/IAyNxiNFGUY5eEIWdH80BNz7szabwO
+XbMB7yENyJcnce9PLEh2tBYjsjUt2Rk5LBLxAVYAHfhCvCe4guMC0b/ZzyV6LyWq
+ICAZhqSh9FzET00EOtSQnAGAa7Xrdn0xyzHvqGVJyI5wdfhQsyNawD+HeJ0mCW0Q
+cMCiUP5VvxK4TPAOWYweJofxoxgL6XzcIcVrzMDyglcbwDSIBqUBaN7oi3edWUAC
+yQGAFYV9M1edyM/x04qtJjEvqCsBvgRCVQf2Ig==
+-----END CERTIFICATE-----
+
+
+NCU STM KeyId F3C91574A6E773FF13BF0C6BAD7A7B65CF1C7820
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAADmLLDdqvg+eXwAAAAAAOTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NTIyOFoXDTI5MTIxOTE4NTIyOFowQTE/MD0GA1UEAxM2TkNV
+LVNUTS1LZXlJZC1GM0M5MTU3NEE2RTc3M0ZGMTNCRjBDNkJBRDdBN0I2NUNGMUM3
+ODIwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwkxNXtvoXKacz4CY
+UqQWmjjaZtDjSUERttzjh8tn0j+t7W2KCYnBM8I/pli8bq5/7rDa2HcamsQxzbKC
+liGSID4XqKPxAhe9hGRLReu3QrZndnjeGuu/Uxq3qhbI7lX9YoRbdU0fqm+Gb6cH
+HzmKJosjjmncDShb/pwD1MFPK/oURA4oxq6aGGIPDOsnnU9kxU4p7PIWBiiuweCK
++lKZee6NuVDRVprMcrPMEhQ+UpkovELVKEWssM5Fvt+JM/Fdg7VKAGrkQO54sndC
+AM0qrqrfQF4Dy1N97OUvUWZ/pELT92XraUGiiAqXrBXko0uukJFbZrAIPlw3zhJN
+SQizNwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUCgjUHgw46Ud2QCBf9XwoWaGT++IwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBPX1/f
+58J9RfGM9NFajbH+emsfB2WnhTypibUdFNCdonVqC7PnbOl8sayFc9sVvMk2ikj/
+LEgbpLH9RPRu0FDqb5ltlKzqefEW3bzHPot3BW703+ntrLvgyGFU7Tpy0nfoLqXy
+YdmKEZvtYM0aF1EIRGdblTkexzidH1rV3kk0fvS5KrGrCDrtRWa+ydyx5p/gXp9v
++S6Q7s5SGpLvly7PREksFe+R8sN63abgn2xRMqLi7o8CJ5BaHgJcQGf0xjePdKzJ
+4sbL/z5irUQPNPvsDk+A37MR6/evKsICsOuwi3MVb1NDtLyC/zTJkv4o1tmAeUZI
+4RjB3FXfLAIKXGQXqMhsPtjtTxiGaR/mi8J02I11e6MOdLXqlUIVggh9o+cfUvd1
+LVWULKGLElkVL7VeSRAZEg3f2Sua/oQh+p01Au7RxrN8u8dxLoQiux9sA0HiPRQO
+R1YFRj0Z6SZJjj2g5LWjNz5FUAgZl8vu7WS4FPrKMVOqO9LbuANdjwYCAleIaewD
+H0pFc7t0hJ66y5BBakcmUKucRTO5yjeYWxUzdCVhqrofHZscgmlr/1az/7aSDpyK
+w9/PnEtUSgCEq3I4Z8hKgYPxZIvkPUejzrUYgo6albkkp0tB8vIhLrmuk7ThL9wm
+j24s6T4rKagFATcnRfIKmMbKroxaTo/GdMPDLw==
+-----END CERTIFICATE-----
+
+
+NCU WEC NameId 19BCC8BF66E8EB3575C1E83ADB8D4E1612B56B0F
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAFStmYspu5DnXwAAAAAAVDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTEyN1oXDTMwMDIxODIxMTEyN1owQjFAMD4GA1UEAxM3TkNV
+LVdFQy1OYW1lSWQtMTlCQ0M4QkY2NkU4RUIzNTc1QzFFODNBREI4RDRFMTYxMkI1
+NkIwRjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALz8iOFxFOzvJZy9
+Zh4J+YTvYswQJQPq1jLjq88rFomujZRi++ZboCi/hHmjyJLra5FwPhVleHOzoAGz
+E9Kll92bNn8j2EJqEVcQL/G+56ZagO5Pm6o1sllGZElmi0rofLZHFl2PflxFM3dq
+OSGpxOv7Qj8HLaoujpDcgWZ4NozrxtzvRhgym1qg8iPVbgMa5FNXWDYLjqdQi4eA
+50+BHndm7/yRxi+ImTh8hgcJpAQTSz8o2fIrZgx0py2FopqKuXqUGme/mMowltWj
+PT2NTfZdkMjZtFoZM8A/Tq+IOntf+nJPCKgcZtSSw6stOqDqCU23B/wfQhgju7rx
+w0IoGj0CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFHsT8EXEc3v88ZYpcZjAjTPk5j0qMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAYh5C
+WCRrCmy7J1xLAqcBkPKJb9EfxypjOCkWagObZ+zTshitGEfDc8iVPkDhYypNbuWj
+fldlDM8JLVt7wUf6O9M4IAZpsL6jQmmep02cyEfURH5O/AQpopdWA9az5A0oaY4y
+5UkMCw8oQd3LKznyDxZhFfIKLj6s5/7/koQ1auKQCBhSp+EuR4GKp5d+ut4tsWKE
+Vb5FcJZWud0kmWQXqAJj4pC/ZHnbnrVk1ZRtX4gr9xSbVsv1lYV887hHv6pL2LRH
+me2uR3t7dh/P3hEj5LAfStpiiWCGKC6X/rUlxzvGXXDqq/YoglMLvCLOSEr0g77W
++hzDtW6z9GYR29YV3GHGkQd2OEaAoCMi7OK2OmTky0dQWDZ4zNwXvFMm+7nYTVd6
+ezgpuJzmxq+2JTnKx4xlWXXS6c3gGMzYD5+treTJcS8sET2T+Y3v3WFwjZnSJmcG
+H0W7eMdyA5gSnb0f1WbKw6hecfYMJTBllROWwxSk7P/TxMcrjRiVAOxjtENy/Y7J
+ikDcNddpvS79+8PO6VobSrpHQpwhZfrv4H5601fZNBwYbLDpGnB0DeNweEQZI9dv
+oOEg0Qoo00btDEAYO8lCMdnaizzo2nsTt7TXYvZmzkRLtqbUUjlG8nEMHikLdmix
+o9PVQlHVjmcwtKXJVp82F+BVfJsVoxW6jJoJTUQ=
+-----END CERTIFICATE-----
+
+
+NCU amd keyid 8a0578cf56146fea399af903fb5b0ac36eb2786a
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAtgc6/n27fdGUwAAAAAC2DANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDgyMDE3NTE1OVoXDTI1MDgyMDE3NTE1OVowQTE/MD0GA1UEAxM2TkNV
+LUFNRC1LRVlJRC04QTA1NzhDRjU2MTQ2RkVBMzk5QUY5MDNGQjVCMEFDMzZFQjI3
+ODZBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0C64sknHcTVUL18o
+rfAg9BHKGV2tnv+dS36CR15g6Vz9ih/austomQHvJ0jI9cXGSo7Wgnbc/kheHtb6
+13X+MI4Potf8Du9TIxRM7xNpe9s4QdcYrBxzOgx/GogD6EpyFPwMY+G18l3IsOPC
+bT3BJufvQd+mZc6qlRyjLHKNNBFlev0hex1geieCO6JoiCD7Sn4yJr731py+VR6V
+40OcIqIYNutispwAYUFAb5sOlNjD0rfYGiLSH6d/tzSmox9Lm9YeiSXSyumsPKra
+3VK2YWfZ6dR1AL2/6JUOTyJ9F60EFMKVXlalteZ/OV3dEF+f14oP1qGXYWiGUp4W
+PzgT3fF4YcumLcYXLgA1YEZV/TixJj1PBt360nSDaNGRNgpbhouy9KuBBwSMpgTV
+qtBR8nwovSG9kwqXbrl2M1nNLVK/JgMJoijPxSIPq3AQYqLDZBkoq8anuVxzbvqq
+1G6rEAW/KASL07gPGLWnNgBXTpCTSySdTn/wxTqw2PnrGJE25cg7NnwnHEpQuKop
+DQgJhLucy9IslUG+tKTcrDA2f7llB/ubHDq8R0nTC0CqAKySRMs22A3Q+GP+cbaX
+Y6Iu9PTjx4WbGcFb0aBnUF/7QQyhqen7c548lD2j7FceGPdtIGN7UrDQisMgsrP1
+ekjPqvF9dirctZBQImd0r+qJVekCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFAbUMZJZUUpy4KZ
+ca28JgwoLrNlMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEADz9I6fa+sW+I/fEPG4lNqZvlU7zU+itGdC8KBS1fO2fz
+z2KWTfg2jMbUdsa/0JIaKHyr8EVreAcGL72L6KEGcp0uDrG3Y2w/bPUJ4FWhtB6N
+/O2m62jr4QSx2XdWgDFxPzVhGKRqKzmJOkJBi51ovHfovToxon6sQ6JUfQRKNnuV
+IE9bKbYnn5zooRwu7PfeXwlxN50aKXjz8cbMvPxLQUQCQ4pYsogMoVz5dif8gyPK
+FMJpY6edapJIzz/gfd8oD9zEOYI0M4OcAHjC/QTvWwkLOjIWrW192XtVpbS/V7Bh
+uhYujG/gjGJC7uicf74DJuT2FtDZCDzC7n066erHOuI63o9QcW0xTTQqD4x62R56
+dowlHz6J/AX64wr24U7mt0Tl2EiVH479cwYcHLIsG2k19Q+R9V4HoYnHqS5gnzvp
+DCcdj3jVbC6ke+wYiscXYxYbHiipxHAZtfRfUByl/SnyjmJjKfLNXeMeunzsKhcm
+B7LfXlifx3GeavRcvDf4JVqmJOFwcxIqUsRypZWkmIVDJaV6TChOzcBRLFDuFKwH
+CKSNGXGq2u2PD77yX7xYqjrRDKtRiBTkf3x7pUF5HZLVEpGtBWNWmPUv52sC0xV6
+YKQwFC2hfqOz7rT9Qso0RGTOJBIeaF6TbRm6yrd+J+2k3TAXL1FgoORc7Z241RQ=
+-----END CERTIFICATE-----
+
+
+NCU amd keyid 90e007e175574201a7a8dac93b323114a887e1e8
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAtlVbEUtyFB4jAAAAAAC2TANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDgyMDE3NTIwMFoXDTI1MDgyMDE3NTIwMFowQTE/MD0GA1UEAxM2TkNV
+LUFNRC1LRVlJRC05MEUwMDdFMTc1NTc0MjAxQTdBOERBQzkzQjMyMzExNEE4ODdF
+MUU4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAosGzKCXtIm3DVz4z
+H75N+p7JNoNJEi9hu1/i2VjjJDsMPr+bRXswr1d1aYZja4KaWH+3iq71Fi4uthpi
+Y+nm7PSkcO808heNYgvjOPXX6aeDx6L019SI8VidLKdKXcUGcXI1z90WJbvmvREp
+jdCutj+qLEBzanTujNERiSDvC/74K8IpktCvsOPruATIU2f6+sWAPHeoNZq/Zw/E
+SA39Aw0gv0UFi322DkPAEmFIhyo27rC1PQoLKKrZfQfqFmx486m4EZTsCB3V7GBi
+Alq8DKj2Mtcb6eZC6r0BKbCTxwyAfh8cf88i+labsmlCEjd+XUF5Co1cHcN6c/ZK
+bVt1CY0cGAMeeLNuYbNErcqwQPnlI5SeD0llIyTQEBQP1kzeGP3LSJ8WL2rl0nrL
+uMtGaVC0m+OXX2yqjcD43OaxDpS7Hp39xu66S7zDp68CoXp78t6v5XbP/J/4A3/6
+9AOAEN8RG678c4Cp7xfuMNYiiLmJ6N3CBGKM/ktKltcPzq15DLws2Fbvu8ayMpc/
+9D25Ec/WiBP6HHYuEPfKQqwXhc4waRHi95I+TYuivVruY0UXfmGMYn0csOehAnZ7
+T8iUi1Wd+kGdaW1VzPnf7HIVPWo6CW5G17wzPLqo8rVE88ueqvG+LmB08uzbRcJg
+TwldpwxQYHvOFh9plD3FOIsBBU0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFP/hRQL6KXZ5Swe3
+xaxDNx6ybb3WMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAfMUA3RtJSpk7zynDCZRQCr1g2TvHbX0LN7unQHePPLXu
+g/hGCYiCmLk0QKZtn9Mg2hayqdfCvcN1EIBWCDAV2SXdbwSjZiPHHgrDdP9uNg03
+VFS7na8NHfY74MwZjV7wTQAfncDnT0chtksO6n6+kdGnVPrF4HybMl7PebauehBH
+4ZSWZ8Lg6m0/28fcLIvbF1bafko4i+YqGVBJTQ2coYRmlM0bKhJZiVXoIN2YoYRA
+jeuLc7GZ+u30nfMrqXbL0RjRJpielrZzh/cGOB6X/saHdMbkN1mPaMccBrCowLH8
+fY/5MqNSNXBIxE8uXkrW2x5yo6EeJtEH/tSIMoQLxmZ6BrgKRQK1u5TIrE/XnHyE
+K1+bYRMZTV59TBhj1vWB6oy4Qr1zZTJ7wCpXV2GJbNoAp5UBdcTORPU8v7eydQgi
+TfPhbMQb/nKDQev0Z6Vz2ljJaq1KY4ktVkjQzh2io3Bfo43vHym9F68wOgULO/7K
+0l4Qhsddj3eka04QGVUDF1NVe4DNxOklaAFkI3G4daTwUNcyP3fOGl84U0MBY+vG
+ftnoFV+KPKSgR1pDivw7H6rZPpc7EK6he5Sl4gCjrwuiuOKO6uT+6snc9xMF5/KD
+0Ae5FmHhR2R3JTLsTbLi0VWdh5B7uLOD1BO6jvDZ2u398f/OSgBHlXZ9UaI+QMY=
+-----END CERTIFICATE-----
+
+
+NCU ifx keyid 0d9969519b979d32ee4b803165664e9cc86f9d0d
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAZAiwzO0EGFr1AAAAAABkDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIwNzIxMTcxMloXDTI0MTIwNzIxMTcxMlowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC0wRDk5Njk1MTlCOTc5RDMyRUU0QjgwMzE2NTY2NEU5Q0M4NkY5
+RDBEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAovb318JJMJKAPtnu
+a1P03kXdh5vTiNWMoA79SX63m+mo5MrpJ2xuqcU9MHGp1LiCm0echC8TdqBhxXhF
+YL8+CC58CC5oErjZpOBkgaO1ufjJaWBQnxPAd+8xr6c/vZASITjxJSV7Y1g0gXHZ
+koO2GlSlpEjtNi1YedJcHNLdhpiKaxJzfSFK8W7LHnFsnIqzCyLdx3rdZbTP4bNZ
+2E7qA5snWeQsfSENZi5XTUN+Ep6zCRwY21EpOjhuXIrNW6M+DTSP60iHqDShYxtp
+vVSaC31IrlWACmjSDKPUT7I2yxSAQkI1/9eLUsn9GqkjP2GzJzz8pngEjnNAxyO2
+gclNtK+xS4DrPFtPG47tkSuPdlvxjWskFTiWGDIGi1xxHI/Y+8jy9d364avq6ycq
+yBWS/3D2UW/s4p9bgjLtJMs3flF1KLdo/ahdHrFXAl0P5s3/xxDRI9Iox63aWncJ
+eTXYDEvE5oGRGXcR+C1aWGHHlKT6bCmnaI90jZHXkfcOqOs5k3J+aWHnxzcznzxw
+3eVvvpdkgOv9Rt7j4Kw1MTk7zWQXHHLJL1uxCYqlx/7lIS0uP6mNW5GY1voJXDFS
+c5U3dDyfhJX9FlIMW1HdPwfcEZdsyFN6Jk7bX9yS7WHcXF+OC2RrhpE2q2f+1mKs
+PJifn3XBGvInfA5Tr+VMrM2uuzsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNjs2XGTx9VAnsQ2
+GmJzi5DZVvO+MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAMD9jflNQGzOr7qcR3fo68HafsIzjcemP3yj158lEDVQr
+KgQD2cBNgwi1RhYiEAVKpF6G8omVcsOjt8sf2QpxeS4Ij51yoSCEYRnOA8sjd6Ci
+E10cM9L5qoBcPXlgctOFajoR2KEKE9C+mOjN17OzNjj6XiRP8ptAlX8mX/1TDs6N
+/aqRrze05WdHx0xV1SmQc8vPLwhlyFg1d+PbXkemzkPyIi5oXLIb6rb+0k4Br/s6
+XuUrQvjv1Hq6HBem+yM3SaMToebcGos1zmnDlmgpqZ76iCf734V5DexvudkzrKxK
+qLlIiX0f18LPNdtznEu9UmbNKbYhM9Ae/718+kYvbHfU0wGJ2dqTCF1dhuQ0gnxO
+Y9RKiwGuH3+2Evx6saYVg7HimLCC0rH4jyQJDeoW5ec4ZYi4SnoaM5t7uo/tH3wj
+S1SnzW4S5teM7QVOlzJZNudSEOB1igbapyixBMGR43OBA/J1EoMJwBjDNNQp2Jb4
+/u2nZ6BUmwRJJyo9Wkuvr9OZaxv9OClsVveUZzFhsCqyaGL0MC+yxzthSpG2gs3Y
+GoWNYGKpwTLD3KzIDNFIl9SJn+dPgdfVb21ZL8MAEZO3bevkEc4ZbXrzLvhpAwwh
+/BdXNSSXn2jc7Lyg1MZ4TCZ/1rNQq4D/a34XOXXBKlQbsq+RICEjVlxHMJPSm9k=
+-----END CERTIFICATE-----
+
+
+NCU ifx keyid 18b1af70b93f991972f362556a9a3fbf4bb24e0d
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAaPFuOy2OT7EmgAAAAABozANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIyMDIxNDkyMloXDTI0MTIyMDIxNDkyMlowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC0xOEIxQUY3MEI5M0Y5OTE5NzJGMzYyNTU2QTlBM0ZCRjRCQjI0
+RTBEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq0u4Iuwn+AbQ+55z
+I85V3WMTwBjRmNbq9KiHTxJQZrC/HV7aKKo1qEG1ElhQRMMb45FI+4Xl+Rbu7EWX
+jkW735UbQX9ltO5Zj4m47jNU92zIh6tGVjOXiL1xKlxrjeEa2EpIQUa1ALJIcXmK
+xxJzv9EisRfTauuCR9td5sS40xfzC/supDBv4VtVNLaDlwyG9GOXae9XsSQRQyXx
+XRzt78NIHGdwCB8/0vNewl+xwLW/H4dqOGBIv5pOIqtMUThT+hEffsB94MT/rZkh
+NMmjDRZdj170kYeMppcmqZyYd5z/aEfXy3RxUqfvkVeKmaO62XaSm49lNwnscMtn
+hQJBmr9gnUOvgIppxhOHyQ5teyfl8U1Qmdw+3GRdItsDkovxzTwkPuOVX+/q0mkW
+mNxbUJW4CyaLivaSzL8lw1s/lHaz6TWKKYqYbOF88hKyq0dyQ5IPcZM3Ll4L4Z1a
+hRgkWVblEXC9gwIRgrC1KBjhTS/rfOvnDKLP7XosVC6VCV5CMD8RkrMWR+rqSUNY
++XzZ6voYzebXGrVis/pRBZ2wc14iiGi4lcWFSzYMW37sJYSV3BWFpb93DuJtJOq9
+yTPFG7WIBRsXYaxHBYTSQzzSEprkYXdWYdWWrwx1r2BGwt0NiaV/DatrWVeTrpIN
+b4I9gHHE0rVvqZR4fbU74gtuL+cCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHpbiYVgjZA6Z0DF
+HhXYieUiRTeaMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAcnmn7fc6yfO7tWxEOI/9bsVAACNe9l4BPQX6SCJqsyyW
+i8nNnO6W8VNrQIEYBqM6CAvlE/P9HDUrnspR7s/uPlBK1GnNLMQ4BLcbEVlTHk8p
+29C5u0MsNypoxTH2DuyyM4K/Zqqz9uBfsNkSGEVkQ4LPqtmV5Xkw+a+HrE5E9OmG
+uX8puW+590i1C+3azDAdi0UjBiD6V/ArcLArCU4bix6eQJyJsACeQwN4sa0AiPNR
+sRRSq24A4Ez0kwms/jceAxyrKeb9QU0bYlE2AkNlYv1+NV9+vOtKsj/cyMRmr1od
+CmA0fG9rJRNKHf3pDYOSGeHrmX6ZUGA1tE/TZozlDZFyzt7F1iVqfYVZ26WWf9XR
+fwUlPrxbVhVuGHGumWDJLjS/eFteHLnebtIdQHoyJ1C8kpbFDmWIJK2qllzVkYUK
+DKOmrsTo4j83TMZcT++3jUeZfKUD4gJ0aH3ALkXwmsCJk20eMSKbtkz5Ebg8C7Vl
+tk7Gh5WQggyZstVLOSRcYgWOY2fgTLK1mnQ0M5lVMYWdSLJGmQz5ii0nwCUTUt6Q
+jwfWB+Dn5ev6t3DeuBP/PS8BZFAP7uLYmpwDuIA8iHcuZdbJNTiei09Gx8Yiv9Mi
+GWAG4lH4qbd50ZJ+SIR3mYqBglBMojFrj2MsSvEnhUQ4Uvh915um7HZdnTiRq58=
+-----END CERTIFICATE-----
+
+
+NCU ifx keyid 263b744d85412bae6e13e94a53c235185ba4eeec 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAfbKD6Tu+yy59QAAAAAB9jANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAzN1oXDTI1MDIwNjIxMzAzN1owQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC0yNjNCNzQ0RDg1NDEyQkFFNkUxM0U5NEE1M0MyMzUxODVCQTRF
+RUVDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1U72dto4YWE0nEza
+omkNXUrx8bnmq3CImPpM83U40bGibs3lSsZb4HNv0gzmTECv2ctxQ8d4kvXbvqkr
+VAuoIuYyiurBgoRUvZcza0iATei8Z+7mIVYUtjNAQeulZHXKlB3vPdZqL591oljT
+9CuOPY2rNYarc7U70tUkbUok0ikOSmobJ1X0mFSfl3Fxi3a/dwe2u2DFxMaqrg0f
+JF78n9/aEmljoDCMex60DiaEWMQjAYR1pHdy3ngeHTZDejQUzrM/9iCnJpX1j7Th
+sozW+YBdOU/xcttRWLnUz7rQLO8sGAEJxLbp1Zz8bcVdoCXzwCzZYCSZbwjcxUdz
+tUK4a2Ns1/Q6a7n08SXqq19eZeUBZOx1E3GOXB6/mlw6h6SHjxQ3wRirZvwt46Zj
+vBTa3jNRvC0k7C8V0lv8sxyOqkFQwlM1V5PaCL2OTrhbq5GBxW6pa8x803sgBpj6
+PzRBHXLyGOy1By2I3SNGoOFUOEZ9Ub5H+bUTkqcCwOdIkKUF/VhXvsTkC5ccv96+
+SarhAw/SW9yBUSTo9EXblCuVBf2+P8u9rZReitUwW0Mk+Atll84ME2N03fnXMg1w
+wYz2VF995C/erKYW+vAmi5SDhrRCvgLRYbc2YO+fCjh+6I7Mhdi1DFGdNBFZGRDL
+W6j0OpMXF70Lh+V5ovnmYgPALccCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPpu38S/uRS1CPQ5
+Pa3UjZLbOZCYMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAUa5wgjWZ/+WM0jadLHW5MgpVs46Nbv0dsipR89NMNsxi
+wToO5EcB6OdkWXxo8xRVip6YN7kPtjonryrfRosBL0Bh0p9glZF8+Fm3pEPoAs7A
+OQ7JkPCWq8kZ3Zp3uiCmqpH8cyxY0HU2bA73DwVZ7vbI69/ScU3CK0Hgp++92ZQb
+dZbm1JR/OgOXs7WqLxumTyTSL08/DoofPincB9WuUtanxTL4/Byux0Y5ZATpQh43
+390+CSytLFKeV/MwmoDjGnBFaiOxY2HTp/rIwMpVQRxVvHTIrYTpa+XkbW9CFXXW
+RNWBP5whbmNgf+bsmPxr4uHh/VmtTkeJgW79Zfl/1K2myJkbYoiXbpxbmNAkcBFp
+ZKNidr13ARdBzQ79VgzfqFwXqmJKuAPqs2QgOrKRC9D71s1xlfeSAuFOHzrVxk8q
+9c4LlGR/dpIBxPPzVPJtaFUOrAZoazDX2OhTy2ui6ifQUSiK41K7DhM1yRStxFh8
+UYEyhHeYAruuf0CWlle7jWR4X3Gv5wtWtbR4tjbeuPh6jGqD80gOSpEiAL0wl2um
+0VVOFFgD6oza8T/vQ2p2b7JkQ/izWuJbSUaqxEUw2E8cmu3FN9XdIqT7Ee80VFv0
+cO/ZE6PdJYhnaKDbmcPSz60M/38WKQ/If0o/UDNlSS66wSi4fmnQOYWnGIg2rOs=
+-----END CERTIFICATE-----
+
+
+NCU ifx keyid 29fe69630e853a4cd3575f84392a9bed2d7e8ca2 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAfMxvZgZaII34AAAAAAB8zANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAzNFoXDTI1MDIwNjIxMzAzNFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC0yOUZFNjk2MzBFODUzQTRDRDM1NzVGODQzOTJBOUJFRDJEN0U4
+Q0EyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA15yGmoeTP30fCK4A
+XqCRbt4I/kbpvoowjFEDPiTxuKzG0Ke4hvKxkyDgefGGyeW2B/cmCMBvzjz1bfdo
+IBdeJH13r93TAkMK8IVaA9NM6sLHNW+2M5ZosGZdSFwjAF9H9NEF6dgZgW4tT38u
+kYcz2RbenzYvSK/EMTDLFJKMsaePcgYiJuQTTKcuL18IneSDZ5dOB8tgenpZrzED
+hpqCXUQBtfpEvorAI2LSJAyLYY7h9zIMbznksI2ZMJwpxMO/XpNKbWerYeXxYrpF
+65qUn+iMdsgKQMsZsng6fv7DrcbxBqv7SOVTIpbr3vq5Iln3npo5sC0axiLJ5Plh
+tN2mbE7Eh6wpsV6emDvnQ2UZwJPisRMY95x8Vn5MkyzckwOM0vKaauP7AzuRT/8W
+Yn8QzZgHyO9uCKrhruQ5QaYEI4d5RQk6KYX386nIo0Jw8C3owUt4dTY/et05j5ZZ
+AD0qHj2GsglbI/uxF33RIQwV2GlI8iI2PLSW2m2lxZK+1s+PzUaTLC7KVuErbYj6
+5p1a11MIYqhyE6mo1IEC2OQWnzMhZqQZEG3Q/pAFB5wGz45jR9OEE5TZC4m8xj7w
+IKDL2rhEvnD/YHGa1YOV/f9wDVI6ksvbMvIHk493DSP3epmcAPlxXIYEb3VaQjkD
+GK2gzitcmZa2AhMu23CFRqLNukkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDfDI1nsX7eKPuAA
+60cK4AQ6MA2bMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAa5GBvM/WLAly0pfDgFyXi/RE5IJvoihtScvxf/kmbJOg
+qdDg0Wz29ZkltVn58vWUO/RLNnXUAn1ToxUaiujMFaLc0z0+5oCLlHgVqI0QMDmU
+w35vMEdB0lszA5KrzBXWNEMnullW0qP6eHQZEiMUBYeuUGbbjtFmCgJ1wLOn8dbF
+W51CoGV2NhGUeOpMIuEKr6Nk+bpQQeK77j4TK2K7NN13SMISi8DpndBL5NA6L6Is
+PXnOus7Eia+96mdv6ZFV/SCL0XvYATMwDyIhQcCZKpyN9tlAU0Lf1rgxdSDjnz/8
+SGNnu6F+PL+UNtIjvMScFvfRUFTm3gGsMBSAKKnPqlDf3MS/DK2J2Wc2YieUfxfv
+PTsi2vrEaA6XY/cub69oc7o5jolK49aTxZL1F8G8SQv08ieWgv97C8gQ+ESCd7FY
+D3PNo/QsnBXH/hJ5aqKJVkOYnebdZPFPI02VYMLVXoTukEIolTOWuXoEwD8VuiKZ
+iLa0ogfAznjDS8QrWFHlNtkJ7UgS3wzSFn89/+rVI0sLdRntQqgH1AMILPq2xZmp
+ESUFmF0TOU8KgVQQdWzJxuh/oJ/Y5TczfVbmoebfUODTxtlDGMqDquWwr64fieK6
+nHMfd77ifuyWIE6hAZSOIEgG8V2P+PN88BeYvFGHNuEQ2gSUdoThxykGC6jUwe4=
+-----END CERTIFICATE-----
+
+
+NCU ifx keyid 2a77a0e342cbc6c72ee3fafc3b0a7bcea7c9ce4e
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAaBzNlNpRzzL6QAAAAABoDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIyMDIxNDkyMFoXDTI0MTIyMDIxNDkyMFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC0yQTc3QTBFMzQyQ0JDNkM3MkVFM0ZBRkMzQjBBN0JDRUE3QzlD
+RTRFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4700ljyZ4aG5T+LX
+38bQkpNzrX3WHcazukuXRsBtwBYEHRb2h0Gk/k2KgS1TYyoOIo2xgoOs+hNYbVzR
+9wCzy4M2eeBbT2eAZi4VBxFZF0JQ5z7KCNp4e6ob1cFccYzWVOWOayMf3nd8BplA
+h4YkqPLPYHF/CK/qYFrklBQW0JY54TxPaqvidWkGJN9YzWB05G9hI96Ygv9EHwq3
+FKd8P46daWQP0gQnIO9P6MtQ0ngxEo7CkXNPlTS4Q0T4zQGUPSNZ2p2B0x+bUH9e
+il+LP1xUeOQMf9FtkzXVG377WV47SsG3JE8H7+yEwgx6i1pwtRq+2pQJOa+Ffx65
+CbqMERNh/9IZbU6/chjNS5OjzbzytddgPCW1oP9VAkQHUfsvL1VA8KkijGk1DUBP
+3Sq42Z1d5VxHyIl9LaUP8XDpnilkBqry2us4h2sWL/EdNP848zrc0cPUVUBpsGkV
+2AvEVFzuH4nmEEUJGES0F+XT1JOf+G1MQbSD9w0lAVmNrdYwYrhCKaO1e3jRoerR
+H8wlr7X0XWlyCVe8Mv1NJCjd6IjXJPwdqlHe5BcmdPA7FLkwKEj87w0LNzaoHrg7
+ZFcpuV8TXfw9lND3c3SZpRH1QwEJQz2JcmZ1bSlfCNpCX9KC8ZzJP+HwA3ovGeiQ
+IjDu+8bPQKj4xZ6PhCsX9UHgAa0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAtZtpddPVeKspOQ
+WvSCE3s10wAJMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAHbwuS4n2JO8a4Pr13Uz0Y9sWIRvb99whcbHJpntMX58A
+T/SGk0mPfiYfLJh1vqCL3X1zhXtzgwYrKzEF6S0m89gWses/BotOWfXOybak0u/E
+OifO0PzlDEIrTPiwGirmIigeSeF+1gZ1Psilom3Ljy7IdHCjya0xOb3I6iwdg2rW
+SIIyxgvs0BXrw0hWJFwevqGYXdbFbwSAytBhgLS6iabAK8tYN0jM0ZwvqkcJOF0z
+O1VJ1nvBrOC0ZoPT5zyWVro+WnCmJIPW9xTj0v4J285yRQgE+jp6S5gEdquTIKpw
+ARuOIxZwQ8sgmLBU8ylHbqNnmmWughqAvrdUxnDemPZaX/YJNIqBislSbXYDXl9C
+yZYqgeF4yc95pvNNWDrawYB5XLCQbtNBm8RBiOcnee55AdVBQCFBMUEWd3rc0sF+
+oJy32W4WFfDWZiql6+gQkPg0v1wEo8n8sFeFMKclydIL1mg5XZ17IxHh7rxX6Qj8
+ZqOrAn0GH9N1+bFn1kRHt7eaFz6T+e+/nv4KPr+5fm+ee84yY0EEJLQCH5Zph7vA
+TrWu6ASN/rlmFfwl+sgvPLMIDAFlhLSd8FkMdBsNq5lE7rh3fKvstbeMeE20eXYq
+KePW+wk/Xkrx74EM9dEzi/3qHmOZt+xHZ7a9ogv22bg/qLfIi46kzhHBEIJ+oUQ=
+-----END CERTIFICATE-----
+
+
+NCU ifx keyid 2f572bbadec4d18e0d91ff4375fb468c61b8c7af
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAaEdKvySpIZKXQAAAAABoTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIyMDIxNDkyMVoXDTI0MTIyMDIxNDkyMVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC0yRjU3MkJCQURFQzREMThFMEQ5MUZGNDM3NUZCNDY4QzYxQjhD
+N0FGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2MXrp/RIDvNFRHri
+3P0+Q0waDra1AI5/QNJet9igeJnSY7Xi+zhCwv+Dg/D+4G6CrGMF2f/wWfUNnUPR
+wlCOoD104sN3UHnwELDnGyL6V7ATVHB9q6MR4+edHp6WRvcN7vxbMw0nMhW+xeMO
+a5YoitA1072FGH+rjeDaq/B08XnHq/rcMVKmElH42SWwriLizpcJjTcHRR5/HDDL
+/IafIRxS4/gn51m2Z/SH3J3kyLAunCGuKTC0zKHskl2RYNxEJrCD5vgcG0p3XEOF
+W5k1zJniXWT2u9QsnC8Q7bTunAkjluR0Wpc2T3NXJ9rJZRZ99TI5sWSmxUwEIk4g
+HqMheSFPMSRdGWp3ysvS4GmSZuykpnkO0hJrO0YXBJ9AZRTZlb1jJ/xk5oC9WtKy
+FANdQDnpGmJMwTzGwNFCi0P2ni9+vCUIq4azLZBBeBLeK4EWevrjvy7bP0/NjNPg
+HXDQOWBZajY0HCTBJATJ3YdTZb5CKrcWkYdknNIchkZcuYqcnyk0OU1b/aBTnaad
+wRMV/GPTPOfzRw09I5fUIRUOu6aFZHnC7owfkPEwTBF/N8qG9LOQkLPLadyCgMMF
+6W89cwxotkTBg7R9I4zQSj1yNFFy3aB36A2/teRpN8nMb0Hcyf8kb0CpedZcubrw
+RTeCebaOvqhhYeqiFv32rtLQAe0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMi0nJtzJ4FXhImu
+3hyqVEwr5GlBMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAIaOnBmK1DYMdj8UQHo67IeFwcnFZ/a73Pk48hgtu8XEO
+FsPrCcegBz53Kutb8wn1MQVed2lIURK6ckcj1zdCQ+3qybM2DaD/avcujfzGw1E1
+F0kFro5eIqMdssW70ZjBsinfBIsCLVMQ21ZzIHtABustbFQnqTo4Gfd/TuvkGQiT
+EBKHOBaJP2ikOK7iQ4HayC89kdN84m8KSNAha+yZj9Mv0YoE7TiCCQh87qvZboX0
+o0E3URnv8iODljZxxm14FScUU9t2XXkhVLg2jBI0sdCUolVTl0t5YOvKv1f52tAB
+5as+2JlOhQJD2avsefX9UkEhr2p/Owejj5i+SU/NYSdmbRlbtCLI1wj8MvOsEO6s
+6US2brXq5L3MqPfW0C45AsQQRkAtt99yhY0m3cm+HBnWb3uvPxPBRJkHPEIKot7A
+GsvNtXEzZIqCyIQ/sZ8fZZoVJE62B+OlADWKVI0VJ4KsInUpgI0vRLBj2l9xTFgP
+RBk0yjWPsisKiAgTfJUEU09LJStEZvgYr2MBHvpdSyR9FNLoDMjy8BpRnn0yvFbQ
+54eJatOC0SxvWcgC4I4SrRof969DU78ZtBsTp0onkh/YMnodzCaEvrD+9WlBK8Ck
+5a0k3GzLySUH2VW8Qmsmnp1eX7JA2TV2PQmj02tG75NyHPmI3vPXV40B19zCMZo=
+-----END CERTIFICATE-----
+
+
+NCU ifx keyid 347c93cabded6168c61fdc8740a7353e46751616
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAaR4vSB+2Rda8gAAAAABpDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIyMDIxNDkyM1oXDTI0MTIyMDIxNDkyM1owQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC0zNDdDOTNDQUJERUQ2MTY4QzYxRkRDODc0MEE3MzUzRTQ2NzUx
+NjE2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA45ULxri2B6MLO+1s
+qJn1WtiOuj1DDkfAjdZGZqhchDzFwG1lgSAEDQFrIMZArrGj2T6MwuqY/nz8cCW0
+nj1Rq1stDTySDFoQx6cU+ViTuQBneb7Cx08jF9Y0emTxYimrbFU6Z+cXEEl1dgQ7
+yB3Fv2RhDZfz0MjBvEc3oT92B1sp6a2+ALM1Qj7BMbglGdAuJK0BTtiE8Navkzzd
+h3o5Wk91mUhTn1SpNHH4QwLk685i0prrN0prSYSYZPQMye9jnyzK6o3ndQWkZm1e
+fRM7YlaVH99QRA9Af8pBZGRJRVzYZPXETk69IEMBAO7/MQFB8lr+nh4ZKkIGwXsu
+NISrtfsN7isKhi7ITHRhnmkvNf/IsYfPDzZ/DKoSzUGZrlLUlsfhw95JFc8Tmo/L
+2hiW+h9mg0jS4N/OFuVWl9uOdoaX5WfJEkSJ4sE0gP2GaORWdoEYqcboQzLJ6yDM
+D2utuMQd32x7zx7JQtPlHnkwu49CAI8v+m/SlINgyJ+adyGRawpHaUFRtpMU27Wn
+0bu9gA1KiHkJ3aLKZj2x33aJzVGRyVaUedRLEp4EGyK3x/uPZPFvNoRtFOmRnRDl
+v49EDnQ0Ra9GJabz2F684pad9+HyItsdqUgpI6Lw5T198YgrnXAdoAZCZqTXUPQP
+u4+OgMh+xbnlHwxUi6PMl5grWKsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOPCezgyV9Y7cig6
+4tct2pmaiH/pMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAMi/gZScbOZMD0FSuHKoEpiEFXbgwatc1b6nchzhrCQcA
+hlQgbrLnG3MI90Fz77RSO5hs2pZF/CSz3BKZYOOu/48cQfH8SwM8pHyvor8mhYlW
+lm8fKjaz+0vNh4H4mmN74LWH+dBXVRSuYlmjBIUomf5ieU1szHr5OHwXE38eCEau
+RTpRchcWjpGKbSakcW0HknYJCIk8jAj8siTpFQP6gTK6JpjhS3Y5KJBvqKnMsPMn
+Y7Sr8tGUcpC/wZYpJEL9HXVJc6oFj0BilJyXOBZ4PFiFNml4sdatnTBL49+WtBfb
+Dm1uR7H67WjqUfSJNwasyataFkdloMWJM6PaWP0gahD+OuRZ8Q66XlBbqJroDwC3
+EUg9WyZpWx4ch8UK2H3ephkf3Cp/SAm3lkNj/H69/xku84zw/3O8WlM/C7KctpMS
+GaNJqb6eMkzydymIJpG1B0ihUt36dWxlYFZxlKAgEvzoG7yf2siWKkwrSd4g0Kyv
+11xTMrNdlO2d3fjzDCsrcs7cbsu1EWfVk5IlVWcwZi9UoXveZ20HbWopspC9x0j6
+6qi/JZMxfvXZT3nzEtdTnkxuKv8hs1/zvsQyrUukwawXN3Hhu+N2wNoeCLIVWd89
+Fppt/54B/TSB1YItSZ73dPUp4kahvjggPr0arQX5bGNr8ytKqXLiqIcg6oSj6Tc=
+-----END CERTIFICATE-----
+
+
+NCU ifx keyid 37ae346baa54c513cff0290bb321a22a34a4a8c4
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAYXSVhiSoZasRwAAAAABhTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MDkyMDIwMDk1OFoXDTI0MDkyMDIwMDk1OFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC0zN0FFMzQ2QkFBNTRDNTEzQ0ZGMDI5MEJCMzIxQTIyQTM0QTRB
+OEM0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp3A2WODP4Lq6L8F3
+N16pT7Q9j/rNW94/hWxXkN5ldxA96DFAneXaBf5RCPdks4fT7danLcO/i7Lc8LXf
+uE/tYZ75Em5YFPrO33tXB8HcRJlmoLOO0NQ4GfAV5HQfrR0EJpdUO/7/ijg0bjpn
+r65OpHXV6op7i/W7kcwg7rRZP2dLV2vFCE/v7lUQ0R1WyRDYy68Rx5spiI5AxqXH
+spZqia2707SiWu3COK2MGEvLowxGqYvyAMzTGyCvbezvWzznkyYpn6+g7wHrRw2J
+fwAbS3JEr0thk2Kc75TLLxqnoXBNw+G5H/TY9zNWqSM7j1IZHefQyDdqrXLUABmE
+HfCqCU3dQ0WWBCVBSSCV4rqASOgH1lVnfnU3UlMRTZ4EUpFjszhygUob1nodR0eJ
+wIJ6ss4DxpngwO2FGuxyvTqEnhIGd41fm4M3YJ9MOquAfHRHmo8SGxbiE85puH2v
+7Nj/dGXEFD5wb2V4pAX7OVBlcGGlnrJBhAzRWBU4rxccKCx+cE6USTD0mD4qMdK9
+RmBvD1b+KjKrCN9Qz95mzrBqk/esg1t7Pw3YUD0fPSVJzkxy88H1yAaOzvmZXEJs
+5wfiVtJZlRQxdalhwP1rk89+NNDy8I1baLtWig3+v1lXvUXxrjql9RB7C9x5R6Nd
+ZbbYXTX9kg/bs6sERPdaa7cUQrcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJzxZiC1DJZ0i1Qw
+/Eow07Ae7fDgMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAnJxKephjyrbKv7WarTXNuV3yK8AOiSg9aIDaS86chJGX
+7D4dQAzdwvVZmVNy9uAwBVRD55RXNGRf9hSqzAMsbuutXQtGjoOBaSh0xWwcDV2X
+b/rF8gj8VBXWEemuGZpr9N1lSVXjM6NRPf6/oyMT1Bhzwk5DvcEJ5kWH2WUpYfrc
+NMLllq707JEX6lWZvkD5nFFPsBPuQ+lfcLafq6U7uA2DWONuk5vqdww8X9fBw2xf
+OgGhqP2IhYxgIxoem9G1SS/IbD7X8qg2k8hUWMxC1sysm5ZyXT/w4x1/CEbgsd8g
+15Z7ISMuMRhsHvvVPnC1sp0mOPBKTT02Pb3Ia9PUEEJUko6Mr1hhJ1FUF2uH8bTg
+d2w2/qeTfYAmCwEgAildVJUoCUtvT2/RetHft8bSJz2ydRiogs5IBqIuMcbQGOlJ
+2aZxl28/2n1n63rrTHrPsSUaexQMXCsRqF+O6qOfxFsE7+IZDK5+6vDwdHq7xi4S
+MM1o/jhe6rvvdg4QfFy+eNDoe1VQSwveXqEWCNXlKUDqkDVOH4DoCcPbRS+hyXda
+WjPCJYBMmd36NXV0GJhatHQ/M+XScSdxGNVPMzcYrVI6lSKwSwrdxdQ4xZJd3faH
+oXi55ml+YCI7uljRz0s1CxATs7fPHCw/P8gSU8dk+Uk4la6G3tQlB66ggT7HhFA=
+-----END CERTIFICATE-----
+
+
+NCU ifx keyid 37ae346baa54c513cff0290bb321a22a34a4a8c4 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAkreM5bPd3V3LgAAAAACSjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkyOFoXDTI1MDMyMTIwMjkyOFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC0zN0FFMzQ2QkFBNTRDNTEzQ0ZGMDI5MEJCMzIxQTIyQTM0QTRB
+OEM0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAslVWYnkGudNtbSKy
+50GB/+5m4ZJKZJltoqGaLFD+FWPMdkqnnbbbkakHmUmOWwAkDyEe+9/dUhaKJAyY
+5B6ku5PKpCXgVZVM3HSU/FIznAhv/O+LxNxWVdASVI+nrs2T5kRZRB7bix12s47T
+mGIGI2KtGywyJzW8wvBgCOWBuASYxmYQwUq+5jHwfAhiTX9xeWMiRcGk+iyDxs2d
+1sLBQExVWBwmUEnQ6GFgijISYFCk2XKvINgu+dFt3QwuWj+nQx9owlrnWW4e7Ajc
+FN3bbpo+gIICatUKKcK/UNT76hgh+nnb3jXVwt6oarX+aTvOwUZLgWeAe/9Rg85j
+PBJoyo3oFuD1KjuaD7gOpfAYsQb0ivnZ02l9xEQPzo2Xhwko0EESsjsFh+FoF+Vb
+hOtTQQMP3tZswxYo2OZQdktVYJ/rqvklDLl7pYlfO8ySEGwEiGrFr82WcXjVpkx8
+ZiB+5iFjJGJwOJtg8Ff9V5/jgaJBmwO53sNW/LB88S4fviRod1SSgh22bOdKgcBR
+KB8rwm1a00F1jGEjYCNZRdv9Se7BhPDNnJaiS0oGFB1M3IPH5S3YHNs5JcxAhyma
+K5ySiDZiw3Sm7O6rmd5G2yg2tZABC6O8fXxm4YtAXYzO8P07rd8rJup8cjt0vuMA
+ng7rerD+v3dQtdGT56KX/fKwsLMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFA2iXy5zU0abaoS7
+8bfMjv6EbLbBMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAZMZIamP6pwJAAb2YRY6FEda0NY1xidKgZoDPb3SuTYOw
+dv8A4O+t7EWop+iRx9KdOcAa5gkVupglbuDhSBZQ1x8hvuWN+4r/gWg77TDtOdh5
+3o09/JxO/2a5xa8z3T/IzpJE/ZKeIKM2EkTvCm075ZX2cy5QCVEpJkWgF4FdozVk
+9+pNDTE4n8Hp5nW3iDBlanYQ7TIfQV5aglJ8HEiDdwafascNZt7GpgAT9ADqQj58
+dXYNp0RAYaRZHIECi2+JpoY5+xg2dyPnciCREK/5Q9TUiW4HDqhiGnJz09+MSHmV
+5+pKfgoRYsqx1zl3CxcGQ7EKzEgKr1L8MxErPN6Pxuozl6XPD2aefUkwUBplHuLZ
+bKy3VZFcktoWa+eu94TqXFqMFpO0WBN4QICEh6KHEQt8intTEPnuAaofW2jv2sue
+ZMKKr8HGC1TGrCGHrKjD0smYNj8zjx/V4Wz+zDeLJNreUHIib+TpSebcHBtBWD92
+YEDbCyd5niTeG+Ssq7bO6XLUSipemB3bI8GWlcNIXMtYE3v3oDwRjzO1ViLdgFTM
+N2cQVt62MgAlCb7kYMQz6RqF1uKm1RTaBs8hFURzgBYZbAvq+Z29sX1D/RxLDGAu
+7RrTQg2/6OU1/mumv9cYQB0wDDshrQ96tbFqPDpPO4z9wMCJvCsS3eZ5auMqkgk=
+-----END CERTIFICATE-----
+
+
+NCU ifx keyid 40b8682b8d18450a2b06849d9b5cd96f4cddf4be 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAfURImtVOAjr7QAAAAAB9TANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAzNloXDTI1MDIwNjIxMzAzNlowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC00MEI4NjgyQjhEMTg0NTBBMkIwNjg0OUQ5QjVDRDk2RjRDRERG
+NEJFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsdhIcdy5JpkYygdh
+C1fzaeq7RnNCrFdCx/za6kDxq9bYZ4+xEIwwPDzuCAGiHUpN5x5ZtFGTT7TyF65b
+QVyBCxrmAp0Qlt9f5LkfjB2kaCtvziMXsxUwQHbhopIVXvmTFlHQrpPGhEaYPHPu
+DWxpMUFtlUD+jQpP15uIxsGGklBMRVmp5D2DTFEtn5Wk7m5+d2WtoSOeGidjnAjR
+UdP/MziYp2rP1q08/TkQCcFFFqy8FonGLKPK1O2FCMwmL+8IBeY+M/QYpF4ku4SA
+ee/b1cGhC3ji3XzamBvhWCBgVXpaln4uyKjlYVVtXV2OiIwS+XFII7weseHmtq4D
+3dqF0b/9yH0m2zuKmLTFHTauHRUap/m3P+RCpP1hW9/58WZjk6B3YlfvWml/mh+O
+4zbNz2DNpgpqEJpT3x4s12W4mZbTrTIVVXwuDUHPVOEuNSSErfhp5ppbRevb+OLQ
+Mr/lSPk2EyrnuyVI7H/uhkZUo9WbAHQA3QJT7BOyX+bVt4Bk5UDo232hXkg7vJEH
+hhegUXmxLiTLcjLCgU79Qfp2MlImQLbrLrLROQwKtVNVaNz0DrYO+VDhARfWcAN9
+cSnpLqS05wqTtL3bwznca7qLb9hSMkY+u3mDC7j/xpaD/dayIpvuKFrUfZbsNxnc
+KKzEi0/Qd6aFrPko2n+9La4CcDUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHTM+OQNreEdZGls
+WQNjBMXls43JMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAKZ3SPY7IuXiP0HVjthngLdS9WSUu1lwOHiqyfbuujQ/U
+nVwnzxb70XKIyum0wlh0hJ0wa51eoWNMKhBlIvrzBcF1BfISWWgmlceTrgfnfVg1
+2XZGGF68j5TYc0PDx8quonhvcPCbxB/peCis0hdHUJ+8TKW9in72aSKAlQnZAtyD
+w9Mu7LnZRr8HYg7KL2FfCg2W56/cOjsI6cylajAxlemV9zYKn8pr90qh3ZiuQKjK
+3VOeNqIbwJ8WltPgtCUcAZfmxRBHttt/O/YN/oYColNpxOOb3mbJJ74V2xkR49FH
+lMUhhI9ljVQ+wzjeEoXCKI6RT1E9c2VOm0IMifPYIDDMo+6bEvyCCgZsr9z4ms6T
+/+UP6pDCCUZZU5jyxH/mJ2h+NClUsO12GtYMZ4P+//5NM0PzryCVESabNSesBDMj
+EPMCYyb8GfxXDcmn1KPLzU6wH5l2PavK11NR41s06nATKFVi1SaF9BXZUeBHNdeb
+EFykOb9MKKbcBn9DtWSc+oCE9MnGKzreZoQFSG/Oa5rskD2nL1YsXu0/7BHlyBqQ
+nKJefzi9E5rnlKTKeN8SYHSHQICUXmYOs3m8O8xngeRaPUfPKgPW3ongTCAFXbPE
+7MVaN/Ttg0gPRRvkJEABQvNVEnjG3wA978yfsqqI+fdspbqFW3F1clqTJ9TvabE=
+-----END CERTIFICATE-----
+
+
+NCU ifx keyid 46f26f96330691e561b72f7a63dce3a0517039fb
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAZILimNEnRi3DQAAAAABkjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIwNzIxMTcxNFoXDTI0MTIwNzIxMTcxNFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC00NkYyNkY5NjMzMDY5MUU1NjFCNzJGN0E2M0RDRTNBMDUxNzAz
+OUZCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAumC5DOsN0yDpnMm+
+kDpwgFbxSVlWe9vtBrRS8oSL5Od9SPrXB1ytARj2rzwU/61QoCemaGN92lGqCmmj
+yrP/mQAFwT4jrRvsA09M3X2ZNn+VzOSEgItp9sC62cNM9Z4m7mnz0VLIftJBDYUe
+FJyuH5yT+ciTxdFwus6/ROUQ0HSB3OlhC7wAGIbXdOHDTXs7q/Jvpt1cSG9i7lgM
+e1BDa+kMmJYtOKYjRrhRIr6YsR+477INPQebHEthcPLqpBP3UdJRxXp+WiUjjO5V
++5gckpXK7dfE7gX3TqZimPqhqHZUEBDby8mtcisoy3m/SIQqh9QYtANeAp97N0iR
+7o4fdavqN2giV7SsIXSJLsZJjpF0w2X7skq5jfVboKsul8Xd2jG4wz4cpWI7GZx6
+uOApDppvB3rY+h+WGRZLIWXu+VLC9zIcoktZTavPhO+YTouMBeMvs909+KyEE/yt
+fqUK5j9YOVunYvq6JvjYbh71jUZxvLCDODhm8ShtLxKNb7oS7lu/1rLIpRJvx3d6
+OLivSnZlgxv0uS/YVxUvxLjC51hn8ERxobicyH48bBMnw+fD3Etx5NqERFmqKhr5
+OY073oczWoUmIO2b/Z61cyYSjw2T2byKSLoYaj1Di4zUfQfsLWtSXr2d4hWb4gSx
+lHRHV5dIqmp3niFpb0h0ZBh/GkcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFL4geF51UemUpXWU
+yCkWtI3d6vDCMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAljO/miWmaM4Qvy/URLWyzH6YMillDfhmjAG/77hFWYgr
+D/dDwdKiWZblv/8g+2cnO/xi5K0d0DaAltfBMs+E7krR43JYxDnWdW8CHQNCr4+q
+pDeB1YuIU3XB4wDhpqUVAMkj7YuhDx+7DaoqIW+25eaaUssmy2OFc9hPyXp3xB88
+3jgYCHRCqmO4P3bBhrVWrTD29oFMw8beVnLCqnJO+qfZXgREdQWzn8+/rylUkte7
+6KeGHV4pSQ0NPMYIj9UeGoRsbaMP6QvIW2UugIL9qbOClmGMjwCkvKViOWzycdXl
+JTCwozYu5nEmVndZjDUtIbsFL6EDO/nbgYtt/am23ysEMOFbqGG0iTZ/I6IsCA3O
+jjypLI7WCZDH6KLSHvTLu4NDoK9WWXzYuM29RITVY2awuZLpbGjFczuov847ZUjk
+EjOR2FVw8fx1CExEht90wO0dipK7OMktfwpcE0SQmKurqeD1SIWcpcAmDflRF+w0
+EVTLEH16hxRVwarklgYxXntbMqpj8yKTj/rE5PK/991lGU71ACn8CQb5bZs0AHNg
+6Kg8N7PvGTX8ae+SsD/XO9ofip/fsdo9+Y4IPu8tB6m8Ayx06BA+/gyM1bAECGGi
+03WPGpRVhbsWRknZf/c0F1Z1k2f3xjSpdXcqbMw1OV0HlO5xo8rF9wtFgPrh5sI=
+-----END CERTIFICATE-----
+
+
+NCU ifx keyid 5c2920742179bc704db1d8c54c34ca94405617ca 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAfEbgc2APojrBwAAAAAB8TANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAzM1oXDTI1MDIwNjIxMzAzM1owQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC01QzI5MjA3NDIxNzlCQzcwNERCMUQ4QzU0QzM0Q0E5NDQwNTYx
+N0NBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5w2QBmImh2cLWHaq
+nehf+IRlE6QdaXTHfuveUiPve3s7qvO8xp1GZVHgXDrHthngTk1NgMZIgANvBUNK
+mx4zKGo0vF8m7o9RpmwcaFTYMtK1qxHTi5BxKY7KqMt61m6KUFJlZo8l9UTzAHoH
+Ijyn556x1pGYAa6SyyaUzVvfL7go21XYsLi3Bkw68IDUba45Cd2fZqC53zd5tPz+
+zSV0+LbpsoPEKuqvSzbiQmGKWaDq074MPxu3c/3sX83/2fxvZyTLCkaDWaXb1Vo2
+T4EabC4u9WBZUCcbLUclw8g4Ka4vFKaDJJRYmidz+Wf//gBraAXSvmhcZ3yUemZZ
+4aO8nuGNow5LCwjhFDLqosuJ504llagrgVBLROsRhuIwNXpwVIzbN4afoayyD1N0
+p7mIK2/p2rK7cH6zZ6JvFrOQ3jTQwGloPCnkPCfmqcfmWpLdOWYjNMku321WfZLY
+S4BCexAVtYb3OMinuHdbqGuVjvmqKxP8pnP9Vc2yz9DpLNXlRzza3wowu3vEYaZY
+iRmhAGVq7Y5Y8WlLHv82Q9+/RNBxwXK8rPdc1vM12xtLLG8uruWOEI5sVHAeNN2T
+3DoG0NjU8xABHWfl9NuIX9GTaRTVdSfyrsUk82vuAg0Ms6UYjhKaoL612e4pU6kl
+oiTu+DEe2a5vrj+cyHTnoZS0L0kCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFF7buRqoYLuSeldZ
+VSNjcbz3G4UuMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAibJ+VgZza7M/EMrP3AdDsaEFIK0pgGobYyUP5jO4C80R
+0o7NMJ5S+Z+S4mePrNzbHWC4zAXrQ4ydwCPyTe2lg3i3yfQDhB6mfuokrsQuzS0B
+as5xVWPDzN2JNB4jJVC+Pt3iE9uKOXdf5snbDxixXeS0qDFZZ8iPs+wjQpJlowBd
+f/1CQZ1qjMCAvSw73YN199UOS4xk/PothLrTLJ0FoNp6TS+Tdun7ujWnuUVjiaqK
+MiyUxY8eyd4eHVwBXzjyOctCZibIOKSARA0bDat6RjTWAcTsAlQ133r+aLlyQvqg
+nJUgY/tZKwAc0Y8a+sEPpEROIVTedE9OG+XmOGn75rve7TUL5FhogcOO3Cgl81k7
+OcPegvYXXG3aHfpLY63ylcOld2eu42jwAEG0V7CJR8h6s7TOjApGkSB532nMH6t6
+bLXB/opXcdBo9RDHUSYyChlfYA6on2G2o75BwAl9HvgsffHw0P7qeOoZ5/ssz2al
+fTnXr2BfEMIXYyCEosEzDvIW8ytz4zKccgjikJzKcagzOrNWBZl9KvHzXSp5oPLH
+WY4WLWGPqWgx4/r6aPBHz9ps2F3x4tJoB9nP/YF8PwedLdvIBITRnat5b6vH6OQ5
+9Rwu6SSwj/fhcKQFwHU7vmHBRsaX7jWtfFAnaDJNA7Mw7OInNcOys7R0n8gbtUc=
+-----END CERTIFICATE-----
+
+
+NCU ifx keyid 5d0815951f5f60638a69e7252f3ec4becd7554b2
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAZF8TrMaFhE1XgAAAAABkTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIwNzIxMTcxM1oXDTI0MTIwNzIxMTcxM1owQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC01RDA4MTU5NTFGNUY2MDYzOEE2OUU3MjUyRjNFQzRCRUNENzU1
+NEIyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAt34Q7TaV+emAL0mc
+z7kFIUKl8bQV1bJ7s/qF3dcdS/ijRrLPEC5i6Ltv0L4LHNDqsH+Ed0GfRx5rWGfZ
+jAnafF7dlQ6yivWVnb7sWcXIIfolBxcWOvt9s036HaJQobMMLExTjjAhEyjkd5xw
+ixZYzpY1QZbkS0QjL1KWQhPjrE7KQg6nvBR/oAbe7vyc/cYl3MicSUg33OGrlK3m
+lyE9yF2YL4b+gtNp3zaz+LFYupLurW7yI1XAsYg+SNJHNDLqETWsbF7sdWJiUyDU
+fxEufScm5qpBixU5GwNRygjrhBu6z2o8gnOQsUfxtBhQLpwI6RGWm0jX7Dlo4Wlb
+X2dHueubGHRgxftTTjnoP5p/3fGsImZLdlfx/u27uC6nx1uGliMuIyvue9flgYuI
+uFsL/tvE0R0kTGB+2ZKDjJ6m2hSm0yvNPq1lskuUrRPFklZxeR9bJNtX3ekZptty
+QudkYvuJoo08EsQRhX5RJ8oYMZ6mQJ7/1HWXNem/+QsYn06tGZE4NJwMtMow+uXD
+zkXkgtpy7PGfB9bQvlBpAx4o5I73JDBpRztuyD8aixsgQzuXmtZ/iPGy6vtkpo1w
+SsrY/fcF+RBE13Uy0Ne9P0CwFe0xc9ii5BfZF2CTDce0Zd+mExzHZ/sBAt4PkDWB
+ulOCqnDGZyMgYFahQBOa5vMDM+ECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPYm8ihg4JMPGxSR
+Joc9YvNERILSMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAnA5D2OEYA6yKi3C4/Wvk3Ea4gwS13HDsRSEML12nRWYk
+Q/IlC6mgCT9lHU2XFQq9IQPimNBXneX09b1xLDo4Pjiuk77Rl82PcC3oO1goucry
+4JBEXx9ZzDOpLE3eph+h0xFLge/91AyAMPEy0nuNON6Vo/PtIwC1QQSfAU7ljXxD
+Kfq3SHi0TID/jZ1wxuC2b2rw4iAxhcTdNIXYMC16PnnZN7FNL7qdUVfZ9ymNrm94
+BxBuWV5/3cRaadhNP9sw2CbJIQVaO7bDPWsfYCCQf4HOH3zIdBNOo/i8VMzExpmE
+v74kKH0b2h1PEYvvxXxZ30/6lZ/StHMRfhJl4ds+TQKuNOpvTbUyd4p+73LWNMcY
+JflJVhCwH0zUVC3T+0VjAjA0qwyLL/qUk874zz2sspwFAYLDJLoj4n/EqhgHa3qZ
+Nm6vQbqXLb1upyGFqwwBtLm0xI4bs7dzfs2FNQvVQbahd4yL0KYOUI/P7oxNULSY
+DhA+7uwko/25dpCTv4IXMr22GrNXEkF0/rAKZHbHq4ku0VKwSO3kTDb80Dyc98mT
+Hz1BDoMUqFjcjaiwC8bCZUEIKYPCzIv0/X7zqBCY6yuKhJm8+/KAPk3+scau8QD6
+N9ke7mHYdC1O9D/Hx/yF55MIczR/Bx20CX35FcL+kMZlU5Opde+TXLDrCpiesZU=
+-----END CERTIFICATE-----
+
+
+NCU ifx keyid 69146ac3cfb3665c7ae78101cca5c14255ca2bc8 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAfi1t0klvplC1QAAAAAB+DANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAzOFoXDTI1MDIwNjIxMzAzOFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC02OTE0NkFDM0NGQjM2NjVDN0FFNzgxMDFDQ0E1QzE0MjU1Q0Ey
+QkM4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAv27xC+OhQesZJXoZ
+rEaf0QZs5sk3Q5v0qMH7tju3qPUJXs3S6VZLrJ/Y9mFp0wPo1k6g1TWSJ5OzNklS
+V9K8QhnJSDQ/XLjsBJ8DWXFQQy1A7xtdo4Wk8iWzybupJ8wTmHmdQ0SQHFeXldsu
+lA3nEMNzVr7nDKwYzio9bcbHpeWyjVXjmb5Va+8Poqqjx+Fw/pT/YEYMASPBWoSe
+45L5tcMbjlX9KelHe0wVXvwzT+miBbX3+9hSLcWC7Vx1nSy2V13th3QAgSIXAMM0
+LnMvr49MzHQ9G9Pmf5t5MZIkVrq67UB5PDladKwSFp67smaNLOFCv35lHrt2w5Aa
+kbsG778AVCgYHXG2vlY8vKOIJh8HeQmmrtxoE/45jeciIF1Tvy2rVxDi+lsRKdv9
+quY82B3wFPeF2a7AOSuCzKve1hA6cVst1p06Go5Yehkzgx4HVeYAgh0shY/2D473
+7Gpw0Y0NqLbKEXrGfv8wVfAd7T4A4gqhqmRWLcSPcsWAWbB0aQ7n0plViTrSfs3H
+E5XvZBwtJQqYZWBNndaSolSswxgdcCacEyoI29/1xvUJ+iY86+S7YtA4YghQbWOb
+aqIzzR2HQMvxod1xckb+qCdVJhEiqP/qaM+Cla2sJiGVeQ8VgyeuUgJQ1fD5K7PA
+ztxf8rkPdCSLccVG5DCghdrY/U8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFD2BBmWuBGNpFiHJ
+/riZ9tr5aGXsMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAIyOZyocD1SLNrTUeRlKU+/gq1TM04ZADeBpyhNSGp88b
+gRMJ6nX7GxVndmx2lrj7c0S7R/pwhzzVQgNvthJ1rwauh3LKVxlVx2L9NrjDWL6a
+wdsCydc5qDgFR5J8OeuQwe/lHYe3xvmUvGLyWvhCywZ1UT3vE5+Ed6wbGBeNlbV2
+YbhhUCRxAD81gJ8ETtXenLzEp2I+4cTsJsnam2LdZTwkGOm/vdAaVA8Jjfa9eGxY
+14/kACBLdAXRIMnP4DCxOG1THfudx9BfnEBIOGSDm87Pjk4UEQoZPMEzgUjIlhwP
+KlrUfsIG7bsjwzdoF2zQ/VPEBot/Xy9VQyAeSYTWnOA77qcAFO+sLWQk2wb3hlGD
+4JnjVeSKJWGcC6e5HqyC5Bb+KXzYEhJTwF1QT10LziLCIVHr/2skEN0CzYGeHDVF
+6oe18mt3heTs6rCIU9BMss2LqigoQIjd9qavUNQKMTZRInNSRxe590DJ64O47Hiq
++nNFoK4mCsCjL7BGvMuIWFsXHAgqzu+q9PeF4cPCqDKwms4BbCW3xWtHM1dzyCQB
+eS0ZTkW9+VhX7jjNvZgMlgKblkVJpJKDTTaB87PlmQvuvyQ7RUfxzK23YYAqI6EI
+UprY0LyNGVgx9ZlBB6qf/I5hJMIbjf+PLWbfTV3ZnAVGvcrNmoDf9HplxgBt7KI=
+-----END CERTIFICATE-----
+
+
+NCU ifx keyid 7cb4b78e688614be4421c5858f15b96d5eab51ee
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAaINbH8COolecwAAAAABojANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIyMDIxNDkyMloXDTI0MTIyMDIxNDkyMlowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC03Q0I0Qjc4RTY4ODYxNEJFNDQyMUM1ODU4RjE1Qjk2RDVFQUI1
+MUVFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAu7h3RX/rsvj9UQbN
+lt3VieMtf6JqZIaObA8ntkGAkBbwgrd9rdJZgcG3uwCm+TKFQ3Sdrroaqo6BN4fJ
+l5Sug2cRISNKiWBoABAfTF8o258/lSyBU5h3jO7/UzrgZFxzExbhhWovLh2PDLXI
+sdeiLBq96TC6gC36GW+vY3bB+F8ZXYskAxhv1VXb093oRnmZYohXLv3sDu1sng4e
+XfW6yJeUz044UIrtBm6la3hih4MWN+hD3jbkoWn9pwqbLRnurM9asI4SJKjWoIjU
+2HEtJEqUhCyewIfZdWBvsJNpMuQk2hRztNk4ffedwXzDF24omZgJguCy8DC41XXW
+YdxKR4VLBnFbJj0vV5kcvnZaaqfol5oNr9fW//4du+hlJXTOnYoT0nuRJoaz21SN
+PWSTdhui5473YLyV4EpGf44JfF8gl/klN0DiMudkyvKKiGhFt6GiRiPBIju4Wu+3
+iA2yMxhbKGhq9owU4f5U45ln68sry9qC1MYBuQmcVdeJB9bLiUBrqaTbQ0ckLqVo
+lSEauf2Zcn3oNs6r4p4CYOlXYXNiIKYhm7Gr/pOVBxMtU+nc2rdmNQNMCVzf8FGl
+D9O0kqBmquy2xv88ubsxiodBwbvepif2TJGHQduFMylh+wcle+uP6H6d5fuK7IiN
+fg7LrNVGuh3DjUh29WuBmws8J/sCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPyws8Ll/6Tjvn/2
+qK477mGY0d1uMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEABezkoiFYkObjLLaKfykjdhgU1HKMgunaxk1GZY64kD96
+uALgMZzydetDSPHhJPCBOjNLkto4FHN9qOQJHLTQ2cGfClmP4vo9mCBJy8gourwz
+P+WgdBuEknYazBVHdS58G1/WsHDolzvryksh13YRnLvafNymGv2Wy0b7PebWYNpl
+uN0QCiNbt1Sgw/I4s8FrVTZ5/Gc/KWmwIaPIrQ5zjFS1qjOKqrzkHsmQZpdmIDA9
+xrTmf158JdiUNTogwv+8xoJeo4JBstKR7ZKG4debMIIirP99SZRGFng7cAAuDJjt
+u7PWNJDh4IUi22SP5CjhvHbOwcBm0uR69eb/hs05H7eEM0dh7lKAGXtRljcvu9+x
+yqA0b0VV/Jk3Kmkpa9/3kZ6U2envPuEBRkVws9wPg1qGzZEq+AMujfhY2lXF9qmI
+Odo22CO0ywMt0d+5yi6sBJazCFOJ6s7cxR9HOjpT4JzPR61/n6930WshZAkDuCNB
+utqPNxqAi9XFSdsezd7BFnN/Br6aj8cTL1PDU7VLmNy5OzY912tdCCgN7Eyyqv1+
+uRlAB5fmO7E5fQlvpTYqRieOCYvpnWEiDsMotINe73VvUGDKM17+qUYgvYkysm2Q
+EIdQRdyPdV8WcOSYeHm9UKHaj4FDHjBCen/Voi9pLH6nvYLmCwnxNSOP6EmMT0Y=
+-----END CERTIFICATE-----
+
+
+NCU ifx keyid 8343bac2129d78299c4b513cc3de61037bfcc955
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAaUp9C8wcOlKngAAAAABpTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIyMDIxNDkyNFoXDTI0MTIyMDIxNDkyNFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC04MzQzQkFDMjEyOUQ3ODI5OUM0QjUxM0NDM0RFNjEwMzdCRkND
+OTU1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsZVe88753AUM4cRf
+KGZs7C6t/vo/AHXJaWDjtTOh9k5PD4B6PywkmlVWfpEsJVZtyeHmD9lMtuiYvn6J
+ATPPXiI1pmD00Sog6idBHyEHX/8gYVtSmxbQA4P2G3i6g6MlDEkMol1e7LwHSqfA
+7z773cYroiw/pzHzgghVNxjR4bW7Y6dUYgUKJv1KTv0Rm2tlI5zULKylDIRvrtQ6
+QZGp5ZhpMMBNFFqObv6NdAmGW8/PWEQl999ZLs8pXJTAlDlB21485mAa3R0hpm3h
+R0UCqVXt2EtTViKYv2ZRTfMWiyP/F0iqk+qLkby87ZqJgVYXLCYAa+vjz8np28Mu
+GxG3iXgSIvSvVE923Ekg0r1MuUWyFURvqeA+KXGNSnupPD+Yq/FxJa/UkIcNEUG1
+HgOtr7ZR6sQjyRpTWCdTR3LEjY84mPKbpGheuvrhg4un+WJOQi31P08J4OK+PaxM
+OB/wKqVE5NK27u45P0XJ/riVAV6bZKITDKj5QlQpwBTIjex0m5vu2JofH7A+zsPY
+roX6jvghA6kGRAz2yYiFX7ehCGPR6AiUn7q00FKNskEf7SSrcXxIdXiCKqVjgE6Y
+WUL2o0vDqGJZGcsFYhOn+gz1vf+8jEDMYPTR9jnQ2ARts10NFCctF/DQiwJPlNHq
+AhspZZbPo+BYUu1965mAlHsQgl0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFF7s6x8dB5PdMiNl
+nixgjsEPD2qeMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEADL+ilY9+8002dJ7cLDYV2yf/Ql/6HXh5/03wNxlusBM0
+56PNImTT57jxYzqU+rVQveijkTGWrr/GGjrcDfVHzx9haZDyoeRRdKDOH5UUOM/6
+9KNBZgeyeUuLNR3Uq6XYWD0NJvaaODuRlmPOQ1akTAZhog7IeUJMw0rZUhZqA3yT
+i4j9XjR6tj2iEbdhbmNXKWtuFkA3XmsiZzKZObSlad5ypapzOJdfv2e+TZObsmY7
+RvzrmBUvU5BP+0DENy2+H7lVxFBwIFLJ+ty0GolBTLwFGg4nfrbeNwxKKTV97/Ux
+Hau53uZcOY3YTY+DbjC8VlQoc8Ob68G03btaErChAggbxML4ZZaIor3PuQIKc1iy
+V6w5zqSE/weSMxzIL9DTJnnOCPZfy3SGmZ+KR3MULcCgXZw/j/2x74jwn3dAHY5b
+uLl47TtkO/EeYtLmF+j3xDBiMitrG/u1iiEKE3oyzc2jNdQ7XC8bInJA2ftpYPcM
+DHE9Pib1CQnB5KJBf4JgxGU37DegCIimh1C9cd4kL3p5kkysxtZk+jL1MxuuOqWm
+Vj3thxRFeXsMjDb3yzoaqDxYuIa2UuT6+ruygf/x2BwUhZr5Ter4LalOdLhaJIaD
+ziGkINcB0ms+vPuWxjANKzgAPCeQ+IWUyPD50UqLgQ7PCqA/Bu5DR20vwdc4Rm8=
+-----END CERTIFICATE-----
+
+
+NCU ifx keyid 9c7df5a91c3d49bbe7378d4aba12ff8e78a2d75c
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAYSnW3VLBWa63gAAAAABhDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MDkyMDIwMDk1N1oXDTI0MDkyMDIwMDk1N1owQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC05QzdERjVBOTFDM0Q0OUJCRTczNzhENEFCQTEyRkY4RTc4QTJE
+NzVDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmdv8mISEof9Ba2IZ
+xycotwOXtORcy6CwID67sNeg1/6NRoFuq1Z7Ti8ciZKvJygGGwTn8wDB/Bsh0i9X
+WtUtH1lZxz/P6/dSoHhYIvM8cEwRPmwSCOxczS111oqDq48QIIXSDB1wbwP2xlI0
+99OMnx5ia05iIA5QT5jV3aBOrNSqW2T5KyVgcs7J/AViJoDfrusg+0/MOEXBpEhw
+Y4NltgvLMYTAUg/jvn1tIzBPOQhygiCiGkH0oQ7QwOsmG4q/+qry+kD0iJ1pCw2s
+ix4xxRdH9APrBGXWSrD6yd3hKo0oOf6zvHUHebrfjxUH+qcEs6rz06iB1/zQk5Nq
+Ut/uInvbiYitlUZ1nuMRmysLMgvNWcyvnzN0/R7iZl+1Q7rf5QzFiTvrZwdkHMtQ
+6Q9V1qrRDk5DutXosgXqUUxWG1f6PaHj+4XRIJRqpdQtAYK6TDNrMNZMMS9Q5sON
++dg+2MRRZt+6W2nVGqJNRoIZiYkA5F2B+zHXQY4DVt5CdBbYXPxIhppRYMoFuWcG
+4Gv1x2uBSDuueW19DJTnx9x+yN673bBUfiKyItWxuMLtClIlCCmCgFDz9kWvfDaZ
+0kdJhYmlt58wnP7oJScdMBIDXJcFyuqqvQX06r0agF/mgUdsb4KlAye07pLxkgVI
+AsR+PrNs1j60giPRJVG4WTICwdkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI1BUp2LiT1AKVLX
+SH8lHfxlYyHqMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAEN6UhqgyUO22Pxg0qN7j0jnwh5zcII/8QwyeSjnRujDk
+8PWyE7k2tq5h2d5aB36HvuYBS4OexWU1PzdKp+Vd3zbNOyazEEmhLqABbP/0lgG5
+An2mp+2DWGZdyFprxLMG8TNIjBeNcZd404m5AaVRc2BhVOaIW2URkuxwy8t/ASuB
+F1BAQ/3VEy161xNfQrcD889Bzh/IDiITeAKDpSiYuDHeaE+smnpf6U/B31FLNiqR
+sq2exD+U79Tq0NVPqi0R4fxbbrRH6vYEQAQHMZypxGvmlCF6N6PczARg5i/+XUjz
+DTvh7CjQfRSZGjf+OZg4oz8uNNzZcb6M+7pYY8QoXS5ngFkeJOb7AKAn6ppzdcx1
+eeKaCswtj1/IYIjjel4EDHD5YqpbOfJmvw/Ywas+CiGp4HitGMW2WKsuGmatLJJM
+TwX2yXDINjvt1525Vsmgwkf7pwA7MiXc01FsbmYD6VemXEkrB4roJm5CWdd0SMoF
+mJ0wfqXhJPB9NIPXx7SCaxJpg4B00s0Ky7nzIj4uMNihIwlH7pqtx/fmdXhVFwRo
+00KhZ8/IuN3vD5+djSRHZFPpIJAM/xIdoa4bMfY5KmzaVaSsENoZOb+haHl3RUvf
+CHSw+nuvQLHCyghsT4ANF4cB3zpN4Siflq3cpkfBx0h1WFPUfQ2zwqqqT6IhuuI=
+-----END CERTIFICATE-----
+
+
+NCU ifx keyid 9c7df5a91c3d49bbe7378d4aba12ff8e78a2d75c 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAklQ+rhJgQedegAAAAACSTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMjkyOFoXDTI1MDMyMTIwMjkyOFowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC05QzdERjVBOTFDM0Q0OUJCRTczNzhENEFCQTEyRkY4RTc4QTJE
+NzVDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuFcxIh5MQGn3YKPc
+KmrPuhfiwp9ZZdlRdxFKvO4nKjluwvod3I67/1XUMMwV3qdYI76WOghlfHc0cnlO
+jDUNzo2UbInQYa+EthS5lS5g2UotMSPHZFhI8LWbaEmJ8WgmAYPAGuE5ikhk9w21
+zDlzbNPTr+8NzpXg3noL8kNJX2aG/oeD5auTDyv8zyJVrQdEmQDN9JtWMRZ48wN5
+450fMzeMXrLcNQjaQ89X+/SOIB1p3sKFisy8LcvvPP3pIGHm3n5nIN4WFpOQEPBB
+DcPzjCihZLruWBraubZZbkCpFn4DbE1733SDOjWYLfZA3z7nO+Y/lfwK5v7oHGds
+47DDaP05ZI8lN3aNx0K37p0PUoYbgz7ocRXG1HlotvzpDPLTA0icmm19QxS4lNPO
+aVC1VlzLqqg/NYF4Xx31wfUUIF3cNtnow6REp7oRyIM7C1BgBjJxYp4FCCcsmwDl
+CxuqiBG8pzCNPbDhrz6H3qEo3QnuNDNl9Vhvp+rku8WSSZVbLZvannvn0BNo5QeP
+JuCLtpVWDprNj2ecPByM2P60iDC9LWrypAlsgQFuLT48MwTSexRjMJ8+5WZmtDDm
+nesb6yVv+36qzy7vTaqFmt/gJUXNmhEj2Ek38MxburRQHwFXuC8zucwn8pt9LSCV
+kCKP8yHQf/HW+eMmVy933s6N+1ECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOUEJAlAz+cSmpmt
+I2hYWxILKaU+MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAWcuLUGXNf/A0+Gus0pkRw3ZYacKO6eQPdDdj0lsYWhKi
+NgLxEsCsDu7KhDYtSjlNPH6kKGv1Fdg0y2ubp9Kd5IKaMmANrf+jk6i2fKoB5Eld
+jXKAUxqJbenprwUDj6NXV5sipQOxfoIFeZqc+kbcb3lKKCpCZHojJIyArodwkICk
+yvLxh6QQ8ZF8LfVP9er0iXUp7KHoPz7t16RyQGpGPxxjKLaD7GeMGvdHlZtmw+I3
+5gnFGH8kULg4YrtXK6FcT29q9dcZnspGqN+qMDa5W3OpIK9UrGEonT1OPDNXMGbS
+s28admAO7azz1atqMQ8ZcQdXmG6YUCBGgBahpk5Mh005aulH5usGziNiwc//Vo/u
+5Tfw+mF8xzrFx54StItHmb7uctHArIo54ByK52hxWGTMMWYWROvvhlSbuzBCQsvL
+tUfV0CLPrvFhSuPTOBIhhlTC8Dk9f/2mlx4rDTOBuTa5cILKZzKw1BhZM5WhVcG+
+k1IQkm+auwYvy2Df+Pq2qB99xBg+OUFlcT1pXxO+i2uiMmP8pasjwI8Qy+Hr6wig
+prceUUtlX5dLDmCrx0wVYufPmJmEx4Stq13NFO3oTzuBaeBrHfFQEaocUibc+s9u
+xnVQDjXLW85Yx/702X0PduY5jDje8dsf/CPNKvKo1DzO/j5VAI6ycseZZHYYwME=
+-----END CERTIFICATE-----
+
+
+NCU ifx keyid a26ceeac95fa33673219d0c2a77637102fb53ff2
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAabSvtnbtqsCOAAAAAABpjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIyMDIxNDkyNVoXDTI0MTIyMDIxNDkyNVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC1BMjZDRUVBQzk1RkEzMzY3MzIxOUQwQzJBNzc2MzcxMDJGQjUz
+RkYyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsxRFoSZDxlWw0LJa
+A5ZMW/0ZqevWiBpWHvHoPGVC+imFKzWR4VBBQYrE++O3ZjVJkS54z0bVHc0JOcdY
+acEj6YYJByJWNiL/xFZQ+a7V+/Q1a7LOFYcCOvzM6rtaPCOFTZOShpztn/j57jI4
+yZ60uGAJiBz7MK+ORWpkq+2yWanQYHVAUqEFyXv1OqW9hZeb/z5gOZ39Om86ai0q
+ahCJKXkmILYnk76i3UFwK49BuJj9rZdA3J+f872DSpS7GxT5MmMv0dczwZjpnIyM
+b0cuns2UPC0fpo8tnJxxAT4P/1A8PQNzBHaQtLDmHAL0bMQmWxaEvgweiNdzxc3Y
+3RC4RryZ/SRJo6A9ibZLWRYcNCQFtutH0TMHQRVsX7/9CH1LnftwICpax0Kot2/l
+f/3SF6BmocBlD24RrSNWZ1MqxMalK/6jRFzagRR88qiU/vhRoBs4cl5vsZADtCEW
+3/g6YAfJ2LSNM9Vr7yiyZkQ1IB4dPOXdIMjTBdv9l+swEjsuFCAMIvXN5QG2uzeu
+ihdk8fl+xzy3mIsP+6w6jfj3l+zOXXftjJU83fjYKrK9LDwilfBh8Vr6WKkzcbCu
+IoH104oFs+tuDqMDCjZre0n71yGMOc1NBjnOc6cMTv94pEHyvMChoKCdY2QrReIw
+wQHYIW02ggFBxeVhRZRoiMqtKKECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGYbJZwej6B6vX2X
+fsm/PyGzuSE/MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAM6tOfJBfi9u04IsQ3QO09DWOR57/BmO7+7koIW0LT7h1
+7sRPGDa/xGXUkeXhEhHo1rP5bbkr5/t1UkitBR6jqISuI57WKSIcuiPOvFtfuh3J
+I2yqa1yTH9jyRuxbxqD64zsAg3WLKkc7PfKrcQRnp8K9Jn0aWFn3CQXs+Um3ewns
+V36PkA7BO2yo/FrMHqb9pmNp8z1BkRk8/4aQl6FPx0OMCtPGBhJY1F60F/a7LkGK
+EL4EEXrozUkpYxO3fVsk7y5AC8aFR4P7v9Gzssld/DWgZq1pLp6kXZmx4V4OqOn3
+I6vlWv8soGoB7xuaH4axaonIcSfBBB8YH6kTi8p8NUFnCuyCHR31rW7JTIoBv1h6
+ldKtb9kg7aecAXnR6C3L5MIeUYTPuJBs+s3rnfWkv0JxtvKP6XCqfh5AovsPwWvl
+oKjrey2Lgcob8du5FjBlaMwMzpCZlUVq+Nqil6EwctJCs9fLPZlEPuN4DZTf6gnm
+/5BYFV3k3LOnS1KbgGUi2YkYdasLhthVw74RuNQlvxWy/wa5NDxbvd413bhlDCH9
+l4SDGLN4RwV+ihWYANPQ3FvAc7YzxTVsQFtU+/WRCUPTHc6HtFNnVGFcXplhIVu8
+y5R3DdkFksBQG/k30qhc7Bc2A1Edp+kLxnLKFXPc3+tBnADL4veGHTU9mb1mkcA=
+-----END CERTIFICATE-----
+
+
+NCU ifx keyid c2ef641c329cb0a9f2eae04bfb10c99b89c34614 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAfm/v4xgdMUBbgAAAAAB+TANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAzOVoXDTI1MDIwNjIxMzAzOVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC1DMkVGNjQxQzMyOUNCMEE5RjJFQUUwNEJGQjEwQzk5Qjg5QzM0
+NjE0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2SiJyoJZOAwuofvb
+XJmsrqht2QBHEVbgm4O26dGnyJ/C1rvsEd2kfc2qFBOwYBD10OU7volt8LpyQW1s
+ElvGwvC+kACn+NBIQKNIMLipWyZZyXFe/EVo5XLvWrZhuJtH1ACgDAkgoZGFrYxL
+4OmeCdEcwMUzYsl5nykzxBZWwrI8TbgG7EbWWdG/MOd42W0psEayxW0vCF7x11CO
+TFXcOjD3n+cviMp/V9VAi6tIHgbBsxcINgqZiksB1h3pFarjJcS+JEePYPZRQkho
++QcC+1R1G9UUs5jUW8tMjAxoH58/DkSg8Bx5ECGIPiWU3GhorlCegqRuhGKicWCb
+yirsJmtFSiiPbxGoz/FRzIQKRcL7WTeZyquLpcKK2e1BqeT96D+SKmnpYwH8XTVL
+0nmJDP6gKlqVn6/Ilzftek9SNsILHA3gt9WZYCvIQqy0gatdEFwSuc519lpB2xMU
+8t/8CMixTvJTkTmSqXb5jY8WlqYP4f0zM+z/CGEdy6KBCBhKIKpOQGDVu1E1n1c8
+tgjZ1sCM3GyKrBSafJjqfvpEyAnE30HJ1CkJDBkEAx83u2YDwHqGRIqBOqJJCkoO
+vnyngg6sS8Q2zXPXvb8fNNlj2iZUkO0nODvt0WZ4hFHSHL1I49Nrq2z+RbyFL1Bk
+A07gr0xUt8JaHCkmV8g51e9BaH8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJayZvkwcTtN+Ut1
+SFaPNMNOpH3IMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAfHvWlRgcM/jvApqUnlBQROjwmj1Ggb5Iwq5JGeeQOSTj
+pkakExWh6OB3JWQGfiNjKoIrNGX78VURYiHBz3j3fofQZdpQlPb1svkeg93+6t8B
+KLRq/GvMufCpypSHA5KrF5M3qvSm+XXXbLWF3cZFtzs3StEYP3RZ/kPRo4dCrAD2
+bdv29aZmcsjVjWmogyO3XIlvKo2vtU7BMsJQ/X2GgMr+dFai9btlIEY38tyaEPOR
+avIAfwPQO+F/oIqMFJ6IzMRxop5zAuPPv3cnl//SfJFnuqLgyuzSTwIQwlG14qSB
+7SfiHA7XqB3y6g98RHgyh99ocKJ+0kt+BuF15YQrqbrzeNXISrA4lFKAzM5SuJXl
+KKktIX7WE72GpmwMgQRpeu3dlTWnTjY64CCw8XgIaMOXgBkYJO2YM2h639Z1A4aq
+n9Y8iKNC6V7PsXDBvk2p9OANcqGf/CwTLDZ+hLcg+HufyYng7e3DCJnE0WQLClcI
+8P6BbkylcVbN/kJbfj2w0H14r4WIlExZAvipFj18YkhsoB+qlUtlHKyh2N8lff26
+Ho62eDbxvsM79LcFBj3kn0A3rxR39Z73F8NO8GSxpXkxkjHqzdPjBGKQysMyAKaM
+UPRZdeWYJtmXgaLRbszWHNFbTqc8AEP2nXKuses5eNi9Z2UmSd8YJSdZESjeajc=
+-----END CERTIFICATE-----
+
+
+NCU ifx keyid ce77153b6e110ca4ae2971a09851ef499326202a
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAac2kP2yiGEFCwAAAAABpzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIyMDIxNDkyNVoXDTI0MTIyMDIxNDkyNVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC1DRTc3MTUzQjZFMTEwQ0E0QUUyOTcxQTA5ODUxRUY0OTkzMjYy
+MDJBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6Lh11ARCKHnKBrlM
+pcVPZmlFUSuR5S3ef+drR17CicsdQPK3+WQCiMKtMI60vW17bWRfl0L8Ut3suxxR
+fmBMNc2YJmCOPAeHuO+3QJmPyWmaJz81JUEI/HsONPVAQPANOo3ex5MuIPmdklFu
+qQ7A8OmxViJC40kh8GgrVq843yQbnEgPa37IUu/6yMhuG3aVLhHAyKuugA9MyhrY
+EPQQ5Mdc+s/F722d9/JcyIYIu8JBo1S7x1C8P//vy71bNiq/KD4/LuWVOA57vqIj
+l44W/tciNUbuZCxIIghX/rYlFUPMJr5HeOPeuLRWfrPZI6nXkniU0PApst5wpXAS
+Jjo/07LIPT2999s7vCQoaut1IJ4Fi66pVkbqbs1s6c9Ocx5g/I7OiZzZWK7ixygp
+CT0MAm0tz3RezUD8EvThTpypfMJ1DlGPNQ4upbI7urjgC6/NmhvZmb0TAsyhvl3H
+KwAEAn6ujFyNgY6mz0CrkiXTf6JTE/tBC/hKUUO+mr57y1il4z5VMhdSj2X/Vmfh
+n40j5jW+3DbaZ+cRD0mdtuq8/WihQDuZoOWnOrvLRvdMlMHZ4blM73qdRn6QvvSi
+hwwrLD6pY9lKDG/mQ0U0O3Gk+FkK2NEBxRyGRUyoL1Tw5nqlxIH2A4AngdrFcG9e
+G9W+FqCTwMUtpZJygjPaRhUgyKMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHd4yC2BwvtWKpTF
+RpUI86Ed1kT4MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAPNA5xCLNB3pJ4b8yY4XwVqL6XVlFbPJDu/1GJF0uQeWn
+6f+dXkiOSuq4g+R0243Ehd2ye31PWYOdgFfAZwiNfzL4ebWrEAZeVWwAPDe6Es80
+SeE7eA8VApF7ZApy0ohetEtPuajajDVgGB8If7HtdEvfiBVETV30QJKsuccdj1h1
+9nWo+OWwOCbWMaDF9U21bwAiv4xAW8scFwkomTQszQq5hMt7je/1jRgG4sGXtSDQ
+ofr35T+vd7IpuQMalD7Vl0juG3uyVvtkcE9azq3s9MnDNx3MmmEXN293Lqt7D74M
+xOMY0wQ344bYdok5OTYU6R1jZwSuo4qqlpRp8AP1TpEGls56vzL4aX0gcglI9f2d
+QwzGea1O95jiINfEMsWFJ7hWLRjDfVJ2w2b9d1bNzr4eYkdq37AEvAa/NW+aCNBS
+33TrgcvrDhrNo9470lQNbJIq3b3aRtN/SgxSJlyrfSI53uBKv9DrBw0H8bqkl3ps
+U7boBdsVa+xQJ+SXPbBJlW36VpBlp55BpwxW8oqQT5s81CarDrOlaNAz7gsosKC1
+/dplsLePh4IEJ1kdoI33Tbj26N7WxNUW/RhofABDEpN4K2vSry2+0n05XC07ceIX
+h2HyodvyuHBxlwx1XtfiTUK8410/cKqPCeT0dicTlQt2OJzpB3RWNIFcgvi+v9U=
+-----END CERTIFICATE-----
+
+
+NCU ifx keyid d8a3f556085a68c8aa5d5fe079bcc6e9c6d37764 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAftrS1/q8wvU8wAAAAAB+zANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzA0MVoXDTI1MDIwNjIxMzA0MVowQTE/MD0GA1UEAxM2TkNV
+LUlGWC1LRVlJRC1EOEEzRjU1NjA4NUE2OEM4QUE1RDVGRTA3OUJDQzZFOUM2RDM3
+NzY0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApavI2Kejp6LIUTdt
+IwNl6ruIi+dRHuzgpixIbhi27R0tbXJzkyK6/TlgOB632qwaAW50jetcxz4JBNRu
+4GDYmZ9JRPoErmDl1DaCDIpk/+pA5LAl2skRGrzitV2HJz+rommVGpMXhP1HXTfN
+wRkL5GaSUJQT8gA9eUC6NIErSRKvK2kWBdnJitP1ip4JTp+QRogtoehq73CoGYtd
+EwppH4+yvimWhe7IkgV0J0P2aOUbe+t8bDFc+8QaeiQUYHp7JsD7tGrusAFJjPWS
+sSMlNAAsnbWrbH9u/5cdiWmSLPEomNwYjhDuuVBeo3ToLSWcQPPkTcZOxuyvHTDa
+AiwD7eWe8qMJNti0PmZ25d0sPUe44KSgEs6xUd3cYPdtl0XgwLft1lSi+nzZFHzA
+q9I/EgQRG2jPWHXNacKnBvbZNQAUzXNLrK/dyTK7Fv0uuBH3NYXYL0E31dkCg9s1
+F2ynbHm/tu+dJkeBr7C/9gdtHzc6bZ7y2K1diceZcnBUYt2LTDN6ZXH8DXaBZOQZ
+kLT3WpUBspp1uRZsmpL5JV2nL7ifWHhisKS92w4fBWXO3UROT52RZN5xMDqLj6t6
+RQ2vDO64cQCslOo3mNNf6Q6SmeZs9RC2/VOjsbHZCxpy1T7M6ZwjN3tLBvqVjZJy
+aQ20M+weyzWyJwoedvZ/BmaY4kECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMBYZyW5Gic4ziZL
+FaTtfS2dwOXJMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAX+Z6vuypja0Uv5BrO1+2Ai2gPCUSyotK/smOiNOCfelq
+fBfxcxl6KnME3V8UQJa6TyHUzHxvJ9Wh/SbwuyQ/CO+8y38vYmPrXtbt+0GpIBlJ
+sk13Bji8/xDRHeW7xFop5t+7b1TwZGf6gOdB2EIhVhuTChNHnFQtvP+m+HhLgbVd
+IPo+KBXpvGBm3LODgaI1h3qMhCldSc9s3OabqD/Rg6GePQrRgE/qf6EGeT3MYpj0
+tfs/kpeTQPOlmislZQsPnB0Ne+OgP4KRd/8GohSUcrod7YOfW3a+crB2zfYlF3aX
+ByQTxyXw3WhbSOVd26XMWarxOimDqgs5DVSU8lHmFbz+zfK6QYziwFCgGnzcmg9n
+DYoXz3/PtcN+k/9Kx1CwceGk/Zv4QJdHBPr21+ty6E7IRBxrGaRc3hKmmqBVGGDZ
+En0en/Ivo1KCnWBrAbpJYtfbRdJcb2yscgCYxelMgHuAZKiXwmr6YZo8ZH3qs/8Y
+AIolKHvKC14d1ZyjC+7v8FxJdfVHBLd52REcdd92LOgIA0uXwlivxFkKUnW/vSZG
+bZrnjwTIcMe685rP+ch5JH9TDP91eC8B36NTSMqIhuYDZk4C2juVAVDf0+yYEugL
+LOWtDF5kFU6wVMpF7GUw+4WC3HJonshjOE1W50fB0T9OJWmeubm1DF50Sl+WMn4=
+-----END CERTIFICATE-----
+
+
+NCU intc keyid 17a00575d05e58e3881210bb98b1045bb4c30639
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAZNS7c281AOuoQAAAAABkzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIwNzIxMTcxNVoXDTI0MTIwNzIxMTcxNVowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtMTdBMDA1NzVEMDVFNThFMzg4MTIxMEJCOThCMTA0NUJCNEMz
+MDYzOTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMEw2Toz5lLSv4eq
+mavnL/KqmAUlUK5HdJD9FzUCZwtPHKHPsRVSoGc92o5xe/t5Em8RSOOPTWKdJYPL
+c9DbTjWELjTGRUsTCVaBuUb/wFcpv50JlfDuLtXrQYVveNEjlBuqUw55kDvRFwKl
+/np6A2aD3//XUTdBfV5T+lQxJV2as7VHF5dAhgXotGwYg8UoWxdJchG5eItkz0Tj
+1PLsoyVIj+FmBXjpr4irYmsLcoO9BvbukuEmhqMDPpk45kqVheg7WtLguqzGlqxI
+4Ga17gD1FxIazO5hfaIovR35Qb7rYSn6T6WWwFCxbfc9xopKmPOOZLKmu9pdFpBW
+U985+YDIyaWASIdSHShLo3JcNti0lj4NX9w65mnb8kxwqK1kBaNw77eOhnEJnxWg
+zLq586xOOCYMgSjwBJFg4aGhL8yS6xagiH9m5SmeFVxXAW3XQFLifpLT8kJkvI2x
+3E1A75hrdUn6u0w8nMr/Yh93tcmh7yXBtP1vqCTFzV0rZtnxkDW0vnII2XlhoJzp
+C3YroLA6VlbPAcOgZSocCST6yrLIegwrr05oTxpmOnaHlKj3b9BvNWGBYV010Ri3
+B8vqvqVbNpbBcwT0IEh6wb/utR3U7/HyjvXfmu6GPmasv5AB/biFQzV+81JET1Bn
+lpL4RUBHDQMRy5VCUgg7FHcDrhW1AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRPjByQb95mjtNq
+9dpfqRMFi2pyEjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAJzM8QmH2HZoWxNLfDx5OS+talvDSVXSSGIiDejLKsT/
+8O2yxtGVMT3ziwYM4uefFRbR1dugxhsOihZa2smNdz3kdguis/fsNd3INvieXmK+
+MTvBZcqYZLgZP5YznB30dLrMVJMTefKjk3TkV8xF2SWZ4TrbF22bSMI/9ECycigP
+16PihUUvgKwJPhjgnZwvAVdAYtp5xtfSIBztKArDIUmtGmNdWrtYXdMhgaVtrEld
+A/cpHcyUg2OQ4wysvukf28DDlxLX3FtH4xIvf9qzx0bWVJidB/bXox6yNF9by9j/
+Kbmpg+kGMPekjsJ22I9cv1YaLR0vbWdpaEYInVW409waUkinIJT0IXvlfecRj4QJ
+ci0wGcnvyJP4toNuWPponWi+bj5TfCN7SVyLGpCVpzKCpHKyB82kYbyT8WspgkU5
+s5R+nLYcxS9TUGi3d1nRsE7Cgvlzo2MqzBOtfscjT4LBc19rCf1VksBsozeKBusg
+0N2HvY137iJCjaZEeOCeJt3iMt7C4Xyr/nxRnPne6DFUTaz34e7O8Ve0MdFMonM3
+WTWdzwMMozcouEOqVBRIwVcUUouMP2e6OBhCUoRtKFr+NRMGsnSrG+4RRdKAKB67
+Ou/vgoEA7yE2na9W+5Ym+VI+ynOHLOE2MCF63kNrKPggxCwdUTIFJYa7kUVrXONp
+-----END CERTIFICATE-----
+
+
+NCU intc keyid 9aaf591ee263caae10f57ba04fa8d1dd6613f9eb
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAsoOaSR/G2xtvQAAAAACyjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUyMjIwMzIxNVoXDTI1MDUyMjIwMzIxNVowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtOUFBRjU5MUVFMjYzQ0FBRTEwRjU3QkEwNEZBOEQxREQ2NjEz
+RjlFQjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAI4PpcXH4osb+/ng
+JCipM2b+Rin5iSYiY4TUPL1gT9s9RxDBw/tMy11ydJUL3Pc5D9XZWm/i3EbmOqiQ
+Pp3Lf4ou0qk2sVAO0ILmIuYeiG2eBorjHKVYBcVObvnGfSwrN50XXnWFDy//H1cI
+dFCrpzlVleHxIlQ+lh/HxYJVccfxblTwDPxfWNqPQEiSILzouh8A8qXSwvsLLymz
+nl7gr8dpICaD5JbY7hO9oZh8QGO6chKvllXHvfSW5Yqb/ykMkTUA6Bdb+HPNcfOT
+CybC4CeUywHjYr41vWXyK6OomXma4dEgvg5Oquu603qXjOp0CuLSBN3bzgbdxZ+O
+waa62/ZfDu6xyQVpxSbsaELh7bIlaWfm8O3kjdSG9MridPRAK/rFSMCvZAeHXgkj
+kcEPCK99kpk8d+T8Sfdij82lqJ1lq/VFlTpuikB8We3x7U7GKdabch5Q0ECBg/+p
+avjnHdZ+R24bZve1dNJUD5OmQAAQPPP01C1zbRUof4jRMhAVPM0QKwiLu0k5s+ld
+WU6EamhmK9+LtRPwLaUpsOlXNNOPRdZZ05mbIoPrW0s72M/ZrhJX12q4BjREe5Zn
+CXKCIWeuKuMd+bol+FwzpgT3zlbwhIcF/iwOC7+7qgy42SzjKWA3+Pp0V+dVUXUP
+5tX2Ue0NsS9merEdodaEKCT7CTffAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTD/9xE6mXyrxpK
+WaRMFDsP/nVeezAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAACGdKjYYsXo5EBYGbcXOELBtRjbHHZkjed0fk/s6+cD
+O7bV+3xMJcgDVIQRV0VwDj9FYZ3ERzpx1KdRzR9VxGpOIOGHxQj41QUL6phZ0gzd
+O5okuoFxH8FhK/DdnB971ccJ5qYtTh3RKr6j/5mwVudlrqsaXr4h1G8Vp/LsBAij
+azVSYDZMWFPWB35VArwaCboYDmH0UTzC7Rn7nZ7pxM4R0yxffovZmdjUt8pn4Hmj
+t5rODtpPcceTjaaVblsdp6TEHPtzyvDJxH4gof6kYCFFCoYoqUAWx9Y34mi/fgwm
+4uO2+ytwegPoWmnxjVItwndeBTYToq3+o24aTNZIXCicksUGt5pnpdYhQC9FYg0p
+RiMU7DRr4ZvM61tjA6/CWtDrIj4q8HBZ1FwRclhevoh6NknJgOC4Mgy4vs+WAnZV
+K/wfNLnn91cxASTSXhmOZWjBQ25e3nmLDKdeNooYolaglza+Cy/QJPHTAAG6PNH1
+efCJRHdqul9H1ZBW+Vek/6ooYRDwcDo2h9hsoLmy4WK/1bvdJ1hzTaTSAIFidL8v
+GqOdEqsWjqu8SeyI3misrTEGDHEm3md6wNRCMNCW3m17bRS4/tkByiSYRA3sRpA1
+Gshdl7WLLQqDgzPWDQRsBmrzhCzvFwb5iIUE30uouLWis/In7GvcImVH/M4jXazH
+-----END CERTIFICATE-----
+
+
+NCU intc keyid b066d9697f5d3a07b425c10f587cceecf16ffe58
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAvFK60eUOU4jJAAAAAAC8TANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDkxMDE5MjAwOFoXDTI2MDkxMDE5MjAwOFowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtQjA2NkQ5Njk3RjVEM0EwN0I0MjVDMTBGNTg3Q0NFRUNGMTZG
+RkU1ODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOknXXdIU1200/zG
+oG5Gbgr3SkhgJ/M5M9Ey9jbJEPIj7JdGBuUoikJzzyujYKghAT4XA3h7UfDHJlG3
+CvnjXyZMJ/aLRRQKGlqFK9w0e2XmgRCbTRBCNm6FierglArPnm2LE3Scs7R0PeCC
+06sm4JLOxZcOJMVGYpzkiaku454H/cgMa99w6l3J73idwtuEZJFQPSYBmfyyZzbP
+5o67DyWIvDv+OhJWICPLOvMu9pUtmhIArKDVf6wzjVCk93mQWwcywJd5B8wrqk9m
+Hzk3em72le35jR5U+a+bhsCsUGUqGOEVw7+aXys+eoXbst5YSY9Q87/bJ/9DurWV
+xmJXF+oT1CtZI/JF0yYAdHs3RVsENaMiUCtTp8eEFOgR6OlRl/9F5lSApJQIAuS/
+ZQyFLn5Z+ZCsMSGof7ctrCMwMm1FQXIJSgfmOM5qtAFPGkly9q7t4R4j59jCNLjy
+fQB7bVoBwFSLxsrrOVv0rKXpvjet1qKQLb9fK4DyAKBk4Ep9Gzt9abbhXwUMJf4j
+lvPDvobctb/0ukPGNoTvf57P9vW5DPvzUVW1+niuDGQHB5L/QZ+6khlqWhYLB0nz
+rJuzjgzr17h+YKmWBAUFgwGj0pXAedkg+VaW12O8i27k5zpBGDwS/rxJ8ltzBeW/
+kM7x11kdDFGqaqPJDS/8AuGYc8ENAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSbjTZVc/S0t+Bn
+Jnb0f7JLPDoNuTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAFF2QkX2g21pBG5G+uJsMJ8gNFw5iGRJO3jjf++Xvme5
+Erb8+/dc4dLiZb6WhssfQSZavnkBans1VY2KimmP833uV+9Pm7yY9G9L+CQcN3yX
+4VZ1woao3YbryAAl8ymEx3YZszcpTqSNy3cGI1t1Me/cLwmqB/R5+Np1FESjrF81
+p770u/+kN7sOygr4d+d9sawNuqSzL9touJsN5WyuTvuCEuAy1s9vPMTXM93Gg0AU
+NF1IdgcCe+dTx7kkSMTmm06A/jIVAl4pJ/CWN/uWYiMBMACDkEhjvBS7gfZRSQMR
+voqeBdPCuMJZKSC+cGFgKjZQTAkC3MsH+zpccNk2xTKgZbXWBx8zdZpYTzFz6SvT
+AXZbUo71n5MJDP08oqnOjCFZbn5rdFFrYFGSpXY2CMuuZswqOEHLPB17cB9FJiXw
+So2px1m0zIagiiN9THG326xzK6R0UOXBMY4sUZaJuO3H6wrQKX0Mq7SCLQFi5uQn
+W2CCkTLyzoZrFtp4ltq2Ux/I+in9MRAj2FZYpaQUkvIMJhxw4J4GuUVMawhtjZAD
+8wbFyCoMA03n+CclmZRsgnRQL7sxm3SkNBvCMHCRTKNsybYvlE3AsdRXiQlx1qwS
+M1RLWyJGAcWALy09/bicAjyV+Efo4GKGXl8Vw5CKz4EsfOZWudqTHDtJ4q9gX7Ay
+-----END CERTIFICATE-----
+
+
+NCU intc keyid e7083f22152a7492ec59b0c4243437648b15dbb7
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAsvOeg5zkrxIlQAAAAACyzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUyMjIwMzIxNloXDTI1MDUyMjIwMzIxNlowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtRTcwODNGMjIxNTJBNzQ5MkVDNTlCMEM0MjQzNDM3NjQ4QjE1
+REJCNzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAM6SNxJZoDYkR0EM
+xp2UjPlFl8+hsUrbdju0va/0kJD2Dev+4VYX/fNqa12fWALwoanBQ0Hly17GOa8P
+RYkHRjI73X66W37B1QvQIEl1OTZnELnjwnZZlRIv8fDi036/p0JbYYQyWjvPWPjR
++T0r90tB1jE+JpqlbGSa7WD27X87nXGn5AmB8211UPNdvOrZiF1NYkPAE04BpFyM
+jWh4Nhr8n+/h/skY455BYq3kO/Oa8Ph7WExZwQHDHAqW9wFCndI+uDiU2lZnIQaB
+Xbd4bV1yXZqibXdAoeSMj1VcEiojexCXFZKQytI3FIMSLOnHsMwIglz4zl2a4lP2
+kOFYlqwVmRJSPbvMGzSplQUdz6EUAQCZPXQTwOp2KiQKXUICBAqAs3D3GR+YBpET
+FftvLrndNHV4fjCkeRqeZVT5Qw680bUddSY7tUfScs6P0l9gwJELvVoneIp+ZWFf
+64S4DiBBFLQLDG6zHqBfq6Mzq3upZry021bx9/c/Zy/5Bg9p8b0L4Lk/SWP32tt6
+1syQx5PZKfFKznJnCfqXCz0NXh66iPWguyqNZg8ZcYztKpivvMbbS9s1SwGFL6yf
+3gfbNJuhInITq9mxmERc+h6GQ6CVPT7D4PSagVV0jPMxaGb+0e5J1tdrJw1qrbCj
+MueMg+8pzf0ff35CUcOpoXs09ErFAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRDxcNTZHs+q20k
+XuqaOxp82KbRHTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAIUvAC//a6hTcoCfCxLkHH/OFrZ8eThK9GNGhudbFSwh
+5wkrCcu8XLQQBN2qwihuqHoWcJ/tCCyAY0Hcir6ASCIXH6zK6QkJoT3EG3csJw5+
+FcU6+QBax1wgfXi0ndhrbhAC15w7bqztZJ3e1bbt0qboRbklEFJRKalEXlntXM4W
+JAH/8WMMUbYLG2hd9hXmnGXHRboAAioQXJzvTcBGcozZpIgrx1VQU2Q4AQbylgON
+z8d/XbX8bYW1tsRh1HdEbI/B9HNnTWDNNANXhwaYZ3VvJG/OSNR5Nh0KQtCkI4Ud
+fNzgCilrQUR1UUXIN5PWz5AI8n9dblTkixZdGaWGthdGqFe2+ooUWChUJY46sDlm
+09d+jABeZveG2z+WDbzof+fzV2ZRJT3Gl9urTqmJIo7GjGxoCuxudkrUinZzsIvl
+rQnFbl7VdNlfLriTePyJ2mb6U8bPiIiu+ekHgoCo8WVKhmxFJLlqKio+fMq5BB8/
++Gnw3qu74ljyIAIctC/SgDX2EO1VMDJ4UmCttLa66cqxTSA+uMCuGtOAenR7UZHV
+PbkWsq+56ZOMU1y4tm62UHfKY9d3yXzNRy0hqkVRNi9/Wm4QfjvmWWPdnMPO9Cm2
+zPP29SE1WpitsRoaf0OYECrQXdMtR3lcJsmOUQIclBf0AAmFcXxyLn5r0LCv8Z5F
+-----END CERTIFICATE-----
+
+
+NCU intc keyid f307ba33347c283a1e0c1508ad02f5c8ca06f45e
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAvOx0ljlALzsbAAAAAAC8zANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDkxMDE5MjAxMFoXDTI2MDkxMDE5MjAxMFowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtRjMwN0JBMzMzNDdDMjgzQTFFMEMxNTA4QUQwMkY1QzhDQTA2
+RjQ1RTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAImZrCMjSIF7+Wid
+qAmzEz8QjXw5k4WbaYY7cM6TDtVbs3Q1r8qStCuvZmkl1XYKP8msMTUNs+tn11DP
+3E7f1sSd3UgOseNN+he74Kq1ZYzBiZ2sXFRHGJzj7UU5/aCXaXqICXZQhU3zY+Ee
+GpcMSyZ2/If+l9I7KdDbTLPb7bTpNE/N2HGl4rsxavV5QETnlxzm0TyVl/UGichG
+/M+0Lsi2uwCyyaCBwriPdMMa4rIv3zM4penjwhhU1b+eWeAMMKBEOW34uQE+kLTg
+UqWUOgOffB5sqy4VsYA1j4BHj+RSf1jKXj/hwo0y916vhzb2+s3Igmk6ayG9aERg
+UcBz81T0okUO//zkdG2WqYXf2iUWhz4CgrW7Flxfq3gVPDPWfNd6B4ejlmJmt2pB
+qAgRFmfbChV+1d7HOigAQFoqD3J7EF/A63aH4JSwax+hloLPtMtSTDd1D3gQNVkx
+jrk7JiQtJQPfmUClPSPeaAYs5sj4kEmD1mRKv4w6t8nCwDH8y3R7MqKSJOHjcrXJ
+EusrYhnQDzig6kMG2l6LMI9EGB0PrPBxbr86Gt0g5jUHt9ksXK3p35aUi1XilJKt
+gY8PHlDFYHUxonmivibFUAyWD0hKxNuReByJrjJePfVbWsuhvyT99eYcoXvxHey1
+HH9Z5JVelOUL/Sbqtu3Ww+Tf03MpAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQz4uvz8pIofked
+hWFlTeTMe2JNpDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAFgAE7lpraSk6EQpQyIE8iHuiBF0fGDGlmf5C2iYx89E
+TypXTqLnxiL9Uwss95Y2NQZk9cV5rR7ixpqkm2YS3OWgmc2IMp/vINzcdU6OxPuc
+vwnaX2d0O+DvdEDGGJtJCthx4yNhbIpJFSyl7WT8oN3LNYfwng0pQJlkg2lR9Umg
+m9g0AC3EFrfpB26/NHF5cZjlB7b+tkJ5Xs9PjxnuKnoNtDKZq8uUWQ6KqxDQfnxv
+pBCyj0k8qYj0UM/MgZkk7k4W/QzXt/gBvunhHhydYnWAJ8+UMXIBE1todjkP+203
+YayWW5h/ksXSAagUdVPxt1iq1XxrzttiN6th/dyl7sH21JIrvxURxgO2iv3OjUeV
+2NzhXAUtRqtBrE3cCIMUeosHJ1T24LGIDkM0C9L2M3flKaiS3eiPizQH9qsmBAYP
+6dyTZ4YAZ3f6cy/cGPPc5zFiYfGxdCN0hY5UbsuyPr1YssHL1/nmHY0K3Eevm7MP
+I50w/uTDIzqhUTwXmN32TiU5G/tRNKDqf9XQ3mZKW+RcmZYEbhE/tarJKJS4zVly
+6vpL8BQ2bQBS7OPUen3LSb11dmoHo/NSF8PYI29VCkiVQhD1U/XpSqF8fkuTDdsg
+rhTevUwX4ucYOGCYwEwwqPmYXxXBzu/gkasIHByScv+vG1xzWKJQor9RzxXjmSLr
+-----END CERTIFICATE-----
+
+
+NCU intc keyid f6dcae3808326f10a46a62d55fe0a9cbe841a3d4
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAvINj/JmFc/ApQAAAAAC8jANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDkxMDE5MjAwOVoXDTI2MDkxMDE5MjAwOVowQjFAMD4GA1UEAxM3TkNV
+LUlOVEMtS0VZSUQtRjZEQ0FFMzgwODMyNkYxMEE0NkE2MkQ1NUZFMEE5Q0JFODQx
+QTNENDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL2TtemylWlcHYg0
+16Z1fI/fIp5zQ1GIE67upKa6p1a5Vl6+XweWBlgnIQ13K2slyHVxhU47Em6uI8cy
+hct7dwgEuQyp8qcp/qPuRjmK0DzZ/0F28JGPff/dZrU9B2A2xCprnsTQnMCboRWk
+PsTleWs0+ro8y/5DKp/Xu8mEXcCqT0r3ymM5vezyP/2aLKnQiD4cU1cPWhBIOgAh
+mQdA/gimaweJ5syfo6hGTPlQ+EPirT3xmCxK//KishCgrLxMHOyrICqSPpDB8Fqe
+uc2mgRbwWVvuqq0IIlglxx5Bv6FzAnNgh54zblT5we0W2KFA2WTFWuTloK7WHgO7
+js+O/ogRbe2/2IdQEIwz4xev4N33Y9Y47CwG0aHbSlytSKDXf+p2cjaWMbQXGSRr
+mm53HlZbrfkh+sJkV5Ge3X9KJ/VXnF8jgJSp3ZOzBEN41nVCMKLYXScdVX82pTsH
+S5fKwJcGx/NlufVg13McnyK3kJTafp5dh8ndaY2JfEdm4Axs3dWjmsiW8Gw7NQrD
+4qKfLeRHjeN3TJKGwAZB6KaB6bY/0I0B6kSIe3gqG3wIE+QwgsCsBFSleAxWw/yX
+6FBDsP2UhJkXYbCtdGpgsCu4mvkN+E6lJZxtmUV7N6f3nO60cxiQCI6tfwAD1MNW
+G1dN3ryv14edKFC+DCMg1ScvbpvdAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTgnJrLrkMlcnhN
+ts65mKBaArawHDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAEYPAXzQZIW5jHsWifuZrNiWYXS+MHqWm6YfTMcpyUE5
+e+yKFPvmG15as+6C4g8u2TcRc+Fizz1+QnqkWQW86iQJj18IgdxfEjojUqBcu95c
+N7rJSK8pnXmR1tTuFkBZA2jJ4KLvcl8gqLu4zOx3hgeiCXE3A64Yzvjm0+hBf+6g
+m/LMaIzzKRxqXLZ/r2peE37IrgfDRCKRy740w/kBQVIauZFwMcyHV02RV82yEdyh
+idOez8XzBxC3A5kmulrIEys1VQi98jnosR0fgXuksRVHg+HclP/9o/NTbbeNzYcJ
+tpndRK9qN0iRazr7rC6/W9B5rFACq8mKI0lRj+/Qs5ThCzA0cH6bqHRGlPemdD/0
+jOlz2X9c7h/qdHmKEyeVpFbmZmcb+nTc7HBuBi4umd/qJie1wgMMPTzVxU+VWs//
+5KPrZQNX/0wUGPOghV/yP9HSFGDFWYqjcd2mRt7704d1PrL0D8w+BjOrKYP/08SO
+fn9Ub0wpIYW4Ox/uKL3zFiTfVYXmZ7l60/iN6dyfDcl8QY6RtVdMX/aAceeeaJfW
+8u5IOyy3wJvO0PAgOMa7ifT5Hgr7ENHJNTdSMh+n7lzAcaPJ1vQ0Q0rXnrFmjpRj
+f+VYrRKfS0d5hulXStqyDHggcbvA0KYDkdkid6W17E/SyBT4rCitptn5PNPH/6A0
+-----END CERTIFICATE-----
+
+
+NCU ntc keyid 1591d4b6eaf98d0104864b6903a48dd0026077d3 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAnsiaANte6FPQAAAAAACezANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAxMFoXDTI1MDMyMTIwMzAxMFowQTE/MD0GA1UEAxM2TkNV
+LU5UQy1LRVlJRC0xNTkxRDRCNkVBRjk4RDAxMDQ4NjRCNjkwM0E0OEREMDAyNjA3
+N0QzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApUfcE1xKR3VvrWXQ
+x0ovHecLlslbtUkvD/a4/pwXTJXO863qAKMeCZOXNv1f88E5l1B2dvxa+XCrVxQi
+FfADhYmswGrQgi/gzTrb/0ook/cAdDn9xP6saezi5yS61eR8xQvH8Qt7xAjx3wv/
+EzosDDpHQQQ32blPFpZQ5kMn2thNouLZR/fCoALwILkQIzxnHKRUMYkIVnbP4mqu
+loHBWZvGmNzf6n2f+1dd7VygPRvpnm+opJlVLC5qep4ejZgxTQX0vNmTo/xiLZJz
+AawO6RSlGtC0pySNGnsGN2Sd0w30w+qPwcCalo78irILUvz7MqZt9clGxkUOo6Cm
+h9tEVGgdgJG0hZNdJ7SeDiD6NvCrMbbfWwJSK4BJoRqkmhxMBXzUWGOVsPuyOfyf
+4ymf/bV5ICdpqT4eewhYnaa914UWi5WJwWEz353QMJ1P0++JEOsJY3v+TfvhiGzb
+u87uuyfL1M4m5r0QhGFscM2+vf5jTo0v9SuWcj2Aq3GOS92A8hRkkbfSoI6jrW4H
+wODrSdHRn3+CfrqSSYucvx50aVeNcA+yAe2k+fhyJLP8mBvJOJ6+zKV/Kas1UyJF
+VHyafMc23bKLWexnQcI3ELpONRVqQhYDeuKmkz/ADeiT49qiPuvIb9POK2uqY+AI
+JR6yaqyjaCW8Fxz6Wt8oQoQR6h0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFJ2xeiSBrD/Jdtm
+1pOdWpBVzRVaMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAV1JF8LS0rPzPFcRMwrmA5kStFmKWzgG6rfH1AaPAOHkN
+tWqGPSfFGET2qQOs2WhPE74gOjmVN6STboaJdO5DqPY5wNwD8IUpnmbkEcqWgNUK
+4w1e9H2ohsEyL0bz3ESvo6O6zOgEphvFiZJaWPWdMB7s5ZgKzgr+FsCYvCFbb/0h
+hx4hpuT2V9/bg30lF8yyJOamwtKC48aGsQrLS03XZKOMUl/Un34GWjAMYIWq7Dzy
+YMczO3RMFr3yQhr3vEc/M1Gok9+CJsByWV3nEF9DkRuMJPbQfLYcccydAMCp7tcA
+sW9yuusy70pMvgeevT8oUBqSDrBL5/TOiC9pah24MUmweO+V5v9+C2zL7MUhqfko
+X83ZPDsR/7KghslZ/nCDNXYlU9KrH2kM49DRI3b8B5q7c2s2GZ5oreyFR08OToPo
+369hIzLGwG+dbd0E4afahQmwn9DXSsEBW8R9cJkPRZ831ocaqinD9i/SnTsnjNYC
+ROMJX7GHkD3KQboLR11MpedKL+WIPk0936NG0YRYOBv7z4QFw2C5qc8qorCPooib
+Hmt+MKdvkrDsw8bWFxQfR0MV/1ZqBj3mGMdul9wJzaWDLgBiFJYrI7HVDoHWGevL
+Pr+MbIGp/8xYm4BtFz68z9MJzuatwZjN9WjSEbeJNLH4629AWAG/s7Q2+dsTLg8=
+-----END CERTIFICATE-----
+
+
+NCU ntc keyid 23f4e22ad3be374a449772954aa283aed752572e
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAXwzOozrTGve0wAAAAABfDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MDgwMjE3NTE1N1oXDTI0MDgwMjE3NTE1N1owQTE/MD0GA1UEAxM2TkNV
+LU5UQy1LRVlJRC0yM0Y0RTIyQUQzQkUzNzRBNDQ5NzcyOTU0QUEyODNBRUQ3NTI1
+NzJFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3ygjddAxaHBE/7iL
+W/cv6mzAEL+9M1w4FP2i3at3W74mJhNRtmrqaMyNtWOCvu2woUVXKwDLT9dC86gR
+GtigHKQLWyrX0+Ci95XDwqPAtwjcN++XwsVIvnGMEPbwAgNWtku/NQrPAr9cjcgB
+TBy9jGMhbTzA7y6SpVTe4DMap/FVco5L5er6AAsNG0jIgUR627YH4IH+T62YgxF3
+UueDjULpJR6QUvZOyJDqZf/jiclnskHkK+Elu/7OfFDRmYTFdahAREapqEDdwAQf
+UXbbMqtx/hSYtRTDUaLY8Qaj4NWHQeRwgZz7idtg0pbFIcM9nmtGbcepePeWUVdV
+osS6pZi/tpwqN/RGfbWhduPiTXaL6ujjABB11eE4m/3UK6sT9Ef3F0v+XPeDFaUo
+wsqBOlqCjmP/7LZaL82GK7Z72U3GyBNDrcHzSyhzdQ8TQ01O4LVbbEoqXAdrlrLl
+KOKen0A3jMTIAbxW9SPSOqtSZ2zkTRYkjMIXQHAfC50u7iJLsUWbjJ0ccrTGrost
+k+U31s/nnUza7l4Wrz52Nwcuq6oCfZT5SHQgbTO/+NFNmWOZB5Zew1JIQa9pIACM
+0OY4lgfKbkwYVBPgWWTI9GxWBDePRrjwelACibI6NI+BLFT58rXH1t/XUCquFFgo
+a83XliAG9xt3KbdPZJNoSLc7m2UCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFB438qbuQ+Ou07m/
+zNY/+bYBdNp1MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEARcIL6Yc+k/ammX6gbDiYCeDagBtcJvIwXLCdb2BrxIQR
+Vpf4M0dOR57lY/iKdsLbF6sCH1jP3IyClCADRvthkksrKHoIFwzNILqNN2RyDnWH
+yxCeFWUq4XuhHFMN/y2LMxA5cvefanjBjaQoofIUwIpnor7FLLu6VG3+zNjy80Nl
+8JwvazZGSfDnTyaUfyB/aIbsjkpXmMAYyQQPOD55fXqACMkXf4v/PrIriKl0s2c6
+EEpRpNmMgeiK7ZWzn/EX1fJpUujk7lN8UsgLTonZ8vEuwtxoXSJHLDlyn++/zOhG
+89/aTz70fV+NnLbOjCHK75cqc5C6rtXxyXdtJFDDsjlu1q0uD2Id6EZisZqP4EgC
+y22lJZioVGaK3+1coXDAyPeYedeWcAoJHnCQ7meyBaJxCYkRJ8XT60X9IVTwxGZp
+0S8XYuqStG4DmfnKcVHmcuATQ5cvek/AEjPrnw0dJy/pFb85DjNVqdHySHSXHDRg
+sEQi84f81xM0/wAQzQuz3mddf5xJLOmidIzkTOSSTsRIu/6Vn4TxA/61P0NzsE4q
+LBWuZR5Gi47cYge9OjsghMSflYUYSIsrXFoOqYUQikqmY96C9tTBr+OFR4Q7dKYD
+Q3FHuUanb7tXSgKLbLcmG7FN6PSTIuZ+zupZpAUSeVH/fOzBb4V6tbINQfFA0UE=
+-----END CERTIFICATE-----
+
+
+NCU ntc keyid 23f4e22ad3be374a449772954aa283aed752572e 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAnnlFJ7wmrw+OAAAAAACeTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAwOFoXDTI1MDMyMTIwMzAwOFowQTE/MD0GA1UEAxM2TkNV
+LU5UQy1LRVlJRC0yM0Y0RTIyQUQzQkUzNzRBNDQ5NzcyOTU0QUEyODNBRUQ3NTI1
+NzJFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAti+/VAervFImvywo
+SynOJmo6CMtxuvG/e2oZzV09+Dut1iBCjcxKIrLVMt6XKFYFMOaIRFo8B9R7Oisz
+FK7h/MXYTpD7vdEqnAg3gq4jnnbKO0LKEakg1AnJomAfBkMwmFxY8fR6rSbIKkPB
+5x10CAAWJk9PT6+wZA3GdmFZ+hkNPgQUeU1MvwmdZ055PVdw3ye1NFADx35iL7GJ
+XAPP3IoQ+7GzWUSZCh6ZMkfYmefVwyYwU03ykxrgxtK8bDz9zd7le1yum03ogLa7
+XNHiCIlAsoGDdOtdSW6BAbnKwlPPmYdLEgRj2PTzN5sYEDrzM59Wadi+UXnj1JWz
+cMvH7olTS/1t8wqeN3wHBO4ilfpwP8yzBBHgVD1YGJ21GCRurE/BK5XDRDUEFKCc
+LxuErDmSblpAc9cx7tG89lA7TMyQwfN+Kvd6LHFB6Y9d7BffDVwBsmyj/TPjoIiM
+bSXlRlidlM4t6X55XDF+2miakv9lTTOz1HMQm0SYuUiuBu0mG+TxmP3WelQs/6+w
+GpsW5Opqf9Co3mCPYXwrA8jLPqL5NvEo3G0XMfb+rAc9vtS0QWs7UAov2pkJqJ6+
+79Xy+pvyP9u8Z0EBGAcJc33l8inY/m21NgdNePlvLrnyguhN2dXBlPTlTBePpH9I
+ToD6o4qq0ctbSURoGw6UqKd9Z/0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCqsCqBO4ozM0gyc
+gv86nEXZ4dOiMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEATWNpL29ZHbief3/J6GPMm/CLivAjkSM7Ntn0moGWIGgi
+wfEbFgAchjMmIUK7zdLplC/yA5bDXtvhCpAhTq7WN1wpg9VY3lOOe5iZG4FkpelZ
+JBQ1ViO28oqZD7Q6TUCrXIyU9XiE8caegckQpzBTjx0YSjdQpclNVbuWMAujq3Bf
+4hPUP7CrSSHr54DTeBrkmihmL5sqhSPoBXj2TxZdCiTxTX/DSTdI4Po5IGveFjJb
+fPXtB56UQhKYoKxhCzTepdvW4TWdcNqDneufzyEvDm9SYbBC7TmS3SD/g1zvOSFW
+kIya/GnZ1gVcIRH4+OGGU8sevpA5lIC+2pngRrVpfhDdo0B1vEOCdxNAWQEiHvy7
+MyOPXbyy+QrzMl3xc22EYhyIvwuqeLHB6miiqQXqPySYK4XjfoV5hAS6kbo73hA7
+B93evq6Q6PgynTFnIHX7VZLofPDGNFntbBrdFqmoIlm+bdU6POEOX7YH7K9Z/Nbn
+lN2U8Yl1VR5JJRs8ZGK3FOKxj+5T5XdNkUR+IeKkKY5Z03rXXjw7V1T4uQrjTDVr
+cpcXtnrsqaPHcDLA3QSKZuuO/DFclm5OtmJik6y7tGz/e0UPeQEUI9bOWBNdJmas
+SZBnuUgNuQ6qSnCENj6OZuw2zmGg+fqbu+hgvH0qRFnpa7Hbhu525fERxcccxco=
+-----END CERTIFICATE-----
+
+
+NCU ntc keyid 882f047b87121cf9885f31160bc7bb5586af471b
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAX1JKv944bzo2gAAAAABfTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MDgwMjE3NTE1OFoXDTI0MDgwMjE3NTE1OFowQTE/MD0GA1UEAxM2TkNV
+LU5UQy1LRVlJRC04ODJGMDQ3Qjg3MTIxQ0Y5ODg1RjMxMTYwQkM3QkI1NTg2QUY0
+NzFCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuM0LK/D3ASVFKq1d
+/UIP4tRX9jYGMiDxwRTTFziig5EQ2yX1/PLjdREawTLRM3PRsvYfSj3X1Q+Mk2N7
+bp7U4S/KQ3SEaCRImnnrgSRoozn1Y2NS5p2cf8W1vWazkJQKiqjURhlsHJ2DNBN7
+MvkNCmlLBmuRknfgCai+Hq0aMWe76TF0ZWPV4mKWSHoFthN+vVbjXIjvCdaI4nxq
+EE5Upif5blyS25L3nI9FmmFlcoScxRW1eWgeEDObB42zi47/SPBKM6V5mMw1gIA8
+EGJpu8G1PC4rUebJIyUotPp3A0yx53cRydHoqeLXebVKQk36o4DNbs4ZAvKdxIVN
+D8WqnOX6tltHOghurwmQRfJOOd6DSWH8RN86CvuInLZMucuoAlxzK7jwYFB7Kt/5
+4bVkUcXAgCHQdFvgPrxBMOlCr5htQ+G9VxUjzLTTCnpMcJmCjrqJmXwdg/8rsJ1n
+wvgtknin+Vavo9S78G4V4NroRj+lsDNKVjpaSsvzbqj3prNDv815DNreiUHz6Bj1
+cKizBEVq7CHobmP7n5LmygbJWmCgrrJklIZqiITemfdF3i+kBaH78x11UNgCDZff
+143RFRCE3LhSDNpH6kWnGovnZA/DpS2ur9uFbF35sgum01sFOydPbbAgV1BtTY/n
+fM6L1wLqJWDVyfcwDlWLCVnb6WUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNrSKW4F8cDdD5o+
+dTc9ZBlypYGqMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAjeo6sZgNku1XfjnrP9Pfy7keC0HmaXneKjw+EFM1n8qe
+i9MF7dBZf5lvXYNRfjWTlE14eMv9O3NRAJ6/rBzV3vvFdQcY8ASp0RetHyr5Ufej
+vvqUQZQMjbsTUmRPAs5XnTBmby9u8cnZizBnn5JdY1Mtb8EFtJrFG7xHA4/wvnT4
+NTzNFRjmUc5tezEDdTnYb0IFtiObu9nts6nbapdJww0dArevrq2RviCQO8zl9oqH
+eDrZ/o1S3UtRdzQNu94FpAD3LhcbihKU3ijCXi0sWBD0uBmtGFAmYrYm6KqpT1QJ
+DZpfSGPhKO2ShXx0/jevLVX8n4p6qvM4yr9EvCqHu6EAXCjOxocv8hioNUre5pcx
+RfZ4mvHRPXw/q1EiVbaomWzyQ7VxX5byjhnVsz56faLj8CMNvWzYFbIM2n34fnLI
+Kb97HM4DMJQ7LTWhX7WTDXUmXCJ0UMdR8W+CDC94CR+/C5i8gMsOQ+FDUeGaVxn3
+q2tCvvGL2iC7QZoI0u0aVSOlDTuvEcGs7geRw18nmsg66zuS2aAl/Hfn6l2n+Qun
+WOnCKZbJ6LINphCUKZMJKpKk2Ih5FQc5Qb5rBmKOCGC2EiVTTedBbVv6v+RLIkDo
+tWeQyMkgJN1vg6epEJ6y8MNQ8qYwfv84DR4UWP2UH6zAWOixAuY3T0QpbGgijaM=
+-----END CERTIFICATE-----
+
+
+NCU ntc keyid 882f047b87121cf9885f31160bc7bb5586af471b 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAnqgoLPKG0oibQAAAAACejANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAwOVoXDTI1MDMyMTIwMzAwOVowQTE/MD0GA1UEAxM2TkNV
+LU5UQy1LRVlJRC04ODJGMDQ3Qjg3MTIxQ0Y5ODg1RjMxMTYwQkM3QkI1NTg2QUY0
+NzFCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2qg4Z/E65efvtiFB
+prnaJUBG6jFow/Q7sCg/d+o0+7jDjL2nPpPnQEBzgjnOjDP4zCDAUiTFj8RIh3Sk
+IimGxwyqGeA1oRyoWcyFZjewwZWCG2+/k8+geAbv+0I4OpqiQZgLGpETNZOu4Ew4
+6oek2KncqNVBcsFDohllev8vCqroOxgr81+Nmh4D/Wr9Mr4nd9f0xQYq5WERbjLy
+YAzlVMKB902Frqp0nk5Q9eR6PUeAIVGRDnYuaaYs/tHTLPlGUZ1lMhZvWZEAGMYZ
+xyjglQonYmc5XqWyXKTsYJMMEJo0Z3AOhxmrUm9Ff/jfa1kPZOeeJbFxT5WD2cEY
+P9LtR8PNIVkMM+5RSTNvYHww8yQ6K4dgeLX3nAURtMchrvDFPHikvPBIYOJXKH15
+wy0mRelNxj3ZqqDi306eQj9vBUYPGHQFRMFynCXJmCCG0lJMlLb17P3BT93yr1cT
+XllXoj0f26KxSBI53CnLgZu7lhgocGPG0MzA+QSYgH/5a2VhiUEo7vEexcUY30s+
+iK0lGVQXONpWPxNiQlhNRYol2Nfj1WMf6r/YLgpMoZiRJVGKfB7eLAoUMrcpPnE5
+pHxAFEHyOUpgucZ86kkivBg2KhVXfpWYJTxYfSRmotTn/s6UrTHytnqAYo9VxG3I
+g05GdBMIwnL3A9P7prWvn8Vc4jcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFK+3+5NPnRNnVK9c
+iGjjWS6Z+uq3MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEALycPGerAVuJ2q584iwZIP/lVi9VFNPKTo8D8nM3C56M+
+BpVcLbEeFEvZ5KDTAMhfA5WwiU1ug87umGFTBqSEEt1+lRldrF/JNihVw59JoF6n
+cVqoXASgHsE0amFnGWskJF8g+CbylpaiVDf5qDkMCVnvip9T4QWjlTeTHro/baFg
+R/fjOr6W9oAlo9yQ6YPyWHe8Y//tMTV+p280qHXVGR/Alj0urR8tiEdQfFRVv3As
+bAIcA1KsjsdKexMYW8Mz6kLUfbw1Xk5yfHCI7u7Y3Ku0znCITelVLihgvil4STmI
+rB8TrWliQ/k2xwwxTKH17JXaHp/OS/TE0Yt4KjUvRN6tkSTVtBAlAFh5xK2kfp35
+zpnslB0NiR1YZ7kcatoTR3ER72tFBthTiAlM4VNx8Z0S11o1MLxn8raJNYwZWKUQ
+TOaarrItImqaebqM2XSfAEf8L7g2MUi/rsuTDGcYbMFbt/K5dUHoRfZXNWC/MOjH
+fEwAcQr7C5L/SUd8gbpanqOgxbiFXcn7ucMHTgIlGxHH1hwXLxfu8cdnsGz8Ngez
+4tEUQQgkXWwzCQPDNihglAxS8buvLR1185wYNKQiHBVXUjc59/EJ8BgaDjww4xZH
+lN9KLLVjomxKecyYt8PrgfGJqBBOxb1kXX2zHS1gTNJATGv9wnQ3sTFKK/eUCDo=
+-----END CERTIFICATE-----
+
+
+NTC TPM EK Root CA 01
+=====================
+-----BEGIN CERTIFICATE-----
+MIIDSjCCAjKgAwIBAgIGAK3jXfbVMA0GCSqGSIb3DQEBBQUAMFIxUDAcBgNVBAMT
+FU5UQyBUUE0gRUsgUm9vdCBDQSAwMTAlBgNVBAoTHk51dm90b24gVGVjaG5vbG9n
+eSBDb3Jwb3JhdGlvbjAJBgNVBAYTAlRXMB4XDTEyMDcxMTE2MjkzMFoXDTMyMDcx
+MTE2MjkzMFowUjFQMBwGA1UEAxMVTlRDIFRQTSBFSyBSb290IENBIDAxMCUGA1UE
+ChMeTnV2b3RvbiBUZWNobm9sb2d5IENvcnBvcmF0aW9uMAkGA1UEBhMCVFcwggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDoNqxhtD4yUtXhqKQGGZemoKJy
+uj1RnWvmNgzItLeejNU8B6fOnpMQyoS4K72tMhhFRK2jV9RYzyJMSjEwyX0ASTO1
+2yMti2UJQS60d36eGwk8WLgrFnnITlemshi01h9t1MOmay3TO1LLH/3/VDKJ+jbd
+cbfIO2bBquN8r3/ojYUaNSPj6pK1mmsMoJXF4dGRSEwb/4ozBIw5dugm1MEq4Zj3
+GZ0YPg5wyLRugQbt7DkUOX4FGuK5p/C0u5zX8u33EGTrDrRz3ye3zO+aAY1xXF/m
+qwEqgxX5M8f0/DXTTO/CfeIksuPeOzujFtXfi5Cy64eeIZ0nAUG3jbtnGjoFAgMB
+AAGjJjAkMA4GA1UdDwEB/wQEAwICBDASBgNVHRMBAf8ECDAGAQH/AgEAMA0GCSqG
+SIb3DQEBBQUAA4IBAQBBQznOPJAsD4Yvyt/hXtVJSgBX/+rRfoaqbdt3UMbUPJYi
+pUoTUgaTx02DVRwommO+hLx7CS++1F2zorWC8qQyvNbg7iffQbbjWitt8NPE6kCr
+q0Y5g7M/LkQDd5N3cFfC15uFJOtlj+A2DGzir8dlXU/0qNq9dBFbi+y+Y3rAT+wK
+fktmN82UT861wTUzDvnXO+v7H5DYXjUU8kejPW6q+GgsccIbVTOdHNNWbMrcD9yf
+oS91nMZ/+/n7IfFWXNN82qERsrvOFCDsbIzUOR30N0IP++oqGfwAbKFfCOCFUz6j
+jpXUdJlh22tp12UMsreibmi5bsWYBgybwSbRgvzE
+-----END CERTIFICATE-----
+
+
+NTC TPM EK Root CA 02
+=====================
+-----BEGIN CERTIFICATE-----
+MIIDSjCCAjKgAwIBAgIGAPadBmPZMA0GCSqGSIb3DQEBBQUAMFIxUDAcBgNVBAMT
+FU5UQyBUUE0gRUsgUm9vdCBDQSAwMjAlBgNVBAoTHk51dm90b24gVGVjaG5vbG9n
+eSBDb3Jwb3JhdGlvbjAJBgNVBAYTAlRXMB4XDTEyMDcxMTE2MzMyNFoXDTMyMDcx
+MTE2MzMyNFowUjFQMBwGA1UEAxMVTlRDIFRQTSBFSyBSb290IENBIDAyMCUGA1UE
+ChMeTnV2b3RvbiBUZWNobm9sb2d5IENvcnBvcmF0aW9uMAkGA1UEBhMCVFcwggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDSagWxaANT1YA2YUSN7sq7yzOT
+1ymbIM+WijhE5AGcLwLFoJ9fmaQrYL6fAW2EW/Q3yu97Q9Ysr8yYZ2XCCfxfseEr
+Vs80an8Nk6LkTDz8+0Hm0Cct0klvNUAZEIvWpmgHZMvGijXyOcp4z494d8B28Ynb
+I7x0JMXZZQQKQi+WfuHtntF+2osYScweocipPrGeONLKU9sngWZ2vnnvw1SBneTa
+irxq0Q0SD6Bx9jtxvdf87euk8JzfPhX8jp8GEeAjmLwGR+tnOQrDmczGNmp7YYNN
+R+Q7NZVoYWHw5jaoZnNxbouWUXZZxFqDsB/ndCKWtsIzRYPuWcqrFcmUN4SVAgMB
+AAGjJjAkMA4GA1UdDwEB/wQEAwICBDASBgNVHRMBAf8ECDAGAQH/AgEAMA0GCSqG
+SIb3DQEBBQUAA4IBAQAIkdDSErzPLPYrVthw4lKjW4tRYelUicMPEHKjQeVUAAS5
+y9XTzB4DWISDAFsgtQjqHJj0xCG+vpY0Rmn2FCO/0YpP+YBQkdbJOsiyXCdFy9e4
+gGjQ24gw1B+rr84+pkI51y952NYBdoQDeb7diPe+24U94f//DYt/JQ8cJua4alr3
+2Pohhh5TxCXXfU2EHt67KyqBSxCSy9m4OkCOGLHL2X5nQIdXVj178mw6DSAwyhwR
+n3uJo5MvUEoQTFZJKGSXfab619mIgzEr+YHsIQToqf44VfDMDdM+MFiXQ3a5fLii
+hEKQ9DhBPtpHAbhFA4jhCiG9HA8FdEplJ+M4uxNz
+-----END CERTIFICATE-----
+
+
+NTC TPM EK Root CA ARSUF 01
+===========================
+-----BEGIN CERTIFICATE-----
+MIIDWTCCAkGgAwIBAgIJAMklAEG4bgQ6MA0GCSqGSIb3DQEBBQUAMFgxVjAiBgNV
+BAMTG05UQyBUUE0gRUsgUm9vdCBDQSBBUlNVRiAwMTAlBgNVBAoTHk51dm90b24g
+VGVjaG5vbG9neSBDb3Jwb3JhdGlvbjAJBgNVBAYTAlRXMB4XDTE0MDQwMTE4MzQz
+OFoXDTM0MDMyODE4MzQzOFowWDFWMCIGA1UEAxMbTlRDIFRQTSBFSyBSb290IENB
+IEFSU1VGIDAxMCUGA1UEChMeTnV2b3RvbiBUZWNobm9sb2d5IENvcnBvcmF0aW9u
+MAkGA1UEBhMCVFcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDCxcfP
+yaNsGhaR28qqisqkrb4Z2OPul7BRNlIEYP8jSFORygyfp4j7bKRyVTTONCUbPq+J
+/a4yRcdbEs8dzvzXypQbVUjuC4sOKjPiWLfOhj1Z1yvOn19Xe3Ei4UzMKJm+xpb1
+BYR4YfrnuVzL4do/B/lCr2AYs4Fmtn1uzXBp1St8TRJz9HTW1yKJ2ZOqTgW3DX80
+6DP//3kIatTuLCZ6Zsdl6fsgMPxJGwrI35ThKBtaUMT93abb/KB/dugvoIgtEi9D
+GEC2C0UWsvJEfu0Qi8zoxtYvd9Y2tRlMxMhK75uShXHxRcG+WOGEnm6uVpGphLKg
+qxAl1tuFcb94vi7dAgMBAAGjJjAkMA4GA1UdDwEB/wQEAwICBDASBgNVHRMBAf8E
+CDAGAQH/AgEAMA0GCSqGSIb3DQEBBQUAA4IBAQB7epeKy2Sa+9huMzK4PnIpjiaX
+QrxPx+E8BVGw6VuQqTcTPQRvPhNpc4VF/6/7MA9qb6vDxWEf40tqNi8e/RPNlRFY
+Dh4tQ1Hhl69NrZVYZeXl1cU/ometoAAbz79ugq78iFndJ5rHMQ85GRwtW9i/q0p1
+VjJ8dLYJ7aRBDTP3hndc35GmZg3q1UX93WD6mM5KuE+mOdv7MXKMtYSrV+dE/iGM
+ASrratJf57P6N8BpegPQaSb6UnElwBpwhRxzW7N9qgjQWIqrxe97CfJk41RvtnKu
+SePqlm1PtWkygt9bYaInLZYkcknXTD/7BtzAyyS25HtG/YTvuMtKItCp7Z4n
+-----END CERTIFICATE-----
+
+
+Nuvoton TPM Root CA 1013
+========================
+-----BEGIN CERTIFICATE-----
+MIIDkjCCAnqgAwIBAgIISN0JfIK6vE0wDQYJKoZIhvcNAQEFBQAwVTFTMB8GA1UE
+AxMYTnV2b3RvbiBUUE0gUm9vdCBDQSAxMDEzMCUGA1UEChMeTnV2b3RvbiBUZWNo
+bm9sb2d5IENvcnBvcmF0aW9uMAkGA1UEBhMCVFcwHhcNMTUwNTExMDg0MzI1WhcN
+MzUwNTA3MDg0MzI1WjBVMVMwHwYDVQQDExhOdXZvdG9uIFRQTSBSb290IENBIDEw
+MTMwJQYDVQQKEx5OdXZvdG9uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24wCQYDVQQG
+EwJUVzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALDAta6EZBlhF1MC
+Z9GeMXqw8puwZEDI3qR/rwGhEUj2oqhFY/K9zUk2YQCkC6X5lrr/lbWfvZtUGMFC
+P4VQlt+bGPTOladGg6zJ/7a6yCd9MqkZbw92niDNhWcXsiB7SRyHYdr/He8tNOoD
+mVdNFXxknP8QH3soBPahxckqtrhhk+24Iran04jOAc0959VnP8H0Jyg4BjehIQjj
+BGGK+bJWZXHYRFlDj4dRW+epChdOqTpWOulf5GOvwNm3sv4ojU2fJ8cA5TznX81z
++Se6hmw/RF8rUGjf1uiKbsxnbIf3An01mZYgD98FXEHAWAW92vAJUuEQJVBlTest
+1YmsaT0CAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8C
+AQAwHwYDVR0jBBgwFoAUoNc3KQ4WzyrivucQDPVrLwTF8EMwHQYDVR0OBBYEFKDX
+NykOFs8q4r7nEAz1ay8ExfBDMA0GCSqGSIb3DQEBBQUAA4IBAQCOXMzQYz3vr9tg
+SiFr6qha2+Jay+EK0iLjSKvNzcTv5yaO8I6pb7tdocvze8394PtM42d2OTOM99lJ
+bZogquaJ6fLHMwzO7UEGndtm6YMp6APXk4ecRqUDLqofIWL6PQUVwSEYlAC6RM9k
+n4MJqckIxsc6iC38lsjyn4ut8o/E3fIo8UzYDl2P+KK1VkjDcmmgNf6seHmBsOYC
+vOc4xYpq0yWuZFfxeyC4wC4mOAKLZX2yLMYrYBmnDd60nc0hgI1/TKb1H/Ew2P7R
+UxEDMGe8e3A9YR4M/09FLn8cTTjq7hflRlcqiarpPo6+9Z3dqzmqTQxvVQ/DIVqE
+3r3WOnnr
+-----END CERTIFICATE-----
+
+
+Nuvoton TPM Root CA 1014
+========================
+-----BEGIN CERTIFICATE-----
+MIIDkjCCAnqgAwIBAgIIbXSeZ/22esUwDQYJKoZIhvcNAQEFBQAwVTFTMB8GA1UE
+AxMYTnV2b3RvbiBUUE0gUm9vdCBDQSAxMDE0MCUGA1UEChMeTnV2b3RvbiBUZWNo
+bm9sb2d5IENvcnBvcmF0aW9uMAkGA1UEBhMCVFcwHhcNMTcwODIxMTEwMzM2WhcN
+MzcwODE3MTEwMzM2WjBVMVMwHwYDVQQDExhOdXZvdG9uIFRQTSBSb290IENBIDEw
+MTQwJQYDVQQKEx5OdXZvdG9uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24wCQYDVQQG
+EwJUVzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMd3U7eh2gF2h7LE
+b6GZTP/TtWq3cK8QMFuGI6PrwXjwGm1JfG6vF+1u/z4tJbc8znK8Kc/XTZ1yqoZW
+sz7dXP20eltU0fuB7qwa2yJOqbl6hZ6nAD+eOuteSUQ8AnEuFH2XqqN++pj9DJXS
+zDpvHqP1J6PnpNi6gxVas6PBFrRZuYGOxJwG2miyObHK1/kKrkuE7/yh+ju1j0Rw
+9DXhvmEelrztPOkm4TkLxkTQSL7jj+EWimpmGP8Wo+B/2FdVpJZdoFUa2v5GldK8
+VBdkacDaSqQ0iX1tP2oI93Jyx1xu9JDqjThrtu+FFIlHFJLw2N91fSCmsJukUiCI
+9PPakQUCAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8C
+AQAwHwYDVR0jBBgwFoAUqdlH8/mBcu623MXtYJoA3nwGnLAwHQYDVR0OBBYEFKnZ
+R/P5gXLuttzF7WCaAN58BpywMA0GCSqGSIb3DQEBBQUAA4IBAQBCVMox72wTII5D
+fjznST8qr61I6ctKouW401l/x5EA2gBctsx5gl3tuq9EArM2TuA9F+leyJ8r/Tdu
+do8TgM4iCVl+FthXlrkPVemd1le63v0Emaxd/8Vca9ZZbrLlC6WNiUj/nGyYThPK
+3XIHQN0+OoNdXQM5IxUYylgiA3udzcLCS0oL8uWhpa5YX2ad2UB3xKiz3maI7sXF
+Dk5ds45MimR0p/dd+4y2tnAB1f/neR9/CqE58GQcFDY10mpNUa3rBqcUnHcJCfvb
+i5TX/clYY/wsVDPwjA5u3k7KSOip7FR33EfIPubE/nMeVqDTiZt+RBJ81xskBO0+
+x7bKAs+x
+-----END CERTIFICATE-----
+
+
+Nuvoton TPM Root CA 1110
+========================
+-----BEGIN CERTIFICATE-----
+MIICBjCCAaygAwIBAgIIEDiqn2SaqGMwCgYIKoZIzj0EAwIwVTFTMB8GA1UEAxMY
+TnV2b3RvbiBUUE0gUm9vdCBDQSAxMTEwMCUGA1UEChMeTnV2b3RvbiBUZWNobm9s
+b2d5IENvcnBvcmF0aW9uMAkGA1UEBhMCVFcwHhcNMTUwNTExMDg0MzMzWhcNMzUw
+NTA3MDg0MzMzWjBVMVMwHwYDVQQDExhOdXZvdG9uIFRQTSBSb290IENBIDExMTAw
+JQYDVQQKEx5OdXZvdG9uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24wCQYDVQQGEwJU
+VzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDVkEOpuyhuviaDH6xQj3faaV2Z4
+FvXSdwUkTiB1JjPDgv1PU0SFYtEE1W9VmI1GcOn5FAUi2/QM36DPhmPTd+qjZjBk
+MA4GA1UdDwEB/wQEAwICBDASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQV
+kdS26vmNAQSGS2kDpI3QAmB30zAfBgNVHSMEGDAWgBQVkdS26vmNAQSGS2kDpI3Q
+AmB30zAKBggqhkjOPQQDAgNIADBFAiEAlfxysfHDcxYDed5dmRbvHPKHLEEq9Y9P
+wAxoKqH7Q5kCIGfsxiLr2j9nJ9jELwXz0/VWN9PhUNdM3qmsx2JEne6p
+-----END CERTIFICATE-----
+
+
+Nuvoton TPM Root CA 1111
+========================
+-----BEGIN CERTIFICATE-----
+MIICBzCCAa2gAwIBAgIJAN/u3L0l8osZMAoGCCqGSM49BAMCMFUxUzAfBgNVBAMT
+GE51dm90b24gVFBNIFJvb3QgQ0EgMTExMTAlBgNVBAoTHk51dm90b24gVGVjaG5v
+bG9neSBDb3Jwb3JhdGlvbjAJBgNVBAYTAlRXMB4XDTE3MDgyMTAzMzI1M1oXDTM3
+MDgxNzAzMzI1M1owVTFTMB8GA1UEAxMYTnV2b3RvbiBUUE0gUm9vdCBDQSAxMTEx
+MCUGA1UEChMeTnV2b3RvbiBUZWNobm9sb2d5IENvcnBvcmF0aW9uMAkGA1UEBhMC
+VFcwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATRcgnHcQk99FFMQ+9UVVFzf64J
+1jnhxpGAdZEHRleZfkfTYGHsdr3L9FLdGVUb+BA2cim30ovuPDZOGOUKPraLo2Yw
+ZDAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU
+iC8Ee4cSHPmIXzEWC8e7VYavRxswHwYDVR0jBBgwFoAUiC8Ee4cSHPmIXzEWC8e7
+VYavRxswCgYIKoZIzj0EAwIDSAAwRQIhANrKhBfLXyHCznBRtWRBmTbfYJR9mCl1
+2N/xZkcohRZIAiBDufnmhZWCbX4pibbzAOgcxjsc5+qmpAovxW9ipWJEsA==
+-----END CERTIFICATE-----
+
+
+Nuvoton TPM Root CA 2010
+========================
+-----BEGIN CERTIFICATE-----
+MIIDkjCCAnqgAwIBAgIIWAnP9p2CIZcwDQYJKoZIhvcNAQEFBQAwVTFTMB8GA1UE
+AxMYTnV2b3RvbiBUUE0gUm9vdCBDQSAyMDEwMCUGA1UEChMeTnV2b3RvbiBUZWNo
+bm9sb2d5IENvcnBvcmF0aW9uMAkGA1UEBhMCVFcwHhcNMTUwNDIzMDY1OTE5WhcN
+MzUwNDE5MDY1OTE5WjBVMVMwHwYDVQQDExhOdXZvdG9uIFRQTSBSb290IENBIDIw
+MTAwJQYDVQQKEx5OdXZvdG9uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24wCQYDVQQG
+EwJUVzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKcE9saVURE582ny
+dHsZO7+3xmdMFbOPCdplBda/EJg9cg7n6bZ79Qv7hyymN5qE23SOPNFvm8SAdmCJ
+ybmTnk1y+SyiDw5gUpckbXsRYAetTwqtdfBkF4TkFoRJDIraQC8miTdYqXMXfWTo
+bhHXf/oV953laOCO/SRlqXzAWzm5d8PwixUBLZTnvcgxM+pXwv6JY6wgXpv55fY1
+D3M1hyiNALib+rg0LwazalU0DOryAAIqFzMgkR2IaefkAmpmQ1xpfMJsK+BMixcI
+XUCzSGGKKdkc3WUDye/vsyXYQ5zoYuLt3xb7BEZxes31lqbs1gniNz4oD5ptmrS4
+8V7Rz/kCAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8C
+AQAwHwYDVR0jBBgwFoAUCDAPQ6j0uMjmJKT3Bgz1nnRQFecwHQYDVR0OBBYEFAgw
+D0Oo9LjI5iSk9wYM9Z50UBXnMA0GCSqGSIb3DQEBBQUAA4IBAQAE0pMnjz5o3QUd
+S3lLQn3+vXkS2xc1EmPxcVFxjPbrJDtnNRMWwglC8zo70VgWu/+ulwzy783zJSiT
+nkWPeuszqp3xOtCPWDE4D2sxVbWH3pvel2tgZJv0KJsJH93QE53WbHUwSn2JjHNH
+UJiBpq0genUxGD+zBI3NGDGB1iti66aJfCdjn8C0G0gTmQ8jFpZ6AsX1GSvPYeU6
+EqN9ynIEYUVcRKwoHQaSmqDd7HVp97fwD+mkOfFYByLVUqC09rNFW81Va4Ze2gw2
+HiKz/SVSA5mA/91wfEZSZ6azOgDZNQlbgBo27mZFJ5mR7iJbWgtD+vO4+wRZK8Bc
+8yWxV8ri
+-----END CERTIFICATE-----
+
+
+Nuvoton TPM Root CA 2011
+========================
+-----BEGIN CERTIFICATE-----
+MIIDkjCCAnqgAwIBAgIIGCgneR7Ow/EwDQYJKoZIhvcNAQEFBQAwVTFTMB8GA1UE
+AxMYTnV2b3RvbiBUUE0gUm9vdCBDQSAyMDExMCUGA1UEChMeTnV2b3RvbiBUZWNo
+bm9sb2d5IENvcnBvcmF0aW9uMAkGA1UEBhMCVFcwHhcNMTcwOTExMDcxMDEyWhcN
+MzcwOTA3MDcxMDEyWjBVMVMwHwYDVQQDExhOdXZvdG9uIFRQTSBSb290IENBIDIw
+MTEwJQYDVQQKEx5OdXZvdG9uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24wCQYDVQQG
+EwJUVzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAfy7Iu3eTXYdXe
+WWc8ZPHb1ekofnHWY4Y6QD+z256j2rXTGmk5bA1Y6nCsYtBqUV4B2gfPAaZXunMD
+k3KDEBaI8Fkd7BTXbWHrfgxZstGHlWzVqi1r2Jj31MdDMz0NRovWXJwgG5N9tgs5
+KEeQ0Kk2ock1Vdn/jIqx3xY9vBMZm97N11m/WtZ5U2NyxbfqIIloIhxuvoPZRzx8
+c6MmI77MtM2ylm+2nbXf1DtbEKXQYuGnvM3Ib9K5f2+PTjNi/nWGAcCgLo89BNSB
+LdG9GxK1hO9QXYcCkAWsEWUD+8DM1v+zAl2cnrtj4iu48sU5i6hVO0CTtCP0yOkf
+VdVfNVsCAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8C
+AQAwHwYDVR0jBBgwFoAUpSy2R+CQm9ouf32RP2LYixOJ4sYwHQYDVR0OBBYEFKUs
+tkfgkJvaLn99kT9i2IsTieLGMA0GCSqGSIb3DQEBBQUAA4IBAQAUwrhniUs4CLgb
+UIFPslx3aly8M2P8Vn0GR+EcE0GklFa26WOT+YZxacUP3rMGteZGCtbFggYcM94n
+pog7FBnnDR1ySHbHOY0kWBO75ePVBmytqpPeZX8E5202sRgagnojl59bPj1tqhlH
+vwj6Xj6/XAFZDo0Or2GhCC5NzRbXmc6wB0zIjTlhPwVXQ+ikKBqdt3/HKCB4i3Sv
+7Dxyy/N4aPg/s6MJxgmUjtGxRyjU6RVgrzqVN/0Csv8L75g2SvzgXnqrqcpk82XT
+CnJgflpaCfV2SC5MGWHEjmj1tghC133JcEMQlsodWRm+0x7E/fsHvJNj4A0nh9K3
+H3TryFJ7
+-----END CERTIFICATE-----
+
+
+Nuvoton TPM Root CA 2110
+========================
+-----BEGIN CERTIFICATE-----
+MIICBjCCAaygAwIBAgIIP5MvnZk8FrswCgYIKoZIzj0EAwIwVTFTMB8GA1UEAxMY
+TnV2b3RvbiBUUE0gUm9vdCBDQSAyMTEwMCUGA1UEChMeTnV2b3RvbiBUZWNobm9s
+b2d5IENvcnBvcmF0aW9uMAkGA1UEBhMCVFcwHhcNMTUxMDE5MDQzMjAwWhcNMzUx
+MDE1MDQzMjAwWjBVMVMwHwYDVQQDExhOdXZvdG9uIFRQTSBSb290IENBIDIxMTAw
+JQYDVQQKEx5OdXZvdG9uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24wCQYDVQQGEwJU
+VzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABPv9uK2BNm8/nmIyNsc2/aKHV0WR
+ptzge3jKAIgUMosQIokl4LE3iopXWD3Hruxjf9vkLMDJrTeK3hWh2ySS4ySjZjBk
+MA4GA1UdDwEB/wQEAwICBDASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSf
+u3mqD1JieL7RUJKacXHpajW+9zAfBgNVHSMEGDAWgBSfu3mqD1JieL7RUJKacXHp
+ajW+9zAKBggqhkjOPQQDAgNIADBFAiEA/jiywhOKpiMOUnTfDmXsXfDFokhKVNTX
+B6Xtqm7J8L4CICjT3/Y+rrSnf8zrBXqWeHDh8Wi41+w2ppq6Ev9orZFI
+-----END CERTIFICATE-----
+
+
+Nuvoton TPM Root CA 2111
+========================
+-----BEGIN CERTIFICATE-----
+MIICBzCCAa2gAwIBAgIJAOCIUWvKMfuGMAoGCCqGSM49BAMCMFUxUzAfBgNVBAMT
+GE51dm90b24gVFBNIFJvb3QgQ0EgMjExMTAlBgNVBAoTHk51dm90b24gVGVjaG5v
+bG9neSBDb3Jwb3JhdGlvbjAJBgNVBAYTAlRXMB4XDTE3MDkxMTA3MDk0OVoXDTM3
+MDkwNzA3MDk0OVowVTFTMB8GA1UEAxMYTnV2b3RvbiBUUE0gUm9vdCBDQSAyMTEx
+MCUGA1UEChMeTnV2b3RvbiBUZWNobm9sb2d5IENvcnBvcmF0aW9uMAkGA1UEBhMC
+VFcwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATanNywPkE/RICBZ4VjwCymLDts
+B7Unv52Oj0HyEsAfc7+vjOl2DP8JbrcozY05s7GFfQqR3vhv4ZdkJMalgOr2o2Yw
+ZDAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU
+I/TiKtO+N0pEl3KVSqKDrtdSVy4wHwYDVR0jBBgwFoAUI/TiKtO+N0pEl3KVSqKD
+rtdSVy4wCgYIKoZIzj0EAwIDSAAwRQIgXgXs2eVt2U4sCoRf1GLoUTf2ZzYTSsyg
+6I5w6hPTLigCIQDLLFlXK1xw1a1D1/idVhdd3a8gkE0FnTJO890WwiQbpg==
+-----END CERTIFICATE-----
+
+
+OnDie CA CSME Intermediate
+==========================
+-----BEGIN CERTIFICATE-----
+MIIDKTCCAq2gAwIBAgIUeI0CCd0CciUjODd+qV89nfrBECswDAYIKoZIzj0EAwMF
+ADCBiTELMAkGA1UEBgwCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBD
+bGFyYTEaMBgGA1UECgwRSW50ZWwgQ29ycG9yYXRpb24xIzAhBgNVBAsMGk9uRGll
+IENBIFJvb3QgQ2VydCBTaWduaW5nMRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMB4X
+DTE5MDQwNDAwMDAwMFoXDTQ5MTIzMTIzNTk1OVowQDEmMCQGA1UECwwdT25EaWUg
+Q0EgQ1NNRSBJbnRlcm1lZGlhdGUgQ0ExFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20w
+djAQBgcqhkjOPQIBBgUrgQQAIgNiAASdEvDZh7DUNurof39JO07VstXEbEgkiJlg
+bo74ubTnOQ3nksRHrjyZ4ForFmlSm+ym2gO8mW7UiZibclU7yK75Jd9IZQc0pSpK
+nCfMc4DgzgRRIpKjo3/Kmu25FDRIgvWjggEaMIIBFjBoBggrBgEFBQcBAQRcMFow
+WAYIKwYBBQUHMAKGTGh0dHBzOi8vdHNjaS5pbnRlbC5jb20vY29udGVudC9PbkRp
+ZUNBL2NlcnRzL09uRGllX0NBX1Jvb3RDQV9DZXJ0aWZpY2F0ZS5jZXIwHwYDVR0j
+BBgwFoAUtFjJ9uQIQKPyWMg5eG6ujgqNnDgwDwYDVR0TAQH/BAUwAwEB/zBJBgNV
+HR8EQjBAMD6gPKA6hjhodHRwczovL3RzY2kuaW50ZWwuY29tL2NvbnRlbnQvT25E
+aWVDQS9jcmxzL09uRGllX0NBLmNybDAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
+FGGaCniWiAPMYZCopT+QbXV8n2lqMAwGCCqGSM49BAMDBQADaAAwZQIwfPb2+J5l
+1ltD0qQyEMBPsXzFMokpR53QcvvBpRwvl6o5PGVj7bpNyelLh3EDmPEDAjEA2mQz
+xUQUTd4WV77Zjfgajq37jpTzARWPEKFi1kE8iT+6qjBf7vw+3BLLEQpixRPC
+-----END CERTIFICATE-----
+
+
+OnDie CA RootCA Certificate
+===========================
+-----BEGIN CERTIFICATE-----
+MIICujCCAj6gAwIBAgIUPLLiHTrwySRtWxR4lxKLlu7MJ7wwDAYIKoZIzj0EAwMF
+ADCBiTELMAkGA1UEBgwCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBD
+bGFyYTEaMBgGA1UECgwRSW50ZWwgQ29ycG9yYXRpb24xIzAhBgNVBAsMGk9uRGll
+IENBIFJvb3QgQ2VydCBTaWduaW5nMRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMB4X
+DTE5MDQwMzAwMDAwMFoXDTQ5MTIzMTIzNTk1OVowgYkxCzAJBgNVBAYMAlVTMQsw
+CQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExGjAYBgNVBAoMEUludGVs
+IENvcnBvcmF0aW9uMSMwIQYDVQQLDBpPbkRpZSBDQSBSb290IENlcnQgU2lnbmlu
+ZzEWMBQGA1UEAwwNd3d3LmludGVsLmNvbTB2MBAGByqGSM49AgEGBSuBBAAiA2IA
+BK8SfB2UflvXZqb5Kc3+lokrABHWazvNER2axPURP64HILkXChPB0OEX5hLB7Okw
+7Dy6oFqB5tQVDupgfvUX/SgYBEaDdG5rCVFrGAis6HX5TA2ewQmj14r2ncHBgnpp
+B6NjMGEwHwYDVR0jBBgwFoAUtFjJ9uQIQKPyWMg5eG6ujgqNnDgwDwYDVR0TAQH/
+BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLRYyfbkCECj8ljIOXhu
+ro4KjZw4MAwGCCqGSM49BAMDBQADaAAwZQIxAP9B4lFF86uvpHmkcp61cWaU565a
+yE3p7ezu9haLE/lPLh5hFQfmTi1nm/sG3JEXMQIwNpKfHoDmUTrUyezhhfv3GG+1
+CqBXstmCYH40buj9jKW3pHWc71s9arEmPWli7I8U
+-----END CERTIFICATE-----
+
+
+SPT H LP EPID Prod RK 0
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDyDCCA22gAwIBAgIUFP7csB8Kaz+6qYApa/U5ePODHGYwCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTUw
+MjE4MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBnjELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xODA2BgNVBAsML1RQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIFNQVC1I
+LUxQX0VQSURfUHJvZF9SS18wMRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMFkwEwYH
+KoZIzj0CAQYIKoZIzj0DAQcDQgAE1JAV56CfSDOIh7r0dg/PHIUVNiElzflhDHwp
+EX/NByiWbhyA4UNW576N8yZT3c7QrBb6wb+XAIwVh7S7H5tNmKOCAZwwggGYMB8G
+A1UdIwQYMBaAFOhSBcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBTO/jMzkHM8
+ZyfHiA3+Qpr+tVeokjASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIB
+BjATBgNVHSUBAf8ECTAHBgVngQUIATBwBgNVHSABAf8EZjBkMGIGCiqGSIb4TQEF
+AgEwVDBSBggrBgEFBQcCARZGaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250
+ZW50L0NSTC9la2NlcnQvRUtjZXJ0UG9saWN5U3RhdGVtZW50LnBkZjBcBggrBgEF
+BQcBAQRQME4wTAYIKwYBBQUHMAKGQGh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20v
+Y29udGVudC9DUkwvZWtjZXJ0L0VLUm9vdFB1YmxpY0tleS5jZXIwTQYDVR0fBEYw
+RDBCoECgPoY8aHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NSTC9l
+a2NlcnQvRUtfUGxhdGZvcm0uY3JsMAoGCCqGSM49BAMCA0kAMEYCIQDaThaLirbr
+/xm1JSSFHfKhHmsbJ7x0yDZjv2zm5Dm3FgIhAJ7P/RtCFiLR4Rc71RTiuFnPtzDP
+2KKswXlh07upS5hg
+-----END CERTIFICATE-----
+
+
+SPT H LP EPID Test RK 0
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDyDCCA22gAwIBAgIUUCX7DviKiMOZ0Qnrtpwh4iAaz6MwCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTUw
+MjE4MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBnjELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xODA2BgNVBAsML1RQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIFNQVC1I
+LUxQX0VQSURfVGVzdF9SS18wMRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMFkwEwYH
+KoZIzj0CAQYIKoZIzj0DAQcDQgAEvwtQKK4xqt7P9BVqV97KxMCrl0d77BFxHFoh
+nHQcvyrMn5Ii6LI8m5PituUNHoDC9YAEFwThPJYCBatQEwPEYKOCAZwwggGYMB8G
+A1UdIwQYMBaAFOhSBcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBQwuG8JTaar
+1SNxBD8r92aMeD8OZjASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIB
+BjATBgNVHSUBAf8ECTAHBgVngQUIATBwBgNVHSABAf8EZjBkMGIGCiqGSIb4TQEF
+AgEwVDBSBggrBgEFBQcCARZGaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250
+ZW50L0NSTC9la2NlcnQvRUtjZXJ0UG9saWN5U3RhdGVtZW50LnBkZjBcBggrBgEF
+BQcBAQRQME4wTAYIKwYBBQUHMAKGQGh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20v
+Y29udGVudC9DUkwvZWtjZXJ0L0VLUm9vdFB1YmxpY0tleS5jZXIwTQYDVR0fBEYw
+RDBCoECgPoY8aHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NSTC9l
+a2NlcnQvRUtfUGxhdGZvcm0uY3JsMAoGCCqGSM49BAMCA0kAMEYCIQDpDmkAlkaf
+597+LAf0CZPQkd3wA32XR6hkATDh6sLyLAIhALQN4SDXyUkruniwUV6a13LIzTGr
+UyrT6NhX7IyMGv3z
+-----END CERTIFICATE-----
+
+
+SPTEPIDPROD EK Platform Public Key
+==================================
+-----BEGIN CERTIFICATE-----
+MIIDvjCCA2OgAwIBAgIUMTamuKIQ7vWud4lXF0aARJoRkSUwCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTQw
+NjE2MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBlDELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xLjAsBgNVBAsMJVRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIFNQVF9F
+UElEX1BST0QxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wWTATBgcqhkjOPQIBBggq
+hkjOPQMBBwNCAATTGg8fSsqZoV/9ZPsWLey7Dj+uzbwM36xKquRhobztKGqdWLdf
+XBXhAzqgYPVNgqKEUfM8gG22RMFYQtL1rQvKo4IBnDCCAZgwHwYDVR0jBBgwFoAU
+6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFL+cXG+/gM3OdKvNDg5gBOoC
+KmYGMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMBMGA1UdJQEB
+/wQJMAcGBWeBBQgBMHAGA1UdIAEB/wRmMGQwYgYKKoZIhvhNAQUCATBUMFIGCCsG
+AQUFBwIBFkZodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2Vr
+Y2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMFwGCCsGAQUFBwEBBFAwTjBM
+BggrBgEFBQcwAoZAaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NS
+TC9la2NlcnQvRUtSb290UHVibGljS2V5LmNlcjBNBgNVHR8ERjBEMEKgQKA+hjxo
+dHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS19Q
+bGF0Zm9ybS5jcmwwCgYIKoZIzj0EAwIDSQAwRgIhAPfXbrD4/G5IddlFUBtZjXcr
+VjEwAFAZewDQvRHW+Rz7AiEAyie0OxbA5hMBVLqCl4lugbPguMlyOTDWagHRox8S
+SyI=
+-----END CERTIFICATE-----
+
+
+SPTHEPIDPROD EK Platform Public Key
+===================================
+-----BEGIN CERTIFICATE-----
+MIIDvjCCA2SgAwIBAgIUbOv9CbWie5MIiWFjQaGYw+NfG50wCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTUw
+MzI0MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBlTELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xLzAtBgNVBAsMJlRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIFNQVEhf
+RVBJRF9QUk9EMRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMFkwEwYHKoZIzj0CAQYI
+KoZIzj0DAQcDQgAEryzECW6qpKxLE8m3YQwVO+oiea9EkzNEVxDAA/IOaq+u1MMY
+W1POaBQFO17J57eFLmTfC3pCtaBnB9mWsjFhzqOCAZwwggGYMB8GA1UdIwQYMBaA
+FOhSBcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBRec8iao+kCsnK58HQffYcw
+4+xySjASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjATBgNVHSUB
+Af8ECTAHBgVngQUIATBwBgNVHSABAf8EZjBkMGIGCiqGSIb4TQEFAgEwVDBSBggr
+BgEFBQcCARZGaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NSTC9l
+a2NlcnQvRUtjZXJ0UG9saWN5U3RhdGVtZW50LnBkZjBcBggrBgEFBQcBAQRQME4w
+TAYIKwYBBQUHMAKGQGh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20vY29udGVudC9D
+UkwvZWtjZXJ0L0VLUm9vdFB1YmxpY0tleS5jZXIwTQYDVR0fBEYwRDBCoECgPoY8
+aHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NSTC9la2NlcnQvRUtf
+UGxhdGZvcm0uY3JsMAoGCCqGSM49BAMCA0gAMEUCIEwoRGZXyGrOi5c5XQ0sogO0
+7nKarDdxCHJjJmfB2j98AiEAzEpP1ysDBAD6k97Y0XVrqn4srCNv6132mRKeSw16
+wMk=
+-----END CERTIFICATE-----
+
+
+SPTHLPEPIDProd EK Platform Public Key
+=====================================
+-----BEGIN CERTIFICATE-----
+MIIDwzCCA2igAwIBAgIUEPCEDNlZEY6a2+ti1pgBuZBmXiEwCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTUw
+MjE4MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBmTELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xMzAxBgNVBAsMKlRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIFNQVC1I
+LUxQX0VQSURfUHJvZDEWMBQGA1UEAwwNd3d3LmludGVsLmNvbTBZMBMGByqGSM49
+AgEGCCqGSM49AwEHA0IABPKQW92/W43VEjmMP2CfqMyWb+3qfmR7FQPeAF2kM5Lz
+CD3s+Bar8Vh0Z+YDP5SIlCPv4AckQRukjvcxJnsT89KjggGcMIIBmDAfBgNVHSME
+GDAWgBToUgXCT9jS1aUhRxa2zgx7W7p3DzAdBgNVHQ4EFgQU+Z8gffyHl7/5DWQd
+Jf1aRfdjELgwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwEwYD
+VR0lAQH/BAkwBwYFZ4EFCAEwcAYDVR0gAQH/BGYwZDBiBgoqhkiG+E0BBQIBMFQw
+UgYIKwYBBQUHAgEWRmh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20vY29udGVudC9D
+UkwvZWtjZXJ0L0VLY2VydFBvbGljeVN0YXRlbWVudC5wZGYwXAYIKwYBBQUHAQEE
+UDBOMEwGCCsGAQUFBzAChkBodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRl
+bnQvQ1JML2VrY2VydC9FS1Jvb3RQdWJsaWNLZXkuY2VyME0GA1UdHwRGMEQwQqBA
+oD6GPGh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20vY29udGVudC9DUkwvZWtjZXJ0
+L0VLX1BsYXRmb3JtLmNybDAKBggqhkjOPQQDAgNJADBGAiEAoDkoa6IYGLI99v4C
+ja5mbFdeiw783S/P0U5wflvr2/wCIQCFdAQhn0LDK1trPGCt1zciFWLQCHiIKyt+
+0xSFcMbXdA==
+-----END CERTIFICATE-----
+
+
+SPTH EPID PROD RK 0
+===================
+-----BEGIN CERTIFICATE-----
+MIIDwzCCA2mgAwIBAgIUPdcvRbMBVbwWCKuQoJwS9aTtkrswCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTUw
+MzI0MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBmjELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xNDAyBgNVBAsMK1RQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIFNQVEhf
+RVBJRF9QUk9EX1JLXzAxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wWTATBgcqhkjO
+PQIBBggqhkjOPQMBBwNCAAQXORWWgKwKiHzCFfa8JKb47/d79T2tJ07M/wlclzOD
+G77q/BzxepyDZ22iXy+4jtEZURBPwIbRJxrXIoC/P/jGo4IBnDCCAZgwHwYDVR0j
+BBgwFoAU6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFGyp32KhquI+D+t8
+P1645h7KwXy3MBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMBMG
+A1UdJQEB/wQJMAcGBWeBBQgBMHAGA1UdIAEB/wRmMGQwYgYKKoZIhvhNAQUCATBU
+MFIGCCsGAQUFBwIBFkZodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQv
+Q1JML2VrY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMFwGCCsGAQUFBwEB
+BFAwTjBMBggrBgEFBQcwAoZAaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250
+ZW50L0NSTC9la2NlcnQvRUtSb290UHVibGljS2V5LmNlcjBNBgNVHR8ERjBEMEKg
+QKA+hjxodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2Vy
+dC9FS19QbGF0Zm9ybS5jcmwwCgYIKoZIzj0EAwIDSAAwRQIgJozm5qfSmA+JPqR4
+JWrd1X7PslGTSx2Hq6U/jUniJVsCIQDMGNpPslwp5O+/tpaCBXQSPPtW5agKmEPU
+q5DsfzpKpg==
+-----END CERTIFICATE-----
+
+
+ST TPM Root Certificate
+=======================
+-----BEGIN CERTIFICATE-----
+MIIEDDCCAvSgAwIBAgILBAAAAAABIsFs834wDQYJKoZIhvcNAQELBQAwgYcxOzA5
+BgNVBAsTMkdsb2JhbFNpZ24gVHJ1c3RlZCBDb21wdXRpbmcgQ2VydGlmaWNhdGUg
+QXV0aG9yaXR5MRMwEQYDVQQKEwpHbG9iYWxTaWduMTMwMQYDVQQDEypHbG9iYWxT
+aWduIFRydXN0ZWQgUGxhdGZvcm0gTW9kdWxlIFJvb3QgQ0EwHhcNMDkwNzI4MTIw
+MDAwWhcNMzkxMjMxMjM1OTU5WjBKMQswCQYDVQQGEwJDSDEeMBwGA1UEChMVU1RN
+aWNyb2VsZWN0cm9uaWNzIE5WMRswGQYDVQQDExJTVE0gVFBNIEVLIFJvb3QgQ0Ew
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDxBLG5wcB9J0MsiJMreoWQ
+l21bBN12SSGZPJ3HoPjzcrzAz6SPy+TrFmZ6eUVspsFL/23wdPprqTUtDHi+C2pw
+k/3dF3/Rb2t/yHgiPlbCshYpi5f/rJ7nzbQ1ca2LzX3saBe53VfNQQV0zd5uM0DT
+SrmAKU1RIAj2WlZFWXoN4NWTyRtqT5suPHa2y8FlCWMZKlS0FiY4pfM20b5YQ+EL
+4zqb9zN53u/TdYZegrfSlc30Nl9G13Mgi+8rtPFKwsxx05EBbhVroH7aKVI1djsf
+E1MVrUzw62PHik3xlzznXML8OjY//xKeiCWcsApuGCaIAf7TsTRi2l8DNB3rCr1X
+AgMBAAGjgbQwgbEwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQEw
+HQYDVR0OBBYEFG/mxWwHt2yLCoGSg1zLQR72jtEnMEsGA1UdIAREMEIwQAYJKwYB
+BAGgMgFaMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuZ2xvYmFsc2lnbi5uZXQv
+cmVwb3NpdG9yeS8wHwYDVR0jBBgwFoAUHiNj8IW19iVO7RrAUL5lfMfUFXowDQYJ
+KoZIhvcNAQELBQADggEBAFrKpwFmRh7BGdpPZWc1Y6wIbdTAF6T+q1KwDJcyAjgJ
+qThFp3xTAt3tvyVrCRf7T/YARYE24DNa0iFaXsIXeQASDYHJjAZ6LQTslYBeRYLb
+C9v8ZE2ocKSCiC8ALYlJWk39Wob0H1Lk6l2zcUo3oKczGiAcRrlmwV496wvGyted
+2RBcLZro7yhOOGr9KMabV14fNl0lG+31J1nWI2hgTqh53GXg1QH2YpggD3b7UbVm
+c6GZaX37N3z15XfQafuAfHt10kYCNdePzC9tOwirHIsO8lrxoNlzOSxX8SqQGbBI
++kWoe5+SY3gdOGGDQKIdw3W1poMN8bQ5x7XFcgVMwVU=
+-----END CERTIFICATE-----
+
+
+STM TPM ECC Intermediate CA 02
+==============================
+-----BEGIN CERTIFICATE-----
+MIICZTCCAeygAwIBAgIEQAAAAjAKBggqhkjOPQQDAzBOMQswCQYDVQQGEwJDSDEe
+MBwGA1UECgwVU1RNaWNyb2VsZWN0cm9uaWNzIE5WMR8wHQYDVQQDDBZTVE0gVFBN
+IEVDQyBSb290IENBIDAxMB4XDTE4MTEyMjAwMDAwMFoXDTM4MTEyMjAwMDAwMFow
+VjELMAkGA1UEBhMCQ0gxHjAcBgNVBAoMFVNUTWljcm9lbGVjdHJvbmljcyBOVjEn
+MCUGA1UEAwweU1RNIFRQTSBFQ0MgSW50ZXJtZWRpYXRlIENBIDAyMFkwEwYHKoZI
+zj0CAQYIKoZIzj0DAQcDQgAE08t33aGM5M5aeBmzcn5H3HS31CGBJ2bbJ6fvJJ0i
+VCfZrN9sesL0D+NGfwtEklk7mgT/2vfW2dO9OqsyukSw2aOBrzCBrDAdBgNVHQ4E
+FgQUZi2PHOzf8UeotvDqKWr38kyt+c8wHwYDVR0jBBgwFoAUIJJWPAtDqAVyUwMp
+BxwH4OvsAwQwRQYDVR0gAQH/BDswOTA3BgRVHSAAMC8wLQYIKwYBBQUHAgEWIWh0
+dHA6Ly93d3cuc3QuY29tL1RQTS9yZXBvc2l0b3J5LzAPBgNVHQ8BAf8EBQMDAQQC
+MBIGA1UdEwEB/wQIMAYBAf8CAQAwCgYIKoZIzj0EAwMDZwAwZAIwJl4q6QuGhqQD
+pvP1gBBu8OhbQAXL8Rwhg1FWs8BvC4VYt6Tqe9xLqjbtbgR8UOyvAjAhzSbC+r8A
+2Wx1aOwAIqs1tmBXpofqcOXYeCSXKajOv5Jlzk6sDnEH2omN+ydt924=
+-----END CERTIFICATE-----
+
+
+STM TPM ECC Intermediate CA 03
+==============================
+-----BEGIN CERTIFICATE-----
+MIICZjCCAeygAwIBAgIEQAAAAzAKBggqhkjOPQQDAzBOMQswCQYDVQQGEwJDSDEe
+MBwGA1UECgwVU1RNaWNyb2VsZWN0cm9uaWNzIE5WMR8wHQYDVQQDDBZTVE0gVFBN
+IEVDQyBSb290IENBIDAxMB4XDTE4MTEyMjAwMDAwMFoXDTM4MTEyMjAwMDAwMFow
+VjELMAkGA1UEBhMCQ0gxHjAcBgNVBAoMFVNUTWljcm9lbGVjdHJvbmljcyBOVjEn
+MCUGA1UEAwweU1RNIFRQTSBFQ0MgSW50ZXJtZWRpYXRlIENBIDAzMFkwEwYHKoZI
+zj0CAQYIKoZIzj0DAQcDQgAEGaDrMY8uYdq3UGpf8Oi8yP4/JoFE1aHFeLdkqrQ9
+BPCMy4xEGttVycLMj5NH47v3tX3F9iXTJXsswarJMJ+bmaOBrzCBrDAdBgNVHQ4E
+FgQUnaXHLKAL4UuFs+U1yLB8g+hb3/YwHwYDVR0jBBgwFoAUIJJWPAtDqAVyUwMp
+BxwH4OvsAwQwRQYDVR0gAQH/BDswOTA3BgRVHSAAMC8wLQYIKwYBBQUHAgEWIWh0
+dHA6Ly93d3cuc3QuY29tL1RQTS9yZXBvc2l0b3J5LzAPBgNVHQ8BAf8EBQMDAQQC
+MBIGA1UdEwEB/wQIMAYBAf8CAQAwCgYIKoZIzj0EAwMDaAAwZQIxAN5oKo73+O2R
+gF10eCDioHgwLilEaXTqnzOxuFwrCd81r+R4gyDhtcMQUT5aaobJAgIwJg5ZU6J6
+W4dgPvUrPgJ6iMhRc2fQlJNP+DQbbsFP+1CSJmPP1zMPlBnQPUGN53pE
+-----END CERTIFICATE-----
+
+
+STM TPM ECC Root CA 01
+======================
+-----BEGIN CERTIFICATE-----
+MIICyDCCAk+gAwIBAgIORyzLp/OdsAvb9r+66LowCgYIKoZIzj0EAwMwgYsxOzA5
+BgNVBAsTMkdsb2JhbFNpZ24gVHJ1c3RlZCBDb21wdXRpbmcgQ2VydGlmaWNhdGUg
+QXV0aG9yaXR5MRMwEQYDVQQKEwpHbG9iYWxTaWduMTcwNQYDVQQDEy5HbG9iYWxT
+aWduIFRydXN0ZWQgUGxhdGZvcm0gTW9kdWxlIEVDQyBSb290IENBMB4XDTE1MTAy
+ODAwMDAwMFoXDTM4MDExOTAzMTQwN1owTjELMAkGA1UEBhMCQ0gxHjAcBgNVBAoT
+FVNUTWljcm9lbGVjdHJvbmljcyBOVjEfMB0GA1UEAxMWU1RNIFRQTSBFQ0MgUm9v
+dCBDQSAwMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABG7/OLXMiprQQHwNnkpT6aqG
+zOGLcbbAgUtyjlXOZtuv0GB0ttJ6fwMwgFtt8RKlko8Bwn89/BoZOUcI4ne8ddRS
+oqE6StnU3I13qqjalToq3Rnz61Omn6NErK1pxUe3j6OBtTCBsjAOBgNVHQ8BAf8E
+BAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBATAdBgNVHQ4EFgQUIJJWPAtDqAVyUwMp
+BxwH4OvsAwQwHwYDVR0jBBgwFoAUYT78EZkKf7CpW5CgJl4pYUe3MAMwTAYDVR0g
+BEUwQzBBBgkrBgEEAaAyAVowNDAyBggrBgEFBQcCARYmaHR0cHM6Ly93d3cuZ2xv
+YmFsc2lnbi5jb20vcmVwb3NpdG9yeS8wCgYIKoZIzj0EAwMDZwAwZAIwWnuUAzwy
+vHUhHehymKTZ2QcPUwHX0LdcVTac4ohyEL3zcuv/dM0BN62kFxHgBOhWAjAIxt9i
+50yAxy0Z/MeV2NTXqKpLwdhWNuzOSFZnzRKsh9MxY3zj8nebDNlHTDGSMR0=
+-----END CERTIFICATE-----
+
+
+STM TPM ECC384 Intermediate CA 01
+=================================
+-----BEGIN CERTIFICATE-----
+MIIChTCCAgygAwIBAgIEQQAAATAKBggqhkjOPQQDAzBOMQswCQYDVQQGEwJDSDEe
+MBwGA1UECgwVU1RNaWNyb2VsZWN0cm9uaWNzIE5WMR8wHQYDVQQDDBZTVE0gVFBN
+IEVDQyBSb290IENBIDAxMB4XDTE4MTEyMjAwMDAwMFoXDTM4MTEyMjAwMDAwMFow
+WTELMAkGA1UEBhMCQ0gxHjAcBgNVBAoMFVNUTWljcm9lbGVjdHJvbmljcyBOVjEq
+MCgGA1UEAwwhU1RNIFRQTSBFQ0MzODQgSW50ZXJtZWRpYXRlIENBIDAxMHYwEAYH
+KoZIzj0CAQYFK4EEACIDYgAEwrRg/UAuBFX5QylytlcZuQqHKE1JtKGhns7bwVML
+cUakESdGmUwt3dSdi5aNe4X1bJ96JRjEYpUUjFomYEEqb3anra0XFAfkxloy2Z8G
+TTDlfkP8AkRF522SyO3d38Xjo4GvMIGsMB0GA1UdDgQWBBS9lj6a1XSq2U+tbL9B
+bdhbSlWZQjAfBgNVHSMEGDAWgBQgklY8C0OoBXJTAykHHAfg6+wDBDBFBgNVHSAB
+Af8EOzA5MDcGBFUdIAAwLzAtBggrBgEFBQcCARYhaHR0cDovL3d3dy5zdC5jb20v
+VFBNL3JlcG9zaXRvcnkvMA8GA1UdDwEB/wQFAwMBBAIwEgYDVR0TAQH/BAgwBgEB
+/wIBADAKBggqhkjOPQQDAwNnADBkAjAQC/zt1Mgvx2+ovDgwtDNh4r8aATdQIh/8
+BnR3oH8gkK52eYDYCKbZkIX1H0Qh1t4CMBrGGcLBYSMf8QF7pFL3/aIDSBPi6ifZ
+O0G2mVkmSFxkGJGg2UNAyJXH7WhK/JC5Gg==
+-----END CERTIFICATE-----
+
+
+STM TPM ECC384 Intermediate CA 02
+=================================
+-----BEGIN CERTIFICATE-----
+MIIChjCCAgygAwIBAgIEQQAAAjAKBggqhkjOPQQDAzBOMQswCQYDVQQGEwJDSDEe
+MBwGA1UECgwVU1RNaWNyb2VsZWN0cm9uaWNzIE5WMR8wHQYDVQQDDBZTVE0gVFBN
+IEVDQyBSb290IENBIDAxMB4XDTE4MTEyMjAwMDAwMFoXDTM4MTEyMjAwMDAwMFow
+WTELMAkGA1UEBhMCQ0gxHjAcBgNVBAoMFVNUTWljcm9lbGVjdHJvbmljcyBOVjEq
+MCgGA1UEAwwhU1RNIFRQTSBFQ0MzODQgSW50ZXJtZWRpYXRlIENBIDAyMHYwEAYH
+KoZIzj0CAQYFK4EEACIDYgAECJl5UbEyzDbspvQS0gBHL8zTAS62iU9e5wzw96uv
+lIXhtTQ7btcU9gIRNf9SfI5ekiwprUbNRf+cqe7fyK/nUN5+s0YEpvUMtDh15L/k
+8z4fow8ELCLS2CpEwzmN4xIso4GvMIGsMB0GA1UdDgQWBBQIy7BcpFELKnMpkYTt
+3JzOQpESETAfBgNVHSMEGDAWgBQgklY8C0OoBXJTAykHHAfg6+wDBDBFBgNVHSAB
+Af8EOzA5MDcGBFUdIAAwLzAtBggrBgEFBQcCARYhaHR0cDovL3d3dy5zdC5jb20v
+VFBNL3JlcG9zaXRvcnkvMA8GA1UdDwEB/wQFAwMBBAIwEgYDVR0TAQH/BAgwBgEB
+/wIBADAKBggqhkjOPQQDAwNoADBlAjEAvU96UbV6BpxaFXyKo2HTZWWDhtPB9/Yz
+x+K/lzFGETy75ublxEQyzyQWi9oXXz/9AjA6YYTiblNw+JpBEIievODeiY6+QCAI
+KFz0g/sKyquqhYN1JnSaOau2hn6JmzUQXKs=
+-----END CERTIFICATE-----
+
+
+STM TPM EK Intermediate CA 06
+=============================
+-----BEGIN CERTIFICATE-----
+MIIDzDCCArSgAwIBAgIEQAAABzANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQGEwJD
+SDEeMBwGA1UEChMVU1RNaWNyb2VsZWN0cm9uaWNzIE5WMRswGQYDVQQDExJTVE0g
+VFBNIEVLIFJvb3QgQ0EwHhcNMTgxMDMxMDAwMDAwWhcNMzgwMTAxMDAwMDAwWjBV
+MQswCQYDVQQGEwJDSDEeMBwGA1UEChMVU1RNaWNyb2VsZWN0cm9uaWNzIE5WMSYw
+JAYDVQQDEx1TVE0gVFBNIEVLIEludGVybWVkaWF0ZSBDQSAwNjCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAOvIjXBLbVBfIC7SFjcz4hm6R0IyuRJpJ45n
+pYytlAHmoVosoT3isl52T4UB4T1r1b8y7Y+vW3Ed0sZO+m/pHtUc5h9050ynGedt
+0uvuNZ1cVnX2h/XTcdKIawqEBVXRZQ5OJMp/aDlUwsUeBT+SlhAagNhmyNw2tC2a
+b5d7qr8FU03Ds6io892aSD23z51yLAix121uUHIPmHByaZRnaKctTbu7ulwINlrd
+cB953Z0WVQhil5yjZs14yd4yAnA3Z1ZW+mrOkr8ehVsUbvrUxyfhMInMrETIxR4R
+9X5cTIVia2SVTtfqrb6XMC1/T7K1PH90QXtlt3WILMMNJhLDy+kCAwEAAaOBrjCB
+qzAdBgNVHQ4EFgQU+xfXDXNIcOkZxOjmA5deZk4OQ94wHwYDVR0jBBgwFoAUb+bF
+bAe3bIsKgZKDXMtBHvaO0ScwRQYDVR0gAQH/BDswOTA3BgRVHSAAMC8wLQYIKwYB
+BQUHAgEWIWh0dHA6Ly93d3cuc3QuY29tL1RQTS9yZXBvc2l0b3J5LzAOBgNVHQ8B
+Af8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADANBgkqhkiG9w0BAQsFAAOCAQEA
+OiwipeVJ4yK/hBF6KgfcCUltlqmoPoHyffzfpPjNBeYqmdaRqxJdbY9FaSrcbJBA
+hKRHfWYPCB03TnWstmfadgzbC/8mITx56Cb2EXpvYhrAu8G7a54h0sIhEloK/FAx
+Zdgg3Y2tnPhihQ80xdqtaZRoXqjiqKq1p7IHwtQZiFCCCD1jny8qfZLCOYx50/mJ
+QXk8WvzPl0xsAOhp5Id6OAeq/6dmwjUBpZBzhwmbnt5kX7OKnuoVr3H+8X1Zycz8
+lq3znYqMaPWDTIQm6gnm//ahb9bBN0GL57fT6RuNy6jH7SRZYZ4zZRtAHyPogA/b
+gbBsXr0NrHh671Y1j4cOYA==
+-----END CERTIFICATE-----
+
+
+STM TPM EK Intermediate CA 07
+=============================
+-----BEGIN CERTIFICATE-----
+MIIDzDCCArSgAwIBAgIEQAAACDANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQGEwJD
+SDEeMBwGA1UEChMVU1RNaWNyb2VsZWN0cm9uaWNzIE5WMRswGQYDVQQDExJTVE0g
+VFBNIEVLIFJvb3QgQ0EwHhcNMTgxMTA1MDAwMDAwWhcNMzgwMTAxMDAwMDAwWjBV
+MQswCQYDVQQGEwJDSDEeMBwGA1UEChMVU1RNaWNyb2VsZWN0cm9uaWNzIE5WMSYw
+JAYDVQQDEx1TVE0gVFBNIEVLIEludGVybWVkaWF0ZSBDQSAwNzCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAKkiz7ifFip5eIDyKCNBVLtxSXFeuHBcLbcW
+25qml0ueAHhPRO91qL8G3Psay6sk47QiipVCM0Jn/IGb5IDOtmtZVWOIKdbSPBhH
+cbb1hBkGMaRJ8vVP4ccxp1z0zHITQItKgE1O//pcLs5F3GUKcFVBTIfISr7iy4lI
+CRp8tN5Cg8CWR0Vx4Dqpc4C/w5KG6i0MGacBE8N9eNYYn/MDohCG/u0pP6pJoiQH
+eekg7xY7PAebIDeFUPwmwBDJLl0OW5kowTwFeY2XyC1tC0V8qjCajsU+gR3cw+lA
+CUyxM73w5MMzw1sw/O6oMs0oK1vGni0PoJdSeyy2jIM/wzKaWAECAwEAAaOBrjCB
+qzAdBgNVHQ4EFgQUayeAgAqUHLR++8q92NHwHVKb82wwHwYDVR0jBBgwFoAUb+bF
+bAe3bIsKgZKDXMtBHvaO0ScwRQYDVR0gAQH/BDswOTA3BgRVHSAAMC8wLQYIKwYB
+BQUHAgEWIWh0dHA6Ly93d3cuc3QuY29tL1RQTS9yZXBvc2l0b3J5LzAOBgNVHQ8B
+Af8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADANBgkqhkiG9w0BAQsFAAOCAQEA
+jaVrmwy2kAa3w3lSFxxZqryZxRKahsb3PW1iZdeTS4Evm49Q4DxtIBC1+xzkxWqn
+3drhbWIs425xtSXalqhK/4mJyZP1R/9MX+hr5MwJK3XPsbR2QiB/tm6dslnk1i52
+qaCquKBjoInhLONVedpN+LkKdsyY9PMJFY7fUTvaxQTsw3c0oovcRDgJwyvFrPL/
+7p/GH+CxPB78AjNx6PyTjF11pkek/xgC6WFZXnsy07BP66OVpBXQ3kGVCTZyxsCp
+5KgkfBTpo4efaL1NIdGlCYG1yzvly+L38xzc4ZQl2F8jRNgkgJE7QLWo0spZfb+0
+QLgOwf7kYnVR0b4XH70nLg==
+-----END CERTIFICATE-----
+
+
+TGL PROD 00002004 OnDie CA
+==========================
+-----BEGIN CERTIFICATE-----
+MIIC8DCCAnWgAwIBAgIUUary8YM8QP8LxFpbwX9fOtWZ2b4wCgYIKoZIzj0EAwMw
+QDEmMCQGA1UECwwdT25EaWUgQ0EgQ1NNRSBJbnRlcm1lZGlhdGUgQ0ExFjAUBgNV
+BAMMDXd3dy5pbnRlbC5jb20wHhcNMTkwNTAxMDAwMDAwWhcNNDkxMjMxMjM1OTU5
+WjBIMS4wLAYDVQQLDCVPbiBEaWUgQ1NNRSBQX1RHTCAwMDAwMjAwNCBJc3N1aW5n
+IENBMRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMHYwEAYHKoZIzj0CAQYFK4EEACID
+YgAEvYVPp74Y8NgLj5VZ78ufL4Htrj1/6cPGGeMHVF0eceyleVCyGL8Dt7XlFwIQ
+oV4EigEymBuzHiMtf2A5+S40X1ThScIGLJxz4R+ep5ahmFjwE+1GRNtmr0OYROZB
+3al1o4IBJjCCASIwHQYDVR0OBBYEFLBm2Wl/XToHtCXBD1h8zuzxb/5YMB8GA1Ud
+IwQYMBaAFGGaCniWiAPMYZCopT+QbXV8n2lqMA8GA1UdEwEB/wQFMAMBAf8wDgYD
+VR0PAQH/BAQDAgEGMGcGCCsGAQUFBwEBBFswWTBXBggrBgEFBQcwAoZLaHR0cHM6
+Ly90c2NpLmludGVsLmNvbS9jb250ZW50L09uRGllQ0EvY2VydHMvT25EaWVfQ0Ff
+Q1NNRV9JbnRlcm1lZGlhdGUuY2VyMFYGA1UdHwRPME0wS6BJoEeGRWh0dHBzOi8v
+dHNjaS5pbnRlbC5jb20vY29udGVudC9PbkRpZUNBL2NybHMvT25EaWVfQ0FfQ1NN
+RV9Qcm9kdWN0LmNybDAKBggqhkjOPQQDAwNpADBmAjEAoqd5lTIhSdDd9PCRltWG
+rkKoWL9WtTTumjsyTUlVArNShDbcMzUem0kuF3LgVC/mAjEA9uq3U1NM3hXI8X7G
+97EtbtE6PwmHNhe6iE8Yr09JspaLlQBATP4q/XwNbtNrhD54
+-----END CERTIFICATE-----
+
+
+WPTLPEPIDProd EK Platform Public Key
+====================================
+-----BEGIN CERTIFICATE-----
+MIIDwDCCA2agAwIBAgIUC5Hmqvoik8flKVPI59DmCgzxcxIwCgYIKoZIzj0EAwIw
+gYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh
+cmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg
+cm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTQw
+NzI5MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBlzELMAkGA1UEBgwCVVMxCzAJBgNV
+BAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y
+cG9yYXRpb24xMTAvBgNVBAsMKFRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIFdQVF9M
+UF9FUElEX1Byb2QxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wWTATBgcqhkjOPQIB
+BggqhkjOPQMBBwNCAARnlS667lqURSpg9pF+DERiHooaLBNLhcDmX78UENUaJbli
+hshX290QqSCDn/i2kc+aK/Dfe4srFl1s41gG8fNIo4IBnDCCAZgwHwYDVR0jBBgw
+FoAU6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFBRRJtD9tT6ZkH1vxv8b
+kEVbnjJKMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMBMGA1Ud
+JQEB/wQJMAcGBWeBBQgBMHAGA1UdIAEB/wRmMGQwYgYKKoZIhvhNAQUCATBUMFIG
+CCsGAQUFBwIBFkZodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JM
+L2VrY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMFwGCCsGAQUFBwEBBFAw
+TjBMBggrBgEFBQcwAoZAaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50
+L0NSTC9la2NlcnQvRUtSb290UHVibGljS2V5LmNlcjBNBgNVHR8ERjBEMEKgQKA+
+hjxodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9F
+S19QbGF0Zm9ybS5jcmwwCgYIKoZIzj0EAwIDSAAwRQIhAMpVy2h+suyYidBvlcW+
++/BS8K3XIf7/o2MJqcTjaTBIAiBAJUlHfrQIUEVegRqtLggI7w8TZ4yHhJQodKef
+2DL6jA==
+-----END CERTIFICATE-----
+
+
+WUS AMD KEYID 578C545F796951421221A4A578ACDB5F682F89C8 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAq8eoyzKCHHYjwAAAAACrzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUwODE3NTczOVoXDTI1MDUwODE3NTczOVowQTE/MD0GA1UEAxM2V1VT
+LUFNRC1LRVlJRC01NzhDNTQ1Rjc5Njk1MTQyMTIyMUE0QTU3OEFDREI1RjY4MkY4
+OUM4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuB+qU+JHINdzN3pp
+T5CvL74PPXQY7J90jmFOQtqef0yQz+esViWqrYpGhysO+gbhJt2xkSGQZowoWsAr
+Or99GX9QCmWNNmISOphBvMpb7oDu5DFzta9bMZrdvIIlkSPF4ObF+Sa7soBSkJij
+p1eBwHghORUL06wOKTwwH9vQKQzMwpmLyUF8J2o77OTLXH5Is1RwsGQVeXgL4/u6
+PUzLscqdjJ/TNp2WNKu5PxPnhKjunWwpBn/s6w3GG8IpiXKovfwboEgIjYMG5url
+8f4ybBV79w68ycnwKrKZvDkqMC/JKrAYC+k06pyOC/iMb0jy//oU4CXRLCMOf+iX
+YH+/Q45pPuGZoQWfg5OL+sRgkc84Ju7F20DHbdZfDzffV2tffFCeYhWLHEzuiEHL
+UNCWr6tJRS8NowuF4zhVRP9QECSKK4XdzrWFGqHENyRa/2WYGFKqcPAC1wDkldoI
+UZ0lxpvoq4MWZ7dh8st0DNWrM46ycs/iRKMFA26+eyqJRObTL4NFnJyLD7l4Pz+M
+p1jw0ETLx8tWeVzep47Z4GFbmHbwuyycCc+xOlz/AIn0jsYsZHOCkR+q8JpaWPHs
+eUdQIDuXUgCxx8s3OsgqYjSOIdzIN43POm/zAvXEzVazvH4tq32Pq0+4CE525AwA
+5L7Wg2CCw+AKgg3EySeR3q51+6UCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFJ+doSdJBnh5Hxa
+rCr2RgJBACGqMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEALKxyT/6xd4bP121UojOKMZELg2PZwJdd5XrwalZsFIeh
+Y7q2qmr6QWYb+8DD+mpBSr2WPmxTqFeHhTEI//b6f0FgwbOyP0YakZzJI8lKKq5c
+VtY5Bl8DuZd5kkZRrfg0paUSJURcH8MaTowrvWAgM8EI+Y2ALhDXzbOiAG+Gg3SE
+fsWOXixDU72fFnApk+6xKZfZ51HBsYMpNl1Dn+em1GUlcHi69K0kByAXq+R5VYzT
+9TQrLxRmPYfvbLO7+A7bDpXMMzXoIzYUd51dTPueEKLERfX+rKGOPLXYHb4+hQ5g
+sUHqDFFD/HTsattFPgLxxb6ZUJ6dxPjY6g4rZ5YgrkNRuHLqw2Eu2QTHBz81XJWG
+dmkHmA8H8ZLbOG8EmPKe+3TZnZUPjI9VQ30C4bOyI1Ob75HVA8IHcZYqO6X5Rp+9
+V9vliymSna/SV3og/XOKfuUvtyL7zu3NE6D9jv8nAmzp30esHcCqZeU1sFNYfcBQ
+ndqRXCEYeBX9i8GAjld4ucJ4daCuXtqRRpHoDn7vy1rxp3qdM78ej+aJtvq2BodY
+eZfDJ0f4gkUUHFQCK2nUzJNaeQYH4h31oXYiWDO5m36Tz4ZRtVS/1TGZuo0hZn6+
+J7ban2z6vJjPwTg0dZWV2xeKy3EhIobl7Mn6KqdTAEFud+EcQfwXv4QCMzpi4+4=
+-----END CERTIFICATE-----
+
+
+WUS AMD KEYID CBB3F726E72C37BF7E9C6CFAA6EF06F88FD1FC4C
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAWoR1wl3bZo2zQAAAAABajANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDgzMDIxMjgwMVoXDTI5MTIzMTIxMjgwMVowQTE/MD0GA1UEAxM2V1VT
+LUFNRC1LRVlJRC1DQkIzRjcyNkU3MkMzN0JGN0U5QzZDRkFBNkVGMDZGODhGRDFG
+QzRDMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx592WnuZH0dj5TVq
+kpmmybRPfb1BrsoPCEas39kRB3G1dudaMCoEMICP5OqZL1njmHFBcT6Ig5WZCzgf
+5iPYCm8kUODTR6JYjztVQ45bTAlZZLzuhGCaIuFWyUmKT/R/Xq25j/24Qp6AAJr8
+QABkjAJCWKUKS/CUu/4TcyKLvHXH+cn5O5oJXYE5EfkiWpPjFySpsVfL/r+EtvkS
+Vaj1t1a7I8zoZ/7+OWcBgRpbwEHHE8uXMCCURZmzj24KKKlGIPaxpEidRIfv6nN3
+nJJ+msIifWgQCyfK4YTZDKRTNpXRfLnhXhzKDjh8QvWAwNhVVwFZxgoc9J8M63aJ
+rp3XzQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUeXZCiC59MXA6+Orqph7mHcMdfIIwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAWPykE
+sMmHrRPqxcc7fXN4008rTGi1jZZSiCNbDOS7Aomung9kxaqBjY4/AgqNs42j7Brw
+fBemIlLW3L7Sk7/0t3+VvHWvUhSndm6+MqoFn1AMWYfgJV8vXe6zJSLnrUuQP5j8
+qvDpEKrN9JE003mE8ZdmjTOOFuAuEFDjJaWrXKRH7phYQJE9jYtciWg0jXwy547H
+UTh4QI5Ak4OBuaIpBO96WhFK6XVIGiopT1QMa6f1zV38bxsrV2k+LlfubVjju9t6
+mQ1qLI35xZc80HbyDEdjzeVcEnHQI+WwaeZDVfBDEFTA9pi4F1DcCFo5Aexx9lbU
+DLcqxtpQx1nESSiDEca8GdOTU4MpHxq9qgN9mlIOxlpkO2pehCFPDrxRr4h+Ue33
+R9IC+vGZd2b44yj0frebDyxGsSCkmpEIdetBPd2Um4O+GPO74WbwJULZXOO3eJMj
+/dnQO+i0IScqbVHoVdLFG/04wVurMUeVH6k+OAdnY59wF8zC2+qRokidpQlQI5Pz
+vQa2s2k4fx+2hWDP9hsWNz7uKqoSmoWAOJF1ZoSryLs5klUNSEQOsGKdHLOmZU4Z
+3K+lz4P1K5X4+pLAZHiPUGOF4sbocae8VZKPbuVsFqAYz+1CAosKgZnUxjGindI5
+coPU6OPCuZjh8tUusRLHtc9Vwn0XnGY1bmEdOA==
+-----END CERTIFICATE-----
+
+
+WUS AMD KEYID CBB3F726E72C37BF7E9C6CFAA6EF06F88FD1FC4C 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAoW+Y3z4wm7YjAAAAAAChTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAxN1oXDTI1MDMyMTIwMzAxN1owQTE/MD0GA1UEAxM2V1VT
+LUFNRC1LRVlJRC1DQkIzRjcyNkU3MkMzN0JGN0U5QzZDRkFBNkVGMDZGODhGRDFG
+QzRDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzWa06N4sIcTQ8ICu
+wU2yxLVpz+CuS2vgRoMauNMIMEYi5pz82MAniOnux0jGua4Nmd5d6UFk0ZTSUEqO
+bl96gXCH1BMkfXhu6Qp9T1g7FcNF6M8suSPVL7y8TwntKr53/jpXDps67b/5GJPb
+TghrzMdqoouQjC6PiLvTUHUJnm2W5zELiU+1L+mnKluxTDZE73BsWWetuUTPF+lh
+9j4ppolskuqYxXcbr9ln/dYRnUD8hox0010XwAWm3yPd8WZfU+DfQ8V5BrZJiqIO
+mHuG3eKIsvzdtYpSWVU/iQvAa0ddX6Puxp/1ajuQoDrVm1iZW54qXPi/2Jkuc3HS
+pxpMtAmJVT5mtDkVhk1+kJdYVoWX2Sy+9CYIYnTjqdRI+YtAAFTxh6XEF2vBO4Nu
+QTg7OaiQpqFG6vgvL5tYfQZDb7arHdzzHAHLD6/mopHEUDGOYVQ6yRwWdnsaQID3
+56X90R1ahqDP37v4AgjcCzuyLox3o/XKU81p4yITKnU1ZTBaH2Syzh9l2YKf2oqZ
+Ne+VulYflW/fOS5+jOeaSAsiDscHZB2eHsnSCBnTy1LnuG/Kn/ljuFLZV7cEBAff
+1MPtVxalw+dhbh7qwD5fgoD8dovMwXGK46AwcuWPPtLGIwRCBA+DXpbERuPuDHhr
+dLLZhLPpMXatuG0XsZOpHBaTSocCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDO5mzXnw8RZPHn/
+pxBQFcaC8YxPMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAVJxckOs/tneXgknkCwY6NMlftDah3UsMcmXVnWdxhKK+
+OPygqh5IvWJdB7A9vEXBsYEVGMbflxH/LnQ/LwEgv9hMtaOvJm9wCS7S3mDXrVZ6
+m7PD6qGMbqe+4DiHj9LUaMdDvcis1xAIr/7+Bz8tXsd40Z1q+AHsaKOg2KeqLq86
+xwsjV6YgIv4WfaBfxJbmmnyP/qSb7oF4Zj/TUzGkfUAv6JoN3siC+gAvD1QrInWP
+RyQDXZKw4HC9UQ9vXQxvqG5t9vmOlnXraDGRFnZSDuc10ehuwGJirsrE/LjYzdoY
+eicYDgzE7Mx+brJXV3eSPSfJFbpXfPy4+nxhHTBOLaTqtLHolh/YyXgdwOmBgo8a
+KNUrKqzn8ab9VNEJBB6uB298moh9Z98nEbJyDZAPXWy3CCRvhw/VVoNRsdb/N7AP
+5+WlkNa0dZi4CxcBnc7HKgfnR5M9qDUdnVsXH49YfcLczCT2JCMKjIWoLK01ndsi
+Lj210n38vfPpVhJoZZN9Oc6jfkc/bTOFC3HU+dzIS6oFHlBoEZ+bNiSIYlEZm09y
+e6bxiLDRjatSQZxOzgPEg8aO0H5GbgpqDhvUqR3ZHLnIcKT5BmuZS4YBcdYD9YTA
+U5DBp9ATN4VLmBA9qk6OLwAXQqHO/Ar4YFvwhPmfC4uF2uAE49aXpBzJxVvYyrQ=
+-----END CERTIFICATE-----
+
+
+WUS AMD KeyId 578C545F796951421221A4A578ACDB5F682F89C8
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAFhvt3lr9LiMZAAAAAAAWDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTEzNFoXDTMwMDIxODIxMTEzNFowQTE/MD0GA1UEAxM2V1VT
+LUFNRC1LZXlJZC01NzhDNTQ1Rjc5Njk1MTQyMTIyMUE0QTU3OEFDREI1RjY4MkY4
+OUM4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnrkwepb3eCTJj8Md
+6qB3kBAroPXdrlxPD5b5S5jlaLjEND9TjMkSjRQUy8044GT25p3Jkz41MZdMHraw
+dZMkw0gFUVxY6escXqWtCvx9bA/YOLkpAB8D5ktxiZuWJPCfBTpoJe1pkJjTduLH
+9zQ1IC0WXb1irjkqsBlj1gUT62TS2rC0okkLDsSTsXnBWX5tfLeZ6fV8EnvsvGd7
+0bO42HiSGbGbtXgDF6JOQ7LxAPvzjKxgbYwsPL46pnGdbjlVs3bbj0MKLmQpfXat
+ID/Kn5NfKldNMD+job4+Vi439PUz5UBe9ixndl+2o3nbMlM+49CIrNog4qhBn1Pw
+JSviGQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUCwYOtF2dr/s/aR3ZFWEFIc2lQ9AwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA6+PdY
+Nt3We5x21qyfDPP+jnEKRoLlMspiNz5VrK1WQVAaxUDDKbQe974EqcmL6mS6iQGa
+utu1aekB9W/GA4m2EUrLPGToUzxdiB8XP7pV6l94RuklSH2uaGdlwU4/wW3ImTLU
+0o/R+FpqGqzHLTOhWPN+eyHOsHhijOCCB36sO8Hj9cjhHmR+fl1YxQMK4lVNbsy4
+MdxX7Ca2AdoaFoROV02g7GcV2zx0SSpsCSV6bKbaBWGryrFxjyj1rb7R8gJ9FcyE
+3i9SrsKrwC8tOB6knSqJhGgojiI+/wljBTZkhwgNT3jc0zT5bf5RgkT/015XfgxW
+bZnmtgRKFggyVKKzsiL0sNka7ekiCKo1nVGETJfojp5uLjZHXXMaQcsEZY0qalpf
+5z5b86qZUjxI61aLhoLK5nNZUIzC55keYLYmxtKx0yMprBvpT/qKcGFMWCotzTe3
+Z2r2AK1eH8qTryIqvgCVwPKArV2tvAN38487p74yuRC8RlOPwSbHrLOUZNopppGG
+oeiqC9igClx6QsfI6731/b1B5rIHBKqmiM2+WHJ0i2MVAu9NFcHSYxO34ZUUt1gN
+d7i1ZLLEhetzTVm213BFy0pTb5IrrI294WdDbLP6dagQxi1Qmx2leTPW/96CXZ2c
+Dsn8ZppF/IJByQXbpnP8qkNNAYgyN/QGqDanEw==
+-----END CERTIFICATE-----
+
+
+WUS ATML KEYID 16B341E381CD5C3E799AC838CA17F1F7F3F7431E 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAodxKt3mMhCfOQAAAAAChzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAxOVoXDTI1MDMyMTIwMzAxOVowQjFAMD4GA1UEAxM3V1VT
+LUFUTUwtS0VZSUQtMTZCMzQxRTM4MUNENUMzRTc5OUFDODM4Q0ExN0YxRjdGM0Y3
+NDMxRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOsz6janSLT0BbKC
+CbvEtAfpKfgtawcvujouIv/jpO+L6k37FqNw+o1X9cRcV+pPZU6N5KCiRYbVmaRQ
+HB7t8TD08T8O1BCSJsghJx8KzKIf4DxQIMO8a0ZDF9urIb3cQAXmtTddzTFZPDxh
+feUalj7zyVD4t6lkQZQhyBB3tKUPGSEbLSH1TwTgJg7DZOnKv6/pohXEDFZxpZJe
+1Ggc00PhAlzj9uda2suq2lnbU3MJbuQJcRs8ifFOot3ER/iNNwoS7hFA4FDihDn+
+UnsFcN2lR5eIFF7A20ovfGiXRvrUGNjCcHKpms/fe63czHmtEXog2yW63tQuZwTh
+nNShkl9ZtTbpDhBkaOwU7jEbyL1m4xI/ucT0rgRGQ5DctE8ZotUVSBw0SxsskMRn
+DLgSUoRIxeoJ/I+xgotVG7qW4dbfUoJheDq2pp6aZ1q4On40f0x7K04RiYKsZTIC
+VNV3ejNaH9nzo6ABJo//bZ89zMK36+fjfF5tFsFQQCC79oNWzlwzQpGrfrrfmSGL
+pkbakvrdxXcujnuL/BkF+3rCJxekm3BqzkpugMRJf9jrB+tjC3AXQnExAGgHiFiJ
+svLLNv2Y9G6wBDnJwV2kuAzfXcktN9AG4jHnDLQcl3aAO7EkEZQUeT+hs+MFFRaI
+Yk4NZdl4mKzTtAPbSbThFfjJPCixAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBT6OoKh/+iHbcSm
+BAoiBbpdFPnUrTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAGdx2zyBqdf7N8E9PsSpBddFYGE+d43wPXw6aSWiNDaC
+aXyaxprZ2c8+byXjCJRKdaICtj3MFXmeUtyL3ZM9VIuyMYC8r1hvFTFyFRWOdSTd
+ayqhkrQuOCD+W3AMx+5VsHfTlrsTa7jQnEFXGgg14cd/QBvyssMihaW/1kyMubZ9
+Nd7M4xf/XzMdUXEq1r6P/rPf1PzX3dgtG5nYXrURaUjC/fov8JKKKqAcgEN190Hs
++BMWUzPc+fRst3Grihie/L99ZfYq4TEEKbL2IlhSlvdyxVniQv0SIrOYtLHthKmw
+pEykzQDLb81bvhFmQKOxLOiU37K5xCPJewJQvZhhaBfBte4aMb8T5kX66NglVf/4
+i1ZFf+QCu4YcAOfPQNclfkUUkMPMGRksEdGSEhRW15vM9MUbPmEJ1JUELmFNYu9b
+myRrvf9T0m/R5ajVEnWzSFbVCRww1SMbsktPqBsET4kTg7oiqyrsS8KLTb8zgeMV
+gJQd6EVJ7q59vc7IvD7Nce2zLU9SPL/AfW6tPqaGyW9puAz63nELPsA8JiFhM+/W
+gXXLJfP9hNranFnCciFW0h4UwgRxLvBXPB5/XY5c3nzLr80HoXohS5VoIJmMac7n
+MuyHg+KJQUcCDDn0TBCNwKrVJMu3Br63o1pswHTY9oAtd9cHUTjRZgxZ6VBh78WC
+-----END CERTIFICATE-----
+
+
+WUS ATML KEYID 277631D059FA7A9553FB59DFD6E85BC122300FF0 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAoxY9n4u8kANxQAAAAACjDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAyM1oXDTI1MDMyMTIwMzAyM1owQjFAMD4GA1UEAxM3V1VT
+LUFUTUwtS0VZSUQtMjc3NjMxRDA1OUZBN0E5NTUzRkI1OURGRDZFODVCQzEyMjMw
+MEZGMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUFVlxnd6vI/STK
+PvRLHD4/tMyKMTp+1x7sw6fQxVwoAqAULiUX5JBt/sdkVhP/LAvenJ72loXFrg3u
+xU36WxVDV5ZK46+pnkcoFGQgTlONhgFKRa9NC7mZJDbPyuEvR+bC6hFn4lVm7h9n
+V5Px+RHgwsJ9CCuW4jU6GchCktLI4sqUlqhdkyCJJpopo1De+zQ6URccDnVY9IWb
+HyGPuOW+c95esc22UhiBgH//WRvgUK8frtBaNvsik3PGRTg7cY4nXB+erEOosdkD
+No1uzEHo0cPTsOa06RAdXTgyXj2/7SmE68qWGr13Vboo0FwIBmbxzVD0ECKlDFVK
+YT0Am/gGnlZl9lylKR5KbpWoyw9S+rFWmcKvgSqt5YgcMY0mPuB6vFe8WdKoNppQ
+DR3mFyCJ6hszwhPIcIU3OZNww/g7MaxSxGRYWYAv4mHA8HX/wvDAGUHwxrrXM4y0
+rXKOFdIr27Wgb9YbwlOxam4KZO+FA1HUG2zzMjxJXAhhWIrOSVLuzQjZX8nOS+Yy
+2Vb5VYf790hp/Ahsedr4wC206ADBJem23WZOkHs1draQNh48u8ErSN/lrBhBMpy2
+eVn0rTzJisG1NvMVEsuR2CjERzB92AruFKu3SunWfQkljBVUTulS10cUvyYn3H4k
+PjWrN61wRenrQuXlvFu0/Uj9W6vTAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSu/4h+92tqxORt
+hj18bPzC/0HK5TAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAJBt0/rwAfq/lOI3NpxlTbPS4G38pJGn3RYnq2DwmILS
+qaXYfVXRRtDS5kZdv2/pV2GBuHQE0GiGdMbs43SDwgaEpyaJLULdYGWke8IDJZKR
+a8Gl8ACIyEC83ZcO5SeFZHPecaPizX9PXnHZmFMMdYQeYNMWkkozky+Em4Mm7olG
+IXr2l9PwW1VimlV8vLgvE3tDLDYfvPkmITX6mZy+2HYqR/KpgH4P1lX5pzy0VoZQ
+HG5Ti0QOrwjxFBWgr4NiK+g68JeW1OukRiDPKfUfHE59o8qilGwOxz0ZTsREfEdu
+PYcMWP+QZIwVv7OqyRfza4iRavoRWa2Bq57VXZ0mdbvK8WGHdga2nVutBVnR2Y1C
+gtO3eE0bLEvkGJ9/uaem0Jr3xJ0Pty5rQ+dUuYiJDevACLE5vs3fWTvKjdZXVLCH
+csK+jGJ6zrYm7v9Ffl0PgdfEjf5GNjHTSbPgYfVSJHcIo8Bs7BgBFA/XQMARFrm/
+qKyiiBGob4oHmALS2Q7ztOMoOw9SfP/c+fM/OiZdcosvs2avURfxa9NzmvdKQkdH
+y+FwywkPb7qen5xDTAGXDQOLXzd1ueihjvnYMzsVLYlJPhMjqfyDHVYam8/6XpoU
+xu944pNLDo66exmr+4u6UXL+q1ASLAom9VypFz7AW93Qmxi7lwWJvlM/YVkTdP5D
+-----END CERTIFICATE-----
+
+
+WUS ATML KEYID 2D605CD882B2BD716CCE71C90BC774D3D5BCB1D4 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAoYLkkqnG8joiAAAAAAChjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAxOFoXDTI1MDMyMTIwMzAxOFowQjFAMD4GA1UEAxM3V1VT
+LUFUTUwtS0VZSUQtMkQ2MDVDRDg4MkIyQkQ3MTZDQ0U3MUM5MEJDNzc0RDNENUJD
+QjFENDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALoEUVY0Ts/k4R6z
+FMMd+1/mKK6s7eBBXqTo3oJZKiwIhCC7aOvvX61mkapTnffEacHBPzgWWTwLBq6G
+pS5WQQLbmHL5i/UNVCbY29jXMAnLTTWBCHelnwps0hoCWxhQhqhUZvuI5a6rtByS
+z+IKdVjMgvdxGAuOJN4IJZtm4tsPjaHW95v9hD0TMQyRTq3Qt2OfnT5BlkQYkD60
+lIZetHNnWVLZYa2DTdycBPgx+YSRmD9BwzdepH2nMSvHLKifmWLSRZHukmUN6eeI
+QI7Gdx6Ca8UTbKpdyur6MudxTDMYHGdid7tcCj5jYZDbqlHSCQY5njmgaVli7ir4
+KbBMOeYcWZSSZgq73n7xmlVJHoibzi7Fo3fA63TRIV/Chs3dcgNjCmTS8nia6Ie1
+v99CLlENkE/OnEUUBMWqcnw9DiiJ9TEyNyN26Rc4ft3a/Ed1sf/RQdJCfUbTfbdU
+Ijuj4b7mK0vwYza+w1dIroErLLD2o663Qn9mCoqch7JYVdIE4bEKigUrgBvYIC9f
+Vw7fxqDo+ICJGodqXUQAFuKGelyEXqd4M5yhjOE2F+YDpHw946xWXDVB/azqwK/b
+7qNM94g59CSuVGQi0ibxUX8RItAYdEyIygtht5lWmpe6zIkK6dfCWCYF1UNbS3yH
+fFeYdEVzVN+WLodfmqP8A5oV6BUjAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTT00BpubpvFhJP
+9zHOT5tK8E42bDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBADjBp6f3EwzvEdpGJaGApKcc9qHj+45psldyNEKAwZtq
+9xaJ6BXWXgSDFe5R28dyq3xPBLEYxilyXOOVXM8rTCFcOgUXFSET6ItFVLM6KW1/
+aMdASdPXQupKkoiKyMyKAPPAeOPS7+tAIQXcJOGhJHcpGPG98LGN1deUqrrCVVQA
+ChOvXFlqYU3992mI1RV3UWkurU5lLpXyPCliNgm8CJbTi5l/nhtFEhivKFvzEjhR
+bOBCyrWGMzASb9qkGLSYaxYXQrIqmCAh9mAa/UjprAlJA/CyKIyr18o7m9epFGpD
+K4sixUomh30lvJAqBmcYbKblKHqMKVINGk+thZE2M6n1IGrPiAtfIfHEE3vm+zlg
+ujwlv+RQgQXbj4F4EPm0BIjwLIgkVCvInOoeWqD+K3Xs76y648Vc73xlV+B6jpps
+fgMDO9nW85zYT4Ql1Zr9K9s9aajm0aGMjPYIR5BKIFrJSCyVmdHUmpKSwMfY3SJI
+OCfZsb131/pISgfqv8+pVUB3GiOb/FF0PMfxk/lD+d2qwZAlCL5LaHtPiNwRfO4m
+QulU4+TmRhc0atLcx9qVS3tsTaEhgMTeSJLIUAm6US+Dg2dUqVHgCWKAfQp7QF53
+s/KAxtkApYf8lPIYGB62QHXut5XwKahxAyO/EPCTmVKgmhRngqI7mfqr6hzyQbBj
+-----END CERTIFICATE-----
+
+
+WUS ATML KEYID 35AEE736C9B4D2861309E7815C0FA4CE40D865F6 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAogeasmxkeWYwwAAAAACiDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAyMFoXDTI1MDMyMTIwMzAyMFowQjFAMD4GA1UEAxM3V1VT
+LUFUTUwtS0VZSUQtMzVBRUU3MzZDOUI0RDI4NjEzMDlFNzgxNUMwRkE0Q0U0MEQ4
+NjVGNjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKQPobowXfeo2eOB
+MD4gaqNrbamUX2+85jPQfId3c7IzEoREYS/KO7hAavPwBrV8Lior6yeUKSqBKmUm
+2JQgnabNb3s6kKooZJwJaiyg5s2dzZemJgFDOQpjO5lj9Gef1IyvYfU4zPRwQYqj
+Gb8oyBLEtS3QMVno/bXHi/zB0X2FP9kyEPPCrfo5sfwEYSPzeOQ83ZVKi81KRKAn
+L3IbuGigLXF51DTyDuDIbNXmsgzv5TTNPzBxCUuW5VUlboMx0biIkDchMBW1D0Bw
+w2l5W+zncGSnfACc6esYhfXLC3bapDj13vOSgfo3lJxgKfP53R9HF11BrDazNiE7
+XNFSENy9SPj2YQNAkidpJ9HYRxF1wZh0Tj4khB2Oi409lPMZ6E2FBeUXfP25IH+D
+5mmfJM9+tQ65ukyJA+kKGLJCcoChXIhGAD+LzCEz/mD0rpADw5d5YpmEqxvGJXYt
+aO5JuIPjoJx3BDnbkT1k+610bT/i6glLgErSLh1beWismNMb5XlkVKVrWLBskcW/
+P3pQ5DQaN1Yf0YRIib+DpbuwBNpqn8f4A/CdittmKXjaxPbgapzOE3yaMkqCBFkZ
+l6/gLh8g/cXGWGISB5gCdPS/tongHU84FdbireyPhgyRscX3t16/w4cCeqoOb3HI
+x9mElu562o2LiH65EszYiLQAVTYBAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTvlrMMl0L5GPq6
+5Cllds+UO2SftzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAG9bweIqRkz0pZS8o4sGkIzroQrWAIeIG1js5Gt7n5XV
+xL5aIj2i0OzsJTqO2M9yZWEhyEznDCQupSrZZCql8vMQ9ogW3RYRxO9QQhjjlE7E
+F2i/3iZYiDxWyXCIvthEsoZTdL2KwOoMe3kng7MX3abWKJh1ebIrIJ5AwKEvRAmw
+HChfGrATt5cfFoqsDdCRwQ70/VfySDYX1cJCQQd7qcz6qi19/2C4kM/8mpVKvPGr
+HbjxMg5UVENk2Tw2Mi7h7UPtXFujFXKIzH/f7G2Iw+jrrEebgsMdF4ZNm2N4MArG
+GiXTFf8nvvGwW5cWHFNElu2qp2Grr4O+WvdpXi3uIV2ihSXZxDoMbJ/ue14ASOw/
+uQ60rTxxj85TjISs1lsBdx/EqtVf8HLyhSNCcr6g9KEAHNAvkCNyR+a41ziyOka9
+cG6HIGSbrzNlHAh4sJ/uonctu82YP+MSN5JZjq+fhdZSCXIhVSGh4taqN9HAuBf2
+wYmgPRns7rifqAoV9Mgzge8skODzxY302cAj9xoYZ03lAW51+RmGWBsyrOyG8Gk9
+BYgtWvq7HLxRhmdYCd3SBcmYScVQ179dp7UskF93b6bvAjXrQU17MRA7/IdBtqHK
+Oqu06GsSEHp2jLsjsMMhnlS8L8GZsKPFhTdF214xTVzZcG8TevhHsIOIxCHXLfLM
+-----END CERTIFICATE-----
+
+
+WUS ATML KEYID 4666DE766204E74DD29BB4FDC58523A1403D6A32 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAotkfvyMG4yUwwAAAAACizANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAyMloXDTI1MDMyMTIwMzAyMlowQjFAMD4GA1UEAxM3V1VT
+LUFUTUwtS0VZSUQtNDY2NkRFNzY2MjA0RTc0REQyOUJCNEZEQzU4NTIzQTE0MDNE
+NkEzMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALxyuHZBjrrUWKME
+ppue4AdbJgTrlLYIZ0vwu14pKHywNKIGbRhSPWZ4T7D0/98P1c1i15xjFP3ULQXE
+PPEqzaOE+CiOw+vUZA3vlGpu/zGQsrUSrSqOts8SXR3RqeIVgFMF2wUrtnvqT7FY
+0zypwnxHYuVeHdC6w1Tu2gvduC0djJxqpZm+rf9/pkoxRPoxB1LgPJ350Qi/RsKd
+rE06mBO/lKyuowjIvTWb/ih1BPsqVEBW38qN/iNwL9UGeXB2XaF15o362kp3YCr1
+6RLH+cBgRz43EoODJT8nI9BJ4Ko/YlhJ4vbT+PRUnzsy8uv0j8hWcpVlBZsb6vdf
+srbJCR9Vv6vr/B1dOIhRaO0NLmB++hZ5HIpEAIaczoQ7zEeMP9d1YEcjqZZHOsxp
+S4va6Z4ox7EfHkkrfeL36FFnv5n8W4ulpA3gFXix0I3McDXtGHwSCbyZzIYAwmOR
+BCCOptRDdSZIQsOu1i+9T4c/sEvygDcCB33Ep9bLNwgPw+HBywc7jGMubNeYVoNp
+EbZ4PpHczZWbAyWmGZM4CFATs+U9U3E6IaS2bx2sPNzvRZV7FVoNCL7gzWxYTkjR
+jx4UuAJepcNmB6MEeO1bfOM0aTAClAN3T4vffPx/wKEXPyjv5ueFBqOoafozmdDs
+VvxBK9vstz3pP2bkg+XM8ECZ6OMvAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQ0bYcg8ivbHFNK
+XgZbR52Kq8CmZjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAEsLFKoR1tFRHRHEKVFfq7+ad3SdFQVxGWmuqvJIy5IV
+r5HlWWxXSMDzWtultmmPUBqHi+CHcWI7gXMEBfo/Wrp+6cI9WyvXSc2EPKOUxtsX
+259F4ZvUKsRAyCX6gwcrROP3aqFVHELOzsGEPCVW1LzuF9xuWMbO9DuCMrMD+ou1
+vgyOsDmPNu5T3nT2clMjkrq771uvJM9UWu1pgK9ED7lH6GP9MXC9FmaAJEpslnI+
+RNjhfNympJLxLSDL64b89esSMdFmwqHp/AlmcvSIeQs0eg2sbziOKjZDvX8NCKW5
+JrfSHgWm8Uu+Yg5yNgVcbIOQgmZmmc6QjDqGdx3CymwnCsCz47Cb04QBYC3doe2j
+BzWMvu+QstcPMse6+3uZmPSUYz2FYP1qrEHRjiBCcygYaohsaOUn29UoKjKuDXso
+haSV5Pc//RvwoSlTTuYczgauUOtq9clKmaQ7wWQDc2bVGl6ThE4pO4Hysc3ZBQKH
+eVQo8HQfjd3k+CCLiDvUQ3pam+lRZlzRzCU6UVsgid+IQ1ugF8SC1aQJE6+BYoxM
+RASeKA+e0VmcRTo/1PHwnJdlFFonmtM1wcFXwskLUiMXyREzwU3hdLCKYJtdlJcr
+d32cdmua/Y78QEcYaZb6YXrLZK4E80vANmT7Szwc1d0JeH0wyROH5nCmo74Ie4hF
+-----END CERTIFICATE-----
+
+
+WUS ATML KEYID 55F4DA39CA65B6681F2B7711BC3EF208A8679D1E 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAol/Ff3Fg+0KqAAAAAACiTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAyMFoXDTI1MDMyMTIwMzAyMFowQjFAMD4GA1UEAxM3V1VT
+LUFUTUwtS0VZSUQtNTVGNERBMzlDQTY1QjY2ODFGMkI3NzExQkMzRUYyMDhBODY3
+OUQxRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANbh4cK2jnxL+Twu
+Z95Q2RI8rfiOprbcE6dEd0nmcA6D4SFehy7A7iJ0Cty65c+7uRVMo4nghBMu1Qsj
+9uNnge//Zc2yKCuDDnREJ+gYZNRz9D2FkO5vgK2w9CHFt95KlO03cd9KNP4nz/A3
+rNF2J/eDARwVeJh3iv/08iRGV67Z0fGGdOkExZ6BQBda5W26L6YL7v6hSJiewYoP
+fMBVv5JPjvR4nRqMhwmHQu+UaGbPvtjzJgQsD+8u+ugViMMn5kUTQgeDhv33935X
++0KXIBWxj8wpbyJwmWIc60agHaDnG6WhjWFUOrmp03xN/dvhi/EhMtLn5MfvDiW3
+km5/elE+G2r1mdKIhpcVC5UL5hSSTWJk8qlSAQUkCFeapehAP70HevaeT/ehQNUc
+Z20HVv+yi0DU6NUMud1ojIwwQaGAJGZNVl5IYkDgONTcD8UpVsmrbgVuiKw+l8FJ
+KdqG7DI4u7B/L46tc5vVVL2nlVKjpoH18iEyL5p8cHhX6miiG42sbRjXN7MZfqTH
+3Ny70WGtbT5xvc+abf4RuYIqcPNaLrQ2+breUGo7CuPE55TbDHxPj39EFiuhVlmD
+UaD0gUEQE5SPbFSibYdO6GNzPHdBF5vqkxHM/JfnM92Iua2DxYMPzdjZO6p5XEO4
+AXTa2e4LLnL5nNlxbzQOmsrjnvblAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRtyfLx/XqfnIJm
+BNAdy4c2ZUdzVzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAFZQZdeqMvJFM0ny2C5n7aazugnNzCqdSeozZNS+wyV9
+v91RzzuG1CKWbIB06Fg9ISL8qYJfqaafr7yf6paV2B1AokuycOgCQxBwzthjiPVm
+yzMpCblaaxmj+DduMIfLJw8VTfS8ze6MrFENpaJeVQi05qxr3vQyqMsgfes4B1n9
+uikfR0CMIXAxEede6aKhwlQhfp26XggSkZjzE00NO+yKTZEK+znGU6U00vXfR5im
+LQubNQrutjyXiY8+2XIoT7YzzCLDwuaUqKj8s+QM2Mf5YDOcO2R583Wzn/UB1wNn
+fCzT5Nl9giqVcV5smFvlyihFLvOjFMiuLtmkOS/SEOcHteQ/eplPMnHHN8ppwfP8
+aO5ONAD/Ui4wae/skc/fYIPBXo2jwShgeCc/uhweHgtVQ4VeOtlstv/3JizhstOY
+L/i0HErVJ3zC8RbDi9H/3rlprOFnkKA1IMBoCdMWmC+1JYBCrSujl32KBPhEl3pf
+L7ULO+I+MtNe94dx7m/g8w39YDab2Z8vGlkXOysQrzbW+iLCWB2fnTw68kxHZPHA
+ZHRjQppN5w3bmNgJuOoksnu2Sgrm+VeJE1PvmxRKbZnHHpfC8cYxg+jYC2fCQQ/f
+dA/MMIgMgLEMFpp4E3HohRGsP1eqcdOvITcwEl/EvFpGBwaFg3Az0FYu9HznVFSB
+-----END CERTIFICATE-----
+
+
+WUS ATML KEYID 81B5D99CBFAC98C5D61A8EBF26A86A086BFA3ECE 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAorfGyBQRKMn+gAAAAACijANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAyMVoXDTI1MDMyMTIwMzAyMVowQjFAMD4GA1UEAxM3V1VT
+LUFUTUwtS0VZSUQtODFCNUQ5OUNCRkFDOThDNUQ2MUE4RUJGMjZBODZBMDg2QkZB
+M0VDRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANgp8NtumO0K/XRx
+JC+5H/Udi8zSK4ey4igKMEBkivr5pk+bwtd3YM1yObqFV49gXpST92e54LAt1eKn
+KNQN9QONqYC2/WxtIRynHbOolSV8+aaSMyuwGveaU1/rqeh09XRbWSDj5Kz0q5Fx
+jgMyGRhRe2c/R3KhMWUk8jtLJA/pLe9B/CRcj7qsIc9OKFTQb+zM0q610JbwyBJV
+OSTU4t/smm4lxFPAenGBpci80xZRbgHhVa7Xsvoe8zTSN3rzJlaWju1ZEKibgxco
+z1/syq5t7QtXCej9LV+Xbv2dgc0qzOFjVR3I29N8ipEEvkgP1I53wnv9k2jddbA+
+C5RkpTn0Ay8EO/p6cY91jBJLbpEXwX+6HGvj5Iz+id+NwwdP4XiE732bvoZO1xn7
+XkkL9gcS17Kh5HH0TvJzJLEPJLmRJ226s1qaaWLVjBUezpuROLJvuBrpN4YDebHO
+6kKWKs+Qz7nIwzDTagUartmWGr0t61Aa5JyrkFQMd+lMGhCp1TCYZYMErawlvdOf
+vNjISqHapGdvnzct4khrAcldLgns/lrP/Gc79Dp01Km8EoZI1COZyNLGw12xh/Sb
+HObvW1fWIbH+LtoBNFVQe2Jwtcc3j/of+cuh5ORL+R3E4PwPD4DbORF8/xsR31o8
+XSCx3/kFhDroNqPL/g3ssz3LJUwhAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTPfWRILAif8qTe
+1xEBA2ebQrIzSDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBACQ7SoIgQCFFh8Qux2oF8LLTr5H6siMJHJNYLUH6zcR3
+3NB5TLtfTjTRHRPsQavhcTYztv1sRO+jfg5BvFY59DSwzyTLhcOsmypCVDuLxG6f
+zRZBYRJYEk8rFcj9KSj0BK9bRYXT+qSg38JLwMvueo1TEF2xH2PXlmh/RMYfXqKJ
+4e9J+LSgdlqRkVt9T3Q06YCAdtxJ//iWaeDhfqL+1dMS5AJLZGZCBtk9vlwewvbf
+CqtQvUUFNnACgi5y+CDPh80zUpingwSSPYp4FE827gucggkpwn/ZhZn7ncspq/xm
+ZkEFNVp+uZbwUruY9IXp4qKTEFX2KAUBISkY692SMoyipI2Euuopv8WfycFSdTAh
+cHyP+O2zm5/JUiMKj+pvoMDCaa0OmYGZ0ce/m7IkBcRTwLqGxcePSFjz5RI8Tqhs
+eN/brmlqaWUqQpOrS/uCHQp5ErTKUm1L5sg1JneTXlD5ypA8K6e9LzRNpdyZFQzR
+bnLaezj+qFcepBBHj72UHLO0/EhmW/IBav2K/luZB3vF+4q8VttGwL0ZCc/TXKGM
+xea9kOfI8LEw1CntAqkVTz7J1O0LKX9HqrKFQl0t1tFXKAPeNcdaq0tn+O7tjx+A
+8QwhUnG+81Wdn4d+cHF/VKzV6ktHVCW9l68L5SiMVxLoCEEcXvO4wdlAZsqa4yHm
+-----END CERTIFICATE-----
+
+
+WUS ATML KEYID A0854BD197F8212FACBA38991BFDDBF5D13CE9CE 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAo1SmGCPedUQfwAAAAACjTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAyNFoXDTI1MDMyMTIwMzAyNFowQjFAMD4GA1UEAxM3V1VT
+LUFUTUwtS0VZSUQtQTA4NTRCRDE5N0Y4MjEyRkFDQkEzODk5MUJGRERCRjVEMTND
+RTlDRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOlGW0GvwDdl6gBo
+sPybkwt2QW1ilce13JRggcWhbLv6PfLO8WjtU0xosoP/CU61cU203UZV72SI/wCM
+A64riXWKs5AaUOnDxs5xc9oPx7GWJvkPxeHbP4fYJaueQnH1Wq17jOOgxbZvE3Wj
+g+WalrgpN28iK9iGlnz3UE7La0F1d+uSP/qBRoMY7LpKIWpTU3etnrrXCDKxb0Ly
+RNA4yFG9ypS6A7RMJUFQJDd3NcZJYo1xOMXMB3ggls1zakU9Mv+7dXGMzNTyoVJ4
+AJ8F2X3tllV52JqHQtn8k3rCfxMlVUg9evLjiFJtR/SsCbwOu/IDKkhdh7jbRp9C
+KYC3w9ZHMY3siNua2Oq+GIhJmJnB9tae4xOUt9RdO2kIzeD09K6ig3fxhxycMpJd
+tf9PE6PX2VwA09kk8RFvYOg5Jhkfev1HOHK2u2Y6Cs+K09rs944frf0La38VP/mY
+n8uRRoOOrzKw82UPHYqUUdmv9gWeTOt3wRzzK4Mp5yAroGQgoZ+rR1HtYgdGvxYQ
+WH0afW8Vvlq8gXywSWxY3x7FCeIqQm9bTJzyJtbRaSBf9NfpLfPJ3OhxRk0X9aC+
+BI38ICFD+WHLgS3+CftG9ECvhZGUC0aE0Tc0aieaOYCKzcRl9khzBu/q2Xr5+wiZ
+1WSmGdxijIwcGExH5bCUnQ7Fs7A1AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSphAaGUDwSFbwi
+a9cMy7YCDTWnADAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAEIku41mxmXrWsxzc6/r/DGUm8zE3Stuui2PH/VG4yni
+pTACnVGo1+G0Pg4SAoYfYLYXmPAuTiWDHpW96ewKLmxapJ+2qWtqUb4HT1wvlFdG
+iSFi+ocUABimQEStuX4mWsQYhFcgdzcbyIhVu4Nq+AhxgMHYtQMquZ3XnG/tmOez
+KwMBvNpiHVGArgPRWyf9dZs6USDrSuOnju9xAHixOEcSN27VRcQsOatUOKXB+DMO
+PCmdJWxm7IZXWZI3WqBhU2ErhSSdwyJOL5/oQn3R+am0HNjNcQPKzgTWC9+yZ/TH
+jH7Kb7WTVlfW1x2XbSoUEasOcNtm0oxUl+z+s7m3lJei25qPuHrg/gIUyRosrs3c
+6UuR+Zz5UULthLuJ8OPhIrfHWPZ9GmLDjzYA1+YIp+glwtfOlT43MltHj9uedjU2
+ou6catJjiMNa96j68x6o4bZUrYqfmPCjEVddB8helferiIcJwX0qW9cObsmo0OCT
+ELWc5Lfb9EKnFdfNswkb0gFzRKvTPZWlkQIQgi6bx/YJO9B7dKfJ8X+nIk28Ao0R
+6DG/U8a4DeoUvlTc910C5MZoCKjoM7r0jV4qs83tHUs3R64Y+cKUHEr/iOtINt8v
+97eCpkRQYDIPbB385YNi8+k6Z/qWYJH92+DeeToMISImB0HmICXmte20/fRp0hJj
+-----END CERTIFICATE-----
+
+
+WUS ATML KEYID CD3401AC6E1C6F93DDD869D46A518311B3747895 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAo4N3ccOfQdvywAAAAACjjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAyNFoXDTI1MDMyMTIwMzAyNFowQjFAMD4GA1UEAxM3V1VT
+LUFUTUwtS0VZSUQtQ0QzNDAxQUM2RTFDNkY5M0RERDg2OUQ0NkE1MTgzMTFCMzc0
+Nzg5NTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOQnMcKeVyjUSEKR
+qXGRFaNjZhztvM3MfiqaLcymNbkI0swBDMOc/JNHKr2qNvp8VGOjdh++HEwCFBtE
+kU5WT8IGQLVwMIVcqvjv5OMe3oPzy53K3tv8dE8shBcBZSc9ccPzLYzYo5T+LUJb
+19Dh2IOOe2DNvJyLLFxxBJX013A0TQEnit31RrSUWI2PgCr3EFbXJB5Y0DpOC1xD
+yI94GKnYDCXeBYZCTmJ+UgbGnj1ciFSSk8ZDhB3M5bvQnez6VaYFxlLmHIqPsYhr
+HrTOAJTDrh6SszU0JliM90wHY3knpsjjDpp/qCk61pHZCgQauBwiqF0JsDgALEqS
+sxF4hdK1f4J4+UAOUg4Yw5Z+Nq8Ua/fGnevhPJ+t2QCHeIQDMO4clBdCsGG02kaE
+HVxwN80rQolPACUFQl/Zx3/fPDhxQPtNBXRs1/Ph1U5MBka+71NN7Hl8XnhI0E/U
+k1roH12tPm7AmlKdU5241P0+UQFA1ZAB/j0EG2ajS0AKwKE/r13mZbbVN1OlZyn3
+nknaYGuIhroECNbcT5EjbarQdC/iAoarngwnGhE7OLsL9LTvD9obdRJRrDPxVvZN
+AayrU66FuyqA9pl2kz07+0Nb1AHGdzqhzbvXcROetXxn+pJyguIu2eoFOYCd8RUw
+OgBBJKB1HuShE6GP0IPcuc7PZbUvAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRIGGF1AwHJHDCq
+Dqm39h/9bG80UDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAJJTTrsaFT4dOb7hWjTyiatdBsJ2zZuSXG8SpbTrcMeW
+5vLnEarHFBMmLiSCD6/EuztvjWq+Xyc99o2+dlSWasf/Da8D9twj/5OeJ4pQBW48
+c0Z9e8DBrqafEtkY4q6pERdpxfuOtRPGnfvxOhNqagVOeoIXH8iyaEVzK6fh7V7P
+s7CBVjJDJtp17xp98tW/AvyigAP0i2JHK4pA3Y8OT43lT6VroazMCmiQTahI9ZLl
+ZWX4igDBuwVAGUltCvP79p7nboihudCwz9g27yBCvas67Pjze28pbpECkdV/tzpl
+hHWcEEEcNfYde/UgucGsbkMbEAgiyqid5Stjg02wemodO1wZAE8cHuhemnq7bGXH
+l9hfEbTTbJgIl95BJAj1/CZCPZCjf9HihLE0tBpD9iYnwW83YrBn7FZmuAviMdro
+0leY/9GoV+kR8yhqtTD2yskakrI/IRluUB4qzGACz/N3kzGrzjEnkHHvRvZfz4ts
+5xjD/PivoNL5Au6IJjYAjmOilYhbLCj41wFRohP0VsU+kXUtShWjpHA+wU+PEbwo
+1BI2f/G5wQhHl3prTn1lImWRFvp7tpFBJoVH9boYAEaB4IQ14RXQEd2/s9BgomTM
+xlQWojP5MjHc2YGiRwi2nL2jujBq8c2kLOhwjwUcWKZLMsOiktOCAljwNhMNR15B
+-----END CERTIFICATE-----
+
+
+WUS ATML KEYID D6F56ECFCF7EDDB7FD87ED01E127EE009A463BC9 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAo+uAnVEeOc9VQAAAAACjzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAyNVoXDTI1MDMyMTIwMzAyNVowQjFAMD4GA1UEAxM3V1VT
+LUFUTUwtS0VZSUQtRDZGNTZFQ0ZDRjdFRERCN0ZEODdFRDAxRTEyN0VFMDA5QTQ2
+M0JDOTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMLvm+cPeALAyzjg
+ZOFcoQLxPfwGDBTznCn83UuHBj/19Ams6ZVdJuNJtgmplC0d9pN3fdpmHmMCHkFd
+NU401EIxaHVZSlY1Kd4tqyIP3zuwiSfmovMuA/EE6l2Irhh0GWa3bpMkjrp0RA0+
+9z5s9l1dTi0Zab1dU/qvPBeiprvA9DrL2T6oswAF+Jy7BNMfPOTFl+BObMbYvCud
+KStcEXzAjg75Iy0N1CuUyt6//l6Th++DEt7vF1tEUgcqZoT38yFQkwOP53sBeToa
+Gmo9bwF1OD9r6wTx6fvSAoMxezGgw3+s+Rjwi31AlK+8Hh4xhxXEX8yZ0LLmM4Ry
+hTvEeJH1apk5ew68M+v5CmCNj2udVRuCWx2wLYobD4s3jj8DDTZhB4F0mtikWkvT
+3v62FXqStYfA4X95s+4CvsjLojJ1cRgFvici8531CstDei8UkpYs5mWK6J36XDJP
+cqKswSsfUs7ooRnvntvwoggbsb0IkxbJSz484WBH2M3p2H0bBCI3ls0c9eeOmdFx
+Hq8TKrZ1unEe6Lv0sgeIdShFikfRWnwltrg/B/g1xJ4NfwVqeE5I4sxAJlztBye/
+ymu/cdWkIKKWAXyyeLqJxsdCrWrSUzg5d9R+XIQKTXvcU5ewt9T4VBH7eziDDekf
+h2iaq8XmqhcsLzjNuH79gWZ2YTiVAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQGKS2Qqo7SH/rw
+fz1RvFA099hGZzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAHEKT9H8eeP9J+V58IsgxITgbR1++8ZnZzcWlvRsFDTc
+hgG8GRIn5G+ZwzZt8O8IKTTcaWUTwA6GYHrP8IjcjA+09UOaAdsaEAyzfQcHj6YR
+AyXWcnbMrnJta6QdjJY1eXy1e41c2BImf7kRjlxMbicg94gIbficO/Z08mb/DZLn
+tWt05s769lAnjM/NnSZ22srqgErh93l/2yJBhRq4v864dGuDeKsKz9ext7xf+Q3Y
+TpEck6E8VYxFr3feH50oYmZfHcT4Atdm/l8W2Ky+TqsCL39dDQcX5N88slw9JKzD
+6ZfUn8zhX5+VD/u3JhCgWqujQwfSJO5TMXU5Kd9OQ5TWlu6GWHRwUihH+ci4CbX3
+oy4NyWkefzVowWRBNz0SlLwnud63KyNXculyE3DhLMZC/RJJvkr3b/MlVLG/fLZp
+K7HoOmkLNokLk1sDHaRjP4EZdMagsBsvo8rwqPglNAfuHG3KGOhbkHTnJ91EsDpg
+K28165FFe6RkWAGqMAdcdVuQ1IB6o9LTc0vlAmsFJoYm5Eh18POllZ7nTxY9swEg
+NrbTj5d+iyi8uxi5od/T2+BNxlpHKkRE26Pf1Tk9Z+7+GPUt6d9LU4YpAOHXffZ9
+Q0I2ukgaZR/x100FeI1M9NauNj9tGlH0oDFrWv0szTZrKRFCgU0rX+j7swC13T19
+-----END CERTIFICATE-----
+
+
+WUS ATML KEYID E0028D87CE6C67A8751CC4B5D74F57622E75E42A 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAApDDk5z1cJDLZAAAAAACkDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAyNloXDTI1MDMyMTIwMzAyNlowQjFAMD4GA1UEAxM3V1VT
+LUFUTUwtS0VZSUQtRTAwMjhEODdDRTZDNjdBODc1MUNDNEI1RDc0RjU3NjIyRTc1
+RTQyQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANXQYDoJrkAqJ5pi
+Kuj1QmEM8MhYB3PYV9B+gG5bQ1PvRp8MBHxoFFIQmHksn32rNmIVatpe1wsehD7G
+3EUkaO91DY4q6vl5BCLHYRvdK5o8wdcY04Wmh/91/gaAzAFp2uTvOjmWBFgNRZ5f
+7LEoiW4Yrc+fHqpSgxxkGvhhgrQ6g2m04XJ2g2MkIaBnKvyHgYkLLKIHMX4/yOz4
+TQnNEttrRDNLjmL1co+PiJYT5S7dPoMhmQ9QPoiAd1AlSNh3bMPB7j31VHoFGGQA
+W2ybpDM+DUv+m7UNjmOvhZinbtL30/u6hh+YP9Y9c09mATUyau036n5tF35IEwtu
+3qE/tHHK/9ldR0ITBsoY2k0gIlv5WZ/05lV9CQ2jDS9HY1yDJ2zDwF6hVpy8mpaO
+quY9nlLK6wlbK+d/rtia/K/ih2YyU+WKv1Rn5UezK3wN69e9Ps/kgW7uvlAF43ND
+ZnBJO6LYvgSSy2zCP2wx+gRjeIC0W8C68hzOhXGBI5TYVZ+vXPqNd6ad6vzLGhkg
+BvS5cZcF+vUyOwSjOj8KRB+27xJTiAW5IUGXyL5BntieCuBcp1kSLQMob8WN5c/R
+ZZfJ2+n5hKPAC2O67dYJmVtcNzuqgPeZq8aC8b93rxfHAIPGKradoVHvYOzBAHtC
+CRLSo1JVmR/anEEBFs1CM3K45VMBAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTerRIFywE27YuO
+6Y3E4HTjRJIhpTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAFlmSY/AyP5oGUb1WcVL4eMVfuSJui6z6NCC+5vGR0rj
+0JjmE4MoxaSA8jUmdwbBUq/9esun/kCo2XTOlBCCuYX1E5LPCBxQZIm5mQH37l7M
+0n108VX21nW1tAkmZsXiia7VqVnvB+4yQuQgBEYkbTn/otezS2DajuF/Q4n8qG1D
+20o5XUXSoHTEDBCZ3R6mSn1Ol95KCFjv/FrWtOQ04pSxEsFUYxj1Yu5l6GafdcAK
+pt2QresZEPOdjtjT9Oi6/VulyDSKTcmzXQt6lmldEyI2swmGD2tGx3iMrAYFost5
+MGw9QQFY3N+LZYLENzCtEOHpjIrt6xO7zQARekVxvrFvdV01XOTMHLo33ZUELpaB
+mQbSVk7PEDKlIMyIMXBRZewj0a2jiHzNVJQfFVTgG35WbdBSEg742NcGQ8OgHOma
+A3/2y068ZeglSeO53LdtagNxKr1JUfJm2QCXUzSuBKdUPVKPtMlGxgdc+wf1c0GZ
+PwIZcY6hnBcVEt3ScUeEHRmPbP5g4DoaXX4Ya67rKpKye3aDdHlD09XZ0L06rs6Z
+/Xudc5kij9hu8HIlmjV5sN9/Wm8Zn0KePiWM4v/1opqtaEzbUjJSiTOIIIJceZ+G
+lEADAHj+ZshBevP28HMiu6F5ejTIWLWlxW/6DVwJo3JS8BmAXBIzEX0louBBdvW0
+-----END CERTIFICATE-----
+
+
+WUS ATML KEYID F761A3A1F408F1090797B87127C2A2397C0ACA24 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAApFyLNrOQDYSMAAAAAACkTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAyN1oXDTI1MDMyMTIwMzAyN1owQjFAMD4GA1UEAxM3V1VT
+LUFUTUwtS0VZSUQtRjc2MUEzQTFGNDA4RjEwOTA3OTdCODcxMjdDMkEyMzk3QzBB
+Q0EyNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANcTh6JTPU8nPL8P
++Lz14vGWnmKLjhfGHN1JKpPxhSLuxSqJs/7hlNX1IkE4wOBZZ2uTLYo7QzLGtQ/E
+xKovOmlJv5vzlM8xH2NFYNwE3WTKv0qTG9OXVkRn/MTMjjejjcitkQH4D7cY2ela
+KhfjcfNgBgzkNgQAIgcqndCxc/vUFQxhTcI54UbNC25V1/xVS+G+SqtjNLnsy7WS
+TS1Uo/7waDIoEJpPncUQSaCwT7KATwWAC7zs+6T6748f34RDJ0SXDWi03xN4hDTs
+5AmpGH++0uwnEpENPwpfUCtSmR8w74YP1NzwGifNpEnSTtCoYE5p3cCobrSmsTfs
+/0y7GgF7gLghcWsmFjRS11Rn5vw6slyfjmFTKoj/N1hMEjjimoa0B15xzPGlAdtB
+meS17pVcMUvv9LyrJ209UR9BUxBOVW1eyWC67NvK7aAEmcVH1weoEE4NZLVoJVMO
+Z7VsM4CrlDXQDkds0FvPv0vYZ/FoQFb+pamZD2saFX/0cyTZPeuyhwLK3rAhdZv8
+JhqEDG4XRYcKnN3NqZBC3/XeICwG593boFGcwcBj0IgorgYSU48BEYMmgJ6f8tFU
+hPDPioG+hXMJUPoteLcc/Wb+WlAGifk8e6xcrz/QSEdc2PVOMJEv+x+/oTdjonfl
+bXSlkBIg7iIBuQo+/YoR6YZNnAoTAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBS3bkqfC9q6c4/J
+OJyMVxu3bXDvjzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAHisXdmjaOE2YLVjRoFkOrHzSgo727h/dgENo41ucpF0
+dLszpQiJpRVfueIkpsst6t1wi67qWlhg0z7SO5xOzJyTxRwCpAaQZsxhqzQ5vN9j
+qAPk0R2JYTyJLHeNhc1GwF7FoNpScXjO1ikFWL5FwPdNpyJcJrJ4LRZVdCvHQzS6
+pMlyigYgVsqgKtOGYzUj9PHvFFi5VPa+OFss3F1TULCkGSYghDm7ccVTm21sJd/4
+9JO73Ch60d9tcsvFXaF+Fj6YUBHpPIyNpEYy7IPV6raEM6+wGQ9R7SMUxk0GKrsQ
+1quyCed3kCf3L8w4m5FvAZqd00l48y442d3d+9/0zIZlhxT9rpvsHcHCVH99NYaH
+3v0AoVpt97D5WI55Pei6ftJzZfBWaKvmew1Lco73lWxnTRCRXAZuGteZHtWbtAC+
+WjewBkKRL02AG0LimSwtgT2pQ9Rs0UX8yI89flpof7ifXw8oJ30mqMID4pKtVjnq
+SqkxcA5DjMNoV95+vOetzRYtyQy+S8ijtttf7AZY5ciw7/whzlFIrKpTCCfKX6IY
+u7hSASYRi3/BDDfAaXmcZ36hmToDHMPHTlkEEXZyE13bi0zURKeUeUD3D3B4uovc
+fx205kBEHH5KtBzy6Pl15UTuqmU/kop90oSAarftndDeCHkYzZufa13p+vGJGNZw
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 090CAAE1858A3C3A3B6D4DF8978916FB205FCA90
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAATNF/S27VYs1XQAAAAABMzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDUwNDE4MjQxMVoXDTI5MTIzMTE4MjQxMVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0wOTBDQUFFMTg1OEEzQzNBM0I2RDRERjg5Nzg5MTZGQjIwNUZD
+QTkwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqKSUbLAku4U2duYw
+zFB6jQ4L48J+eYrv36N7GtOOXaJn15RxBr4vdsLoU7T35JMT/pXIFP+SMrxRGjEc
+kDP0vmZ5jc09fNivW+KjfT5eXbftOc8ect4Ge2yXWCYJ/SSSfe3veYd9vmBbcahW
+r14urrnYi/WnXgYDj0FPXX98B8ZhhI3ek7FJGSLJktNhhz9R9wMh2SgigdkKOXJf
+P2E+ofE0Khx6kmxHi0aR0/H+nJg4peRC9FHpGhNOz/GHMPmDfTETPov2ZRYyqVRH
+acWLR78qiHiKYwiZYQow/mCpzpnDr6IaNgAMPrgHzztcMa5UroRoR0qcT+auxmTG
+WDYZnwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUu4OfyPECLHkWcmFBQOv6O/AiJl8wHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQABlK8f
+lglB327cavGLFgskRRCxhMy9VM5afOhpZnXKO6nQv2WSnjkorXaXX77labG6nd1t
+su+vIOHF4AfGoaohF1h1mE61qxoltgOKmHuex1EVgFkgHjrNl31xPZtQBbAQ0fwI
+WRJUT+cJjWzy122Q1Fv59je3oY5V8jg7sTaRIHwJEtvMCzGDzyIAf1jDxoilyPdh
+kJ5SezyTVCYdxur8d6ELNn1ON0DZMclG2KPVzN/St7k7NXCVruFr4ti6U0ddKbX3
+G14MIAqM5qQPnoYmkY6BZOWFMBO8FRzhvk0WnYyoimbaNTyRLGt/FrSj7kFndACb
+uGvdL28i3bw6ELK8u3k8MJ42n6SUqEXcw0US6sPJNQG/X9X1dKGlIN7wsa2NxSzk
+2JUmDfXmZv0oRpIxJxDM3L6oocvIqKZDyU4ookRuqZy/qT9VktYGbtku3hr0Vtu6
+kcEkuDsFdMjtpaenTWKwyEJQ0o4WLNr5LLcfnPkqFRQivpb3der2iaNjulS3MeoG
+u70nYKzJhOlSkM5gqmvguEUizafNPrmdrUmTAqq90HkDHnHkEoFFTqKTWV/6iTIM
+yZSi/io3HIMfD4bIANjOVgOj7GjBwo9hlWDibXlo8cam4V/oeApoCgYpZfW+9tXZ
+I5Vnq8dKTfIqaQWocZKxjGXWE9dTTVcAQmtsAQ==
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 11227AB228983289AD2E7EE6841321901EF592F6
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAATTnuW8tuPQodgAAAAABNDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDUwNDE4MjQxMVoXDTI5MTIzMTE4MjQxMVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0xMTIyN0FCMjI4OTgzMjg5QUQyRTdFRTY4NDEzMjE5MDFFRjU5
+MkY2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtvaRKgLkWNdalUbz
+rzaVjzQWmYfpMxZUO98zE7MUvw8A3A7WTWHzDhrllf85M+ebhqKGVU9NLCOpOmLp
++9d1Tj4Zm/sx6fEZhsfpDLJaj757ZN3rq+FWLpR62EygQn7aT10hHU4V/3hikLlg
+yceNQC6oDb6v3+NN8bxNCQqy5ZhBDhRRfxMqUmdmXZS+BmhdIdYrVkinJT0ziMpL
++sC2AyQcRjTmlvjsDPo0Q27c8jSYQheGym7uTmNhyeY7rJlzCUUIImjnvgSI/PvJ
+PFLuEg98uAX90tzdQ9Dmvv3fvlcjVoaK59HNBYtje4yb6PI68ZJ2tklF/oE1uq5/
+B+shVwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUvFmfP/5SQowXo/ZvdCQpROFh9DYwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAw1qvE
+PT89tMy48PxrjZ6WMnWcu7Ohw2Mvxm2+T6mkh8RH3NMnteH2jCVnRpBoKFARVT6j
+XAFycJ5MZpXiDNrbiYUqz87b1BW+Ae6QzRSmXeLlzWQM9TTwC+8zQdHPfIAmyKC7
+l4ZZQ1L5rWOy/EMfF1GFysnIlrn1im8pigCfPfgxAIIefGRcxK17pdDXjlKRGmlr
+cXei1A94l17PvHx+Cz1kuRk2LGldoDrYwhhl1iGMkaCVwGLB2UXuUCWA8uG9/Yyh
+U4QsxH9V9dPbiTl6HKePuWTX5sNyFtFT+NwQFIraq8xiSYcUEwyVw6TBeJojwphF
+EhT4lXGdmgiIcC+j2F9dtkn8WVHGI4iazKQ4NzaklzHg8IMKNbuCDYKQ9H1R2qs+
+C8uL7Q/QeTDOYgG6rTsMk5aENJ6/R4DeF9ABvLs0sVOap6qt3x5CcyF+1bD5h71K
+pX96ogNx8dLAEvrMpXkn9VjGF1HFQxZM5MwqHFsm1faTG8MikQNphOmnYGrZBKQE
+janXf8iV36567cZrcOM9UrM8iF9QmolFdJe4QcsSslDnQKN3KDgZkQm92q7M6XF4
+7SRichAZh+gWuuQc+62eDHkPu979/p6WAG5fkI9dxMKXqT6VHxOKVgIPfk8Cg1ZJ
+kSI7ZF5KT/FnOWx+86fPF3+cb3zjvc0IBF2TwA==
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 11227AB228983289AD2E7EE6841321901EF592F6 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAgrXM7SPVw648QAAAAACCjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMwNloXDTI1MDIxNDIxNDMwNlowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0xMTIyN0FCMjI4OTgzMjg5QUQyRTdFRTY4NDEzMjE5MDFFRjU5
+MkY2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5nYqiIPTt7jeAzHR
+rd0cCJ6RCKkiNbIAZqC7iWtmGSIUGMtXz04TBVou8yZlebsCwlXc32Xe51++tmrx
+rcgocbbl/BnXVdHHVB0CtpaSHo7pkSqsPkdhDga8FqFXOCXBY6B9mZxDekFd67vO
+7KnrFfKNzW1kfWD5iVj/Dv0/jFSvS5ug87P65KkKoggIGlqX839lBFrjFf0HfyCB
+Tj5Ic6kfZjnpR1VRzVLBwc10VXW3z+lpPqnHuio0VOop5mZxnMmLeMrANmr6k8MU
+jwQQRvpIDgM0rIkORyVJwwpM3xOViEQzE8mTwoLznPAnLoLuZPQsvHCfCJtpAXwv
+jA44F3Br0FDYhl1bgz/zj4Tud3FUKguFrDPtAn0xG/dGU3bcyi7MmSdBMr3aRWJE
+sE1ZuwGGz3dqFgROMfnCt4qao7eCQVi9zTZP+24AvhvSTd2UNaE3ExnpzPhob427
+cJQj/C1l8070fxIawh3L9vGuzwlgU69pz/o4YbwEB2oIeJ72BAFOx64ZrJdgs/60
+OAf2H8hh3bgZPWzm+h6PYYbgKy0pNzF/9eeDBpuV6OVMHNOW1J3EtFzHtE1MaMAp
+FlKRh1TMsI/UXbpFWnSodO+4K6UgGbqFVwvkXFosKO8Kd3Xau7SucMhQtn3ud/6e
+rKoonVgkuiir/A5w9PWQRLlZnpMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGCL6D2KZCi1qr65
+vBLN3qSgPstpMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAKJrjkD5gO06XkMl1yoLwUPMP5dgZrHBkBYVY5uDKDzNx
+kSzSUIoHl6XhXnT4Y+DPfxpwa2hQz09G1t6/9N3COuPRwdysRwxN+Yo1sKnfcSdU
+uJghXviUYxo43ZAm6cRdvIi7aeTceNbmzR2eM3LcWkPB1Tr1fw0ahWGlodTfAQzU
+g5xEmNZekVxfWGW7fgOjtxGgzoHSqH0Y8dIp3lSzZwMuGc7wW31lr7Cd+gEIdRE2
+KnrN3l+heJYMaBxmAi64by2GbfBg0vhe0Z75DCU790zkOhQjTJ9ZPFNaqy9nNeOB
+IyfAqPQ48DYnTbecapwOEatnJ1ul0B0t0gcBaVM+gvvywDbhUG3STeT87ettCeSP
+nM2yfDnBTpIc7oifUXAju38qc3er1/Lrbw0o9Q8TltwPROFlBkbDKmViwvJa2OOg
+AC4rfU5eiTjueLf/L0dn32LhUurpe7FWdV0RmrAHTmYlCT7YtzKUpu9rtalbF/Ys
+Cz+2MUIhX1+FPmXATPewy9C2M11W0O/psHxxz6GWNLM2REYIGFcxnU/rfvV7Dv8S
+SgDYBF9QJhLXuIlZxaelxZUf1LWVoIbQQ1hQU/YEjB7zvAKVyowBnip4C+L4hVlr
+qjPZ2K8urmeWX+tSvvpI1FS+yUX1j/+jfAC3whXEP9ryW7/lZH4lqzbdzGE1O4k=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 128462F2A0D16CDE1946F1000544B055BC113D10 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAdDj4+ItYDLScQAAAAAB0DANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkyM1oXDTI1MDEzMDE5MDkyM1owQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0xMjg0NjJGMkEwRDE2Q0RFMTk0NkYxMDAwNTQ0QjA1NUJDMTEz
+RDEwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnFh6sqBHMGYfldBX
+vZy7w2R717Kslp6JxY/WZ9uSrOQ50ktiCbfPVF1pey0k9ENsGvIn+KC9e8p2ZVZl
+Rgb+SH1zpt3XjYOzM5PeaY9gQj827UDh0fTE5k0NW/+4YaY7cipp7Z8lGd8WWsqb
+emQLMbPYy5qe8MMbhis8YyUjgivk0ELFOflrqEGNCbjeePwoSyByqTEqQtRujKHc
+gphpj3Tgtcb27T3uMobsM3r8ty9MmdJQoUqZwqsG/y7e0XDjeBUYFjPFIsrjb6nL
+CeatL8nm7r339j+W/VYbx574fXNgozA2MVr8Wbqz+y/+8iVKsCfspaWrGv7kg5g8
+ykpXfbBDNNvRVytEBdFMgwS+2XHsgQCAGBubyYkPdQ34TD9hkAABMzZ+x8sJ6SNK
+Ldg8L3bW9d4KnWGdHXzgoFe5urQOpRtIe1yUZ5mQpJ8n4MuUmNzgQZxc6L78eIC1
+MhvmEv76XGTky0p6/0HN2Ej8vlMnmw0xU0ssuLiKxsxOAr/hTEQNdslfGw8Iq/yx
+YWt+GYhkdTSZcbWe4eh2KCmTlsZ8/FRLYWtRQgVVXWM1MFb8bZHwXbdKEJoNLBt7
+WPLZX+EVfvYAnxFZ88b+kxNJbRyS0IQ1MjOjSGyCyptxv79B4BSU8gpqXeYxB926
+5/wr7asqM77JToVcb62dF7FJc1MCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAcT7nbjzwcsUF3M
+dK848DpOM1aVMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAEr1D7CyRL9GO0DywRqzemvTQYXQ6S+FRXvM7se6TT8HX
+T9l/vmc9FTolob6ThjrCh5HV56iNvqv1MTVboHFIgiGj60AiMW+M77laUz7daCEJ
+GOU0P87qbifJnobTlScAu5MA153cxHJSAovJYuyAKDrKdpWWJTuCesmwSKPvA2lD
+b0yVUrlk48TYPCxxar/AcNeVj6jIpKDccAZfZWPrLVBMVAUYxVAg+zdsvmRKW2+e
+T2fQEwxRHDEu0pUm0KI/E0F0fIk3pZKUbNUbjm297bHmMPwgm9+kqcCVUU4rU7co
+Qcj8gTZIA1xNnSf55Gp3PRbE+SFh/VEmZscL4nlzz3Imo7TWbq54NL+R9iYmAbsY
+x3EJhbvoC6jn0eM44evCupxaSQ249pijZGNlqqHNcA74w984ajQsAXq6q/ja7OSw
++7jn/zKPuTz+hRx6BoUxGgqhWwaQQu56sJZCOgiubdqNF9FT3mtN9tJ6X3PLqYet
+haGa4dxRL2eyi+P2Mxdt7zTzjBqltcNIhK8I3ShuGKzSizJ0lFQPVhsvhpsrVL6q
+Xa9bDB9u9+tclEosUFzO2MbQomiB2koAkcT8/tvrayLBUFmZPCfYGVtOh3R7czmO
+YZGr4nTXWPs1vtJhdGS6cjAUlFxI9EXtuVA1EPsr0Tw7JMgDuHRCWogu2SiKuLE=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 1BD645FC1F90827C283E6CB526859FFAB0E0C62B 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAgFgCuIp1GmvqwAAAAACATANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDI1OVoXDTI1MDIxNDIxNDI1OVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0xQkQ2NDVGQzFGOTA4MjdDMjgzRTZDQjUyNjg1OUZGQUIwRTBD
+NjJCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1pER8UtpMQbC4YdR
+bw3BO4XnrV+YyKBrFlJaUmyoJoMnuGZNOSHv/Fujke7XmYBZI0JKJleOlHalRB6T
+4ATq430CPXrYs557BDgPPdyPk+7xZjdnqLtm7ACEQR2uw70rjpPI95wpAkCotqDi
+ApuLyOSLe46p4zwUymL6alDGPnDjIfbHjFHENYFYNhIwOp7SRi7uT2OZULdzmc7p
+k8f6ZR/gTdHqU1d2h8OFC90HRSE0d7SdoHKOPmAA3NcCfPsyOsIJRiivbf9zUic0
+6ukltKh2X34jNZm57egXWa9mFmc3OqBR+REFBPhTHzP3xA2xB9vQrfuDD20mNb5R
+IzHCG7TyRh+GcmaB9aXX6pk47WtbCSIhljGCaFyVvXxqBQI7W/Uw4X3YULlH/8MO
+8uwB4BS/cpN9bAoBYmD+brSOb1X+q2kXzfz5cNJtHzlpbb24fA1U+sLr++v2diPS
+wFzNnW7Tt+4URjQWpWdo0QzsxkJz5QIWZ8oj/qlDyfc379iU2jxAPDxpXcr3T/qZ
+Ds6o78/pbSdNgHQS3VhWbpWyzwDuq7O6bW+hB2W+f2rii5LaszE5I9uFQWgc/GT/
+aD35K/Ya/4Zs7l/2BwER448jhl23VBoLDtg4IFPD8DUjaaOA/Ws8F/vN/W9sCcg0
+o/kXczCAmBCoCy2Ve3WvTveWgJsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJd0SIxawE+122Lc
+sDN6MWsCNLRKMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAXCaGsenhayxzJ/ehPdqCMvTSA8UXkBKwDXOi8Vr7WZSo
+FoEZ0JFldL6OpDqoEkhz+E8fEEDO/bzvf+80IXf0X1CM86xFkQAJg4jivmGdNfjx
+O2nIJaLs/JDiaWRZNvLFI6MVxvbfgFy018Jsn1FeTd9t1zaJ7hxOCd0N8MXoq9VI
+j2RwVcka8qGUve+8HcXKpVuODCConi9kpnh/4CDaDW7JHuN/mZMtaZVl5O3ffDqD
+G+NgZiSnpcvqtNU13tqgOafKlH+/4gY/4tBgQXA9cJ3jcrIEqV/vv10JlF3754nC
+X5mB3xbx7Y4qAdTm4H2TLPqtFvM5kN5Ip5JN3WJWA96V+lvtclUA640zEtyqW9cn
+ZvRn8q2jcTa7GClKvbu9rXetSVpxTftpHjLNnMxUf9bnEmPXbzp1gBTjLAuRBA61
+M0dGSStqrQzPQRu0tMgpDhOVb0+tjPHnuAKm+UfN9DHE5s4te/CMbnhjD12RVqkj
+EUhAjvNoRD61HYS81nKjwjCZmiy6oecmOtwUAH9FBlyYRnGJM4G4qaeeDEztquEf
+ZmQNQP6tNkFw8Gb77hm4i1A2e1UBh45ZFXAFQRO6ycs1BE6886hH3BNlWNRvd3Q0
+cxqYiLoH7vEZJdWVArmka8koenJ/O5BNAKlm/r5QMto5GM0ad1L/UA3ncCenTaQ=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 1DDE0F406D122C3E5A4F861F94876C9E1ACDD37E 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAcowKngQkgopygAAAAAByjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkxOFoXDTI1MDEzMDE5MDkxOFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0xRERFMEY0MDZEMTIyQzNFNUE0Rjg2MUY5NDg3NkM5RTFBQ0RE
+MzdFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4A1m90/9Yd6EEZjo
+EiYjxalXanwQ8MguyP+PxQ2uC1kFt5oXjLG2zAU5jxUNrLY+zZgtceaHamYuIRMK
+5td+Xf1u+gu4ObFhGmNvXgEN9hNV4qTxm1cBo+wsxJ1EuWNmDc3xDX4itFr7ZpNR
+2NSg/YwUH1D7X5s9k8r0TDMSQgYi7cOOI93pwmdh8J7InC+Gu3GyDjzPAfaxnW8C
+w42RW+wjzZSUnfZFgx/09HfhDOAC9GdkKVHiDwqVI31G9ZNHleEIt9jClHqG0uVR
+gEjRAiZamU0SWYKSDN8DgWSuOqeMyvjB1N/a5firnqeFc/SwIQ+u/L4lPQshRdrx
+RstQ8XgiSRzig0BHNBvry7cWzQeeemhv4kCg7FAAEfyWchg7FIF9KuAcTXm1Qyd1
+xwAfKWaSN0xr41GasbkCs7O7y/cvpDycAFVwxBOXQNjj5dskZ9tBcTu3VSzpIMto
+pWZ0vXoMpZEyKpSXJkIknNrsbYtJ5MO7iNU98h56Ov839IpkqeEqpclgT/IEBmPA
+zMr08hgjhUXUMF7caD4ixj2MkwGZ/FxkDuS5xiPFBIVYUbDAnx+S+6hgdyUBFBdn
++boNq2oS/yrQRK3Grb4H0FA5ekOwr75+1MtFqktZFSKv5Pj18bQkcrl/H9HpcRoz
+hP/dIBSAbE9OXKLavnsSAfEAZH8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOvInI90m62QZcA/
+dZQEj28FlSRuMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAdFlJi1BieXnsZzbO4qPMlQ1AhqlsacmmGnprESTNuI09
+hsN5HeEu4Jfb1T3iZEap2lRfaWFeRmPpHm4Y2BQa6tKVj8ef+nmLtBep9PojqlmS
+7PhjxRjoKgSiNI3s17c1ODLhdkOKVUwHrg5UKNiw+rfbsjRQdsSbU/SQ8I7fRHK9
+Uj0wIFb9XSc/RLdGnfgl/EjqL8GXbBdyZ+u+MMKVw+aUyOsMcf5kdd6q/Qx4GACE
+Mc6/u6Cno0XCaUzSk7mrdRGnKD6SFYI3N6DwdF3Z4jn6a+yECXAcweW9v6a52hwM
+XPLP1b7QLsvfQ6zcY5Bq83mT7q9RtO1f+EdvTI5m9DgGVh472MojTNpXWM/yB1TM
+P1VwRHRLnDh/LuARIVqtoN+9WdWnOJH+TRsWcKHzsL4rHu0l921U33vnDgUvCYrD
+hJSIIvPjHbMGb5JU+7uOKDutPuoa30BMWum2xOaNV1IaOJgDSnTBKZWwc+JUWjeR
+sDouIxrMCFagK7v3pksvaqiaI0WKoydSKU2Li+bf9oV5iToMAKTjPmDad46980Dp
+yeLdVaAv7pvdoXw2xDdof0B0xSBqzxiavNoCuowfA3u4iqZFEMWAlaXj+gZswlY5
+9eS9gfRXx7Svr8C/G6in7LysIvModjSCZg6U2130f9huPnQ5XIQaeka1K2js3PA=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 1FCDFB8ECE408675D963E5E5108D55C984DD797A 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAApIOLjr2m9g7jgAAAAACkjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAyN1oXDTI1MDMyMTIwMzAyN1owQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0xRkNERkI4RUNFNDA4Njc1RDk2M0U1RTUxMDhENTVDOTg0REQ3
+OTdBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArxE0hDsXu0S0wIqM
+HYkp/Ua5pI9viugmGD6QwCJ6mjImb+963Bht4QhEHMDXUHsEsedlzDWYcOXUUt1M
+TPqbvTS2wvdMuKZa2vTHryxikkZpsGBU3O8WvqzCzw4Vei1Ju74U5uM3YA61bVfF
+dMAGKmtPpVaJx+sCdGWZh8tqmr9W97yYATKWBeODwjZRL29oMsvDBNlONYPj2TEP
+jHvTgVZ0ExuUTYHKWeVaXCsc1A7g1mgTdKYa6T/Fx5Dm7oyIVQ/yjuTnBFkF/wr8
+5FVOlN4HqmO9hv//iCP9jDDVX1F3tzVPVwthogDspUGjhRZ88G8G79TTtJi5ZvzG
+uMyQlZxYJV9uIH/P1yAMJAPY1LKQduhpWKDU+anB/DQt3AQZ8ug9qSe+xqyOPKAt
+uRqVEc+xJK+vockjEBig7g4XPvhKIPUa9RPEpBRdXS00mDLKFgBsbf5fDkxTpBhj
+37D8V9rgD4gYH1+re5I9dTlQ9sW4YN5f0KrYSb+p69cPYoFiu0gXeBrXFhfr1je3
+Fax/tR9cH1bKDOoxvI9OUG4mJUaTRX+FDGP5k19K2NJ5r5dOGRPDzRuDOVJC8WYG
+rDJuJjcL79+smirGd7IaaGEXKIvBhzmVDeH2lE4qeFynMwrz7mNhFhdAM1BRps9Q
+QVI2/0kwQa4ckJoDvBxGQ41SM9ECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCOIHx+GGv6n9C9c
+vkADRQExHGinMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAbYqDhBonyfTaMFW66j16VDZvFqF6Rx1MkUAO1Bpm5ucG
+n10QK7Zi+uIGpOp9PqmRlMJTc5mmS/CD7Hkm8R4bkiwrZGlQhUJZN8MTSHJ5cW7T
+sXWwE6v6kQIzypapSJOt1pgfNBfqvbLYu4e2bEk6uk9FAzE+3GN/XVotcYVIVant
+455oQnwqq3aeaoB62vQpXEBepkRVZsbOUpzSTtnBSuHlGvav4icOcADmymlSq0NF
+csc+kR71bwDQD+xMXFBfjcR0nGAUIFBA3cGqKbLbRiSV1HSE58cKmI7WGChJUUhF
+VzhCcDsfvukLF/p+KDAH2msLrkAOFd0zEtZmZkMtDL2p2YbCM3v2t9+7hh8/KH3f
+viXXN5ahYIlwEOEB9T75OIHDdco4n5k7RU9tTnPJT9yGhyAjIJKe9xLBI4BrQlXT
+fukmveitBKLzXuin1yMdYbwr1EDDxJgIM5lfzwjYRj42rpkwwu6M2+89/+nXNkhg
+TNR+sDbGZR7a9v4AJfpuDOJMiV1VJNjt+ga6Tnxr3TSnOiAeYPdHYkANXbcAbCAR
+O/QPBG2G+BSj58YlWsA/gFi5fJ5gxbq/mG5+q1t524Lh7OK81ImoI0hT9Kyr2DlH
+W9ck5vRYqxvXEvjVDXUh5SaYBWUxH5uoswUR8dXNcfGb+rSz6sk+9sMgQEk8x6k=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 22BF9BF4978F4F45A4E9DBF729D8A08ADCA0A82C 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAc0h4J6wda8bcAAAAAABzTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkyMFoXDTI1MDEzMDE5MDkyMFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0yMkJGOUJGNDk3OEY0RjQ1QTRFOURCRjcyOUQ4QTA4QURDQTBB
+ODJDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnea2PJuAcZS8idVa
+wRrzYa9Vc5+6C5G/VGOk5+AbuDxUcI93gARRtNzSGgYnVX7ShDleSggs/QkNkZko
+kPMrMl/S3WpFTu/BzYz0uOIqu6CTrrE3Fh2NIVrrc4BqdMbLqAxNfJeqAaluFVGS
+YN4/whxqkeEKJAZQ3nJM7MDQ05GwDb8Qk8b3oJOVD9O2JnwoZx5XuNpRx9Snr/ho
+yZxWJzdLv7WPQokltud5bLDhN5Q2vi9t0sTNGaCGHNCW6f3ossoz3bkg6ZZzoT/r
+5H4DGVlzbfZUAja6b0QEXVNiMFqc8DzbxCu42IpaiTlwzrwc4/O+Y7qecfp04uz4
+/4vWQFWDSFn263kDeUh7d6lAe/gJW2huV2xb3dhGHpZeWndJOyprCkEArlAxolb+
+dnEsMLE1SaVLXpAMf7/piE1g/ItL7Zn/vmqvrYo3VUrcVBUsl8I/lqOxiuWTA8Aw
+jUxjLpKN8AyxhuNXQtZ+U20pyVN8PLYPf2JBgK2MifSEgENztEMsPcExmXdr24xG
+Bdqz7BcIfttulIqQTYBNgTdWfjNn767E5ZKhxciaGUrtq5mj2TShyYh1MqL8tgJN
+nrXb8pfNK/4J/TZnMo0IxvQrIWPu8yhRNVw7x3FCCPU0GvIzMDcHVJ055Wl1UjB8
+KqVQoByhXkxg4AV8RsQ+Wh5tRp0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGCPmbkQ1gR2SShs
+LL81clBcj7/zMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAJYxq+i0pajnGan2MLOWsr/rAi9IwPEckFaXigFJFCLFi
+8tC57qT8xH/5SmYizFsmB01FSnpwqVH5XC2g3HMDOp+c42r3uOy7JWsuLGyX7NWS
+gJ6ojQ6Qrp/Uqv0NXlWKTkNLS5fwrwHajzkDZTZy87urQgxyFiCBZ//oyz643vp3
+uFdGcb4lduA2ICVlUuVNaHVz0z4rUU6zyuTi8S2d/ySZiZXaVjHmhoTQQ/99muLP
+tkC+0EdXh5bU6BtApjA0teitpNhcAtQhbZBZcpWZtqNHKLERRGeh6gt5r0GKmHno
+3dDwYQtJ64A8DvNojDVdrvY6jC9lJpK90oiS1TFKFkymv4xRmU8LqdpManUdOkMO
+to179FbcwSxwFvPkd0WkAFdA/X4MKc/Xq7b3xG11bqrE52KCu3VWUaNuPZV0j3QB
+QkmF3Kr0s2JgO3I3S38XEkS8EoQXyCEbSxdFCgWuDvG/Vp9kqbEak7D3YosyiKji
+Dxi5E9+1wxeIqdhTnSvXXwN75Vr5cltZtTeGMct1D5nll1U/FDP4XaMuqYwx/adF
+YNSCBnr4aC0C/S6/jW9UDEksrgnOgCih8sH+a20RALDBZ4B4GsGr1orwPds1o/zy
+xD/ePQx51tP+S8pnILLpVbvTlbMZ6m+kGPvfls4LfvA4kLB88YoRZO1m6hWUtik=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 265CF32470FC4D93C7022FA34AB4C8087948454B
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAWZoxlAjxhDQHAAAAAABZjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDgxMTIwMjUzMloXDTI5MTIzMTIwMjUzMlowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0yNjVDRjMyNDcwRkM0RDkzQzcwMjJGQTM0QUI0QzgwODc5NDg0
+NTRCMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzTrLgwWtehz4hmB/
+c3U0y/OqF+ToWshxq8eeaugvjTKXTEcESyNTuE/1dtY3Gu+IKZQ9a1TgDXTMR8MP
+kOlR92OawbvKJKBCH49pxGXNsEmW5AyA1oor/OCI0hme0Hgvwdd9q6hajmT1wBLV
+jLpP4u9D8tuRX8bqYhh23A4ZzoQ41p6hTCNH+7GMyd3jhWXB9Q/QccMFcWVRMbPz
+W6HJY4IprW2rag+/CYmG4gqbv3grhcoin39wFAGTBEl6Npv9ZmS1fhWCMyYf18XH
+ZsFDwt5+vC77s6ljj5vZSMDo8N93MFk4ET9uQ31VwuxIVTWt/TezrYzFbTzGxwWw
+5UH5KwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUNjCypWk7Xitu1eKevIgvKic5dxgwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCcTlIr
+Gj3mQkL9N8DKUAmzTW+BpT8WftbIOhtR6WiBhmJM9wrOTBLKyDkmeSUFmNXmD6MM
+JBA6vp/JW+kOQ8m/8JC5/+WfgftPAeXxMEA8tJPIuPLZ6574osg6YwEd2ScRGbqS
+SUuKYBs4p6x8GcQsxIlnjCeHJTIKy8Gw7qXJH78yqk0XGIpih8ZkyBIYjawbUAzF
+/TrpTU/hnl0a1UTA+RcBZj5b6NY9kPQYwe1vyramMXSMWmdB1wK4tELHSONLQXLe
+C+5sFP3CONrNVjmXzLQKpupW3geiaYBJGuZMv+ORjTetjwgvkWE6wR2v7VOXTjvr
+LdcDtmU31CfQrnah7iVPD/QZSGcgdqglnCDQAR55a3NXtxpFghrRCmbCziP4O84c
+X/9DiH+yF2xPlXwSyODQtvzZgOvr4RNiUlzBtocmXoQ8Nd74FsR91mnT4Usl+23T
+PfKTzGmyyf1/77jNP40nllsk3NdGZs525yEi9ou2lYztIVkhBFq5voxZXp+qLXjR
+FlEov/yT5QBTlcVwN8qWDdvmnNEt3BMzH8XOusZIxyXuUnmxM6D9dl7CyTRH0Mn/
+UmKw1tiFzjhTRPMGMhr0ymVbcH5Q5TjircPg46wU5hv8k8a5RXW9uheHBNoHvwIG
+KM3bt3agSyGB3kF31kGlF4OQ89VOTQxIkwfBjQ==
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 265CF32470FC4D93C7022FA34AB4C8087948454B 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAgj5h3O0djZF0AAAAAACCDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMwNVoXDTI1MDIxNDIxNDMwNVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0yNjVDRjMyNDcwRkM0RDkzQzcwMjJGQTM0QUI0QzgwODc5NDg0
+NTRCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1GDPxa2D7KtXxIkr
+GPDtkUQj4z2ZfGDwNPaBMdBiUPkAGBfMLZMWGnokp0j0tEyBMmTCCYFHdBjJK/2e
+Ij1KHge2LYmRXybMG6+l6h/CgktjR9JSAS52a9u4s1UwiPsFXokaC6spz0JN4iz8
+wCuh/dA7DSlmLb3pBve4V4AS/cu2OUfmmPPw2pBGfntzRVQ9wwHQN164YoxxaJKw
+hxdl5X7ENoQF7WRYpQnXihTiBelWKMTDFceJLb4OodvewACVpCNTaNi/DlEz1IBE
+p4AWD0Pae1HTgiaBJHWYnPOF+xQUeBUbsxaFH/gpNPKFkmgDsx0w0tSH76ga2aOr
+FQGWGN68z2mKvm63US9m6Cux76QtzQH1z06+U62SLphhHB6sWi3p+Cq9liHzOrRj
+gCiDcbjcSZwgTYzm8vJ2ZL8zq1MWlUlMIxmsNJGd3OHJV94ZdvIZivRxcWYNxoaI
+sqwbDlmNfK6rU3jtfcj8qStbTXXDBP5JEyZ08UKDkZHrogAfZT1VJMafqSEbu2/I
+TkSiWzA4p0PXkoZE+Q9E2ayC4733qkuWYeSBiNAm1a0+B6hw7hO6z3Ws8pP40qIH
+1vpDXOTlMN+LEZvowIoc+IdZOgm8Iiwo73C5M1smJETWmHFNHC9PHfVO6eHOupE+
+jVPUexx5DAjW3sLBKg+1iph9fl8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFIMzn8xgPX0jhVub
+9bnuSueoA3x6MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAbwL7RMamL9hvXexsTl2wCDwm75fDD0ViVS936Ds5Cnst
+aQUoDFZuQZzFQ8C+8ckKu13au9YUVFcH82z9htzl4sEZwVK/SLfC2z5e60te5D/k
+0k/6pvOJKytB/rIPvI+D46iRVdp/Lu7w8YyVmph54e2s4qjfNW/5f2+7M3M+tgMT
+BCUTSdZc54XisaQ/17KK5V0ZUg19Cy1cGon5OGspWeCmxnqSrujj2duJV0JsfVcL
+JklwWdD97Hq8THfNq+WFbnXs+WB/TAli8oawfOCet036C+suzrTUvRFcrpPzvOOR
++8HgwGyvjb+ASPCYjdYgRREPqd3kLiMg1TTi7ytMnKna+xga8qnsdp4ZUh7TEjmC
+Vr6F8G3r/GUgpKno9gIEWEBc2pp6wTzDYwHTbYTvaZwWS7nWMPOXvPuivuECvV3Z
+G1/aKIfn/Z8ZrFAS9iWsX4A7S2d1lwxOvbRMVfLzWJchGNxI7UQ+H1RRZuXUCujG
+kwFfLEBc8Y1uvMDXVcSMmlSLPjVhkpb9SJQk+am4sw1fHDjHk5dF7Juukj705wQh
+Ce+PR4Zdzb6BWHTqX5Z9xYr68xb1zOiTbAQgN/C+R4Ru2+O5KRS5h0RdSS/268Cc
+r+0nbjjtzwAk0+IB5IF8mouxc7jvGths5jz/cqwE1u+yLP0rUDeDac+6smGAW5o=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 2A4A698325A1B220464EF009B01892268B25F84F 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAf0SVwqERLtIBQAAAAAB/TANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzA0M1oXDTI1MDIwNjIxMzA0M1owQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0yQTRBNjk4MzI1QTFCMjIwNDY0RUYwMDlCMDE4OTIyNjhCMjVG
+ODRGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAoeBzFw+nc9MIUXfr
+t9870E4YZGtFnYquR+W3nKHEp1zMbaz6Pku4zodzxR1nnZSTniZUr+NTUfONbumb
+97cFjmMHXzfbTXFWUSqX+zP2LAxGUBKuGZLIq/FhcTSeHjhUBQQt5ndfPf1bDDVI
+hhpe0qid55Wpm7qf8BjmCVNTk8sK01VYvnUSolLwvaiGRz/1naT6KtPOHmOBtbA2
+lkNp74tGgbkLjjrY7sy/V04LTYYdoy/tSkyqq3fFlH7ZoL9qMXC3o0hwc+XgBVm0
+Sny3la5UvUPhb9TKYYTCa7rko1IXTcV+LkLJ/djal443zyHUDgl6o0a6QaZz1HhV
+O469ErmClcdK/rInqnnUpBeGzoNExzc62tlRYxQDXw3zBE0rCGnH+7mqao660iDs
+oUHvDHTVn9Lavv41Nas4i8WZWGu21+Vf5FSUlcIdQRHooRYk3MnGvAav53vE9TRV
+b9NXs4xBqrc+el55Qbh9CEwRz40O9+Cx4ji8NFW5dEXNg62mInRvev/w5pxP6Vun
+Md8HBhf6dKHJ9kQoRBlNDx5WOh/o79UBaq2q9+CMiY24qxp9asrLzgcIKfTV1WTd
+oVnx3C0+lCndrz9GE0el0xFjHfEXVyFXkNr1Iw7JMeZbCY3nAiqMNeG6WLQ1tLlm
+eksecTyBdJ9PZVkppVWYySkm7MUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGSbUgIygx09nMcD
+Py+PGDOEqNVzMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEADIePek7RUcMqizjuVHuo8Pim6hnAi7SK0LWYkIv29S27
+Pja/HyrIl3nQsKT4HueMoHpdX7GJab779FTPXc3WXvZ/8QgQsOUMF1XxXQ6mnToo
+cki+wDxW9nPF1nsFbIgrFCRWsZwh0f94wWnWMtyiA9OuMFJqa3ilkMwNBcSwVuqx
+qiERn07AFYAIycsSRGJRH18JqEb6cFqc4jhTqCmNiNoLSZtOXkStnFVmhpAprMjH
+AmKYaTsj6ssGpdUxXiY6f4a6YwHNooVJkLyjzubScgfv/rmTWzCmMxBvnqJ2ZlF4
++CvJG+Icdj+tq+RRPmFrbV8HzamM/2tAVPS01BhaqS7Y/cpJbBfRrnb13WpcApR5
+0jjGLQY6fHSU7OqTuq68e8ucQeKv5ZjXv1gxtbEvzTzdScDkpVM4tPkJrBzwg+An
+ubAoSNaysZt3KbALlPYdET7MFBDsG4Sg96X1z3AKG1sebDDfm1jLZFmclPR7Wuww
+PdUQzEkhORsBbK8nFU5Dqgt14kd9Eb1eJSvp9h23bfd+To/ftvXnDUzDSCDmfZ8R
+mcbBql4grb2a8xRD3SP1Ss2vv/9/RIxzRrklt+IPnHI1w91wHEN/bZo4eix92YEN
+/f5T9s1woSzzB7CSzdx1pTVtaG1pBRKkfxMl4TSumuq8HcZefKI/M9LzOlya9Xk=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 2AD70EB90962C541A55E2D15B85BFAD286154F0D 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAActRidZxXMU5EQAAAAAByzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkxOVoXDTI1MDEzMDE5MDkxOVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0yQUQ3MEVCOTA5NjJDNTQxQTU1RTJEMTVCODVCRkFEMjg2MTU0
+RjBEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6Ck9qZ+E3PpfGl3r
+PsxiVOH9+UUukSbryND2ONPQNqw4xP4Pm//3qvVJzO9Ku4llqIGkzpYsMcpvE0Xb
+WlBQo65mEJvSAdLiAH1KO/HchiDoj31skLpu6YByrd9bmMuX8Zq9fG4uekp6Lm7G
+P66mBsF/NH1VhNiuDrugvcTeDB4b0aYE6fbszX6nALMtHiZvdsqBdmkJz8TVrObW
+gLoDnzjBn2YCcri2pANgrIHmGFTUg7dM3hQzsRtjACPu0KQQxsn9qT1ZA1rDnk4y
+4uXnx+MpyOh1WKzVGpyNpL7sr+9PlmZFJHmg7znqHH7OpGMTYKuLiU3KCXGqgM1c
+VhOdVX/r3FAmTCQqyqy80W/Aodcg5uHGu3MHqMlXD0IIPh1kyKlSA/XHHgxvWh0k
+4PRyc+ls4MT1cae/BLGJnFtZ9FGA/CgPZG744dUfQejdXSRZ/Ovp/Fmmb5XHfK7d
+9lHQMfchVmtBNeJqE5rdL4Tzq9Hrd5WYcfy4PK1PKx2+fRKWEsAe8DLmtWEJmFTn
+u2MGq/wtCx4+B+uJCCVx5xGmmnN2AerxCbjuCPt7/ewbBHAsTHeBIxTgJvlUP01L
+ycdDhfWQhCMt6nfN0YhU4sIUvRsDIANprVxGTxm9m1WysHcyO8b56BGQ5Fc60MFk
+PduANHx9Y9vOtefSYIccjcCsa+cCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEP2AapT1D/FQsyt
+jc+ecj3KwTA5MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAmUVundAK9xi0Xzt9eVkYrRDv5vOJznCkR3V7CTaQ3lmC
+D/pKgrYYjXsiOicJJ8xzQ+VaEGjNDO/Iv3UmVphYCxDLFuDlxb+tXkotA1ZhWGKg
+9kKQNwdUaMov2tGP8SPvODPFnL3C6Hq8AkxDmX2WiGZso5IDLpDOuA2+CUhkOAzc
+6jwbmeTLTi3qCnhwOqqu620yRtIP6mNjsGe3EzScJ6EoHy2N6hCc4XzcAQuhzg9M
+0f+h46JZ4BLPg3ufNSBmn87DPtnEc4VM/6dv6BEaidKSD7My1gcQClxX269zhWNZ
+7kEN3HTfUBlKire+urkg6ktxzjhM871qgUQfOyJGeVaxuMlG9TxtVqH9RVk/W/8d
+jYoF+2KoXcTw2hHDiq6mCDEW+numVsfQjWvQrzjjuIg7hMJNUVgzL9WonWs3M9UC
+tHWHzi6ovzZc63y4DoyOZ4lvmGzqW+vLBImmpus7aOvOrZVgdfDCttW6ALm3gSxR
+NY9P4Kw+fiSAQREMaPo3JipB5IXLETK5YhW4BTNNfCec/GGRmA1tcNMOL4QWJLnR
+s3LYf7Lm2mQ7t4P9K+wRcg3I0MGy3KtPyJ1Q4gFenX5k8i16cLOrvgntj91CddLp
+xTBRg0LBMfEEROZDsub14mhpFQjq0IAsZ7EaZS9PekO+iRHXmmRvC9YTG85dzds=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 3735DDC8E300B817AEBE03503A92EDDFDF1AC71A 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAc/X65qJOXsUZAAAAAABzzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkyMloXDTI1MDEzMDE5MDkyMlowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0zNzM1RERDOEUzMDBCODE3QUVCRTAzNTAzQTkyRURERkRGMUFD
+NzFBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA20CJ8D7BvcMUsCjM
+RxFmlzXh/kEm9upKVkfbmD15K4b3E/tXqQ152HZ2Iw4mALen7bhHZa1obgAdZ8Aj
+6z0hxAdUmtM2bB0qXI26D2gmCO50tuWi0QRXKs9e2zFYW+/us3E0FP3yQaSj1zA4
+3qBiKMKgWQmbgOZQ/9JtVMOOVOV2VJke81ufnNDfM4U730OjZmp6gzLKqxCNIMPy
+JHP2SvIrFMyqMg5A3F8iWxlew6NTT5io9ahh61NyEN41oaCdzhqKWOS0ApZkD7QJ
+VQJvetaGKemxc32WIF7q7hOa2itKz3DT4rQP3XRymMG+ovP3o9A4Rq/3YWYIONN7
+BDxZdGCUoJBKT6P5Om59Mt6Jp/4h4taeslUgPyLrTnVGvk4kcDscYiCcQroeQqrd
+hJ5MAMy23PCGtkTBEUsHXpIMK7CPAjvFMtbJXglTH9wcvtBl+05KDVDjAyvSlZep
+YpOYw0xEUKMpkWRha2rIV/6AAspm0LqE/Wv428gZjmN7zUwPCQAKU/rMSw2uNew+
+9Bh4bieshi7FFG4oTw8hVb5dRHQb9kQbCgm5vDki89EjwdB0mA/KpEdJ2RWjk0m5
+d2Ppp/O2KWNN/uN1iMYD5ucgOSffy3ifdy/BShOzSSaJ6qM1vFm9F1dG0POOB+ti
+AtCEMgEeFf8MwPGEAc2OoooiIdMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFO5u7eHUNBfhlSMk
+WGLP/uVWieo6MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAIwRY0NSEd9J6bakM3ze4uSh4CvK71fAX3dmb+evO/uV1
+MZGmuT23LsWqpqcih3KjMlEB6mJgwWubAsfrb2MFdu18BcDqkolQanLvCJqtwFyc
+y6H/bA+0tIgNl3+ndMGJZawwEs7HD7VnPVtcdWDaK88G+qxzchesEOOxx/7H2UZf
+XrJ4NNZazAc3vuMRkopJ2o93WOqIaIcFefTR0pz9WD3lllgejuhyGG6SFAROiOGM
+9lNI1Ac+RS+8NINKRohgQWfVwcDsA6IJayet8wqYSUgpoBSnNYZ1h7u16VKRd6Ym
+fmPvdI4OgiCeYtQz9o00D/Lg2Qc/3S0qZLL8kXFUsDBsBbarB0zBzhILhpD0qKE9
+U5bsX6TQDrxjwty4lQt8SSem5YsRcWa3Jxm8/zT+Rtf7yfzV1jfNd0i7ZHbjVPRe
+Fq5/Q7GGIcTCQekPeY62nSPe5Z5ASIH1BEoAY8v7KRX3mKTjpvhqtLX8RaDXJi9A
+2iGekxO9eIs3EKUkx1J+s2G9BBVKmDBRp1kHoZXpS1gxpCLd3WeIQK049n+gwlf5
+/YpX3AWx/8Ss6tmcEpJJEisYPXgI1kuYE1Ll8P4H5KzWfUmvVOSkx7keTo5mu4dj
+xewkt5OLMcB2+MFJdjrUHARzxjPEXwB2JWAvJuWVw/M5RNEqiHn8XxxNrDMwT7A=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 3893CDBDD873C4233315E1B13BA96A0D23CC10C7 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAArLwE15y9VH0jwAAAAACsjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUwODE3NTc0MVoXDTI1MDUwODE3NTc0MVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0zODkzQ0RCREQ4NzNDNDIzMzMxNUUxQjEzQkE5NkEwRDIzQ0Mx
+MEM3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAkqZCbFkG1KJNQXeu
+bdlfHXPGIu7+toojSBs6pf4T/bbYTvDyVHdZ46H0bOpKI3C951CoANI8J+vrX7Bk
+LYvF/aleDd9JpQM+jc2kfhGx7skhArJNKui+JzF/IfJPHIlKPp+pJEgbiZOd0PcJ
+ge7XmX4L00Suvu7bi3MH4JTH4D90ww7+v0qx9pHKgxgR0CNU+A6OqT8jhY7ucPoT
+/s7x2ubukAgySssEKdPCypFG4wpTe4AiYa06jpaia/9FDRGyVr5GGrKDHhrxAI29
+XklbnElP8cQUrwCQ9cQHb97Ah4jczp4bbKnVWrG+mVYJpv/HCFUJ1tOjmUgvX+tu
+5fzO5+4IrDQallIg0xQJysmGP4Y4/ngqJTh6kV7Ly+ALQcsA9XpcGiEXa+LlxePN
+0go8gj6OCCFQOhIEWPaAUCYIAP+L4GjoEWCbfttNc5ydI4hQs4jabiONlUCU2hwg
+KsTiK9lpGZKDQmUG40IXZqQYy48SAjrZypVWiCXMIpCJKCHUDB8FlFd5/09WZhJN
+7ZEU0GLaan/KX4q19G7+rze2GsLAnztHkMI57kJrtuDe+RIOT7vNuamNkxLbKYhy
+7A8UkVOKZ9Rb1hbX/RabfemLA4YtZKbEdymZgGZxJRJasVFwQOPuBkeqOYm6RpdL
+ASuIC5UdUI1kObihUF+M1Trl+BkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHliwvdgPbkvVXzD
+EYjEU+zjf4scMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAcAkW7/NMilgQX1uMiJ70TTzMmcmb6I7j+MwlKAXP7p03
+D8hGQHMeK+3J+lVowTxURt89+7saV6TScDdS65JohmD7qqz0tdZEqt5sD2HuY7gF
+upLWZudhLtE6+hAp3bGe3sFmdt+QyHGJYNgVUspESasEqZURCckJMcvigBpspluC
+X4MsOHpcUCTPQUNjB0OsFf0WVPOz1PtIOp/v5ppKd6SdRJLKxzOcyZ5+2n/60ja/
+fSAb1rBKaNLkE3YJUIAS7Ex6FhsuAPaFvPs8bw1NfpJE44PXDsJq/yy/SgCx/go/
+VDa86JTF9NJjhWQoxDG/sA0XUGnR72B4FSz40BpUW+aC/Cydq09Fb9PdKOCnT1G3
+7d4APumORxp9XuObLxL9/9Eshgy+LLIeKUkv8m5CGuG67MwztTVLnA+Yj4XyN6pN
+j49KXE/JhrI1M8ePs1KeD7JKdeXNA/txyEy1ZWB5hlc5AyQ0aPsuoSLcTT895m5B
+24YOBj7mlhKJlN1ISBgQZf2lGyroKB7Q0bBgtgUf/TyzJmBtcH01LL6Ex/4FiYY0
+hBxyxoSaD5HzU48Tm58pldrZyWuWo5AdRhzNa8sQbEOoX3sPj+5FZ9BuDwdTRBC8
+5UmREwnZtPTmgU2BmambAKjkiMaepIyKO9G1BZr5SaUdr/GIZJ1A7rxmRjCHIpg=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 3FE3E3E0383ECB899118188F4E2B9644DBD39A3C 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAgLM/GoP4o+Z+gAAAAACAjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMwMFoXDTI1MDIxNDIxNDMwMFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0zRkUzRTNFMDM4M0VDQjg5OTExODE4OEY0RTJCOTY0NERCRDM5
+QTNDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApOBiJQMedM3g905q
+xlO/VzkyLF9k8mB5wBY3Fm1x8cqlfqA/OPmzWdz28ff180ArGHShMOw2gpyoPToA
+gqpFZvyZYHzE9Kb4zgtEq5oQEUGblyZC1naEx5nI92a9WjDoapF5MOc2OjC+SC1u
+d4ATO8Z1D/7sZroD19OgIcTON+NN/IEPZocBXq2+xaiWxdoGdwNJ/jCrWXm/cpAX
+BQR87lEnZmcaFAwySbzQnX6Nmrhqcvlp9BxmzsCi1E8Cj1qjtUF1QEPTtHHxcKEK
+nLJ8qN43y/4PTNVWNmCQnptxGXzuoQZIwE0SOTkzi0Ry/D+Axto41DSq83l5Ob8i
+VDpxSijjGgHxh8HokInm2ul5is3fGN8unBnQ49LiIHaP2gdlWVmjT/seJluB+S/R
+GS8qknEgM20B5Kil6ofpO7Ld21WJM8fH0O+vxkH4KuW3NX61RzeZg94SDX2VgfMj
+TZ4oIyvKLhjIHlI/3j/Dc7/zREiwc0tgCxBzlZJ5y3cmNXNL4orNtacRNITF6ViO
+BHs2pv2MD16IDjFp1d4Xi/+u9dFnZBfANo7GiUCQ+atoUSuUfy62mHaDn6p6zUal
+QIPcvXiLoSsPG5K97A1PfnU+r2LFdvmojQY0/l74MlWEDNpEsR4RwgyMMHtyJ8Kh
+ZyeS09dm/e1X7A0oxGrS7ju9QBkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGbpkqRSdSR1i6FF
+GFlOeu3xZMWiMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAh58XpakQtOLlnrV6c8loSyxCAO9en1caarfNv7QC4iP6
+dv28sWbvhRvZhd+iABvKLZ9rUsLBOWa+LZMI++bbFP5R2V3Atx/Pg1UKABT52WO/
+IJHATtnjEoEmNWBN8LhsE9RYRkmN9sIfD7El7nek6l6n2M15FoOqNnz0c5a4WW8K
+c0f8GRvwQEXiZT77Cuh47AMf7jifw+HRca0SeK7U980VtMMyefmzmFclAU28e/a9
+GfwoSuDpekLztq9qcm0TsN3oPPmHCkRyFcADuWGZSdFQyggI+8y3XkN9K8+MDrtm
+ax2ro21ynB4vrJFZawkFNGGP34kckt4Pfyu+g30A8Bj4IoVaE/l7zseQcUHQc+8y
+l2651YZblgONyQegikZXiOeoHHe6Sf9H1q2VG+/yT4MJrNSY2Os7w9om4EJOq7Pa
+bgsNag5gJmhqRGa8dCgjfUHAbf10YmB2UMuYTyOHFJIZ9rEZq9z1iBJ3nocbdNDP
+yRhMOUCfunsLwdPN+DcH0+6yyLzcN00TrDkLHcT4ML1A/VTEcUPXFEdxja4DRPJa
+zaAk88FIOsxoQn+zvCZb1qMTPfdYNumqGlrkzLprW7mIR0K0Ny3in3X54qQLcpbn
+J/cXDO2fVifKVcn+r0+ISbl+HQ/WfnrYHG2AqLH9JUEUdCNNauanNzSWKI6mOiU=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 43325AF5500406548930CDA9A67DC78067B97801 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAArTzbr82xHxZHwAAAAACtDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUwODE3NTc0M1oXDTI1MDUwODE3NTc0M1owQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC00MzMyNUFGNTUwMDQwNjU0ODkzMENEQTlBNjdEQzc4MDY3Qjk3
+ODAxMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyETelvc2dOIGOIFt
+js3o2qNYD1rMTAs/PTDBJasGQYiD5BwbetlTc790L67TbQCIDCZbuxBD4ekrWTdu
+7rGrVkwN4tEuIKRuDW9dBgYY6yR8CM0GUkP3prBxk79uspUjDUAs/Fpd0BcPgEzY
+XLli1IJHRMcwzmeV2UXsZ8P8BiDOY47LIQ06ByrnP2unnYkxaCpzLYU0nYb/Cq4c
+eis1FMi2QlsQeBqHQHcXlAEjhAdTYlhKY9GbMQyciHJpkyECTPkPOFY543otRD09
+w7JUwue/fOyweTIH6BISzsKoKFFsJEp4UOcT+DhzIuATSiGybLWRF2XRU7Y3R4/6
+8iwG9CNjY87TMQMojnh1/ZfMlnrGaVT9OpfzDQ20Q3UfNcnEVYOz/uxJHOKPQxyV
+Vdpud1ufU+1+f6xz/+nMl/Vx9yBbB8AIKkx5baaRp/QBH+cDvD5YzdXVVOGm4KRj
+1pZa6p5X14U1Xuiv3SAD2CPf2m3bJRMMHNISaLUKJbkLMaC2RI6/X5jie/0HtGSF
+ybmiZCphRMkbSSwy79GKEE2PlnjNdYl3as46588awg8swOZJYuQBOYwBgoElVB8i
+AGpAasQNFwT6zXebTeaxf3qob/n0N+sh9os7uNRObN5/cI38Zi8fo8W0p9ZlnawZ
+nsD9FmccnN+mQ4vzCaTWgAfZ2z8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLNwEcUn+/oPjhW6
+Yn70peCWy13OMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAjtZb7DLXmvk3hJD0DgrjiDB4j0UgZYLcBrIiUlHGRyI/
+JV15RQQbXW58KfR1gZ5uzdFJBhk6/ur55zRUmeM9q7ByKG+FxntBc1tyDTP69jB8
+DlByi9CiSugOCJpuLYWzQB+pK2MREG7oMS4lEvYkAMc3JN1jIT3a8AA8iT97Q5DX
+Q4z8NU/zq+05xXOALTlDFJ/DGImGBRvUcL8/4AoUvrZQN8LP57/Df82gqWtGbSzw
+BaMiV6oJRy8YF32Ki68dz3hFx2HWFEl5QlBXqxizmgfM7rH8X2p/xTrLqiVjKhfF
+kUZPUuTg9PAjfe4/MBwLyCH/NaCvafQBIrCqtxY2KHSvuV1mt2DiqS2bNGqZWI4q
+qA1M8rGMfcR2uVmnMnrsuIj90DXppBZIIFZOvt21Bn0ZwCzynD4kv01r9cUHiMBS
+mg+FQhKjDZI2tMVhZ5sqqlPZiZGEyPlsq9ZyJEChq+/0vQg83UD84uJw/nrdIPHY
+MohqnIMOaBsWNPUCJEBeYMwl2fvmMd0YdIvz/vmKqNN1Y1IGNVhW8GrlmOUn+xiK
+wKjeR/04dVCZg64GEsp9MtroBwvsZRSsswt+3azi9tqJ+EjOTTauRoYaco0rIZ8e
+ov+z9AaLxecbGuqM5oZxnqEHOd6KxOzri0OJAmYkaB2rvo+JQbn72UlVvVZplng=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 4AC90CEE68D4B5729DE4357D2C475884F409B7A6 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAf4gzVF0MihSDgAAAAAB/jANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzA0M1oXDTI1MDIwNjIxMzA0M1owQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC00QUM5MENFRTY4RDRCNTcyOURFNDM1N0QyQzQ3NTg4NEY0MDlC
+N0E2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA7pB4ZIY7sazgHHBA
+CcODC1R4jHG7iJ+nNg1U3cMB7VNU01vQ4LS3UeVZhGLqU0FE4zgppoXmc0xhR2Yp
+2epFIhPSu95cs3rqsfdR8f51lI7NbGJZr8RUNNgofeeY/PBkd2TC0HFTc605Kbxz
+PTiyOZK3Ol1/Gj37y7oaZ498Ii6NYbpd9MpJtam9ilb8GprtW3uGqRlEEg8H0k+d
+lUr5uEHWt9fgqy8PL2A0nKDVApxvCssjHCQOPaqVev0itMA3pMY4KIdJ+mpjItC+
+JGXxptTrjO1U4wjGO0RZdkP4T6AqyuInaGSWDV4Ho+JI+1WEj2/ncfCCWh86SKTi
+ogfqv7w2Ef6UtavoE+irNjvgiwnlOjWQ4Ey21jMo8PdTcw+Le49dF1ckNaskwnlB
+xxBOudJe5zk9a5Zo3snUkdImXzmzjNEPKN/L/JIQSJemZW8Iq4Cve7UOQ01vsxnO
+m2Nr8vm0WBtzzlN9zjHTo5cnbt43cx30tpr/INEQiXQgPhqpKrCHzBPowWVVj0rV
+zxfpizdFxkKAjngOyu5MoB9AMMzLARoIdtgwtH7Q2FiieyktSQJHYTEA8A3qpczH
+ny32UlVwQsBUvkcKochPz+9S7oCKcoXZkEdrMFVSegFJUrM1NG06EEXL6qB3PGBM
+KoRjRddb/EGCUfQx23UdENU4oL0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOn9KtI9Wbr2pFwX
+bvGxd+XcqbdXMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAgbUZBi1wh76z/znLGDU8AMcJ14IGvNxwkr5yoZ1OloV4
+P0Lv360yjwLdBmplxfz8x+H9X6bhw0utdT7atUNTWQ64UO2BzcasOXj2QVv3LJxl
+JCmI849hExT6j/KDnPlliZNIt9WbMSXw3P5YpPBOwm5LQtaa9uVnGVatFxORLEdO
+DcmIRKBE1L6i4nD4VWPzvAs+d/I3UQEWTOr4w8hHnhfYPjcxvynV0P3pCFX3hcVA
+DKDrSc1eLI/Ms3aWk6bIylGp+bnHBWCiQVZDgyzWKu8Nf4iAe+8VNlKxH6qLzXBY
+O0m0IuQWHF1zjYgmTWMjNMMuaYmKOH0LKBgDfPj7WZOYn+AvqVrjm459fAj89J7o
+mVgVOeVgk/aUddMIusb6TqpFWe/HG1Dlw3PTLh0lpCpikSB+3DHALxb3bcxnxhZ6
+nLg+S7P4SSettkMVwBzH4XRj1jrlXkZTceEGlbbLVl2N9mhW7mulzBLp18GYD3pr
+69Oj/usB6oTK7kXHx4ieRZI3C8JgyVXQBVcVSO/YxaexSTul4yM9y17cbb5u7yvW
+THMbeldoqEPjCVgej6oBvnW6xIeXYwBLz319hReIfIuYltX0UsAo6ZHqXvp1BBeb
+LLerGiMnSu2SFicZBFsi2f5z8vhOEmhr3G6BR5+fJ/P04YiTZWX5XC43amD+oGM=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 4C4B4D648908E45BFE5A10D36387A688AEC1CF78 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAArAo6ZC6iKjs+AAAAAACsDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUwODE3NTc0MFoXDTI1MDUwODE3NTc0MFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC00QzRCNEQ2NDg5MDhFNDVCRkU1QTEwRDM2Mzg3QTY4OEFFQzFD
+Rjc4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArosURtwJ9MmRDEdg
+JO0iFiXbvPg/2a1pXaBVnF5vgAgbZIJtv3IYrfaQdxgEdILe06LTMOl6LejheKuv
+miF92QRYIcsAfWHl2BJLimfTlPBpmrX3XG4eJ8y155xlWayPgchsWWu4CkBzm5bN
+Yi1jl5uSOV7mm9yfvPZcq5hKDaBzkG2mPz0ZVz/VacbOfHqDUh8afBAcmnFmMbvA
+OPlOfwM4MqV70EjfPug0OI+q8etwPQ1S2ATnu0Jrg9ZoqDW2onyhHhv8hZUvBfOD
+l2FiBRR85sLMNKGyKLgqOenjGhalBJUoum7NDoljsYka8lJKoF7EgSVE49J7RypT
+06gDFjVWHPyY6Rt33etxg3aOimkyoseK+uoGVpFh8Jt6O6jy11qdiE2abSnZvm+b
+LmzY3x3w2hbgSUiRnIzFYnNI1FypFMUi/FFbTT8AqDv/LpZ48vAMPTBoMI5B2hBq
+cx7dw1YqpQHeFBQL+BizrmpErkspuz30vuRp/6uRPiw2I6GYcr2hFIIXaEm01Plq
+IOaubEV59SjlYILolltD50oRuJQ6IZTEaAPPuRau5Fl6QmTxOLlDmKJQrEjT2ryi
+j+WiAi152Z/RdZ/WsEDWToXb5+fwZMk+WyjuoxqqMR4Yi+deufEERrKnzH6MEkKK
+YJGkOx4d6q/2Iloj+BxQUGCIvxECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFIroRz4vofd6ulsI
+4jdGgr5TR5uIMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAEVcNJb8s5Jsrq9gWfD16u6i5tAouDueqb3oCjY1VBt2R
+iKAOzEVHJAoi0BoRVqAQBRgsf45ky9X3+alScI0PnU8inzCASc7mGhlRGuvEcps/
+HlT4xBA+ip8SEfvRuS8PcIFgWLyMwe7FetbaCgP8syo+992DkCYUx7oBxjW/HqIs
+v2JfeDndnMy3oXZsqPSjv/mI431hx96Sh8QNMFqFc0kS+aE8tEPgF2eCw5Sf1G74
+mEH7XBNxTtczgQtlmkfzPkB/e8IaaEuWtlZ8b/Y/dtILsgUGrTbYFBhVSehI6uTy
+ZJuMqHvvfB4S56wgLJosR6sMXjUpYVu4JC+S7j2Fn+pOplBjjg6TCRs4rf1TSPut
+tEiK5usKO7ooH1BQpGVJXUloX/MSyFjvu3LMGxDr1ftojCEWRGDyL98c5AQNKNJf
+TL0vLJZ5J7Q69HwBFJnnX5ut2dN0AFIJozi5JIIDHhUNOJuyvJPstpK4bEDx9lEz
+InW9icCh8rFgSBLSbdDoWzDsQSE49/ZON4b+SAdRTkPn8q9jur6+zsXl1gaJ3Oy3
+eJ26WkIqZR6NN7U9UQtXMCt8FBDE2eeh9Cfle09IZQRskfmY8T6oTHy+qzBi4szc
+dHF6m4fm5/7uyDu7u3Itoo8qj3ohvqUiqbpgyt0S6qLMA002JhRL4mkyInHSJbI=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 6DED70AB841AE9C22A03647FC8D1482188D3DAE3 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAcxMDZTDiBstWwAAAAABzDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkyMFoXDTI1MDEzMDE5MDkyMFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC02REVENzBBQjg0MUFFOUMyMkEwMzY0N0ZDOEQxNDgyMTg4RDNE
+QUUzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArlyX0+HfTL8JOwdo
+eZT6R+5f1OZWwWd8EQiGQvt0IEQwNmOQ1WbVWvNhtzJ3EayCkYnLpWMX7XYR8pg5
+S2emBW1AWapza/+GLTTmPPYVyOi7+guvYwm7sD47J4Oe32qM7fqY58BCSpfbOY8P
+feVOtfpkridInxX9qIM7ImMgHRfzk9cXcRkYhgluDlZ+ogm72dQBr7NrSVjFhFRh
+lEjq9fw5QA1FBxviM5Mjl/dhP+viH3fEK83rZMxcLUnppz77YvPWLVfZQE0LyOPh
+iGrDVaO0stwh4mDawMZs3xRg2oixGbEJP+j+XIBkJ8wVBqLSHXbJabT439owHMly
+c5lMjd210NOq9a/sjBoPa/kexAodl7hc05VPUuKdaa1yBxFBsQEmAmIGK4OgGiSc
+nSh0QpBMmh/7guWmW0082HID80NZBCJMr2WEGK9eo1hs/H3C2cv2/7fRp7MPzuwJ
+tZR7OuHfSsALXVRGSnr82lKSomKgaSUFwSazqMqYmPy9UO1anzpFivBLKW1IeZYK
+RBFfVa8DaeVITnEICiYwBpnqKm19hLpBDdPMc2/FWVSppFJRFHU6JoVOwFiY6/Rj
+lk11RVJ78AzwRztnz/wJQqHETtZAfAjPkwdr/H2N84idoWQn9Ah+by+UwMNbVZgz
+ZbCRDcXKTTct5sE8t51zxNT9/K0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLLCn6D2HRDJQqE0
+tRt17xuZnZtjMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAgsvj1XarodikSEFIpq4mAiyMJ0YhfKBClrYZPUeSO+zc
++SSA4Wem4K4KqD0Aual1q55123r1w80goNjiUUFl+N+dfZiFSOEpJN97dL4fDfH1
+wnYXW5BUl3rY95r7sZmT6vMxobF5aNO+JL13VvBO79pAjaTK3ofal5HxpRHGlsbL
+88CS3075KjPsFdgcJRZlkHkB7bfge6kgc/GvTtC10I7k/8ynCfyhfQcHGoAENT4p
+b1QG4cQ/WmQsUa42aoGjj6OQZ/XAqdFNrEA/bp9UtFTIEd6KZao7qhTHfnc0HdzO
+lsUAgaBZSE6YXZij8zLegdH90BpTxcgW4tk2kJTRdEdGsqhbY9sBlvJAroKamZbx
+YG3DIzVfUJ8aLl2EE2SIze0FWhDZejrfXKmT3JoZ5SxmgFxHS/xCbqJAIwHYT4lf
+3tgt94HJLHWKwr2VA8ghaPMxbuipF94AXHZQyi/E5yH8Wsp9VbuaLk3SlnxbN/4B
+j4nsHsn1iKvrBURKbX6MiUaK44N2lDNJkLMeB/nyOZw0yji4p8a8pHsyHgR3J5Cb
+IrS1FZ242RgDp4tAQtFWyh+AHr2J5YhlHpveS+oiPgzN5qujkEtkqb0oY+i79CpK
+gd7lIfGFqsn0ULq8wjD/3fu0JYZK7oF7rmPX59kJJqLG2HW9BfKOR/sh1+0uxIc=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 73ABB81A0225456337F02B25BD39E658B90F00FF 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAgZkNyosE3c5mAAAAAACBjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMwM1oXDTI1MDIxNDIxNDMwM1owQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC03M0FCQjgxQTAyMjU0NTYzMzdGMDJCMjVCRDM5RTY1OEI5MEYw
+MEZGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6Cmw9UPQW6taeZWF
+xrnm7d7AHY0jAGwvtOLkXlcuI4VkenffF3JTUeHadWQmELSwURFUPcfPVlO/AC3i
+hpW9sXvgCSLQA4BMcPT8k8En+MKwXGsF371QfaLaAqyGWAmUjnc6lxEp/gTfosTU
+Y+jU7iBb6PwJ4YXpMkUgVXTZJ0dufNLNj8qf14NSQtSb44QuvAFlVRuc29zj/zBB
+fBz6OonIZ17WJN7MMV4KzxfI8Fh93hVyilk+tsUJEY7M8GCD37Z+BM0MCUQ6xy0x
+cvuo/0GnZBqGJ9mjBvyL2lYW3IbMXBEgYA4U0OXdlnW0OmZ+8hbPmh3dvuxP2w1i
+1lGVF6g6b4ZWhVP11pyxGr3Emz1LM7hSlCzs+ImT8nWXz0UHl4/oI7A2lZCMQ58e
+gcIs6w6PhPNaMCUSMi/YlsNCIip48DI6ogLOnpfm5WFxspfHLE5N3IbKocI08gwl
+mXOJ4xj0xKIlPUznIdpJhHrgsgABKk6rTKSNHQ2nKbSUxvRfkOIuyjURiVylVM9X
+Mn4Gr9w1BZIB2A5AoOlI9/lblGWv8DQtBMiAm0YLHhKcVH69yaK8X2k9zkP+jV3q
+xneLeQt9i635gLpq0GVNgsMdVLLHFpmTlFp8j3WF4IyJsbcjLI6YDWsYBpVBNQ/w
+h/PPVh9/+x+fruyt1CpfZQKzJbECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFK/KsViEiAzM63df
+NrtyhqTk2K6wMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAfXUcbLabcU7a1fz17hl0Py3c8csIMp/jJk+U1ay3Vquw
+ubLMyAEabVGmlw6xqSW8daI/vdXa1c7RnfXSniHEG6XAikrGgiAaOlZnmBzHtpNr
+sULyZbvuXOpN5qD1bbOXlFqP59gn+xHO6WBDVx3oBl5h8fQ/5Zvy4GmgHice3XJD
++LfSEkWTdXiTZBJCsvVJigQiRMRU6AU3GFeyyqza4EcjxJx+t7FHx3QYvPTyV4lt
+t1K8Q7IWaaUlOS7LKXBjRZ9VspRPmnR0ncAOcPVfxkXbSB06VoEq39xKjzahw96N
+9/GAXxgcwhTamYFwW6WxN8sgieFn60vvllo+XnIXupgOZvqOcdQWoW08UAQ9Yzn/
+T1fEC2cE81MjRBiy5MuRgtEQKjNtLoNMorpEuO3flaKOEwgw+TZypsMDWIOUeOYp
+1vqpVp9EfRFnCNMyHnjjrPYz9VEvv4R2dDKcuMtPUU92HtFl/NII9P0W9A+Kntr4
+wVHcfJMrdQ5cwk3dTwIhJvyy7bw6l9USRLpIKLHpV9pXO++g+RX0T+oBCOD94Lmc
+qB37SQHxN9QbLE2rF+GZKFy78bfwKIlsN+RPCPpTie3kXI+KAe53TgU4Emsixt1U
+5MfOQ7S2S9EcCuOAjwr5qem6e6Y1OgWI+v0TBwa2K93dsWqt/I5MwTKYagVy2AM=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 7568FF26F37D11268567B6864EC72A08C818891E 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAArPRmWadTa9J4AAAAAACszANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUwODE3NTc0MloXDTI1MDUwODE3NTc0MlowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC03NTY4RkYyNkYzN0QxMTI2ODU2N0I2ODY0RUM3MkEwOEM4MTg4
+OTFFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA79wCST2/s30yqhLj
+jeYfylkSjR/dHzLADqTS1Uvr0jzG83wR8BqNve3xYcI/IgeIKw4Y9Bk4UY8X+wtB
+Dk02SmbsPoxRg3aDwWvZ4WwtwDoBUySpswH9R0kF5whP700fMzrbB7Rvq4V2iGAH
+1W88dZrEoepIZi5wLBYB5ndj8vurM+rFxKKVIhxKqxUJkgftPVdBZFxGkt0u7xnk
+NwDrYqoMh0WW6xnzTaz2t7zJSC1xgFvs9LbnPGbl6hIAFB/Y38MLfw9f8Z4f3T5U
+sRuAmTzWrDFlaOmI5ZmQSdTRvA+clTPSsCkpmMh/GWuwzfbeyc4y0LTu+sgfTwQi
++AggZ212LItgf7QSAS9nuFjFws+yvACNGbO+yNtAiM0HNDTDTfdaXRXcCQc29/Fc
+N9+AIx/gxzNt+UrqXxqdvwCD4ckB4iLRnlQrNw0sbPHZ9OUGgWpqmRoGukk3OLHG
++ofZiFEAZ0Bmpl+Ufw3k3uwvpNAMGkpHIPtqsLdbbJNdNN8BajfqNHbiQezBUdEq
+ZzKqhiN75pnBmEzNhx4Ks6hGPRdGLG1z73ixFfTo9Xk8OLe1u9jYxZ+xvdpcyvnQ
+9EiwP2LKYPXBqStokBB+5tWZVIRj/4n1qfdB11RfGwXoEzeZux1iyJYssbQn3PbG
+htzC046yH0lBmYZWku657A4rmS0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI6wwEgvDxPclfwk
+XXXdb+gJaqHiMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAmzKNynPb8Uj3BYK98/W5+8oi2O4iwJaOs0e83TnZsclj
+tzSzmm0ewX+M1PJpvqzkcg4IhSSVO1WsJR34hMxUdCzUzLdRA8St5WfvBcNTgXvI
+LuOK7BlVYtcEU3Hklc2NYJ4aeHBbdvgwJ+SP7ce6wLd/v/xJPqHknueRvs437Xdo
+WjDer1tavY/hJKZ0iXtP35GG/icGhOA1IP711IRIcgBXnI1QG9rBTqz0n91PVVfi
+PFF1Z80KCgQZILqogUX4QAiuqrUMFpBbR3attkXCdAFG9D/JZ64E9eHixm3fdJ4f
+dL20ljHrLbHBB8NqUmC0UscG6Ax9A+Qw8hWA3/thSMsQDBSq7jzzWClLnE6jgSgr
+dCN4DaHwHSx6AqJZM7CQs1bPtu9aB2KQjqIJ47UPMGZtccLUg6+lhe7HU7rWbBGZ
+tRZpOOuc/C79siuIBRHd5eCui7X7FtrwMoDN2pPBm9CLO5HuRTJcBauILNtYkxC4
+1u11GCPDGwXaBZF4O2QoZ8PWbNbKTWrHK99Txb92Pf5GEofdl7pY9uUsNk3ussEe
+GviCxGXKRdJzpd5g4B0Kzg5gIzJXHb72TQjGrK/+IVUA6EAnc/ZJ05Bb9saUzWlu
+00R0AYJDMKFyc+KeQhpadPQkw2cBzgrqRTC4NQ+vY8t683QldbdGViT6DRRQjf4=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 88B3C13F6105D104229F5AC0EB499564ACD473BD 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAArH1HOHaDm5DswAAAAACsTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUwODE3NTc0MFoXDTI1MDUwODE3NTc0MFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC04OEIzQzEzRjYxMDVEMTA0MjI5RjVBQzBFQjQ5OTU2NEFDRDQ3
+M0JEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAi+iQyR8D6uzfZlrV
+rNV1g8nQS24WbjAtjSAigXk+jaArho/PT44luOISw8WM1QzTVplgCM8Cck8WnWU4
+rGRuR+eP4mosLwjJtMmhquRZCVqWFUj06NOwPA2yHBxh6sW2wGysYBVRyS/refkX
+UiThQ7L6v4BbptYRM7C2TCvqG+4WgsVlNr8oU0sjl2WN4OLRcZ568hQrEqibkmoi
+/2vljCjRq2t4Tp4CYE3+57STKGryo1OqNHOJbPRSQ4HFYNOuGwqql2qd2YojCD1W
+p0mAA5kpogv+58jpmJGG4O4Zq8S6zVPhCJAeJa6kLeQJdQRcTaA9EkT9C8JXYAhz
+cIdO67lLi85K/y5VH6hKwpXTmVqARRMidcmrCPZcRi061PFyqCoj20L0WNXrobLQ
+Of5nIEs6WVrtfIeGupQx+nwlrTdh0qui/sTzLO+aaVA9VimLJMPNO3AgYt4NOYjY
+5pAzNSLv7CNcaiMh/M4dN9gtaZF8kGudaPoEw6hOKBHlxd5o3sGX8n5B9yq94qpX
+fLxsVg3hsE48QU4RI2wcgQuYw9nhFy/d8SkGTi0aPeUN1xSwxk7zIS71dsi7Oem/
+kxJS5ZP3Qo9ph1OX1IRzAhZJ07+DXRCgnRo6SZi/dp2aL7jd7ey0Q3boneLUowBI
+O+YSbjYRHTLGAvoBRK/SnNgEn0cCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJvLVDJtcN2O2AI3
+BzAUH+VLI8kBMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAViVprHifyNY6ecRwMPyWbcQ47fYR8vXAZvyLC5gnqPZR
+pBW3ct7bBLmSzUL4+MaYYr6ny8+olSuFZLbedHJJhLgiZ/Z4lasztzHBkkS00Wc5
+bOzvL/IPWBpF44I3qFy7umagbiAGTJkVSTPj4PNDugHPuvGp0WOmbfWcmPhb2FJI
+1D7ABsxs+aWXmHjaVLya4cDRr4U3L1yb9sVhLGKXqdgalUIrKIgZom+tBmiOuQCK
++NAVQUq7a0BUeb6Wwiei1PLLEjZrJ1NiSwMuVu8moToStKztGUUvPMiLlH+w3xGP
+hnMy+jRsdqrv+qK1h0/jJvX1ddkrpBJuyEm+ZEi5sdSCiGFAkwtgxR1RsESAePG0
+FzneJezECjvRnju3t9CTKX6BAWsZn43LrcQXXCm6qTt/qJVRr2tmcYl8KZgnp4Or
+sCAo2ZydTGt2ngCJi7UAtOFU0Cpvr2Oo3sLzR8sFvcqPKEKIMcs5NiAzRfWJEqEU
++prH47OEMFpFDYC9PyunAr1hMja37aJU7+027vs+L59PBd/Lu0Kek22F1Le3Q4lb
+OA8ZgO9zCDSqEFq7u5wq3y4h4UkvRke20oZYOtQ+pn3FVeORlA26cgQiX+24sjT4
+2ta6VJBUkRtzoKECNu+OAAvFpnm16h64sPJIIlYR6y4JrEXf8OtzRujzEEA0a6c=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 8E1F3B1E129D4ADED7631F5B4A2B75828AF28128 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAgDQJJ49EKvGHAAAAAACADANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzA0NVoXDTI1MDIwNjIxMzA0NVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC04RTFGM0IxRTEyOUQ0QURFRDc2MzFGNUI0QTJCNzU4MjhBRjI4
+MTI4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsVW6i039QUX2z4H6
+Vx5f0jlqjq99qqMLSE9+ZAFaVI6zyG+27jig0/6ViDSHdxmz5OmiApFUtPIN7poy
+Mg5XAG2NqzqMIRoBM1iyqlq5JSoLBsP/0jZJVYqlF2peytTftWW3U1GoXgYZ8Plz
+rKLZ8rPqUlLTvTUPUlpemPMnd4+tyy0hyKy/JxFww+jI6SCeRpTV1asgbJesHNJ0
+OChZE4nawKyH5dFSQlNkg8kXb375Vqp4UD6gXR9KR9D5zpDz2uKUIhph+ErqNbqF
+XLOL3Cz9lfcvwUHBiGsS6migi7MZ4IVjSaSWx1aFbLPFWvcN4p+LeCUw+AG6ilb8
+xbr/EpDihU15ukQp45MKaI20efz0YL76KjDhplDdQeSnWeBvqsYhwilBQnPC0alx
+6dE4KA6Jn2+m7YduirCP/ms7y0mIw5xdErcYDCYym/Cp304fSxZU7gUjMbPsR0lr
+MB/QfnMlBOBz3vAKoRD2O/mPz6qM4kYosnoqj78PUANw7MQEl6HtGUBOhIRkr9d/
+hIhS7CKXMt6yo+UIsz7c2SW7ZIVuGQE+dNpSszrllk+4rUf7L3ISWDd63gZm3Y7d
+wuChca410LKmDPbhmzu/HN4GazaJiz0Cb5TalyVvr+Ew9yc+PnenpB3yzH3g8iSL
+z+FS72b4PK5uhjzn6q+MPtFVAU0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFBoaGBMe9TKnQ5Sn
+GbBhFYpPkHUKMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAZKhIeDyKGUqCnPbArhPXIsopjCyMwLeNS1XH8URsYi7j
+WnG30dndkizqXisOEd8ABC060KZonE8mZpcI/Oje8BzwVkXBfVffiNIsL3WUqdt4
+llX9H8r3ecM4q5iuY8o00EfRW320u7+fHmLSK8u2u6BuNFfirPI3vu/qaIZujxgr
+z8mVA/5N7dVV0RoAjbnZZYL0gc7PeaEGZe3ph4wzRfqhFQDLAi7BUl0nJW++aLop
+9bwuSO+GY3i8sY6VeYu/u4OFdvbDqFaQD2vSUggjmQn+oFJVAe8UKRTKb/hefbcT
+VcpbFqUTDYR1I5xbRyih4qfGFuuMKr2xnKF0i0dQnQoR6F7yrGvdEPqDIYdBUj/n
+reZNiVSurNNUEqITPGzmvpINeMDpWKNy4qPqG+h8QDmDR4EqC7FLsEO9hj5SBEo3
+G0nq6IQoUHm53ATOIT9bSWScTr4ajNV7ayk8UhXg4WtoY2dbu4o+tt0cKlZcXXq4
+TnFobxK8dp2a6hRk6w2ubmAviySLBmw67w6vR4SeQzc6Jk7zDDVxDzMA3aj6QFRZ
+L+hwwwBP5QO8H7hMchT3jFB5BulpSrOeM1EsULssJ13gF4qnjwtUep5OtFGYcRQ+
+O0wFGRrwZKO6AjqoQt1vt/QfI45DyJzbwEfYeUVUz3OhGEjzIb1ILASMn/HbvXA=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 9532153BAA9D74482D275B1A3E475309D3CFE507 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAgxaA/sByaJXEwAAAAACDDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMwOFoXDTI1MDIxNDIxNDMwOFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC05NTMyMTUzQkFBOUQ3NDQ4MkQyNzVCMUEzRTQ3NTMwOUQzQ0ZF
+NTA3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA8wBdunigATtczpNY
+vX/CggBEl6oxUhiJu7oL1FhFMJCDwwKQ+vShQ6XA9B0BH9CCS5nrPhg1ALL4Pr3z
+7fz++HoWJjAWvJmeGg+BEem4flwPXJUY66Q6O6fF6xW21KuZHd/vvpYFpC1xlrs9
+w7JmEOdDbsXpZS2ZWUvuGFriVMRH6TdXZoP/nWuBeRUMerLYp4n32GSGgsxgjpxF
+GdVVbMUfxSP2DBaqjQqguFcADfZ9NVYwYz8hON8TerbgxkMBkUDndObChq4jxnXM
+qsku/R149bK2uddhXNUpufzXSS8nzb3IoVcgM5vhU2p1WjpFBZRCj1nLkySl32SF
+AaPZ3CTZuLO5LEFnptit5HU5SFXWMoLazuImWrefBUSroD3OrKEb+GEDkomE58Oe
+zdqbnwMo0iyNNNaFKGbc0UndFPzwIv30/h+STCBvAoLuTGeqPul4JjaJi75NGZAh
+rdO1QYv1R5+svU2SfQ6YU26Nh5AzJEkBaGVRlNoilriMmr/t1d+mcrPmCqs6lGQh
+ivpiq3HG/YSg9ppSCsgCs95xCCXCCrSrH2JkH+q7qeh0A68iSE3K2nFOO8J415W/
+Q9gruEfC++B4p8SxlWMLgA0uuaMRhzV2PEXdAJnMWBoN+LmlyEkIiwRMYuR4zBhW
+Tc4rDjKXtEXzLXebzSxG5jyvEFcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOvjNi4HfqPioiX3
+Zk4gAE/va3BUMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAYykQ59HCQ+QHun4VzI5nQdjLuTXKAJmqmv+TFehJEMQu
+zCaLxyrDY6HWuA6gG+eeiN8e56kHK4nSu681PLVy7B6cxPczrJU7skesZXBTqhp3
+jONQH0uDAHsw2O99yYHabSsl3SPvm0D0K6KjOqR6w5pUd9K9HGWyLq5Wz9qBRsbA
+YVqT0GBosG00yWBz5oY/y5lPH51YKsAsrMuPC/c4Jmjx0YXH8cnQXm16IMRUuK8e
+I3x2kxSlHHKuzvSSYAbq1zIr19n2MXC26nbtl3m1QlOkX8CftZEkEz7k/HCDJHrg
+vc7R+AAiTLLR26RRXqiAviJx+B0UdHdVipr6JbQfLkzaaXW19J8Ezyyyci+lJAfs
+m1bBYYvuFWak2ohBrAzUcqoBegTbcRTxQPBZgHRFsRmH0qfzlIodb0AfgchD486W
+jUWSeOOHrzOD94w1ccr3APZ3u1F5s++WV3/Ef8URXW3nj2twlbCx0HFL31ECYjER
+0rpr+xZfrIxxuEUkepJ9qFHVtXdAIYfm1T/qHNqA0qej2NsFXu/1jW9Tq2+6Keh7
+G3ZawojQ9/TBfKQ/9CSG8VtRDP88qvQmCmkzLn9KRe4G0t0Wg73LYdXFY3gtClgt
+2AnTpkWz78AmeupidgvLxRrN2AmPFyjavwCHXeSf07JAea0wvWajaQ+ANSdV7AA=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 97E5D1CD8B0497C04B4655A869C8F30EFA89388D 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAApU+zGYCx30WBQAAAAAClTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAzMFoXDTI1MDMyMTIwMzAzMFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC05N0U1RDFDRDhCMDQ5N0MwNEI0NjU1QTg2OUM4RjMwRUZBODkz
+ODhEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnHUPtM6tH3UczzAG
+CnX57WQveEQpPi5u1mmPbs0Ug7XmUeTnq5WUN2UrwqmGjOavmsOAhttUSi42aG7l
+pVYYSRkrhdFCkustj2kEb3FTVvoy/OXrmkF+HkqD4Bpk7OxDF/BkVpdrUI0mjk5S
+y0IfLR67NMqAomtZrlmZSxgFIULSzIH/AcN1mtWIlN8K111SxE5bmI0qHvz0aRm6
+7q8Dp9EOSeOWh6D9C1xGQeNYtBjOtgX31xN1tTSGYLM34PwCKuIG4O1y/nVslahJ
+P3G+PISW/cgulS20MPE84jbQZMUJ/od0BoMeubWy15Zf4MlpKSZh6Z8/sDChQz7G
+4nz9s2l8uuCek/9xG4dOlh1xhVwDxytORoMCg8cgKcssVCaw5/JFTsVOpVi516ay
+8FMPjfFrmAFEHu7ObHa/3e7Yc2PB3lVyQGMmwS3Vt1mk6BtVuLn/IntdLlDedfy9
+5K3rfQaN2pqURXmSApvEv+J7+bhHuVyAJFPNNDZ5dadNS8MIRWawha2EiwBKJOGg
+BxOjxtVlJ9eexoWF/3R45HnBsY4WTZbffaOmYRvp/xD24lX/G+YRfc5qJVpzD+nR
+B01Y38humCJSVlUcHrvQqD2L3Ens5nOpUJYfw1OgQb8LkwgtGU30A0AlcegOTE01
+8WENeZx2IFL1NOu1Fn4bnJq0MI0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHumUJURyjmBAJs6
+wRWAmm/CCnHfMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAUgnSbbj9dJjtKhplJFxYcCWX0I6GOY0y4MwMnJ4C+hBT
+zG6L6rqEzYGYB6nk1xsuS0A8Eklq1mcc4/dMnQACWF6uc7HotDmVZrudi/1zgSGA
+UQBH7pUrkYcBlmjkjhKKnJMc4nSixHXsUH/pSLUThjig+qC442inlIUi16Khfr79
+dwBNkT+SM9SeoppJZufcg4STroQ4S8n8MYSau7jqLDDe7LO0Acov+OxzuNeADzAM
+F6uxYZf+He2ImfnMdbsV1Hh6XKlHcry67XhL1Kv+2XAxWg31up29z7mhi4SN5AmI
+krHE0VzxRDHH7aZLc8PTRj7LfNh93jUC1w/0vo2R43QPOH8GY/txsUF01j+T4Z8m
+uUewXuBlPcYkbYv4tq1FHRBDpenRmKTN4HnccyetWHM7N2Da1C1DfeyHbSCJweKn
+ct1sRLj3QELysNAO0s2vMQmz54Sgb209szWdn1bz1zHyrAvxdq/At9AkjH447/1H
+ujwx4pRdAcKIjg2u2z4mRVN9cjCIf2y5qIF50Gbe9hck/OLU9AsgjgZenadoTS74
+NjY9R2RvmFJHDHShlP32LOTwzpy3akGiH8z78lDZffxymQCOOtrakm3KI3I/Fi6K
+LywZdzwYBT7eS88D5lGuqwNs8QB+Ze6GuLurQTdZGLCLV84z//b9Fjea4EbwoEE=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 9A643BC48007E0824798430036B658419B70C077
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAWVGze+1030CQQAAAAABZTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDgxMTIwMjUzMVoXDTI5MTIzMTIwMjUzMVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC05QTY0M0JDNDgwMDdFMDgyNDc5ODQzMDAzNkI2NTg0MTlCNzBD
+MDc3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvk+Cyrq4sTunbuBr
+spmHqqzvR0MW5QSDSQhiYpQasO4S6nTjUxL7wcls/gLXDfQL+dORDh1bWalj9OD7
+6hQsoMYI8gyF1MoxJ5iRAAFO6HApz0JhZsBXMU7byzVMoFlEFPsyARTr07H/hmH3
+oMjfiaKWSIgvZYJJ2Z+JBkSHUTQ/vM7vitEnKVskHKyQPO/3jbdeOwmcePk+GGjc
+cR/0LDMeMYUu6jhdTapIiMxFWOqYDO71+y4P7hUoW8Bip8W7RGhzt36ceviiOFo2
+yOEUv3PSp2Ay1psr4LTUbIGVi47bTrav/jsSQbRGcDqVX4BBPtH9eyrcumBWta5H
+38oR1wIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUb+RtkLNrbO16Wtyb0OCejYii7rUwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCYQOAg
+E1wSduviMuBX+ezsRTszZVZ0oJ6ML6BuCpW9Vj1H7qbW6Par5RwGPCqoDoS/EAPD
+HRFthVA/2RmyKKI+PVMbzxsKFHBsxvJhZGkt0mujc5SNtWpyrEDUUHJ1m6/I/jJM
+vRtI3TvsvXXJPz1StlBy9r6rsZM6hRJ8x1srKzIGokXY+h16fWfAenIGGT8iF1px
+SQoujgotz8pFFZd/dygTBwLC1H5+Une8yvHxgSqEwH9eIUtRDE/T/1ILK1S/+N00
+yODB9ugiwIIFWHRLlAv0mUSKDWHLcmi5BqzEcnMtjqb6o/QgdfNrT4SVBpNC9kJr
+ooZm0+we71UH1Gmdj1vN+d5T1FavxgGpaxZfgHTY4YTwgiNd9C7bQ7YiVqHpSwQT
+x0CEKEBHLk88W/qTOlaaxEwK/fkdh0VdfrhHVcJVE7o8hEzAKryeFFwU0FGLgAeE
+2nTyCNp84sHuvxWxFaXDHEgFMNm3eICfJV/dgEjmp93qM5/vdT08hIizn2ihNwRW
+580GrjDYmqbwjySf4078Uwd4P9tqqOvKbFx5GCkt/Hcybd6m79agNOK96vdpwCsB
+gm3TGjO0YRbtwBJmIu8LaoScZqFcTHvO+lxbytDBsnf2Zi41TJ2qZ6f33S9jns4U
+k9zDYeNKKdGMa+nm00cvaBcotaAw9esklhFfMg==
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID 9A643BC48007E0824798430036B658419B70C077 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAgUzuKFE0tQiwQAAAAACBTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMwM1oXDTI1MDIxNDIxNDMwM1owQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC05QTY0M0JDNDgwMDdFMDgyNDc5ODQzMDAzNkI2NTg0MTlCNzBD
+MDc3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlpczXfHhe1K2SPcb
+cIBNtNsOGf2JbWNp5uPbASzvY8o6xTvjp57ULiwZcuAH7qHb5pnYDz9bGPKvRr6d
+cLLoESm7fUpN0NapkQXnruDzj/TRTSqJehNP47QMTGvWmVMTXaatdpQ0myqQDW6i
+CuyutrgjJIu/r4RGGY8YS9jPkjlChBLHNpkXttis1R63CGMThCIqgMNRsLqjvs0F
+hD82m5iNRz2XjvcUjDLiTpzzemFDhpkF0HpGmEcMI4FqUzb4rerAr5SmTSaq57fF
+gMdzD6Mc+yW0KnoRcMSJfL2iENlI4WILvE5LDWt4VY15qf2e/NcWsUW+IkxVtZXU
+RtjgnHxBYav37DKqwV6tYM/QY8sMuJbBZRShKGRTSwM3rDq7er3Ilk6fNqolMzb3
++ZNt9UROiDTudrscccvynSAEn6x8mUG1JA+XFNucdUNrhqNdURF2/8sP1QgzcKcX
+f5I3rGCD9v6pSLXqMP3FEzlZ2nmoles15WK8OhIbAcuOua3Vwt58+TtNdfdwPPgR
+UyuIYia4AXRB59dN4YngOOf489R+ifYiDRmmHhXYExiEqOO3LHDWhC/Wd7dCEaRN
+kQC+NR2K7BKTCFdtof//wtp+8JGi2hMQhjkxtuMfGt8RHDVr4cK4RMg825vBlrFz
+GoucNybBz6s7Q+ci7QiSAKeGTP0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDLFHVOwqmSVg2rd
+HDYruWPogTlfMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAkyZzmWNPqgFPHprWh7ZDXSsPvd9d91WOzJV06/CvgRbS
+uU2FikTE/xK4NRMNcis0kQSTSIN5g/IKKPozm3FBtUWU4C+n16QJ2PXMB8xPhUf1
+3PXb/81wiCViFLl5DEI/r6WSG1tUFXB9SfArS4L2g72yz8Z7Atxy4rElEWDlw17P
+UnxAK8kbXVA570AcgEcjn5Z9ldAu1vW9JiGZt1XSxoPGPN3I9qHf9rYEAmscpPPt
+dddhW0zQ0t1G6EMSuYNr6yMBPT2olHWc2msLQd0iwIgnSAFoDvTvIkITk0q5BaKG
+sb4urv9dJ5i+9vB6/qD6moruw7ryUggPzqIATmtYOtPtEzxZYnap/JKEWug/GkIS
+j1rmR9RhogtURhn+etIYlGY/FIPRUsJvJsaDmJ96pIKb3gHLa7OmlCJD/9lpGM4W
+UAih8EnSS62aF08rgjzDY2mVBLjL/yfAUhdasbrUfYH3gZtfnA6Rm8uIeudkUGpl
+3eU+9mlzwPiQuCJMiWiuHFTberozZoD1WdQsr0TpcApoYLWPcbbk1Sc+73QOx2qb
+m2PizEQNDKbQpz9WUw1anmsQXZWKUw396bQVXsI6Td7vm8yQ1k5SA/MgaUuiqACA
+OEWY0QJKwPXIzE0RUv9mzqOzIq3+BNPM7YkyCm0YiI/nvhfBxpeOI0AP4Vz4phE=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID A0C9DEC08FD39A8B59C46BCBE87FD9948C55F970 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAArWyqsdzaWD9fgAAAAACtTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUwODE3NTc0M1oXDTI1MDUwODE3NTc0M1owQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1BMEM5REVDMDhGRDM5QThCNTlDNDZCQ0JFODdGRDk5NDhDNTVG
+OTcwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAkbh/MkYFevQ8uJXk
+IgXusXrEfGBOrXkER4woi573XGfpvtl0S4OA+zXL7NeC5nI9MhlDckrS72A0cyel
+kbo0Ugsu3Xht0HmiASLvQuKFg3pqzz5wqv/gULHIr9SYVeP1wyipEmyX3Y9v7Ded
+16atBR1otqncXHAKo30gX2WCIBMwyQI2ueW3ZeON10iI3Ln28a34AYqWUNTelyZh
+FAYNBBuwP4PCV2xyhPFJ23lsVybSAxNai6vwfy5JpBu2Xooup/zaZrRGiUXpDTKQ
+SDRHXL5VvM25rFiP+Rih2E0G7WlcZguFRajFBA8eMbZSzOrH1ydz5yoYadJ2e1aq
+rCZDU4LGH6xuUUn0whkPTZKo+S3Xn+w0XZXWef6edFsfPAEH5LT/yBTdyDB0wQ6p
+S1cwKYwoyCH884GN4XH9QQ4okeH+rEW5FOdKHNlXL/EfcLiUYl4kMzcgaTvOBau/
+QZ0Pi3HXF9CoOisTFMEDHNSLnVhsIxa4e1OrjFNh5+vjade1kf1x9rV5aNGYRTDp
+JhZJS/WMabE6pklttmR2b6T6ua7RRpnKYfF2BU5JDOcOi+DLRIB1fXKE9r6xPu53
+1+wf06nYYo6YC05XKUBy59p3gLxwUIQOqdlh+XU4c0/Ki0urkUaOyLRTuvxoAy8b
+ov3TBtOEx8+AYUous+J0ix6+OEECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFG9yZom4n18nl3x9
++MI2803ELQU0MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEACNuyvENPxZSOyWP5UTT56ZJmtvGGzqeXo3mjD6xvRdOA
+Xx7kschODYdiHvTk/eF2NRxhFOvHLKVmNO9IOiL9vDxJX0lBmx6QGMk2gsU6eOKT
+IfPh3xWp7saVJlEngVk/LogIjk0z7LLOTCDBml1CkSBwUiYHxtmXZaIZ1f8HgpfY
+Upo49EVs+oOgyc8n5UNbqKLfWrlvAa9sT3Cs3F0zKT9lfjRgOW3Us/8dH6+1WDOj
+0Ad0MmfYchWTrw8aiBfv68sTuF3k5JkTmkutR5xTv1qUzYFUpFAg95f+HWbX2B8B
+GM19Akn8q0klqD1IT1elux7jFG9gl4IwsDICdTy+/IytU6ruBzU70T3Gy4yWpJAp
+JQ/WgG6+MHWO4gYYdTXBbVaM38c95jho2VLGibdcjnIevIASDjRHXVwnGkNjxZ0Y
+bJ1L9vkMZTB544kEHimw7LQ7tDpm9b/dD7/zWFtxhsJYCNk+e02S/iIWjfBY9Vgb
+rz1wxtbifExVuJvTZxsAHtWrdKLvAQ6L6Bq2WDpm0cs3nNPgopDwb410vZ/XRrt9
+xRdKB26VeMll+CJ4TyZFxTZVrXVocUUtwLtJEuz/Ar6+AFvyI/UZxKsd9c1Wn+l5
+/3CdFjsOBKJBJyMxlJtU3JG3+aV+2RVJ+7IuOXEr7bBiVSrXGEyjG5lg8715EoY=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID A4384BEE3966533539CD0A736D1DD2C213538DBE 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAdLGyRkIDqfucQAAAAAB0jANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkyNFoXDTI1MDEzMDE5MDkyNFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1BNDM4NEJFRTM5NjY1MzM1MzlDRDBBNzM2RDFERDJDMjEzNTM4
+REJFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAslobcq3K5cXIkuCe
+n383TFiCoawBbIhU0x2m2JCRnirzwT28yKqZpxLZM+JlCg1nyeLlfb3eemDsdGkj
+RXXjBT0TlDHmJUSc19oIAv9N0MXB0njzc3a/E6MY8cK9PmLdu6FVyuzlj5/XNJo8
+z/ZtLrReaqIsTFDOC/X7Ukid+8+JHXRwoUj5Z+BX2s5M3jRx117CPmWeOWJ9C/fv
+mcwAQ0pLmI1An67/w2w3Duw7rhL1caslPKaIn1uNmy+jieqbAYjnPLfmzJT63HS3
+dmm5WBe1wYCyPSlE1FWy57oDS101+IUN8OfS+l5vbIFTflrhcn3M+T0FtOlP+bEz
+82+tqmvBkDk3W1L6dSoAGCSLTxgtgGVCYODJOumiXvLGCbvw9xtdmUZBqBnbmmha
+wA9jBiOBLFQH4o9l6pERNIOlCbzmEu2cZMrYAN752hDLRNDy8BM5CFaCcfO9dvaD
+FneGUZ7IgGo/VKNxh931wjgNQYwg5VV9KA6iiRcgG/wLIp4dcwBfqhzS6Rr9prE3
+UQgdON62tlCOb2r0YBMeapOpDusowP4ICMufM31rZeEK/RQXiu5GADBeTrO2Q+1B
+D0eOX0TLe0FNdnHEqKKiW/evl5+garEH0uK2mmUEjWgmy+0v3KdHGUSx2cYMGJwT
+Cj/5KqK5jGxbzAFVP8wY5sXwBmECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPsKmtOLG1uU7vpv
+Jrn9ctMa/3DbMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAVhXlTc9gbD7nt19QZt5Y1OAcLxDaNni0qaH8SUcI3xkT
+VyiMe/l7McfCRmA9D4ZHGHXKka7fvEnWu4GBVkq6N3KjhWMmXgsDsGSUzmAw/rde
+n/2NwybSX2E4RB7qxP1goj1pjw4g6pUBOh9ZBZ2hj8fjozL9SFNErupFW884gtPV
+Nf5cacl202S77c+RxydZRnH5HgSkc46pyxteC/g/Kz9P1dmKLQ6Fd12d18O84AGJ
+wzzGHG7535t7pFvh+GUf6X6UeYGP7arBeGgO11tWxxrXHz4w14+V4kJa0RhzfUe7
++cJcwruvu+N0IxfX63N8fSQofLen+q9uc612GS44p4fK0AaB5wRnQaIONh7xFQX/
+XmkbTZkkugoH2A6IjKCNYt5ZNwNPSXK1uXtvmPZ+HR0uo4VxknfTgtWZTDVLJkGe
+EpRxrqqRe79P5VE1pJRZABz9Kej77N4BkaDiy5ggbizQYqSALbpyVLUoJ4eYGJ3G
+7jPCeoKhiMY5BPvW7SaIMV2AUrBBkYt6l4iks+q/2tckekkGfpZdy9fdqCJL1z9S
+cwvA8m29SbsQ2yTao1BLqNIYRbnvvuMPCO373lVtOfebzYNYoMaD+BNm+ywelxn4
+iYMNOJf27eUxpJaXVRRNoSDlQpQCsyz6KoTCkTG6dxFdU0mpt6QM4qIipX+nha0=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID A4D18726364EA2E3B278464CDC7FAD968E015D4B 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAdGeUnEuju3eNQAAAAAB0TANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkyM1oXDTI1MDEzMDE5MDkyM1owQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1BNEQxODcyNjM2NEVBMkUzQjI3ODQ2NENEQzdGQUQ5NjhFMDE1
+RDRCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArqbvdVSS3Q3AthXZ
++0lRR6Nb9w4vVByVVSuAAzfZK91Z8Q3Kdpk2uZPTMgVkqUouM2Uxf7GnGOD6DwiW
+uYw0uu3NSZifpwEmvzHkhP+rUAbEGEAk7EYVGg9KazXXcXnHuCgvFiYh4ASzcYiN
+Exrt/ZublH1tdvd76+9GRZqq4MQErjUJ19NMSOz+kvuQmCfADJkeUX0I5yMEbLzv
+ovS5rYnnvM7vChfDxw2n0PZIl9+wORpRjrQVOTqQDKaqLamc0iUbOihCkfzPEbx8
+JS/ENDG4AeIYOczRuwVZQ8hSTvusrAi5GFVd7LC0Lp866X76LHRW4GHLu7u6TK10
+JTwkTJ6OZI5InLwICxyPibqAfkuG2AXjczklhbd5TfpeH5aojQ8r0dR9Xdx7L4DO
+mn8iHaPfxF3yGiVCBvpUGkvYIx2oghNqVXHqY8SAuDlIrCrM73MpkODSLqJBwtDD
+8K4RNvRVVsZjF66WeEbMqcrX306Ovt1On1xo6l7vvXbi+CuclV0gL7RvghasAoqH
+vMM37w9Nry2RqBTkOQe6K3K1u++V1EXzQgVESSMjmjZOGs7uASEb6LDtKBUTON8Y
+Iqk3v6gjNompYuVfnC9uYiL/F6qm04UgJnIVSxLrB91AeOESFbDKYyCQ2dt8jhNE
+/wXgV/34Iq4TxpWrGqwcVB2V0d0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKcKYuhZUQNCDhuO
+zVyX4JAMA52iMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAUdxbqfDQdOTwosBcRanprnJEuTFYldWP5zybgDpdlPKX
+SUGO1hL/ZpQItc1k3XhN+R5Q8fIHQ/L8EsyvDG39ZhwQeWXAF5JBUNRIlrQFv29D
+k5FNSdwMzFvvIQAXiPNGsy4PCf2BHCJuSjzZH/1Kxv+B7HJ2YPrSXzGRj83y+ZOU
+jE/40g0SZrGhp+RQtU8DjgfxQiOtsu8S+5D+R0egcPLmHS4LLMasrEAJ0Y6UGuv6
+eJdX/G9uErzq2P9xcyz6Ros2/BGiF0O62lpexZX+rtH4Bf9AhUs0h85kCmyxJn93
+1vH71G0hMtdrLsMfCGzjb3WvTsZ7wcP14mQ9Dsfg40XztPu5sYiJaF/S6WBDiX5S
+3QqIzFP+OQhpYTI49hmEOPo1tnR2uk8Dd7n1q/ddy6gmye2kt8VtXfLqnB+EqT1z
+YBBMsqkRL0AybU0llDFJZrExhHcma9yca2fxSWZ15R6HICoSc+MG9DbL0wzRUaCI
+hr9LMd0iMk56Y7/7pFlbYOY3ILvH6TSZ7B6xEerwJqpGDl+Acmn/6KKLIlfzb766
+jUvUhtjgibx8WWZby8gu8oGrSAarshElETpKdpL6DQ+jQDvHei7ddC72DpObJAG5
+9crAXDZNwsAA8CwOQgZ8fFunx8+2Y0/YhhorXNqnqzUmRHYyRqwdbOqtd7WwAWo=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID B02981157B6D7CC3210016380B898950524350E6 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAdRvUSXziP+ZiAAAAAAB1DANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkyNloXDTI1MDEzMDE5MDkyNlowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1CMDI5ODExNTdCNkQ3Q0MzMjEwMDE2MzgwQjg5ODk1MDUyNDM1
+MEU2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3gYtLMsAtbCLa2XA
+wZw41tecYiSZ4Oy+2knuuT71Ls9Tn9G+vbGngaH4N25gunYXbKuB3/aNKNjZv6hC
+2G/P0ED26OR4yQIunznLaUpX8ymMYvV0wVdHvXdtOOZhNYSkIRBx4knCQmmDcRYv
+p/bJluwZf3Cw93Qw2Uc8Zz911TL2nOVBfgePlH4YmQGNqV2/gm1bl8JwhzFZfV3C
+hG2x5dhpHvzJ+RHJ+F4DH/yGwPdbObuEHZZzkHVHshr6pdWVk+WIsLkcZgYCqGXX
+b5JLFxyyK3KLBSo2MkY05mFzT+I9CeEKHB1X20YZSxfL0nvHsk6Pr7MborvqgaAm
+vlew4W1lllz3OrWaf6OV+robgkJKve5LHquW+jeyqfcnV3vJ0zPa7tZ3xBvDpSsw
+2eElOlym6j0y2ehyHoLPGpbzub+i78o0StcZjtR3181gXU3XX2YyR/rjqIhMvnka
+aRseCku6KhikPKpOR6u7pUt9/5sjTqBMvMAF8rt9adFzrh7g+C/K5pdssoonMaty
+7oD+klD9VRV9rtHL3d3Rm/4OTZH5ZmKzbjhtlcw6lku07asN2bsFmIxPT5dMpAqv
+Br9MHI12jYcSReMfPNichHxJzhHmpSlr55BapcRVDgNvOWhayoJahA97uiOQAQHO
+rHajt1Ivqd58eKROhX1MtwZoN10CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMDoY1HPu0FyPLoo
+1h0nWKQJSBTOMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEASTKi90CBVl7AJqrIDZQO++929jq5KZi9w1bOYOWA/nn2
+5Z02px+zviAEp4nOemrN5LlrcsE+XOQGoi8HK/Rjb6MbYekpFeN62FGZPZ6T/Rx/
+DdP5vHbTXlUwbV4Ynq6pF4kQEV9201QcxWh4lXqY8AnanO25ARcPCeHQxOxdE5yM
+s0uPakJf0MeoeFvTzYtVFGJac21qPG3z12s32njlOH8FtUfDzVryD74GNaAO0kLl
+IrovAHfZW2NIPcY8funryW0OK68QPLM0GOG0ZDLXldj+mvFBURptiRRkUhridr08
+AobGvmApjaTMmamSxUEPYyv2sibEWfIr9JW+HOthYV8ecIMi7NTRsIdqBfFAsadD
+pht2By/g1GLWRbaUtG5Todwu37u9CUofTsFix7zrgMc1xY1yl0RcR8dbgWDZkxEe
+35QjLDnLVGpdROAhPZtfzWFcFUya46tcu6LR7rBfkuCg6v1hBMwQlIlHVjiSglkS
+2CsuKkJfYRkHeQiTvtW4Alv0lronjfS4iukOJaY/ODZgJS8Aw4vNmeKHnyK+F9cP
+HFAsimXr49FHypIzfK56sSLid8F2B173EiAu7wsfyHVjm0smdwKuqS+JH8MNB6yG
+WL1IS4DwfaxnS+yDNPJNj92UwZ27rNMN42BwGT8rTPMucDHizaYzs/sKAWiEaag=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID B080359B59AA938800A4AEBFD10CC70CF01B1B37 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAdN6vMKhMdeMLQAAAAAB0zANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkyNVoXDTI1MDEzMDE5MDkyNVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1CMDgwMzU5QjU5QUE5Mzg4MDBBNEFFQkZEMTBDQzcwQ0YwMUIx
+QjM3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAx3S2WNoqz1o506KT
+f7hvn0qPPQO4qCakEU1AbsBtUwxtqhSjKwwtA1kqP92Ck5fne2xxMqnTsI/jc4Um
+pg0M/1x94quYMWvlHLKBzBSLUPXT+ZxEiJeTH3EeVyTNxVEhYv/TdDZyLHN1FEDD
+qlhJspVUibuHQOx+sw9gGy9VLm9uY8eF/GBuQIciMYaxiSQovyCNwRqNNj08+qSk
+VVl8meeWbhlkDkuTK48HZVHxUrqOes+73/42HGXOhXDzV9BOYBH0+Ptp2yHZUCNs
+XuQn+rOz7Hm7I69nn/fivtyt9zmtgFeIK/kHHRdQ/Lo7NaSwOKWfNAcSgOu5c+Hx
++y+j2H9YtLAPcreFmfRdgwu1PFBRxZ2gciwEGifJdyMEVb3KJpYJZnKICGCROwdr
+r5JB5fXuFGzRjI9sZWrTkQCHbvlW1T1fD+krb1MeM0NqtW1MzMsWVZNXMLT9OS5d
+dur6f9OjENY1BXyDeGAx6+ZySnXRhPt9aqViJFS27UGNpJgJEO4PfTZZB2ial8hr
+Ppe24stI/5VM4VHX7KiAK7/M7a5d4yG9qf+NnVZNQKzGQ6DIS/FuSJ+zvGLJ0H5o
+c/Dh4D9CU4alh5HOewmpcnxCBxcplb6XsH4oESj27cJocCqPq1skchd6eL4W2EZg
+3zw7DBykzYwmN7yy1Q5OLRhzQRMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKsbLPauCJpzq2SV
+sTCUK4RbgJKMMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAlnFX7Jv/u3tmFuOzcx25Z0m+mu4ubmOlv4du566gZ/QK
+u/S06OwEIRS/bN801w1kdA0UwveDTCLyOPYm6aRzhUCIknY0nEEVM4TKk7Eb7aeB
+3kXhwy9AMP/s9buTuwbQ19RCquiSp6OZN63lj3zyZyDSPE1cPlxsbXNOTikjFNlD
+qDMV1SCAeE4nwcFzCjpsGYxOTScj2L3lr7jM/3rMQEHygwdCW0SQdqzGf3wp/FJZ
+Lbm5qFa46YUADYn8eiyHJ/KRYa4M6ctrF+kWB4Z4Uy5hl03uwDo/dfkyesRtONL/
+qsI1ibls43Ic6EUwzUhFKhASIBIg7SctpqxXk9a5jBI1LXBVXCFWHhOmz32NWRcH
+AoHEwugSgN1fpOhX+cFF4+uyjZXE7oNzAV6nlMsVI9a/yKy1iOOcE+r6kuBEoRQN
+7voTbJ6bj/mAR611K7i3eHeREF0ISHuZ8X8MII5tYeYN5r6AFgXS0/0X3sy5c4Wt
+55fyJusJlDFVHh+yX6JtZBjTLobmFEGlbvDvieoULQBoO4C7yI9v+oXoqEuZ7goT
+9FHTwe0SDaCBiZ0rW1BAQwF8w7fV7k4ywpQTMWBwxSehhfP5cjoe3lKGzpo5H2ET
+bqFtNKm/hGWw9P+aI4wg+PfZBdEc9x3aXOqG+xFmU7LUtRsApULQKKau3CuW6nY=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID B2D3CC08144C50808C289D119627479BFFC0E4A3 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAg2IIdqEDOdluwAAAAACDTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMwOVoXDTI1MDIxNDIxNDMwOVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1CMkQzQ0MwODE0NEM1MDgwOEMyODlEMTE5NjI3NDc5QkZGQzBF
+NEEzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtitO09ruCAm1YyMY
+8fv51PwptdPyU9VK+d3gvicV7FXqBCtp5xGs0pMwU78HDn+G6ieN5ZgcpNfVulB0
+7nfbf/QHgdu7sfHBwJ5jJRb/12T/JpET5h3lsKNBIG7gkcGyDKgzXaYKcYUwovnG
+UCXRKQE08RXzupn7uaf7gSZ/xxbtW0oVyst9UQ3yFWM3BzDWUTNeVownYFBZRJIU
+7FwvLRgZHw3RvoRvobU/0OnUIy6UY8NHbRZJUpuCVTp45B0xYkvH95C+HYLH0K71
+CkfME8uSpz2rsB+gtaLMLn8oouhohWoGAHBha6KJe0iRzbIYslMFbGAHoFKK0bJH
+qsuKJS6OkjimaDjUK4P0fFeja7tyALEuBVL+iJ4XyO/y7SKP43vGPSQVi9d+MPd8
+xfPbHKa5keEM9uq/wegev7jAdJWA70stY/0yNdrUwPlwawcRL8wRd5zBe9k/oYrR
+z8ZsPmzhvCIyxYmTc1gpneonyNA5MSZXPhKlhg0YRITj6K38O6jMVc79QzI+MLPP
+bLpTc2TcyxiRzgY5G/fVrFFhcnJqRgfgzJoGD4dEwB/DU9hCcahxxXUbmaolhly8
+BpqqXf1QfbSGQMqGhAyU1fMqCb/8B1qqPufpGwmyoufNwK7v75JTEP2hAP5//FLE
+GSuc7AqDzORl99YEyGv9tjxgRY8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFN1l41RXZklPD5we
+x8I6YcjieCYdMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAgkzTO1wBmvjS6XvsxemRQhoXWA501xySjtCn92LEhh/j
+RHSWCC8vdhm8qB5Wl+F41nJHCZUEARCTuAJNMTTmDkYrSIz83+ICwhUAHZkaQcD+
+INg9cJfvPNpb0EkVUXtoiMLh9vIiF78kedxCgEEi2kJy5frF+ZHBjTyRetd+ZcT/
+4+2OXvEPZcO1lBRpU8h+0qCKW40iFioyAUel5PnguJelDAokYkPAThN1+arO4W13
+cwCdXbtvz1I4/9I0lRwxtXN4Hmg7JNSw+VETJ+cB6kD5xjzmAGY+et03maalrJ40
+TNx37mdhlVLdXrSRSnRvOXZ0BhFT04OL1ObzoXK/M3AMlCkndi5H/i+GzsAayoqY
+Mj41EHtc7y1EkXTbM7aVA+kgub7u11uXoDqisyukc4Urr0rPhq28TAuU/eCS03ut
+a7OvCzuAACDJJFSr6NqI/cEv3t0mrZ/qOM0js3IZtbcjZRrk0DllY0Xt/HUikzxu
+5UkF8M6mgLBx/0cYslJM9KYKfkEvQd2SupioF9Ikk1vlYRin3y6VPvmxXAmhIX8t
+AAOwenfsjSAcCSZ9duDgELBAb5x9OBrkN/z5FWphNghrJLIaQqLNTnteM15ob4TN
+TeU3hO4OQRJn2UYMFxdOraeBaA7gyXEC2+Qtt4IQZK1LkDdk7SKamWDkgqUMWQY=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID BBCF7CC184213166DAB5BE53A87014DDD348D8CC 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAArY4ysA0coPEzAAAAAACtjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUwODE3NTc0NFoXDTI1MDUwODE3NTc0NFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1CQkNGN0NDMTg0MjEzMTY2REFCNUJFNTNBODcwMTREREQzNDhE
+OENDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAto/LSZc9L/AJuSm6
+3GlcwOfu3BakVy0Hf9zKIlf1VpbmKP+5ATiUgyVJTr4nv4WQ9I+a8HSn1v3nPf8s
+ka8RYkkCs1wi8hFSAt+h8jTJP1qr9VtiTh7LbvrIXy+o/eF0gBpe0plmWfVUsw1d
+cecPZksHoj/9EG1QKAD1phXvHRjt02bqRkVcflftrvqpxJqK/AURpKe7Yf9Vtude
+1oeNofXnBIDBBfkkR2s1EGEtd/nYz3m+Kga4JbHwIXGUYbx18zNcm2cN19q99ROj
+8CMFHRdbowftNTLpzsVLhIyr/CJ/VV9f/EkqVUeEu3/ibrUQBxeKduDjscnwc3JF
+SHtTgpES8EUqt8eOEIbss6frbybUoi0lDluA3C3K2GTQSGsiLgtXsVtfBP+ANy2I
+brI/KsAZ2ddk8JjsFg2uUMJv6uiNr+3iswdTuEThKvvORRIeV+PPPNoH9iG8d8dh
+ybSSsZFxccXY0OJWoKRvnG1mxptxxI54dZQWzJ75CKRCohBxpaBoYMYHrJ6SHw9a
+zfY4fN+apF8Jg/hZbN4j2iS+EfuzrYL0WuxSAb8lgG5jgARitX6kf8eAGvaI/Y3d
+4gifxiAORXajjOQgIHtBCZR0wk76myelOjvliobhs8cwphItjGDOoPF9vPYNCx47
+XizJLNgQx+XdO+OMXsAe4KaBIHsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHnKN0advTLXnNv1
+khRyY8yaAIBlMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAJyZudRQRox/rEg12w0XV9zMd1Sszy406CFXwi3OGORP5
+ppPypEa/1I20kgPk3Zevx15kC2bhL4wvTjNkndJZOU7O6eVXD8uymS9nP+oSPV5r
+9GQO2rYOgdMjyCA7MIMJKF256q7J6EnYVRQOb0Lfyc/wrwmEQCGEy9cCm7GezVCc
+L2Xl9X/Int0M5blJtebzSPtga7dbwi+KmnGntnW4Cich+APKuPltw8o2IID0YeQA
+3tjV3Nk2y7ibX3pVQVFFqm951ZdYS4kttkiaGNO5Dq4uv58v1jLpoHArzgA1986m
+vbdqKwl1WrfsJRUMZ5Jwb3raf79vB/59LZn6A/kzM0zcykTZc4METUBTmbK7gBqP
+6PU21IhgL+LjmbxYvlvihX1E/4m1KPNh92Gbx0VU0fT4TxNCXdOgl6AhipRzpEmW
+mZ8jE3/4Qm2TvMZdFgPXZPC6eQzJGiKtiOvcyjZSXFBAX7kBlspGXzilSQkL0cFs
+Shjmd68HMDtqb3NC4xUvhkjhKBcmhwtaaASJ4LkGGj6LKu9wk/iweR+sPIe0oj49
+EjZANkLut/z0JffsMASRl8B+sTNGIAPm8Vz0ah41B/Z7RgSxytMkdKHMuy+TIsGg
+BxY3sGLClv9hfRNvjl9bksmfKAITnsTHbpihI7x0nvFz6VTUKmd35RtRvjpITWA=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID BD6C69C0759EAA95DD6D156EA64170C4B9B36C78 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAg6IT3PDTRSL+QAAAAACDjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMwOVoXDTI1MDIxNDIxNDMwOVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1CRDZDNjlDMDc1OUVBQTk1REQ2RDE1NkVBNjQxNzBDNEI5QjM2
+Qzc4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAy9CWR1CEnQx0zTtN
+R77zcOykxHJBnr641Q9zpDB8VfpY1Mey0LHBZq7rqdVw1Y6kVH9N9zExoRp5pWMo
+TcUQpnEO9fU/px9YV4QREEmdWItt366WFuofr+7epbKzNC+KrAizAvIzptQM+Mz5
+xCN3f50qkJA9DlmlC+JgFHs6BnTjjC9hKio4JWAQHaxY9FrX325JK6YtHL5ewDE6
+2e09L2XV5MQRglYGtssCR9uWFVCTFHJJVw4xb3plrllk6MEwWIT4ojlk3GGxfsgT
+sP7gvf7FWMMUpLLtLJ52fmL5PhE/zDT/YTl130heigfkTPP3aOI9R8Dsa6qibMSZ
+MxuBv3x5w93VoB7EhgZ79KKWRRny0jXgW80D7ius+q3Iezw0qaBpKlBmuMIf6dm2
+uQeDHOTKh1dCbPSIh8p8YZVvGeP3prZtspR8J8dGH1tazZMY3BS9myad229szuUM
+sAIZprfFY6MczmiNueMkdz5T1uLr66u07u+UY7+NvFOm/9+l6KyhfkGJNYWkAiJI
+jS+/zGl+MokjuINApbnzYvaEPGkiwJ8nY67i7k7MhQqVMkZCFuTWbN2VDytvXgL0
+c2Or/3pBH0IpPXyWkIPiYBtsAc5C9VhJclUtUfvD1MY342re5MAmi030OlVfuWbb
+yO541LGwNYAjf0jUoTU6bbirf8UCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI9JhC96ySm62Ebr
+7f6TJ3OaJrBQMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAJGnpR7HYt4B8Weedudtq8sE6Mp9nZG/pn/bTAYz89Izt
+GJ4vEqr/kvBtdCYYIkrgPJdCbNIwiLvFmfUgW9VMxwSYpkiibXkz8PRjTHftrOc+
+ceCrwWE0hY6nINpyqRa/SVX99n+PWZADi5UGt8vZdHbQFnWjZ7YtBdEd6ZlziuBX
+Qkx21d0C+PQEp9tniOOn+L3mNEWrV+D/cVMRoZk4fPp1Z9LtwLYRyLG7izl1NxER
+vnok/XQel2pHW/3oxi/CidId7Gx+QaB6Nx+cR9xOXlDy5nSzlKEesuvb3XCU67sR
+ts1M1bn1/eIDizGg857aqWDbi5NaHVFJt3X4DveEuILl4Iny4AHSBEm5Ky76c23m
+89HVDZDmbCSl7j7uqFHN1yyG9Sl2gCiWL8wwyv62eR3vrQg2D3KjjkvRef1nK9u5
+SDchetlGKVy2GZzx/elCwGVYyp2LTKfd/yuaGCwYgXya6p/eYFB9FZoKwpXlRuwj
+LMg7V+JlPwVkAr7a9uiid8V5lKLUh+EzovgexFSqlSB+HG4zq+CDxCkkn7POLYT4
+sPCgVqgjwErOV8ByChNQ9qnmuNL7dEDWuBoVBo3hopGDF2S/9n+QrNP7McBsVCvs
+GVoAaGYgkvQoHZry24FGboJpnGsvkWvYwBw54M5e+S0UadPIEYheHA0DpLUBK+Y=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID C0044E3B23F43B2854BB76AD4FDD79BC62986C55 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAd7eZifmvDioLAAAAAAB3jANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAxOFoXDTI1MDIwNjIxMzAxOFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1DMDA0NEUzQjIzRjQzQjI4NTRCQjc2QUQ0RkRENzlCQzYyOTg2
+QzU1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxD2t0Ax3JpHOTgIE
+BDK4m0qU5kD3IDRmlXWwcIjwqZIjjrQHXF8kBg0djFyvxgcRJ1p5fclXbazzrrOl
+M15LpAlxupbDmuz3H82bTWGp1QQJzBnYuMBPj5yI5c8ihShCPuuqbNvAD4seH2yf
+8rDDFSU2ePhoL+W8aFZdahOTYTz7O86CK4YfsvIE3wDhYk8JG24lWiiQ18CSFTvp
+ft8y77sLIhPNJOhUXwh1b4YH2R8tjcTlhxgVgZ8Cow4OBDLAVQS33i+CKsyyvQDK
+1WzjsIp7Blp8Frw5TEUbbTIuaX5hX+ZKbARCEYeccQsebbwYW+gF/0HEmcTrCT/2
+02HZQpjvVw73qz6gejdP1yGsSiw0XGDkEAfeAwLxkZzZVBNj5lf1+ZJTBuc7vlYi
+d2ZYNSsN8SVNjfinSewYnNIjRawwMnjkxNcscLgGf/768qIwqBOPOCVYLPjDOma4
+kulEFfWlHoK5sAgy02KsF6TIEFLwiwhxFniqEO860G+kW9l2uhUTIwG5Idj5VAHh
+8wzsYMhlzC2uOVjNqmitWG7SCsezySlVjqtXwyWJ8sQwEAC3cuoUM+f35JYDjs8b
+8n+za4px3b6OE3s5Y9EOuflzxv33KtZPR5vFozMCUK5rAoqcawvsppTOXrf8OWlu
++rra2FYHiAZhpxnH3QGTHgFpmm8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFK+/r4F4yqGgcdoC
+LP2iHVfvkVQOMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAULuTajIfYMKit/v2Atz63Y9OQYlwr4L6zjY/2GwhvZvI
+5DpgtC7h13N0t2IQ/cxcZVDswEyDFJYviz43DX4TqK0jAopSbA1+TFeeBS/PS6A6
+KH/1R5tEDekLT3f2aNbbqW2DChuBQ0P+9Euqa3LPWZ970/N9AgJnL+ImSZfI1PXS
+X35lkJK9nRCTJ9iCKzBNB6144uFYUA6cbzvP+gKfJMfRqf/Vbmfmq3jxJFgiPLQF
+ZjdWTYN/bh7ru5Yu2P1Aj5Ftg3iiravzNasDLa7il4l869rleEQPhdPp0MXEbaPG
+MinS5ihWLnNQhsPRIJp/fBjsH9WVyMwhxGwDyzZZrHEWOtXkYqmbJ7C4ey9buqlq
+rCHkA1KdY2xJmcDeYWr3dez3eSAhPTzYNZoN8JqzEbTTFrwsIveLaTi7AzLkT8Tq
+PDEByQ0A55IcXgb+iMoDSa7Y2pfq5nqK2yMK8UAARjkQBVlN3Gm6pEnYHuZWUkdp
+O8zUPes0DSZFSmBN/pJ4e1lioGK5BTrtjWpFwvK8Zn2DEaVmXCiUTNrto/i87K+n
+qEMyT3Okhm317m+Ou6G907M8t1yT+liUFsxsOwzrS6AcEEmOW+ClVjh7/dM6GSWI
+AOuEqU6GDYZOux6zWxgo9JJXx0Fu6qPdpMs1N8ODzp9aVeywVP+/YHkyXfj8TMY=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID C6CB2A4DB7294BE911724F5041310B4C42F89BB2 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAArcL7JkxSOV6eAAAAAACtzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUwODE3NTc0NVoXDTI1MDUwODE3NTc0NVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1DNkNCMkE0REI3Mjk0QkU5MTE3MjRGNTA0MTMxMEI0QzQyRjg5
+QkIyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0MdUcR2KUcVN1UPa
+xKtzq+z/LyBxCQ+u8kzr0gLNmt28LWxdGzcNJuHq6iH6K46T7kCQ/33D4iwe8fVE
+9Utdg5SWYRx+fe5wKG0B5v0RMfJ0+huNG1Dvqs0r8YCr1veT+vxNpqYDk/6HLMyE
+wTGrUk43A3Qzipfoe2meOL4uIDkadLWI6UOqsiC6NO1NvbWmqZMUqPd6A6OK89OG
+7w8XhhBN4gxfRLeaNdLlNn8leJg00n//lflU8Ovw+H9GdWuKGU3oO8tHlnXgLZYK
+V5eN8r07Z2qNJrCoWXr1d6ElpHtLvxb903clX+Lu8vcMc9au+cFF4dXJyq8Odi1y
+CYT4gqt1EfL3i6EPy8gopRe6lGM780rQA4cisKth72l2U10NdE96fEVaOfIqsR9r
+uTWx4AxcccA8yAKBovgOXfvvkNtzAPrCxD+ZILDPE0SJ1AhPpXVkqWuySs90VNQL
+1QTKdI32NSYEnYqPqi4/ciOSeRJzBccBxK4UBfmtW+wWHmD1PyQuseDanRHN9agP
+VWe6qYWxpj0qxmTH9WFSb24Od+DTt5DN0Eedal68HHlvXkcyoJVN1VrS9q1VnYBk
+XdKzWZxLdeFDM73oOkcpd1R8s/ute0lu0IYeZzZe3zpu9edk/mByWTZdyNlCE5Q7
+h06Z/RzUIt9o+QLxEbQvP+hKvXcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGzdsqqTCDArFJhM
+5yHRE7ttmHA7MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAZMoelhvre2c2jVvY2mWQxym3SN6teqenpZhjVQTGxhpj
+WIbczvwN5OpQHpV6iyewtcp3vJk4YCrJOvsPOVtGApKHQoTq+kLn/Kem2bbqCGHw
+TVSVo8d0aBlMQiZRwoNg/9nhzJ6FqGVKujXgnsK9ZEAfxfEEkTNatMOIsmN89DfZ
+VaLLXVX4QBtwf40wN2wj7YvcrkRaeru2fCSxNass5MlWpvRKArwC2w6Qc2rWvJQT
+yqq8X5TCLf8ycqpXw/O0veOjCmik+WilzW2ETkUu8YFuMEzY5qfTJSVtc3aPCDl9
+G6X1R1U7dxLzXMM0eDjnC52/MAtxA4WkFryh2JP7TvmMifS8tgRJO1dbxLWG/GM7
+RY8fV8ZMTx+wDc2s1Wwzk1N9wE5LJ576mC5E0mkmhF2cyrmeyd5fmguthn0S5N6G
+buYKugcl+jO2PFgTQrN1a/8XAg/mSkWptg5qIkEc/OK6QkkoTEG4jJAIwA5/fC5+
+BMEK6oSMGqAoi2foIMse+0e3qp/1h+0uJzyVP3lR/6f5TuJ3vXXlCIJJplKJ3BrV
+Pm9tABDFln8UANPBbRo63yAVRusxobl8LBtGJbRbRiPi35254QphwqTYezl+yVug
+6RwhlK6gctwdycKaznqrrxOOrNloVawjwl+pMY3mUq3i3F5WTg9atfE4IDMCl2Q=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID C7EE1D9CF6A291A06E4F5B88CEB25CAEE12F827B 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAg9s9AL5ZDXlYAAAAAACDzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMxMFoXDTI1MDIxNDIxNDMxMFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1DN0VFMUQ5Q0Y2QTI5MUEwNkU0RjVCODhDRUIyNUNBRUUxMkY4
+MjdCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3FVFCfWdKwNE65tC
+yLhtlUuUqX7kumxSSiP3L+dU/HnKESnzUglRge5fWZOMriEBzClRJG0AyU44yAHK
+QwzPRKb5Dyqcs7Keg0i52jVAb8BX4AqjSfnpsZX9kHzsS8Nfywn114F4TwlnDQVA
+8n/1Mj2CPghrYPQZ33jUDV8SiGCln2SWS+3du9qTnEbD9RmmikUhGB5KzSWpJq2i
+ZaCk+xoPQKHEYfuc04OVJNZnYeDG8J+eqOw2Pp0aEDF+ZbHwH6mVGsbuNIt14+mr
+xEifmBp9jVSGls06x+oZgaM3ER9Sp+ketbvnrHxw5XVCFDIk4bxc8FAdJP/wyzPJ
+NnvtGTrYJTmP+UGFwpv/2FvxHuxevFhvsE/jeg/a7m9T25JyLJGqoYddtPUK+FV8
+x6+QIbsRxh1NvpQERluCewtH+wMcXRqYGNBkDmyPRKV87yn7dtfvOSKMxiZx9ant
+boKq4WeksGOBENLgdwDvREMprp3ZMZYrnrvj+uiU5XR8gb/caAeUWdYIVGrATxR4
+QKAATOaAuqVTxVU6VUfEb8+MW08D0uV7FAsopgvLQnSWM7kDfrWZyMsvcs9XDsja
+zLaMD7OiC9J5h+iawJPSuphHJs53+UsO23gpsggh041UTkIgxjx6mPZ8W4ZkHA10
+0E8wQG91iyERBifpPBgwsI3GTY8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNx2W08dF3tdMOMW
+xeNi5E87DwXgMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAhGx9rFEocX0FOIO5ysnELGD9QBPq3rNQURx9ObOHnjUI
+cwVf+4agrI9JaTl6SZvlD6V2TCOtw4IaY9gZ3X2svtcCNJXfKbkOVDTXiWdhqsJS
+NYKiYOHi3ZJtakj1JvTG0vXPcsMyq0GFVaStvrfuxVkAh0CATB56lSU0aS/sA7zH
+stJi2pGMoJayTOzux8BGiBzngocR+shLPs03D6VHIYH4asKvvSgnmncOH0aqIi7k
+0Wd8tkc1gCvujM7BMXl9ZlDNUmDt2MXAiNtaoauvvAOT6AfD4IaMDf6nDktolP4h
+vWXqig/GItiIrAbHDAJHRBRFjLp9qMLHN2YARzlwXxwOy6q6T+kELwXc6yuBOsUe
+AOcMK+s8BCVlcwVi7a44j5GJ7y7HKLA04WM2i2a2BqVDZ74gbcFbhCfEPFhRBnqN
+vyD11J0qhkWCm3w+SHaYtmgD7ZmF8lVd4xAE+raAQTpRqLqgWmw2sKPmsCdWtGKv
+rQn50xKyf3F96BqK0EEob+Ry8/yBCVOj8yD+ion6GF/ewJWWwz3hWY8LmgEO7k9Q
+OURd67MirnC4dfTEZEk+Xmp1CezT9/tlr+SX410Af3X8eANrylCC+RQCtUVoOX1F
+WnERyLw+9wx2NpuV5HZboyLT0XyH3S8ZTjW/64aOgQXVCT/ZqU6oXVb2qhLce5I=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID C88C75FB06270BF7EA1244FB9C25DFD209B7ABCD 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAhAEpiM5MIX4nwAAAAACEDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMxMVoXDTI1MDIxNDIxNDMxMVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1DODhDNzVGQjA2MjcwQkY3RUExMjQ0RkI5QzI1REZEMjA5QjdB
+QkNEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAoYy8EPkqmo7E2BOC
+IyqW6WIRzv00G51luZV1idXjcYnHN3f5w2DSYBbMNJJI45ckFz97wQpQmuXmGJs2
+8UE8HZ2sCH/fDinRyZSdmnE2cSunBAH/LBiRpHSzIqaIv895j2D98TPoIVx7wj6K
+EYehMOTjLrJAES6aacGrWw4bieAgBzebejSySIbQDmtIoGA/TbxRqQcCp/7Emjmj
+rYgT+ERlCj3Off8Qm6YWJjeLtcHMQ5/SewwK3yjCS9sWg/Ew3hV5bLeQyI/Rm3hJ
+HhUuK6/B2T6ykju4huOSe97QSSgfTGcb1Ga8XZSZ5efk0L374+9Sg69e4VVBoQgn
+EOjpH3YzHYWHyzeE6ZrBmSVABspgJnsLfORtKY1fqXXjxCK4ILF6K3S6RwTGl7ES
+E70PxsbiXxKkl0TwiAUj4UJt5h2CheogU+S8gHhyTLGlPoIUSgFVMuvMs6uJmWKW
++g4bkW1X9sqW2YuDfmTsTfeaTK/bv6xKiTTDnO5WsJ1gnGABRNagXKZzEZ4V8v68
+DRhkG/kPeDoSjpcpIHW3foIQNpTDoa3Is25gy7EziqgeoJ9Xhi53Lofre0/a6IfT
+YUCfwISBIJGAU9GaVfGfrRZ2EKWhwkiSSkyqrIBp3bRUVRg8eCEPuacD/imVu1XZ
+P9PlG47atC3JsQv0AD2RlOsfWJcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFBbHRZFWw7fy7Fxg
+/+OVN04qGoL6MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAEYvTjPVmSCJEhJub5fKBMRCPga55HhV9US1dxhKTjhGD
+5MqkpC3SSMJjv1GnAoyhgj3l47WDoj+61qGp/dPZL0gA1FwHQX87am6fUZAt984T
+t8RdFvjZtNX9o39YqwUfmPIZWgtmuY64gV/hAnbCkzm1IlvoSv+MsGnNgsmAlety
+lg1yZznMWcXEAScui2gQ6qae7LbNVhICJdtr4w6VkrNnGZUdEGuAXBJKsZv7ZYvj
+an3uCQDc54w6C1O2yE255P+RTe2WGg4dp3vrgFjWv790WQQk9jC8dDl6K90yvLSP
+l7fPwMJuKo5YqbrPEsTiXs8gmhUl/0PXmYf0cQwpQYC6aSkgrdgzbeX5408u81Yb
+9fNcYt5gPDB5t3xOi7Ybw99esS4Qhj4PXPEGrrYy3zw71pK7Qem6VS6OiYuBc4sf
+hIBl02r5ho9ieVuL5Wdp0kVHTyH9lx7Qh+oY8q00LGwi0LOaax3qprncuo3Uh28s
+ex+6sj9E5TtVqpSOsiIURM73FRuFnSamZaWeSKLknQkz1H4qhoxErHtbYNJLYkea
+C9c7eR3b6ayARapFTixggti6kJiYeR4W+7yn4CH5OyXMaWNNHyTDhXboxSlUkvJL
+4246sRzFzBz8qdQqp4FNaTLTOFwj/G+rxdUFP5J271ZeqWeWABxSud2VvABuMoA=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID CA6970458673493A8AE1994EF1E29238F27F4518 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAArgE8jCCus0c7AAAAAACuDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUwODE3NTc0NloXDTI1MDUwODE3NTc0NlowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1DQTY5NzA0NTg2NzM0OTNBOEFFMTk5NEVGMUUyOTIzOEYyN0Y0
+NTE4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAhDnE4FaTwyQgvyxu
+9pynDWTWbXJN7tgquqk3UrcFWkKJQ/2NQLkCQF4edz3STCV5hJYPPYq23XSQBpqw
+uEQPeQeCKtAI5KXhzB7DPhIXhaV4k1m+ij8nzZl5tafWfTGNhkaBNySz8nFSUCVd
++UAVBRQLyCJoA/yxFbZB0B/Z/MTqaatygBXXAPF6CVsr09jDO9VUuDE+2rIKLd72
+BRa3X7/5RHtDDH+xeKhjgu4zrdQiLGz3EplQONpsaQd92U9lNdRPbNUoJHCMGgVR
+AsJnaniqPrTv6I+Aqfc4nToTVIMR0Gt2AaN6LWlhJVqbhDtzE5lgtzlUMaU5Bjtw
+TiJxyOZ5O3ed527F2LPetSGqL2mJSnRgMI38OssYAFAo631YMP0QCSTJgz7m54D/
+wRMzTgU+HTQ3wNcwPvY6o6ibwAx208aBYB/m2kak/SBvZVwAk+OO2nizZdOAMm2o
+1W1pSehI9myY4XblqsW6Lh9cLvEZ3p9D9TI0BHJy9Po5fCjO3Te5e7GC2yWkzDu4
+Zgy3j9zX2K82jfG+6FPx+2BRfh6zyh9KS9nCYCfLmdMuw9vc4+VnRDCXzo6JfXL8
+JmIa7BbnDgDhcNGoOahZS474bB/WExHI+Y/EymJjNwIT8I+XPtMyLRWCP8ttDgXQ
+5q8R2z86UbiEH4uJpL9DeFXpBdECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOHkPlIeo/lJ1UIz
+TJTrBOXc+DlOMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAS/T1u1TNZhkRHFLPPVokuvdrHabEBSLC7nckQmjvR0NT
+IfhaD9iLzPhhNrpiamLHEIHFuzVVHTMboqu7FcOlisv85T/INUE6tnIs0rxXJ+An
+6QELBMIbos/wBElqE+t0dqkSoao62Uq1Dri+l1lcNd57N8XHa9QMZRCTxk0K+y7u
+TR2j2fiCew5pFlsyqZgrpun+Iv8G2AeVWeY9+7Dju8hHkaCz5UNrZA0t3UJKhAxc
+9cFvGLkMEkotuDOrJYpxL4IPy3YeNn2QPY95hFfy5HVjENEsVjcN7vfvI9gCgNnC
+hrcwzDspZ/AA6mlYIbr0mGiaGv6IG1R1xUG7BslbCj2l01gGCgXdh7bqGjczEuyZ
+VwCBhxmdNaBE4VvQd5UTYBmOIFZAXWE6QL0ZJ8J3yQo4/tA7VdNoxNmyo+bDN7/l
+4PlNKmXxkiO9ths+ogqM8tC04pt376Z47DhUUSZOX7xvjJQOhOimqV294tJXkLXf
+pYzDAj9CqFRmLbhlnMKnwkHAGK9oMUxTEYzU7BooMNaWMRDFX6OhlFhiIB7D1QHF
+Pg56OVnrWi7lIWeEr6/RMvXbYPxbct8gagilVU1V6N4TxKhzwR4KhN2gu4xCDrxk
+ge2tGDvU0B0gAnxoIOOBOvUcEw3OmHU8SgvhqsDZNsukAoV0fAU8DKwfYBaptBo=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID DA206EF5DA6CF79CAE93C5E472FFE9480172CC8E
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAWfX+pYAxsbQigAAAAABZzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDgxMTIwMjUzMloXDTI5MTIzMTIwMjUzMlowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1EQTIwNkVGNURBNkNGNzlDQUU5M0M1RTQ3MkZGRTk0ODAxNzJD
+QzhFMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqx8Bk6a4lAy+SWX9
+93XiQhHjqnGvLuu9/PGqp3MFj5UFpR0jqIP6k9lkTZpIN/4ZCOO9+eGx29NjGX5w
+fACcd/kSITGcTaeDsVFz2GQqtreKw4Uqxeiaf9bMDPHEwCA8jRaspxQr6C0kDYkE
+fNpY8eT2pKYsd7cRUZNSQBOfkhlBdB4OB5TfX2jqUoPkQF8Vmrozpn/a2i04kYaR
+qTfIGQqnvWIrtUdh3mmii4947t59iLK1HvNmZPrLxDt+CweuQwFjdBPVovPerMlW
+RDD+LSVR6BSsjM11SdWuTgkOxl47votVB5MhMLuxm/rEisZs2Ok+zbCg67YuJum6
+6zresQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUNCnhmdvD47QUw2J5lJYTHcgRHNowHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQANbi++
+pVU7FFpqKM7BwAjrdpzRoSfSbMXKTAZ784XF6i95oTQk9xb1rS+SyPMzmuTWZIZs
+hTbs6VaAHBmAtsKKnUthauGbPXsl4lbvCtw9TF3ZMmYOG3bHbWG1WNohblGXnBa9
+4KCIJbwS3vm89E6gK9C6WgyJ4OzflaiSWGJCyiR7pf6+s9ylOTun6pBZ7pUVWIfN
+xouzYvBPpbAPoc0CPQl5zPOdNeGuAJBfByzIXL9fu8IrPfHLb4C4TI9oBfVnrc6Z
+YTO0WD5rdIh2hc0TagPA0W2OQhMLG4u072nRx0lXylLA32FC49plRDY284PJsYxj
+ayL/hgr10+5whkw0FWhbaRFaT6iC10b0r+JKItP+euD8lEoyYNJUuCCFlj9Tm/zy
+mr7X8GKOHqXcDztkb8Obj58iXB7fDVzjQ5n9QZ2a6iK2zNJ0yNysw6jkV/qtbhZ3
+xsD/X/yZjWuANnO/rrqhhPVBu/ZJXfTVfeGotBCJL2t89VtZt5q++KBI4mfbrB9K
+JKUC7yEpr80KblXItOzkRkmvSxG4AeEnwwQIASffmnP9m5cQgE9PuRbBos/40BZf
+12SD12T9Trr3QZz+qJ70JaYU+iQLWW3JJHXobIP4V0dIqq0+OZ0k9LkgFLEiKOzg
+gKrerxXbuiFa7wlkXORIudGDxhfRrodeQWMjyw==
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID DA206EF5DA6CF79CAE93C5E472FFE9480172CC8E 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAApa44sZliWIOvgAAAAACljANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAzMVoXDTI1MDMyMTIwMzAzMVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1EQTIwNkVGNURBNkNGNzlDQUU5M0M1RTQ3MkZGRTk0ODAxNzJD
+QzhFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAo7guDhrfMHVE0rPz
+Gno3CfW/Lj9u6b/bNflWXVumQX319sNQW1Mxbr9k+2NYQHw2D8Z+Su4/b4QQF+09
+8vWBPaPV8+mJx9sOlhfEf+Twww2J27kuIu5tWYbnHgsaEhffQS8eCv6047r5YKTP
+MyFE0989giRry1xf3yHe0HoUGKBqPMa743pdhRqnXeMJ7CLDBVy57u+LT9QaBvdS
+N7fJRk+iFBc348yvElae9RB1OhDlHERrPiSr3U0oCUwpPBQ3UUSCY5xujgI362NU
+MoHJNGsRl0cvRc1bxBb54WJ9BZnGg0eaRq4USUt/yVeDQlxIkjGCC+pFI1HyIqGN
+GIEPHfjtoMGC0/Y2mHuK7dbNCiqEALw152f9Bozko3zD09eQREFoXnjgQcGvjRIt
+jC4UeUQYqrxGrMvz6sx4DNu1iylIZ25LtgGfiOnMTOCHEYWWqEp2NAQuTMeppNuF
+ZrEXjpyOHcUaWHv5WKbggaxf20JLrImipTW81872zVXHouEwZBPxOKRXhTnY47Cz
+ibiaOYrvCoOYffozLAmWkjK1srEcp+nW9jmDQR4RiQO37zW4rTwJlpTq/J+cv7bs
+1wcZ5IEX0dVr92O79oGls6zhSgazFXeb9JaGPwlELuTlKMek/LleBapK/FyQ+Mpd
+5c1ajnquLAUlTsspPlXG9mES4SUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDoMWWFMLIeGs8xJ
+nEgmdW7iQbQfMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAe8IeSYXF1pdyZ8NrCTjO6WvxhyBhY41lmDJBB//oDDqK
+ySc4ojmGdxoXA3O8vkElv1hFQLiJEhZ24HQhXnrTvaZMo7Pa8ZQTclOk3rSQUu8g
+6f70nK03FJ9qIOPTZdK0ej/1CX5TARxL2NVqPxKEBXDF24c+JMuBV4/vhoCSFgf7
+K4i8oH26fC5DpDVOnrSX3C3tMm6TvV/TMTRchZvWMkYyaHEjUgQvcl++Mj1759+L
+v1NEYB5shqfxZ6P0ZDNmXs5TX0gb+1TsVzcgc7D2SoMp0Rtg6oKpdFa4sG/01pja
+dtylrvwjaPaqyEy9GJ7fzfIAsi+ViZMH6nOlzsZv7QQPm0V/AcNLwiyFEwX7H9fr
+/mMFZzWVIa2Z3lX1WyxTGEWMBU5NbVJE77piVK7zBPkiG+4J6st+C8JHpTeKd7Jz
+PGmu3eYIrpE1hxT7bNEPYtxkcESpnx4OfpXwCE8IF26j1Hxpz8Gg3EDGQCw7AfsP
+PEpIl5BDQ78gRD9DS4/WDOT/fAQ1QuVqFXjAmu50Xa0KGr4W1gI08Ee4NJ72YsUu
+aQjP/9yAh5WoFCIjMIMMRC5vjEv5wlTDpV3T0Oo1HfISIqm+iGcpB8MuaIFbn1cR
+O07d2w32npbTcx3tJvBSMlOyb0ZJUDIqySFSrakd+4IjMgQV5c5WyRF3DBxj/h0=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID DF5D6DAB5102DF18A1F77113F4983C62CBAF7385 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAeAbaTKL3CVxDAAAAAAB4DANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAxOVoXDTI1MDIwNjIxMzAxOVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1ERjVENkRBQjUxMDJERjE4QTFGNzcxMTNGNDk4M0M2MkNCQUY3
+Mzg1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqINsErjNGuU3jdph
+i4Zs4gpso7b+uxipdxj4i1p+tfKJafMuB63qin8avyCz0LxEG3Vmgyzmr+JfxFo7
+ZW7zi3LlcJpZWCWnoEumMmnWmrJ+uA6oEhxtZtr8UoGhsd0p3qLRjcxbfL/EaHFa
+MDXGdFumrETl8AgVVdYtCUJ3txRkcYq5GKss0vUJuzhaevQgtI6OUd9zC2ra8KAc
+QUL+3kKsQOsHFtZsy9hCKm7ILGVoBOxsoJCXNqyNEYx5DnnN+uvOGeSXTX6/ccxb
+POCW5STf11uC9JaqDWFhwhYN0f0Ilv37JEC/Hkt4yCH6TpS12GUlLuXd51yG2o05
+zb/JvH2qkLCx+QzZghRkvQbCUkDRUXWsV5jtKp+dIHjItytl9cz1S0r+ItS1Spnx
+wOkHs6RCAuX0VvEuRXPzjG6+B8Lpym+dI+fO15BaMAXZvy0XgfjtxN7W0x055Nf3
+uS5OJ0OwCWTtxYhTwIipVHl/I9dZE+OSPzwHvBQSzj5ta6Q58NBPR5T041aNfxR0
+LYiFHSfM+QYiTEOgqx9l12dZLbY+JX2w5GXC479SHjgkt/CFZ6XQCucO4SwpxzKJ
+m0swA7F3kBnLoXZhy+h20Kms/ObG+9q8YsxMSKR2m+xK7Vz4WMt8SDiKTHWSu9Ee
+yr73E2aRQ+mgUpiPNnqWE15zgJcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFL9NsW6ntiLz69bN
+vEV3ZO4F0iHCMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAS+xQ1bxJhHUvlYFWgzckn41mvZgEIdU3QomZA6K+lY1m
+CRPZL05BKnAdKfY9a95m8mXNcSt1ldZ7zY0x9ya63WcMpeh7BsF8evDrKWAeKJOx
+90ORhjI0IiHVuHvyMy81ZptCwXriIq0HowkyTwqc0wfT3Gf0iSvdval9Xc8/5iOl
+3ZEG/PkojWsboGkxBglVi5gSP+c3QalbacsWO74MNdD8Aue5I+NF7eppOZO/Qceg
+tFSlcXGpvfHPYdROw+ULkxHQX5P2zmKRGxB5Uk55c3Ei0h/av2cfACwny1Rjtxaa
+zXbAKDkmczozV9X7WZrcrkZFJInMagDlrISv2Jf9Bpab9CNdlNCd+aS+BWW/vUBy
+hmEJP6uf6ZGiI2K2XrQX+oSRT05qQBYBJtUzb9JUGih3if6Ch6cIf/Avdr+n4SRX
+IYcs5AlEUkbePQ4rLBMZ4cZ4wUn8MpIitb0HgxxTA2HS/p4UR/5HQQguD3QmZkuW
+ezhSt5Q9iMuw7af4CwKu8fTLzKXVMrd4Qj+lq3ouHIKegKjePllCmopnDAC6v/vC
+wGGSTr87HvPyVrnIe3zVPPOtdktc0+NJ9jcKgy5nJ/kdoJHTrdHzf0mtpu+98X9+
+TCECRoVMG8R+CSrCNellTQSHISt67Fv9kAmCB6kvoESKSBZUVDnu7fsqjFNgxMo=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID E9061797E8E5E8C68F935EE5E976BC8FA17D7523
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAATjPyvMjJn3+rQAAAAABODANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDUwNDE4MjQxM1oXDTI5MTIzMTE4MjQxM1owQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1FOTA2MTc5N0U4RTVFOEM2OEY5MzVFRTVFOTc2QkM4RkExN0Q3
+NTIzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvRjX7ip41yVuQ492
+MCYvbojdoRuyJdgrAJ53SfhYSkvNm5Vsf0sYkYVoofwsUTUp6JGr6d6wfIzEjrAj
+k4rd1LCx8xYYhEz6p2oniX1wf5hOqNyWIi8WKewqRug/NcfevWI7/8krLP2KDZqY
+swuFVI6FEqnO4EIIbcF+RW8lHCXBU+Y1EBYvl053FU+sLJD8bKX2bNVSmyTVPH6y
+irKFrevV6XwkDsFwFFhVu4J3WID6tXdKEHAa4CK+RWnErK64/AvDsoJkxSXjTKqN
+mixBkD9OwKK2AOsFlKj6QY6KkvyQ2ZWun/V/mN8HGbQ4g41T6lYOJ3PiOXJ+i5YU
+no2I5QIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUx1CEYkl5oQsZb1PGKzSvwYdfQtgwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBOQBkr
+SaqpJRuvsUf4EODvIEck52runPmFC9304/2oAvYzL+5tnwJIeMofvFSEvdKgSoqx
+Bho2y8Gw+oObwxKWoOOj2chs4AKVzZC39v+CKkly8BIXFjRKg+hHukfP50cdxnF5
+lJ/q55S8gI9RvPtBcLl3T9vH2iFKfhjsjP8JJlerz7y8P7z5vwkoyTRAxWTzvpOj
+J00aRUC24stzfPcasczAUCwHXlL/3sbDL2cH/97mi6YErP8c6k4tOv+XDB1yWBvN
+TGDel6lQpoyxtEG8hWxhydFfMbUAUO8fyQULu8jNixY+W5r2RFhcaFQ0TQAuFrd8
+UCaVUWF+z26fqKEcNAML6Qcp8L3lP7ws+3MQfe7NKZpMrCJeCOyr+aoDxvevutym
+rpYNp5XdelKjbRr4I+0RzKfhkBjQbdckSTbiitS9VU7qv0oh3PNw1yznX/FFI8/H
+hn+xDg2JOCnRXnSJJLxcl09Fiu/52rjGSLGUhWPYpxQZWPC4LNEWDVwmeimfkED+
+fZd7Y0CRRZ8ch/yFGV2fMIaXEbEuCM2PQmHRfF7HWL5RIVfp9tXvBqf6LiG7cvj/
+tzhw9LN/8y667LsYoQUomdiig4Z8PHXEyqCes7bp/z3UuoC5rjIfeFlee0hl+TBh
+myKz8T+9CfbU7A6k42uWe4zntrdF276rMPk04A==
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID EC3F8D4CC12ABE88A019064E8A62B7018FA2E359 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAArlFm/LCiyMQVwAAAAACuTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUwODE3NTc0NloXDTI1MDUwODE3NTc0NlowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1FQzNGOEQ0Q0MxMkFCRTg4QTAxOTA2NEU4QTYyQjcwMThGQTJF
+MzU5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA7NCOJjMU9t67IB4B
+ZazbGK3vaJ+nzDfqOIw6VbOJm8ZZV6NPOtZZpgwbPD6aUcbgum5MnWNoCREI4vIK
+fm+aSdroOzSm5kOK8T1RV+j6wks3G8hN/gP0RTWJy0/klKsJTlmUZDrNzQTp7oWe
+X0EEHm1u41g+uHdeVZwZRwG3XbMy407sFbGk0WO8wGUTCBtBVJbvt26gVORB+Ry+
+bF6OHL9/RY+DltL2wNubIuwgUrkuBWOZKnFvdrw+OY5+b7H/C2JiW5VDEjljoU19
+pvNW9IO396RdKhFIDfbDOloSq5kfeIwljkdOZ9t+/E1wFnKtEXJ93N85nNRqMTCG
+2TE1W9ms/eWcND/MRhWEibyiFDLwddY2h5DfUF//DwLHEfazqyBFOhUvDojh97F1
+gqIbNZYZahm09/pXJHy5hav00//dIEZq184hFhhQiEjWef2ytMvy5rNXTGeIN6E4
+7n4tI0B+rL9clqKrtUFQJtG2d43LItJI6d40XAPVDHimvdBLR/lH4z1Lovy97jV0
++plwpWYalYaW8D5XR2lp5opKvfJAW7FylOdNap8JN6zMfKJkHYp8NofOdxgspetN
+zz7+LATeORJQaSZaINfXTdpCeoQ29G1xC1UeizWNLBYarO5A5iAYXBPqH4e1gcVP
+puC4XxPsuu0yGXuaga8MLGXHMTkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFBR/jr7vFxwVMrJS
+y7qm7QYCAHYPMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAkGuwf9sbe12JuhOLvUbjD1U07L6VdjK93HyWXK4xynko
+BmAYthTW/4SMzF/3WVNJRKWR4eAB/9HFzzZ+SaGo32fAuzWhtreJFONN+K8eGMUv
+8/MryPlUSppZ7w0uRc4vIi4JmDKgYrkpxRvN+FrPNZsl5Il0avE1McM/Ay25Y8Ja
+k+LmDXCxpIKPBPY5SOMPPkPWPbiwZvNaDHvQN9/2C/N6uYHU1r5gRuu9z/ndKbYm
+X86ymgz0AOATqEMfTnFA0JYq3lQpm2JKLbQVwq2f7d8A69TRQugKwpBgT8MEwP+z
+82Cp0DUJkNJv6XzarD62fcCKEcszYxe/vxOpeKoG5xs1e+zz0/Cx9BKyVlSMoRZp
+BEqINARc4ftLDDgdqTRy0DKiyo5I7Yng5O7tOzh1ix6zgOH1+FtRsz6yIDW5JCCt
+/Pap3kd6xDUgfi4rJL1/YpSeVEERPUJeg4LgWKbmQbrDa+VCBNNQb/Omm5dOWkve
+qTC74HHw1yzzMpiEW49x5ktADY35p7tQKC7hMm8vIlAb01JPFpwAPu7jNzhBQzto
+Ri55E300CIp0JLzP5ioiFYB4h2JYMqMDL6WzXTGBJ7Vl0K2CrdCgAJVwzK6W3JBN
+XMb8f8bukNGAyUgc4MWZaDgYsdzE6jLNQKuoe3uXlSY66gCKvWHOSIeBaa72Ex0=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID EFFEEC5E01610082C0E311CBD07A3204408B32B8 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAApfF/HpOa/zVnAAAAAAClzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAzMVoXDTI1MDMyMTIwMzAzMVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1FRkZFRUM1RTAxNjEwMDgyQzBFMzExQ0JEMDdBMzIwNDQwOEIz
+MkI4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA+ULWeL93NulGynsh
+ll9NgFgDEk7clILDD5QFj+U6qrbIPOn9S3b8MgSP0rrNp4kWkCM9hdG5t5kXzPgC
+ocpHYu/ehH66xsoxGHwQiosPNu6gpG2fnHIcYKsQOZKaeRwGUEUGPkmdmIOayoM5
+fOK3JUkEtaL9oxXkCY5qxsx/URNEgJ4CUuSu/6n9BDa5d/HfWB+I9/VDS/7MASwp
+6g/7+cG/5TS9im+lvBuG6NTyXIs8/rdBKk1Rl57jp1MpUWqhag2Lz7bwT1sjrULb
+iBIWp5jOPFvLU/nXAQIXyEZau0S9LuwUXoqRFz4P4Dwh3KzdCZrGvMauUUNmGQMg
++u3Nws/rAISSn6aU/07HQ9olT/vjEX0IBdGNZ8r382VA52rnIrAMzerLF60ztf1T
+nwu0tlL6Dcy8/NJe3ioi9N/R6zRIasCUHJQWpj38USytcAgyIvG2QdH11Mpc+7MW
++NjL3LJTvgYR6MGOiSJSs8muhm32I+YP+tnYIKSrQGUeAPVJ+Zll4taZRBMlqDif
+ihYrUk8pFWK093vsINh04871515HwuZ8zOdjAz10uyHp7zRwO0mxrsO6jMJL2XIT
+Zdwz5ib6piQHjcp2MKm3g2JfbvxK1Wj9gWlAfx83bm9O2dowJsz78cVxIdqhlWhc
+nFeEhqpwqkA9zNVZ6rH8qaOr+x8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKIzsaXciAuCn0NR
+rJ2w+4RtGOfXMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAa4Hk/PHrBiu7nKGNaS07/0yuJV8HWMwiKyFnSFaayGg8
+P2LFRsVyOduQlzMFTvcxY/0QP2W8vX8IXdA4dt5f5yPEiD7tjjEvFAvGEa5CTZDM
+6U/jrmX8kDvGdMHLHSmxoORXAPGSITGGunRZczIkyJAPHqlKGyNkj8pwZVh2bKeM
+PsANH+Oa8WAL+YKq0D8qbz3PvuMIIA1U+vb/U3nyuxGUzS4jCGk3Ff8NJHBtk377
+UulWZW1DQXmVnuj5XdXbk+goTxT2APOrmXGFLumqlmxsApM0XpryIdhqbpjffmFv
+CFjY60RFggWutcyHNh3jZjN1gYUcKbwbvy6tcdJN0SgEUhO3Di92NgO5P+hf3v7y
+IogBVbm02IUKbbTWSLvkX+omwUMTknVFCjZcDzpSZk5RHNk+YQfuavMpjMHbSeqr
+qvawnkSNSRbjQK8wqaIoKsGUUgr2VFLrQKYDuUBbZOEqpexl/L8p/AdzgvLjAv6x
+ohVHov/ypVDRsM7jcrW4x9AVXq014ZeQypMfZdScn2fZRfxrt6wONN27wmWAbCgs
+RrkUEDzGJsUE6DirULQvpLsp2Gyj0xiVW3fH11q3MCwQO46dNeM3Y+FCCHHzk8uX
+nCqisMro/tj++OKBOz+DpVz8q7brB9RdVF8QFxN2dwN0mNF3WQ/sRDjgjvlIEok=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID F53E4F475E0D3C6E2B3E56E3AE8ABB953122617F 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAdXH9SQXmwoJLAAAAAAB1TANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkyNloXDTI1MDEzMDE5MDkyNlowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1GNTNFNEY0NzVFMEQzQzZFMkIzRTU2RTNBRThBQkI5NTMxMjI2
+MTdGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtVB8/pfTLgvw2nf0
+JlA6huDfJGHbwYXPHVlnvIaM8kL/u9U7gh7HJy+unRBwWkYe2OpAM0YVS7MxKsX7
+ZB/IwYsnesX13YJ3ZNe4zuFYXIgZlGbzITJDE2vEQefHOEzoWQQCC3S9Y3D28Mr2
+6lvW3VIOImNcd3jJM0WOpuNShzHpByu2Lyd4i0MX7P19h/UgEmgPHp3BjX4rBAdA
+p92e9yx5GgcgxYrtfc2btNxElsiPAc4GBGgwLnnDHgc2ncfP7cvk5L8np4LO/SoQ
+qM8OZffzNwkkYGPVuMtQEIxbTkY1ISN/Mfbj5f76FVoyZmnzgtUfcNGUWK0o7R2s
+li6S8xM0HDPlveJYciw0WAfz5RMGpHIbTxwp4xtAVSbRel9NIR9PcAW5SFsJJnfM
+qARELIljSxA/gnaxUCbaW+kzLgTxYisXrBuZTEqSrXwdQ3oz/QN005DB3cSH2g8a
+rsoA87IkFevRqxgEmLR8pw2uIhzf4Ag8qEtHhV1d/fQjSWGHErd2iIB6kDeo/DOZ
+2nDkV4z2Qz+eIJ2VM5gIr9/II8F07pZJ8RogcygW7M/pk7BBnPxsaCZn723pIWRX
+cqvKkeqBaTxLbcVhiRiP4P0LZe9XUSm60xzVK6qVPrmUWq4axmGwhjdfxIieSjCw
+9qnEVcIw8FyKkLD8dgbin7b2k28CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOl2HpMzKHf8ml0d
+56Lqj1dqMQlDMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAUpD/z1bFHvy6lkvFz/4mOt6NTshfOZALhII53Y69u+8g
+7ojmJxPDcQ9Ln8qDXSb4FduM0HBV3hA/s3bVMeG1NEMkv6Nv+HvzNjKysqIxpQ8m
+wRi5vGVPRfLlBTIQJvhmU4kf9KLp6FRNtS2J6cu38XsvwvFX9OPDBhD8lC27l0l7
+XNGZJPKmDW6KyKHn8z/fx+PrwxSx39Uj0awQ0tNcV0FC/fIY4E+zGl/3zwqXQhVZ
+Vc/5XO9stVOWnyMbaQFGz/939qzCBYVSx1HgKwlGxBUu1xzb3apCgkqkOeu5w2nG
+ihwGl54qKq8bR9+EoVg88SfjlVyuQ2nEIV1kYfWAtAw9ieZd49DbSGws0Hzx1Qah
+vmr0hKvPYND4g65sfXjBLYNyp2uTzD4hvJaxGfmmXqeUbFYD5ORqYqTIxaJcbUL2
+WwEwW4ESrTwRwaDiqlJqH/D8aBrOxPCU6gpeWIaahUx9ou8TyUrlK+NUDq1kr5YA
+GjFlxkmj2wjWDy22wVmRHF9riEaZ5qcH5mSVmRbH1OmJJiXUsHoxcPpgyyBSdUH6
+BwiCr4ICpeOxMu/Xl/vp2gx4zhvpi5MckYUDfKU8gqwzKa5wAGQsCfy4Z21OgGsY
+qVagT01hGgA6vm8EPYh4WFaT/ILMGxL4msBe1ByOpY5xXmb+LEfed2fRPXyCgPE=
+-----END CERTIFICATE-----
+
+
+WUS IFX KEYID F65C289B3D93B78F978AC8D017B7947DA93637A5 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAApgfDaU7zYnaBgAAAAACmDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAzMloXDTI1MDMyMTIwMzAzMlowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1GNjVDMjg5QjNEOTNCNzhGOTc4QUM4RDAxN0I3OTQ3REE5MzYz
+N0E1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxU57r+Hk2J0ma4wn
+3KFS9Qmvm/ifCQaMCLmrKldbag9iPjbDyblmnYg527IgabilyEfnPgp3XVEhYv3Z
+1MXdDZ+h+RYFTv1qBayG/Ax0dImR8EDCcJr7YanSwp2hH1FVxf5GMYSxDAkxe4MC
+bf5lOSHuB1ZNoWVudYk6jEedz+FXhK15cXFZrwgBfp4zpZ5CO75dbfP7TTD5FZKY
+yy0sZpQGpU6Fv1BF7vk9SCLHKDwVpWts6hHb+L5aIWVJiwH62FIO6GoPPRYUfMLA
+teGmcJkGNj2W7SXQU/ZSbqvI0KWVCuVdMfDYpXYWD89R7nAaOtfdcbqu/r1YfgZG
+LtcHyl75MV2+Oojovz9RuuAwWJ3EFGxmOPyFMRd2Nslhjx7fdTIvdKjXczOr3upW
+gf7Q05WRnVK1m/QsjyyaEqGi6JQjPi2OnEMx7CTjobEf6la5Vlzti13V3AX1ZS+q
+aWN4jP6g9eED/b03i/G7oZX3CbEw6/3JBrpiAf7pwA6TT2QpLqLXlba9ghkF5JXy
+XUBXonR+U+kdkTIu9mn/q2J7CA7x8fsDf80Ad+1YWBq57V0waGF/lws8/cv5iD5E
+rxRy76G3htgaztkrA7tIhFaVvgnk/6DqHYvPe5Ai0LWawosNO+Ev8ak2vYU6ZNKQ
+Iy2ST7DHAtJZJsXTzuuj+pJsY3MCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFItKu2AJFVXgxqu+
+EzHa+7xdB6irMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAKsO19JJ+i5F5ZyUA78KOGkx3qDlYRw5OkYXUMUoOxtmZ
+Ze6NJuTVi78eMqPDk69zzpO84qXV/ZqAbzBXzvMXs2sucq1dbHXQLWwz7eA5eBoa
+d4HlFsSfVnT9VgMp/W8YndWDhNvrptuGnTcIoet5C+RzApBBjYeozhjSs/Is+Ael
+uDnLKVyKkLMRprcBcka7/7pmjzTpWAkVKqLnZEREo/SfZzMLpTKlFzmV1mcVvHoX
+g4qvVHwf+WvtJDxybxu9nELyiAZFrmjgRBqt3wegbc0No7cGObmXudL5lggiHyCf
+LNIBq0HSli/Gg/iRLjY4BVfVm4Dv1cVEpR6uGVeh41xnTH5sGREXYPjfuKsKRHNz
+juUmoxCe/dbnFOggHQwatnbdoiVWxydIQpez0Xh6Qi5rF5aj3EJSpONd93lDMU5k
+T6AdKWePnMdY8ieGhMDnyPqRBow/Ne9p1VodnRVmqc6dOV152YMkAX5pelvSxGeT
+6aYiqWfO/CWqD2zw6N1Zg/qFWE/YNuJH/vZyAxxldYcT4M1xIqMi5KC3mUWNG6Ya
+hQcujhD7D7ixkN+FlN/V1lmddBhorz8gLN9op8oGQef6KWU0R7z583kdMgoZH9HV
+/OyXzmsaUDma6yIZX0tLllCRgpmJ5JsmCV1rJfV1ZIWF5h2C4zMSWhGHPGEyBf8=
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId 2583CADE368F69C80F58D34A48B2DE653DFEAF98
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAABDhEsnJLGH3ZwAAAAAAEDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDgzMloXDTI5MTIxOTE4NDgzMlowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LZXlJZC0yNTgzQ0FERTM2OEY2OUM4MEY1OEQzNEE0OEIyREU2NTNERkVB
+Rjk4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzEfLF3DU/KYZa9MO
+NrUntFdixXGJucz3A21LNGPdd2vvPzo9ESJuSGCvXOj/7Mf9/MApv99cpO5dOoKX
+3pO/PdDF6C7c/XHwNJZdZpDkqM3Xh5QzaJ4VUu0gFccKoqgIqrJ7cPlk4Wy+PMSA
+011lnSpFGnAg/+7NUGc17OEK/cxTRGJGcEeW4gKwtV5lqIq7oShbHEkXvmP4qmCd
+cZRhCSpqDDf8uNmffkSyx6DAiHhIaY6kjaPBcLBKFAfTxLXxD0rGB41Vjzf8vZSV
+923sp0VPzavSYK4x8s9h5Es8vAewL8UNEA02bCEi78dYeTu7afTTCmCzM2XHb3w9
+5PBhIwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUrp3+IwvV7CKiqZGleMyWrX6ygTMwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA7nleX
+g80cBVXmKV5sQiU8iaIGnsfVZARJtNsM2ZULapu8VqX7HhTIys5yutAWqGZMDgdA
+/HtzTlU5qLTcbGorWyMAQLh9+txWfOT37teiGiXtSHY5x+7td4CUc871Ei/T/s13
+FJjWCCTnTs7YeKdXyycDjQSSVh71D51IccNF8IsJn5Tb7wgUGH0DykvB1M4xd1W+
+Wt5ywq6atAcwb5wSdAXtwgBfxHvR+KOE8zvb7LxcKO79w10TyFDtwT5IiKr0y6Ua
+UejxIWNSCYqjYhwq+0o2d9z3NtZ/2AsqsUkpu6dqdBkUBoYyTX19b3ZNJvAi2lU/
+Ltx+c1LRmHzzlRfBP2BCM4p/tuzPMq8G/BIEOOMuXleH3GQO+se7dNiRfgQfHyEb
+vQcjSE3TP6Jff3M/Llv0yf1ZWx+Syvjbgq//ezR5F0MwY9j6YMgD65A/GzK5Y96v
+spkFzmy9M4d4ETEWJJ4JO+dzUZ2Y+VGF6aLC3EQOtg+7PPpab18lTThXbwUZnIMQ
+ME3olQAy+fTmnSd0K/SkoA1AkT4TJ9OQxUrwd66YV0f2xdVTroQJAdEmwcWMW8KJ
+L+I57XwMervbhI2g58qp2RUb4PXC7Yuy8Lv0k0Re7fYCK/MHfISgCcRxNk9PRMzY
+KyTRLTo7ji2E2s6Dmaa8nmZZqODqawLZtdjVxg==
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId 2583CADE368F69C80F58D34A48B2DE653DFEAF98 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAgmA98pPfw8b1wAAAAACCTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMwNloXDTI1MDIxNDIxNDMwNlowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0yNTgzQ0FERTM2OEY2OUM4MEY1OEQzNEE0OEIyREU2NTNERkVB
+Rjk4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvjk1dmLadrAxZDYE
+q7mIV1+9e5ifjGeIc1DEae9FVHZ6xwZmqLUjZcu/vYeCPFrXDKxfoTCgvhIwhHaY
+VDf9S1Aa+zglJWhWFqw7Mee/AY8r67evkPoOjeWIoHN/j5IqBflZD++xCZsddBe0
+So+/BQw5J5GhIVBdtRlWYDWHvvpK5cGja3GIk7x8LWphWcnpaf20K0eSM4gRAk7x
+FG1ag6Z36k+0DV0/Rd8sSA723CUZ4M10iUVx9UIbAa+U44c9oQgNvmUqmNKe7X22
+jgzmrRSQPK+b3oJ09ZyDM4YoqCYGrITot9TvA3GuUuuKAsLJ9Iy/SG+aIdyUv50e
+4ehUhBuWi94XtbywROswrp/WIh6ZU8xOoltHIBg/M8K9QK0LNcFDrZAOPx1x2fjT
+dzgmjBNFB7/oQc+NcrcKNB5hUjL6ummY2W7TwzYz7e2+/pVjS9NrE/aBMXp3sn6U
+FEmxaQsGOj5B1DVOZ1IY2EVWjbKWJ0Z4xVzsRBoZxHO4dA9kZLKAltFbbzrk/FYy
+ENDusO6Y4/m6W8KmMSY1Gd0ZNb8A8OT+LXcvLB3is/sdYE9huPVDcfZjshS/1j9n
+p8END1HUakGxv9GDT4mfY8BsZUAag/y/RMsEWhJQktuEX+Gl/v80qbdC3bHGzniJ
+AS2ekWhesIhkZVBMSYbC2v5IYEECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFH9s7nRQNm0LMnGG
+Yph5D6+swV9gMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAkRE/gn78pAnPRLS3ZOd2vf326rVrUspBthyvmkvGCoSK
+niQQwiNWVqwMBSZ9UxmCF+Pid1xOgsu8t/SjktAtljPwSG8rDh5+sw5jz9T/0Lgt
+4ED9UfK5plUSDRXcFdm0DYiz4JMomoI3gSjNS+0BFeqLivK7fHIZvTlvCKtVoqXJ
+aRo5MG03UWTfGKPzxtqH1PuBVCrt/VPCGiZOs7XcdJhBPZKqe+QGTpmUC4g9N6Ec
+PMA1LaZ6cLHsHUgseMHaT/I9uZBdsZr3YtDUBBo40MMyIixIg1ZysGdD9e4IXpMB
+iwqiMdWV83wj7+kka0W5yYC0yZWLlrdQ1cXdcDDQr6PbF3AR4ICtdnG1+L9513ma
+Cbh9d8ZHX5Yv9B4PgTDTKaAuACoQ3ltTp2lU+8aRrn8T4o0l+qSHCMNxOOkK51to
+6cpWTf/KHLZ1vlwWVUhdpIPW2YCHVTzXDSsSfeJy8wgb5j4WNMTK9ZtniOgwgEvz
+1oB6Fv105/FezH+PvlxlK/l5z7Q8GASdivsKDJIfUJl0moZXpZeWSzKo7FqzZrao
+t9dfpeEVyVIqYc3cxxVycjULOMli0Kiejp0Fh2EQ3moB1w/rmXlJ8j20tULGBYyO
+qdYs3AqmrjdlKcNg5FiQkcVpmoDMJ0LY88hWwE4BAZWKCr7bk69f6Yb8smMId2Q=
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId 32C6E576663FEE80D64CDD7B18E5603863B3BC8A 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAdhxVFlCD5By3gAAAAAB2DANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAxM1oXDTI1MDIwNjIxMzAxM1owQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0zMkM2RTU3NjY2M0ZFRTgwRDY0Q0REN0IxOEU1NjAzODYzQjNC
+QzhBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzNMkfqm04vbzETyf
+tGIHNBi6pJ7cA90a8h3bYwED6aJrt55+nIvxO6+b1qoYqvqNkrCdzePej/zYMmdY
+tLDg6zFRWppKY9WnCw3pVyROmrcU1yuLs7qoW0NvqAkredtIOlru9ibe8+1IVM2Y
+en9B9EUbWMOBygGiuX1KV9h5o/9FA29gAOCJqneJcvV1UntdJ4GHbKg0IGKK7po2
+NIp1wQ08e3ky9nnmo9Y2/jmESona0/T61766YtBDlfyY0BZT4TOat8bfqeYapGa/
+UePR1+h6J10ZWwBXR2KVOXcCCem/HbD7tBWzu/NLEu+j28nW4Uyk21QDI4pLKr3q
+OtcKwmhGNAXTTxUQU4h6kvs+0daGY9ne/O5K4K4739Pev6drodiMMwYJ93R/QtKu
+hzT4L6IAL9qJDp663lsUjemFpnZAfPjiiXphhjIkeok3dDwmj5fE03kpB3gp0D4J
+NKcpRNXqetft3bzc2r7bmG3dik3JPPCIdTFvTeGBaOaGdPO15fXI9m5IEZAk7qvc
+QUPj+k0+oETByeK3aCOqBiDFfhmV/INSv6ac5/6Z6Vc+4UFkIxM3cBo1xNaS0ptM
+YZ+NO0BLcv0rFInY42UtSlJBWImYvRbKZfABnakeMPy82oXtFmANTH9anyNUTRS1
+ZD/a7GoOkB1Nfpc/7jHh1WHSf+ECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEGgZwmz5Wnou1j0
+7/n7/zMzgnq/MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAjOFD0cmgto0ga2Kg2DwqcfPk6onPiChDZ1d199r6pwk2
+LJicLkTQr2+XMKggJUo9u1Mi2qQShhJlqUBI2QNmuKWDSNXuJQmyyeiu5HB6dHk/
+0rprlRtxWmXV6buyj28yIlTwx97AKGVwewBm0WsUB17deb7MyTNY/OCFHrVbI2zU
+KXDl73xOloQSKmLCJ518xsh0djZggxa5iNyGw2tHTpU8ENpgTsFougfR0HIxJbwo
+DURfcyrpI0HLKPwBcdEIpuBbSfe+FEsVC+RF7ILGbvY3Sy6cFKjShI0efE6/yudF
+59wjsCRJRR51X6cnV8K8u2SqGSWhCWwjZ8WKE08ymoZpxyjXcFNlkkOX8O7UJkNn
+MuASbOu93RVZwSMdkwxFtkVeJI55+79P2TI4xz5/1qPb1673HBP7QRnSw9k1VKgH
+WMoR4vMDhqY3E9fF4XVJQdLLh3Xd4IHbKQldKs6pUTSXIC5dSu5APOmY8fxGqHkY
+lPjyElHlqy5YO4OLeBnVKUBFTII8+W8L8YCt4MaHRgeZCHEUwofLN+ZjSVHcBGDn
+6wBIrPJpYMc1k1fjaCQEU72yf2ggl242eWN95J6VjyCiRd7BeJLzDe/sN8acdGpl
+w79tCyNsSdsNBarErGacbOQfDK6tX3kGAzCMGBc6O+DGKgqpHA6+3eKnS+wwydY=
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId 3893cdbdd873c4233315e1b13ba96a0d23cc10c7
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAABOrQrTw3ZU7qwAAAAAAEzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDg0OVoXDTI5MTIxOTE4NDg0OVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LZXlJZC0zODkzY2RiZGQ4NzNjNDIzMzMxNWUxYjEzYmE5NmEwZDIzY2Mx
+MGM3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuNRXAOs/CDrzfpS9
+Z44MRJ4U+KIYJByy/5DLG19DqJqq5neqeFbya8spw8qCWsOn6BBlB0EDiU9MliiW
+B6sNieICHx1bHi+KAVdv+M3wLu1tGW0pttliMnwn5scxHYpJm4IFxalbTw51SKdo
+E4UztI/uH6YBB0Kqctgw3ug69B5gNKQ6OeeVYlA/EFxum0ifiS8tkIQrROkVuA4a
+rbGlpkynUJjj8Cxzp8I1y6TMcpVBHP8DtXGHix7YLrga0LflYpDdHhFdYJvyxCC6
+Csvy9DNevkfTFfmxUnT25lzfxAnFMRN5IuqmrxtWFTNEjNUewuhjdebEzlVARtuY
+kY+IaQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUtQ1HS5Jgmc4Pow7fLumbeDDcFZkwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCdXbUE
+DH95XoIEBcYQqq1mQlKkJDsJ+MQaUpT/f7ZL/nAAgAbQh0UQFjvWHvmgz08AqMjd
+KeTcIgyTGgXFAKoG1YGEPX9sJEg1D3dHjvCBlZcYuw/p+vW+GPQu75Ac7athQu8/
+EDMDYmZ8U25KK6QdN5bQ8zqB9i5+Jt2fFwCOu5JEr8Y1D4PVSKncp3vRC7kiGt4M
+2YQ8aTJypn1ZykZlMKQY+rX17GPJRsn9d1DGbwDvLrUbKHQLQTS3WV5FGZe5xXuX
+TUNrYTj51Pq6YdEWQgYV8pRaD7kzZ25QY/shqxcT7kXtAIaf4yrlKFRsAlopSU6V
+acRPnPuJVP8OmxNYmEe6pGRGOKLto3MI5XRI97fvSrh97OeFsBg43cc8anRj7ybO
+oUqAsI/k3Y2kyNess/5lpBx13hp7qtCCNzBMLAdXjZhClvvhOuFImFLTn7nCw2n6
+HhA1Jo5RuoaW1UQuA62+7EXDyh4byTiOrfmiY4hr2JrCEHwsX7C/Ek+FwlQ0kG16
+zYl6QJ8AdQ4DEDxeUGQjubJUwpaK685ZXiM5ktzmsxPtM/O8UPt7FriMsyeqhnUt
+TcpAeYvwKpqqdoxaMZGy+39RoNSoYU9v7V6CHiDBNnZ9XwFjWhu6fZ8NBqufPmqe
+FszIjK64IAyBMtSp6vGdrVI0HnGe29klwZ68IQ==
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId 43325af5500406548930cda9a67dc78067b97801
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAABn3PUr2sZ1GMgAAAAAAGTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDkyNFoXDTI5MTIxOTE4NDkyNFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LZXlJZC00MzMyNWFmNTUwMDQwNjU0ODkzMGNkYTlhNjdkYzc4MDY3Yjk3
+ODAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlxaejhskzaAyG1ac
+QnmIiEv2plmHQWnUJw86xUuU63QIoEJxchfmysKx5OFIIxuYdXd9Uq2rWdOn96oJ
+RHFebAwpldCtqltYG3YB19lOYO9gDBTcw1TQ0NxsOJ8cXGVK14h7r0L679NuDJEn
+2Zf2avfh/IiwIMLv+694t/hacRcEKee2PVAbC7AncGCtKHNEAlsmAG72SXgWHCLp
+NH9/6/gIzLCTYUJOzFIS30bckoujALz9FjFWCCDgTB40/0RSfD6uDxHXZS71BpWg
+27OyiawD2WSOiVTBPJxHpOolJB7QxIY+5tNjbO4vRAx2ULA4H92s1JBcKP+OhnbV
+Mi0phwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUg69Wfqexsd3Uwr4hQdwzzkr/MAowHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAZRvyw
+HPV/iJH06uZoWtTIsEVGebnYes/3kFssFLuK1kW+/lrlYuUOj0yv6T4m5LNPnu5i
+BRySc2D0UPwE6WI/WsQvg4Fx6yzSVANax2E1HrngQ+6b+Tw+D43O8FQNhdkdGuly
+1zF7RGJBPSo1bHREaAKXRArM11JSuMct36ENkW4C3JT+j84tQHrv/vf6JbpR6RDB
+J/LkaN1Lo4QqTQRZoTKCh7M8d7pX3Hk1sVdtMHNJC4uzzNMTTcJRONzI7Ww6OJQA
+X2sMlUmPCGKAocIAmtrKIaDVBzhh8/ykldkKYp1pwKH+/prLmA/D67B0iynRgSiA
+KdsTLjcilI/0XPq2XhSQck3PkQqOprMkgmwc7D6up1uGyX1WjHXWgC1jeYSv4gkr
+ELPY9NjCsnpi7r6R/+0Atap1zxi4LjjaVKt2hoedZlf/pMYvnJK4yITHzmdaAYwH
+Pq229H5FVZHiGSHryYEoohPQrKf+ZLssgeKCAgWsDXBBuYcCsWFq/3XUMovKn8Xs
+lVKCeiKvIAurHPbzAEAaO58hOUxbp5vydF1qkydzn7+0Qz/ebMTEkKooZgrLzCxQ
+L9w2PDuzt/u+nB3CaSt2m9VBp55QI84xQrf8emt6nwZkEoq+oZA/CkUxAoG6B27V
+rWAg8YGmF8MFBatXsR0u6MT4KCKAPfjBMM0/Uw==
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId 4A769EB5D93C833A5500F1F281324EEF03FBEB3D
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAFyLHi0dwmWobQAAAAAAXDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDYxNjIwNTgwNloXDTI5MTIzMTIwNTgwNlowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LZXlJZC00QTc2OUVCNUQ5M0M4MzNBNTUwMEYxRjI4MTMyNEVFRjAzRkJF
+QjNEMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAidErXNniZipyQv+V
+6lA6prWEV/2zm8qTT6qK3Dmx0VcDY6vL/9reUZoiXiDutVHHra9q/wEnY1F1HDZj
+NO/ITvjA9ypKJ8901PQsMDgy+uuXj3AEq88ozSxvC+EpK+KYlOQi13l/RexXY8Bh
+DLJHhtVXYPdCTWwaUU3EPMoQum6s4Q6P6NkEcNjE4psL6fw6UI7fLJaiiooiDr5R
+UCuhofHnCIXzDzFu561thQxgLqRfzD3KAXdfyE8BwdnZBAfc9k0UJB3Il8D1VT4k
+7cy+t45Ml3Z/2YRw+TkEWwqQY/3lsvtNYSvlBz8fvZT9whMrUJtaxE3vwy9Ix5hV
+fSIvTwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUCI0VDFX0eGMJkqXNWfTrsxFEqZIwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQACXHyv
+JSmi/XHlzQKxbuozgmtCRlDXAOcorJ4csds6IgBS4f24XWmnqPR6Q6rFcqK3LorV
+WREe30Jw98i8JDd7z7XVVRQfeCZSQsVpzM+B4a/wzqKZ7uAm8QZCs1VsUMfW2ke7
+LNFghh1k2B4+63UAYfP+suPRmClEyAB+rDKA34v9BjNZy3tXoxJHdRqvAU+vlQHs
+Wad2vmof7V1KG8qghHSHe9psiiGvsQzhTPGloRnG3sPNXc2mf4I3v9QAg11tOZPs
+UqE6H5o0z4md6LrRlo5hnQbFJHwX9NCEewAs+IFbm2FiClucV5INxr3KDx5QXDry
+JWeDi7P4UsEC3AxYT7NEBAT4OVFvc0aVDanPe+qnyeCjOyfyhbzImHCUKR5Q9Nlm
+MaBM7aXcvMS/jpUTJHE0mfzRjxHV41srtqRzXuZUeYU12H+DWCK8ymjqpaNrgtf+
++kzZ5cREFCbMUy7Kx47vaf6ViwpYiUYdTtkaXfkkmamXUxTnbVzGD6YyUU3rhVdn
+YEMOxPkifYSd8YRcI2Ow+8sk/0fEtzJMFUWKJ9l+Lix2avHL5WMFFUcfX89wjlJT
+VltpRt//fzILpkQFnSjNDgX/fqFrC8ii8lxdAJjPiuAMY/vtzH88oA7eVrx/gxAF
+LpW/c6sqzaVQEg8j1mYoHDfIloY3ToSupbu7oQ==
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId 4A769EB5D93C833A5500F1F281324EEF03FBEB3D 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAgNSc2NLA/2JugAAAAACAzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMwMVoXDTI1MDIxNDIxNDMwMVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC00QTc2OUVCNUQ5M0M4MzNBNTUwMEYxRjI4MTMyNEVFRjAzRkJF
+QjNEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAndCdIl8zvvBlIVMI
+oTNkBVBl9WPcN0rq80OpFnVxAuawLWCjnUHFBfLbWjFJIyuc0bqo4GZ0uJ39xIqQ
+MG5wfN7u4vObbiVyFpQ4Zf1Q5rrooZQupmhNFQbymlr8z4pkL6AGbIEDZzojsGgY
+LrJKTWJwkVEmGGsacN0meaoZ5xKkvuRrTU+NgnxBx6f+TXDNEdXUTaC/o5THRDhY
+fY3ua6N2DE72KJ6hQWhM1INNzp9p2p3LzDp8ImeOPQdV+WbsqFPNStvamram+Y5f
+d6CxBoZWxCGE74t7ziL6x+bUAIuyeJVPdX1lzkMwQGyKTmGnr0pf7mqx1pKNBYzi
+Y6GefJQ+XOh1HZVDCCLfOVg+TJfY5hW3V+zyveZ6iXsB4frfpg2t2oaV7Q+O/Wgq
+MtPKrPR64S3+xHnQphf/507HNfDgkxicam/ZuHE/pcjXXXf2nf3yqa4AE2l2hvqC
+SWi+cdzPJ7AOD2Bpfab4wV/ipnFyi34YpQ/jcl9nAmTaa/2NnRCvuHTlSreyX4AD
+osxtHCB0QnRV4IMarwjmgIIYCe//KEyk8azSPUrVMjgbe5mZV9V8uDMNb9SHIShX
+7gsGwwmbrix3KIN95U9kyno4XVARD15JHI2jv6QiW5XwCNkqWM/99MU5tZQUg0bP
+n6AzraWn1cDfkEX8HUR/PpXxYqsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFIN1pkERi1W0SngW
+zMzQ5E+76cVxMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAU5y7vsKLQM3vtc4TYa797vhckrX945Jxpb3+hPLi4WyO
+rVK4zj45bHXGpWs2ahy/utqFRzNTMvdsol94S6n69x1V2EnkkdKpeEssg+Xa2LkX
+mrDh6TL01KfB/Z1nIPDmw8V2DCJOGj6JpKqCgI09pmo4e7vNX9KOrSsx4VCVN5XG
+uEyhkirYiY5EdfgVEfeH4CaSmZIdaYiANBZk2QkN46z+azLhhqLkUb0cyh+Qn63y
+34onY+2OyEEfAFUSJ43QPpUWqLl5ix039j5is8IYsRvx14Mc2qvy5X98zi1a3pFZ
+XDpMKepIh4zc5ieFnYW9aZVOesYs4ZoNS4FbxM+2CtngK+68lj4bW2GZTlaHWVxQ
+aC3Sw1EYzCRYx+QVBrGWT21M9PAjKN64YJ8vCwMrSXtCMNFUb8gTzxz74HivHZHY
+sUh8TLEaLArDArs/LUBNWOeaEXddlOHzgVcfz8WpX5iVB08ZFLca9y16HPihWFgl
+f4QwfxDnvVUZ3ywYFJxJXzJrxTJWsr6z03khKhVcixfQOHJTNuQidmwgWythVhuF
+gny3kS7UJQhmwE/ZynEAy0VowcUI4YlasdY1pLtPkRUOTXKvZBwDc6YMStxZtAkP
+v5SK07YAFtYC1QMkIDPG8tICMt5g89FTBUwVor2w0kTYYnAuzz4XCJl6Cf4MYaQ=
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId 4c4b4d648908e45bfe5a10d36387a688aec1cf78
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAAWwzFi6ViL9aAAAAAAABTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDcyOVoXDTI5MTIxOTE4NDcyOVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LZXlJZC00YzRiNGQ2NDg5MDhlNDViZmU1YTEwZDM2Mzg3YTY4OGFlYzFj
+Zjc4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0C6SPbP7sjwhIBtN
+aF9zkbZnrP8k7XWIfR8ojbLLJXeuZ6e3CDxxaCpqWmlAvN16s7X2P+iFggSC9rzf
+c0gDipd442n3nfDf4+rJ/dLJCKwsSFokyD37qG7sLd6/4yQez/Z06njSX7nOmy4S
+FKxcBXQqGy7t5f/bHtbReebsajZqjUR9MQ9DOoV9BcpjurVOo0NLnsBWdHbaKqVn
+fNSd8eVGkp/nK7LioldhfQ2UJL9Prkvl7uqiXYdkx70W/zFKzrZIgB7mfC3uX56f
+/WcQvBYChC2CCl6k4OOkBi+cgYsmChl8fDuHAuO7NOz7EdGSNI3HNMVY9Yhp9SMR
+j0TawQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUDrOnn97743cxy326QK70LXBoVE0wHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBxgcSW
+7wzqY3j/0h65DkRfxkK6EauZM8JQpo2XhUc/TbQ34sL9HT6Gjy5yXeg77awIpb0b
+JjRlqJoM4gO1jZzN9228ICQnoJ4Qk6Pi0z7iUCBDhONmi0St2mwHjEzu0wBid9l1
+3GSRk7puLeaoPT49fTDg5PJliu/eT6nx1JjusnxZn9peYXR8lu9aJ0A32v+1nIRr
+kqwIZJNzx7UQob6OPSeI8jmYKK6+//MDMp+r73qEPxbY0JyEww5zMaq5PNlCtdfK
+muyHBEfTytyAxdXbu1CBVVYGrm27fK/r2w205vICXJY+G0C4aESbLOpA7+8IjxLO
+i/kxJFGIlN0BzXchRicmeRuV39ze0s+F7xP4v9nug7mU0WCejSxRpKnDBKXxIg9C
+ts36mQADxROxtmXnkT/BbHsmTjy4J5mnHVwnp3RLq1yqpXr0M7trsfn8P+LredVw
+7R0+9c9UNC8yXASe9/nGKXRJt2afAALE/y/0PxETDuWn8Y8j6b1BOaUPt+kyYQHx
+mvlErrppNYPG5jXzQo9pfBHP7gs1vtq623VAL9n9G2G+pbQ7RsOeJft779dx6KD1
+QiJqIRHQLV+R+hnaBl1ooLT8muLX3yMUhrxY5c3oc39r+hgoI5TOjKq84scff75R
+8blCF8JRoWEvcsrPc4TDZVSJF8MGRzxvWe89Ow==
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId 65957CAE12EF1B1A875D951A9425B1BC1D2B3BD3
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAGJFe5CWYPmlKwAAAAAAYjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDYxNjIwNTgwOVoXDTI5MTIzMTIwNTgwOVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LZXlJZC02NTk1N0NBRTEyRUYxQjFBODc1RDk1MUE5NDI1QjFCQzFEMkIz
+QkQzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnegAMv33taoZa02F
+vVtqd6LpFxJC2W79pEfxwphaAcY3Ata7016UZ6SJMzD12izQx9bu+eK6azdWbwOo
+2DwTijRdlFRBNrBdVl6CFY0KLFsE7EKuG1/Vj5RoBPRn46wCWngEMhJCWHa4CJnJ
+zb58mZ75QjZKysqgTzU5mMx3X+LYWstbnEa1jUlZvfRE83Tu88batmpKhzwosnm9
+uaChaiBwCJtHsOU91N7p0o6XNiuVT00kNhCoqaXKFvo0x7SqJPtcJLN4MuYhA6jq
+wdzh9Kt2trt6lxHROTiOsFoE9JpUcAvOx3bYR7FImaxJAnEH4bDorjFI2UlxBB6L
+2AJscQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQURNbs4dngM1Mn0QSxMyUDW6tusXwwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBo3Eyg
+/b6tAYBC9hkSFdagcuecnJX+K4TFgSn00C6WKpy+1cypjG+pooZPTVZ8Nibc+Xyb
+3ra6nppNEKUsvwmJ/izdKD+WdogpV2R9Vrr1GzHsRH+NETe2RjsCCZHuMVWU/jXh
+dfSlO4513hyqSgzxIcQc3BiH6P2P2aOKGdfdJe8TP7prm3+c8BBl8WTtJpxbdW9+
+jS+RprQ/ZqDKc/u+hqP4tdBMSsFLTqTjac4lHJBVPPKD6uV62ef9L3sXEGzTVZEj
+dTPePTlve7+5crZR1sG48l24UshRjKQfxMNjX0tmBIZa1AiFMpYFZ5hVA8YszIx4
+ado/KNqUzFgVBWy9BnPy7EUlf62okPzt9dCAJJekSXVqu8symGDGjfZaryNcFx68
+WNmZPfjTllPkrtfTIEjGcMzA/ib3xu7zgBNr/HYdzIOJAG/p1BqX1Aw3vdjieQ80
+df8Xg3qhKGKqGxbm0t69b/3g4H8oRrKS5hVit2U+zn50sMiN1zAC2M9zAyZqMox7
+10ub71Us5Q1KQyEvHfneSqF62Tlj0zTSmR+i/h13h1T845ACtpfE9RYOVFVUEKyp
+aoBi9sV8c0ZRO/0uoGNNMxednvL8LQrYZHQsS8niYli+He4jmq0C//z71yLbWnvq
+64wUSpJTEa9IcCPzufuHJpiBMWKWfq+Y9mVX+Q==
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId 65957CAE12EF1B1A875D951A9425B1BC1D2B3BD3 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAgsJmaw+x+CuqQAAAAACCzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMwN1oXDTI1MDIxNDIxNDMwN1owQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC02NTk1N0NBRTEyRUYxQjFBODc1RDk1MUE5NDI1QjFCQzFEMkIz
+QkQzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzA7AzgyLkvgpX19l
+GvpRRZqxl8W87bDANTJl+mUxBypYq91u/CtsNe4e2jk4m18Qae9l0DEaukdydaOu
+rjq/+A8i5Ho1UyfHHWdTYuUGdw0aVLXTvmva16uVb9fxX8Ywfrk6xMI7rQFjtS6I
+iFfuHKaK+EzstZzvrfUWeVnidOcew8Wgu2aH6S2xgN8Qg9J5YPq/NN/WTiabavVH
+ojnRmt+g4U7pqFDe3tLpZE5KyZa3JBvopdElbo6AXzZfwZQC3woVEPpVgoysjCOA
+TIk/iYqrZqCAxCSimxTawgi0X1nf7YAiTieq2lmvvt0Sw1w4CmFSDyar/N/Fn9wP
+BRY+e0CWSqNgyUcfYnOoR9YxToH6M/Q9N18Cd1+e6aruwnq9+00M+1K32Djs8wRw
+9q1K0wjoIp1RkmNilWv2gK+p0JHr+R+1kB+WhRHqPZ+qlaLRSPqoODDxXRRBgNBM
+7ZhurIRWWjFAjg5HHLYhs3Y6HU/VkEguCbHWEaZpEFhwk+BtKY4zJTwyT4Q3SUXn
+jV2W/PepuX97XGPMwzvCV0/HTSn9ktyw1Wju9RjLvaxFg7vaKmcRkxdYZpRr+8PM
+0mJpdLclhcHjR3+mwqRYEsGwtZcYnWZ/519gA0uo4MRRn/SS1IN6BeW/JUl4F/cN
+O25aHI2Ju6ZgxLf6NgfzuQgG6EkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKBuj7lqPM05Ip9H
+/vNwGM2L7ODiMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAYlVEV3NqWyah9AGkEXZHTol3LtdeEkmedwrEFJVqpZd8
+LDO4gbIdynXNQnRRXnw63lZ/0/xK54aDfWwSqvXeJ0Lu+RWp+VMETdeTSEIvQlgR
+7BZRp32nsmKdjvg+JrjFvx8AXBbAyaA91iNLjCqyYBRP598K6LI+xZBYqdULy88M
+26aN7WRFqCid7Ax70tMTUKSZFdUj0VroY9aaDMo/Hb7bEPnGymkhJQTvwaTH3YKp
+QGFJNyjV1zS27xrNAQDS/aZLhQYuK6f2fJUn+snFmXefmRQTT59VmvcRCO7JTu3u
+tcOLVq7Dco18X9Dd0f0Itpk+YAvdT8Xf6n2qRRWaFrTtnsAyFLIAvg/Ql8dnt3Xg
+T8fIoJJN23Rp7AHBqxYGdLDy26Fu7hZVHU+k7TYF4DxuYwrQ9nAFWrhsA+YMw8jc
++saNtpiGd6Vp7wvggAmat8DCd8DA3mGYLO6gKrTV0i0VA01MjK+P7xKYqbOTeOW7
+YrkWY4gKSFi2GsdrP61Gxh6oyYGXlLCVEehv9Ci2W8ZUv8JKtH90l4O4/sNU/uRg
+gWae0IOVhMBYncRHfPLQb6nQ8U0843ZADVd6OUlcDrUWuEjLSEtj3dMJe0IUR0TD
+uEMdYaqlXpkG1+/O6OF/TvV0UONwLmHSv5t+RISZ39X+TjqxPkn+WEYqxAO6g7Q=
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId 7026D09ED935DCDC44D84D7DA75CCF0ABC1FDE0A 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAdsDNJP2IOnIcwAAAAAB2zANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAxNVoXDTI1MDIwNjIxMzAxNVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC03MDI2RDA5RUQ5MzVEQ0RDNDREODREN0RBNzVDQ0YwQUJDMUZE
+RTBBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp/mUjkypo7HWm0hK
+c9pM3WSJshiT19SJN6d6DIifUt9vnf37P86oexjb9Q0n+nWUDalcEK87lGElve3M
+/oF4cK+hsmY08ohYsTd6sjIuA5poAOXU7SNxAYdt+XBJRanBJv4O7nTXS1vMdNV4
+NyZ43zXpZkEiQs6D6MIYQ8m2YMZcawkLReOguO/JV8lm8prIkzBWKPGPDZIk97nF
+ZitMUw2oz2vKKM51OWh+xfR4MLqzq8qmbai6ShjFG+NIQGkxrN4v2PL3i8oOkKpk
+3PLaSxqgIYBVOPbcC3UVC4s90/NEciacCsHSeBWPHZEGxS/nCelaz+FoVyAOKVVq
+Vr2iquYfKm8kPksapLjJ4wgzDms8Y1HXge37R1M60JAD7OWFrtgvzQ1Y7TWP6Fuu
+jUAtu2tOJ5wKY4+DFwzSvOe4SUPd8BrObFDYzZLp9o2BmykpUI6Dz8S5MZYjiWcv
+E/EoS2lRxR1MvonupgHuMEaBdEFXFln8MEHjh5NrfvZzw/cnYjaIwLWDLLO2PuCU
+ER17siUwN06wj+O7VTj8WdB+PmfkhwXMxjAThjBZdZ1bniW4g1/qksKLlK0knXGl
+1UfNtq+5TRsUydw0LDkm2x1uaJS6OIaBuJKfdI4D3OvSkfz5NFKoOX+B/q6sKY4P
+iTrVMZznn1EDPcq2Enn5xDUuhT0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKMY7zXC4mTD2KfE
+oLbJkVNXqcxAMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAczYhVeBqsRaG1mBoIJuVkJDd2tCpcU0HLruBKUZzp9U6
+RrIl99WREoXytZaOXAvBAq1kpyJEd1VIU5rr5IYNiYWP9nsaZO0kzlyj32Y8Crl+
+s79Bog4/F4h3Wooc6xvmx0OixAChAq2KVA6UrKwBbUAf/MRbJKq6RU2I5nbv4FEd
+fVs7Tqn+4oojVZq3HJcIT/+U7aeAS5JVzr1094fO87e81pdRXAYjXyyz7G8aYl/w
+sL3WNuYnsA878ERGIinvlheK6f91iSLMmQlacoIMgCYzI/y6a/10ZjmMadc1imIA
+Z3U0UAQCt9Ur/dGFGfUokK7sd0SpEaIq7kx/ZPsf4s0tC+ocYh+IBuvZemzyQ8iy
+C42SU2Wn8KjTzlSYzhRFDhmT23iKfK/NuTzcAZs4AcAWpS/F7NRQiDaBviAwxsYl
+w0HlmWb9G5LgdLceepVgHfWgVUlFVw4JHhO56XhUmzy27piyhNSWYVQOa8GakQso
+P9IBnvoAWKa5dXz0/EIJP2XYIcR4ElknTAX9RmjmnHb7fB4VsoT6t8yJNFcU0rNa
+GwW33piOClEyjyZBDmRz2WgVZmr8iA4IOXJGpMqACSWoR06deLysDutK/M9GfZid
+2YChNTohPou1mXtShbbgR/k3zWUrctifsR0l8TJ3wzaaHuXT8O8rGO7zvpjy0Ws=
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId 7568FF26F37D11268567B6864EC72A08C818891E
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAABZctoa4wkIJYwAAAAAAFjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDkwN1oXDTI5MTIxOTE4NDkwN1owQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LZXlJZC03NTY4RkYyNkYzN0QxMTI2ODU2N0I2ODY0RUM3MkEwOEM4MTg4
+OTFFMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArfxrjBqUQRsBceAA
+PUpNKoq5upOSTq5Va5+VVAMPszFMjKi7vL0qFzqof8r3hyLcx0dF0CbXmbZv/X7z
+TjqiJa/Vk1yACbgx9wV6sFky15ZbnyufekrT9nX+m4No2A81Kq4Jv1ugD07ZM35B
+ds3XbIc/Z4q7nPB2ghCV/zBcJRk5/jhmMQIUtK3m5o8i2mDoJTxJFckl+YItci/+
+bTnihlWC/1VX1x4FeqTvYHHNpVemKlsO5P+gz2zSqWy0gZ6onO9+6sl46Vv7MUfY
+x1VJ06JdggO9gJXR9IkwXEzYER4Qyk5rb9LgtEsTGKvRpCH/u/8LAJNWNIXE02Xl
+7C9svQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUqk7E7oN534rsWY0pRvrf2/y1QrwwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAPRWIa
+tWO2ldWZmVbwclSW+HJ0lnsZo3u3+1kwf2PxXUnHisLkaECIFrH7wq/KlgV9aC0l
+3sQ7HSjZFjxmuLSEOWG8J0EyKeOE6WkJMhtHvt/iCz4E84+I/Nt2bcnCcxrDWY4j
+L+yddouwO7aAJljgEtrS5RIejdi7OCzFN/8PrAAqbclrBKdN3W3Rcmho6PD+kYcK
+pExwvfhxxE806v7gcbhD5j7O6lfi8WNkXZCJkwOab6ASAuTg9VbUmVEzrlHhk/VU
+ACiOv4CQuJaZYYkPgalVDTTK8NDdzToUfp8P0VD+Z0IWxkkEvmz9FKPjfKmihQ14
+XPGsh65Pi7TsEbeOv8iVJZQe1qd4ApapjYJF+24UXNa9TF3xFzMUOJTIIBk5APfd
+tX4gwV7TGzHhqCGQOJMzNG+NRPn4UhzIH4bQ+yu6w1k4FByrXbz4cVG2seV4AiV+
+wj/j9m0xMuahVbWP1Buh4CLD8dBJ78gmoH0oqVg0BRwAxdCVrQ92dXYfBaYYPl30
+CymZiPZgTA8jKGAzWcfblfu3OISgM4Fup/9Qe7PlSJ27Ab8OpaNf6GLk3S3K5skp
+TW3z8bPc5S0qyV/MwGAjrPRePcYH8yguhFrqmIRdRwWEwS986E4NMH9fTbBl9m2K
+Chcjw7KXbTXl/4gxn0h1ihG7hge0vISwNlkJrw==
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId 76FA7DF0C07733DC8CE24E8EFF196D27788668DA
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAVdNqSj2Hb5njwAAAAABVzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDcyNTIwNDU1N1oXDTI5MTIzMTIwNDU1N1owQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC03NkZBN0RGMEMwNzczM0RDOENFMjRFOEVGRjE5NkQyNzc4ODY2
+OERBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAskYYmhvzU8zEq89l
+SlxEtAh+jkc7+2Diyx3S9J1lRLOFRHD7QS3HuryZcKiNYe0UWhssAoYqTV6URFJw
+W8jgAgLaZgQhEpq/KZZqNHMg7oe50K9WfhQRVKzWnafR8CEPfyjghk1vHUV7H62l
+qIF75144A8BovQ28xgiUY5XID5AQ6FAttnoU4Lv66DDUHqYf9B5pHh4cS78K1q13
+e2QWlRk93ofJVmuAsQ1zMm1ppG+c5co8yi4uC0KXbg0JSbVxiirPJ0lxKFxEesYK
+C2EpV2v1eP7NhAA2RDTucVw3WDW5xmGLy8bzltFAqRV5UcdYRZS2wOQgRHKK2ok7
+oPHRlwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQU5eIt+tHaEkSGnVHDTaeg8qgm7rEwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAFjC2A
+C6LHhZM53xC10amMxfNoi7ZzbDi7lw+isLpOwEYFlyTnrkfHeTE5OniK7kc6OzZb
+lDCSueuih5cnudTJsTYdqGccvtkA0hjsQwgI5FZnjq81MwGC37lSceKp1klx0PnL
+T3uPrcpZSl0ZqKFoUJJBBU5tgtrVsPlHhP9qjsduirC361gv2R0czIx7vyN1ZxWE
+OQrb35Glh+igDkKcSgk5OBiyhBvA79dFUAztvlVeMeD4SsX1/lHiRC/ehBUkJHTa
+01zXbMBNr8qoo3n9Oy9OGDnvdFs+vza1/MCKKytJ4IvsuEp//+Mk6yhT9uta8gpm
+19ugAB/ZKV8lLcF+TMCPxqOZS3fpxIjeVjk8GQzVo7JnoS0yA3PaBu+i9/e3+xLp
++r1dp0ZuxNJAZGlNoDCoGY7VZPtdfDm11qUP7oZyhqQEiL9XGRZtnOUvnUccIGz2
+h/N30e7P6PSqhccTIO371yZ+3YBqtU8HH0K6YxDJiN97KmgC2OGqTW7SbZuRKRjM
+t9anmqMha+Zo+8/iCSyjXHL4o2pjU1XqFdevL5L1G2yQuFdkulINY2eQiq9Muo1U
+HIa/HLVyWJqME29D0HFtfZqsHrQC53aQDepxAe46l4PqabaW8heJgS853ABjxJrh
+UeWr88ftMwGHswprR4maceznQpR6opirLX+zsg==
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId 76FA7DF0C07733DC8CE24E8EFF196D27788668DA 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAc7reOhAq9oclwAAAAABzjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkyMVoXDTI1MDEzMDE5MDkyMVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC03NkZBN0RGMEMwNzczM0RDOENFMjRFOEVGRjE5NkQyNzc4ODY2
+OERBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3otYn5y0iPoQ0MaF
+nBAjznh/7zISIuQpdqp4ypDNUPjn8m5Ghocylpfec/kes7Mopvk7WWhkN6ZBgr2m
+JFQCIRUqtN3/PoVK5/h/bn572K6uV3kV5Wo9nJhPvqUlRgb16vLp1TnW10a+LQ8F
+ioN/6bjrCEi/7rWy3DbjHboGLrPXpEiuq5vCJN2bL6f/KSCuGlhRkKILiYg/6YvG
+z3gRKL4L1PM05aYNvjOkv2M7zqkJp8Nbf6vgPeJt+GWWHUJI6ZYvSlZoP+7X6UPu
+UNFYYpYBxuJTgSTBxhBS5ztTS3E0rkC9pEfVb2J+zJL1Eu4UwUCyjypkb4CDNode
+1WTXcZ42OOCsOGvGerTi5jqPUJgAFmTE5wL/+X1tYiHb9RAJDr0PrchpF9ceamon
+LCEH5F73sDlq0UKOWuFdYIsQjogL45ZopPoYKi94pyQlhJ/IvfStCUTReCoMtOgY
+7FeIgOZU7SLT81w0CsGlQb6VUp6xdbr7v3aMaI23Rodgwu2SgbC0Ohmimgnk/+Zg
+IHQH36rN42CgoxmfpFaxpva63i/XzJnR2XQM8maP2A0hYl1Q0kSuhF+zrrrI16eR
+jLbyo1gVuHZVG4zgO0LXG9PCNDzzBi2QAkOV2OnuKyshcd1/Gk2a1DJJ9VoKLgeA
+fHackgI/Z8m6DDwOpw/R+0ZrOfsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJzIJ5db9V0PB7rM
+AuyzZgCuGYlPMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAQZWy9yalqbB3CRyRxNOWRxU50D7E58z1LubIxh5HAHgv
+6JF3S6r55OnJHW+y08Y1DhNZanquoxKEOhGL9Ak43iPuTW4c40RZBdsmHB2y6Wvt
+xS27ggZfNBbUabO0EJ0gfJQgOVrrixlv5cDE+PaPra7LFK1dVapWV9nG+/IDrhOD
+xr7j6NLDIvaIoRow64NyekGJqP3h9aOCK1obMeva6pA5wK4O2nTqIFH68S+crn5K
+5199PglZ0g5TXnC0tEPiMTIY84lSPc7WiZdiEJihmgbmHpO6CFlTsPwS7tXJfqGk
+9czKpVeaFFj1zEGLumV6+YEwFAc5Ne3GQkyws7291rFrv2J469OsLeQGrIvFgzuz
+EjTnarQFJDHDjsojWqKQJ41QSY5avuGKLean+VP6wtiXBSfVJvgkQIHYDeI2wCzY
+XO87OsaDZbSATuvQMph20VXb/+qaP/JRalKmHjXz6j8R5nBenmN6kz09Fh8/KnHW
++/OcxQ78aInn+N0Xi1nbCXgEUY5qRK4NpjM0Mf6SQqukzbr9XpSY2M4SL/bfLUag
+bLDHJ+vn0rhnsEsXQHokgp+V7Igjwhg5c41nxSr2yRpx10QaGhjT6Drm8bidPCe1
+HsVW6gvxlzlNUNFoqgnW8md6n/1A0LztdMsKBa0SOLbZui/o73CM0LHzP24EoxA=
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId 78A409C457DE6926F6DF42C6114EB7E56A9B56E7
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAApms7XS1+D7AgAAAAAACjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDc1N1oXDTI5MTIxOTE4NDc1N1owQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LZXlJZC03OEE0MDlDNDU3REU2OTI2RjZERjQyQzYxMTRFQjdFNTZBOUI1
+NkU3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxL5Rkm6tdsBLkCLx
+sbeC97I6HyyONJ0Ls2ZaUQLPc8vDvi4hoRDlSxwKX7lRl8EHeQV7nRctYp6oMBkK
+O3auASgW/CUqZJkf87Q0Nqi+xvXOzhk5MVJPffoknJiUOezdit82tMH8sRbbdBON
+U3LuWC8FaPYHTfgFIre7Z82Om3Rc6gVka+QEAzUNRH+GZtHITHaVznNdmX0P8R7h
+hdN+EXl8LzvXzN/OtwNysqJQ2lAywfYjQU+2IQ1SOMSFjZED2D9NJbm+BYFEBPTC
+/v0GPXAYrMvaMhg8JJ5nwMnKtPbT3Yo3VbXcKAJSnQ+t7iHLel1dLF8BSuc6AlQ5
+X0WsiQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQU7XQXmAQCo5VFEXkxhpY2NOT2DPswHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBFpnP2
+lIhI5O7IYtTlFVc8RMFfjiwCwQVXnIpMUgMdSFLxErU0h7/mZoVTIQ/WH4fajAUn
+uzSw8RXdv1PtbCg1kDnq0qIuJjg6XYln/6xLPUwYgQtveVtSKNbjar/Bl7Fhijnn
+jG+1FkSE9FGQW2AoysnlqbdtEBGj5DbP0wHnyQoqpZF0cNcc3/yw6feCsI4WjbqQ
+YxFsweMKm0uN1O2WIg0ZIdgQc3/ixAjQulaKlohLfSIyE8LvMUB/9VyjIgslORM2
+uVGT40jB1DCK6DHKScIBwlHiTl6TPP17fs1UI6mS3HzXxQNko5I7SATnL9qj42mp
+q8EsD+z5mMRReCy+8mejdfUvZdYa0Xq68dU+MsxFdi2lJ9E4m2Q8cBIB8jSlh+0b
+8tfWiwofd6Y9nE04bAQJjDxv9qhGvKOuYdLw9v2pOzUtBRNZO3k8LJHIow1joipW
+jirNxfNMB1eXlVKryoV6g5zySYIJIHdBdh9q/J3JKUMJgOL+k7RoYSkm93E2xgma
+A/togw/a2Be8wDolIvw1kf6883geSwgzIKce/mun7E9DDCw4/8cKe4Da8u71CK17
+jSEgabU/mXkTtRkxXB8I1j/Y0K/iAM4jdLjJBZQko0OCJCzS+rHgDf0nhbNDd6BL
+4V2X8cJHVzUtmorrDbI7fF/+tnG+oWs0jLhrHQ==
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId 78A409C457DE6926F6DF42C6114EB7E56A9B56E7 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAgdgUDLLstOfIgAAAAACBzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMwNFoXDTI1MDIxNDIxNDMwNFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC03OEE0MDlDNDU3REU2OTI2RjZERjQyQzYxMTRFQjdFNTZBOUI1
+NkU3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvStsLJ2nR50vuNCv
+y2bII73bb5gYN7/sj9osAoCU0vno8ZsaHHTzv9BsvoKS83EBIFIqkV9jG7HQxbKE
+4T2liCeHsItUFYITJwsebLAe7B17ahxKIn9PKR6Y2mSUoynAKq4TKwhqzxx+ZnQn
+dm5IxqrYqfWr23dxHGIFDDTkQNtnKjf9Sl2GmLa2Iah9b+26QsCNVcXsIR60RVJ3
+naxzoNltkgGxZgUGHuH5VXjw/GnDH8UCgYVtx8Bo9Js1dxxKQDW3mcV91EcSlGNa
+TO4ZKBveXb7ttOmfYrKScIA4WpYpbIVfVs5Ik0dWRvsRkOFmQpUN/UYziHAEoy08
+SeKzwfI/hmEqy4vPCJfB1s8iqCtuM+auqKgp+lrHNAOzCayxQ9eTH/4MYkYjhVEj
+z+3WmMLhejMChiFx5+FILxqhfoUpZ/0XCGbRHi3MVsYm3NJ1cm9Bgmv975MFgy9l
+VjG7PPNZpLhADCT07Klh2iGt3n8KQOsGyNoi0xPp3nT69OL7X7aBNaz3iRQPliU+
+zyTKKW4lXOGmfgi0orEEcSsmdXll8gFoVT6EQ7W472v/1YcgDVNfolXJZL6jHYPt
+MiaxVMXeWT3VC5bt1s2uizVxH6UhXNruRzG/odd0z3CLYYcZN6AhNshqqU9FLxsa
+FhlRb0ZkXO563RtFmuObYhz3Xq8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGiUpGoR/1JZeoXo
+z2Xn1q5aA+UiMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEADDWWlxaBB5lSHNNo+fzMklmRXupMiCywU8hW/iVrh/pg
+0hrNPnziBTbrjtzAhq8sqWWOphzZERtdKbpvhPAlHpep1WEuRLyQJ3zUyoceAaNa
++U1ttS8AKnTZi9V2kMtzCGAEbYCl0bQDhZAA5FKky2JA3fEpNUFkD0rZdhhf0ZOJ
+7aIXYPV1dus0q81Dg7tmd5k034+kgnjU9QR0geb77FrLPdos7V3ZobUk+/QcUbTP
+NhnhFSDJyNWOA+rJxgvyV8y3+VuLeAfkf+OX/TUspKTU4ostV12hwpbBnfx3shcG
+chKZbKZdul/Dvs/JNato9xd0pq/kShD1H0e8Uw9Nr5sfzMaeqXB2Y4X9Q26X1fi/
+K4AC2DvxAkgQzs6GSRgKzbiGtlD6/ZR9i5PRRukShrwL3RIBB6J/oKwmjqjAPupy
+8KtbD6vQf3uXGJdFveWEhHtazPSe4yP6DHEjAAr0fX0SCgk8nb17TpHcqlb/riWr
+k1bSH2ugEfvoG4mT8r6wJTXcjmcC/uHHTKn5C0CKSgkMp/VVtd7gmLQKJFFxtBFI
+tTmSTbTksdeIVlWhOFx4O7nMp34nGKVpE8StCFspO63NpzNDLM8zrEBoVZRFX1Bk
+sw3OyfujHbV1WpqAOhx2+X5XYnxeAHJDxQW7Z8I1ZkyKMhQysMxxaWJAgscwHaA=
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId 88b3c13f6105d104229f5ac0eb499564acd473bd
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAA25YcW+pk3XEAAAAAAADTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDgxNVoXDTI5MTIxOTE4NDgxNVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LZXlJZC04OGIzYzEzZjYxMDVkMTA0MjI5ZjVhYzBlYjQ5OTU2NGFjZDQ3
+M2JkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv/tmw0wpVatoRyq7
+bvQnpdk00154PhUQMwpLY3QHprs2dIDWgaVFYPYKI0HM3kzQ59306cR+TCfs+78K
+uvfq4IpzcAUBy3tZ7MkrUdLJn5w1pOJmxkhQ9i/20y36HrRaurv2VG6yxs4L4MH4
+e9/jdns+cD5PbMaj+0Zzu0uOhaQ1/QAddkY0T3QaWbB68EIU9QB+wk1L8zZkOJjm
+rcZL4inZc2CkyVr0SWgOB6X9r5AupzM+0WmHbvD14iFP4sQnzndASZloOhgKHImO
+mjcBXSnh8rVfNGYrLlEwyE/ydJ3qWeR/dlIA0Nh3TPCWxYXt6dSsozSewAWq3vGE
+HAYpjwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUSBFeOpvubk3fuCVidXXNVACyJtswHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQArn9MU
+C5KcKpFMbj2AEPgPzl9Zlhl9nMANdknFyxOEgesvPQQa6afvZmekmU9UiPCJ1Q8A
+18bpBM5ckm243bHD6NwuSTdaGXtLAkC0wv5CPmoFe/Z1ybjs/YjfhONFmw6R+TMF
+bMM6R96Tcqo+cyZkdroRYtHfKPbQox75exSP3rtNyRL0FRKSVRFmUMEzflgvuHVz
+moNzO2aDLyQXTJZPbmzYo97GAYob0Kslo42+JQ3+bOEmBzPJNGMHEAIz6eDmHM9t
+v+WokpocrKqMTlcg4c4u7CZ7utbBEMCRw4D7V/PXWMZPxBO+OGYYXidyqfn7dT5W
+YJTGSKSUW7p6i3taLS4KkYVx50DFJ86k9Rb6lKDW+Fa8v88Tpw3ar7pZgBqICQV1
+je5yfzuxpsrAmPb/vayC0sNXmaUn+i/f9OP2zzTwk9Q059wVftevg+bcb4EdKsjN
+H4Dv57p4abFkQ6p1rYIWIV9F6IVeZwP79WsrETygGGWzV1K+FYPBiStjO1QZ1kgK
+fefnNwSYqZuFJmVgvoImMtCldYxw0ZSmclUs2AVijwuZki/BI3mvqEZdCAyctfiI
+D7BiDCUempKmMcMlGN/qsaMbLmLDvpcTXw3vm5sTuRSZr3bfZa2rffVvWnQ9cgsX
+8JhJW6rSyZOAtL2k6mInhS4MelDTdxStVpP0bQ==
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId 8FFD47880E239A3A3A20DE13EDF101E882A9D21D
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAAcfcFcWZs/i7wAAAAAABzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDc0MFoXDTI5MTIxOTE4NDc0MFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LZXlJZC04RkZENDc4ODBFMjM5QTNBM0EyMERFMTNFREYxMDFFODgyQTlE
+MjFEMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA18yEupj6TqdCAmnz
+m8SMSfuB8EBisPO1OwzaqnJszd36n4Doexf1lKnwFcvVaVClm3TdcsgYGqigpcrE
+mjqmCWOUi11IPbbvNtYoEsrYr5Fv9USWXGif2NjdAFam17YV/JSgEYF9Fi6uPbm+
+Y20s7MGM6oF0ZXBnx9WkkQ4Pey5/LR0oaJr8ZYHDqmG+Cp2YTNAH8ehcBKQfgqSP
+lnOFxtHeJSNw2JxQh1AHxXwx2q1T8GoJ1ZytBHQmnaEx5/Zfc61xjgfnOu6C07/p
+Y7aJ28lq6OKuDMLeceS5EU1K5MQhx6L1/NrK3aBtSzUfCQ/47P4yodfsWjNcN49g
+tJMrqwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUIlmqYbhV46JAfPI5V6AkiQqKhSQwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCDpuor
+jpJagQoqZ+GpRhzYEesmuGUTQ5skmCqRmmIDSa6fURqOBXGLt7vA6tcvu0u+0huC
+A2ixE+tmQGn2bY9ZEQK4ag6RyhQvoKKmZL+PFFtBZ6LZgweiFgXAMkbqUbUQxtBJ
+A/M+jJRQdHKpYMICJik97kPmTf4vFCShxkhRNw42T14oz6fVICsf+NQ2DrwX5YEs
+1X8w8brwsJbqe6bkgS9mSp+/w7edOOps09xlz8PLErkXNuPTURJQAJx0uupIi5Al
+RJARNUJKELWilh+nSCZdUYwPTL+Qjhl1/89Ka283YE2nJVzdV5305p/6inkaQb3K
+8AcU3FNyVzdEbr4iKgXfSG7wo/XdkjIndUTzPiuJIGrwgwGK4MZIwhkAFR4/BS8R
+rBdFFIWtvkA4KYz2P0XYBwN07ajK5pik9jBc1aLkkZx+7BRHXuK8M75y633bBEZ2
+PV3n5vsdWyQ4z89GTy6OH1N5nrafeVgrw+SvDlbq8CkRg7Tkgft+JLNv2uRFaC2q
+DH14t7fT1WqPwRieyg0+DkOD7x822+vihxT7tk8zsXLeuG//yR00PA2hxk5ogr6j
+dKnuXxoWVSphMdux6++GDWAVU8AEpbPRh5dyldtYca5J3ghFSjPpRG7SWKTKhr/M
+ebaiwm0tjAIV2IVNxWItnQ5LQAS3aqccgGWdYA==
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId 8FFD47880E239A3A3A20DE13EDF101E882A9D21D 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAgRWLmBrIpOUGAAAAAACBDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIxNDIxNDMwMloXDTI1MDIxNDIxNDMwMlowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC04RkZENDc4ODBFMjM5QTNBM0EyMERFMTNFREYxMDFFODgyQTlE
+MjFEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwLyuwksd0zEd/Ma9
+EZLtL9YctS3ac6fAY+Ik7ewBBKgzMYbBgdgewUo18eIQh1MNfcemIUrMMMMpMrrH
+XI1/PXsJBxBoPXbMfoYsmlHjmbRYaq++Q7e5sKnrvykpxEQ8PHZV+TwewjLvNaVH
+dhO/B16bdH4QJq4Rpj8qC6meBeCBv5kwGtaVywZtFDOYFJGT/CzQ5aUREH2/VjuW
+54U5gHm1JH9kwX+NV1UlpUVxrVegCZigo011PxIgPz5ynzXGbTC1/Yd9hGw3zg6x
+H6SlGmNFs5yZq9pGHZTosCLC2I6v8sH9sBbKEkFN1EjF9jKUT9GbgyrTQr+daFVn
+25+8MAVJxYZ12v38PZicHfevdR2PtfXy7F+gGRrCQE1LfhapejfH9qjFVEcWesFD
+pcJXOk4pgHx9AHOYz1H9gzdf9MFaBjQ0SRREUC1czyQZj+HlpwtplIDafXfIzi3e
+NKuuhWZ9xhre4sURIrGPQ5w2nOzo2s3ohNewUQas04NmNizBUUSXMC+XSzgYhumC
+fhMw2y//OgEEB6V8P2LQXZUTgivfOD0KhazaMYPfIvaRZWl9UfD/p76u0lC1v2qS
+J5gDCZf2ASmq32GAnIEqbF6LsgUHfVLBl4ne5aNM4GC+kHNjiw9dNYKFi3dQzevq
+b4EXuuS6EGtan7yk/50FrPNZuFcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNKJF/kjPhRxwWRh
+l4iS0EtVWBbqMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEALM0CBUtljGW2OkkwsD8ydqNXw8RxM7cqHOfyxs3DnWXC
+XN1SdLcXHbng/vdk5Gpez1tppGX2Y9kRxRJguEZRXz0WmBB2AkrJ5KH3XC+JuEyb
+bPl0ujXaMx/l1zjEWiqQKL2o9XMB1KaALQVPet359bvl7Gg1Q0Ccb5eP84rfYi/Z
+EGw8dhaCaEG6kZvkw6qyFT2ZRUa1T0I/HQZ8bO4d+LeeU/4o+pXYS0FUsTHzrfyF
+tWc2cbgzKCWKLlBEcpWp7ef0kUIo0OWeo8xcZeyBL/WPZeBGu7lpSFIbmWg1VbgL
+NdvkYhS8lllP1kIdejN8hvPr629GxqBsgSHnOtzzWi8Dl+ZwwYBmZfg43j1oRiOY
+lLMpZO6bdO4hE9iyEV4P1zRTLAOIJTZO6CNRPMCXRps/e/NU2voDl9dnGbGYxGz3
+ArM+2CK2r39oPxZhnTrqO+fDsqr5ronAWCoHNPC/AueAk6vmum7MqXHvSIVVPbmX
+cZ6SCHRtwaTmay3cfs+bm+Zy/sbIeXOBZWpgcaZGGLbUGkTpAV3IK3hyTvvb6FSy
+hk3Rvh95oRT5KFwvh275Kg4f+Y2+Bt6Ev4JYo37lXGhkkM+PtTIQ1sr03tjaa00l
+/yojM+PI4wb9x3Q3BAwJhoDXuKGRHWJkv65612hzFL/v2SA4M1nnhS8D1zsFy2c=
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId A0C9DEC08FD39A8B59C46BCBE87FD9948C55F970
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAABxkJbAyGxCRyQAAAAAAHDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDk0MVoXDTI5MTIxOTE4NDk0MVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LZXlJZC1BMEM5REVDMDhGRDM5QThCNTlDNDZCQ0JFODdGRDk5NDhDNTVG
+OTcwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5ZKJNjUqFYO06+Yx
+qx0YCv8qclWZSO9vYuyqxoCNuBD8uRdlt048FuVUt09uMbdU5V/FwIOZ5tAFMNAt
+fwP0b9CcwhI/gmhLa4AQ69eYNPnTdin7SvkVfGEAU8vCnxboWxbpmCDwUSkgiSon
+85ed8N5o7JJHowO5LgjWUm2C7l6brzreGfg6aC7hbBYx+/Q64Pkzom3icrdG1an4
+qDe4m7pZKmH0g3VYVhRNsoVSfxG2dBcwO+bNar+5lcc1z8HMQKgrZ3VD1NGwsDBW
+8aKy71DdDQ+vtDNQR5CDURRgBmlVQ1iVRSBlFjeLn8T1XyWRV54oonm3rvqggexA
+KCD1SwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQU0MQiyLS2iTRffiSMdWYn7Emyvc0wHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBgRXbv
+Qy74QgzfwwMuuieacJGuck+9dToNB9BeB5rtBJj+NcSTLne/77Iq32NpiO77WE4N
+A0IRPtQKQxvyOO5uOl/co1r7RFnhIob4jtAp4jPI6+VR6ohEQe+AQeBWX5sb3D2v
+TRSA8xaFfHB/HM6qFxZ6b4GVwsy/HJPLLKTob92Cx+9FxJwosgtGh3T4yfAUAbvq
+7aLMNFcOuywjEKRAZKihupxm23DAnC9UoxuajAjh/ig5ati4Ft92ve6gXBtsLUr1
+a2wzG7b0kX+9AZZ0VA5q9wpkhDMubpGLipp+WaJBHfIB5EuOZpdnYaC+2/iUDkOV
+B4rwdzPA2BdYNRdTaELw8GDA9o5tDn9K7mUs3OJSuny4YhhQsioYQYYTtH41v6Nb
+QlXdjve8qYGWMKLFzD17evMUQJ33ZQWnKU+Bz4hDpzMrM8U3opx6zNL8uNteKtDS
+xUyEyIRszmLfs3flHimFneJWJmzc5YtYf+/NeOH/pD5Ko4Qrp+myNGVryh9tWxYC
+/6mMXIQ+3fsXgmBz5ycjSOA8ViCKjLtO7yBkDsgGwjG/OMNWqrmSNAdjRL+pjljQ
+uHd8Zmgrsnd9OsBuQUd6BY7MHmqy+D0TlKhk8j3IoaEIpbxs7n3xKnr4c/X9BhYz
+/Na/amc/2hdIkd/Jai3QXjx92xkD0o+BvxmztA==
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId CA6970458673493A8AE1994EF1E29238F27F4518
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAACtrONyXv+k3jAAAAAAAKzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NTEwN1oXDTI5MTIxOTE4NTEwN1owQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LZXlJZC1DQTY5NzA0NTg2NzM0OTNBOEFFMTk5NEVGMUUyOTIzOEYyN0Y0
+NTE4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAg7Yda/TA8w6mfYMG
+KhaqnrHHfVOMybACKefxM5L2tCU5sftix9ziUjaw5qbvdy+bAGo9gWGBmTOXkqwX
+SZ6foXQEhDAo99JzDjOaN3Tnw2YW5Vqz0oBjH0anDqP/UgvrAlkYH5MggRMrh3SY
+VcUeV73eBXFRZuknHShZj++2JoG+i79ovo+4GlnnvpNrJqyt78OomfL6Png1lsvf
+WMptmLB6jB+Aw53odQJvVv+XnYij4ard1Oij1OaNBNcgg8fnc6N/ZFuw/FGRSKNR
+pXadB9J0ZBu6n21QhQLBMnx5lzg5Fw9BkpIyy5DVYYNRrpXXUpMwykGyMCGgRYlm
+x3YPTQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUJlGhcIpq3S+m0SHmtRykMoforiAwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBhTd5Y
+5xoJvvgXtL+wRoei5OjM3CVjazMyCndaLCDZQjiP0gCUdPTf7Ti+lWzn1Vw2CCUG
+HrZiQ8AflOAcgqAJwZxxk/n/tys0A/iOImwXQm19lmHXUDcK24/9RtbA7ka2gIi3
+fCYx71hZzssF5Po0r6/vFNIR9A09u80MSOJJEND9lg4zPSFkHH3hTAtZZGlR11Jb
+UXIYopoT+mpHkOTNxheL1R7855/tEZ213piIRzEmD+labKLbZkq/m7biD9GiyfYM
+mJcXCoB2U/yjlu+7RZxu541Dg8GfP9jtOHZ4raa0271K6K+9+4a8LhZwqEN0+joW
+pwLh1K04i2zRtYJGY3WcEoKiMdshaKdtTRUm8TgM5CbRT5KvHoVao9Yok7h36aub
+L0soPTQ5R1nyAv+RMCVEk964mLgzIK8WALIIuM+cRWI1lXRYWyQiHTbU8C5gaMwA
+STa7X2ebenMZFNoPa3wpwRs9Bd9TAaZFis4mx0R/WdFOGhz/LcE4OaiSVelTqEFY
+5IOJ+YXLgiGHuzsR64+rrhhPcDUY+gxwlOTTiVK0T3lhEpaGBxJ3lj0B0l43M8ph
+y9C+bkZv7aRvdmzEONKBTPDTqjFyz/A0MlGAXVKzw3Lik4RA86EgrUotxnsNjeVc
++uceKOG4QLegpCtMB0cPTz4VBH+QWX44K3gTQQ==
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId EC3F8D4CC12ABE88A019064E8A62B7018FA2E359
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAADFg9P/ebMRWPQAAAAAAMTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NTE0MloXDTI5MTIxOTE4NTE0MlowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LZXlJZC1FQzNGOEQ0Q0MxMkFCRTg4QTAxOTA2NEU4QTYyQjcwMThGQTJF
+MzU5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3YzZznBirZCdwEp6
+AXgJVpzp0P+pqFsgPEkalg5SPqR5/OjSTGmge2GAqZ632S39aidQYoQYXe28qwBP
+p0+Rt0vXqoAskDutHvRCCjpqiG2zVzkhY/V+mH/kjNgzwHEi7tpOykqe9NHynkt2
+7BcwSestNws244M3/uQC0s94JBAZ6jckXsc0C34AUV6QfiHD/lFEsU3GXEWbD1fs
+6QKW970STpYstw7leMSbYmtfIjUTZEVn2t/jGjSAeX291yZw5SrxIdu6clpkhmyJ
+gcqK7p91pX4zz4D0sGAF1NyCwQfbIyfTbp6vUamqj7RFPlPb4ACoCkV9RjkCXXUI
+DcKgEQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUC2az3EYa3oI+ZX9L067AYZZbccEwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQB/SrGb
+ZnTSGfZb5F6ZJ2OX6TvJNejHe3A7a1SuHZrELGK0xUdmyC/s0fiMJDjWu94SlqAR
+wC4tihFhaA5peeQ6a6VU/bih8VauwmfNzLH7V4Nr8LjV/FhInkeEfN6OgOZxAefT
+JVo/fEx6/3eDhywjk6jAWBI8UotPlL2eEgtMBwH9gOZ+gAYyrSitCGx6WkOqlJTe
+cwcUDrrzaftHrGpfTjunuMzuMMi7n83z0GWvuUVyPfc1EXx5Xs52B+/LSYPiQpzp
+cDAhmvUBuIh4XpkrSU3iX7eESSeMlZkAQ2Wmvr18m7JkHyhGe0i+ArRa//Olj6FO
+cb+UWpjALdMi8tnI1J3bxOhharNF0KT7nrl9425qzhtZhSERMq4O+jVERLY9P3NS
+sp5w0j8c9ixPQLjgLDGPqIQvUjOQOzv0tOmodLMX6N9fIyF9rcC2mmA5HErSyOIL
+Lh1bRSWDQgG3+YwmuJvvTiJCPzEMlOf8BcNMPBTWXSnnvo1HFm8pIletG8X76cJw
+M2lLfZTFkmiYQCs4TWj1tX2Wqjd4YKHHJ9+AT8fnDEAn0aVLgfPQ91lLjIH38HWz
+f4KTNCdfssmQMw+I4jACzyAPcvhyibaSlxTsETjsC0DLu1YEG9i5aieLk0j/SKW6
+RfttsNPhYRhQpE4X7kmvaTcxKL0+rIeN892ngg==
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId a75598b8026fa544affcbc4b9106c12f96d3f0b8
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAB+XSBPvc5xF0gAAAAAAHzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NDk1OFoXDTI5MTIxOTE4NDk1OFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LZXlJZC1hNzU1OThiODAyNmZhNTQ0YWZmY2JjNGI5MTA2YzEyZjk2ZDNm
+MGI4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApxke+BIc07LbS2LI
+NNKyduLDluSFs/VQUgz0PAUKeZwhwBF3H9Xn3/oL3+ET3Cqbc1W190sVgXakjRW6
+QDl6n0Szmbx6U+9qCZeh3xL5O5XMMEjjbWoD/ukuN2oINTvFCBeKAIqQG6yKEX7s
+oG8fSQ9P7kkkVFYsbO6G+0isVRk94nLkvUz/tYk9VB92lVo3BnGChbIljMra7E4l
+dIWOOS2H4kxm4kpgED03Thb/Fvpx+mHx+w+RbaypssLdAkWwWTCkC2eeMYO09R5f
+qp8IFYI/mC3u7RrH/qGnbh19e3L14FEheWM0Gmy74oSSftIFioWqsdO00atBw3ok
+ueBiqQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUjOJLahJ3xNR+M5MLLfaCWsNhwhwwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQB7QORL
+JsqTCIzfk8ArgDfORjVnUrdXmUjJYDMTE0pBycuHX+G92bBYYf+8jFbXcd5vSME1
+dXduCa4275HYbg1Aj/SQ0lcCVizhCHjzonSmv3mACjf+7PkTEMm0WtR2TMezcrsx
+dcUpLhnbktxq02+bw/3Q4E2m5a6DGy5Ap6900KVc4Sly21ZdAjdCwqxzZBEQ+Nnr
+2raj0QY4GBfgUk1pqqlmWA+c9oxtzuLmGLfbJx0dJjZaODT0usQawYwBl3xyeEh1
+3wkUiUsjNkp/ujJ7tyUFbbSfzvgeOf77QRV+O4S8Y8ATvc3OjdyL2Egci8E1TMUc
+KnXb5hMweQDy2Eylt7XpfPexl+3ZBfbkxSwXR4ttoyj82zPTh87O1H8x0x81qjPK
+Cf8TvL/Mi2Cz+Zjf5bM1LylW8E1HBsM7K05ySvCRbOTNP15lw9b4gl9vPb22MXuU
+MmSHTTw1oTHzNDcpF03NLkCEcWC+96mtVZ/2EtFv8+r3ioRpxCYCSGnVHXjb+Xpv
+OjdAzr8oGlCaW3VUzcUgidQ57qAn/+/2YVAcKQrcg+0wp6p/kRCBmEz9r0kWDLtg
+/pDWIPQDj3Ls77VWkldcPzYSthaB3Jn67Lm0FS7oBy631BK8mGvSIEK1lNkxutCE
+P4vDcUqQBFG+8WoYbOSUv9nigvPGDJ742xJRQA==
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId a75598b8026fa544affcbc4b9106c12f96d3f0b8 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAs8rjeLWzhTvxQAAAAACzzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUyMjIwMzIxOVoXDTI1MDUyMjIwMzIxOVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1BNzU1OThCODAyNkZBNTQ0QUZGQ0JDNEI5MTA2QzEyRjk2RDNG
+MEI4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnyo3mfRyMs4E6z3y
+YaYAejfWPC+LzpyJ0PPjwNtBG3E/rLXNNJGDq72E11ao6LxqqxCR+1AJw0Hlw+Fx
+maZAzgFF18jIuGKp2blgeowiMa0zyCyaQgQ5gOlRbGV57Vf220uvRqdsUkWfQ6G0
+LVse9fm8Jr+b0XJ5uMpBlKuSPaGC95Mdz/SEG7COoOeDYDai7/U5qOrA/ib+xU2m
+W1E+zrTvCHtYizfuGGl3ZPhGK4cFhIeiM3i4FTb4VLX3i2yQ6U1AP/e2KaDY3H0l
+1wQCoCz6cPvircdh7XQxgIlvLSyH+jzlDSHFfG0pR8pd3WrGTBqRJaZ4jGInvbaB
+stV9nLQZi+lRYf6nBzxUtD2QAvX0xQqpltGt68K7V7XxLKyQSeP+Lu0yPE3gS0sG
+FDcXmVcLe2T3X2LWkAiWkoF2zSltVe6mJk5Vhx+pCbgBYzoxkkonulEeWTpuZC0P
+Ri+sB9f9/o6st+b+8s2WgMQxgDAYfdXYdsZGqM1Kp46Q7mzgmAKKCc8k9wmD1v+B
+pGux4gKP+VBkxC3cxhCXhr4aVDOz9QFlbfqrHRkCUYmFsZJH/oRkTr6svt+U8qAM
+3OCGhlhXX2acdLPCZO+h3C+jR6qOAidW7+WtLFwKb1nzaNI+iklUY/X1Opm7mCF/
+MlKzxUGWB7wmrEv/IKt1NUQ1AE8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMpu5+U7G90z9PiZ
+VqS3jV3JDYKBMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAmHzvQrEVYSl5jUK42MdcSyzOu7Egl9e5IoeugXfauUN8
+U2ltK0ny3o1iiPKUQ95iP8u0JCXbJ5TwLw41HPrBxwPacVUVcw6QhkUP+p7jDi+M
+9WSIAL4Va6qxF+q08XzYt2vpENQ1lpQ3RduJbMZqoyIUffJU9txrVmfM4mwpBTEV
+HY8Cgd8ke8/06S9K2mlMxhZXBZLdLvd60/XS9W+R/PpyFDSzLHivOPZMNvtqDard
+kMWC0ITd1e9Izqa83aHRVpN9QkHrWnoKUljPmSm5vgDpqTNhkcqExaciC8L7vWKH
+k5d3B6LT86GlAriBAMYxK6rVI4hCHR7TK40S7dNeRiL9XLfZ3omOFYYhW7PRRonz
+hmnxupuJ0LEwUuQIQYStwqnaFu0BorHiotI4YBj8AloYhfQLinn43yJYBQpCCk0l
+ViSRpe1mNlq0+4OSYSNUWonlwBHY2f8oIogl/PY7fAk1OZogPBcfhjwpm8W6WMEW
+oDKuzBHqSQRtlikNUv1n0qaq1BCa1B+WmiMTCb//wz8/KaKspTGTdmcHI6ltcCjN
+qqaK1xK/PdwA94Wk4mtjM/r7UhWJ71xUlahzh4O2XAmZ6c0NdRnz7DFnY0pMoswQ
+72TSY2h1rG3zy8KaMCN7XkWr+NpR4gtS3VZLzrGZwYPj1d47/xq3Msutkh0K/FY=
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId bbcf7cc184213166dab5be53a87014ddd348d8cc
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAACK2MhWzyrHNGQAAAAAAIjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NTAxNloXDTI5MTIxOTE4NTAxNlowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LZXlJZC1iYmNmN2NjMTg0MjEzMTY2ZGFiNWJlNTNhODcwMTRkZGQzNDhk
+OGNjMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqYj+z0XrPNb1HhOC
+y+B9ZAB2za2hWISp/blr3+kEHhKz0JwzkCzlDIQVhMVZ65fhrwFjZducrYvFNw3E
+KU3U6YAMtD8JAKDKa/dRumm7TOfrIKlh0l8M3B4avHnoLLBBTQBIUbpi/i/0okLk
+I8BOLqlgbSZPa00eMydmXZ9GtU/46Jkn+5Zjle7R3ADkB/uQe9lkguFaPZSjNuGU
+883gZ/NsZbWIOZLHEVdw5fKkHtNbXhbvqdaHqFpM6TfGL8rQlsfGZzDlgvKkiMPB
+Sngm5vLbOD/hOqNw3Z9fIXWsRXKr3btN99hXrxlZY8M2+O5Tgs5CnW/GJG1r59bX
+vsCeJQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUbYVn9tCsBhr6agO67Nxypojm524wHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA+sb4z
+xeIVab8B4ci/5drOLXDA6K1auBaI3YAvo73r0uelzDPoiZUpdojHNnRx3zGUJSJe
+RlDRCaxihqQm6oeNktukur9h60qdWlUTYvDb+pA0u3/tFstXnGhDwVYE+y2i2oeP
+WHOBxcYaJUi2s1TLXBTyv1rJ6CkOXpswcEok4fYtx6wtVuLg0z8HkE8PMd0B2vCf
+hUAQoAxnHRVzml7u7olhh1Qm8tKvvi3tetYypcobZ5IX0uliaCdIQP4ASLkIwIQs
+r4UqpWeZAEN5gtmMAgXGUIG1XL6ghXvSTIuoExQFz5sWBHbbZCIkJ3LwbGZPJl4R
+tFr5kp+dwQ2O65PJbP2g3JiYDB+bumRu1L68PKxUx8IQ5HpJx0YlON16w/GUYKhP
+YwdeAg7YHI6c+8cqb/onfPjuFPSRyd8Yj7gRMisI8vH3Xa4a1AnIiHukVnbY4xvF
+P9IjRvsSlgvaEfmproFZvt6j+4uNmX+FOxbP55VhGGncr9pmpJ3aQtsFa01P2ZWx
+PiOPbo+i39ctXYyC7HrSZrhpFGAxjxJoMX3sfJ7epa4ZuwaADU3mVTqMRr5ZLdOE
+qE+NKeVJZJyiRkn/YhfHOkA3jj3BXKCOEI+YDDnOdELhfwHAvmO35BC44h5LrBDH
+PiHCXSLqxm6D2Y62NzgQTKOxIuEdmuEDbUIofA==
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId c6cb2a4db7294be911724f5041310b4c42f89bb2
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAACjXQkLrGuYYKgAAAAAAKDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NTA1MFoXDTI5MTIxOTE4NTA1MFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LZXlJZC1jNmNiMmE0ZGI3Mjk0YmU5MTE3MjRmNTA0MTMxMGI0YzQyZjg5
+YmIyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwiFxJQVpxavnGbbl
+euUu+fJac+y9O8MLyMF7nv269wT56mYKPQqBgUkOHQxk90An/10iwcjVREzL9KVz
+rdcUhejhwiLiN2+gEu5ewPOoarF0N+vUH9Ng9tT30k2cZnu7XU2VINVp7h88Aisi
+ynZesnIxHzEcAys4y3MZ+ou15XI9WYIzOsQEMBllXr8mvihCzEpm9qhKLvI56sHy
+/OGCjLUFWgsLALBrypWUqeb0M01OvLpG9lsOhw54YbDJj37/Q95x1j6oIWtHH5qQ
+R140rt9BP+BhXzoyGvh2aOx1DfWIlAoIxTz2DJNpscva0veM4GnGYVk3dwcyLG3F
+50cZ2wIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUrSkbs/J/u7NGXsJTgGfPBvo6QsowHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCVY1T1
+epk13jcyTm19ZiKOpPFXTv0EBcWpMEVp7fmlX1apIMAvyuCG2EohDhIeOWOce+jU
+nHa/9KEWtaaL/vyZAXubk+gZXHdGjswVYJ7T8KCdqC0X/bKIzRf9HKsoX82PuO02
+iqPwNhlokiUIyLhPPGGoJmmagSqU2cr9AjdDJ7XGACztnTtWM0u/FkjEZm3V9Loh
+7PBc9tD2cr6cR2Jpt9lvAa3/20IVn/wCtQJvs+tqKrXPQlqgjGKatUIxdc7Z1/KM
+t5IhMzfuEkbuMUqPRx1OfuqgPR0BU35SOFpbH3LhOy452aq6a1ozEvtVnxK2N9d8
+aVsviaSq8UP4ByCNHfcLfAFalIeNAnC1vOPrP4zgNlduRkWwjaLc98xRkU7TDBcI
+gWroDbz9WpDWvpNml8xqqkbduqDq0bcsbkn1jMUvMn14Ab24I1zK39vF8IZOVxGV
+5P6XiYE2QXKgw5UbDd2nwIZpq97O/w9RFnwFGKPKjtTv7t75uztC6vGDvgh1W2gy
+O1+3nI3IRa8OZfvs+6tTNe9J/64ZcxbqXAFsMxyIYa0jBEChW5HPy6FDWkFDkG9u
+MLW09lyMQ479gxZxPYdHN35jpCpG5L8yuxPrBwI+0UdH/wclEh0zEUHI0sta0TP2
+ZXyCL8SHqDciNI1sL4Fm3QyckMoibrBban7/kw==
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId e82669cd9f2098270297499eaeb8dfa7e68b3422
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAC6UNJUmcnSwOgAAAAAALjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NTEyNVoXDTI5MTIxOTE4NTEyNVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LZXlJZC1lODI2NjljZDlmMjA5ODI3MDI5NzQ5OWVhZWI4ZGZhN2U2OGIz
+NDIyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzk3PQTkOgnVBS82y
+yAe5/yOf9OjlfW4MzIgoj/PkFbLxUoiI9GUj3/0wX1RxjzhR09KtYZSsGSxRaxik
+jIF8pJUONEnYufvwCQoydlT2xM7Y9jF6MXewS1NQC3/WEsD13KyLgFDtyLxXDfYe
+DnrhANU2w8+hodyqNWAKM+Wd5ukTDDVGhjeqoWQH1TLyjbRBm2RYSlHbggHNchYt
+MsrokaGmZxZeDwFSqNt3xcJ1KGOmkEG48pQppGS0cM+gMvN7HmSCPRuHg2GzoEyK
+Wx2V9aI5VVYsCgPZotixkQbZ4+GLRHI1utO65ODcY2il9wcwzKqD84DJqfc15zTa
+iEagqQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUkXNTgvEYTKm77o5gPiWn0tTKFTkwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA1a3sz
+nGK+aNH3ey+QDl+4x4+Ead4ocTYJG5PecvdeDIVp9CjfIbzvZ/Li7fEY8LQ1tUYH
++837rjVklXgyWRvblHqrXcNn2WCaOle2V4QEBXTlHucrJxESA37iFf59CNMl0HUJ
+ZV3vAuaz7r6JrDcSGrdx9uOtTsz1CuZJWe8aPNK1y7vo29nHUyhiUpmSEoyovsQF
+FtOEnubdZomJaBhX1gvScEFocAySFX4CEvGeV1uwYNWYm3aSENEqyIMVUNH7zb2s
+REDBDgXpwyEqQ9w6SVk9lAxnxVnql7nMzlD0pasNVRQLGf7CsvmixgqnS0UWSO+k
+cTafXUOvCVyOTOLRgNUreHNmEanj0NqDmvcKNcmeTHeQqpyzLS76HLbiWPI7PFB1
+/82ymDqN6/v024bJy3azN//tBU2ferpC80TW/2m5iaf/4L9D168E/1aUNAYm7KhE
+Tz429kzl229Wp4k70ODb01p0EXrSxo50ozGrDUo852lGdhdnQYcsrO63HMuhJGzh
+dRv/U8s+IW3gtzn2LNvzsMmJ8evSAkNRWLFA272jizxS8vwEfCC7frNbmcV9Qk9m
+XL9/EUr+ZgP/NnQvvXFE5w1j3ELG2yyQjZs1ushMnoWmhcvhmRfxY1pqBllor7VO
+e4PSRkyp2bYQgei1asEI6keMmecGpCEXH6i5aw==
+-----END CERTIFICATE-----
+
+
+WUS IFX KeyId e82669cd9f2098270297499eaeb8dfa7e68b3422 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAtC6GqZQir7T5QAAAAAC0DANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUyMjIwMzIyMFoXDTI1MDUyMjIwMzIyMFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1FODI2NjlDRDlGMjA5ODI3MDI5NzQ5OUVBRUI4REZBN0U2OEIz
+NDIyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA8NpXenoGEveQII1e
+PPAOBRw6RNi/iuLMJHJ5N16nXaB5igtyjgvIIf16MefzIHIioY1wGBTmP/TV0Bxk
+rRyiXvPtFtGy0M5+5N9chg3wLsO+vXAlbIlZn8ZId9vXTSzQ1O4suajI3ty5ZnMl
+ErkGLuvB7atb7VWE6P6xmHn4KA6thRsVugHsx/lJ3bGIuoC3rjNaXB5jzbIQxzI0
+smr4NuknLkJZmgL9rLHmW9VHDN5R9tqbCc/m52vr6fq4C5zqYK3W+yFoNy29l/Zo
+gXgWrsZYkI+NxYpv0/GVgPjHkm+2xJEGuG9i1AoSvK2r6G0bqY5pcXvKknPZqPGe
+W9mCVBLgCECiXGIEsbqdMlgtGNP5Zp3I56oEkn9q37WhiHDrywStP0Ya3PxPDUri
+lstpwXD1cKc6ZIee+LQ8KdDPptp+MgMeGSA5/XPDEf8dEFv4KPkeOcre8GzoZepG
+oNkTraH/+Fl0EQo8l2dVhLHRKs9E869X4apnG7NUnnO8lhXOGbg5OQYsv1lpgyry
+hiMnGY2qTkwOZVXljvmyDdlhkirx3j/iY0Xneg0/MtsidA2QvRtkXF+0WnQtL2UQ
+/dSc0DyknHNkZBn2nXW/gHfT2TkiYOTFEKpdmn4ct17UE4XHkIwt4vDsYa0JD/Ij
+k7m5PrVNTGF5R6iHN0afyQDeW28CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFBzzIQgmSDEE0GaT
+R9528N61+VuBMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAIP6J+/gWJqd2eoD8hvIgEEEqAT3iqrDkNR1iNeiOn1Fe
+F2hDwBeHvznEXpuMCvUTuW1p6QakRFeChJ0nBt/ZzIuOdOyUD1RaPjBM926tQCqK
+WP1MqSyjeuDUuowjPd6VHVeithfTQNfsFHpML8yXYlkG19z9R9nBDwzR13MIonyg
+V+bmweHeF6jobOzu6/PWEmmOxRr3TuruyNu27HkabUxco9k4OJU/gM/lhgsn4Xmh
+vxeGtes5kO3EusyGWzZXgTa4OKuZwtzp5BnIHtnRUEdFKjacX7L3A8t/5SeB95sO
+wuosr6PJYcvi7XQ7frKl31KrtliVBfi3W8YVqhlK35vhW7MUqetV+TIascKtXqUC
+7OwmuJeMPMCL1mh0PwjktuUD9KFTd0FZlZjzrdMu2YqcyT6lyAwgiIdtQvrmSp2t
+sRw3ezbVLLzMP8Og/oA6Eb81HQbSa/uXiIBup4KqhjvD4O4i5N50lghZtutGt8Aw
+NB/pX4ev7dS1aq6/VycvioLa48AITVA2I9vCkSYKPqvj1ILty2nw7WjEAmS/ZjEQ
+PZCBxfaLyBaGzXrUHT6EJo/JmVn2UtNmIWGzPGw9kbUHE18P8mciBIfQw+R5XfIx
+8alBctFRqsLIVzejWqVDOXWw8MyaZ/qWpOza6LsS+zXdMfUX7DPKDUS8Wb8lXg4=
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID 0FA7B495048126120E12731606776F3D68A037C0 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAArpb1T2VeRX6YgAAAAACujANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUwODE3NTc0N1oXDTI1MDUwODE3NTc0N1owQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtMEZBN0I0OTUwNDgxMjYxMjBFMTI3MzE2MDY3NzZGM0Q2OEEw
+MzdDMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL5Fcy+GUE2/zKVu
+UJvTmFVQtWkDU0RSf1yuSjE7BBmDcPndb8lsUiCSEy2B3KOmdvtIWhibhPgNQ/rS
+GYS3KiJcDn2v8xtuYrS9enVQI4V6kU7bOVym0QPo42wtFvJ/ibX2K1PpVcfrKlt0
+YFSHWfFXzg2hdK6HRY2yWY7ukodbVfSm3g6nepWdf8+y9TmeVpVjpBMg7CxzNN3h
+lHIwhL0ijVYwYt9ZxxrCwi9FanHA8IZs/AyLx8cbMSfvPyF1hlOT1lm+3sh78Ein
+qk8V9EKTP4zikOcScFkz7j9t1pu2ZdGPiB5yFtfynkw2mUH7zCaYxFWhnFamzBd5
+PRTBT0Xm1s1g8c1ggI0ZM03gf7HFCejejwnzo9gZVLnPjXO18ck3IlzZbIIALapv
+9qqL1RzcZDAF5n7oGRelzSTbrmzesAQAW8w5aMDYnuUV6D2IZn3Q13+LYXzphj0m
+YgpeDA1ytLIPu0ijJ5L+7yXCbVlVvFhbldP/zhcKQMedbByeM+Q/qYB0jDftmMNU
+D398lA7W9sVe22SOEdf/s4r+nOwEioHt00GwugYYVSoM67itEueH5Sa/Xyv8DHiS
+3NIPx9t61gf9J4oSm2aac2GOMHA80Mw/w5+q64fM4xHgx0T7yWsljkSFtXWemStK
+rgxxR08EbwOVj12Dncsg4Hb/UNrzAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRc9VK5mzqFzsaU
+GFxL5ha9/PHzbDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAGCuto3JHBivdf4V+E8zzBQY3w4Xn+nfg0Ddx2rL0oXr
+sAFOi0ZVqo/RVBpVwGcP3cCfYZzx5+AM9BTnkBjTAk+5qXAOIa3yhBfPvihwg/Pq
+N1PRdzKOrVe77ZJEVozR1vepPsNPj6eMcT0qrIBHzGx+QsAKVqFvTewnQRRHPWQe
+1SQJqrSn/e52qvo+JvJiH6C9lhlmNzz46nfErILVk/eBVv1o4wQlareKq2X5iQtT
+9UVn+6IHH1Hcw+v0GlJMDQ0nCzx3XqSs5g1+gjQZ/Be1y5oWMsSJb6Zy+DnsbVJL
+F/SFQCB2yJ7faTi+deD0lmJ8hxSUEuNeqiiBgoIBnjMdKjcCneh2k59hgMi7Xh2w
+DzdpNLGgq55ukHz9TdF5XoRsV2Ip0iFr52Shcv5GxVAeITOPgJBUJRd/GZ72kfa/
+v1sD/bpReKI6xbd83lHcpbjZnco0M/Kj0pm4ovYPrLEyxCPGxRVPFujt8MMnjJzM
+zlPX0o/kQpTok8seMpSwyPB8AxBKZAfkdGXcTIe8E7xQrt4jMyq6xz2DRSR71w6d
+5Sberk+FXBPx6rjSuH3wM5wzymmOUmEtyK0Jxr29zEGOmE1LuIgZLpY325g1I9eL
+ATtmS+7HxmfS9cNPVc4TXlXsld7juoEtnKAVcEuupv+jgW8CQXIvG+aFwgQCJWes
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID 14092B5F7814EC9B713E9A9B90A4C519DF08E688 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAr1AeAxXSEKo7QAAAAACvTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUwODE3NTc0OVoXDTI1MDUwODE3NTc0OVowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtMTQwOTJCNUY3ODE0RUM5QjcxM0U5QTlCOTBBNEM1MTlERjA4
+RTY4ODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANHBl3U7n/QOgtUp
+8h3gGndFtWj4qdHflE2Ki/3Ba6Zcd32Gah7WsIBTaFZP3Es6+43L1byfZlqr9cM5
+s5XtQnB3y4Z93SThfLWx1rsP0Dugx2zlFQbSHqIyVFRBRzh1w9JPxvd7GkyrU5V+
+jTZLEgKDF0q1Y5YWUufXXUJmlBMnYepSW1MHwl/udxeiqwqz5BazNGm2jXSG571b
+n6LQsoEqUn5PsXvoMOJAxzy/bx2iuETaeEhB/29Vr3BopUUz9yygisKThK+BoYJ7
+32YC/UXbyXHQa6pLxFzd3LaLLtxT6Ue53jkuoRcKpHYZX9gnFADcOlAezYyAjrIB
++pfau1GSwWTyG17yzmPVviXK1fCOJMt7a2777MB8D5KaEy0gXDLm3ivfugxy48Hq
+Bst0nXnyvfp1FPUnoeq0ZKUZmD4nYtUD+Lfj0W5fUIDaNi8DJdey9WW9ZU7x3PoD
+gaJhHEHr6YGf2pyORqX+bXmoBbzhbob3FwJUWqTGkapm3i8NxIl5DT43Fq6SS4vh
+5PWlxMxd5KZ0KZAdrO0VyjnXCNCTSagwXcKnJUIwUocmKbEFk/hiTlVatiHKceYX
+/W6N6x+Hu5CuQsQ5zotPHcOHaArDUAK1v2m44YAVmFNRC/Wngj+hsVhqZfXtQL05
+M2SVdKh03We9nDt6prD7KwWp+AODAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTzOi4oqf3rC0Bt
+5SbNyRI2I+NuizAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAJQtEx3AQiB4j27vJV+RNCv+JyrjzDUjAdfuj2BxTHpO
+Zw3HEnM9ggQd+6Lz7bVIlU3WCp20dSu1+jab+HAKaxLtrBXR34MzUbLS4G7TiZrA
+NywMJGlFOIFURA9CaJ7UKkh2SGNDbBW12kz7AL0oYmRUg66+X6tJgifUccArVDlq
+/4Q+cIMuZl4oDo3xMgboPVtNgiipce0pMc2gCSn3uTSE/qopZJMdtOJ5WnmcagEw
+mD97AlUdnDm2ddugh/96zEBsQ3ddghoEu+i/3T1jPiLthRy//sFvkskw70DCjKgD
+GZy0eesukatST1oGAks1jmIOrfcqjY6Z6mj9tHfptnHNQ15wTlisBF4JU12AmWuM
+k969I+fKCsaKuMuIqeiO9YqB3Ypz8ACXdd4zdSfVJlfAcnsGrlluGm4lygV8mIMg
+hrh6Vgfzr593ZTxoQK9HWjA3HgfpZAAqtF4qFIB6YwcnrrSXeePziMb140/xqKzw
+9KYV8ulQvKoBeSOZIPCtYJGY1oDVu9WgBYqoX5RLQsXJ1woTChk1JKbuUpiHvW8V
+Ue5dL8sTsPZRjsfUCY6s/BKrvT3O3X0IePluurA8K/Hdx/0qB/m/kpHIlXx3QgtQ
+MaKjiC69TluuDRuAhS+38BT7b/BEnrx38/j72FU3M4RsZE7CXkBzLRrIVDyIEK0f
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID 145126D0FDB53E99907D6FC6FF1B90455B9E324A 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAr66oaC08ToXuAAAAAACvjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUwODE3NTc1MFoXDTI1MDUwODE3NTc1MFowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtMTQ1MTI2RDBGREI1M0U5OTkwN0Q2RkM2RkYxQjkwNDU1QjlF
+MzI0QTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALJAT/ZEHuYKannM
+1/LyQBGkZe3kHATSTRHHPO0VW79v124JVSkBm4hZUv3QVlyvU4j4P+854S0E1X9f
+sgbIZQWAv9+u56o45cfngaEHmGl0LuJGT5n8aUSovz2kxbVeNnlUPRjZrMJHhCQZ
+PDiUDz/tgsKxYbTsO2gzYHNo3zsuojBfQzqE72qw1XSOTF+CvKBIf/UVVbK9Efbn
+TcyBtX3BI0F5XRmLchv9KvsubnqGiwtbaP+WQMAMvI8X4g2a7VkPIs/wPMTJflmP
+M7Ili5JO6Kkw8jd9qGOtaQAnKnoQvYssYBRMx+xNcE4l2mcgI0D4GNoQU/OnPNak
+6kJ+wLrIyU6dHxwb8Qxye0MmGsDqxwVLaxeQZXAB21vjwuTEbYCBomb35UoF7EQW
+P5xSEaUxZcnusip1GaK/7WbVvfOh4ZxZkuoI/mCRr6g3HSvJ9lvVISgkw3D+Si98
+GwB0JFlLALT3kcZWBcD9dCbaSnd2cKA34j+L6lp65u46gi+8EItSfm+l0DoHUF5U
+PrjDFUY0ncdsstJPDloIqEGm1FML2bYZ0AitFSMDD9GsqqTyQSg3nfOveLYTcOfF
+zJuNwY+ZBltBCzPIXYE+YlvtpqkYhaFitCg6DnS+WKVwImBnPheFMIa9vDpoEEjY
+CJVmtQ7o6uJ0ko6bBlJqblZ5pcPtAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSUYrU3dLWDHQj+
+MrCwnl3CqmMKZDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAGILAo4v5UT3ei02S2SUCmkDZgv12qFyZb9BTHIMi2GH
+fCkenZdJaQ1IFpp0w7uRU4FkRnZwco/v4zJ5moaGXbVlI0kVtectOfJE3RRmp0g2
+dZ8Dt0M5eKOJ0gWxN21PifUxovx3mGxn2gbs9xupSqPelBVHtPK9Ici9pR9A3jnK
+ZwVMeX2TtHAe+pkNRfXjCYl6ZE65vG7A3zo3kKG4Pod1H3CpT5Zt0on74VO+O4vP
+ASzwtkggebLntMCcBIAwz+4x+Qdhf69oyDhUJwdGOGP3HGLwOT134NXHc22gk2dH
+etkpKERJv5MZKaC6sOPX7ip+74dWxZqg/Q9UhsbPEkq5+4kIHntNy5lrO15m23py
+XA1xO/Og4CpC3W3wTpdRcztJkapvRMbqZp5vd1RtQJ1izGiZYRl2bmykwMq20XHM
+r5/G+1DoyJwy2agqZ4ixkrLygEHhzDpT8+QTUD11fc4RYRpcyyfcyKJ3fR+6uOvC
+LnQQiPauppA2VtJ45u9NZ4Rjl1aMOkUEDbAXbmRyEdP4Uc/iuh9x03zh5d+VBRgC
+Gr/kDf39tXt6Aj2rDZY5crSdnaXza36ieiczR7U13sERoO6yRzqK/SylavWvHG/7
+V0+f+Qdi6w0L7U/4B/XZY2RNg+XeJxNnjUOQG5RqxiQk26WyaovPngmMcDDA8HsB
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID 14B8E7137FA99526C4717DFA881B24936BBC6BD0
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAXSEhd0W1xnzywAAAAABdDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDkwNjE5MTQ0MVoXDTI5MTIzMTE5MTQ0MVowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtMTRCOEU3MTM3RkE5OTUyNkM0NzE3REZBODgxQjI0OTM2QkJD
+NkJEMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKjEDS+oev/GapP5
+pcLcKlgR+Hf/Y/WjvHAWCuOjGT7Cr7skHrvXVUi38XGaUMhh7Clf8uGtPYlGmQCX
+jeKXLADlRsQ0HX57b6AWAoxvIxG/fUUpSpLxJ3dtI725cxVC6eYlVXwvRdu/EchC
+JFPA96od6DKFde4XNBhPUTxW850apDcHybcB0KuHpCiIi+sstlALs5P6v5NK9HV5
+TmJBtlHUvJDDF+vQwybdc8BzsmKrCfsXtsazxj5Q4unM7NKnDdkYA4W6upfujj8F
+HYNTDltL0XW8WU2tmqI+kuS8Hm2UzMuI88voWSuI4bBrf9rveUFu8B2EQhz0yhCO
+9XGBxt8CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFOFNxPF1oRiA+127UTF4a1ODgcrzMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAMuZo
+6rnF8bFEP/pbqAFbmCaoRHWiUgHYb+mXuZxB+PMm+AmjGq2V4pgE/X+bnIa5ndCj
+lsXTH0EOiKRRaVgM2xgMjUXheIHVyk2CdwccXIUb4Ng4e6AkppUsfcm2rrbUXfyx
+1RCR47EtJLY3XWN/gMWha6j2N4nSPI3sFfxnxPcKMZn8+9U7S+ax+8FmXw6XT+L2
+aw2aSvGLAij13aX7QCN7fOotRQX4SLWpgeprJnV2712AXiPDUJsgL9xNnnNMa1Xc
+Hp7RJD73WRqOuw4DDaFa4ZLyyX5+hlp+kuK6Cxb8ps3YiqFzKfkB8ULhzuYg4b+m
+Kj7rZi+LDRrane4JzS+yLV+kFzC+wYLCk707aYhovMQ+ogZAKRq99UduKUi/8n2u
+KnsmJmWlndFkfP+Ai3qYpUP1kAwlJIkEknfVVAAUrDvo6HLeljzbobevIvCu+BBw
+E7UyCxL8V1aONlSgnUg0gZD/QvyrT8kkl6+t+ptCarzgyGSqjMwEAqeUzhMLZMSB
+HAqV5YsBM3ueyEbyg5O/NhL/8L/dl4lWG9CH3TeTGKKnw0YnHudsUMRC4ts3FnLW
+/XwwkiJ5Mka/1fZO0nV9QF41M0babwMXpq1M5Op9uNLfSvFb923eSPF2i0KgGZtX
+fC4Xhj/6n+8/oz2CFB0Jg30til36CeV6kicIw6o=
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID 14B8E7137FA99526C4717DFA881B24936BBC6BD0 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAApz5IEHR8QWoIQAAAAACnDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAzNVoXDTI1MDMyMTIwMzAzNVowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtMTRCOEU3MTM3RkE5OTUyNkM0NzE3REZBODgxQjI0OTM2QkJD
+NkJEMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL2xUBzPgEydjI9t
+87XlS/k3xunV9GHFfYpX6N02oIgWhvZYHUfiBd8eVNoT16tq1H3Hqqezvt2/GzD3
+kS5cRDOniififGx9sy9Q2wPOrj3BhIkBrkxQUKnPYdvt8kWZPpR3iU4iDCCZxb8F
+31XzszkA76ouGU8F0rmxB01SU6TMahbn/r6UnImVRPdnhwXdVaNPC6n4tpc1c31A
+5GJ3BegHghfXc3oDHbhmbqPxvnpK2VYisGLPlk/DCzy53hsSiJ2HksulP2xYd8PX
+tA+olRjASU/eW2PDXCcCf+Z67auw+YoRDbV6oMDja+OSozTIpEatcjLapUe6KlWo
+2/ZJwUtBIvAEQUw/cAGJajo7R2CIBOkoYvpGboW+TpWV7x89IIYgyvX5nMXRHOgd
+AHQcvZolAJyocKbE/6A3ZP7yoLyzDbw4tHj6chYjiIiffCK6/Jl0g86cMaelpXcW
+QpBzjqqfQvN2v09XQ6U7a6P/l7AUVof6Tq7+h6zo7FJ3wFOygcsJ7ARF9Foam1uU
+mEAcfQj8kCiDHapn58pWqIFcqaLRxHzO34Srfg7zM4vJgeg8YFVhkPtBgL69fCP+
+w/S+P4QjKxODMovSnoKZqp8NvQnJKPur5LI4vhTl2kKP2/D5/p+rSHvUEokrc1/J
+VH7XQRflZ/zBgB76qnUwvk4d1YHVAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRFtQb7666hM0Pn
+X7l9JJOclRoUnzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAAa90m2MMiV9eeRLj17+T5LJKhIXB8mt0Yq5fYzmF8o7
+7+OG8kEhCSyesRRMl6g+Gc7mVfV5PKohqAN1Cld5bQuErrnV58BxSqgjCy+l2OHi
+7h201PZ7moS4m+B/Y/9yBhgYzAcCGC/5eqrOJXEZfyom3LjRYuUsRVcRW+QK3YXN
+oFi+2hKG2xbsZh/WpzKu5Cowv+5LpM95asyiuWsf5iKQdwb89TntRTVo4+ud4k5L
+Fz1EaCsJAWI4PUrBADTAP22ya7kON6Uob6shzVl6DvDJcT35ymsyI0XJgvMEVJsc
+evDlTKkQcuNy0FaBGbKc5mxOYqfthgkw83S5+a3mdPVO0hHI/uvwp68H+5VSbDiQ
+FWaGpu+NKMukfs+es7vqClQ0Xsqc+t3IzUfkoQYoBEaMDeJ+fr8PSjKO6kKRcz0Z
+L6b/UBOkGYKVGCrIUUbokRkMjjit+FoxG+IMKQ7AUhG/eq4y+gwcLRUWqOT4H3Hb
+uP62i4UWzR5FdlvWKMTuBsuwd6rQLtds/mTOA00w5YwI2633gRYpUD5vhG6DAPM3
+MymbiACsFfU9m5hB2fjC/+F6iRmdNBUdwZCRsSZ2YDeMWPC9ufUlZrKDdbwKiEsc
+SK5+LStM84pyCvjoh7APDnggK8J5QJztxcvhj7a4x2+Bm2eIJP2fFfT2b2eYBLcA
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID 2CFCF43B16C8BFC78249CC971EE57324D639F079
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAUkdcMx5CRz9nQAAAAABSTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDYyMTIwMDQ0NFoXDTI5MTIzMTIwMDQ0NFowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtMkNGQ0Y0M0IxNkM4QkZDNzgyNDlDQzk3MUVFNTczMjRENjM5
+RjA3OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9B4PyruNjom2Cf
+sI/xotUPebWjg/bB9M8aCoJyvrmGNgRM7lxlM/xar3t4RlWLBuyDbCqJU/jCoWKI
+EgId2RefcPnIB3aGnYj78m76C+YZuMhs7DrELW6NXrVG0lnCSBf+56QDvy7RbikS
+vDCQBHZzaDyNzc53Th0YSLXq2xmoTqzzUeaHT30KAJBJr9wwKMe6yOcIZe+46U/g
+esMiooU9dip71v53COtW+H84y3a4CiQ4nByabFVJ/5FOFAyT8UMNtKPE5376XM/w
+hEL6wb0f0bMZnDZvGLhCcgMNOasXKfhgZOtK5gx4suVw8hB7FPvuVo+OwTFMbwzc
+I8PhZ70CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFHM1g7MX5m07zP4nhojjuwGbzgg7MB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAXdLs
+ZPtU348+oGNdMNvenKW4sQbc0QznFWXhCVRc7VdTsYficiEJHGm/1OZL4c5jevf5
+BBGKh9fNIyPCCTNoXC8bpumjd150IZsq2R1Zei17WFPD6O6fx0s1pWxNf3YEP296
+OUL+ILWO48USUmlNjmIIST2iG4gZj/Wet1DlMr0jWg82v69v0NDybJRjrvCMlSeL
+Ptf6v2BvnfAVDIy6MJOumKeQnpp7Y1Lg3wI5V5TKpaEdqT+ZZXOdxLkZz3bNJGAF
+cudI0AXvCme4fGDg607JBUdSTBC97M+aOLTwQKLvNViDORy+quEDHkrLqjf3GJv5
+sxIZ0Di5O69cY82Y2hIFuTdAVtkX4jl4jBgHUA5RRy3PD16rAXS8rGsRTpyd4n3o
+R5rdN1BLCPo3+SwOzswXeJ45Ge+J2EW91ZlbAzXwd9QYU4w2WPV9eIHEltFwAAx3
+PETPXb7T8I3QDKDAQp8bpm2Pz3QBhEFg5s+R109wmdrHWHlUichts953XJC/vhnv
+9ZKv+LocxkZhUFjEqU7S3xeCwls5V06ZpImQ+8DiLrk20+eJVpAja/jaCDrO7tj1
+XoB2EDM1LQrUVxNYhaqmzpcjk9CmxNvxji0vsmnW0b7nwbwkU63NiPHjBvBiVl8i
+w0r1b4ohn1A4Qv/L8o5DOb6Zz4O7GfmwWjWXvds=
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID 2CFCF43B16C8BFC78249CC971EE57324D639F079 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAApkPY/7dC5JzLwAAAAACmTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAzM1oXDTI1MDMyMTIwMzAzM1owQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtMkNGQ0Y0M0IxNkM4QkZDNzgyNDlDQzk3MUVFNTczMjRENjM5
+RjA3OTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMSL4UnRzbH4HRYe
+OkzX+rAHPH7pKGhe+q9G6Ny8s7AB8a5LwePIKTwDQa4sgxOGogjd8G15ZrmNdryL
+Kc3VTx2nl4unwmFavxhSbD/UkBZzsVqe2p5STUemvNVjONSPvk/jvthgVEESc21t
+7QXp+dAVkThwBiT8IVGG7r4+3uhWbm8qkmQx901zOFjL2eRehlhhuKbhrUnaI4Eb
+O3e300CqYzqygxWpTHYyLFsLWGZA4XrJKGFMnWPDCYVmuw6nAG2f/fkHCT55ilQl
+c4iHbRBJgG5PPBwju1wXNTcZZs1mcSVjOpvqhkcHI1lYsu+RqxSfa+0cro/j6v6R
+v1t9eAmqnzGOMIicpIrSl8DSt8RAi3E2rrWgfRl2BpMeMLs2BTkURZ87tKn0V2Xk
+1+y+dmt8uoWwpsAj4y4d6bKbyuBESm1aZIjVtYVF1FgSoQdkOyUQWZqmfOxrUmB4
+D/WHg2xwzZQiPeg6u5IlVNKPAwsRHcNlrRWVohI/MPA1dCHEWhSte4O1Ag2cQfQv
+KaQk4QYxncgfiICieHx/PeFpuTypcy7Tt53Z8E/6kKJj0mRNzh1s3US9eK4RMD6o
+7zAIAJwqVkE18SHADP/CkWqNomgb19HoDnGYeRzbx9wlZqf4bvtafqXcGlehay2W
+6wZx4yvk+ln+GhJuYfcxoZ+kca0PAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRj2JxPqFdccipe
+TGdWNO9f+7SNVjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBACunhdG2fbbCWuTVo4O1918azjF3Gt6ty47LXr3h7eHV
+0QKdYmTtMTs88fW80HVnjin41+CpQQg9HqPlB3KhUgkiY4emU4TMX+jkFHOpCaOY
+FgM9Tir33NDb9ytL9iIx/0ZEO43VQXKgiifeWoVUWxXdhcH9J4hlfatkHna+PzJx
+9hrn2Gtlyxu3i6sN4k1tKAadaCDXyypzyRLonxyP3SubM90N7ml7OE7YIzkW0Xiq
+93qylI+Q8N/Cw3oMACOapDK4OzPL8Yw7uOIRKioAAYUYJp81/w1Ct8L+IgeXHzrQ
+oJX9CkUcDteKEzJ2sjHXa11jldn+OtRpOF/98PbOtCbJgBqOLxsZebpiTYdP+f7M
+WQHTtLRSgoSrJgc1Up+0//BFkv9n6QNNAkOQVuhbn5+XEBmsamDJG8PyXVvESbXZ
++e5GGJvmCvb+QhtMCSRwwzuwogG4mq/RXHlUhZp3U0fghTKkPybbcyF91eZqf7BS
+1oixHSPpyKQcFjTlQGJEWKn7Jff1xqhj3F0OxjFcs1GoekwrlbhKQUnwekGY5BKw
+DYeMYKbdVw+iYddfbT1mPNDkRIHJUHXMs9/Sj64ZGIui1twFaobfjneciFOQ+v5u
+fNuIVdlM88VXH7vHOuiMm1kybhTJtQdMbp+JLUZ1m8GxMOYud4ep94poFHQHBmZC
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID 2D3CECFE6594829719D6556B600541E749FC635B
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAATqZKIykYjrfYQAAAAABOjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDUwNDE4MjQxNFoXDTI5MTIzMTE4MjQxNFowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtMkQzQ0VDRkU2NTk0ODI5NzE5RDY1NTZCNjAwNTQxRTc0OUZD
+NjM1QjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKvCNcpLvRxWrCAN
+7QfNWVpKBFz1gT2q2fkEb3LslIoYhdoy1dPMeouLPIizGOz4vJVrWaBe9CggWIZU
+GFdX6parAAvaISz6ACV4yec1Q47fD+Yd2L64qk9w4uNOUxMPkqIOHJHsLoUHrWqQ
+nO37bIIflZyx2WZEjyGRv78qOVC0qzB6eYaiBoG134pF8wKU+Kn5GYqFdglwJzdY
+VH8YEE37bUzaXZGml0dBUNgiqXlSxuetOLH2Nmh4a088hb7cg9hCe/Xm3GumTfXr
+vbmy6lCfunjCmhEmM6QhzqK8D4L8ALRw9h4iNmofYwfgse8l0Avv47gMc+1YRM6P
+HlRnLf0CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFGfGoAZCrzBdTlj8Q8Y4JK641+MOMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAayOg
+K+g7KH5WCH95jy4JOsJAgszhazEe6dZXfr9nR2A84neo04DtL4eXMAW632RnSHJ+
+PTJH4IeGdn+Jhg7RosOXTpsQRaNnfwK2XPpoxyVhK3nQONtZ4E0FXpQl5JIWEcys
+U7KY6h9PGYHcXVu4z5TUAiqY/gmKLPJisfOmuyDEuJCwn7457mTLjgb5SAoF3/sV
+AIyS8KOGnTyOdTD5/Y67dH5HPozlK/f7S2abOkmryQa6hiLBndsV/ZK6EXQ+LaxU
+7cpOFEN9X8pqdPnhNsXf7NkSZZ1YtuuQ4jGGop02dFTLO1e4+0ivnRS3JtDeEeiy
+W9x43+O0149fm7a9ZW3EEviJzKgUNoMQskvyhw0+5lICiR8vC0WFtpXxA6aKthPQ
+6fZ1snHmkU09YZEkns1gjXEAEJmjJ210BreHB2bkYmhkIzfe33DpQ9TKgg/0ZlBe
+wIei1sok/4KFdXwsH2lda+6rzKgtuv2UpjdOH6EWABzwffef/g1YjEXDzHknAgon
+5jQgdsH/99vme8XmjZPZ6+oGLS01SYNfvzNdi7HSoyE4tZb/0NsG/HCDeYJq+VyE
+sAvUuueHLDQ83nsG05DVLOpbBbY8+1fDHuHlw8J+PhBo5RfcbMD0r+PA5knU6+jF
+JXGra+74gdKIxQoNTmFsoqemZi9GIHfqYTzGeWI=
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID 30B86F094DA6ABD52371043F2BF7668C783F0E66
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAXU7IfkgoLDXWAAAAAABdTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDkwNjE5MTQ0MloXDTI5MTIzMTE5MTQ0MlowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtMzBCODZGMDk0REE2QUJENTIzNzEwNDNGMkJGNzY2OEM3ODNG
+MEU2NjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN3j+8qfmxVx+cmt
+6ZWaud58xyv/bq7ON4YfbJSkK2HR9M4PKbD2NahdSaPbOKPPRmwNLaiBMkfwASWS
+QDMwZUmFUcdb0p6avcCSAuAZgPAJoVJDndDmlwgXQosCAQPZbkQ5mfSBWmsqjWK+
+jvlJhWmZGSNtIrBX5x3Ujz3RQeG0HZY0OBiyqv/dGTRBChPbv6N9FcqlvYzzO21P
+NV+5onI7Mqb7T+mWTL9cEk7IUTUaQZAg1Isvh8IsBoJHI9PAS7THbT7ExgZWkttp
+OweovXW7yeGMjvSydrOzKlYUGz67pOiZfdbqCwzeYz/Ei8XhC1y0nXMNgNWZC1Rr
+ZpDySzECAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFDjreI1C0M76EO56Q4vhlJ9ZOW8PMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAL2tt
+wQhvfdBBF1RYuvJL355E1phegTMQZx6JNNhENFMpvtfGKxD3ejmmW07o2L+bubuS
+Una/VG5klD73/5XZz3IkNbQ7JS3vbFViCxy78KlKaMrZB2KddT/VkYX5SAckyfDK
+gWUOuLeDAD2GbsEPskcDW/crNJgcBVU0gGbRICnVISBUsrDG9wL5buR2kL46rF/g
+bBRpHzf3uALRa7go14u99jSK3ovMFaV4OM7CFADLBi0IOb6pctC6w7QfieF7zExy
+X9KjdEP//iOgoQPOXFb35NL1XxAkBqGJbQtCJWxfMp3FGUEBO0bZYW5l/Z2H4vcg
+Uhmos/EnSBWlWhOfEOvb1+PI6PWGEj/oww8DM+58QnZ/CR/l+bSMZSzn9RZSZBJD
+zR6alfiPzFNEE+B2b4TwHcrOFPa9ahHVvk9dsQysnvvLWyW+ArUkWYsiHD0LE5vz
+9vj2vtpu0viQuypi8JUYRjZWQjSaObbxXDYae1xW8jWcPg8zwnhG7NzjnzvQoMD2
+M9ZEIGlm8LyRYAxYlY8lHI9oakIeqUiDBLKEmUFqWsiigYNb/0Mmr2JiyHW83G16
+8JyqdPxYLvbhzoDUrpgNc2hthbnLf7eq7yOVTMWrAeNFHkU4L/UN/LniJMKSQFHs
+T8mqmXgZVRcDGw63hGH9xGcuHqtqX6Nr5gfx9Yg=
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID 30B86F094DA6ABD52371043F2BF7668C783F0E66 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAp2aPGNpl1vhqQAAAAACnTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAzNloXDTI1MDMyMTIwMzAzNlowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtMzBCODZGMDk0REE2QUJENTIzNzEwNDNGMkJGNzY2OEM3ODNG
+MEU2NjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKe88Ll3ryxfNyPU
+7YdSlYniLxcaYHiiMb3JUDsPW1W1durCXe7A7doV6QuDxYelSMU3BMYgNRjw5xpq
+aWhl2z4JS3TCsYuKz/l7Uts7SVwI3bKYD/Oy+qYbfnMFKtc7EIgpCISIAR//eCYJ
+g1D8V+IXkYrULcWkWtMC0ZQ31+/PVyf9njOMO7zj4+yPw2NHwqUoWqe1riKezMiI
+Jf0J2G3DfWvzb0XMGXeeQpfa2bN8ZpxF+W0GrecSa0Bh7fHCs6K1hBcIRqU+aifF
+axqcngvCI6t8l7x4GYH8cvOiGLSJ4ybWniPpB/+Cx/e690wKgrcwAPWcB0St09Oa
+yWxo7MoVtyFI0bYiOZqTrulf699Le3sxpmr0dLw0JBbWicq279luYUqoc8+E+llu
+a8Wc+wiYP3RU1UyTPFkb9yEyIzop7wKM2nN/zKIWFRQ8VBJvMmwwZUUaMLdhA9nf
+f3fdj++9mNj7rr6NCaxGmXiGBfKj6LM8aVO5vAUCn1eEwILK+JwoVjRGq96DQT23
+IAlLR/qjO5c2IFvjrllVsYAc4IrKc6PdPo9ISDr4zenJ+cFKRp3uLRbQGLw7c9XX
+35ONb3gop09HgeoTqm4aNe2BU4RbHnq8iGf6wGH7aKC0NkO1doQRVFslSpK6itRv
+rmrHCKqLYsApsopXaCiERW10yuN1AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBT+AjivtaIeFihw
++53bwRetmydBBzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAEXriEUJBuS8qZyO97h8NFdlrZORLztraA8uW4ybDSeY
+VdBp6aiZvVdSLekTITdvHXpNMoASgWEYpoaDvP7JOKFG7dSbn/A1YBKbmtm/D+2i
+tB0AKiDG4ppD5DZ/M4U4fGiv8lf6ayUrKuPbA2mzq0CPmKhRlbJ1RmeaCYV9Ct/2
+aI+kVlOxBAmj5cKLdCSsziAQJ/X5Xg6KSYpoBS6x0ig/D8ArdnPcw3cEcRbOtCmr
+HvRLdVlSiESaNa8x4yJocdN4tS5rFHW5FxsPJ4EOrhwkHRf4UdX8LKafgGaRUzr7
+wMLL3VQyBbTTTcmhyoo/+HDLOvYgPyhsEALRLYznIcyfCVbsmpS3q/Tc0uGxIwN6
+L4ljXWLrdSLOw01J5IRLH1fdFL3T4e8qDz+s7e7Osj7jHjqnpJbIagMzAVFbip9G
+FUvdfXJtRENqU0pT+1qbq3EZDb9dwA0cakvyetkkyH87ksXM+fK6DtAmDk6jEqgO
+z7Jlc1/bmnfr5RTMaSQlBTFEG+3if6eSRxbNbl+RPuSc9pojHLUhTlCGUlNbROZN
+nftLx0HgTAlHXggO4cV5CT2pAMdlS/zfZI8w4N3jurNCo4ah7qKNnfp1l7mMQkBd
+HmEFJPglVMhWKzPjekmNROXJ77dGq0HJ5w5h0Rd5ztv0++tDrWpWzB61bMxyD3yy
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID 31734D6F8AEA913A0A31180B785CC0630894CC7B
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAARJ5yKqbF5lP1wAAAAABEjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDMwMTE4MjU0MloXDTI5MTIzMTE4MjU0MlowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtMzE3MzRENkY4QUVBOTEzQTBBMzExODBCNzg1Q0MwNjMwODk0
+Q0M3QjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANuoFUYBb36jAGcb
+/Wp2ZVSwCoeTharV+Iuy+jUcj5gRBIa9lzN2aX8EPvPIUFIoBpxFUg/no5VlWQMP
+FXqOE/I79uVBuwaY1ClkJjlxRvuyxxw4UQHo8x/aQlqn00lmXos6e5TcL2qhOHze
+hrM5dVytht7URop4UPVj8VbNni2siecXqGYAfhFqppqZxJAFyIKLSBe0oSYjsJ3k
+pWCVXfHeJEbCxeD2We4X4n2ZKqk7yQ1+Ev+4dbKb9X88R2UCY34LdXxaBjZGfroi
+bECY40NhyLwvyosWWwtYv2j8toJ0xaKK7Z65ChCEH6EUZXtk3yCQ64Vjr42YUJpN
+ICNK6EMCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFPPyLlyai+3HDEGLEN1Gi8arzLHnMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAVyUS
+6LYV2e/N+0QIzW3qHGAgYQ0Sstz/9iSR63GFFc8e9WscN/2bm+cGsRcqlmlOlhHY
+k72CPXhtstCqHYKLCBdRTDZQLtjbHFPnmXSXhN/dy5fqQXZHzsr0H2Vn5GIpgVFd
+UO/LbLy2ompJ2iabNHM3NP4wfNV+6kX5XLA+7zbF49I/IUTb6Lk5/D4/Avn8Al/Y
+m9sfPh/qmrMic8QPPQpdruUAfRg1VRyCZKysfJGKoNj42cYH26uTZmUisELFMA4K
+XZIrBH1dab2KNliAkCESSrDDkn7eJ9uzjMLUr8wnNH8zD2I9hkrGVf7xo1/UDEyK
+krM1PWO4BBgTgyLE3mSSon0xXY3JPEl/eLQ9Xm66UQb9SFmwwsn4SW3e//NV8Wpl
+5Jn3mQYgy8RmBdI/xKhs2QpNvsRsE7WCNtA/jf8wY94DWgXY37CkY5K7kOPttLW4
+CPZ5AfnASqE0eql9d8fLCQyXK+l+1qzvB3PTIHXYxqVSXANcCyfWdJlESayGMZv4
+H0r7lDwAv2yjBYAy2xwWJwtgHWu15q23bZ855upHpzdkvUSm5Q/Pg+QWUFlpQJgV
+uBs9FMAOOYmDWWGXheH3EH7iC6KXGDCwxvLWVUEaF9GJKWdzDETwp1bs9dFAeZGb
+smeZ2ByZv2GA4DqqBSSyj6uIEDODqzXcE0amFLk=
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID 31734D6F8AEA913A0A31180B785CC0630894CC7B 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAp5dvaxa1oYgYQAAAAACnjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAzN1oXDTI1MDMyMTIwMzAzN1owQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtMzE3MzRENkY4QUVBOTEzQTBBMzExODBCNzg1Q0MwNjMwODk0
+Q0M3QjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJ9+ci5WhVpgl9hZ
+bpe0JLnr60rZJnmoceG/8X1Xdjf5dJ17ih2QB8QizsHF58+PY0bntHGDWj5OcnFO
+1ZFLAJmS89ylt2/8YxQHXFtaK4EIYhGBAXKhxtNSILYJdxtamXX4ErQiX1wiVY0v
+DqeEDn7DW7lGoqQjG+K0LSRWyfLe6PeLdaZUbSmf9/TwEfcc9mO09KiaQHUBx6jh
+fMgFgVoy0LmN67LDXHdoDGVdLoA6zgxf2nkPV20OiimKcgGzDmewja9UdzwM3yIa
+JyjJi1tUrYNCLoMSiJ8D9hYD1yW9Us3WHQTuyeTYBx6W9iidtcYkw7j4HmGT8ih2
+copIYntIIwHFMoH9M+K90At6HIekHsNy56hmJevpmFiRmPcJTb0bpjIXAB4+F/Ay
+TzQtmCSTdVByI+u3JI65cKfEWYKUNSlNBF0xiRTUngFzXZD9CsaCoUsOkwLPHn/1
+KTSFMoHq1+kafEzz6mS+TQBo8GGt3J3ulgURH+z3TXla7hNOelBU0cTqFrmxyTmh
+RYoVqo5msDJbSq8t4hI26jluuHNr+3OLEYeVcXvpXe+Yq4lu8Shp8j8DBIqrBtDu
+bB1i/02mQUpwK8YvFybBy1wndlcnusaOpm/TeYOYFAivrJBsJwYhfthFuo2yOPW2
+iE8hp+fLOX2yarDQykGljrRSuoBbAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTQnL6JQJFsuLOS
+U4tQuF79MeVf3TAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAINak/tA3idy4lNGvWyf5R7loOtiGtHPn4lj6+pY75PS
+oZEZEuQbqLaJeEUzcdteWFrCOdW4umhrEokX0WWh0VYMsE1OD1tfF9ec9nHgfOYs
+th8Mxhs1OgNKlxhfAkJtI3lIYrGuTyJJw/ffbiq1UWjNDzWm/X6SdAUB4N0WTOpT
+2cn0Xy2lhcJIiZrSmOJd2cloC0eGRqcmVXJOVW4yTN+Wj7GWkn5O2uS0s070dTUC
+3/h3AN0Jyc3jQLGmaO17Cv8XAaE5yEqMqzqqvQCcAlR8+68rl2IfzKG0wM42R4QL
+Y1D0pqWRRtZW8L1dXJ8HQ96jnMGDC+P1za+5AWgtdIDxPigM5BxRkZsblMCNKn8e
+G7u3i8ANEgb9nRceg1KJ9sHO5OZiw8I8F7fKufh/DMxbbdai0WS+Z1rAfgtcGc0d
+bJVvrfL9UGwKS2WN81Ui2A905wPipCM/O9icbKus41tqTvzbsHzCmIF1SqxHDUAB
+fVkzMN3PxKuWqFvSi9Gz3k3IOqwS8n3FHDFkZjBX0Y/6QfIizo4tFJCuPDDTgjQb
+bGQrJ48XXeI+64VMtyKlrQIGjsj1ywL1HpiNNIzzlboSIfhZYEwsIcWkErCXfJ7l
+f8LlDC5RNQFNVWnwxYJq3N3b26frEL6Bze+P/1Qem3ZXGxhc87HQyXGSBu2javux
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID 4994C129F1A548D488586F22A2DF8603739B3BD3 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAryICO5kiwyrKgAAAAACvDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUwODE3NTc0OFoXDTI1MDUwODE3NTc0OFowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtNDk5NEMxMjlGMUE1NDhENDg4NTg2RjIyQTJERjg2MDM3MzlC
+M0JEMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANvQrN1BMJUqxO+N
+oW5218T2QCDY4MKoz/68sR0SjHOpO9XyjHFcdCYr5xTwN75ulsAyS8PRGxlZy3bV
+IzDCQuwQHpY6Oqkh8zNhX4noOq/5RUJbcOqT7qAKjA2FA3PN8g2JUHKqDORAebg8
+xUCFKE3jIqic9Bq0po/OXy/nu/10WUWMy57OYroAupFrGcattDf2nOcHk5AZyVy2
+ms/s8ymm3bIVGGYh2y/gjU3w7vNH6hpiIAbtqr4WqHM2M4q6lE7k4irG5SXhqdPa
+0zq32oaL7GuK0q8GKpRbCMag9xTMlKS4O3T7hTncT8hwzq+lnJWvBdFs4uxhg+tb
+2sxFlHozfAYm572ILCEdhHBkbLUr1V7O0vbckagwrOyk7O506iflgiqLolMo+xwH
+Zw0/kOGTaWh73sFATJ9hseRAx4fLh43rFghzXx0LZlNz3wH4y1N8/yH+PDWAj8nJ
+sdXEM1xCqOuTo0/uLwpy27y7qxSqDil301AOmxZw/hQXXh+uFtBjzf54V5oj9TM7
+X+QO48Zv9LuNhLtMpzTofIYWGgaf4jB33U/P/9yTWguz3x6xqhguI7Px0iUFzBk6
+T5n85H2FSKAcwNHGptjnQsYVz039eRphiStrG2vhbTRA2YVl4O6XS1j0qcpVydqq
+lGBUphk7gzdpni/fngsbZfJIPuW7AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSoWVle1ESHqqbU
+zUHty1eHH8u/9DAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAAsc4/+mWpQfa5mbrRkAoXr23+Vm1uPl1ewboZBrc8Gw
+xgn26cPn/mWf2Tk9RsIgkl6yccJYr7Z0rv586ocspTaBJCnA5V4+/Pn7qrAM+0Ay
+8ttiIRe4R4Nug7aCPSbWKb707Y9Pz2Bg0BtVVDd8yTXoD1uyxg72FDStrdYqQy+t
+wm0oM7ylWwGbWShTOvXBlKarBst5vMvkC/ZyF3AzXRQeUJb68i4GoUbdGJ6kh+gY
+3WzZpJ4NommiIo7hZNl9ar4vs1YUkJAENXTV7kzmOBOA6T8+bburhVyRY7wVCvFP
+VUnbpieHPRbC+HuCAERE1RnfTW7IfTrTb7cP0T6O5u1bceFh++Z3SiPFx4bTUKZN
+LhhPNBI5TWtVFLa/ly+zjJk4smUBiObGGdAz2NSy/yY97GL0DG6wxJATvuGBWYE1
+josjyk/wR9YxaMTp9CPQW5RsGxUNIQTscJAVoSOSRVGy+Qwrmk9eQcSltxeC+MO1
+N491MxWbBIz//ON7AYnVSbdPXLmo1zcGArpzLPaU6auLqlFhezTx6t9TnMcsrZOb
+PepQN25NkGb3CrwQwfl89ViTSsHZncbX9MkKL/ygqnwGOvh5Aq5kLoRixBCIFUfc
+G3kMr00NRG28VuKiJXpmIhY9JZ9jIJD/xtiDT0224vsIcKJ21AEV2UYhuyixxyuZ
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID 51C73CBCDFC990AA677417CD5F78BA37D4A8D731
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAATuLBKPhDK7HGAAAAAABOzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDUwNDE4MjQxNVoXDTI5MTIzMTE4MjQxNVowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtNTFDNzNDQkNERkM5OTBBQTY3NzQxN0NENUY3OEJBMzdENEE4
+RDczMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOJI/+y7zIr31w+v
+hzVZQawZpORTC9FFqYlYq6c4ek/lbbfRSQVp45KEUmi8i2ucbTYT3XdC81CkwHHP
+ocLJN8MQuSmZDg+Ux7aeCZTjz9SQutubiPgKr2By41689nmJB/QDrA1H6u6zB8Ys
+4dwnk9l5+A/qxAiEb5efyS03eZRNgSNe8TPvg52r0fcRtqN9uXCM3C/t/UpB+/AB
+of1/rkYuBbLMyIG5KrhbCUqkedpMcCCsqKooCKu54vVzLGbeB5CTJVX5VTPh+/kj
+suSfKOr6U5BTKf763SOTbMeCI7alSpTI6kIHXE7FLfRaVMURhOQwKozDqlYm9JDT
+KYJnfnECAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFMHAGxhr4FHQA1h8OdWtXBpY35qlMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAa7zi
+aaPaCl27GlVoC0yehSOhHft7cQVBi7PSSa84t+bXYLVeU7gG/v8dGzzRqRA+h+MR
++UebElTQTb3/EMXtjkSs+5UNl7dlyfgLL8+YGEd49pjP15UUbRYL/Z++Gw9J4vzm
+cEGfvi7etZP5amKdA30qCY8KJ5vX8s1I+rLhu8B985nBVdAKgkxoB0ElXl2CGFkA
+t8VqQrFhB7eC45siDwjGJtX0lKE0bFBkcVQx63niIlTbNePgWvA7i8L+3Ws5eh3L
+y4lkq89w0yVerrXZ6/q3LIigT4jvwYaHElZjh94Lg5GzAKhKNzE4FOPKzS69Rtlz
+4AXuoDvyvN0dZJxPXYfTcMDLRdsAwMcOAxQSl5aAovBEQYJPiCBkgLwF2Ln+ZlKz
+4HQ4MMTXVPlumciZnNnMiMs8RTjSjvzB6x1rR/S1HCpSrDZf+0AkOkVggbNDW80L
+VpgaaR1FjzRCZA4BafNp8tmydvWcC75hfUbZENs0k021nR5BtgZ8etuuqY83NMrb
+rmsdjcWbU7ybo4k8aG/HEnHpyZY/ylgQNVOZH69Ti/t66hhX2SyDagRoW792wQGD
+hWrpjQAwN0wc/6BUsFGBeJZrGy+nM22/MEfOWTVqsqQDdJ4+irkS7Zrgl7MUszba
+KUrXXFzZo9wzHK+yMaAO1u+bIYMdl/IYe/yAmo4=
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID 51C73CBCDFC990AA677417CD5F78BA37D4A8D731 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAdYFqCkLiWszXQAAAAAB1jANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDEzMDE5MDkyN1oXDTI1MDEzMDE5MDkyN1owQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtNTFDNzNDQkNERkM5OTBBQTY3NzQxN0NENUY3OEJBMzdENEE4
+RDczMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJ99YIL31Lc9qe2x
+OMzToofqHMQSq5lHD/LpyOwJ7IhUsBCB6l8XxWsYCDCvXNRCjbVvH6eUEwAxpvZe
+xSQKvE4OG/c5BuAbN5E2Il5r6Caro3bW6ljSVfq2yGmtBvuIOTKbh7hLZGGPmuqR
+ggnfcBA/EB+1XMd1v5jz2QlY+cv33X7lrWhpCRWaDLEWSl2FEN43XQuKxDj5u/Xu
++1WbsHKwxXjc18nuUaCdB1pXdcJ4QjDIkJKF9Mo0GZf8KxSRrEJJeymQpjQUZ6VP
+IbRjKfwKbKz0SOs/yA8Yoy24cVGKU8bsw6mDB8A0wkXQ2UdOcGXjDDhibfmbQcVR
+zWu0fP2pZjeX/1NILBafRS6VqB33pJIkgZ2LfSbtwl6nFUgLPgoRXA1znmKBJyzu
+XS6CUck72BDOqeJ0LW35oU8XBQPnhu3WeoRPwS6YZpzOXSb6hateu98hYbIsF0H5
+7rZWk7Tu7EP72fZnNHqjvFoxh+hJq3Is3wpXj8ENaOZebE606qA1uTNbqy+ufeYx
+GHUX2yoBMdh+yodZ42tIRMxfZpaeLuL8i5MDlG+i+tTZFB4XdfDZMp+H64WoFI6H
+hHvSc0n89wYUK9SUJyhWbKdGXWEFlenHCvp9zsXBLWAPN/8LLZNqOPZCo3suhK/h
+lXFMjsLu76CKzRu4f6Jc+IBBbGxhAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRi4ilYb6cWyhCL
+t6i99BVTf0kG5jAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBADBUegG+FDKCMcv9ZOHV+lXOGY4Hi+Go+Xb/3RinYNLi
+BNiOMw+RDyTRpbxahzK6/GHxYGp9XiJ44Aw4m27ikLxZk1ioCMcPpfclw6EeUya6
+WY1dqSPUkrQVGLHOPk0mEirvyNHKs9LpC/I2KBVTMsT6j/5+GVhEJdHnOS5r508p
+0dT8M4LJfINSVwmYT8L5FsNeVGQL1ZQ5z0gSjY8nnVFgI9ueT4DKPbtVGrDNQr0S
+XqDGWZr/hJaYsxiOvDKIGYnuyHq1JOYYhwmElDXoo5eZWBeNEmJPBZZTU/cTA3cf
+pupXZ2rT+5tSAtDleNi1J7emtghmVHFCAt5Y094JSLvsk8rzVQr6tJIWHDhyIOFM
+Iy/WACeJD+LtUPyWAxNYRRZ7kcYAkTYc7BNDJ4yTdgxi7YKzMzqOXnbhohCkUriG
+FIrwmT69KzUrawrkxyIApZYyvjjoOuFIGi3JaLzxvgYvljiqLwpml/qneKaFZACs
+lJib4shszSJmPVdbfefzi0oqWdRghICwF5/Q9xD6+RLywckuC8aJaUHRkgDs2Fjp
+Aw8SBEVZu2bUvd+KsJElCAXD+CBbfyilZm96POEdiDVRb15mae5+/62MI8wiRHKC
+2hafMNmuNSxJEmg0bdWtdLv7JHY7FXp6mrQnRJVPDMZzddPgtEjVQduKQcbLDmah
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID 5E73C89AA3E902B272B9F0741F7D8730E3EC724A
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAHGDr4uci09rcwAAAAAAcTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MTIxMDIyMTg0NloXDTI5MTIzMTIyMTg0NlowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtNUU3M0M4OUFBM0U5MDJCMjcyQjlGMDc0MUY3RDg3MzBFM0VD
+NzI0QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL8ULdiyxMhW9Pcy
+4pWXVg03nuKvx+RfAxjDp2ERoOB/SPy/6NeE2NlRImZ19wUc/kRh9XW2v905hxPr
+7s9hW3xffDPEHRKy2VAzSc4G7cWYOnFucGIwk3Dd4u5ALVQskNOuxQdj2u2DXMp7
+8H+rQZHaIFsSXOJIVrnYD48RmGU/tMBnC+RxNrhCz6cPUmhlaLraGmScZUxgbaU+
+7TXSPvxWi8UqdY293mNKeUgbvzcYY8KWGh5CUEFZE864nZkh4mOajERRcBk7pd2T
+4RewYO/EyEpiHx4Zwuce/ezgc26OzWmPzf0fQLVGXFtD71QcolF5LHZvPHus0QCw
+8vrkv7cCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFIP1IURw1OVv3HzPKlbaiNTdx/DKMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAMqMo
++Fm303nvVKgnW81BKc8OlO6GsF8jAMbmvHSjF3/pSDSUYajIbB/+TDoMWcuA8IHr
+pdPsMNvfvkyi5bV7V+eaYJxouF8AlXPmOj/Gh/O04FwjJPkUvO/4Z3QBa0QdIKqk
+s1U7wyrauBwQE17PFB46/IaC9pXken7e62UTFgyddZWWAn54s/dTVVXoUwHg0RSN
+dGBe9IobOPSBPORD0UjMgae+jVjQZVnak+vtmR7zsQV6EBbg9NRe18bfxwJwg8W9
+3HHtlNaoSP8Qp0ByEj0HCud79Z/mK6gEHelGF9VY5dE/QBPfssyFfKkn3P9ZsVIA
+zBNJW7mCtsp/FjMWLKxOtbqZXuU4rbPUkTdXtrWLNbHo8NZvzU3cheGuIjSF1Xll
+SDBWREUMphQo0WH9t6nI+E4eHp306ZB5qLm7Mqg7sgZeGjc+FluXCkhr8N+Rpxcq
+eu9/eKbNJxpFfr3Woq/t/9IKdCOi1APKA8EGFcsZwJ2FvjR2f8qP16ZxoL7hTz16
++RtmnUM7K6ybKjnDAEVDUcW2vFaXB0Si097ypMmSZDBshM4AKNHfoHcaJevQN/WD
+UNnIEvrTeAtFwB8aH6XA98fBVsbT9JpaQ5xlit+zfv9aMYLxmBQYBHSgf52TSkpA
+aFDrVsQAMEkfn5s8m+qK92A+PIs3xl7WwxXiyuM=
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID 5E73C89AA3E902B272B9F0741F7D8730E3EC724A 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAApq/YfQw/yu/KwAAAAACmjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAzNFoXDTI1MDMyMTIwMzAzNFowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtNUU3M0M4OUFBM0U5MDJCMjcyQjlGMDc0MUY3RDg3MzBFM0VD
+NzI0QTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALaMT1pQzDdBrovA
+ETialTs337U/0iWLapHSILLgsxi5BV/lo05FIm1tJ8AgwxFU9xcBWimf9dJrYbhv
+RKgMzG0jPC6AiUlv/NCBz8em+OMbRhCc3g/r/whuFKI7IgHa2oGEoDDZvXQQvd4o
+xg3jmbpHKKseYOJB9P0uAgm3jgtGoRkOcuf1Mtj3DP1RaR9rnbeL0HdzpGbrQG5g
+CWehT9VGfD/m8C67iS6J3Kh3UOT9/PpRyOPUrcRW8djaUB2ENhOStNXPj8jEMvHa
+B7RwtCYyt7b4YGeWCDrYGTB26/OCFTOz8P+RJQNKjNUF66CB3/4quV7Bmw3fQTen
+J88OF7GifkGmaAbTiZFysen31OWOp4uRkWPY9mRASNpC0OPJ7rwbN7nNufndZ26r
+5w/ocjOx+KGoWUY2sUZsJezEo2jA/a4BFxoAtiOAL5r8tgyjOfhbyew0f9Cxjzwi
+9Xmxw1NdjrjBeRM/xoPjJZzQ3W9JJ8AsOE7tmaaPH2zvs0AM7PsOOMn7ElKsjfS3
+KzX2NdVtv4O7L6v8E3XX5u+/t1Ke04vgzhbNfWFqyvauQZsbetPataGt0KO3Gckq
+cEthTAHxtvWiX44ubYuAEdiGsTc1vdEB7ae8VsucjzH0GC/AG8OS7PrF0LSUymsz
+dl8ZgFD469QLfi/NVQxkCaxShBGzAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRy/fsN4QqWuuPh
+x1vT1K5t6IVy5jAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAAUceVLtzQiiXb/mPZ+tTlAHn4WUBqoMcE3tEUQCLURD
+2fGqKMvb/uBPI3NqCFYWdj9J5RDS6sU3ra6ZeEsc6WVzUQaQDa38pRyUgMTfEy6P
+HjAVVqlNf43sHjbDUEpjeorPmKFRAsNbyOjXIy4XBQB9YaZnJC9gnInq7Se2DwpK
+boRq+43M2EjLAhR46T5t4GYFwP1XE0wOnDYOKRmI8jDk1Tpd9AJeXxhW3R7wavZP
+KeuMjrPpkch/ultgm/NjYBSI5lPn0hT/+csqq7p5OhSVZ4zbxR4vzM3q44LnOOu+
+L+5zwKEPHpVNZhuc73wOA+dtANL1UtRTlxeQ4lYSbNUnbQXuh5wGaotn1RCaxZYV
+KP8wCt//McHgmwX2SIfFbhExCZAPv6cMRe3OSY8thcygEUMXt0iMVj4GNWaZp9/6
+xWPNhjc0fx7u9LHNqHbNdm6UX8VZs+S5PpmifeZd16u45xJQxresy7ksnzAVaG33
+3LPCgxeQAABadoJCTPZRAhn1Kr/+vABWSAjDeldbJt+n9SDBLXLHBobYDZp+JuU9
+fwVm3b6PreaVPMOe5Jeo1UNFonFjzB/zeJ7svJh/NuH8VdbHYMDfK/FlMVSL48+Y
+UFvE9fXg1G0AXLocsyEtJe13eMSavM590ZB+d84m8q22OIdEDxMjaqWnCUnCzJ+0
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID 6CA9DF62A1AAE23E0FEB7C3F5EB8E61ECAC17CB7
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAXOgvBwDha3DXQAAAAABczANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDkwNjE5MTQ0MVoXDTI5MTIzMTE5MTQ0MVowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtNkNBOURGNjJBMUFBRTIzRTBGRUI3QzNGNUVCOEU2MUVDQUMx
+N0NCNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK9+TRTHOLz8ng28
+fzN/jnv3/NOvIS/S1TyVWSPkEezK1NuDdVXaOeBYn264zM+sTtghdQpLtzvaoGaS
+uGanL09BrU3fY9hT/3ZLnCK+SIq3qAGSIxAFNfo6FEftS8Zsq/To3IqKIQtx81xe
+kXl7OQR2PZiIH7s7xTI4EUhb7qnmTSEPcQ91LsVLNA42ppGMgworaxShIf+Q2G6L
+N71+NRyAK0XhV+MoWe2/qxMnm7rpEZyrbQMdOGbHgTAYfwiJtBUPSAX3DVJb3dox
+dct/ZwurPJzg5jDwpnHEqQfPI3KcVvD1U/D3vmOXeysdFZSQdwY7iETCeOkiMcc2
+YkvdC8sCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFJefuh4GRwIf0jLJsPlRuEGGJyVaMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAi7e6
+mhSj8Ae51nxL01PTrhgdBdFN52WJJBxEVxFSOEDRIczFyNfKx/HTQ+JIVhboTTbP
+ZnOgHQ8NhCqDQTVqoi3wHMxOItVX+eC435RP/5WjuHoOe5bBqxEk1QjwKwCcysER
+0BcNL7wIzrAPL8O7XDNb+XBBUGlz4sinJ/rgfhi+gdM+9NzlaBjBb0ssPtyquOH2
+TvxUtIyHr/dAB9/wLgeQqme3k3yflR3445q9fPmcoNGftlhJxAIs34jUw7LZXY0w
+IBj7iuYR5iKVVEdD5+MiHlSETW0RhNG5wORy08OWjGT9R4sAXu0i+d2O+/I0Dg1w
+fvuN/7uZ9cHaOe4kbTxGKBinWQhElSVe8Bdx7TE+7fVE43e4IZsSTwsoL5LutBs2
+pvTamb3neOcSUGTy3133dRsfPWiHyUEpXfCgBa1CR88eNOHHD3RHmxjjvulgLyOf
+Y85oSnzv9kv3Pdke6uM7LUx5nzbgdlg+yNgFZeDcUKYA2XG82r9nmCLFyrqBEXXr
+7iPv/1/HewXjBrigqseIwXLgI97Bq62rh2jVExRvTFrrs/mJLsHuoR8qtdcR44al
+R0LeG376XZoZNNR5gWt/Wf9M+YOcr3gRc/GoHvylspY7XcLUGEYyodKOwarC48mB
+8UtPAu+cW9wBpCKFT05Cs8k5sQgX/gmjuJDL0no=
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID 6CA9DF62A1AAE23E0FEB7C3F5EB8E61ECAC17CB7 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAApupEa63+F3QdwAAAAACmzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAzNFoXDTI1MDMyMTIwMzAzNFowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtNkNBOURGNjJBMUFBRTIzRTBGRUI3QzNGNUVCOEU2MUVDQUMx
+N0NCNzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKumCfy+6JV64hqa
+lvSNaiXHzJVr6h6muk6ccs74N1FOTfWFWifWHIGznw/QfQrIPFWMDMz/LrjSjzr1
+jy3UHgcL90lkhqiax/j2QGpljfdPKXmhlvDW7B09mUtgbS5lm68uFENscmKKTDK5
+SO4slg5dTfM9ABpQ3OQKgeMCMezI2wknfZIyNn68IlcWqEWOAOLyrNusJgvI4PyS
+5xgYN5LdWtyVKuTzqu0HoLhsk+HcAvgggfbSshOScN519MpcyxTcxu4v6jlo5WQX
+UJkN+UIAF9cD/++zX34JPebnfDqFYhdxwPhJKicp2/MM2PIA8ErofV52cmKNIcK1
+FYT1KNf2bpz6zFZxCD55zURdE8knJp9H+YFaYfcyA09Tgrivt+Fk1hw+MmTVJaTb
+1Jdd1yMz/qfmZJUCrZqxTlzqW1gkXrNn0SMUiCSgzgUUW/JfmTmSAmK1RqH68Gfn
+xZGuAiGiOaJvW7/0AIdsbRvqq5K3SjhCeMQGK19b+UvbfqdfiL9hkL7bKeB8mdQh
+UQLdp3FnKU5ZU5P1u8b401ZplWKTHOWReyNHJQ2ofxuKw5MMB4KtyGpd9We3F1S5
+ZWGWDDNE4auNqtVFbqaOUkR500t4w04V5GECYs7KJQozJ02orbfRAc87Du0wF1yG
+TptrbJUBD9vHj+HZxy7qC3meAqAxAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQlZrOu9iP1cTJ3
+P21KlkN0/fM66DAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBABWbu6NPzrbRiMbdUWwSNNfbmMrr1iao0/NCRtkZOnU0
+xXVkE9G0yddPeumalVfo5Su/ZWXGHD6fiS8DvuV/y9K7VQsKe36Tvy/DS0b9w3uk
+oCkmGqt+0pbyeDNEilpiEradLtgrPmLNytGOpONVz8xsp5uKp4ve6fdYKXEvvBCS
+4OS/BI9+52sLu9b4qkL7f58e/p8vbR5W6ulbes04ej6bHyRk5dma4LbnZxlqjDyy
+hgpZnwOanqRyXYNq5dlyjPImg2+ZD0nU7VBCCj47WKRwXsYQBeMbPw92j+ZAqhRp
+q3BxRyDp4bLxACCnNSEtruOyotBi+8uDw2GVUGkTysXUgVTc8WCYxOzGLLsMNZtd
+xLyoyj5ydlAvTerDWpT+UfyeNSKyyYUTWvFVVWh1K1hLKVOZ/mZ/UR2jcyiQZq2v
+GgTfN2DtPBJiVrUZVpuUtdUWBwAaQtTyYA20VNJM6GCBT7Vpr2soLCrl0XkMBQfO
+esVIK/7YN2u5YsBin72l0SmLUkp3Bo1/EdXK/NZOomZOWXMYzOT5Wd0LVkZ02eM8
+dA9TXd28Hete5xVdX6ekYe4UX+BA41b+91eE+CEde/dO72UPesRLcyI3hiQsPVM7
+8Mgvpah62eZlOcOAeoaR1bf8XwOrK9RiqPcLnkovcC4E8oIhN+tlF2Vm08jRToS+
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID 8E1AD84693D5D89B1472CD8F999076EDC4115400 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAArs3JB+f385O/QAAAAACuzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUwODE3NTc0OFoXDTI1MDUwODE3NTc0OFowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtOEUxQUQ4NDY5M0Q1RDg5QjE0NzJDRDhGOTk5MDc2RURDNDEx
+NTQwMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAM8CdlT7mLDwK4lN
+8OOt1M0cxR3gnkce9jBBXWL+QEw+w7E7mZDkRhEk0QthiJIy8ze+wEGjosSdf1pN
+qiSMwNwvRgZgCRBUFkIEFNr0pUHFr/V4ka4bu/LCvmoqUumEVEA1XbiUIDFbonqe
+hB/gmUPWiXC/HTMxKjWm3B0CV+Csm+IJw+oPd3Q9iSjDYm3hX+tTd8b1Yz+iQ7Ht
+ZVuqcHEYb0FTGVa2JjnG1Ny7484cpvY7H8+xtxWNnGWxh4/6LNQYg/cx/qUgcnUC
+muVWFYugoTY9iNFJRTPs/epZEFbLG9kKQvZBtB6IWI5+F/aq95dZn/+usFeGiejQ
+yurCi4+JKB8Rh/7+wtlRJMVy4FfyiPDrNsNCloF3MAk7fdzcKe+b+QlbevB8CANF
+YyeBXHROpHFOpRsBlgczwtHetHra2IUzJ5zclV8eixU5zd1GeMbm4vG81XkF/4A3
+PuMMJ3Q9cYrobQ1lvFt48Lu73fcBeTWuB+kxk+WHGo1TN1h2y9ccEuQbkADDuOYs
+0Doma+ULvdg4ertOWQr9CYdJrWXwvbZ4ecYdcxr8P9BX+HUVfrLzrHJpIL1YNbJg
+PnIgObN+eFjs3EEoCTW5MsyJRoI2+QppdyF0OZYZrWInx8jAm313y2/MDLNco+ra
+wikdR/4wDf/M7Lr+dr4JxDCZaQ8XAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBT3yYAIuGDPjRwU
+efQ0Ree5j1DYVzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAH4UCHuiAp/aH4LRzWhgJ42sXnJyKKFhQScf8b33ft1u
+wD3EZooH1dZf4Ma38pDlHOEbO7wvgqVEfsMxuhFPoJsOPaVf/J8W1hggty3hKOH6
+6dP7+mhWbARItsVxzDYIIduh/X/r5aqn7ogtt6JEfJScWmgcDgT0qhQT6GrrRdCy
+Qiou9NGXQaSGGImbRxntgz+OTAbMaKydRZ9rM/d46Z32MpsITcO9GVBIdBe0uSYk
+TJZA1c5ZxMrzUNr7K1ckkwpFzgRPCm5+xVSrc1IbTbiks90lO+08JzWIcKd73jay
+mmrhB/kvyHggdLL6zIbGeU01DMOB3m5503zSGDhAW5MkRu8n9G1eyqKF0Gi4ejFE
+fyJBx1LvIO1e9iDO6owoz1kbLrxourh6iAyG9PZg7DDszzp0nkpPExMex2tr1GYa
+LLtSemTVwO+r+3lnn7bcxVsQ7OoTMTMKfa4wMvuCbo/HgGsF4enjP/ZjIakbxNiQ
+nIF45DoFCM5WGviaLHWWd6JnyCqnLEYpWoQfebFVv9jvnyYdGoImMj3HcOXPtVO+
+hHXSKuakXStr+h2OiTwiv5kl2wTKnf2bMEpho64XgpoF/ZzArdu5i56q7m1jhjVX
+Thm1jIF3rHT+ZSY2lJyVswHbkFy8BSZP2tZ2udqZ8iU9E6NybCpJnBxCUlKS5TCl
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID B99E979AAE48774EA2EFCA9BF9AD5B04040DC10A
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAARM+4rGnIRSuSQAAAAABEzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDMwMTE4MjU0M1oXDTI5MTIzMTE4MjU0M1owQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtQjk5RTk3OUFBRTQ4Nzc0RUEyRUZDQTlCRjlBRDVCMDQwNDBE
+QzEwQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALmRrYAPkSqDA4p4
+BxxS6+fZMajZEWVfp6TMM7MB56lXi1IG/Cm3pBllBooGCj3a9TZag0U7uF8la0/0
+fi6R5LbV86rJxMYQyQYITy/UBi1eJjL/fnvmjE2bnEYf85FLTpiKg3IkhhzbeYwN
+DMm8nLOfMSETcOLriu8akGxBvXmmlA27sLJEaMHMxnXi1kIb1v6V0IslOFg2lzkw
+k/wOfXcHw+WWd25P54dVBa8sJKE1rXOuYRgIedLzINAphrR+wRn6YaZlOjzT44Wi
+pk8Zbim2hp6RBM7o0BY7qcPGOUpd5trWSzieQSaFGaaDq+eyzm3g/My3EQJkoo8d
+3f1v3mECAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFLvuwPBpTv9hdJT4kth8iGphe3xbMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAekq+
+jA4CxpR+7Q4XRHElYgqA95rOdAWNLWcLzos6RKQGVTSGzc6KCF5dgDrV2J4H+onQ
+0dHdyUt3K/NwZ+XEK/wmJmtXOkurUGC3fmZrlqdA9QCD/X9pt1WjJkjQx4yuK2qg
+oXodgIlfc3x/tG++Uj5MVxtIUJXcsKrmXd8wm9x9423DBICuFmWCO+lbIL9/tm8K
+qzdS9krDswzJpKva4L4t1k+Uwgs5+uZFsuSdKl4/1yAjyz+YRrutmcmDoTSlaxMA
+yXlOJ7OCkjHwxQAxwk53BNaxoEc6ckThaM0OFkpE2kTL2dnIM8vZKRGpdLxNePqN
+/++HTeuELyZOPQXi7EoZBiqXIWtTf8RYKddNSu4Il1sKRvWpQZgHeqgLHzf8+Hs+
+zszFld1gSiMmAI2ZdcHbv3NCePhlhcNdqShooIEtVkYHq4wdwsHh7JZOuT8K7Xox
+EPt+PQKPlNCnBUkaqNuB6+1w8BWcps6L2CgWzA+HPgeMfFU7EBAXfsQoEhx+txRe
+GvwDN2UEzyo8qwEaxR5AS+NLr1HdXJ96cQBDSXwqmBdxFYmZRZqEr17kGBPlJCfa
+nvp5jSfJJTrKqCsdM35i229qtWynDoO3bxHLse3Fqkq4CqDwYuvXDwJ1UEQzXWcO
+1WNyFnY3s3KrTsu6abO3KGTCTbuxaFnk5nVTsXg=
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID B99E979AAE48774EA2EFCA9BF9AD5B04040DC10A 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAp9BoY1x36LqJQAAAAACnzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAzN1oXDTI1MDMyMTIwMzAzN1owQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtQjk5RTk3OUFBRTQ4Nzc0RUEyRUZDQTlCRjlBRDVCMDQwNDBE
+QzEwQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALREgOyXL8V6FFaz
+JsPeKX4s1pu26/6Zz6Luq+6HoxwEIU7thly9JD+eIma0gNylhihSaOOXtFWhWZus
+e/QDGK4kp+LoLWn01gZ00JmmIqaBLLh+Sd6DaRNYBqld2uJJ6PDwfKF6wlZsjQCi
+WXuqlpsLkfNGnxSEF5nrVBYXktIhdwnl0mUGuEPuO5xJiYh6bhhyTXT3Z6JSVh0w
+zgj09kOqLV6QeL7MG8kw09XaH52n/far9AxXU1+eO6UMMjgs8GdqmF7vCJjJOuwz
+3IDMcdcWRSXJ3duKZeosaPAixhynkXrUrl4I2JZ8tlrpADsYoQQQBvbjCIOnlhM0
++XxjrX04zBiooK5ESfdAaRNnMKanzhcWPN8ZMhL01GTTEr2fiPlbn1VnBBg5gA7E
+1vypu59yG9sMyDNx/M6tmVJmPJRpqu9q0QUNHdbfPKds5DKSEK3Rf+WvNh6SgdHS
+eX1cVsWeciFOperzJaG7HlPudNujMJMT4BOSQpAdHtyuve6VxDLcnSopzh+58doz
+iM10xtVLZJUVUbuleM/RhGBsbH0y8EtTYMgjJM4+/hPOvhN6hTBGgS2HrLIFFouK
+WfO8BOtQqohzwrtPCVSQH9ssPFHmR+QR/4+9yoeeMs+ucvryXZhpMBtjV74XhcAq
+KkMGY8EpJn2rJY5XWR353Rorrn8ZAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTGFZ0tNRDCx3Bj
+q5xIzufUMmtjIjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAFCMEtF4rCKXIDj/AlTqPU6Or5welcnWmUZrxyIL6qha
+BCcv/6JWY01bytpv8p+YeJ5YBKoFTpIKu2zwFwWMM8E71Gsik5gR+TMj3nNFvSfI
+wP+V6nNJVSlgkym8qgEYYWo74N56U2znwDcP/AJL9UP+fepYnTE6+rjSFw69uxJv
+MJBL5PTtIa+Ur7o0fQ2C6WgNVpHJ9dNmViHmnR6wlAZAYxqKGLvcSPN8DWnwOu17
+8Pk8Sv7bmztYfBpJ/RIlNayV97Yc936JSCVeg/EB/TKseo0K5xOJcYU5iRcQDDD2
+f82ajvEsRu4kze/M9tqehb/MuR/mLwpxun0xmfa1AYPL0W12KueTa+8DFjKqjpF1
+DWWN7Zoio2OpN5s+eRYBrs/530suZ5y+s8hw+MVBtQ70kjYmFzGkMVvEf2eH2Bym
+JkfY0WWqCQFQimGfIBhdQ8WGUvSYzi1k8ewJ5fOMgXlG5w/bGkVlzVLLeW9CCspS
+51zPUi8AjCyfqBVSNv8M7ThmEC/U+1yaNOPF8MPwPphEFW2QPmoFPiNnYlPUuWz2
+hGPCgKsrnMw04lH0C76+zQxjGLL1H0e8Fd/8B8idK3E9Wc/d6N4SYzG7nCxcCiGf
+656kVCqBwbwud3RClzofRX4DcUGuP1uIhFhmhTni6A/fKOLpsl2ZH3wU0d1ydkUu
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID BB9805E319A78DBAEFA888B45615957205179181
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAATx4ctNIlcHsCwAAAAABPDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDUwNDE4MjQxNVoXDTI5MTIzMTE4MjQxNVowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtQkI5ODA1RTMxOUE3OERCQUVGQTg4OEI0NTYxNTk1NzIwNTE3
+OTE4MTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN7fQDk7tGyYLhGy
+uKRYSGqvgkxPj2rzgiRiVPmMSUyQRsDN5nNwHH1fehzLDry89PMxadxmrnPSpiVz
+TS/ZMhPf1VFJDGj5brO4KCMRKHodOuOpsvq5WN9T/ZIgE/GGNMILceklT2NLAipF
+x0ec6K8bQXKXXnzg/lHThbk/Fh4YHzB7Q5d55jyrNymXoZfwoHtKccUyjTlzO+yM
+cgxh4SIVeyxaJfBBoWSLq4+prEt5VEqwFsUkqNUuSCStsFt5dXHBp6PkhaAyfhun
+sp16gqA0DmP/KbGkDK9OCYRXhFTKnb+H6MamkMvyZ8w8wIors9FOJrPIrCESfbM6
+MuI58UECAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFNizVAtEA07OUyNH6CJNjmaEBh8FMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAaovt
+4YFOtawegJwTx5IfVL03HX38XT/lcK0NaeYM7djF0tiJD/qwObJ7vyqru0MGVOcE
+Oo3XJzDzWCFXUDnnaGbR1lIFbAPsz5rzRnl+yjcRRrSfBm1GHqKaNyluJ5l3WArr
+hm6sB2TsK7o1YCydzwQzBgvtAq7azuObto+IVm+x5599G+kOkgA+e/ydA+cgPxkB
+9JNvKeZ+I0qmNAKSoAD9s9NFsRojYTLIA64yyXlxg5z/Y1GeDznuBoo+vouwSSER
+Ezq4dm9hgwhvcxUfZMkVeo7btUxt0BgBVwLsf0KG/cjjma0Low7Qkr2spYRybngM
+vIaaUP9SDW0x8jwQ8nGqXBB9G/PRqGOeXf7OYwSn+JpZ0bcqpbVJid4SXdUrtumL
+e/Kn9DzYJdXCdyZXIRYwbV1jVCbjwzVHy7DgU3OuXpiBknijvZ9pbodJ3fN4P+j2
+J7GlneTu0Qv0o9tk7NXT3SbRRyUmcBEDwXkKDC1o1Zxx5n5u7X9is+SkYo8eIAaY
+jeljbF9cteUqApcLtpwVCSROJ4NGznVWGm/I3kdAqzBPFmNJL0u0eS/MGDtIkdi6
+XB+gDFkdhXxDFqm0SNWOq3jFwIZLQz0S50A3MOrXaHJLBRqgTniUaIw1vAp2WFdz
++Xxs8lNDXZBrxjHmz4JDjduCjgy/N4CeEQ6shsE=
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID BF9C5C6FBF80CDCE74ABCD0E0E6004EA022A6606 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAr/a6VHqNOV5jgAAAAACvzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUwODE3NTc1MVoXDTI1MDUwODE3NTc1MVowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtQkY5QzVDNkZCRjgwQ0RDRTc0QUJDRDBFMEU2MDA0RUEwMjJB
+NjYwNjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALgu0WW1agwLU8B0
+uHKEogOygUwUwpczncbov09Lf6x9CW4iYVZOkwN77b6LkpFq7nfPIV2d+BtyybDq
+zMZkIwc6sIziEQ62M7RLkd5z9hu8ZiA9aUQEAWBZsCEE+kmh+gR8PhumXSyfbL9W
+9URV1jzKer9yMHM7ivZhBBj/7TgoZ3oUc2XwJJEcT1LqmMjDjnZnAsx9bZnMfBky
+549cavYtbVUWcNbTHrmvCgdzGxYQeS+IDGSJNLZ6ZqO3Ywn09LkZxxMeJoeciHTQ
+xWnz1hQJdQCC/fvfZ0cUShy+M2Fwj3AsRNNHYIPel064m8h4C4MgwWLKY0coIPNb
+7JP9XiLcAD+fqoT5570ggmdFxe32RtgJGvJT5JNkWnkiZPhulcmRoFJZmT5ED3Gf
+vfTmIuarN6OssDxA63ywjTauksa2kpRB+YhoEcgwfbLSnrO7V3SPUd/GFXdM7m5K
+YLFbEBsp75EvTd2FJXF7xFhQCAHAn4OaRBHC1ti3rDo7ZSdwaigBSojk/bSA1tMb
+JOWk402nSJxy8gcaYr1jJo3ME6fTZQdgRBAUokuetxdbGF+/8apWa7Rt8qDzmV53
+Ip3gunevchVcjHm7e7WKpH0PykIE7y/UIygx47Npx9qMTuJ5jNad3Ap03EpMSeW7
+QkXRDW2Q8Gup+KNjNT2QJqtO/s5BAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQOaHsFUbopknMf
+10sDsavKgB6fNTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAGJblZdCuzlk/HoV8CZZYhfAwaokDL6Omks7L6jcwBIe
+V0nT/EfhwVHxURqDylt9WQjPeqeg43+Drcfggnj2A8QlSYUU1Jj88sQId5k8CkZV
+8QPM7FuvEbwgGsUfyTSj37IbEYDYM4stYjvcFAmGzi7JJtxlqx0srVZksg4CEAPl
+chiA5NsMDH/9YlAoQhT/MK5lbfMykfrhmt1CeG8cRotsg+hLJj8byM97yJ5gmz/L
+dqVxemBg3JYRuRxpFGaD3fpgUVYazkqndqkwabX11lvlxvb+5vW0arAclz4cUapU
+sL7gnBgzipbQwALPrhDb7EhxME9pkmXkZ4+bf24XwByA4PUn+1dDAA028/bzBjJ+
+rr5WfjZHacywHJH9BDWJyJm5jZgkZq1fBu8bsOSMhC3D6S+Dy/KLvSuQYicb+Ct4
+jIZQv3BI9NU7hIRIHp/RVH4tzjUscoW9zr+Y8j2MO1gpyZx8gfYNO/xop0J6c+65
+X9O2UZM0ZTjCJIJKeHeKfNub1nRyXg+p2BmZVyLaaxLssCfDjUjL/Ww2F/IlIC7I
+61AP4CbrrtcJroG07dtltJ+84FhtK1jew4AVWD+0AFBIHrvds+krpXZ/kjMwuwld
+uHYsaihEFIN+8i9SJBbl6O1ZLYSqfVZre3S5/G9Lys4NY93+xlc1VUVmbCYKmL72
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID CEFE333390733C6727C7880DFE429AFEB557A892
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAT2emAXlYdpJaQAAAAABPTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDUwNDE4MjQxNloXDTI5MTIzMTE4MjQxNlowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtQ0VGRTMzMzM5MDczM0M2NzI3Qzc4ODBERkU0MjlBRkVCNTU3
+QTg5MjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN/4ib4kg9tMs3bD
+Wc9Z5vP1MgnmXSBpilPNq8z8FjyodSMOpbtT/6tuHlBLZ6SnZcUegWnoOqdh9SLP
+i63aZV5fbt3TZyQl0z7u6UY92nxUD78ZK+zwMpdDUWz1UAI/kmwTKrOlXJWjHw6+
+1LUSGq1iP3Z7akgGU+RbcLfiV/0dcqUlHGt1ZAOh/nt5vlDRzrZvyYd+im0xPweR
+5oO0KuuNsGmlntW/JTm4kGzL/D44OttxEcgr3+W0NOqeHoKAo4bi6o3tZWMloEeD
+gIaDpT5mPCYVxjLI1GGBjF1d0sFNIM9828dtBSnF4kvfTvUFqbs4dk3YaYWtS/Qc
+4AbVoM0CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFM4Fauw/uKOviEalaYLE1GCybaT6MB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAK5n2
+9TN38i31S+y264Q53nR21GORhAeQos7DRT1fDqnKX0ZuMAg9yrH0ll2jSqSBUbJ4
+hUCPrcc/jt97oCbdyKbr+9QcV60jWbtktCnUpM4b4wnbrUe2vJSgsCh8ar3sdFP2
+9fwUXdKWh3md/J/aYaOocx29IkKp/oXqLH5eslIAEgsmGGyCxhnfLUa+gTJMcoBf
+4YKE5mOmoMNQztcSD/kHSRrIa9uDgLp9mJYLGZDYtXPrhP70d/0rIBhWLk71i4Cf
++D9Z2YnBpFpViHis63yDzU1Qpilf/uCJxJAQsq6eNAS4SuPRu4CJjXDqOqcawVIr
+a7FU4A6r0o7QiemH2U6h3Lxoj4U/dXnFx5ldb1xPyIxjGQhly3iN+BJVS0Nwp+wC
+c/6OT0p8GHwckAXsbikXnN6XiTakganRXjdn8qEYHpZxjOCDrUCGa2jui0VkOb3c
+a+ygCSdbk02FlAFYJ0vVC90O3Ddec2wBkiRAwOgTHK2egKbD5ieHWwo6+fdOQLaO
+HGu9HVV4UAOR76qkB1EFDkJaYV8D/0L8gjRYn4Glr3/wHBx1L9M/GXLaMdr1dGHP
+wBSY+sJTbIrqQ1UDB8bRvTPpx8zs7kvSIjxAOuSbHBuI8xhC313SmNc8Q43qlGli
+2jv8wk69Cj+dHVt+SSN+oRc+CrybHlVO523aOa0=
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID D73CFE5A9E0180801181A1444DE36EFBF88BA16E
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAXbbG/sWLKGbtQAAAAABdjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDkwNjE5MTQ0MloXDTI5MTIzMTE5MTQ0MlowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtRDczQ0ZFNUE5RTAxODA4MDExODFBMTQ0NERFMzZFRkJGODhC
+QTE2RTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIuUl57sBiC6xo+l
+fMhc5xEyHUOv/FX/FgCoSAV9PjKiP3BDO20MEJnQultsUIxycXA1g6uBF7zqKoI6
+NTsfSRiS+AgYX12x0bEsc+iVSc+U/ffHL6qRxEbvbWg+ORIdHAQfOvT/MOiNZNbZ
+DyPzPlcIOPkqrfH0qKxT8uvNCdZsi4cgK3bzDV/yJyCIWgaDUmajyADsBKDApNLx
+EW01sp0v4sFqbTpyGB8bMnxrKBPNxWvCIxiy6KuO2A+kTYt4YvC0LkZreiIpU8Z7
+YHLZvAwOwfbVRkNNhwSOd3Nfewkk4H7KHklRtVIHKY54EGYNOaYiLjQ4sRzUyDjN
+TtLdGIECAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFDUKTFSMFi+OIaEKYMCs4F6SKqEEMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEALotk
+nKShoJxy091ll1MnBoA494q+buuu0JqJy5Bc+bLmqbeld0UJbXr3EmP8d8MN2FrZ
+1Wq3eyyoirQIH8a50+53ENi1eSPmPTfoIsUiiNBUarH0JJbWg/lg/hWQExUCeKpA
+UkMSfpcrlALcI6wqLRUZtXqVoUpwhOAwIkXLTSADK6nmVWNtZFwFEfr+8nLgBGuY
+AiwCctWng/L8wvB40p3P4maoo2RQRWrC/6BwFKJe3IRuH05fnP2c/lvVTLn1QJPG
+a+i0JBLB0pxwslemdREO9om4aupF4ia2jTmJwcWm60e0+JJaeBcLhxnSpt/55In6
+OnVxVQnUTYVnl/g/FIDgUWlr7wfYW+bicwjWCNbU9ejCJ/7yPqXSol4axYz46rXD
+2DHAfr+7EwQ7ADq6nAOioLKdoAK8hrJcNHKVjNSBNaLkvGfQz5DQP47GwB48FYun
+oLYWpxaSrwTx4nRtDoNlAxVOBgpap2b6cQardGBSQ+DZ0pFl0oKthP+NHzj5tvmu
+ehejuT6qcQQ1vGVfPC5yYmQARq8GKwpJ2f1yl85iwZ36qoHyUeIRNP9npLF/oeer
+khq19DPj/50/+5hTG53u7cP516kpt9ifW07dSQ7lQqvHM981YDqhH7QQQVsffbSv
+2PKBt9yxW7UnaudenjN4WYncGsBPBBVCak8jlnM=
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID D73CFE5A9E0180801181A1444DE36EFBF88BA16E 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAqAE8+EkLRmvewAAAAACoDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAzOFoXDTI1MDMyMTIwMzAzOFowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtRDczQ0ZFNUE5RTAxODA4MDExODFBMTQ0NERFMzZFRkJGODhC
+QTE2RTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAN8UPKsM7Wcu/eMk
+6NfNoji/9VlTv85uFcnvUVVOQNgjtpmRsD+RBUmi+YrLzr05Zj+TdMbytZjEgYw+
+7g0a8vqFuMo+YYDMGd8/E+MUBzpPsyKHxiiZ4+PdJIgeSo3NcsrEZcHdHPDSihEK
+O0tN78oZnE/qrrWEfg3oyaSPCZMzCPxYdWgp8BCBR/qrSq2Tyzz7h24/nhNhkpgC
+n1aN/JHZUCpdyXr6hyW4P2EJc6t5lcOlfugQv+GAyeXtqSx0/r24iTUq3r4KbMfX
+e1ZMV/m8YPOji8fKqBKpH0BhU0GVRzI8b/zBx9z3G5ohESdjWaJfGhWinVHVhQyH
+liC8hC+ALp4W9vz1nW+u6xpY55yNJnwR1epwXt+VQjrs62Griy1cJ4tgwKHEqf4I
+OMtSsUB43QDH+SFrQRd7yAqb+EFWncQUglEv4OGw5gPW+M4N2UNBLNud+UN63jyK
+AjD7riScUs1fw7IPAOT5fURqDreI6TYjACt/dw6GqM7ofF3sHsNAHAYCTOu31TXw
+LAkuuAuaWj2O7Kj1Jy3WRwvIin12CwzVmIF3AynCd6HhNZRRjrPBTstSvn6p9tMe
+zf9YWW6iWtAdQhfTHRh7MHGPaCrKzAw4LIncScsUIZKdv77ia7SZTntOv0Tgz2RX
+TnJIwwe/gkXAHzA2iQnJZ0aL+7njAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTt0VJsrtAO5mNU
+qdnpyQFK9KjLhjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBACwrttIWlaKC5MqxH7MkemI4zCcEZNJIBgPZMjNBfbjn
+J359YhDMXQuklz13KhioKamRzaWXjP9jRN+3v/elLO3iLZGfxBAmuAIowfzI+Q2D
+SOAv+7HU/ltEpJ6f5IWUEWDMnZasP1KZwNRem8t7YCYMx+arjtx8IBe6tX04taSa
+mrkDA6IUr7uhm2XFQf9KYzcrSUrKRaapsBrEfbRABF+7HG/+HTYge0iqgYOVeoM7
+IWI4MWaOuEU9WxSChzUNoCVWSzbiqsOP+0WJNfu9n5wQe0zBprLN6ZJkp9mxx6Jy
+cLw9hvCR6taNgyPOL2tYqhDarQVRdNzf4UX8ypxGcbFWPG/MKM4fcpoFhKZd+7Zq
+tFy5m4gv0GOYZilQO/0LDeSC4iVuXE6bk+Tm+VabSS5Cg6wSwDNOv00DcWaUkPGE
+BG/FSRTcF1RCGKbxVpXCkcKlVmA1ri1lQW/DhHhJAIH8IH8v49DleApbwGukHMZe
+9bi5Q+Z6Y3/7Q7nTq2DLaGzVREdVyt82+4jAcAkBTl2O6TnZj66JnOVS/w64v/m1
+21BqkFh7VkSsASXO7eJIkd2A2PbYGYooa5i3bdBwf3FemZTd53SNf6iAsG22aXkw
+lXhlW3y3uSiDLn/8f6T67reUnkNPQjdWxu36CPKTosACR20jIRpt1+TswDAhBQJc
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID F99F207DFC8797BFF90D641D25FD5A45F76310B8
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAHI6rc2vKUdAMQAAAAAAcjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MTIxMDIyMTg0NloXDTI5MTIzMTIyMTg0NlowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtRjk5RjIwN0RGQzg3OTdCRkY5MEQ2NDFEMjVGRDVBNDVGNzYz
+MTBCODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM+btW84yTFfPr8W
++udj8JPW6DzjFjW1WojiNdKggkUz83xK4kB9qKHQRdsMJZORz85JzNC7MoIwKbm/
+q2U9YIqIVvN7czpuXmwEa7wDcoeE8QhB3Dy33U0nIp562eo87v7Sc+mgw+vwDlIB
+DDbe8H8Zk1PwqmNB5u8V/NkbxLz96HvZlBxHuHxNriq1bSPtpXct6+wTNM3flivc
+hWmRXV57pgrTbSBhwdyibZUS7RHTfA0FYxeIipULO1ZwdT1hDYj5HUa+nIVyxYx9
+5fkszEjvvbaURyVn3o6LOeTZ/MHNMFkupmN7JnoJAlnPji4l01nMBRq118SLHZEt
+xgC3z/UCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFEDLeES9tG0GN3+NoJCbxRGlML6kMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAVhtE
+pohccMyg00XGd5DqVW0ehYYLWnbSMbLciUeJ6THjA5cteU/uoQ+4aWeD3PDxCWbA
+/yV9gWeCiSx0/0+myOYCZm6yNmV83IoyxvfH9mdK4lfWnHKPYD84P+eajxHyqRO+
+RRMrBRztT56J7HYQKDjeDhbwDqo5Xks/76ViN9bPSMJzWRBMET7Cdw6ImxqquVKp
+vIwjI5keyhBhNyEyVMv6GfpbqQL2NRz27UB3eh6y/UWr5B3u/7dxx0p+skC5ka8e
+ndmqM7MVzsU570ib+jL03/0dEDWAuP7ymU17K0ZmKqIMO/FUOdjHMsSTEKXDN1m4
+2HgS8U5rgRMOSGeum4BFeV8RQUXZ9IqVrfWi5lQbrwp0LYFQK02Y458o1R4OHAlm
+uc7MtSVXiNdrkpQdSAjfIGgzmI7RpM90E4RlTsm2o1QhaGtq1IM0+h+t5ihiI7kk
+DsWTpbzM5TYO6e9dDGT0XXV9Bk/YtsNjEjysRY0bpJKohMJN39UzeGW1pl276yZT
+EtYUJ9M+o0pSN8LQTYTGGyoNMY969pzqFrvkcIVg51DcZbIQ9N2n4wH0GsyObUkt
+y8hPgZJwVKXfcj/VyAFl/DbSvUNVwOEagZCiivcqKR+VEugmXR3NmHOVgBVZeH6H
+34ZTNqWeXwdV9o9Cq7ki3fjGtVmFYJMwUFI1SEU=
+-----END CERTIFICATE-----
+
+
+WUS INTC KEYID F99F207DFC8797BFF90D641D25FD5A45F76310B8 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAqF2yTJf5Vh81AAAAAACoTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAzOVoXDTI1MDMyMTIwMzAzOVowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtRjk5RjIwN0RGQzg3OTdCRkY5MEQ2NDFEMjVGRDVBNDVGNzYz
+MTBCODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALVoorCMOhCUcPHD
+NQLyI/TsFosDHF8RRWRqC2imJeZGmOFZRmsxXbGPazrr0K8vflpBxJ1YvvrJsbkw
+si9BQB+GymT2FZBvx5x7ivgAmpDPNcvU1JbDz8OdZmHaYpCu2F4/lpHJk89YFw6k
+XRA1Zq1d9zQy5Glr733T0y16EoAYZMX5ytvB8acd9o/5u6Z84pyW0EOBUlHa61WE
+jAgH8e9oy7X+xgWRXZzFTAtCDr2uG/JhsqavByn3KFGovxhYXqf6ljSyLZMT+HqF
+NrY7sliPKbS1kgbkQ9Md96E6wCWJv/GMffQcglwyHc+Ufp/GBOTCUcUVJ60vWTTU
+xERXcGN2KWg8JFlSKHLzh2ASRsP/0HLlQoixElFPeLARrduSzTdgx+zHHxTPTsH+
+R5TYZAJffVWqbZyYGu+z9VJGmJBOngVMj07Q4FE8YR9VBAOW0BdrteWGS5PlMpJ+
+NpcB2hV1eLRvntTLE9VdXpt3mU4UiumbWWeQ/kCZoxlun/d3BM5uO5jwEfI6h0fa
+OrbYBiMnmyGYR4rvDGPIYlKg698LQUQwDFX9os/0oopNv2SVlVYz+qxkUyetrXsS
+dSIx8JtTm28k848LV26TGIQlLyLL1JCKyjB4CbwkqRv7Ll/x02zE1jQ37peS0vxj
+hUmQOw63FPscNMGOhtjEBk2Cg019AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTqGU5sT8GXDEhq
+Unzc8vxHpVoMNDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAF+NUPuaQfUpB2XKxdIssKUvuUHIa0q9yY7OqiHr6+ut
+OXdoQjHB12nlzqSm3h/kyuG2peGWpLY7H6VsOelOzzAPOMaek47KRIvOH3YMUh4E
+8uDF1EgXN8ZKNIuXIosCBvr3Kojo57pRLPXL5OPFQIexVrSXM2gmW5l7zJxGL41I
+2AElGk1gyLSouqqeHVAkV3n8AhOHY2liL05E30vtiSzkNxni4TvoJKt4/3wHU/l1
+JXsNFYFC7x7LVqQ3S8p7vVH6OEpuq7ZZ2jYsBntBCf7HJ+ZUFxfYco+LKMBjL6G8
+q/OHP9EJR+PLPZ22ldOgLnnF4IN5dQ3wg6lUzFzzvDquWY0oOBLdQWZ27pJUq748
+txSR/tYkcuQYruAN4uPmJdWADoWfSH7sEgCcxAiJnqFAKDOvnXOlDHQ4+T/bDzMZ
+epYreRY6ljuaSEIgA01dElDtm4kYC8EdrGgr7RU8QN/vGP7JncFqmKzMONOKlKo4
+ReNftYY52ruMXgBGz79nkYEqwirmLcSldrQ7ahYv38MEK/irFLJPmqRRYLsLq+iQ
+SWIvz5WbgcdmTxHFUD6m+1pWwFuHhF0Q2voOBCvPUvZ5KYmxrPwdTJS8ZxwuJoJE
+viqXd1mzstIl7YhP2z1XDCZxq8BcT3agMt24d8iAhgGZjujRc8Nw2nacisfzGbAx
+-----END CERTIFICATE-----
+
+
+WUS INTC KeyId 0FA7B495048126120E12731606776F3D68A037C0
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAEBsVjWzjeg5WgAAAAAAQDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTExN1oXDTMwMDIxODIxMTExN1owQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS2V5SWQtMEZBN0I0OTUwNDgxMjYxMjBFMTI3MzE2MDY3NzZGM0Q2OEEw
+MzdDMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL/wu3jdehpb3w5Y
+S1LA9ziNf7jzbdBHlW4HMAFgDqifj5AZJmcw5vu9xPiKnf/ZscBqcxGIGkJ6B2Nk
+LmOoqOpQiMzFSAun5ZkSNCqhN3zqYdQJeqLm5jKuc1SqPLfnD6uTsAdERrLQ8oG1
+IG6l3dGKXKltQ2Ru5A8N6Nf5ORkcjxTb01q0aU5BxzophSlICF5+nMV2lvzPLDHU
+3xbdlgmVXYfaQjI5HogrJjKfXJSBN9+7d+oxANwm/CKU88nWAV0JYLfO8KOx70PY
+Pc2WPGZBK9VnQNuUX//4mH+qS20I0B7Wx/aT1G4U+ckWM3gSQHhV81a6DkQgWWJ6
+LKsGJDcCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFMS09hIX8eHk2+58/piEHcj48wyzMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAThk0
+LOScc4+g4I2suFrHZgjsIh/8OIllxPpLGLkNgHKP7zCdmxLHB64UwbwEd+3udGoe
+5jBCFcIfUAq33aUjorefvCWPXLbH6axr34LhbSv+A3ZOqKHVPIlwM0l7Jk+sqE3P
+2Kg2petbhjWkW2I8PH4GTFK/8DVVE5PBc/Ia2VQ53QsBs+hd629z7SMQn4tfYG+C
+qmZKb37Pa4L5sWST0HIHZF/YwWLluIVcUCrF7G2I7UlVSeqrEJit4ZyY0CcepfYX
+m1pYr46CrErx2gvM7yuXyKV8pEo39aiBRkn1xNWxiz4NEe06KtOEXKjrMG26U6A/
+EXSrtFkqevTAtKBVYLdlmWQ78dZOiJwR3Fydk8m40gUoQ3fIotqYPtZZ5fVo4d55
+EhS8kgNwnGIgF4yvrHW6ZkkPrvZ4C0+ApWrV4n4/Em0vqgw1uamouT/jSZ8QMNhS
+n15lGoLCPWbC7h/Eh3bVb3/qn6IznmWv4Pqur/hkMxD0LRKQGhyqR5KRsxAfAyhz
+FGtWHMF068UNowJvzr7D5+nDTztIytO1myVKk2iAhjAtNt+mfjJMEJ+WGJpmy6OB
+p38OeIq4VIpj8mCbc5HoYpbHhcBO3LRLbjY7YYCHxj8+VfBSHqwOu3vy1fBNpbDe
+ZUtJYSVstYct2xxDPRGookSF/Xt5LrF9KMA9F6A=
+-----END CERTIFICATE-----
+
+
+WUS INTC KeyId 14092B5F7814EC9B713E9A9B90A4C519DF08E688
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAEm873xCCwJAswAAAAAASTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTEyMVoXDTMwMDIxODIxMTEyMVowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS2V5SWQtMTQwOTJCNUY3ODE0RUM5QjcxM0U5QTlCOTBBNEM1MTlERjA4
+RTY4ODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJP6BXfDzXlTMG5t
+FOUhZ9/SdXyV5tFb7ByeaO4tiEmLnCRKsl6cUvVul/BiMWG4QGK7KYLgcJgOY9NI
+b1SigYyT1L71sKe27kjFyhAd/X2MmXKleuJ9DurPE9DgXgHcGShsIjiIQUDHYEVd
+ruYbOG6xJkKEwBIzureK2lnh5mFJ8gSkjS+cX5UzyzhstBRtm30ZitVr5F82uqcA
++IOlxI40QRljS7UPojCmsIDoVElfVnhZAGu92h1LqaP2LeSJOtrNt0NAS7LlZ2SD
+TBGYYQUUFU87kal+FQACybz40QtTQ1P5DYzyrZYz0Vnc1iEbss4j9cpq8P4yilEK
+oWsHLQMCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFDw2rJQwB4ubmX90pT+JNPez6KRVMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAaliI
+b+yk3Vl5fddTUUcMIdcDDpqnkRzeFJvklr1g0Gy7IsdXfskPbwpnUQwCJkMn66KY
+waNVWWYBJmrdUe7zNkGvMJAi5uFmqh98B2Za0jLdinOuEg8egzZfRNX0bufjTMEq
+7vk/jeaVHMeHTYWGyt2w4/OcJkP53/RMsj8wwe3b7dnHoq4GeA/hgTSvHiUuJqlk
+Ir/I9Zxdm3AwwL6oiwhDQIA0JHCyI3r0wKQi2QGZ6RrmyE8xrlr4T4++xh/M3J1b
+lH6YsPSMYr/wHtC41djYLJav0y7tUketGsdcybcXtcnMvqrfgyhuxXiTJo20M5YO
+KRzyCZIZStrjVF8AmrI2dBCJQ9Rw+mhHYab5qBodBQ+hS8tXq2Cwjgr0i684zz+e
+KT5RxpMfrnCKGd75P5E37MX65gtAAW584Pv/ykkA/wOd4KnPQjjRTJET2zrDx7kl
+UbZfVmsoL/K70fZrVWTQ/+288l7ChKA2t723wcldAhsgWbsdUec3CPFo0LpLTdBc
+1CnqktPK4b2sC5hro6pGD/tvUbg/+koo2pK76+XUT2xKuT6yYLdMjfKtJbg1w/Hw
+bpOkqOQpAmRI8hvTu6bpKfx2ZWBY95gwrYkwuNM7pVBXhKCxFiDsRsyO+2QyBooP
+aGvzTjG6I/AFhTCWXAiiGlryFr9RhfGgb6jclho=
+-----END CERTIFICATE-----
+
+
+WUS INTC KeyId 145126D0FDB53E99907D6FC6FF1B90455B9E324A
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAE9p3ugYF2MjtAAAAAAATzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTEyNFoXDTMwMDIxODIxMTEyNFowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS2V5SWQtMTQ1MTI2RDBGREI1M0U5OTkwN0Q2RkM2RkYxQjkwNDU1QjlF
+MzI0QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIvQuLUF3h5ifal7
+1Amz6xbhKOUCptAyRVFoi5gdMu5CTrLknsSBfPug5ty+4f+HoXhKQknaA3RQaf7/
+GtZwGhmuM3q0eR4Xo50ij9dIHqIeC70PvGH9i7DSwFyW6kyW+tONmAkkHN7x+bFN
+BEZj3/2PcKIodd7xHmtNNwwgwPD26HIcYSdaa+HYT9G2mcPZD/+dFeJtJMBBGki4
+RoCCDw7JIuVAp1Z5NLSbFO6qhfrOMeGSMXWvq1Q3mzMo7GYOTkK8nyoVL885ZJbX
+5bIRr6TZkPCQFB3x2XqlrSnOkkkofeQKw/HCfaB307jmzwIdIPUEDE9g2572Yeqq
+m4PGuo8CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFM0o5ktE7G8TfoI6OMOtyDz1wZwyMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAClUp
+Bd6fMymAf9byc1Dx0pWEjNAXnw2W8jiMJ2dk/A1Hb+talB0qYAvYqa5MWp/gN/u6
+Y9WBV6BxPn0NnxM5qfvP4UDEhgRu+jiOPqXxABtdJAO1uvzxwtbnz3W6CmrAJUNW
+21ZicxTXhF/ZQZuhlPauw7xzIas7jrByxpmWPgRuKkEVs+afnOmihRCqFaWyTNO2
+ywAVA/Hf8w0nmhjMKw724MX9yzv5c1eMi3HZoOJnXjMe9pwYFocePqD0gI2P3AWC
+ROXkzhhryMh1wd4OhBmRuZ545PbPjF1YepnrAS8ljQqfYRpNg0xGm8oZQAxGUQ3L
+/9Ydh3iqizIsUHKKWWbKYsfNDPn3cU3G6VuF63Y1I9N8xE/Umd3pGwyb7KJQ4MsB
+9/tH+QdX9PU5fpvQWL408sgr7ilWmVnG7Ib50ALqz5+dEbXVogXaeCRnJHHHkybj
+8wNfkKRQbJh96sfLPFF8CR77x6n25MQtXAvDW0i0qSMb9xh0DxAXl4S9yaHXiDdT
+/KYLL6T6RPJTDRW1z66iLq7bAKM+hPZXgw7UVhmtppvfmP7//HOMx1iKHFEe1KuO
+nKndeWvYAth7S3BFevYWs312a9CeGaCf/lr5uTsvtMIXR9DjnCXEvICYBxoig4v6
+wSmrq8xePj7bV6NskdU4EW0BZe0Ig+sYuIKkfWw=
+-----END CERTIFICATE-----
+
+
+WUS INTC KeyId 4994C129F1A548D488586F22A2DF8603739B3BD3
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAEa+7uVcLLbb4AAAAAAARjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTEyMFoXDTMwMDIxODIxMTEyMFowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS2V5SWQtNDk5NEMxMjlGMUE1NDhENDg4NTg2RjIyQTJERjg2MDM3MzlC
+M0JEMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALjModlMSxcR94Mi
+TOTUo69hNuaC9IJIipQ34Dn9WKrzuCCapg9h61QyXeEt9ZLIZqpapxFzn/pX+iHa
+OX5xdi/iCOPMgTBWlCj96BDJzsFhSszZA6gxdDDo7dnZ3UoVyWAo5Bmoo5oEuXWS
+NYe5c7O7JaHXV+Qa2DMC8sgwvCbwlEwjbm6L4tJvXE4iM7FOdm/B87iTq6kdtO87
+kx9RIrlMAHfZ9rXvdS5CnIzh10PTatqZGFjP/vg/0j9KPdvDOU3qjlwzMr2Bq4Qd
+zbdmncfyHNaNptMAouYPvZtCl0+SoHZY+ZufW2XynGmKVIVw9HpYBJ+JUHtQYZR1
+3Nkw/y8CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFN4irIBFrvXdHjZPwXbIL5QsA5pCMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAllLi
+TJ1hN9mJ4rLB/eHz0t1s3r36Hvh9SL4dfImOv6wvC8hzTvBTVvnwdtvqk7a2AB5Y
+zDAJyxQdVdls2Thq3shWToMPABvGpniZU6zvwoJIyE6hEmvvCVh9d+Ve21kqItFT
+B93asAsVAnvBC8GWRZ1J8m7Z/5KHqm+RjGeKrkI06WjJ6t3MiEv39b0qavO7Rx5K
+G+QAJdGlzJGHW86iwPUI+0SnpT76QDK8b6I87k8pxhD+ObhoCzt54L4vmFSEw/ib
+e0+vLwnK8jM+IaL6llKYTg9tQr3kPrDcmeEpbS8L2lhVWG96fLnb+ZQ8v0sNWyzy
+Y3Us5Ne9GpNMPFQDJuq3/B2ANkGxQ34q0aeZetXBxrlDOOuOaFtW9QpYmJZgKR9p
+598KmdG6v5TJJsgg5Rlkf00C/dyVyC8uiHVJ4S5J+lPHOFqMT7a6ngigKWijPQdq
+UeLEOHChhxNgt5HpCL6QGTDmxQglb0q0ommJ1YrK7A2lH3VwUZdXsmqfvPN7S1ss
+6XQHlj4Tz13mqcHUYp3LfGcnU1CcJJgz0p1kYZyYpapRQOF6+WB5cDFFs5VhmDYV
+3m1A0JsffSZZJbF21hmxCLxOyH3IaAy3/AgZpeWNw01i/IWdfVzr9M0w6Hy2Ff/X
+Ww/4Y4ZvovwiXPNB42pBahdTRuW4+6Li3IS/F1E=
+-----END CERTIFICATE-----
+
+
+WUS INTC KeyId 72750C52CA3E250E701DED65CC69204494A8573A
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAEytAlg/NuYqcwAAAAAATDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTEyM1oXDTMwMDIxODIxMTEyM1owQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS2V5SWQtNzI3NTBDNTJDQTNFMjUwRTcwMURFRDY1Q0M2OTIwNDQ5NEE4
+NTczQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKqcyG6wuFelnE1i
+RZYpgMRt3D7P7+mt44EfkIh3DehWtYMqECaUhlAlIZ1cGJj9cAAKWxyo9WoRtWKo
+rNyUlVwoEh6ad1EA4dDOy/UFi1RJQJLvOmvZYfuAoXfkZ2MhzoSmGT1INmzEF7cN
+U1abIHqswPBHn06lMoak9UAg7pyE+HNDyqaTlVxAbjTrsl4jE3MqJAjee89iIpdb
+Fxlon7prSVlvBmFjFn3pFfqC34ktxlIsaf/IJWrVIqI/M9Z3u755LJuIcg4+6WYh
+vggabMcsj+E7WbVVDun2DnznQUqjyfkCXfpKKK7fXqkcI5OqtnDZicJqpNKs6u97
+WpytRfUCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFO5LjEXHl/o/IAsbiUq//BBJlOX5MB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAZn6Q
+vw2mG6tRZHfj3Lwchr9wtTWtfrPzs2wBKX0w3/qRb2eoOf4HuffZlL5iqNsrLxdh
+U3RxPSX9oaJ9btbx1Hf9AErWI/aAxdOgZUx5lnODGsetgxEGyn+J7PaYS3aMu4w9
+ch3fENiF/Na5fv1C3QCihCHBuB1X8PjQ6qRP2gFI1AD3fImsogYVBrYNzSYIk6ta
+EX7L5iqGz0ZipOqizsS9RppXKGXunsSpGY9Au62wTHDSK2qs/Z8KjOTOdp9mS6Or
+YYXU+vBY9I0bjT1I5AwjjN8v5k3FknSWnsaviDnJ1hWh6e27muZF8eEIsrzltdzQ
+gJ93osb1VH1SGsRPf/gNPWXq0mEpTkMchLUEu4G8thVTg/Av2+lu1630icIBi0Dn
+u5j/kxGCZkgS2eYXBtwLMqZ3Rb9pAwQixN01rxsVMie0JDHECwdR2eSukl1skNZC
+O2Kq136ly/ziHjtORMNbB/yUMMu5aczQuZVLCVG1dAaNihefKzjU7BiH3shw6nAe
+zv3saE2sTDTx2tkdDInU9jmd+7Rj4z9slJl8ANk+OjL2VEDPEj+VG1VEf8CiRj+C
+salOpKQznvLtgMKC9LXyt60yggQQxTT35ugcxKurqUZEKW1imO3VqKmnS8vC2gr6
+wgy2BXA+6exJWUNBf85yoJKd7ki9XhXsk9pL9tA=
+-----END CERTIFICATE-----
+
+
+WUS INTC KeyId 8E1AD84693D5D89B1472CD8F999076EDC4115400
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAEP0c4k58+C70AAAAAAAQzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTExOFoXDTMwMDIxODIxMTExOFowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS2V5SWQtOEUxQUQ4NDY5M0Q1RDg5QjE0NzJDRDhGOTk5MDc2RURDNDEx
+NTQwMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIXYM2ra5uoGaLck
+NUGvJF4fq/BxJWByTv1KS8Rkq1CNoM+Yh7/ZEckj2vRvtmh0+gZd9r7a49Li8HtO
+ryvfTjszUIqOnvgTIkrhQTPSnin/sdkEc8dK1x8NKg2BMY7MtYZ+cUFcYA5dkFGg
+IKrmVVN9bMhvaHG+i8dYTzTKhgWObWNttZZDeIhWDOuPs9ZfsF5UowWtfPsUf9OG
+lzJcWQMk6WEfza27qtgkDWA1AtH8kMlBNKGH+EygHfszuN8VzzC7HzcGdVSqRSw7
+wKCVB3RblwCqShl/li8VR5isFDAhE+dSUEcA0xiB9CYK3zQWxPW4WEwBl3+8pQSc
+CCJK/gkCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFDFp/P0Oj6ztQ8zcVsmyDHKAGjXUMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAS05i
+lFqfv0FVIUMJkbPc7bgFtBSDIQGDLEtwpTIF/2ZYDmLzMogmkE1UnECih6NZNc3e
+bRLgaQNgKcybGOGYS8o+lj/Xn2H261ANdr7HhBF1cDeVZvD8mJtvvFh/BDiNXpmA
+j3ohZtPFzF4342HYOsWjJt0wF/gE2EtUe6+Xwpj3MA30+5RVItUJkxbLmEHAhWcR
+SKnAsfRiPjnpUswOag4b9mR4uBpeNtLdiELGYEXCqmED+Jz55djuDnlh3NX2V0fI
+6gRz35lSGbUpdKsnLt796IkMTb414dvo21WBA43L+hU7YFe5e6jEVx1gYE9jIW4A
++o9CXzUHDhs+ZwOXru/ymjoSTFdre7+BoWqQ4MZTtBhOL1+YJNIWb/HpIg/hEbCf
+mmz0qgFazEPQ/g9rYnzQeuVq4nzlFXG2Jm3Lh5IModQ+rOgrX67e2c07k/yxSjn3
+JsnD5kCzBwbWgyqCodXnxJ03NRGRLCBi2wQnKVukS8XgiP6B6Y8zyhcZXfKhQBkc
+MLc+2CV7bg8aAQOLZwmRIQlfw5zlC40zGhuXU265MsJVWYY3u6P0lLhvozaIYQ3+
+3xGd5pJ4dbUUBlS+hW4U/12b/kqdrVYsNqWpUiqxM1GQ3pihzJtzzz3c1SFI1mOE
+Uhmwe/154XNZhpoRqij8inv1rG3HLwMwYRaVv6E=
+-----END CERTIFICATE-----
+
+
+WUS INTC KeyId BF9C5C6FBF80CDCE74ABCD0E0E6004EA022A6606
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAFINp4XIjRjD7wAAAAAAUjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTEyNloXDTMwMDIxODIxMTEyNlowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS2V5SWQtQkY5QzVDNkZCRjgwQ0RDRTc0QUJDRDBFMEU2MDA0RUEwMjJB
+NjYwNjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKhIIGVTpSn4BHZc
+nuW08Y/nFUynz52rHWbXoJLQeXvDU6/5OK/xu1+G1qhJz9gY5TvaR/vbe7lVY736
+qoegbEfisctMIK3Eg+l9yJ+HEKd1JMjvf4PN77HQvFTzCfCGEOuN4+zkDBcbyNfV
+5IMAazijTZ8jarsJeUWkagDce8mRcVvjDMabaK0gU0kgEeIrjZB8vZHH23Tz3XQh
+aTHKcrKJ3FpNgtnpw633LAty/EEmkRUPOyNMzhVogiMaeXZacXtfNuMRAtgTiEZT
+iekl+/mxAADHx89DPTcA/V+l7seDErPLgG2bvdH8/VEk9CDcPGVVwZYwn27EaiOW
+vxsZmaMCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFC5nsd/bt1MgvQ5L+YlVICab8lynMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAQrLr
+Z2WG+OysOT0eKPUXeEhp546T8IP1nGEailSX+W40X7MpGoCAQEt4fzwM+Iw+bd57
+3NrqJfxZhIAvgwQG4RDmBLyL/jMLCIEFdnjl2oc5o895TfkPcrti3F6IOKNkqGN5
+Va+G3RaANiJOkwWLIL/ZYaxlqbFGEkjsJGgOGFi1Dhxpcf0DWgo35/YaKR3o22nl
+hZ+poBmJXK8kHxy+cKMlZk1ZZCVQdRUS2hLLjCL51uCHQ7K++wD+O/DgsWClKg0T
+TLAgfT3QTrGJ019AcsoMiJyQ0w6Edge7KuziWnDSKA86GcBF7fIbVCaWNlJ14F+O
+xRMdBGqi4hy4xW4CEiaGSxxuP1qv4o+Hf/5CNLLpiMV8B72EPH9Ms9tn6WApJD2D
+k22Bqsc96x6YgzGqUB0MXcaR2oN34iySFcM1vPwtB1K+hkTUp8b4vMn2Vue99XZE
+/RmCGB6mrOlVfzQTUlCHbNUH5g1WFbzXW4Hvawx7XuSm3r1sMBMxP2F55jTIQCon
+3SjixcMPl4CZoofvUnuKE1W5tfe/RF2AC2jc32WglxtYeFhutvjE8PXLSIfm38qH
+ZyHsaz8M80TM1VDNBZ0mUjtx9fps8teMoPt/aFtLPXw6AN55yhi6Ch3o97ChCRfN
+k+r/3twrGsILd4yjkvlD3dH+Wwso0kO/8yj2X+M=
+-----END CERTIFICATE-----
+
+
+WUS INTL KeyId 145126D0FDB53E99907D6FC6FF1B90455B9E324A
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAD1AR+TuXYYsqQAAAAAAPTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDEyODIxNTgxOVoXDTMwMDEyODIxNTgxOVowQjFAMD4GA1UEAxM3V1VT
+LUlOVEwtS2V5SWQtMTQ1MTI2RDBGREI1M0U5OTkwN0Q2RkM2RkYxQjkwNDU1QjlF
+MzI0QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKjSo35PnDxs4igb
+Msit6+B2v94Kbn0TwHJTATxniESNojE3soO/Shs6q2DciQnHdrkajXWaxAcogsJ9
+C0wgO+2jv692F+KvGZtJYd0yvRP9weaWr+x7l7hJKQme73c9MPiwqlXu07lgB6pE
+klQEiQA42TLG3Aipg8fVfW5KYbT0eqyDUc9ytMukSZGCmmQibpTp7uQ3JHedZvy1
+SCPf3PHhgcmHoDA4ihn6FN0v4I7pDz7PbCU59J0mN+CHEvvPO3oiZyREyBeMMzSH
+8jEbbXcRX1PBKQHOq4xUH1h/RfaiJ3c4e1dy5uQx8h1yBugmOntR7Y/CZp/DDr5D
+n1mS/YsCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFL9QowtPk/KEZtn6Lex8Pp7GDzZ5MB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAM+nb
+29hJADmbFWGN8eyfuRoHfvoqpYxsaY4i/cGy5OFv3BxKWsuPRNkZEPgAymuIdFqm
+PE2McI6ywZ4ZHmpcKmd5ysgdJxj1zZhVb26S9eWvvwHgagiiOB/TPa6M+6eDVQ34
+xYPzChTPxj2bb+wCwBZOEr7yl792g1hj/z1jWj1IJd4eaiXDoN1vQmV0LxYEjr0w
+wsqd/AFRfdZe6zzOnm/2udSNP32myyLsGgjdLDU0d0ufZOmxkF74rxUTkeAg7f/S
+q7NRm5bblmtuM1Js+uCWjnt80+VW19uQWXPFuVLDXCOlF0JarkDHn7OsXbxQuvpZ
+IXEv56jiR+gJQiSbJM58OZcA0fLoK1kGjjNsWd8DUcqD2xZSOH5RIjZksL2YXgKk
+r74oQmGWGriyRe1eiVFnmcvZnoGjaYp0VE7gqLo+r1pAR0efxprQcmzQt6ILzcp4
+DJrYu0yVRD8zSSW9OVwAOqm7IzqHG5ZPGm/7EFQYC973UgQGT5n00p7UBxwjg9Ng
+x/db0locxHOBmKrCVxWJuw93srwbwdO38rAeIrEgmQZgkNNCYQ/CGdVkdgQ2MmMl
+OyJJuShhWsJmMSnG26vbYQpOiI6f7fpHLvderdjygm0CS8WP9CUQhVsOuMZ6T9Nw
+Qx6tq6bOGbptNW8H5ijUI5CMwBtiRX3yElBX+JI=
+-----END CERTIFICATE-----
+
+
+WUS NTC KEYID 08300F43A8F4B8C8E624A4F7060CF59E745015E7
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAHOwC18hf3NnWQAAAAAAczANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MTIxMDIyMTg0N1oXDTI5MTIzMTIyMTg0N1owQTE/MD0GA1UEAxM2V1VT
+LU5UQy1LRVlJRC0wODMwMEY0M0E4RjRCOEM4RTYyNEE0RjcwNjBDRjU5RTc0NTAx
+NUU3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlKBeUzusCgd9dC5c
+ZMjvbR9U/dhIL+SHiVWoHvZYUUjQZRi11tHlEtNcp2Ne7UnW5M3LiKHRKZo1xVnc
+7P4neVF0ildA14A1RInWNetl9w27Yzm45OduUakpbIy3TbrfuXmyxq3m0u9R5mZt
+JegUMh5L1HLABhZX1yNn8fmNbzTcQWaU51OuB/f+gKPmzLtw2qby74eDBMGAzZR9
+ATmKRp86SpKyrqBRO0W1W/D5Ss+hVwHVCfW7QLmuRgcyfS05IMA8hs9GEmqTea9+
+2bDI9Ee+GqZ2BevKJpgOpAb0zjlL9lNJ9EKiLYhntq6ajPcollMnl36fCFEmuaOi
+oG8t4QIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUct2ObycjcltEDyNi74IUQi2x+K4wHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCbZKfl
+Li4rLZ92EUCrOKMWkKsDFBlzYFB1sNMk1rdGLF4F2K2dUAAi+309//4AHZ8+EzQX
+/UWaNIMK8qRNcxaV1cLEQJuGeB8fnuqo7NYcXGjSdObu9UhoZEoM3i7c+7K3Y8I+
+2g8d6dNQo9YmyPpxSk5dVrqkWt77D6IbLKMJGbjS3jGHAIo8+ePsErSQ2mxJAUnK
+4prKne+OTHyoVxkxkG/Psu7MJhqgzWhM1O/RBHdr9G0NCjgY9Eqvp0/2kF2XLjJV
+GsYqnCSUPCqh86FLahBdrmYLk+II+yJ+TII77NOjDM5ug34uBzca5sZHrdwdB7t6
+HyaW3hWWsT1dhrAMgWkw1GkGvwIMOQc0yddp7P+ipvDJWIdQRpbkX0zfnz7Kijao
+DGgZSfh6iJha1znbzYNKnOAcQBn2oMSO3rV5ZTZrcSlIUMVS43oR/98ht6o3TkTQ
+vVwtCXkT+2ivrdFn3K3WwxFdivIXR4cBhd2jD8WV1rB1eGNV4BFACQV8K7hW08/K
+MsyNCuvNR4zS0i+MGK1uJ1H7gQQ/yAaLRgd395PB5ka5y+pJxPAGv4ShJaBaZtze
+owe4BQC9tVjYlpJPhZvbLJTLxYgdyFBEkLPhFDLRpgvfEfTzIglhaRnMjB8PEjCb
+5JRKkP3XtE6xoonpxSBdt5QyBwAZT2yL/ho6Bw==
+-----END CERTIFICATE-----
+
+
+WUS NTC KEYID 08300F43A8F4B8C8E624A4F7060CF59E745015E7 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAqbpq3yqn50O4AAAAAACpjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzA0M1oXDTI1MDMyMTIwMzA0M1owQTE/MD0GA1UEAxM2V1VT
+LU5UQy1LRVlJRC0wODMwMEY0M0E4RjRCOEM4RTYyNEE0RjcwNjBDRjU5RTc0NTAx
+NUU3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtPXnHS1+/HKS6Osj
+bua1xBClWLubk9mQMd8nU3uhvonxkQyGl185IcrmD0Qr7Vd192Toly6oSb4kn/cN
+DLDf2extIZ8Z3BpTdKqgM3Rs8nWDU/xCcCH9K9xuP/Mag1pkelgtpxcyH6wiIYOy
+aLM3iFPVhQTeu4NlX0uQ04i36wt5GjLrffRhOzzEYSPvDKFBBfGyzbUY4TPqU8gk
+AeFzu2IMvcxZ9qrNF89dzwmR2l8hLC1kbk2B9F8CcVbLhiCTxzoOkXNtFq9T3PWf
+kvq+M1Tktkz8qVkvp+aLMJZuePdFf2k3M89GJuDdQvw/Oe0G7noOyWfw4SJ/4pyi
+g1TDUp8sxfV2+5cs2hOtFaMDvdTD0UdBxNkFpKTOtKEvNJaqv/xsiPeN5f9dWF6Q
+iNYIJF9VeTQRzHwc2uWJdaSbmXfD2D2VS+zjT2lYkbl4plmlP1EaNlqXr/lJ/DRS
+oOxxjXAfVxOZfgXuAASoNzQ3JMamg0mRkdVukg5BE3wrsh7ZgHJ1AxvOz5fYKGaW
+UYILM1cczNFAzMG3Emve65p9p//2u/mMoWdWahwjCv8B/yeCojrPTC1+oUcczcfU
+VEWQSNtY8+D1YI0mT9sXwFKvLtO62ITCzl/4pBO1hSSG7QjwV4DoYl3CNu8x4L2f
+6btewoIko+3ncBVg/fcTCUUUiH0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGhxDq/mo+94CQsI
+tNo1QZLxGugXMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEADOeloR3PqgYtm6q9KPqH4I3WNXUu03TfAo3USDAth2t7
+b1FOvyhAFMVaUCjOmZGa/bl/PKoaF1rKKynQ760N0UYWSjZrJUH6q2ifmsNp3DMK
+Qhf6kjOMpNMbakdGtLxF8BLZwWOGeLEhwEGFzoUnnfcMm7KAOFsYX8rAH8u5Uk8Y
++ZWX7DbRkUzovcOzJacyrWPudgxZyrVggRbdy9jznLTZQtvY7A6FHOxOvf8Dr1mN
+D3xgxRtdcVhVZVC+KoOcMYLOS+tpuOSi743AdGAU9ddDy7ILQ8O/cIE1MQHEcyLY
+qsoQ6b/EsAJnCrOOj7dFQtNP4+BLjEKya5/C6QD+3DBJKiAvaZ9uP4/eff2u6NPQ
++5awdJuYwE3YM6AwbUEE/TctnAEpv5qYUMG6WExixKi5WHugHgIzRPlZJYiCbvMl
+BtPya9PgTLbYvlomec4D7mkeewBjyKqgWJUxqE6S2+L2G+Rs0pzaulIfg5o+cya+
+8Ti+JG4YAglBE+qqAm1+4d3mXgrqSzZI56RprTeM6V6Tq6r83kQXuN9uXwLEV9tL
+njIfxPTWF3Xb6JDNxGg2UFFOkXOI7DRJMmrrWAfqdPXGTurEVqN2X5dWNngqKCMb
+qYGc0tryvDx0cCu3sYv8o7+f3Y2AUpKzVXp58fQJ5OcA8rARiupSOfiqDAg1ONg=
+-----END CERTIFICATE-----
+
+
+WUS NTC KEYID 1591D4B6EAF98D0104864B6903A48DD0026077D3
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAAQG7zzf9AZzfcgAAAAABATANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDIwMTE3NDAyNVoXDTI5MTIzMTE3NDAyNVowQTE/MD0GA1UEAxM2V1VT
+LU5UQy1LRVlJRC0xNTkxRDRCNkVBRjk4RDAxMDQ4NjRCNjkwM0E0OEREMDAyNjA3
+N0QzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAztZRPn8OqYcQNgF3
+voNFUIcX5OlJFq3S6Y03yhA3e7orwZqOe6P9cV/sE/8VQssHihdpapcbhJpgFm2W
+bGJF5xmCjNnqSI5kXVpJQk5Ts7D3Xhqum3TvgTbhSf23zc3AvA0koHxJ56JdxHTP
+1xXu8QbTSelvrBsXeTcz1HukMY87At9UlV30zK2nzqcyBA6ftTscVIdy4kKWB45W
+MSqYf8TnDjR6Rm6El1LlxPNKjTQth+/SEqux2xvVGPuje9x7ffUKtDQbFK5J0Gn3
+quD4bZDcE/0qgBAOJVPpC07nhs1d4kQWWUQsCBvsZZEMZGidGp5vEXWM69++rV25
+xweNdQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUX5h5yE1fgiLNfEp1KGPBMuEILQUwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA71n1n
+xAKG0b8Z3qDh1kJm5oqqBcx2dDvqtXwnEIFKupBOk8mv7eZLTLtr4HqTo/JR4o3r
+9uV941cLGhq7jAT/u0FiBZet97U23OiiXy/cwnfVr15457hRuE0UskKLt/e82ZdW
+/NHZhfsD/GT2rsG0PSaIyMonLo+mFP+Yhcte4uaM7LvC+SfZ/CuKq65b1gme+doK
+8AuYHlg5c/bj2QUfwPRSCPIBHe9nq2Yo/5DSR1RX2Q413g7RM1rHfhgAGGeYt46B
++q0ugmCGJZ74ldEfx2QDty39AJGyImRnJPbAAFjKNHU4aIxsPEe3BhprFRowkQaO
+n9HVatCh5sloONanx+oPbq94yteee03ejUqLsdiB0b9r515kK5kH1DTSQ6TfAMWD
+arLLkXJ1fOyZ6q/9Vgmk7AlXpRCdtfT/G9nl48bCVmt3OI2Ls+uQ2YKZ03HpPFV/
+y7/yHSq2hz0lSYC11NuwbXDFGfx2bUevauL3Y+ZsN1JgXwQi0Ce/wOmGxnRHjra1
+YDpnU2GM6LO1YOA3b6p23LQMviqal6QZ4sITQ+ef/e2Vx5k9/zaqKss/UUBXXXjI
+gdZb6JhoMQG318+quNDBmFxH5aJR+TPVgIBLoG+nT1H2my3Z1svrfm6mu903uSon
+LD1F3PelOb5d4DOFXDAFrV8ih8x0PgrnEfod8A==
+-----END CERTIFICATE-----
+
+
+WUS NTC KEYID 9FBB79AA0F526278BED150929A7171E96A35BEF7 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAqIId7OgxICXjQAAAAACojANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzA0MFoXDTI1MDMyMTIwMzA0MFowQTE/MD0GA1UEAxM2V1VT
+LU5UQy1LRVlJRC05RkJCNzlBQTBGNTI2Mjc4QkVEMTUwOTI5QTcxNzFFOTZBMzVC
+RUY3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6Fv994941miJHRp/
+Xo9OEKmz1D3PFoGjZYpf5Nlavj5Jsear4xUVE/Y/iJO3IhAjfatExEiv/f8EsSLk
+feQJSjqVYOtpl57SYF7WRsKdng4V5GNFtQnEPCs3PuH62rXfSyDOgb9sK2Jkh3dB
+FgUaBLQ/a4bNuaIGLn22dkgURlJpubw96mTMACB1KqsoUdElYDNiduDTMX1nSMU+
+dU9K4LJ6Ud5bNKhI4T8taaFnhZsbjrUre/YtthIVt/Y7NtKslQGa84PA38LfUklT
+OFwZ1gzrzX+GTDfxNuwEONACOY1aKhOqkoyU7hcrQagJf7KwdUMFZgwxcrYtg1zX
+ClmJCC15IZ6aS1fZ91H2FH+zDbLFBc3OxeMGL919ddQ67x9TBfhsumtObMOlMtWf
+AhmZJ19hf8bBszz1Wtgfqu5FVHo3x7wT4mYWG0gG93/sy5peNuN49LZDklAtNQeo
+v0FZliWNe2tpjjh8EQlJZiIFgAAfsiroz209bYokRNU1HwUeEgN/WC96iVscbTlS
+P2velfFgmKUxBbtZCw524gmT9NT5IW2mjpIgZ8w2hV64sBO0YU2xNnKBXlVFpoS1
+2bmd+sp3ba+QJRYIMUBjIc2YPDSkqtUwyNLTNSIoC/eogDnhohnCnkyOViTtOe+D
+AFEIgbNAMMzv7+Qi4C7qaUafL2sCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJjSjRvBeQ3MLf8k
+uD2pAEijA9QIMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAFxsvE3q/Nw4YCYiC25DqJlvbZtUz7D2oIJDNwUvd7VL2
+02adXEs993sc8l1tm5HVVZm/vDgLZ8jvfcQuYe3e5NCv7Q2AqZ7xBPFZJYN5Kg4n
+EmwAJcp0ukwtBNGKZv2E28Xsf9ZI+4L8nmf8lchWHvni1BfTylLMZgR+W78qZ6Wu
+weWr+Ybcz93CffFN4Gfk0KbiCZnxaFUaNu5O5cqUZDQ2HX4IPcH1qk4C0jl6Dx+w
+5RO9hnn2cLVuYIRRoqUE9hxKQShoXzZ/ImtsIb40IYevvQ08SubVtA8Uq/UJhMSX
+rcnSIbzaMLza1D52e5/oJCyX04Us7YORW+Xa9gHwL4m04mhcW8Mvhf/ntW359RSX
+OKy5pLLjedfFvXdBcGDz6sCtqdK4AFxtGc7n6up/QOfhtTU3Kr1bcy4SsLqKosb5
+DuSEzbGo8aogZgd7JVXOVBv4IKPukCd69cfwl6DVfiB3Ncz82WpQ8YRzccF+agcE
+XhnzDRjKMPb2TZfX1ZT6jvzBfTp7tXz7Smg+9LRM+v+epu3xAJN2NHo6VqbhKlvy
+ci3wnHv19eHp1A/CbXd2XB5ZIsd/ibh9IAkaIhqj0qXnT2tfMtNv+JnZNRLSMUfX
+6doat1cvyWF3EPC2HCxvGSQ/XBr1bo1spuamvr9YxpRtEtnD6DPCOWKB42pkD6g=
+-----END CERTIFICATE-----
+
+
+WUS NTC KEYID A0D737290E16CF2AE2BEE7100CF56B2F04C5F043
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAARTmshTif8GQCAAAAAABFDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDMwMTE4MjU0M1oXDTI5MTIzMTE4MjU0M1owQTE/MD0GA1UEAxM2V1VT
+LU5UQy1LRVlJRC1BMEQ3MzcyOTBFMTZDRjJBRTJCRUU3MTAwQ0Y1NkIyRjA0QzVG
+MDQzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsgS8VZY9xB5eoAQc
+ubPGu3bKm6Nz3jnuxfSYsV8ved/+sjQZieXL9qqS3NM7i4ATag+Px8Jplt4Xl9+0
+ueW2GROQYxuzSIFtMDai7sjJkEKvBgQtpm96DxXK65UMGeUpjjez2avhLdO7rxac
+U2ABnb45zA7+To60mgxZTWKlxM4eYnidzHUiUNXFw5xCFFdNRe9keqHEt2wTBVrI
+IDkM/OjZhg7/nbg48eQL7FJl9kWLt3P9HhLh0hsn403QpRX/PiX46ZRM1ul7s0Z4
+3GUWYo7M3szRUwWmrWgJNIfLwNHZor59z9DkeWMaMr9MpLxhtpeimq3nSBAKszbC
+RPaHKwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQU5Q203r56AhOup7cF3kIF/ZFMLzEwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBAXKUF
+dNOC/jOKjPPkDqiiaK8OHKq1KWfUOaxLlNe6DX4qnubFDniBc4kjylGeB+ggIVXe
+Y81xakzWvja0AiB4p7nqdnhK05v5c+IcvzQdz70tj+Nl1SKXTJXA1L7Btlpi43tl
+v6+3XQHNh+29Cg+o9YeZAIjSeP83iAWqkj0gi2HngL3h2WWSi4JQJ9k2XgUlpnAw
+/AJXnwpc68JKq+erec7RSYeljGPW1omldLIQBMxiFEnrB2cH5EDhckAYUS0iT1zr
+/BIcDFr7fKN8cEDWUnRgx/uPcEi0h+JFy7pdpBIdd46yT6brMSQ01zJj1a/GYgbX
+Qy96o8gpC+/o9HPdfpgHwtmZ5RJGEhW4wuPyBjbMWtPPcDKgspArrddPhMey5DQI
+OvBJ3YnESql0M0FeM4090QPS1XoNnL2u81ULxSzVUPEq+JwzbeICcwg0t18TAGQs
+R9m3zew6JujJukkvVdxkNRaPguqye7Z1NR1H62REObjVFAmE1sCnNX0aU9DY57HX
+329TjZsI+SY+A8tF4JhgyMxbXdUIu/0vLNvwKVJ8mkpXuRiEtiYDSSxc6YbAt/wB
+ke9eDBidOF0VaVJUje2nAcuf31AGF9c6v47/kdAecLr7I9ZhM8XL9Z+7HbCTT9Kx
+fo72FV68TOgZg8rAqA0sHbvTponqP1+n3flUUw==
+-----END CERTIFICATE-----
+
+
+WUS NTC KEYID A0D737290E16CF2AE2BEE7100CF56B2F04C5F043 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAqcqvb1L783JQgAAAAACpzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzA0NFoXDTI1MDMyMTIwMzA0NFowQTE/MD0GA1UEAxM2V1VT
+LU5UQy1LRVlJRC1BMEQ3MzcyOTBFMTZDRjJBRTJCRUU3MTAwQ0Y1NkIyRjA0QzVG
+MDQzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0WVGsn5oLAmOt5/E
+nfpzpA7qYkgutzAYogiyDyuZZsaQe0ySeBVlqzcFFt6IF9e470T8V7k+1hChS9IG
+Z+NKYBFONDABaULvIvftrt1Fm/ObXTMuqzw7tvFp3bPLZ+4/3Pffk4IMd0W0Phaj
+fiG+L/EdP0RstUZDWq8tOGqdpaTNvhs6XUglUH5nLltEKgwoxm/2roC7FdU1j29B
+3xax6bmG64PvOVI1FZjju8Qa8Y1m7duuZ50KFCKJV22wrsXMLoF5QWbJpEpxG3lA
+q8pAwjLFDj9M5fR+EuMEXGX8hT66/Q3ME/2amYlzKmDq5x9aN7svu55WwyrUF1Qq
+kh+pPfVs8l1vpDNxwhhmMWpmujr2fQZnf12hWyKsko01BO/hQoOG1ECcdBtBlpsF
+pfplxo5ToDkOeaW7tLWSLf9fIlo2TwM1Psqmt8qs4OgswbFNt3pBdH7+ed34xGkD
+aJFHJg50wqKLnAeu+CXYeLtTuhcoQR24jvO/ryM/zzZaYfduHSg4DSU0vcPzClh0
+fI8PCumgMwmhZegES/aaHTDJ+eGnxBVtr3/A6nJ5PYNZZZDGc/Tsfv0yeRy4zQh0
+DeCm5Hvpd+zHrjPaximzm/Zh/O6BcP5NhBzjx+/9o4s8Ahns3FAB65VC/tCmsHH4
+5ZMfuaxvQvpk9kXFSd6/fvtgTp8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFL52IYH6R3jUjX/M
+vxhEvcYMFKYnMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEADRo1dsbzntBXRfOjZjr7BeBf/AeBCEJeyFMHTIeQl87v
+K0dHlpmTvPrPWf5xM4ofPQfbWkODXC//NDEzdnfr84wLz4GNCTrHeakbo4wd2apl
+zR0PK1PhZaYyb3gtS61C2wzmplyqk7nr5qoztywf2rzE6AfCnmFx/kEN4zQ1Y7TX
+v2le0H3V/rZPf8RG0zM6U5S2cqcXY0zNZ5s2mp6I+HvNkpbzxmXDz2oa5NXRQGLL
+uxS5mHS6zCfFuWXkkwUTxy9PYiqNF/luu8KcbfmyFE7hwhwzFvLtBwxD0uf23dib
+vO0Ikmh2W73e8ItPkkOqYWNRj9ffHIrbWGDjI3JvnLlbD8+sv159u3ZHbqy7cGAe
+gfklRNuVX0MMNMT+stGewhT6v2YHo27oAjbbMedWQd7GT6/KyyScK2WC216erHfn
+lETA/74Szc+zJ2wX7BWUa/3A/aDUu4K9Zfip+71JOzyStzg9H2pf2OyhRjxYt3Tf
+nnR7KBTcAeD5dFK7/FO+GQMrkQ97xeakF+++AQ8z2rjFQAJw1kixsjeyWZWdtJkW
+AFCNjDbOyZs8fF9ijxPPIx/Ffb5v3Dde8uTUOewnQuYch8vWsxH9sMARpICJvV72
+qVbO/pFbUuEC1QFu7edo2lX8Zf4ArM0smwEfZlT4lAdgsKd2PFSKwcKMd1YFfUs=
+-----END CERTIFICATE-----
+
+
+WUS NTC NAMEID 3E6C3B35EF144B0A76CDCFA4080B8B7BCA3CC8EE
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAARVLShwugTmq8wAAAAABFTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDMwMTE4MjU0NFoXDTI5MTIzMTE4MjU0NFowQjFAMD4GA1UEAxM3V1VT
+LU5UQy1OQU1FSUQtM0U2QzNCMzVFRjE0NEIwQTc2Q0RDRkE0MDgwQjhCN0JDQTND
+QzhFRTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ8U9UcRO8+DcmIS
+WE6ecjKHG85oT9mA7gSzjKshajRNCTVkPH3qwnkLv61kdoS0wOE5+m4mGg9VDaqc
+hBNNjy/1YaXfBBtRLgxqKcQv2sR9byOIDcsMX2M7xM/zXkbQRm32bgX+SQV94XtR
+Q+PE7Wsc5V3hvBNUu7LkuAlD5BwfXXGok9GXOabcRLJIT1w51bNfr6uzGtIEBFll
+W6wXHWHuWIwSvAtL29z+zdh2nn1Y8eubQJ3rQtijCakECwZ8x1NC/s1bVGugv/yY
+rtixKSz85+nYc2fL0fGFAPM7n3eOh/x48c10l90CuX1VJN7ikiH5XA1IX6vF5bnA
+EFfN1S8CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFKONrEbPgLHaBVxf/V6y/evnyZ8mMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAEY7t
+YpyvIVWmxfITJvf/uL4tLa7MXl+QT/TRZfWlzAQxF10dntb5Plejd92WG8BMsXY7
+KsQihebcsEHTiCKs1shhxtxD+tFO9guANlJSAayjW6fCzM6KgUZERlB7XE7eGPqC
+uuQelcnJ/xIEZA1aPudJ5GN+dYYlYoF8bFua1G3XWVIljDtrpmT87pMfJAXRJWX9
+ay1ANQHuYdygQuuBXXVso1adx9c+swlfdZo6oXD6nDzfrfPMPXjsxOYU/BfnBvEB
+oXgpi2zd7sR8jLUa6gAcEHlqDeI1SSb8tJBUsW+nbZCkc/Q/mLOnKFKLuxm4BQk5
+AX5vgGLXClEEgmYe+ug41ptpY58u1NnA/iJHpkKRNaHlkPVJgtwVV/Hub+vV300N
+zdSR18oZmV8UhcCP44qXak1w0n018A1tCPv645hFmrt23El9BGk50YyTiuDt1AHO
+VuAWQf+xUpN9a3bBf0rqIZDcIsnC94GuOhZU7PfaN2bQn/wuot09WregwMCSl8I0
+LlrlwlNWu2vImXZyKw0IdR74IWHbNKxs/ttPNfl32UwcdghM2QAZniwJfy+EoCM3
+CIXptwRHElBTSu/hiOe5YbLCN8bTQFEiAosQiA+QRGBnndeKdUy7SxXQDd6asLcE
+9KvLF8ArUN4rjAOKnKS9iV6aCYERCF0fwGygtTU=
+-----END CERTIFICATE-----
+
+
+WUS NTC NAMEID 3E6C3B35EF144B0A76CDCFA4080B8B7BCA3CC8EE 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAqg2peTRE/1nWwAAAAACqDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzA0NFoXDTI1MDMyMTIwMzA0NFowQjFAMD4GA1UEAxM3V1VT
+LU5UQy1OQU1FSUQtM0U2QzNCMzVFRjE0NEIwQTc2Q0RDRkE0MDgwQjhCN0JDQTND
+QzhFRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKvS6GMfg36/FPbN
+K/aveERBAVeGGAhCgHeNmuVfcopzEWS7iSW9ZF6YBsx1tVz4Ni3eKdMcV04ElVwL
+hZZiM9rHuayfM2oV88yI3fwK/wqwvil+tn3+8CqQ8skecK17+MLhouqDDPB1RDAi
+CrkmWGZWlXOQOXf0BeiMwZuAFCNUeE/fX19t3qhsiSfsRA2Fw94YJPjYeM0LHaCM
+Q6IN9oSDKzuPR+n/quttXmeEqOh7L5RbVOywBWOxR0zkdr1XsEaFShRAYP7qgyQy
+TlmjlXCpZxCSS5VYct9101b916T4wtdP787JTIH7P3AEbxJ+Bl7bCX4IfnG/DblB
+zy9kxlaCJ24H6oVxuWjJr3r2fWS6fMQhbkmRJ+p0cxd6wXVEE0bjinXhDnVTbnWm
+NubdbKhKVYfTrxFSaj4R+5VKef0/AjZktuaUvOuIIO8eVFO0Dc/7uF3TxJcw1PjR
+WlZ1PoWX45lEhbAxcvlWAX4XqlFeH/yuoIGXXOw48RCHSKV+wp7ShWsG3kYE0d5E
+0K3YQoliMY2wAnHsXNrEn1bamG3k3basAqo4iejujZHyWOvNlHokF879ZNJ1EnuU
+YrgFIiG5ibcZWvd+9m39ZqlMZvLTe1EFRLIJGdT7YFY4bUbIpcMOtmRKg5PhiJw+
+BCycbJ/zI/fcaZIuTN42Z1JNA/3/AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSuelNLFzEn22K6
+Xk/TRjjD3NKjGzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBADax6mYe77CTY2ONoMh3/74totb687fEz0RgeFsAJoHH
+PNhRTXlXhROQeMNqoJ+XMdLHfR/Hq2DYc89wPoUAZ0c6u981sFfX7r87Xd0F6yoG
+VeATR8+cbk65LX7fFibxouX1ZSmtBvXrqhV8+2xb6XVXrUl6DrLNJ56V6I2ofJv8
+77a11pAh/skSjNO/RnocD2wLR3QIYBO6/BKcqtT8TnwgzDmmCxvdY0C/oEZr+TOL
+qxvRcegLve8Tv4UW2zsJbss+fT6x7cdbdLCwm4HUAttSj1RgCxonYXiLKma1WYj6
+IY6auPeAOe4M8RciYN+YCKWvtVzCfyp4TOnao5Djvvtx5UC0+qTbNkbaphmAui0F
+YYgKrjYeMFNCj6ZrSwY0hY7qH/m3JkqVavnM1fFq8RhF+P/fYs7ZMHtm58G1km98
+XH3mPEq5YapPYSKm0YYYutJw4pKzb+lNIQp2ESHSjGB9bHeJqyTdwKxL7b5CnEoo
+418ISqOz/nEN7U5vjmw1Kfl7akQa6D3T5NJ/1Pj2zxgyEtDyFN42fC10fWx/8e0l
+6NFnpA0pQrH82U81RUvAIAYruVdoFC1TcdTYRh4tLyQnpeHlrwLSn6XQGonhHELt
+jDpKS4xxnZrb5pynqID5B2BCFuCukTBzZnoIuTjOLqZJPLXQ3IOvYsTaFYDw8nvz
+-----END CERTIFICATE-----
+
+
+WUS NTC NAMEID 770E974ACAF0DB9AE67E7B6F5D410F9ACE2FAD65 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAqoR49IEqgkRegAAAAACqjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzA0NloXDTI1MDMyMTIwMzA0NlowQjFAMD4GA1UEAxM3V1VT
+LU5UQy1OQU1FSUQtNzcwRTk3NEFDQUYwREI5QUU2N0U3QjZGNUQ0MTBGOUFDRTJG
+QUQ2NTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALxRFMZtWzKyramk
+WwNCDfo6YI5+ykdsYFon8rcJxmfZ0QI3WiakPT1giqfAUj0untZBdVOmvI4iohVA
+Aamngdl1L/NZBPwrx/tK6AgD6TRoFtIje6h/yeIKTE62Qd+o2YHHKwOE8zaY+hWG
+O78GRXE0FafMuWHKEcqFM9ePhv/IPa7tKbkmYaDNIdtrJauARbyPwEot/hgmgtR0
+cCbeKwmyL9mmeSKLPyCWoBaAu/OqlaEdU76SYrnbtUIVIqzZIzNrPsGcd3Cmio0u
+2jv7uQN61PnBKdobKWigsy8YNBGITpYPNPWDvLa3hxadGp5sSSzgPTTI9j4fAnoV
+YOs3btZbl2C+is5tTT2XxPTHZOC+EHsqp1HW/XJJg9WdYA9q5y4Y4iJbJVWW4k8h
+gQmwxTm7FW0ztKeeEpIcAxz8bn7m/seUE+FFRNYPz7in+9WoygT/jlQcLhYQ77Dy
+CZr/VD1180DlkVRlqFFSYTVktGHbmtj5/WQiKWHZOD/zFQKgkKkBOWKEoe50K2aI
+IFJJlqQ0rzlrImRn6QEiqXNpJvdPvwOw2rHjhMu0fCr5v8kAKeqdqWR6s0Dgmqin
+jQgy8nelfaBzUPkE/ewzfmm+xA+Yww3jDchYAJErmAE1SImxcSTWbnpd9TfVibiZ
+5xoIp1YTfO2AOgQdmYJ7bYzIdxoLAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBR//G9sunAiJyd7
+TEpycyjU1JuetTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBABLzu3YmNbm7BdsyWudv7u41Xg4Oa+CDtbB6EafBgYkY
+diO9e8SOGfzPjlTWJQim8zJ+tpAd/gs2D4rs9Ioi1KkiYB8xBwx0s+Y0HShcK5+r
+ReBBvAFAmDa5QO4gkKj6pzIkwKXWeQRWbhEYoBwH/s4E1q1h57iXKaYFkmexGYnD
+RTkJtv5mHMtUa2IcxE00wuRXznUE5wYcQHSrWqEMUp2+oczmEs/hBvUTcKNIXrbI
+EpglPpdJghyPly5VPbao6zzHqyYirlvlrevaiilavJ/BUGK5b318DxeZpqxIXs+q
++GTlYV+kp+NdHLeOJ7RT88M1HyhTIPT90tJXfIW0mo+sXEisSfDn29iVKdXNDxPi
+zhSqqvyo6Nx2zXtQXX3zusWAgOHqYLej0AobjwhTm5LAH9/9LbLpImB7V25CLpVb
+NhuKrTyIyrH2PlzLMTlY88VOzG939+j0J+a7OwdJ1OFAsnNA3dOwuola4zheR+iQ
+oyUVLU5FC5ibl0zJV24B8rkgx3lEzMMdGUHQf3+XtpAA5UVRSsQ/+66RlyLTVQei
+Bq+vCWUt1yp7M11sF4MJhcmg1HVWImcfa5KYQPpPLvddgssuQnNKF3/HISxVQIZc
+w1uhtCRo8FCYH8SkoC/FV41k/kUfGTL3XjzXwcrZjA/7eZQz39aAaaSTfN4dWk/N
+-----END CERTIFICATE-----
+
+
+WUS NTC NAMEID BCD3C503D39E51B0C50489E9228E984A7E63E303
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAARZ1k3gJ9hkpWgAAAAABFjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDMwMTE4MjU0NFoXDTI5MTIzMTE4MjU0NFowQjFAMD4GA1UEAxM3V1VT
+LU5UQy1OQU1FSUQtQkNEM0M1MDNEMzlFNTFCMEM1MDQ4OUU5MjI4RTk4NEE3RTYz
+RTMwMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOovWaLwZRrLZLXe
+nyNRDZoxnXx3juHQ0xgtCj0iftjEaOHEWPnIYj6kNOCrDyfKGuMUr0lJdMsfhbAQ
+fOIvDfDPvFfxj5s5uIE5nuaZqAvLFNaG6EMrTkWYs4mjPNuB4ToOMaVS+F4Ki7wl
+78T9KjqdBRppHg5tAWxT8toiJ5mnzJ1fE0gyAjaSmQWfjBIHqm2cKPsT1eMp66IL
+tsR5ahq8QeIUdkxi/SaX0vwZtnbh6tbVqO73IQvUMK/RMmbS2tS8TRJxF0sPbBVD
+qt1th9v5VR4Ccn1qwOQ7kW5JjueeByznclaWDORJuEXvOBPpz1IfhX9gFDalXaK/
+DU//pWcCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFMo41EAS7Xfkv1uSx3/m5Tx1PhI7MB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEARDGr
+lwk42rFUK2W6ORlU738lf6gdiAGHFrsCh749lpmHWcYPNY64sKrpSf/BnZwerSTZ
+A6imOZYuUIVFriTNyCUNYZwJNVLiou4kAV+ObhGQXDPoHCIeLdgIf5/FPhN72qzO
+UR32amvfgTU2kR0u6FNNVSFP9nedji/+Lc8P+cxG23K8//KaPscGsaVR4AW8061/
+rAIprd3yfNJeLSg3trJEZfPlRjo+9vQxMhSOejE44eW/1LAKRp8eSRDEaOEQZQwy
+XE064LtsMfWHVGWCSUmr4wFl2vvN6V3oxDZ9UNbQ+6yNxdp2+aGg51fLKVqIqeb8
+4+QlKpT8uh+W3TrqgbIFAVuII/0ZLsxh+j7SX8sau8mBw2cUhcVk5KJa5awaZbI8
+5cKU3smPyFgMWdqgfwXr/ko4THzxAgOTCydUuAmIN/O0xVsqwmVW2QScJP513Hp0
+yH1Uetr+WmSDby6b03aUCA6ED8nwKi0Zj1rcXafkkBhx3OnRE7I0ZamlCZKHkNX4
+Ik+Q5IqCI8LmC5LXs+Y9QBvT4EOZ0j75IWVJ+1ZW2rfcxM+C/F0Nkqz60E3IsLNE
+xjNp4JlCs+nr009/eaN9AZwi75kVzAtxjHa1T1QPbO6w3Jv3Qza0+1w5bKYcppHB
+HpuUJ/5f/DOCrwr26hc7ZyO6TT1vtkICXh7Xz54=
+-----END CERTIFICATE-----
+
+
+WUS NTC NAMEID BCD3C503D39E51B0C50489E9228E984A7E63E303 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAqumARufqzn2KgAAAAACqzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzA0N1oXDTI1MDMyMTIwMzA0N1owQjFAMD4GA1UEAxM3V1VT
+LU5UQy1OQU1FSUQtQkNEM0M1MDNEMzlFNTFCMEM1MDQ4OUU5MjI4RTk4NEE3RTYz
+RTMwMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOMMiRFrFeQetRKJ
+FepuTAmuhZIUECn1+lELYwPBnr5ZsV5VdtW4v7C64d43nJVyETCO+mxTcj65WYR/
+PP14A55DebKK3EkkQUjxktpaKmaHv9Z4QzMwK0IaFwje4eWBxc2mZCLIL8PMDajB
+vneHGVE1r7qF3LoAei9kgSLzXvQcgPj00p9h7yDlm8edOovCfQXxvP/Jp7iz82Tr
+rEw4OS/F8SFHuWzZTaFfpgeOCFkCjMXfS6oX6kGy4q9NyRY+cxYAYxVxP0gqv+ow
+MRWsiNlSnewqvYl1Nk6jqgBb6vd4j2r7RT4WHm+2/0aytxvHfFryabRs0qFwXKGt
+uodNiWlqnavHi48F7TYBbEitHUtvhR1hnO0oUdaSQKpaq404QM13+e9Tex3aflX/
+H6gINRDOyGbNPlL8SoxjKMU357l2RacV0ahBw4CW2ofRT0u5tPMoEfZiL2W8jmJj
+8+ajNnxpdK3WrSG6Kl2bE/cgCaA6m8jqi8Jvua3cnjhdkBsEs3Y6AUluv65n30tk
+6Nvc3rZN0m5RSkzdcrJQFpxYTObBD46qqFqQgOn4C1mPHxwkjhrtniBubwRiPOeA
+9rYxBHFpNzzA4YYdy2Bh3V/JNnx/l5gR80IyFJGuzNq3VPsW6ubKDNcKDzaw1pG9
+JfCnb/DkwvV2aSJ2czMcvXpuxITZAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBS6+IBf26Yip1EZ
+O1iOATxHR5nyCzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAHT+tUgt23XcN7A9z8NODhzE7hFd+cuG745TVlPtiR2q
+z+0dAAyI8xoPyhEp1/6x/qdSyMEM61m3NKxJEHNQk5Zi72gVVRmIkAFQ5oQE+IjT
+1kpuEIOOANtVRlKPggFBlYyIuncp8+AFX3HlERfyj3uSSZbYRmRjtq7kgcGSXaA3
+Rr0B9AsgFEdCYHINkgQY3zqLdo70pfarXRj3EpOUMQ1jaXqiJup8Vp4AxaEqaCOf
+2gRYJFnnGfVgnZEPowBzGIYiplajE0RYjp8tHgjfA6hqDBUveA4f3TUz4i7MP4o5
+dY35G+vlueAnt5CYQWOli4ScHMQfxoH+vmhcELwyNG5G6u0wIZtH+7qTC29uTs2o
+f1W+WSNb68J6qppiV5vMQagzKw+7Oyi2lmnEGmLYgzN673Bzo6fT7HzyNoqQPhXb
+8IStTFkmNMX1bJ5DH781W4Gq6+BvKhAINfZXAh8VzWh2cndH3kEKa5Dp86fT4R0a
+u8CaJ8WQ0QGxwv6K5SbsDB3SELL5faT6Os5HCgcEqTNrA42v8hSHsri+P0Sh6Bv7
+SU80TY+1tTdCUrSaTtczThdI4zsZYuzOslPro2mW1qU8x1CSJZwcndQ03di6JDCm
+nbiX6WgU+Pycy9OC4su6JF25smRNrVsRIJIJTUf2nf+0554UhLdmfPTqaNPSEuob
+-----END CERTIFICATE-----
+
+
+WUS NTC NAMEID D659BCF0AFFF2284AE8AC274C6D91215AED2B62F
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAARdycqRXgx04YAAAAAABFzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDMwMTE4MjU0NVoXDTI5MTIzMTE4MjU0NVowQjFAMD4GA1UEAxM3V1VT
+LU5UQy1OQU1FSUQtRDY1OUJDRjBBRkZGMjI4NEFFOEFDMjc0QzZEOTEyMTVBRUQy
+QjYyRjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTNoHIDegLfJApZ
+cUH/7kMpwZZtSDZOQHrw38RmiD2bbh6YbJrL3NTmy3w0CxEwBtBej2r4b88vss51
+XsDNXhAYcV4IYnm4GsfT8xlfF/H61ZO761hdSuUNGuE2N6/KpTc77oNm9/nsY7kX
+Wf1HFl+7nrM0dvuqapVbMxCdOwVUFY2TqRFyVplO9v7NnU3M2h6+gchC9objFJN7
+X1S0LMJBl0+Gb4nzk4/2nfDI1zafV+H3jnVs0WbsQ/uGZnXP/qCNUTGIz2tAUEbu
+K2y2O7vqE4+JXTuQd7RnnsLLw/AvhShvp8B+xY0cgfgwNnzVP4x1Ln/OpadA7Q3x
+y2mAvSECAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFNmQ9KX434ctNyBgf7b5KZJw3y8iMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAiJdf
+EXAPxVUES+v4xB5AQVNL3+9e7RT4uwb/YcaFUrfY4mAFvBI2QlozaQRzAV+hglhC
+wM98oxMWvxESuvuBg3rfkC8bR4hQwFidWjqXRhTRXJkLy7Nz8RTPjjNEy+7J5mJD
+lbJV2yMoWilDD/nc6HNpVT1zIlBBPAi0De8ifkhQnwbKFD0H4mJPX/evu7/XdvoK
+zSmRu9hN35U0DavVh/w8WdyCJ/4dwriCOEYHtsES4ml5dxbM2CPNtn08HXTSU/re
+7bqeCkZiAnbiMJPwKZ2fS9DF1byByeuiuw1cWA1WZyWoGE0IrvdLfYshFB2xBsoP
+lTSHGP6J+Flu6mM3FP2lHClsICFD2JyasFz2YCc3FIFC6hCbUAr1kyr/Hk0wVakp
+TF+lHB2U2FKHWtGuV4wFvZn5qQePkJy6MDU8sn6/e20jvjthbb869pQ3jacK8E61
+dwvVnm3JbxC/rrFuc67dh+t0Z6X6w6WJ6RwT8/d+JF/gakO2jp4CuMWwimBRfr6w
+BZ0AOd1f7vXlWOLQ0im0DlkxkdL0VAcVdf0qzEi0svbKgGPyqj+YjfnHDZw9nUA5
+N6jKkuI86Ah2D9Ot/UUDuqnYn6kToK8htYgCqGb43Y3WI0FPS36oxyKb3F5SazLu
+euWg21bVR6hCAf+us2sQ1fBCS1jC1emRT2mhsss=
+-----END CERTIFICATE-----
+
+
+WUS NTC NAMEID D659BCF0AFFF2284AE8AC274C6D91215AED2B62F 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAqzHBccmTweoLgAAAAACrDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzA0OFoXDTI1MDMyMTIwMzA0OFowQjFAMD4GA1UEAxM3V1VT
+LU5UQy1OQU1FSUQtRDY1OUJDRjBBRkZGMjI4NEFFOEFDMjc0QzZEOTEyMTVBRUQy
+QjYyRjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALn3ILfyT4Ch+Roh
+u6QjznSj1yLRZMEca8vUCs03xAHph2LB85o1UTJiRBkqW2Bd7PX7bjoniqc4FmG9
+/akc6G9EjQTquC5QRE0Qzco2vZBWLYi0ymH8VPOveEi5h7BnD/4u31VCTqfIQ/vx
+dwuchdftYEzC5Z1CjbBjgLOcMzK6uPZhkKjbLeGJv2gppPNJUU68b1OJzoS1PnSm
+iWlIb8OTvU0I+ghbp/ylleeZBWMql1FuVC6wQfCEycwselvK61CUWjahD3CXweMe
+M7UOftGN69ANK4E4EUIp0xR+fqdh24+b6i3CBT/RV2AhmWARD2HT5DR4zpiQXHDq
+qsqhUYA6sK0wyXhkZd5OmnNKCf+Ya6ZZW3ecfR4wLvJLdOcYws8VikB5iF9pVVyL
+Znl4Gf0mkJEgLGKQLppo9Mma79SdOatlG7psLMO63E884pK5y4bxDb9PMaBgFToU
+tLzLxcD55KCquxCvx8a5UD/JcJtVBgQlAyyXbmqn2UcBriA2u0G6PKZ4um9nWmJh
+N9ZHpAz9yWbuJeZ0psluXKuq2mMX85D+FTqt3mbvlMieW2nKK64P+aIHpnLOEqVL
+k2h65ECDqguZAWxhvhjIOBpOXDjWvhsbC9V2y8Y+p3PiNFfFytwamaLAHm5aDocx
+LT3F0s5m2KVJ/wAkrVBMDsqauf1fAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRN0plCjSE/PkiQ
+Rw8VSPLstft/aTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAIqa9zJlKAlKSMQ+hQY/e5hdmx3tLL3cFFlMmkHIQYmm
+h/PpwJ7KnXI4LvP34QJRNYLKzhu2dA/HHP4aradafzXFwPgePwzHGmXiOvnW9cIs
+iLllyRsVsOnGmxo2LzsbJAVQ/ermOykoc+wj0rY0UBu6NVmCj1/JHvhl4Mq7HEIe
+pA4kQ/jf1/mXhuChHLv6STjz3TgQDp5vOjVh4iEdIWZ3e9T3w5IBflLCD5/nn3lL
+J6+eJe/hbHAwJJSu68oA74uZS/dpR4vB4/kKZYYYy1ViUjRRwDwZbaUmloFcb6pn
+aSzd9gUgFi4Q5EeAYUuWKHc/TqoYWnHlXejDes2Zo95ygUfpJBdcY2zoM9YTDWxC
+0p4by6BFDGk2+fBt/YnoiltNC6tgXxML3ngJd8mePO7QepiA0DiSFSlao3Cc7gtL
+jWPkquI0DA5iPl2VI7Xah2y/WKZFYXrlLb0DH2D4zZSfDU+rqTBjX3X4Th3HqIK3
+D2EL9obr/CxuqnXLmEVwBlOuEMmwQlEAbllhe0b9BMdfQbMpNRCvGk9vE4jlGxjk
+LWv8BUYeRlliIWqbQRHthxMlPsrlZRjq/5XmRhBx5hWwSRulcQPFurHNVSidpDcU
+62nzKvMZSEoJ9Ujq0V0XjrgApXBeVMnGEOoI8/BYUkvbP2/ls8RVkqi3cgFJlcUv
+-----END CERTIFICATE-----
+
+
+WUS NTC NameId 770E974ACAF0DB9AE67E7B6F5D410F9ACE2FAD65
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAHQMVhrfQirAqQAAAAAAdDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MTIxMDIyMTg0N1oXDTI5MTIzMTIyMTg0N1owQjFAMD4GA1UEAxM3V1VT
+LU5UQy1OQU1FSUQtNzcwRTk3NEFDQUYwREI5QUU2N0U3QjZGNUQ0MTBGOUFDRTJG
+QUQ2NTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALlMyx1CGlMpkDVq
+VJiuKvBxT7off/0+8J9AFVB+QgnENCSdH9hRSfBebtwJceNMKAuNMo67HOV0Y0Fo
+mE7EStFZNRzlbTK33i2jz9gGmDDE3IvsLzvfh9J3FmzRcg9geAocR1aUljpb06xT
+5Y2AxGCvLX/boHx0QCwEp8+U48IsKC+ZD/liScTsF5DIHJktcR/+yBLhjUaQMilL
+ui8pTjfsT6ED1WLyXDJCcTmTl6EkDASrdxhcWIPqqNqHAg4+mvEePSQ7qnmFzEKl
+aJn9cKfV2+pgNGzHmANJ0zc/ayBdT2TW7Qo6KdwaQxZOUVyxBE7GTMbKgaKC4Nd+
+dn/o39UCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFNXo1qbjCoF+9OMCntVRnSj6+uZpMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEASQwb
+3GeZq7XrPAZ9LO/tYin9AYVPQP6eIpDSysX7N3rv5ssM7muvup1VwSV8z74NWCtp
+DYvefMWMtnLCS6bHPq+wqZI8HTuaw+T7aJSEgU4dRQSu3wdw+TaNwfo+0rO+WFvp
+mBWRE47CIJBW3lJcqZSXB8KX8/ZjPoDBTC2bwHmAzIo9+jfARn+0246T73OGQoS8
+OXPe9Qjhpvqq9xwXaWdjlsVu24I6B0gjG/ZuMlaXiASYE181ByCh6gpBBPDV8crF
+5ab9rn1qfZ9uzVkkLeWR1MxV+lBY8knkRHLNSFr0VsVfxg29/ZKnV90L4Hm6e+KT
+nETSDFs5KxVP3rtB2Tx/myJIJxbuBOxNbv+VkxZnqlSXiDP4gAtA0+lsVMxm6rfZ
+vL9ieupAhIeuFzmviceMV+utf01HOv47pL/tteNRoV5ycV108//49crjbNc9psoj
+ICsNJWVCX0hPo0y6J37fy3zcVMBpsZp2BcDlOcEurmBsu3uf+RomAmUgJWsatLeK
+jLzhFSsbGN+hxRZLX6/Z0YQIhmeYgWDPkTfBWI+tD3OdwvJdyrsGPe7HPFvGHd4w
+4OFXqDiZ47Mk8yUkjx4KXOk88PWnf8J1i4fta4yHjaGjZ7PTIqa0iFZqCNzxeROe
+rCMN+nluNOW4WPYkUoTogcMeAid/VVOevG1g/ug=
+-----END CERTIFICATE-----
+
+
+WUS NTC NameId 91EBBB7C51FA7F78AA3D44D3425B1D5D23975CAF
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAU+jYlrTAJ9KvgAAAAABTzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDcxMDIwMTEyNFoXDTI5MTIzMTIwMTEyNFowQjFAMD4GA1UEAxM3V1VT
+LU5UQy1OQU1FSUQtOTFFQkJCN0M1MUZBN0Y3OEFBM0Q0NEQzNDI1QjFENUQyMzk3
+NUNBRjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKuyyKGVxf58bZRg
+iUfalyZgj/mwgY2+4LBQUAVJ8aJmelU32AKQEMrdwXb+3yBvM9STtmIwj3IWpFmW
+EbR5TSSeQ+PjcmRS4MMDXnweja075+ZHAfiEYY6AUmuKuRH+plomCWBUHpVMhWDj
+vaUzV1bST/RhYK9hLGJcRXD3qvkj6Gd3kjYlUHmoRVKtZvUxHO9+a88gwpAqIaSy
+nT9dDQQ+pYkRIp4cycXxxG3UFyscA0VlzSF+qenh6Ij6kDF/3E9ptg4UIGkfBE93
+m/kci2KczdegwRmJ0v6ExMpNYeOz7r9JhAlaSaefB31wqimfjuS2LNlXzKC/+w1K
+cY3mOkUCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFA26rbhnijlJUpWimMXOPyOhddsSMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAZLd2
+C07p9zCZzboo6u5PBMh+SuACjy42+6aRup/R+9KCVaMczZiYqMwc8mzZqHZ5jbPg
+eJ63CARIYwTmvO0KXg5LfGshAFZ61c6PaYVtRxXggwy7yDQbkTeYlg3Zy8v/WKJP
+xMpIFY6HE7YBwAvweSdIvVNllvZ06qwC2+xrlirud4IIUSssU/LUlXevnu6KF4+Q
+6kbqV/GKJt9GMN2D7OoRirFfQMJRdIXtzNgC78fU1oq3AJBc6RoVzm9gccs6rvM9
+mQRKqnEeEiiZiktoIuiWJSxYsjO5tQCemQ+Uiyl5GLFp0AcM+dzhNBRsB1Z+N8rW
+vYqObDWE/21HFv5E2i7J2BUtCxMcAYGDAmph5l/4s7yJv3AYZrrwWJP+Nl6JKchx
+5CgbBiOufhRqYx23cde9WLnHzpjWo+lIM8wqVL1+rGbiG8d8W63HMT7jYAWnQnNZ
+qsdgt4q/uzdmNmFToQE9vrfpE+MxWKVubgHaXqhJV+4AceWFdfvLfZzZd9BgUf2O
+L4wSZ+hRHqMusK1V/6u8TH8/UBYmmGAZnQvoB63zW2JYVKA0n9C20Xf6cuOTSDdA
+tTAwzXYhFziOwtz9H3ybMQBI34n4l2uDWa5+32VuFk6/I5DPDPazYVfBLARw3w9W
+JutiNkp0NcCDOqcJhIP2lgeufNN3f3udiH2yDu4=
+-----END CERTIFICATE-----
+
+
+WUS NTC NameId 91EBBB7C51FA7F78AA3D44D3425B1D5D23975CAF 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAqmfXm9l1E0MCwAAAAACqTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzA0NVoXDTI1MDMyMTIwMzA0NVowQjFAMD4GA1UEAxM3V1VT
+LU5UQy1OQU1FSUQtOTFFQkJCN0M1MUZBN0Y3OEFBM0Q0NEQzNDI1QjFENUQyMzk3
+NUNBRjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK/gG2izfHM+ilJe
+JV4mODMSb5TQ7bGtFYkICg+7B7dNx6yhMmRMootPrpbdL7aozRVHqmIuCMXNj/Hv
+OpBOtkP7o7ffKN3jtbIl08BAqjl1HM2Q64VikWdDey5vtE498bky8uVXtzM8xzs8
+Y0l58lAwsUzYHlVuPRqYNGjtNbNrGu4JPWLkykGQy/ZqBRNS6aXMQeKwGOoTcJeP
+xurApxeAe/GgM5sASbJSyk33q70ZZ8BvLee51vnDWCA+W+W8Zwi9zD/muzFpyKrn
+z3IYmdxgOa4M57ZSXuGrlix+Pg4Si4tfEH3FDg/Gmp+n8tztbMsxssjqh0s1GBT0
+qJA28juQiJI9otxCVAXMoUnuGl1kbEE+42JL8VHl2zhA7IqDftT8qKCLZcpEAFMn
+DCkEVNi056kCh+DEkiOm6WVZXRrbd2mLQrBCRIXGUWUN/hDG6IM5KmemYrcggtby
+LUfwa5NBnhP0WYTyzMf/x9M9ptJHw44m2r2FFIExIeBIZf/VAipou9xQ54DkWoSC
+i5oC/Ti1F9RyuRDnXhdSONy8uBpbuVHQQCFeSpaA1I+fBYRTvQTMD+xENeXH2ECj
+lal7R1d2+DTDwF2EBhSvK2fIpBTCpYGudQ9RkNRbYvB0XCxm+ErIklcJmN3a1bWo
+tc0JIcIkiSRhTJh7wpbRfRdS6PsNAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQ0GZzu4YJP7iyz
+gyAMf/T4sxBvezAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAFNL70Re3JCaFftJFuK95ngGZYBlz2+9jffagX3unhdS
+frdjj+Fb9kyMxvE1E69kBZ+RbxojxLR8HcT+vOialWze9J1o5iS76O3pCPX9+fK+
+XNYI4/e/PRLx8XGijaOc4qWnW33oNMKu+ur1EI6zGWmsPeTBn+9pwCG6OFuOF1lo
+YEzG9ZledDpnQNVZ4DAsu7kL0lfzZXVUJfV1zi0WNQ9gwj5gfmQWmCNcyL0xqB0a
+yNSKxRPiye9VvY8ZeW0sao3X99umaFxaWkEk5r+eZkOoHk+Pb0IX0PLbELPpbg9z
+bjnfZs6YaL2uTgRHi3n6ha81qBFfigWjEuukNjbSpQ+hqOZ4ogtq8W/PcjoWTdAT
+LMhXxhIYf9pMYr3F1hVGsaTu5UnZIZIhnBAwTc15/6FsIpQ3D4KA53HvdKhHx2h4
+SWj4MXlUepxe9fFHn1QYLy0QtHGUjY0IYkz8lZBAmkt/2lPhUys7YU6AkvxOHL+0
+Z0OdYDISPSm7RSla1+d16sJCAF2Iu/RN9+T4btpy+3BYb4ePXYWXnb/aFpeQKRHu
+uBk+PjpyLr3ciYO7xufwcUMkzrWveE5Uy8JLuKW0zw6MpwkYqWm+DK3SHihqmSU5
+0v0eh9StZi6PGS+O51TLbP0pZPPFe6EpVflUsnf/4pXQciiD4Nztv5x1TPJgDn5W
+-----END CERTIFICATE-----
+
+
+WUS Ntz keyid 022cbeed5d77060f2833e9d5376ba8bc308cd9ba
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAtSARQhbVHURTAAAAAAC1DANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUyMjIwMzIyM1oXDTI1MDUyMjIwMzIyM1owQTE/MD0GA1UEAxM2V1VT
+LU5UWi1LRVlJRC0wMjJDQkVFRDVENzcwNjBGMjgzM0U5RDUzNzZCQThCQzMwOENE
+OUJBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArvWKbkjy1Rz+fjyO
+2KragJAv7+5PVdBhqe9EboQF8UuwXbOLX7cEMMOhooLVlCHaW21j+eFUYRphYSK8
+/L8Qs4Fs8+VF1UY9M2DagP5vN7Xay/46iYVinbD5v2SxhMW9JIDjQ1GmQgUAMVxi
+PME95WGc1sJSiTI5TjyOEbi5b2N635eU18VCtMvLSXn8IcucoB1hJUA7PuTifjAk
+1B7T2r7wIZ6x4unrWI6+7AXayLeHn8oA/5z94kImkTCj5PNMokP0eYbO1LskC7PP
+NRVP/8zsyLWfRkBEH53QTvurwS/oljJ0x7WJ13WbpBgmCb5grIqYxCQ1uRpcUYJZ
+TC5AfkfpJlCRP7EpjNxfX3rmYtxwwO6f9uctxo5h+s1UNnsrDX9gfPZqCH068Rnm
+bQinK5x50lvnTEv7qWmL/AR2kryLrnIisnbC0SsSxqLUOGweoZXkfCiz2Loydym8
+CIQT3uW3E4+nPIa5gHCxpHWIg4d0oGzqPExPh2udFbbIO2hzLr/c9+tMyfTnwymu
+XopsC10v7Va5N2yBk0w5azjVSr1be/5sl7ur/hFNcD5RgDupFSRRzOSqoAOhAfUF
+jz7u3cNmseanl6QfOeugRKyFafUrm8uZ6/XWRwwbxKu2CzZmSV0g3gWbe4Z3I8mi
+NH0hTeTBMfY9hiOWRtgvfdb9CPUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFD5yRuyWnQU1Vktv
+6cmVDEqhfhpjMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAiI7Dh87VdoebsA3XOBC6wGCFmX4K4kezHZQS3pDgAoJj
+SV8ad2WXP7rbKJysVpJmFZC2i4Vof543qxSwu9AHkab2PIdGVmFtLRtdEQV5dvXH
+PXNqqstUjK8CP51JRY0fSvQUlNO4nnyR+tX9pRU/ATI8MWrgH6WwyWURvH9KO7vh
+Rr8ypP7tZg4l0HJguhClTgL7N7S09GCF4ZgDUDRHI+qJn6D+q9PMBiC/A4Yz3e7Z
+SO5BHXf5lM7YGQ/y4gFqpb33xFLrbuDCw/YmNeuReugbla6EKhte/XBFaoivdbnv
+6QT4UHhOr8lhRn581kWCq5drBpATqMJRZ+kbuCziQ/4GArVDKaAhuhAtBInO7qzx
+08tlIlmlRhEod5pVzx9qBudBOOpUYyb9zY1ICRF3s9z6x/hhf/Agl0ppqjWib/Pz
+ZF6sLwXBYHb+tij7ztZScEV/uQ6q51GPD7U3GM1oFLGgQX2zPfZeYFK7YxTLQ4+z
+K4M43IhodzbwI0LUS2Gi6dhm0Nl2+OOembLqohz/O8ALLICjrSpCPG0R22wpb32n
+u2Vc29I/RgdZKG6kx/RilwtogGG7vlGUvczAU8RptwLli4LLmASADPkRoEfh05yx
+s424hiV5nnZeEWjjVxbrDSjWLn1t8G5h9ecuftTAxmBp+n2uBtZAc4ne1h+rQj0=
+-----END CERTIFICATE-----
+
+
+WUS Ntz keyid 03d1cde438ea3db34d943181c1cd517d688062ef
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAtMzccUWdElmFwAAAAAC0zANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUyMjIwMzIyMloXDTI1MDUyMjIwMzIyMlowQTE/MD0GA1UEAxM2V1VT
+LU5UWi1LRVlJRC0wM0QxQ0RFNDM4RUEzREIzNEQ5NDMxODFDMUNENTE3RDY4ODA2
+MkVGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqgU55dr40st3eeq4
+sgK1LpjBLu3i+DeMm6aa1NJHUNIVz8uuA4FuBinsQ8TAkjz1IOEVuJT0DvomXU4A
+1um+IKDXcjMSflt1GnjCaaJdGle+lT0Z4ixk33hV3r4BoNQrPRzjPvSIHjBUlT9f
+P+CcgwNfg1VYhUphV37+9xNclRODtPsIFdwozQ67hLIq7Spi062I+a05Jrf1F20o
+w0k212MKN1LQQncEYDfsRzir9dnWrRYt7lt0FdSExeQCSIVkKKXhnqCPEL6s+R6h
+HKyzsk/WbUsdL6D4tl+MW9nJiN2k3vAa3DgkEQAvZsH71CFR7WOFDrdEdGdVbAgv
+G4fdCBwJmaKSnFIzK8lZGyJZv0AXwUlJjeugFnugDI/crUdBHkqUv9YwKY9CcM0u
+zZjzefQRIb9OOxT65Rt8a0O2aa30BbCzJoL7JY2XuN4GWm6AKuMrLPB0gFOxUQTR
+9Tk4KXBb4wljXATd44nSC8QFfwjR72xsGKM388cmwCgMYjrQR+IzYK5UkDL6T1hS
+kA2efYY57Eha+0Rt3GfVvD1t1AZlCC0+S460SBo6C/IzWJEDjNQsYGhMC2q8LcYf
+UqwhXncODKw2ExTwtJKw+5Zt4HOngs4aQ7d9GzmLV7athJ7fKFfpgFaW+s8gkWAo
+G05dFI/PCAtLl7tIcYN+/pvARbkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCi2vk3YGnR9Gu+C
+krqHQataLMiuMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAP0Yst7WKVtYFU8GRxWnKMKiAmuBJBSDoOT93gCVt5Jxf
+pZVkxQ0q0s5ugnxqEnzVtE4Op+3ENaRWp1mJfM70aQpTAieAxsne8LyHtDUu5fw2
+KFN5g1GeROVEy/PSSZ0oT3SLu4YJTRtAZJ/0Lsqo3ID+ZCe1r+TxKu72ZasEJuDV
+p/YG96vwKNzhNb6PJ6Dm7lyEx7kgmrfU3NcuKTxhlLcEmKcxQdIuhGu60SZpw1KW
+UOZ6z7+xzsAX/TW/C6lyBK+8DfKQ99V+80QFwHXsM9cerkdMz+1AaGv6vUpXNOxt
+y2MtBfcf61TwRsi6yWGAFjfQl+LrlUtzU+hhRW4NCj64efcPuiuLj8AlQ4AKOBvq
+MNqZISAZYFwOOYtbt/JLuWt1+ww9B+df8qZgbBrRCNL0FqpCbUDrMFRo7W/7OiKD
+sT9IcSd9xvTxIB9arrQgBaSi34VyVsSYCX+Zdd8JSAFsMHABCg9UVdVMbs5Uu8/W
+xUi6CXw6sqIQ4NhgeLHDV96Z6m6AnBk59rd4yj43hjFP2kVYOk5fv0Xpiam+Ma3m
+MKGuRpFjpPHweabtwMc4gGNjlDgaS+3sMlZYFNimce9rFv26UCkPISArAIfUGR+Y
+RIFm5jYHzTbkuvgpiOP5zO6cQkrXRkvLdv5IJUsqCcs9+j85Hbx0JUiYWwru4bg=
+-----END CERTIFICATE-----
+
+
+WUS Ntz keyid ebb2f4e312e6529c4ed0cdb68228580ae5203d45
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAtWqvz7tmSD/ggAAAAAC1TANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUyMjIwMzIyM1oXDTI1MDUyMjIwMzIyM1owQTE/MD0GA1UEAxM2V1VT
+LU5UWi1LRVlJRC1FQkIyRjRFMzEyRTY1MjlDNEVEMENEQjY4MjI4NTgwQUU1MjAz
+RDQ1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3sGBNsDe1jbO/9Iy
+8XHZ+VbOEGa4BBzuCr+fg4tfsiQ2qeDiqM3bCF48ppSIAkPnBH+KgOphD+DvIJMs
+0Ys83gNAD1FSPATuUnrK8allFSop/VSLHzCrOUNtZ0FQLqkbJOoqbT2/ykMyPM3M
+7Z8OPrgdWp8Z1nlqknFTummbzNCTqymf8VDwR6daAON6DLvJBhdw1CrWNq+edOir
+XEzVZV0R+BYzeHHInneaW2Rfyztnp9vdl60hhZ/uHC9teFM8aJY/OwVOE83pM039
+FSK8vuI9ecBEQEVATnagXLYC5IoAdhAQHoNMQjxHoSjRpcTGKJuiv8rY2USqzDX7
+6zu2JPKfqr1TL9pSCuqWMoPI61pLVci17GoAven7nyvkdElkt0c9vS9ehxuoMBaF
+D35ndSbWilINAlVBxxKRvxXuTHLJu9l4W/x3qWbxFEFzCbwuKwCW0GBJNLwrKGub
+SALKYHs2qnJf0cYAmUoFba0bvWqKsieIh0CIJXw5ea17MJAhIjU91Dm8uNEA2qN2
+TLBu0wxxI955OOTco73wwlYPM50ASb07lfX+oZLc8DsDAiA5HEXD6l5lOQYKwfoe
+bWokXT4OL9Pr3sR5vtkD7KQmTa1d6RvRMzLFE0DF2SxgeLww3rqQR3CTbYufyHMN
+N35+y08cf1xReS+/LsaDlIeG6GMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKlsrKUa4u3f1XH1
+IjokGoUQib4lMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAl4WDZWnsWJDfXra2tXLkLbZfSgPAPzry3AxBG9bYMq7Z
+HpI4oxHmTBYIIVBSz9Gd3AzJWy1rcr5DYaHxAHOGiYtK8d4RuLlQi0QNhW+pCIcM
+db7xhb+OniEPXZQEkx/DEa05NsSKAd/kiVnJCNaPOq48+4JSK+coM3XMd7Ip125N
+gNynlPJfTUtc3JVyADrOS4NLd8q0/yoZAt7LxpAO6nofKl7Ib2rowVRUFVoRBiK2
+tyL+LWPD2xS/es0sSGw8CgX3iXkac6pJVR3hsCfgE/qY0wJvNZFcEYnfaVIbivwP
+h0Kj1CmsM0Ol6gdDruceq9gewv/VymPV1vlrFJH3RYLWmDk5kZrHE/FvvX8GrAkJ
+7WsQSZPR18rej14jerhcxjbT0HFHU0vqNONdN3UL1rBxp4CnaBv6ENOsRr2WIQoG
+R4q5uDTIaZuKXhljXFfaOza8Ai6jPqrgzR4wqf3KzKX4dDuHA66qq8h3hRX72u01
+JiMr3ww/LiAarMeDrks01T2USx4ahZ7m8gfs85sG34voVSx2XsQ9ibYk89otK4i9
+LL3akTkUEcWVjVRKS2jE1+/YBtDvYqMCQItrCpt80TCbHuFjcnY6SZERoQNGGy42
+P8nfrLgFFQILAlNR4UbDoSTzTjjJhUZnTDJ2pCCcAGR6NlDoPNIiBySeIkeoiLM=
+-----END CERTIFICATE-----
+
+
+WUS QCOM KEYID 79100C2EA35C4FC14BDE159B56326FB731D1D512 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAsCzvtkSfoCpEwAAAAACwDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUwODE3NTc1MVoXDTI1MDUwODE3NTc1MVowQjFAMD4GA1UEAxM3V1VT
+LVFDT00tS0VZSUQtNzkxMDBDMkVBMzVDNEZDMTRCREUxNTlCNTYzMjZGQjczMUQx
+RDUxMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJOt+cKqDFZNxEkF
+yEAE7DV+YLB6RDGAO+mG1Ed3puDRkiMl0kK5uIOW2pDyIgHy2qK8axPCeQFSfQsl
+g0qpQVVOqhKer6QffpvAYR28XSjMA+c2zMyH+PmXpdVp6fk+wUbwXhPGW+kgH5s3
+56enT03hXelCZB5zQjlJnGoIKkZ4ebbgBQn6ybe5A/Aw9euT7v+STf8jqPSbPE6Z
+qJanmkIWbzlSEpIcf11/vwZPR33jgzBc3x2yJqLiZGX4o6gNo5zybOvjt3s1Katn
+MRCV/N5W9eFGN05hAldQFFVzB11IUxzZg04DydF/bIBYuIVl62lJy/OqRuDtL4IC
+z4L35j+/ABTYRkXPHpOdnHcy/wrRqGqeNMXPENtBYJbtJ57EWwA8siR6XD0U+YZw
+X1U8TUts2MxDnt7nudAIVIawJ74SkB6EFvK3P/jKI0GXJqPpRksYryPddDgLAWwL
+fDYUB8x/SgYWwoES0KIWq1ulq4syi1lhCuUhf5eUfUTHTl3mDsDT4M0/R4uuOxiK
+dMy60pDCIJM0MRKDqMY8T2kSAUMm5QG+Bw9en1L9PQPd3Ko4iMIVEoOIxqtp1yVf
+smsNvzMy0Fx19ut4eMHvQI37XAg5n/dxsiEDUCk0XcVf5v3UNEGeT/NU4lqMMPVu
+RoQyjJail0WI44YUa0QnbY1fao+HAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQxgHd+Ib7xVqPe
+7RacVwPSra6g8DAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAEF0yflwO9TWPnWGLntUp/R4Cmv5/W6ga11rXPqGF7Gb
+izqw+sEDfl9Dcd99TydgWWOHJPWxCcBPlUppH4fQDLe+kvllv5EZuj1xTuIlpJnF
+mKoWqwIs7fcSHAca8kAVOD4GGaR7buZWFwfJNPGgGtW/+5kuCVhRrT8lYihGDJ/z
+5nhW8KgRhzrBGmUmaqfcqwLLnSPpkyXkJVVqTLO+5GlPgy1niiBlwH2KXndLX/vF
+uXUwZ+rSCM+qzep0RJ/gb+oGy6ZCC/hZR45nR/gA0e6Fq9Yh4ZqHy/ZmQV3BWyod
+h7kASnwDChmgz4HeOilJdLcuVumrOOO/czgW40nbx5yMYWhkFt1W/zrdtGBzWSW0
+Nxh4SrhG60mtvk/ifdVwwiinztUhxuXhzKZ4+ODtKzFh53XAl9/yJf6oLufjzVgJ
+C8wLy81U9bmOBYwq+70NUwdiWDtVrPIUeODVxQx6c67EFhmt5hwv9sJeAh1emkPC
+B5AOBr6R8M+CgG/AwFQK2+6S8Spi3iTF3jZ8hpB6yxSYG9e+A70INvQg0YWqFrzS
+gvM482CFWP00Bs2g4UkURwJ7saqKz+LL4BD6X9r9pwlctmbFrgr0yVzfKbPtFmM5
+wRP3WbWg9ereULkFKtHxatfNyQEcIpY6pcMVhVw0LPfkKWVPDJvThkFbnSkSYEco
+-----END CERTIFICATE-----
+
+
+WUS QCOM KeyId 79100C2EA35C4FC14BDE159B56326FB731D1D512
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAGhNciIJL7QHyQAAAAAAaDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDYxNjIwNTgxMloXDTI5MTIzMTIwNTgxMlowQjFAMD4GA1UEAxM3V1VT
+LVFDT00tS2V5SWQtNzkxMDBDMkVBMzVDNEZDMTRCREUxNTlCNTYzMjZGQjczMUQx
+RDUxMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALbcdGVIUiqxCxtG
+q0aG8MIi7Zzss8oo0ownGv8S/NCkc7DMxI6WevHJi2KdYvDv2TosX+LYxB0DznhE
+vrdeG2lwLjqeQ7l4EM9iJ0AmEXL5o1DPsYnj16qPO48+zRySsFeWFKg6viQErdqn
+wbo++WX6FDCsjGSs1PMKE5T5pzjk32ahfatzwEu/seQBwUEG4fo+Vtckl7qHOL9V
+9Au9GYDwuZTP8V8Hc9ZzZA7b0vfPpMnE9dZzJMK3qM72egxhOZA47zLO+Sbwj6yC
+SsWMyqp3XoEYI0UdMq88DHWKMfK8lW7PPeN4ebb61777Ep1xEwAbBWXdvbAx2mgz
+yOU4VQMCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFMWivlRNXbYK77yzvYFWA6lPPiYfMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAQkuP
+VO//FCn4P98nFHkUYT1Uz9q75Gb3iaczsxQydmKSRnAsKMa/ne29f8Kmakxe277x
+EdXuLkp8k9n4JVRK5d10d5Csq99dKHOaPGebquaRbP6DNsryfI/OasXnZZ8DL9fQ
+BAthBzeumgvkxql52R/AaNDvso1TN1rvp0GoEp7eN0rdqcR4fs0Bl/gqpR2fQp5G
+8gmX/zVJSR+Qzyff5xehGRfnfdJJDfllihT7XyE2XqnG9U5EH2kUH14921UFTJPi
+JnFXV6mKToiFxaCG5SPx1cZ1D/7cLTTLuWrDYU/U9Lu/Zcdn8YBw+P4lodfKcECV
+NrUT+y1JiE6qms+ClTcby+u+yOB6sdomu+5iPVoWrRoOs8//yN3AoilttNEFA86B
+kJGiKTByAs/5AjgHXX6h9Cse6dTPR5SsvdIjMnzvOtkQtG47ADZNEGD1fkvt5xxp
++1sQwLrFG7z9PI1IQng66NIyPyFoXy8tFBOUmvUKkvRY7zAaOoj5ZQxx4ZYxJRw7
+Db6Y1op6gny/TL0P3UafOQTPA0Xwi0ywd/o3uXUORARf5tJakBiso/ixuo5NDfrz
+m/YdjPrgFO6EhWl5lXWIByhNMRzsoz4vht/lHbOw4WWrnNt8bFKIFkrr/JYzdAiB
+Rj9/0zBa+DnRHnGPEEcKS6lQTjU4okfxiiidiAY=
+-----END CERTIFICATE-----
+
+
+WUS STM KEYID 0056A610D53D1B3B6DBD14094B2DCE7E1F756ED0 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAsFZN/Zwt1iAXQAAAAACwTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUwODE3NTc1MloXDTI1MDUwODE3NTc1MlowQTE/MD0GA1UEAxM2V1VT
+LVNUTS1LRVlJRC0wMDU2QTYxMEQ1M0QxQjNCNkRCRDE0MDk0QjJEQ0U3RTFGNzU2
+RUQwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAumJx54bXZnWfgP2+
+kb6JtvD9Q6h8fdTcxlKBZSX1lywXvKFuJ1igV8SMkXyYtJH85evT2R/XqaSpMWxj
+sQLGBSYO96LA2iQM4pax/j2ExIw4yQWbL9QKTUWVzAiHnoqHwegVnFeeK4eMoeVv
+nc/yH//3eA9sgqGVE2OxKcMMSo19lG8K3UhcttaOAWhnI4ZUw1Rt6LaZMAQXPBhw
+oYAf5raBkyr9hYTBEdrU1YgUx+42262EDApHI7kw7Z3ckHZqXeikZ7g3tv5oxi1O
+QBWlSSHErHCmHlw60GyjH2oYlfKfFA/1oUvrJeybSnRLE1pjSh3Gjnno3CDQ5pjv
+fucITZswzIdUSUXaSdTZDrjFbpGt54yQBLuhyeRs8rKvIGVNS7e+SrDSgmMaxM2R
+oN9F8CmZeuhuMH+ejA+8snh7q6G0x8VCdqEidPECTrAoXKKqHnXeimOFieWs3aZt
+P4wsI3Zf09PQpj+7RNyZ+hmzTTlTjy40rTH4ce4ruzUuaY00VVSmY2VyLdaKtf0D
+s+nkkPC8axTIamUVM52eMvnCHCNKnHo5thXMvbKf9OTzm2bTlXrFyhjKhOVpTdy2
+oE1DxDqZwVrWlJqG1Jjt0TTNmrw29TZljCvv1sU5dNugn8Jq0HBZVS++1PsXaabk
+dWgFmRBLRap5uvp9XmH8kbwhPpUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKl6jnnVt/MreOqH
+Q/DXwVCM6S6hMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAS/VA3cHmmeJTqMhEtbnyYWGPYTTnUKOJPFq71URJIDql
+/WRXYiHx4EO6Pm0HfGy+kQyZ2hXPWls4ll4p4scXr5mJVwt+jeohW/dDYwJjf84I
+eOzEJbgORs9JNnVYpDD2WrnqpCjkxZY5lGyfEG7482OrRgsESyrLWj8m/LNGMsBV
+9VpTN1wiAwVVjiIx82htF0uVElqS6g8EcwsD5p0EvJo8MGEQThoQ0Rgl2Y3k3hj1
+HAGb/iKv9gccxwlqGu1/tllvmt7iCsb/HHyLu+e3KRkRkTs9sUPeb8Veg8WxPyNE
+fcLYs7InquS+5ng8eZHyT2JQysjxGmiH1Wih/Tu1rIgZtEnCxkAOOQcGb65NicCP
+l0DvCTt1ktw3cRd+6RPy4sqJKUxqjcGUwRkmBm83Hcrur0u+pgcB7fZtRgxr+LPv
+j5rQ5N/ayW57v8IBYsXIlE81mROyJRj0rHEqfJOAoRv+wO8XxxanGw3QTZDuEa+m
+9j7Cw/PQHLcNfAsDktFIyNx++dBRjcJKZ003Ok0nF8zicbqqIewuNeh4ec+ERzj2
+UhtZzo3heiuVzMaeMSEg/r1CA+rscUJty/rB3DGVkTVAEEoRw/31If94XGPt7/B8
+bndHGM9gFQA2aJVYPdgbaJialex+EMx+kc2nNyNV31cCRN8PWtm9MY42w2iZ/Y4=
+-----END CERTIFICATE-----
+
+
+WUS STM KEYID 08CBB05CA4510B2A73299184EDDC9CCE42911211
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAulsMU/TfKdqtQAAAAAC6TANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDYxODE5MTYzN1oXDTI1MDYxODE5MTYzN1owQTE/MD0GA1UEAxM2V1VT
+LVNUTS1LRVlJRC0wOENCQjA1Q0E0NTEwQjJBNzMyOTkxODRFRERDOUNDRTQyOTEx
+MjExMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuLBz+bhARUWN8Twd
+MkKVwsxn9xY0Wu+Cn3e41gH5iepqVdKmWSfskSriY3FRScr8ZzNUOZSkYdXxNE1P
+m2sDPuW4dwJGEDj7YhZ65IN2vW518lUZGoD/D4Sb9oxW+R6ezb8986OTKJsv0461
+i14chTalONWm554yU8U1GgxzodXmHU0mw8JES5/7vjs9zX2bZZsgAixNq7KBBcly
+OhQgIyqtC/5MKRTFVWbPne/kPXmWblqMNnfayVC4iJxNq9a33EVsYjH2lN7cOqQP
+b4FqEht1LU+dhzN0c7oLeP85i8sUbzP6+NEb+QH1KlwexrJOKszRNz3sMVJeSWcF
+g3ocp7VMiP/vDJnxJJNo67rAwuCCQssZ911rG0cJMtIIWr+gXiXpNa9ThYeWq3Qu
+KfFJveC9sDm+SSfers7bWI4uXJjFFMi4bjd2ZurG4WMV3EzLL4yHMUnlz2xiyOLm
+cm+BZ/VGWCRwbuazSwnmB4toTtdMgSE44gEV1CSgTJj+KE2CIXQdWgEbFieImqdf
+dlM9lXbhElaa/u0dyAVrdv14x+HhHG06RAZsPASxk01IZ8pAsWav2RJK/XMZs30v
+mOTUaiFxoSr6HniENluydI3ateeXeJtTqjTcxK/nLais/qpfslSQ/ujzCwXhIKw1
+2ArfMf63xm+VfmNY2zf0zGfRMc0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJj7WOa+gThFzZVh
+2YRgKtlJmRIDMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEATaeXHINPuZgAMm4WIhcabU3HpgSeQ2mezoC3Bn74mQCM
+23ZFa7xbFMjy568YO8DbR8i4gqfc5j4bZQVf0oQdNoIpBMtIL1cfISycsntyRfhD
+3MQErBzUm8STnB5/XVIO1/JLaFndOCZIPGXkeLZQIBd+P4GlC6khbcHUZfOjrqDD
+7jBwoFTVEh0bu25CHukuszgB0iZD+ei22oIrb7phCsd3QY6KOvH8SuAH3zAZHMHe
+u/U5z2j5lccOi1DGnAXf4m7DMn3zMqmXjFV8s1F4xtK1Y9pugUVye/yzdXWFTncL
+6swzptzBkZ9JjxYi8gzq4IONZWA1+A+7DPYzadbaMeCw8wvMMiE1+McwmkvY0cHB
+JSzsmfdzjxTz0q+4JKVDuhpzSYA60TCtpz5jLZou5kwuituHoJp8yAAiHH3mbJvs
+P4s60eiOZDCBgHiXbTk4eXn/Vv4eIS3b66NmOjqe46d6IDO1ta4FJHyHl0fFrh4d
+o71A4wBGKFw/7hvJuY28BtZ0sg627t19spCfzznDzV2Uxrw1QV8hoJK49NO8xMTF
+r9nj1uOtwyHi5mCFe0p/LTEtorriNLaM9XvhI96JAy8Akm24fen8GYuB8a6ZuEdx
+RImUnFy4wlYaWhXsG48jMZI2A32UUfO6Bxi94qU9Kc5s0AeCRmqJNoEnRnpOzVs=
+-----END CERTIFICATE-----
+
+
+WUS STM KEYID 1ADB994AB58BE57A0CC9B900E7851E1A43C08660
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAARi/WYYX9w9H3AAAAAABGDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDMwMTE4MjU0NVoXDTI5MTIzMTE4MjU0NVowQTE/MD0GA1UEAxM2V1VT
+LVNUTS1LRVlJRC0xQURCOTk0QUI1OEJFNTdBMENDOUI5MDBFNzg1MUUxQTQzQzA4
+NjYwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsoeWER7lQDnvuVkQ
+QPRbsLyFAnoU0c4iO6HVInGADKiTADA0lVausZbwE0YlTjEoXJQ1q/8I8YCd+cM6
+Q5VvGESUCqzhVD84tN1piYaso9FY9kssHXrwYBc634m0sbVr/szIyRphZgb0EVcx
+D0G6Y8MkTeszIdfqlnrxKoBCTOhrYYIKCDqOXjnqu0A4v0/FZ47U3VMPxjDx+WPp
+XHGRXJlvYBQB51PLz1b1KmBY0ElLnlQN9EjFrP2izP0L5vREpRQ70sy7aWpwEprQ
+4lXTAHT9YDbOVrqFZNk/HvwfbO2gcOtuw4GIGbafHFmotAlcZPkXeC0jU6Ul8iCK
+S2TtTwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUBL70VQYsgnXtwh9uK8g7wmX8NPswHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBHyco4
+KJg4ck5EYr6AoYhCR4R4sq2SqGlsIyVqZThFe07VBf4Gggl9lVraBotjMDmJeaTX
+JYqer29jplsrVaJmzwYT2MH5SKihY/JTbi2uv5ixbzjc+HykWxKC70f2Zgw40Xw5
+6Uz6LE19YWwuJFMBvTaQGNdmz8UN8cA5HTFpHXIjf7hgOLYHYcaztU3wx04X+yEJ
+GY4hyRPCur13KeXHR5KfKO/SAOUSYztDRuFwHqXac+N0yjKbA7pr6rGdvq3MwogH
+0MzWsD/Xu+tFEpEQhgMf9gt9z88mEXXx5y5mR4rVu/MhJh9qIiEVF4LDLAD6ybjW
+Zi5Je2rC8XNavyphFJU+Svp8/jshukCZi6BbcNzsx2zQglmpTfnzLknwg1DyBI7V
+wR2TDerA2X7ENaVk83H1MPzQp37pBhKk73fVHMPQ2HVAvONbmi1s6v9pl2hSmJ7l
+v0NhoNX2ZuFf2kElclMDYvIc+puIfiIufFfk3FPxOi2yRzE6EV3Ir8nuifhAkej3
+1CcRQ0hFTuDed7cYyDTWNlKYpEUK+PWj73tfRAGwe8tDT7p2i6MV/GJ5SewczRVD
+Wl1WVPN8vePEz9ca35IGglmcLVzE1oW8nhFHZl0jhDZCqfsKtpwUpECCoeDeViT1
+/wdMmpRVrSMoKAiNMR/MF8E89ioLTX55udNXLw==
+-----END CERTIFICATE-----
+
+
+WUS STM KEYID 1ADB994AB58BE57A0CC9B900E7851E1A43C08660 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAq2CSU6YCyQ30QAAAAACrTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzA0OFoXDTI1MDMyMTIwMzA0OFowQTE/MD0GA1UEAxM2V1VT
+LVNUTS1LRVlJRC0xQURCOTk0QUI1OEJFNTdBMENDOUI5MDBFNzg1MUUxQTQzQzA4
+NjYwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1vaV8OpKPK1OLroM
+8sd7zyHQAIzZIkFvgaq49Kw/vYBzfoMV5JmVdOJdrR53Z2/xUjiHAfMTMVylzxO0
+sFVc5wdqkUwONlsjhOWU5jchPF5C2Mh4ZONhxdu9ag0a5H3FyNjTe0csDNDx06/K
++OV2PI0XrCiinxhfdknHOZGicHULjqLCpytfCdHpbgeT9gLSg1cZqlR34FLlZ8WY
+b6rIzDxHH18gWHw1xxWWzv64GZhxu3KC79R00MZAPUBIXvD1DF/o2lywHJN4kk9Z
+13AI27fIk+2u6UhoTGopx3qg9shPKeQld4SL0qZ7NWr5FkaEkQaPVnlp+kQUed6h
+oZTma8jPlrUifVeIMyiVEpySczivThKhBkZxDDccPt9S/HR3OlbixzELWDQmmuRn
+Uh+QUOpz0ggk0Osbg8gAgbBfXvfvo5ZSxQFDMaB1g/OHKAmaxS/dBH3L9K1GfzqC
+pXG+CIlViFtd6rKqsre4CB6kMwLe0BGoVRTdWrwJLI5d1CaK83xzLiv2P6iFQiq6
+OKPOLLI0+izbtTKBB1N1e1ld5t5nPCq7BON0LBlpblT2e1cPuL9l/RbKNMKEz+2Z
+54g4N+QFbKb7f2Wcj8DcjtSJlSlWwTrmmAaHOFR7/YoLzFCm5FjCd0laeb9/dzak
+9o9SG17PKFNnHr4vR9I628aClN8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFP7Sm4WTA1yYWhpy
+qCR2eUHVgwlOMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAaOHpySO1cNyzWA7H5WSxNg0TTb3jvHODscF9rcxKwQ19
+WAC/G5TTWUKJcWzzbIEOUItocM60Rm2+tenk/HRRxb8GHo20nIoQ0oX4U6clpnQX
+ctH0qVkSZX3UB8zHteeY/rsgEsloUHzU+jt5C3lZ92nZ5ZH0/0bWf0US4kUpmqZY
+Y/6kd27+7M5JOHTIZ2tbRYGby1RqWYJ5eeibqUAKCzmP6+cDf3MHIXJYqK6OZI/D
+dxgh3KGGjX1NnEEjS+kGrwe6yibUYSE0/Nb96x+1wBrY+RkEplVMJu2w7TNc7mmJ
+XFZx0aP9jY62KjJ9s+SwcrfvHB2CrcqRTmiPvw1ZU2N+8UmWi4m0CGxxqqinzX6l
+Th/gDtr5sntfKSiu50+9vDdfRNrHoRMh49GH5D+MzIHlKAACheNd1GcDUQlLyk9w
+SO8tDLRb81wuxRxoxytamPkeUZ9uOAxH9E3PS/SpK5WoNaW4WUCaKhdtRg0rcV7Z
+O9pifZ9jTYwUCw79ayde1K1NUvb8CVO8JEQCaiBm8hAj3fZr4yD43+iUsKI2bQcF
+z4xPMSnTnWs4V5N7cjm5IT3LO1KlQmuql85bJkeMxOa1TX5odgg6FzYUYMtspy2j
+ZS4QipkHrb7CKqoZjkm3ENG5h7p4+JnBw1bhkJOCeORU0RZyp4vupUJhDY1QSf0=
+-----END CERTIFICATE-----
+
+
+WUS STM KEYID 571F806B47CCE79BFA35947CED88B8D1005AE09E 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAsIPPpW1HNEcogAAAAACwjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUwODE3NTc1M1oXDTI1MDUwODE3NTc1M1owQTE/MD0GA1UEAxM2V1VT
+LVNUTS1LRVlJRC01NzFGODA2QjQ3Q0NFNzlCRkEzNTk0N0NFRDg4QjhEMTAwNUFF
+MDlFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAppGGrqUvb/7DrRVH
+2royulbnme9q+u4rnIWtfaQ9ILSAnAt1JsiTSDGDSzKM5VWhx4gndBZbodD/ky4w
+Zcw3pP4iANwUF/1EOSjUMTAzzEla9yPBz6BVrBbAWJfWgMtN0TUY1XWoGZ0FINQU
+JcNCK8M/v+/t7BQ9wNkN/kdaVAvPuiDasPSF3oCg8Blz0sOjyMB72urjt1qte6me
+qBuiO722Un4BJfXE5kKLU/4Rmz2UOmp4WBSPbptla8vj6CPkEnbBFG76w3miYJs0
+H9R6JwZrrGzDAobkxKK5IgVvzmSO7/yvRdaXiDL0V+SkUAl2nvoq70oWRtVhzyTZ
+Zki6FnPVUI2O0Jzuk9CCwwBLlNBaBFasDKXUUmQ2K2nv0hQiePhi08c+j6v6WoBA
+PrlS6EJj2sJszerw69UCxsNGlDioYJRjXukeDYj/2ky5EVOy2IzHTGZrNM4jQOuI
+5pGv7MvC+cYKVU2LknY+nAoPGNEHPcfeLCptc1NTAP6HQpkhcC3Kqnqz1ao6Jm3/
+5hAKZJoOhQAANoN8f5Uqk4885pDgFf3lT3Aa3aP5Q8m4xqUX3GHm3H+fSlLcgscs
+Yv/Tn6fUfuAuZKHX1lXl2Mj1pee58cxafDLmZD9pfl2dmhg6IWc5EarKVlAC256K
+0HO79jhzHdi71PotM4B8+7UR348CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEYucdj3HlEx1XLb
+azoOvy9rsascMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAAO/oIoi/Uw3keK9+qIpLhUoou2dZL+a6LkZTNy05nq9n
+7NFKV7MskL4egANytF3H63kHweYIkwumS4v9A5/nAlZNzGx0LMj19jotMMVA4Iwv
+PRK2JPQBdxLeBfUN869zpHTx3QrcNkoNosnkQ+EADsfv92o1Z8BYXtVURO35uo07
+XC+b/e1pwMQ+rayDcqMmga2boiar9TpLVJ/Z48lUSSx4z33HIWYdqthekHhI3XkG
+OXcmeaGwN9bpFYs7EzVKx4j3grSMQ8AYunbQlToSVatXudSTmLKIcQ/YY6BSUO1v
+oHUjcoiknv1nHA085MogE+xiafIIWnDhI2Slt5DP5V5FpJ4Y5L/uaPHPW2D36JGs
+d9EcHOlpKLq+AmrxPcYLqEdaLA1jD5HGGWAnkS+i+coT0k7MP5vHuaKffOBVmzCZ
+dK76kDO+xCGEa9cmogfzYOvdNtu8SM9J95O6OvRTbj1767SqF42BI0ODn628pDdA
+K2ofSJ0p2sHYZWqM9y7E5DvfjIPe9WlTJ6Y1AYCXXE9IEebk6IyTBn4fR7j2nIz8
+iW1EtWaXZO4EPpBK1V2KLrDAQsNMrTv0+DaZ1qnHD8VcuL/LzRalkWjxyaaW31YS
+hgbNMkvP/twJb9xX1f14sZpfMm0O4AcBy0cfQpGU86cw1tY7nHzYGdixu7SXulA=
+-----END CERTIFICATE-----
+
+
+WUS STM KEYID 662D8F1CECDFF147A8B6F0EA296AF7F24CADF9CF
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAutGUmt0zNN4MAAAAAAC6zANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDYxODE5MTYzOVoXDTI1MDYxODE5MTYzOVowQTE/MD0GA1UEAxM2V1VT
+LVNUTS1LRVlJRC02NjJEOEYxQ0VDREZGMTQ3QThCNkYwRUEyOTZBRjdGMjRDQURG
+OUNGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvSMIhqkAhlPbj0tS
+V0CiIrMdgCEepjh2DXdOnSbUnTDk/2axsI+jE6+ASDgXvquGd/TWz33QjrB2y5IJ
+FabveTA6Z47wd/02G+gdbE27UxkwlsAksaBvh1KhflNC2SZthCIRX9fWjkNmIdpR
+Vmyt8+t2X5Hl9jbWKBnW2NIAmh4aP0k1AmtNzty7r7LutWn/M+f0LtUh7CwVgWWt
+FYVNZxoxxU6js7hNqv6INMgt9nPPd7lVEfENDJvrSNZA6XAWe1otD1rbTYmUdpXu
+b7v1H6w/jO0g+ZYkmp692KkKNK2pc/WxnVwiqc1+l41jhwX+xvd5TaSA1wOpvs8s
+sxifmW/9nMHbMxezfT8ZenxwrQ6rJvzusRbk93kqCCUJ0PaL5adBwOWWr9n9fwTs
+fggLnaJHL/bfgzJYhjv7/sPmpknzV2+JK7hmEWEu+dP7kRK8r1VMB7zBpMC4VPK0
+B9VNWjwC6HHB1W4KuUDjMwZyEKL1TmFCNPAaUkwjj6qiYh0gfWQIRqEcu82gtvmw
+5yJRMILPWdMbtnSMB54EU0aqAaGBP6Kmc021ssxEBrAL5hvlnaVQ10HIexHBRm5Z
+JhnzhLaKrVAKjq6TNYLQE7Ygtc3n50nBAcp9+bT3UHVdCvPosqR+j+uqNkHt72oX
+8fT+yb2epcmVaSaOhLejwoVjqfMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFBk1oREJilPGKAr9
+Kf0JVDJjCTjBMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAWMw/5SpK87wr4VtNljcPvUApW8IqVleCly6434O8i4Ib
+JruXwI/BXFw3YZrFnKjNwrWMaz/jlHBKlq+mRhUWA+FpBDS7B4uf+yYvJzMVGFM/
+czMYDujMGhifV8r5izcMeZ/l3YLFN6va/ZBwC9OlMzJnBKWKvJrmgERGXsZsgQK5
+ZnQX6nQS/ntGlu0inin5KoGbDwR+ne5HKVjWsBEQs55QkJ3VqiwAfIj1nUYn3MI4
+bJGhx4zMbTH++Dmt73I/kg2NHqBPYjOR2W9aD2WLKnEcVx5hBzKFpQ3AZ5HHUbf3
+aUfEYmOsi2ai/RF+ca9Ks4I6eUDYpPyr7qZvGPK32sgJa8hZ7R+FreC2nyzOy191
+16BviTBnUo7f4qdQhK3oBfOrxAPBY3ZnK+8dBn4u0sfT5F9NlMVbtz03ZYeO/Lk7
+YrFSXUQg0u3NnDjiTNn3levbZuX5DZqPpqnDY7C2fXqQL2EV/Na+f3ZJ2KDt2OJ9
+MrOQ/AgCZO7mucewm66Pt8o9Zaipe+QuO+HImFdLCUUSBM5IIerHqXYE08yEqMcJ
+rUO3W5+Xx5xPQba7D5enH7QsyiMTWKhzevT5hccrsPADTqzQjcMxsyGJN1a4g+Ki
+Xe+ZNP/m++A1v9aRsaHQ4tTSYhNdPKgiL5sT3ckDZjHaxycgjPNtsRjB5SkjyZY=
+-----END CERTIFICATE-----
+
+
+WUS STM KEYID 6B2780800A941CB47EFBCABDD8D1F01D529BF36C
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAuiDJihP1jBJ8QAAAAAC6DANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDYxODE5MTYzNloXDTI1MDYxODE5MTYzNlowQTE/MD0GA1UEAxM2V1VT
+LVNUTS1LRVlJRC02QjI3ODA4MDBBOTQxQ0I0N0VGQkNBQkREOEQxRjAxRDUyOUJG
+MzZDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsmitZOCwAcLHXjD1
+NGoIN/qqqNfAIJ8jfyKnBcX+4Q8O/7NZVfSwEAaisKCDBRuBO0GWZ7PrxdcGWmN9
+WViJYHu8L+cTZddFUxPBdCIOCrlR5nlFanokcwsDwUirAZBuTnpCVFIYZEFuFX07
+BYEylaDBx8cMyu0605qF3CR69dZUpNc//nykzSlMGnXOWM1aHpBkWhpRFwaY5znu
+J6/PxoLTcRGBxXyeo1S4rv6+oCQY9CO4/AwDpPrkYF2Oen1CUTRRFKx6B+rF2yUt
+rswvdIEj+YA0jxFxJT1R/hU5vsACQ2vuezh+YdSHCbHflXraOICoZiPQpJzmY/r6
+HQ66W31vQ4ZG+AcMSbYjUIjpHG3pj6pt9vEUZabeIbEUMT+IEtL5+fClWqStJXU3
+AlftKwCsSQV8q91KLGcyDjmVtoybPKJ7wLEyg3Fy/9aEyCwwFy7uIqZV0rzvg3X6
+hqJIHgAMvZ+xM6RYyL4hIq5zR6xr0F5G8LeZ+BZKwDDEKEhBNXg+pQXgRpaXN2Up
+Qisn+OdoKzT3o+Fe1blYUWoLevEy+TH85z0cfnF273uLTHxkBWhzV6sE/yLFrjQL
+X2CqM+hdq0kOMrTxNEdol987ItQ4ISaTWlcqQZ5UXTfVNtYdHd962RvpurlPmb60
+rz9i/vzZv5ro9pjcXHwf8z9n/GcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGqJVs+EEMHLAIBk
+pQdXuMJvkJnvMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEASAPR5gKdyquo4H3UWbg2XmUJTOMXsFIzrgNNI9yz61Ce
+qNcHqnPUpNI0wXONzre1iZum1+QAMxYiEbNp20GAN6A4mv2yPQKFETJkrEOIqhH+
+v5AMFjyF+ZoGSrrOm3PsD9iwnwmGtsgTr+NtHRGjcEyzSnpv2kAqZkVnIYKP6wzR
+hfGHyLwdYCwWXg8yCuGUVkkJWspRXORWnk4n2ycL5E5nXE/R+BZEdGIv6lpDK6t/
+lgpRkGASJgoQeHmwXGdWMcEVUmRAtorjYv5LPFUOxKqEBtw4BbMlvLn7RIMBJCOA
+W1QwIx1j0fbrdSv1BmHtYXSG43ppqkJcLwEyMEAFmYkBQugcGLLJFWpLPiVtneSI
+VzgvIpBt4I3Nd27JCh/WBNS1APlyCiITPWYg0Nhohagtvfo16WjOGumIoymHwSG1
+CsOY65oE2+1W/1kA+f0imm9sNQC6dKTNW6D3w3a08DtAxG4YcXQZflcl/QtYiiKa
+IBOnOdIKQOKBMLQWk+VBrq8tm/S0aft4x6mXOJvYpj4Sm0uqc5UBagRWq2Nlw15f
+iCLePr8r8DZIBIS5syJown6cgjger0WI07ZItNs3Tgch95PDsZysAJMO9IStdYUJ
+I2ud5we+H8hKXCITIal0771CYaysGzO06Lyhkixn8ilAGz3lsF+7bNvdXvjvOwA=
+-----END CERTIFICATE-----
+
+
+WUS STM KEYID 9DA5C72CA00BE14B85B3E535C8B07C83E85BDFF6
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAuqUyMm7RxJSNgAAAAAC6jANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDYxODE5MTYzOFoXDTI1MDYxODE5MTYzOFowQTE/MD0GA1UEAxM2V1VT
+LVNUTS1LRVlJRC05REE1QzcyQ0EwMEJFMTRCODVCM0U1MzVDOEIwN0M4M0U4NUJE
+RkY2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqcVcYC+q/cZdHBoG
+u2p4vKHY8+kzE5iinOzghxh/oFqm3hWKe2dKkRk00jH7P++71kR22hOjieal22Tr
+pEBpmNO88Ids3+YWVioqQXRv23daK5C6nM+CNE7y0O7dcjx25WDCdEi3G/sEgStb
+SFqOoUhN7Bp89eDYYWEeq1g52zfT02LHqiIwhj3/QWIyxx87uzYm4DKmu/EK3azD
+ENXNJr8qi9tKoNlrRhp1BZ5vscIhNCUmfj1n+4mSuoJgWVc2AGRb0DpNpy5TEUJr
+xpG53pk9en1IEl4w8SXMHPmpzyKobYgq39CLaKAvk2hd9WuUONJQAqQEYmanjP8q
++EsP4eYA0m6PYXWL5vq5737RRLDKKxNmAPn0BmolwjRUUIseK46RAC42DDBcAnxD
+rtwZZDjy8vTavjy0sdZA4TQZIC+Vw/qgmumbPKIFyD+kit/DL76lewdKRMO+pUcF
+0veGwEpzIRZjGOJELuHCqzLXT6r1gKmV7sATtwkg9w9dazMcYCxRVdlVQLUJQg5W
+1r3Hw1CKeOCROSwCiez+x77Ffbyvhknjm7Rp/RJkEfIaieoCMzt714ETNrcj87Ne
+Dp+zEPl3gb5ozmmdDuFTItRtLnyeElN13Ced++fe4tey0KQzBzjysSdetVmw6uTr
+rcbi2/b1zZkx5ikvA023u/1fZzcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJLJwv+KLEPLh7P7
+y25kaahVzKYRMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEADB7JCMFd6KRKBCvn1vxPds6kzGuNjtJip0I74ybk8w3i
+E/+n+o7syLsIw6kVVEtonnJ6SWjbf3dUesC9OoYZo49H8YPfY441j9Zow/VQtg6z
+GNuQ4uAd0Y/4l6S1qnqGFBWBraVCmcVpiIrZQ4MJ9JaY8dG/uFveHjeCLPtzvzVz
+SIbkaCyZWeZQwGgFx8L4QyPaajr9340mmHgwH1My+3nLew14f3Dx8oEnh3KMtdBi
+a4YMzvFhUkctLfpmsS7YqhCniirgZ/i27g3eNqb0ZS4N7qDIzr1vJ7SBJntxYBCY
+QGc/sRqs5+z5pWbZERgK2AtwsI6vursXX2M63l4OS/jk0nyOfIycGAugkT/wW49j
+Y6cIAivDCOaiTn4ddEJ2DZLej5oW7mgPXX1QpR9cG6ivx6BisaFZGwvJdqbWXHYt
+nVLNNEYcHEgCJdLo+2Ei9BZ5CTGmXZLftHqMTNjaKYsgOK2KJ8CaNRTpFXEN3pSF
+eCEO8McDqDHfaLUnmguUq4VpvNmae2oNf1ZPpA7NwtmnLf4GYN1y8sR0LZ7+UXXl
+SFLRjm/uizutcwTkfiRln4O7++/fThfu4ZDbBjxwjApftn+1eaosR/w1hro/fIq4
+ManXm5G0Nf1ysuB+Hw4jeAZqDPJ+FGS4+vn5FyrRDuLT+3yVKDytYE7lwaBYTLo=
+-----END CERTIFICATE-----
+
+
+WUS STM KEYID BD963E9AD574AAD94FAD6CBF416DD85B4A559942
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAux+yJiEhbskPwAAAAAC7DANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDYxODE5MTYzOVoXDTI1MDYxODE5MTYzOVowQTE/MD0GA1UEAxM2V1VT
+LVNUTS1LRVlJRC1CRDk2M0U5QUQ1NzRBQUQ5NEZBRDZDQkY0MTZERDg1QjRBNTU5
+OTQyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwh1IHfwo5oq0mrDy
+fKQ5ZQjWMBruBXzH/HftMn9KH7q2pm68u4q/twj1jrH60zfaOWV3OyJQZyzfVYIN
+4EEqTzCNDuJsu8IJmoCS+U4kOJ1NvH/8yu86y73v5i6TBWaOSFPPsEfjeAdDBI7n
+hyKEMEwxMyh07h0m7jO35odqgdrPm2O+MtvczpW9pewm0L0h4GxSK3Me8CCAVr3J
+S3eJ4+ZUz6Pt0AsgzlaYV4CH0AQn4R+b7sBswoeP+MuU8EhMF3cJAVMrs46BxwW5
+1xeEy29Bd0p5inadR0h+p7PndoXxSX5T4/8vYCLGLFo/pGI/ziujGtFOzupL2Dnp
+tQ95AraZZa1jrDDbRtd+kh9AQ6K9Pe7QM4zCVxqoJmXFrKZ7dX9UMT9JYqipM/wc
+bcNVsatC7W9BT072quq3rqFLvaS+eQKIOUtERnogy84RHss8D4bdOklAmrp1eQ4S
+5hqFn6nM95hEe5zf84nt8AuiassD0KCZlVmDHb2t3QbzEs6SyBZkK2fuwf7+xfBl
+6b8lllgPMs0WohV6wOlVE0tfN8FSsrMWpAmmK2JMVDJjLSAyUHsIIBxw2iE4P1e2
+h32sKshF/Pm+EJ+x3P7DL49VvW71CB3WIPFdwd9sBt5Zw51W8ISYRYOpwYLdBvor
+FxsN2Ph7IW1zodzChc7tnHC9lCsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFP/wVuehw9swRQ7h
++F6p/uE7UhLlMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEALtt9U/UCEZSZapeRdaam7OTC+18IwocXB8exfIy+r2hz
+zwIuj+3c7KWkSiufgWTGYHTl2xkBdJo94QYJQMzDtWLL4xJF/HWrpPD890Sx+qzp
+F5Sd9zNVPdByLZrlffI9WvVCzT+SZOdZrJeoqK6NYDs5cfnsp0S/hvcdR5ctL/53
+CtNbdgyuwRERakTpWwOaU0iy3o7mecFzreLmFL74xD4YaHap4eTtLL774/H5mmED
+sUKMdM8uzpVYvicIMZOkYfwYCqQLxaYujUvfcats5qGor1vyCma5uzizZLhnzW2x
+Chj/3zwoarErDKIrbmRkc6skxeoS9bq5dbst6wGXZxWtFFtxTqgloZPGkyD0A15C
+NStKlFHggDKWBtPxw5rETu8K4lokPRH/DZsiDaZi55iHN38ZniBNP4+rSmqyDhRL
+9Cr8848l6lofzqAoz2zop4Ti76ypygXkS0VIVpnPTpuUUppGj18S/4QyZsnCbAvH
++oyft7OmPh+tQxrFJOC367i4GheByObTihGC5em/947eLajH1zHP/ObFTpCWoNBs
+MxW4aeuvPd4C9Mpcu3Zy0yGgl6oghESB9GfwzJPgf0yoqbXJfCYMf5Da3H9IU85j
+1pTb1oIEVltB4yFkFFhFvBXEJD5FejUAg3+8NcSXtmFTbmdkpUBDRE6CjimKHIg=
+-----END CERTIFICATE-----
+
+
+WUS STM KEYID CF23E59526E446C3FE4F13EB686F624D705305F2
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAARka8K0IXBQwEAAAAAABGTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE3MDMwMTE4MjU0NloXDTI5MTIzMTE4MjU0NlowQTE/MD0GA1UEAxM2V1VT
+LVNUTS1LRVlJRC1DRjIzRTU5NTI2RTQ0NkMzRkU0RjEzRUI2ODZGNjI0RDcwNTMw
+NUYyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxYXNZCp+ZqsAPyHP
+dBJY2v8M513hDjq0+MI5pN8+06dCmx3rSM8RGVpSBiAj1GBOgNJgMqglqoFts/xZ
+LtdvJJqSw553RaypbuKUDT8kQTuLWR8VIA9x4UKeAmDOML15K1hICEh9L78IWRpz
+Ze4T1x6GzPPrszQx6z+cLira+KoYQjTMsrxU9eqK/i/RhDy8Q6FHOH+A4v669k5i
+9LdXTvqgJFL7VzL3UZthpti3ljmu8bcnWkqJr11c/rFLtWqtLlPfXSy7C0nf/i43
+vbHEW9h+2aBQfmBaKNHO5Rqf+aVtHsuOudi/YwN23M34c0ajgy1V1LYFQ5M5qSks
+VTRI7QIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUKx/Q2FPU/8mRzeZcBagk6RyWyU0wHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBIvRVU
+FYOhI+ASo1tkOO3hb7dCDG+Z/oTpK5Qb+Royxyt20wJzINobjdRPPqCxA/k5vrwO
+TxfhgI9pXazSA5cZvZaS55uIU4ISJe4/aAcnd0evhGw2okAKkS6yJJE9cBEj+Ovz
+MVGZaffrSo39UpC45TTsvy03kevSGsMqsbFdEVjtQDIh76lWAQ0Julav3ssJN6wl
+AsGhaNKw5Y3nn0F+ePyisTSmp+jwYj6g27W7VcmuO+Usddr63AkSwWKsAOThSgzu
+lgtkQ0+FmaEOvEzwkoFuI6d5be+RNi6W7l/LEHadBS6olQGbmwg/iO/m6LEtJTan
+RdPBVcu0Df/aqnkLKOw8g4I5HfHhYXZnbtGK/qMjptK6QF54kZ7VSXlCJz0SCWZQ
+KS6t7WrGZqel2V02o6Y2h1J2jHxmgt1vGXzxZNq1knBfXb19yN2wgubEjYQQ92/1
+hlZ7apwHMv3ssCsMJWINcThdn7gO/LZ7jz5gezjwTRYmfLQUwWJEJLRgVEgeEe8a
+ysAUkiDpYNotFoASZWoqGx5s+UQBqUDole9oi5G7CYvvuJ9+IBgybTWjacDzNDvu
+2s5etVeUStw5s5AFm/4DoUgly159gEOXnUlbc0IfcIAMAg8dw1nbvXp+JNyqmOg6
+agA6mpuDGNdYarfCzE0OBlgRhrIwpYSFvbFsXg==
+-----END CERTIFICATE-----
+
+
+WUS STM KEYID CF23E59526E446C3FE4F13EB686F624D705305F2 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAq6sxbDP+xJiswAAAAACrjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzA0OVoXDTI1MDMyMTIwMzA0OVowQTE/MD0GA1UEAxM2V1VT
+LVNUTS1LRVlJRC1DRjIzRTU5NTI2RTQ0NkMzRkU0RjEzRUI2ODZGNjI0RDcwNTMw
+NUYyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAiHdkQsiTekcene4z
++nFw38P9MGUsCGA13wOX/W6P0HBht1yjJnix95FeiK/d2YyQv8CqZCGxJjPnfWI0
+EhR//gxdrRO+LCUeDERIBVd2uVsfLoaxnDa4Q1wkUVNYuSQ/y4bvwWl5qggUNx0U
+QKwscqxQL9TsjVYFTcYDQoEvUNHiserbIxId6ozDxlx355BP7B6S2MgtdlJwEvPH
+p42MIZGy9I0MvSywp3RyaT6Mqu5Nzuwd2fsysJoHSn6ukNNuglMoUqh+2Zbc7zuY
+k1wWqdTQ6l9jBrS1HBQ1DIPMvSRhS/0YV6yzoffw7YDHrJe3xJryJHPfHIzj6Foo
+2pU2Gf8qo2bnFiHdfylFuGg5ng5P9b5PvpsCaaq8NOjnFBUwsbsBQpGEgHHnri7a
+AUExk8r3ml8SdbAFY+s/gH5mg8kv25vw5Mny8oZxX83NvGrPBahiLCUdt3Pex5Aw
+jgKH0m+HzFKWy1fkMr/JSFWYS/JxdTHlkmTagRLA1OeIkEzNmoETauWXEnVWZr0A
+Mbf3uNKiLKWUlss7rsERom1rPPns6hxXypnGcHQVAOB4xSSHO4ANCjLdOBfKWwTq
+DtTbNji6IeF6JZCyrQ6xC8ApLpqFBafoa7reTDDCdpiX9W9VGABkjnedb4IEnPBp
+P+Wa4tCjrU72PBvZejKdh5U9gH0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOUSzvn1Jv3qOW3C
+0iYJDQXHBAItMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAkgpH5sTQ85E7gXTqrVc/1nXrQxKj701dkyfInYX/pT/L
+fmLgG7r4yN8gUns1d3L59HieHTYYloehMF3gKjfDPaW55IXKhv54vdBTfR+sltuT
+/WzmGAzGJPcooyc50BgWRCG7M0USs2h6YbtUXCUj6IR7ktDWwyC+oeBJr8iOje61
+ZqxWPgZLPkrpW9iSX5xl8lPgUoZ9t4C4LviCAgTnzA8mH+wqZfekv3CX+ZwLuxNH
+jy4uArwzZHER4qxyo1q4OryI+5gkQOFmkEKq5PxQzHqq2gufqd60W7B1Mb1xwQPe
+jM9XlNA/WBGUwg4frY2SIipctP+rzMF0ShwHabuT+YerUaC51wkc9vUGqcfUmU1O
+dPJA9knd6YNDL5mtOIhM62DNPDRbZWd70w+V40om2kBM3LceIsjuy7zJ+SqzX/WZ
+heYNJH/QcA78cG34by9t+Qb5/1dgeFZX9LYaJmApawEGe26gfbRPyReTDzyIWLL2
+ddlQMGBDmMIhqg+bTOFfGfgf3wIOQJQYzXamYsRuOimc699bA/9azYfadckHysNO
+BKL7afPasMj8vHgGww9IihoEkryg6AL0SkiacKGzel1bj18QjLyCMHdrKpQrWI4x
+2GwkvsflRHoqd5JfZFnJEzE3v5UYNOZWZD1sgRSWNNta4M4Bynw5xvlol5kBpqk=
+-----END CERTIFICATE-----
+
+
+WUS STM KEYID F3C91574A6E773FF13BF0C6BAD7A7B65CF1C7820 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAsMuQXMP3UzkbwAAAAACwzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUwODE3NTc1NFoXDTI1MDUwODE3NTc1NFowQTE/MD0GA1UEAxM2V1VT
+LVNUTS1LRVlJRC1GM0M5MTU3NEE2RTc3M0ZGMTNCRjBDNkJBRDdBN0I2NUNGMUM3
+ODIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAt4xfKC2XfmKljrKM
+UGkjZQ0wu2bK/Xydbm+4zDjJhB3qGuthv0uBPtzLGDo3LiJy+wkCNmEgMkqcHrVa
+G5x2hFT1nBvX+XDE5a7GaeNSZTwk0G9oIH27aT3icozRpohHzKZuACf4r6EJru3D
+K63mufjUX3qw0KrFTm1YCOVHdy0BtSRaWQIQ3H0yBzFqEjJFllIY1csb12Ar95Qo
+/DoRGKIa0wOXoicePdzm9eDzdH1nkrh0yLRcErwoCoMS4Yrxs7Tq7Vdh9WUxocLN
+2WnenRojdfj1zVzFcwJQvXzO38CSjrpTHoJ7uSpPLhBT7h+Lm6IDiQ11QvouFKHm
+1sGj2urZbHmdbDRzSyIf65swKsQCiZJ/XiVgrLRa7mwrYXKR3q9t0MbgpC1ZKX9h
+daMYI2KsZh+Rsfh1k2Z8Hr203BfaeG4Y2jHIifMiHJOAJ5GZwVV50tEK6tKQe61i
+wY0xqcaEKZiDDsuiqPRgp1FxfxbF3h6mkfPDH0R/oopzWs+V8xaqMIysrMbKO0l/
+Cm9DZOsap0k5MJ0kMzgCtqt016WRPaW4hpFpPY0+a9q0PMQKFF8gL1W3nwx5rksV
+ZluC1knTP5qOy2Jj95rDKB2qiK9nCKWtbOOEGp/1onO6VX1+ZCG8ROYUCIqYtVfv
+zlQLbE5jqh1LIbw0Diuewl2pWR8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFA0Fr0rC7XQarDYC
+IKE3OoCXLlbqMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAmlR45TP3NEeua6X1YitO+QnyKjhZXHMITR4d7436qVu2
+q/Nj713VYKx/2rjpdUtZDTeThw/PVxljnIUAb5fr7GQuZ5tpZLkxQqa9VKLzrxYH
+3+YUGhO1giz/lY5y4fhOgHK+oMukYoaEO/0TR35YJymBerzZ5zwZoYfFmxsMlnnL
+F6L3RJFZ0c+ZzlUJCa+DEdP9O0viOvrIOlYkpkmTR/CMm+hpFYOvvBePBeXtHUqN
+m3mXmB+S0URFGa5eGV0uw8r8s0E/+j6eCjdWB4fCW9vztZJZkAfgSqXrp+D0we4m
+oZ1vyxZxE4pjmkBEd8ow0mMQf+sDLeKB/xTRTsRMd6PqiqvKoKnd+qKQn63Wdard
+sVAyEMVtaAZ8z0CUZqGFmIMdixxMXBWnsNaerZrFNNszCciE2cPIENOZpk0xYZ64
+FgEBTH0KoTX/DOCTr1jmngrG6hqcrSPUPyPIUSBmyIFQQyD+Cij2sOJQmbdqryM0
+xU3qVMr/43y5KTSLSG5UkQacbU5HaUMFKZGg7mFgMpczL3FHeXMCEAs3+wW93/I4
+TD+uv93cX2RbXDjwBpxKNozOGwcW17FAOb6X12a7eS3aOdPmLWIyVnCPDOfgg7Sz
+dPa1RT21UmCa8lQ4/U31CxDEbmHaNwvfp87j/kP0Tz815l/L8HOP08I1oPrnZ1o=
+-----END CERTIFICATE-----
+
+
+WUS STM KEYID FB17D70D734870E919C4E8E603975E664E0E43DE
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAu2TzUTMDo8H0QAAAAAC7TANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDYxODE5MTY0MFoXDTI1MDYxODE5MTY0MFowQTE/MD0GA1UEAxM2V1VT
+LVNUTS1LRVlJRC1GQjE3RDcwRDczNDg3MEU5MTlDNEU4RTYwMzk3NUU2NjRFMEU0
+M0RFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnrdUHAmcvmGW+yvd
+lxrLYH1abPL613a6XSRq1lsfAGNxTJ8FSxPamcs3F1AkGlXvM2nmzMWqmd6Z07wX
+aYeFr/LP1dDjpc/JkhlN+o4R6FEWG/gGV0W9YuTCXAO2j/r1hNjS2S9t+xYhh2Mr
+P2Z9vXGi6hhh3YEp8njRxI3jg9gHqmyODvlQmykSmJVuRf7wIvo7Q4lnNqXPgDOB
+oc/4Xu5P0mI9SaLhTpjrMpXp4rusaUZ5nDPY1o2Bzn8Q/9a3knqhPUF1SP5mbFP7
+f3bQN+zDlezSGjnHk76WD+v0n+pYu49WeT5/OlLQLQK4Qf2PcLKLXlvhPVqvMBvI
+kTF51QuZMr7TBgueWQhAA3uF9dlVBeYB+fid45ac6Zv7dvhF5waS7TVfRFcYi7Wc
+w0QjaCDob8D3Q76NTFtenXfvtX4jVoQIonBx6rrot6P1meCZNcxSRsGOGznBJnqM
+HVqi35gYZtsaqnF5kT8qacEIwZ/V1kLqQWpuZFUCaPsaBqnHjbBtOnI+FuqI91UH
+jQ7LQ4s/my8DJ/OKAsc/wM0xj3kseD+IC8XdFhZ7tnZY+n/WdIfTj54DyoOxf4MJ
+NprJOLC6YS9Gteqb4ePxVOlfPruTiUZGzewdjRKjrKwWJyG7OlovD1D+gz6ZEUOS
+eWpgFBXhadRCojaXDqWvjYXf5DcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAY2IVV+0GjDphA3
+3oXEgVh6yNNPMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEASmRkpBymgqmh8tSXJNGm3oYVnhGUyrmD/837bN7vl7Ww
+4N5StOjPsM/bdidBDE+Z9Ctik7Z7TUr7ipwVVR61YDtOYWdJiJnUYznYlU6vduhk
+GNqBcnrtMBhtEW4Db9hCOdJPQhJEPPMDWF4637H+M7VTEpY+HHwYSwALeEUFrAJe
+ENLjOjns8wAZJAa38Q8krtQnfNukbgdHNESaOjF4hULmT22G22K/b9/WWnLkmppA
+6ATPr/tNHIaP9xoYu0tIo+QTLiOfnyjxlrzU9De4D61jYU1lf9pzSKzNodojHKCS
+FJgg3Ghxht1z8Xg/RbZ36wMBxRPOgK2WoiQ5hJqEI2NSI7F3kWQ4IdcveGQV47IY
+kmnHi/+pFKzeuAzTG+tL3zcUjAUhdnMxbIkDsbB0W3ueD4ucDqH4TODgxNGOSKn1
+ro2b/pa78aHqCWfON2JUTJ7Ls4rlHIflqv3cBIeXZ+P3QLQkEVh/8mKpJs+PsEkM
+xPkmkicMDnjO9tRSWYcoVgvlloxINGcgdaGTG4a0QppRMWCtQjUyJzqkdayzqQ7B
+E3S0C8CngjNWye5t4J6cjAcyIw3qXWvnnorKAmCnoIp9ATd9n02r2FiatCJVHDuW
+8dgRp6cWY2+gE+fSFGs1oKEFZ4jfFj3wECD6NaEMCDo9ykcPWPp2DIkmUkCNYMo=
+-----END CERTIFICATE-----
+
+
+WUS STM KeyId 0056A610D53D1B3B6DBD14094B2DCE7E1F756ED0
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAADT4N/+t5rWmmwAAAAAANDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NTE1OVoXDTI5MTIxOTE4NTE1OVowQTE/MD0GA1UEAxM2V1VT
+LVNUTS1LZXlJZC0wMDU2QTYxMEQ1M0QxQjNCNkRCRDE0MDk0QjJEQ0U3RTFGNzU2
+RUQwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsweeMq1lkFAdiHEl
+nAqmyiiJaUAqpWdcX9UEELJSaCqQjFW4/+ubexFS1g34qXiHO8Eo0fItj6DMOVrH
+BnRgcSOMkYGSF+f9Pzl2ikISg8AdGr33br3b0p4VlZl0XuZutjv8OA4PMEMAI3Cg
+ms7t9DtRcJ3jS1/Mvd4fLd2dYuZdiEJJ8WD3uEcJpTuN5RLTt7n8ybgWT/SZMWtD
+T/+V+ZvE1fBeC3XqyGDP9voxDdzqpsdnPG2Pi3ZrqaovEbMW2vIquMhgAvbo4hDg
+aZZpSZBFyE4HmlPkukjWKRj32aLCZvKv853DGfSKSQbgHdAdJASklTW+7EJH4a63
+je8hvQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUiAYnc9aAgMh6dKgKRAR3JeBn6C4wHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCH3QAT
+udWtMoO0l+zUNAxe3winb8jKOeKX6vxEgDWqr7J4kNNdgKYn6LwH89xik14F6tGD
+hX2wFzQYH/idkAJUqs5ekAWmm7WDLcvrrcT1qTtF6orPkxbkyjT1ioUppZRA+6na
+jMdU4OdEHcjgjpfa1bl8+wtwjEAT7LBEYJcOuoz3kf1wl1a8+Tf/vCVr7LsFjsUT
+1GNKPRngPnY13k+TKSTFq724VzFJ/g0P6FBhoaX1aeFTz1z/5lIPCsA8spPRNLXI
+rzKl7E+dA2O1J/iVbeEV9siqq36YgiSi2BonpOUu/Bz8fe7QiYyC15HXx2GDhd8p
+qz00ourynOYBt+Cs0six7BHQPvJ8gcoK8pIBW0e43tk7zXRH80mDfmGFYxXWHKjx
+AfvmsZ2Dd81QcoTNzZx7B6wGzd/Qgvv0kXtBleWrU/wgiXgRnyERc477BFFW1NSN
+A8uebIsN+ZaDCNoFP/Ozhq/AVh8lV+2cJCALnFZFguT2rG2X0tBT6P76dRX5Ih/W
+KhSuHGOW3DNCgWtKFzxbKUSf0Of1H8jvQQI/R3t9A/0c96UDYcaWcMB2xmo67Z5x
+ughZN8SsEzoP+dFmRKAip8gQ6mipQ3pRhzY+PmwmDrv4OFPaoGDbYQsl1zcsOktx
+wb+LyuKaBz7LH3o58sEEAKZWAfBIa5up+6Z+yQ==
+-----END CERTIFICATE-----
+
+
+WUS STM KeyId 571f806b47cce79bfa35947ced88b8d1005ae09e
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAADdSUBbPMO/3cgAAAAAANzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NTIxNloXDTI5MTIxOTE4NTIxNlowQTE/MD0GA1UEAxM2V1VT
+LVNUTS1LZXlJZC01NzFmODA2YjQ3Y2NlNzliZmEzNTk0N2NlZDg4YjhkMTAwNWFl
+MDllMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnzByY6FfN9JwL8Am
+BmHPyw7ZI3/kTPKJex0HgY4S6da0/KUWk+ErYJD304ULtCLn6nLerMnnnToCOZ68
+S+zbGV58wwHQi09IWuFe4CRj0w+6QntXjoMN0vo8DZZ7E183hkTCXNt0SJUE5Y74
+efwEtSbxY6TiyG0/WksbEafdtcDD2ysRcGqUgY9wBxeMFlsCRQNksB9ZI0bXoG0n
+HwXwoxYk/eH5oBqpfHIEg7PgT9lcwqg419NlUuusUYhK+V7+oACxrlmalhID4jeK
+j7hOo0JlCGlHX47MfJmWjDeKQiQAOsSdenHaKYo7CKfVvbZ1QeTbFB86KplIiPr/
+WlvadwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQUBb6c7K0ZT3MdaPmk8DM5bq+N9nQwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBTHQL7
+Q4MdojYupIFzqCKiN2U9dy1MkncMy3RozygBCPPOudsz30GdRCxI1cLqDI56nAva
+4BnnGZYK1DXdhAjP5tujqK21u2Jm8uT+zi/bjOKfBtl26XfoJQdi1W9mDrmmlIhl
+S6VGuRMsDCqW7iBh0p3cQ/ZmBSLnvnxPafYZVVQU47s6UyEqZowmITh74eFUUlUH
+WAxWDNPja9SUlI+04j5/WUpoIedBxIS26FqzeFdBtV23xTyOss4miIa10eMNgaMS
+5XcNZFrAoF1A95BeYum5MHQENE5uXhRiSp8CdAdGlR/THFfm/Podp7ggwg6ENLFt
+F/i43oVN4Bd6xrXpc5vriciRU2npVwAWhM3J59BzXAIlOf2hV94AH86exJ4oEul4
+VNkfv6rktIsTX2f97JCtN8+7xSkTB8tuV5osi9+gtLSxt95Ysj2hndWp+jYRGF71
+0eNa86rnSVpt6r3vE4hM28+WxlRUeNOpkgZQkX4mKvO1mC2i1P9+5IgB/xz4vWjU
+czj72Bfa9AD+JkX1MDfuMNUoK/bAdSZOqA0hQ5QIUewVSc4UYuDxxASxeUHHbwnW
+TjIWVoB8X6MttWgCity+xUFvCKpRI+CrIrMFjNUrwZKEtrj1k1ZUsS+iCkqOVU84
+K3yofsEciF3PCbArPLaJokm19G8xTIbgaP6hXA==
+-----END CERTIFICATE-----
+
+
+WUS STM KeyId F3C91574A6E773FF13BF0C6BAD7A7B65CF1C7820
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6DCCA9CgAwIBAgITMwAAADqk45XRCFCodwAAAAAAOjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE0MTIxOTE4NTIzNFoXDTI5MTIxOTE4NTIzNFowQTE/MD0GA1UEAxM2V1VT
+LVNUTS1LZXlJZC1GM0M5MTU3NEE2RTc3M0ZGMTNCRjBDNkJBRDdBN0I2NUNGMUM3
+ODIwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuLz3tl4ITAjHvQZK
+IRYSat1T0RO/2/G7Qvt/YfxSfYSgMwdX/HUFDjURmm4eBMToLlPFXKdhciXAHzk0
+yCJudRzfTZNRmK4UmdCabeN0HQwP7fY3EWrCS3IYBKvwCZSV6u9Z7c2s24g337N0
+aS1z1wVuig9AV162fV2fEfPVk9b0+iXakJNTwnGku2GPArxPicMYLCkLGwQSJk7m
+GT3NxupqZba5vLDWrHszO1+fT3a+RpPbq1O7WbQkmG3vULHEEID7MKpcuQo8prlF
+Whbrdfm0GE860UXXaZuYP4k55lzBDvDshW2eIDQEGqD1hwz40k8PLaoJEsDArvJO
+yo+c5QIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB
+gjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw
+BgEB/wIBADAdBgNVHQ4EFgQU6Aj1HfkzRkkpHwgmsYAxr9IDZLAwHwYDVR0jBBgw
+FoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw
+Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB
+BQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
+cGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0
+ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAuKjji
+/9Dx7EhWQsiOrC5UgFLUlkaP4zsdeo3nQpbePFEBEaIGisw2AJIUlGHh6Ev5oOnS
+7fu322dG2owzydh1RXNbP2h+RoPO4A+VVr7bz+a7HURmfFJUM4xyFMAVrKQa1/eZ
+Zjb4Xul7gkH7lfgqsQkki5hpCkiDlkD/IJvxqDemcMfvXh1ofqGkEZeE6BYkbgFo
+SppfvbR15lLRahLGWxijHyXMMs077yz0b78CKhJuQa0uPFBIt8Mj2WZrCyBEqogO
+l78S6eTeR3m8z2pONkoLxf0pVMDJO8RUanDxIdGSRKXMOxbl8UvLYvoyH+xyFnh3
+uoHRD+5ni4PcLxA51DyAg1Qb82ooUm/rfLBoHibsUBBAQTvpD7GpqzO9BKuiyYac
+ScI4B8zSGK/AKQAGMJBkXQcoFiiBVi0WwHHyDSD2aYYprWDuubcIGKsYXOdYgbZp
+RRi+zLzKRzWgQ/wqikkPtHM8FQSpNo8u30FCQvFhgpyKcE1h9856S+PPKnuw/TBK
+hGNqquBuP6+Kqjyh/ApbfJxqXxaPp/F5zWEdj1ekYfyn53W3iaed9TJ/ZfIeZLll
+mcaJkKLqm/n0khWuFvRF9b24YqPd5nxOMFuM30g4SnShQvQwxy3WZJlPO6TOemHh
+W7FUerzGCG9UEjlAXLOqp1cDUjsWdozOZriS2Q==
+-----END CERTIFICATE-----
+
+
+WUS WEC NAMEID 19BCC8BF66E8EB3575C1E83ADB8D4E1612B56B0F 2
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAsTNZAJHUzamSAAAAAACxDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUwODE3NTc1NFoXDTI1MDUwODE3NTc1NFowQjFAMD4GA1UEAxM3V1VT
+LVdFQy1OQU1FSUQtMTlCQ0M4QkY2NkU4RUIzNTc1QzFFODNBREI4RDRFMTYxMkI1
+NkIwRjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJmHxCacuTkIv2UI
+aaOU+ZMKMbuTmTbGEhH77KGkU+3ChjjtNqpx2DHux/1bcLGPE+pafQg1HARUeoLT
+hzfAeqzU4jEVSJJuTnU3RjZIXskHpmgiw1mTmn5OnFPl9Orwip7BOJ1nsFS1uXTU
+9BUmFn0fiXoq0eMqk4nILi+rq4FSsTanMj+VmqcpcfNnrovDCRhS/4NlO5kcWizs
+Az8jdCh1NbpcIq9ILr9hUvd+zFwM2+SQgir7MBYT2m1Ffa+rEVVlhub35z0BS0eW
+Ng1yjz5ktJff3e/7WLFdihm1HfUFV+HjMNfemXRQ90VrZyYfg/PRcwcu0v8xhkNw
+gn1z87HFrDxdC07vCIzj2tOplT8r3WkSdGP5W2euUVJ3pS7M16Gh0/keHkTTHbbG
+1MRSABMGZH/lwfYKQOkEgoqY+WHJlGwZZ4nihBqP56h1UFgpcgoiHGnO8se/tLF6
+7fLtrLygHJdtUe6UpURQiFWvN55C16TkrwIIwsAwYhyaMLRY07Bsj+vccvjRHM24
+LbVmj8Lq3d33nEcCKjUxpOMdTfI7WUgkDATF1xHl93aCkfPqAoPfzWmnFcg8xK0h
+zRxdRXx1XjLPZ412HUnHDB8rWpFEO8UIgLgZ784fi20ngAoGJ9Rt5QlOuLXGX834
+KpAUKmjl9F9bI1xpPYFoBBsMBlZLAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRTW6EdZb53eOlh
+P3FnxdAH3/LQYzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAHkC2gPC6n9yqXmrDB/HRxWJ9krLGJZKY8AEuodKKgWB
+1DTGO9laZK28P0JEQST3mDrtcJTyrSgcXQu5kevUALXdHPHLeOb9BwqiviXaRLMY
+n+TcmCROvvMJsza+Kqv7wUbKZcTpWWiIv8THhNXWk9vsCL3JOZWLGyZL9QJQoVoF
+mug78gUqepW73K4Mo1r37rEOvptZE3s1pVlwKmedoYyHg0rLrsj9J29z+U+LGl8/
+QIfaGsL/WngBvrugblxwBQzv/cS+sgNIUxFf+N05SOovYDfGDwG7iS7ci9k3hmuw
+bW9Sl9bM0cHl1odCNMp2MRbq13ctyL1GVdetDRcLPOU7s/Iy1CSd95zqHlU+Rz9n
+vDrbkPTuhQpKoKNhHMPACyJ6AGkvi65+zW+YJ2i0Wbw9c/YXTkgLr9tMV5v2Rk8v
+d6DWmDzQ6X6p/nqBAI4lImEfAwnxWJ1IU++lR5ZP9pK5Te4FK78DZ2/23CcLCxBn
+YiPLhoIyioMRuntoszDJUopfAugV/ftKU3orxCnV/Sp7uOHfkGyoQRwdTZ0nJFQE
+rNuGsMH6iCneDwr5UtSQ1APZbc3oleevAV2mE+QSQMUGzzKCsGT0ixe646c78VgR
+OubTjPd705Ncy/f61dpEsH5sN1wxKUJgBnuqDrmuhK8s4p271r+73w4lzwV+FX/Z
+-----END CERTIFICATE-----
+
+
+WUS WEC NameId 19BCC8BF66E8EB3575C1E83ADB8D4E1612B56B0F
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIF6TCCA9GgAwIBAgITMwAAAFWFaQ6MtCvR5gAAAAAAVTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE1MDIxODIxMTEyOFoXDTMwMDIxODIxMTEyOFowQjFAMD4GA1UEAxM3V1VT
+LVdFQy1OYW1lSWQtMTlCQ0M4QkY2NkU4RUIzNTc1QzFFODNBREI4RDRFMTYxMkI1
+NkIwRjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKBoaevSwACw6z7w
+onOQzBUqLLaDewXCXW0W8/82mbbZQ3XGJXp7yARlYs5bKrDrJx6SLPRAPRxSRRt/
+X9VrnrYY+lolToGclUki/HTzU7YURCQ4jSLyhg/uTvg4TCiaWIwNs0wLie1r+zBM
+VvIy+bX+qvrx023R4Uoa8Hf+8GQARrRFXqwsfG6A6kqe6w4mV0651KDYGQORbtzn
+sYOHxBlPOr4qfJFVV+7dl6tr9tbGgkwTJdhZaebltTSaEQqdOUMpzPcQQfvPh9Me
+EHLCFj9CI1sMSoKT7yxk66UNTVxSnqeCVboKLkgP4qCNNiLeB7c3XQPzL+tCWBq6
+C7Vp1VkCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE
+AYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwHQYDVR0OBBYEFPpXWEIYVOkdSAbJwVO/prFRh21MMB8GA1UdIwQY
+MBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy
+MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG
+AQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh
+dGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEANvze
+2s9QwiM8xO1V/l/ngvwI1wmDIjKa5KEHkTxb7sBjozYHrqC14NySiuwrXissOTmU
+Ag46h4GAfG+LwxuCTo3uhn88CTYkeXnvf+xqMUilChPw2MMpwYLf7QeDybwKwRbi
+dr63aMzZSIgHUAeTrbIiziZQle73PmVAbH7EBnmrMn8jvgl7tbvnsOqlEQutnN64
+GN9jfGYEw30eDr/wk0uUochScaald3vYQEub1jW7ApJfWEaAPIVTQUJ90vy+4IDS
+2tAmYQJrJy2JrqNvVfmGtvSoUKIndBLu8pXgCgKMsB6x3qz+ZI1O1Rw0W94tjvsH
+kXEv4zTJMfIAz2piT3H9KZqegRhfOIpemM7iAN9qS0aU9Vz/PuHFk0DBjGnXajG+
+n6LfIV1Q8qmSzOc+j3hYbesEXiJzq2t9IQAofMttJMo6PrbIpwXapR/hx6XAirpH
+uqtY86aluU4XN1vAIKY9710m190VhLBenOBC8GuAVDSR+FZFpz+VmByWG0LaPi4v
+ebKHVnJpbEUE0ZqTN9PVWi5uR0N81uxQkHiUTEFvx1dOdIBITLj9s/xVvnZ6Epmk
+bcrRafowgZV2mFAxhQAFJGo1rpgMdTBZ811BoPyns7C2BoFim0nykdXbuuwLzxfP
+KfL2zJeQaYKQNK1ooxPrKq4X1fhoBAlL26cVj5M=
+-----END CERTIFICATE-----
+
+
+WUS amd keyid 8a0578cf56146fea399af903fb5b0ac36eb2786a
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAtrQ//uVpuGg9gAAAAAC2jANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDgyMDE3NTIwMFoXDTI1MDgyMDE3NTIwMFowQTE/MD0GA1UEAxM2V1VT
+LUFNRC1LRVlJRC04QTA1NzhDRjU2MTQ2RkVBMzk5QUY5MDNGQjVCMEFDMzZFQjI3
+ODZBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApJARGA5iYy3n+/KS
+unR7i/l3wywjewn6qAmJn6S6EqUg1dooc9nykfqApLPE/jgeXbC8IYrbXX6y68Os
+XLNTig8SPdje585qOg3UT3+OFtgFXJvFmk6Zh63fSTcHNwzjVnzQWZSfW9Nr03vp
+wjHLTalW2wGzEA9/Zlxu0tqRGIG1ZyT0x+dlIvdLwYjs8uv6G4OTDMo93/OCPCtc
+BAQvnX38v8KGpcKVXRRyeAdv/38lmKhv8Np04Zg6mvAcimPm5lYa4xVOztCTeUlz
+A7Go5Wo7YtlGwr+4LsE+Bs3BoxgQcFbHkyAJYNng0P9UG2kGK1ylTrGXBjSCLQew
+0HKkLxR0KMbjLdGZDL+3HaxGphAfFRbz0OnuUeplwsgT7is3nbdLplL7txerJvoT
+WCyb/EVm36gKeaIa8iPGHFggntjx47ppHHlkFQNMmDnUwfdW/srhcHOC3iVrTmbs
+qd0Ks+S+skHAYc7DGsu1kroIfxyE6DDx6FGbjEfKh7uYqKPY4vnvs4ISwBXX2a+p
+JSPPLnuNd6Qs05vCqP6Op1VN7609de/qfdpUUQXvuZTmm/u7VP/dSiR+K9NJMa08
+clyV7ZFEjDoEGTCVyDqsXGpxBG6YPnOt04SANJcSPiL0w24VqmM+5CTCHTOTj7mG
+ep7jpVkE0TYv6YNBT1YwD75Wqx0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEUn/X94128dzQ1+
+Yc3mtKhWnV9AMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEABO05pPtCLJ3z1utgioAiEJe/e+yS/mr5BgBiI50lgdjf
+1HZVZcCX8cs6z8BajbjEtoKYo+SoGrhM26q3McTQKXdOlZPQZBKKB38MC00Ijuw+
+L6WT7WI9WM+IafTXpL2rQh6+zWIku/UW4c7Wjl5gxxSF1+rfHisGUKkTYul1BVJ+
+VNXK7W3sz1wRU4Gr7Xqdtfz5p+5GImGITqN6ooCORnSCbCAKUc9vnJWRdQ3tl81n
+T3cko9qApy0oO1BUzzlR93a5/hHax8khlw+aICL97nmXUgxvoHNyOPByVqR7UkL4
+us7u9QBo2FUMmWFknZ7qhSGB+voP5y4IHAaKx9wmLQ5gxW80/DUuFglOWSyZG42z
+cABsLJXtsSWl5jK3J0sypuoyfQP2jBHgxfzLgX1wgQraEe/qvXOEx3wGYbf/R1N8
+7oPKUYJcwAUd+binqqjqkz6fjpMGtcE4sygMhMo86JQxXinzkKRgdmo3AkwCYHTz
+n7GnwphxYp3lNhL7fXuqP1Mc1YMwtUeuu6sHP6c0HfE0xqLFaGhwqwQLfvz8eT8O
+F7TUDFCZ+9pOCkIKBD1XT9PkwLKKQbV7C5xQN4qF9rEcHpEjTIIhOF9daU4pWUUn
+wUv2/7IVAp3I+CXUwTK0Y6ueoObUleO7uvtjZ8Oer8LrC4VWmyibRttMcLHxPc4=
+-----END CERTIFICATE-----
+
+
+WUS amd keyid 90e007e175574201a7a8dac93b323114a887e1e8
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAtv4c0UL6+4w1AAAAAAC2zANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDgyMDE3NTIwMVoXDTI1MDgyMDE3NTIwMVowQTE/MD0GA1UEAxM2V1VT
+LUFNRC1LRVlJRC05MEUwMDdFMTc1NTc0MjAxQTdBOERBQzkzQjMyMzExNEE4ODdF
+MUU4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAw+4F1e5UYcaeGD5z
+eyMTLwthHfTJUNBO5BCZD/uPVwfIBw3vAWqNatlLOUYFnI9iROfAItBoETGmg5R6
+ab8onNsVTlmts74g0ehGW/yNWBQ7lMuxmclpxmS3EKbwpVC8KrQFF0qknCiVicmE
+4W5srYEZa3DmvZsXg5zqkFr14Vuh7r3z6FX2mEgVulI3DdqrxOf+PmMLVAj3RLbR
+6tfYF4bjYBsDsrRXUwgQTldYYK7uBDEbIeTzdzPfcoq7ORJYvF9XoFz2VFqCZJ0I
+FsegpNn1QrA068sNnHylMctDVKfHS2V3SW0m/EB6ozy7y0iJrwRtYo4O8fqSgJ2I
+DIMlEr+6158okp7Q7y4yxSdwcuUcy2DxxXsdAoAsQJTjpl45Urxly3eo0KTcDs94
+j7VO1llBPUHgwgZEAxsq4w1u0HJ0nh9o5WVDOW47xMxVkbW5MJ7y4nv5ZCVl7j5J
+DUCxIvJW3UsG/uSiYNlDIHL3U4xx1CFmzpP84tiT2w5HBp/C0FHE8E05mnGsEF8Z
+X/29Sa8yTpFWCWlOJV4wXR69ZX8zVKaf/PVr8YvPPxC5x0sZ9ENxjf4shoGIbio1
+YaOBhzfgW7lpz4l6/eV9DA6WEFAKL4AhScGLwLBjGi876ZYIxFpR6Z5WM1w0s10R
+zG6WDaQ09abYrDjyvFhg2Zg6UrsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCPanc2Rh+Af35Zl
+LlnpvYSSY33CMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAFujhUBf+LSkI0gICgzeb/OVEpRHrfXe+H8OVCk4ZtQ+a
+P11H2REXtPEmNs25CvgXYY4xyWCvmhOieRbneRnY/qTgr4Ph8shAxz6ClTsh52yZ
+rzU7om3M271hLA0oaH9cias74K6iljYfe150lGMhBSk8dQ7JeU6alCC2fcBSZyKM
+0sGl7Zk3Ayl3zB9VsGI+GXIGpWtK0/rnPG3bX1LA+t/Z/NoF9MzSDjcRASov68rH
+bcNNlh9W9Opcbfa4mkWevT+k2oCI4RfS8QO7RZ/C9vefi+nxwvSWkqh+9yk3wgSa
+IQO+3h2sobb17/i6ZZ6Fkk1bFp6FziXgsjl2A+CR3X3LnXG6BQ865hsxPoJqcDPo
+HUKnyeBefuik4R0lbnQXDjjHp8YN1jy6oOg9dVpOWspz1PW9neG8Nlk2tEMeSp3f
+BNwqL8oecYxGdmzlopyblBf6lxzGi0/O9Y8CYDvkFpAvo1hyNrvYxOAZVjH3mnfA
+o5hAFCALdyUuYchr5IazDhXoQO8mDD23cdcpo3huu2vfBFLfG43TiCOpznPC4upH
++9HMqRVX+5ucD0x23pCNl16yrk7dRnSuTMT4pL9oTg9zXXI7JicwN+7xbDMoDzZl
+ppf/xYHYC3hnPYF6h6mzSY6G1kORRjWRIf/xAHa2zdVoMlMlN88EHRMQKFtk+fg=
+-----END CERTIFICATE-----
+
+
+WUS ifx keyid 0d9969519b979d32ee4b803165664e9cc86f9d0d
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAZRz6jY/vbsZQgAAAAABlDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIwNzIxMTcxNVoXDTI0MTIwNzIxMTcxNVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0wRDk5Njk1MTlCOTc5RDMyRUU0QjgwMzE2NTY2NEU5Q0M4NkY5
+RDBEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1MwPa4gpzcqyR9kF
+JYvYD1KrkdGrmfCBv2dZ402NLppFLKwB62Bh9KZMisMNMs4j0FrFCrYNARink3tc
+En5XozNbFM7xveQWhCJ+oedWMEbOrPoFvfTMRMpjy9twtSuOfYnGxBG7OIj+2gzk
+WO8gMH4zBzOPcgicsThlK2fvK+nPAgEkljDNiXQ08AvN+uM5i9j7vPjRqZ2ybklE
+FIJ/PFZh0iBF5QWOvpvSmujkvP5f97kaeAAowYGyo2DUJXDI4Sjgf932kWi2NHFj
+V4X8I0172F03aLwf+Ckgb7ner1feNoz1JXVmtQwGiI7qMh+Wjpe7Raf+jUsZCBw7
+99u5UqMAcK8D1zKmpYUoM8I7ZudFRF9JaugFx9yIaUnOL9e3YfuKLLFbwaSd60Ch
+2FY5YGokokfy7kGPpXgbqPwN6cgp9y2U45bTvw454npVs+cF2Oc8VQSb99de0r3v
+wgNtmHhTztxaeyIeCUfqobKAS5Z6IKWGQ45Vnd7CoBwRx3HveD91Z+gwKeAe/qWR
+sl12Lb4s8f0bavtHqVU+Xlfe5K8CIrn5u5TSRi+6cs0b5NnKwYdNLr0oMx08rtsS
+z4DpNPNw4t1MDqeozJW0PwSjY1eMNROMVazaSBP3sYEZXm3eeCL8AOgYwxRaiZbC
+fTPHqoQD9nJY+ByJAGEgLflzsl0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCgyqjA87As0ueot
+xDAsG1mpiZOoMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAMFWEu3XMXkUKdFwrOGPWp7zw3mt2yyRP4wpkGhgi42ty
+IKAoHuqP3Q4uNl43kxiBKlJtnKKPY+M4hsjKIsul++TtkHurueYmcVsNsbuy3gKD
+XysT504CmlzA1GZmVbXJo9mGSqb+gureTUuRA4v9Xo3QW0GcB3sJU2XmVSRrOI57
+vV1vnuLnHNA0+Aafy6DS9S1fuQAm4aWm2xXd7iLWoPcvaSmI/XJmRn3aLktP5i+G
+4KRhmacPFCzIWrgRjtgfY7eWuhMgBXOTPjMBvJrHpfnSxgFMsUZq6HqpfgYM+CTu
+wI1gPp9Mo8o87dZpf4vURUx00qpWQeSRAaScJe5FiVf0IUoHmXCGFIWQ+xN7G0uV
+WR/siK8GiFb1HUEZBD5f8bQS0n35rBjke2t6iiaPgMPcu4QyNRzCfMvHbSa9ZigT
+e/79HRMwwIdp5jli2crHIbIY3sRXmMYZ1xbhZzT9FUgDDyAlil3VbekDDRExB1iZ
+5pCpcBvnglqaanpdK/guXjrJWnQ1ZYO51AWgyZYi9tAg4LYD0Hjs5bl5JBZI4UJF
+Hj/T7lspHb1zHVuVcY4lSimHrFi8/yRpINPQ1BskyAsYKtUjujTlB1TjD0YWI32t
+yMi/Lp7VpA+yhwlPUfgjPGjp5Fzi3YpUnjHugdNLAP6d4ozBr49u1cbPZlv/ayc=
+-----END CERTIFICATE-----
+
+
+WUS ifx keyid 18b1af70b93f991972f362556a9a3fbf4bb24e0d
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAaszvxPl+DetsQAAAAABqzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIyMDIxNDkyOFoXDTI0MTIyMDIxNDkyOFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0xOEIxQUY3MEI5M0Y5OTE5NzJGMzYyNTU2QTlBM0ZCRjRCQjI0
+RTBEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0BYDuZ9U7ppih+Wk
+QoaQLKElf0ipdG2v34WT0z057YPeqgbMv7mcrLcsivrKDYl8xH6Lf7USzrR4gUOO
+tAxWHjSHXMK6R2CIJtU8keuJZ5FWEG2DSNU2nWBDPlIQUW+/d2/486uKchRacqZK
+q9mn5v4wumkJTTYcG9K2fmgB2vz8fpsfHPYGxRzSfQ+0dc/172SlIRc4CyUhzTT0
+zxlVszq5AjIMMZ1lp26kc/mf7FlrJfGtKy1REEMSn+iboUqVMhGbP6GffgzuZAa9
+t9DDdsWdcw+118LmzdUFFawafzKONH/t2kWDouJyxlkGst6VU2Zeq8AOATap3ewB
+Dsxeg360VNUzoT00ElNU24y5DmNeIrKrhZvk8Y36mueqMGcJywh0jgbdQE44SBGK
+vLE7fYHWGBUvI3x2/bhvglgSidQf5QpTJtU8a2Cfb8QWRXIdIlVDxIBTqBjziFxs
+jq+2RXqO6DZE+SYhLvfzrWa7NAF3P/z/GFHyKOxsO1O/+sNi+VnZJKWpNuq5T4at
+OGl8nE8xrOTkbd5hMnQ+ZKWUB1Gs3SPLImx2u3izr0FTF7GCYd1m5CNwwwVSuaoq
+UZI+j6tC6il+NgaB0laCHEUvej77I26FTXJM5ZzEUc3KbOW5K7LUiT1tF0qhmgLg
+hCaf9EIkvAiMBfbPbU3a0t+UQ8MCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLlTYpYPZ1AWBHly
+n1RXqOXcj7zDMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAJlNYbrdiig+fB35bVqUujnuZzgXQbjLJYs/OfkAvSU03
+jOyIfSVhC+8Q+gcnSOuZkfXAU6ZgtuyhHGuBVrDqLZ7rjJEDMbIv0cqQmNY7il9V
+hqGfpm3iBc8Ny0JxuV3UartLJhcs+OZHLJ2q6COK3TqMkWR1udDP65reUTSS+AVW
+MnjPNv6JZj/HFrH6niYPk8WOmbyYwM9oPCvUAYttmkPxL27zAHHUy/ck3P4f6gUg
+cysEvHqtSAN6hI0pzEFrpxvdUJmRuN1UYjD+xQrRccYgel2XVeMFRdfwxG9imadD
+r8v+QYrWOnpGL/qSuSytfbXqq3TdR7w3v70ZtITfSYstKO9sLCews9LNMrAixPbc
+s+FzGcmLeo2IEivIKImw+IAsvDqc7zwQ6VAQseyzB/JjbMUugWSUI8/FfxRkIYHs
+6Cv65443CnbwKwEARV4npt8froaBpnxHdzryXu2KEcFruCZnKPAU8qi2BrbHrXcN
+WbG4tjGS6Ud9x+7CaHm4J/HUXqlg2GC0ShKawiz5W76moS9oP6AA+cRKKLAbGqYt
+h/iYjCCXwlgQPf0TSJGnCBOkadWdTLl4bSkyXPT/8HUWZ6zy4I0sdx/7gQE506ss
+x61mmjHXrUgi78akAc0Dj02TRmj5gflaJaxPNLZnZSlmaMddfdS96nK812NQHV8=
+-----END CERTIFICATE-----
+
+
+WUS ifx keyid 263b744d85412bae6e13e94a53c235185ba4eeec 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAdqY7eEpfLZyEgAAAAAB2jANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAxNFoXDTI1MDIwNjIxMzAxNFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0yNjNCNzQ0RDg1NDEyQkFFNkUxM0U5NEE1M0MyMzUxODVCQTRF
+RUVDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwbhN32zc/FBVxFKi
+HX4LlDyhQ7KFTkoTKMcq687Nxt344gcsO5mrlqBKLli9pjlG97DDA4QTQqcmb3pE
+Gj0ehswvNAxq1I07LSu1VRUSiOlXB0cgQT21pthQZu329elZ0uNNiKXV0Ml6jBO2
+khKoH+Web70ImIWyl4pOOhVDipyGUvuqKS+7FOZJ/AnkfZGBLQdg2TL/SjAj/NLj
+tNXmgtnvxD7rBaLM0u+DQGCwAVUzZtufKg/vxFwhZz9KbHGyCBAkpw1/+bPGr0eA
+IKDMfckLV69rvNbixBnqcYMRL0v562gboogbw1Dj1l8jiaGJF5EDaYuppSxUG+ag
+HgtU71sBYaAFRdRcZzbHy/yreXe5wF1R5hCwCeZyjxdV3wXZHhQ7+qa8naE+cLgI
+0yKgZ/hDqGkBNGGXtsIvcy4RUuVAijtgC+fWJKOwuPp0cDZNhTvUSBAxWdmSkrmr
+j20T3xWSaOT7D1f//9hYT3v1FWSpjg2FM0PNOdIoVxqfnDZAI3NXy7m22DYDSNws
+jYuuZ+4uNoGAG6qrj0yc02KkqDRf5R2BBPvWJ7sgCngfpr4VRtPLjIRgJgyqaQhb
+8lS7NVv2MY3l+TL9Y1BInDBWr5hHzRM4w3hfJzVR3cywsvFNSBlEViNaCyj56hQe
+oglQnKlADqBKAnCAlIVCQo8hgx8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAz0UHbPy4dsbXvd
+NOHadm2YB+WjMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEATwq+bOJyMhNjI9/xy/c9+gWn1pG3cafxt4Y4OlHt0JYh
+Zbg1SMki0JeC9mVFyDX6Br0xYhq2N6Pvx0ziIc602UeSH5MCFCEkXwEKL6oxtvAJ
+xNUUDv65QETCAs9Cn1QOZbWn9iS+7P9R3iVkdhJy6OLm1UOiL82io1EXNpHpFuUB
+S7NKYpdWV67bSdZ4nSBLeltRvUn6eZbVf3Ll5G7/0iK64lc9YyRMryXdB/KKUVI9
+9+bepygd/nM2P43cBhT+KqQ7OwMiI3U4fBOvNjdqnsB2U1hlha0h7VCE1044iD/d
+/5RPQx1i+26bpgYNhp2gokRrxg76QwJLHL/vCvKXg9wYAHhLamQfzEx9sH4ew3AN
+hbheWEEYoqTK9yFzJ4XGY46msu5Qp7P3SCoBjGXh1sJW2vqzu1rTLEJH+pTL5LoU
+eoRPc0W8aGVppsa4aV8Jqr/EL5rj/r7Ykpr8ANMve6Dx3pKyye25/i9QWUAOkYjJ
+4RBSipTGVNuO1ryYVB2lL1tbK54wx92gjNmMXbJT2/2FlQm4VwTEAYSky1iro3pN
+DMoSG2EolhmNrYLdcBbAdk4qxBP7ylqqAFTFWvyXMWv52Xt/J43pCOH3f0HPJTRE
+h0UHJwj2DkQIqtGgXiT91FmopLsG67sBm543C2c5G+vXf17Hg+jsufYe6sKKY74=
+-----END CERTIFICATE-----
+
+
+WUS ifx keyid 29fe69630e853a4cd3575f84392a9bed2d7e8ca2 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAdemC13uHIuwcAAAAAAB1zANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAxMloXDTI1MDIwNjIxMzAxMlowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0yOUZFNjk2MzBFODUzQTRDRDM1NzVGODQzOTJBOUJFRDJEN0U4
+Q0EyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtW/i2zNnBxfNE0O+
+/XExT9UnfzCW8JVJQP/EH0dsbMbNh1ptD5MC45Qyw0/l48frpYhh7G/yE0xuzUFX
+KNip/nqupQmSQ0you4yWm31rOjHl70S/1JmIrpGxLfy6RlrlF1CkQMtPUAmckNJQ
+dWeqxHIfoOYdr8s+IAyASNi5iDJejMhBeGwUjeOVb/9Cw/JPPJ/vueXC0CZGsWa2
+ZGU3BJkrxHcEBQwDjBwQmZSUSxRrvds3EqlsWOYhpNp8YYUwei6UVX/MpB1RBVTS
+C50ssLD/bHguw/aZSWsG/cHuWvCanGO53teL8qMVtDiRKkuRCs4Yqy2oJyWbojta
+smEEv7f+8SctOxDbRj02m07UaJmpcLxbOeRgDGptKFFUBNXhBQJiy8pkHC0Pz/gC
+WogLO5ADGRV80STwqaNgRtkYJTN8q0KlndkS78gLUT1/jnA67PbejZwj1C775x3J
+JT9qFlMixuiGiL0sni1TXiWBoQRdOalr5ySC//+W2iokinWqsATgg9ew8ZS6249l
+FlH73jswbrsE3g9vsjJCsRMoiXp6MiDo4x/VSspKl9T1bwEDP3uLWL4W3/yhL9Ot
+TzOKd2FHC55c/07nJiJdZg08nzBE/LITtuXGtcTBIdrhiKrSCMtqckVLgZL0Sl7r
+mdEKIPmQGemTZ+2p9NlMH2XWFpMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFf7VAY/cIHe1XXV
+CpDvV2tl7IIUMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAKLzz8ysfP7tx+8hdOQ1pWEy3rMFgiWipK9skdLU5W/8j
+9lvBQpi+K/F/A0kGrAsKq82+qVgSn92ZCVKMsg21HJpRD9+WWc+QgdgCzWeGuAhg
+CvaFbJojHln+ObELlMrsjIkjc+sOuw7Wlh464rax0CWiPTUAOIMHamPcwvP010K9
+1dWIk2NVkUywlN263RG693clCjmwCf6yQ+rSXFt/toTTMbNW3R92ve7TF6ortoJB
+2Mcpipyj1hGz6N2C5M227pZm0He2qfabffIZJIcLe96z6xvgabJee82nVciQ4GUw
++TpMJO7k0PX85Q6zwpUbpT4/+3AiE+xs+s3h3n8ACpdFr/qhuiL33gMjuF8v7EGj
+kMygi5QqMkgyyWFJQD/Cys6za/kCumg3xZMFbU4oWmnybGPqkfKsv4/YaTsgfmP9
+KXWjCV1IgzI7jB6DrI+yG1HDbpqVvV8wBrRO/Qy9h8hqsHmHoBTKCUTwyQn/xBHq
+0Ckc2FRsKb1WBcYbimgH+LtAixSFIcjYIkAnAPhYB4BNh8U5pCCct9vCEhRYnfvY
+j7ATSNzhdE6J5q1Q+46N9Zd3QYvqXvKyfyAvsLANkP+RSsl6H2iZMDz1l+4p6cPu
+tO0aFZVDPx5c0e9g54j54BRvv18sEXPjts6GWIJbuADLhUFxD3sHtVPor7/Iayg=
+-----END CERTIFICATE-----
+
+
+WUS ifx keyid 2a77a0e342cbc6c72ee3fafc3b0a7bcea7c9ce4e
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAajAHkvt3mJs9QAAAAABqDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIyMDIxNDkyNloXDTI0MTIyMDIxNDkyNlowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0yQTc3QTBFMzQyQ0JDNkM3MkVFM0ZBRkMzQjBBN0JDRUE3QzlD
+RTRFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqHUrjBc7uCry7Gvv
+Eh78A3th0WvIamCsMgksDR85Rcvhukwpr5KQ/ihrB7UiRRDeahoRWXliUSyv4Gwa
+8gCCoUVrM97JczbdRPFYb6SNp8x18EIxMNNt+j3ZkhZcJkE1qlU93guJ9+PgsIkh
+dLidLdh7oUXW1lGlRqIG++fFzs7kMLxsZjwzwex/CoBi0G/T1YFoThh19L5x8gw7
+X03mgl8VS6FqQo7HdIQsffZKhJ+NZdYYfFPvv5/JfvoOMxdwqnmi21usfMgy3yhz
+v9OYoZs7nUn4N+GVX78ckOGIyZK42d2WrEmSDdg7uMbxweKRSVNPhEFp11IdCewq
+uKoL+LoSVIBYPW9Ihpcqwz/D3z7dHQyh0CHioLvrw1M0MJeJcVCGw9lBNutzcCrj
+1EF43DMwp6blste1C8tTqfh14+8S6YH6BZJMOHVevHVMeyhezqgFuEmeI+N0S0UD
+vXzBa0a0fehBjvSUyQXHulr+BEyIb70ugEsqJ5tu2KtIKq5hfX+o+nzIS9R5yBjX
+7Yw/NTIAhzfwjJDRog3TbUZc6nufMFWA9HRG+FGz3uGXvN1IqsB+H+PIM0a5V3hD
+QdFbXAHZsVxc3OLWnUhoh+f9nK/v4IDJcBcnZtJ35om7o/rc13HtQtQEUihzDF1F
+/5IBDvtZqGjXoE5Z0bVXtDb8CxcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAUjzqqzBC3R+aUM
+FPyihNYXbqigMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAMtnNApxEuP8mzbcON9kDEX4roj+sHV9rFpbeYL1bvfAY
+7f8mKXWFtu6ZekbFEspqES2wCnFb05VpxFOStHei25jA3NCSSVS+czDwDYLtbP75
+KF1zYafpUICZBph+lQupB1gCgw4JKS3ogTGhgqqtUej/ntTF8BrZQEmpvdoLk6Pw
+EKPEh5D7pLOVn/GCVda1eBfBK7sOpW5uqoTeBrZp9cF5G2iWzm3VOKRz0Ee4jwbi
+Xk+tyNPFruKdoGKcXiFBWu7QhLSveHwyFw6902NjCbRsTLSZ2zTF39JAuukpQBuF
+J8w0GY0cDl54dEZZCF05NsW/xgu43V6roXNHtU95wkN2TKKsP0Ihx6F7BVYbHG5t
+hfBVG2i8vqu9F3ItBipsW9QfYQon5XZqxc9u/NmrEUNf/U9I5FHtYK4ywDj4sPH0
+5igHdeYPl+pcg8+dqGXcYer7wM9s/ue2kfn8eSM+Wx/abZooBKBNkZMXrZ6mjyQB
+I1SS0DEU+b5sfX7z+hwdNdVolZAeGRBmBxe7ZGYr7qgnoAhi6aOYuPSfE1h8ko08
+XwoffiEH9d9eYr96qJ/GfLmY3+fPjZSCYtRnpkySEIHqwXXBQnnoGBhdYBCtiefo
+FGTuXZcD9oQA1qeK78+AYe+sZo0c0Xra0yJDaFpoxOtpQbD4Xxbt1NNHbUx0Pqw=
+-----END CERTIFICATE-----
+
+
+WUS ifx keyid 2f572bbadec4d18e0d91ff4375fb468c61b8c7af
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAak3xz6qdbcqGAAAAAABqTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIyMDIxNDkyN1oXDTI0MTIyMDIxNDkyN1owQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0yRjU3MkJCQURFQzREMThFMEQ5MUZGNDM3NUZCNDY4QzYxQjhD
+N0FGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqGljqXVEsanEDcOk
+k/jPMbOMosBjFfemyzq8790BZWW/1lxmgjYNcdAxvN3Kh01/ViiGJQ+tBQUpvC6A
+RDqPikr9ztUvogYnxVWiHOn3aVHD+44zAwTArnRyUKuP8fR9jgBU2Y/CpjPQ3BR2
+K1AZDWEuD3Ge93FjntFkepnsiQsQXMw+7yyhFiGeOXTNNsY8gX/6D5/YEEGMHzz/
+doNQu4Aiq6XxVeor+wvY3AXtoU/cMIndmoOtQ8XJ3dw10w+uLm+nrdfaq6mHl7U7
+/fwjjEDlrh3MboComNCTT4eVmu7aFCav6GLzf/4E3jbAJVAnD7ph73hQw1cy0Wwm
+NN4xkItywsJeAZEnFkP9z3kPCtAnV6Qqz4AddU7FH2uuA6wg7CsUGf6MnS1IuxiQ
+tLfep8Q4evoUN4roWg++179asJb+e5deyXOUKoYwai6PL6TEt4RSQqVo4p42KB1a
+fExVI2vUhvspidOejDRwW952WqEYMVAJKdH2q1VJdWoX4l58KWC/wkbtn3U17n/j
+jQsFAaFe9wLE2RfwesvFOAtYwy3O3uz9XfujizX/bZ7nLxWytdu/avqFW24JXUZz
+K+KZo0ebJec7TQQgEYkBBnCIugydAYEZ4gHheuLn5fSNnUNZlylQrQBXqnw/Kj07
+FIv+ZU58Z6d2YC1cv4B43p7HZHkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJS9Vi6co8beOX2b
+PVOUX8oMBjknMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAOFHhKl9U7rkHVZ3+mhCg4TaPkE6Wso1850P7S9I6La0j
+5EGp1jI3mH+oYwNRaoCb7Oms4aTVEGLXpcLPOfrj6UI9lVK2dC0r/Wp6OLeZRxAB
+rrvuFuNq5z35hzYFTPnVJwAMgfpXxs4nt7O8MV+rr1ypR0/V9FOFF8WRt4hf6PzA
+cg4bVfKpmwYkgYJQWaL5I+yIz7/RpFX0v7YnlTLrNVN93DOjMCN82PKH+NDnHxPu
+M9PIt66S8e500v6beVsz3N/DLc2PB0lhI8Hk67GqvfCW57KOtPRnTcvxTcnSxbml
+gJHCE+3wkpLmeQqQF/loK9uh9VGms01r23BsKv083IC1OLke5j4oNrKDc7sHJZGl
+I+jbNIgIuCtvgqA4olmleg9REFxxhrzasutqGu6tjGGzVTVhFjdxhMwheevin3Pg
+ehcYtIKeoV6bHUkbIpZZyhNmnGsy6ROsz/jFeKVoxJjAm6GVe7AaW98Q+4KnGQmx
+uQ9IJkzYgzzWilmrXof9PW09OpsEHyr7pOe0hVrMZQg5A+STvrrVpq0YjmWreJ+L
+Q8BvRcVrN0G+Pn/7ONit3yGBZzg1Au3z8UF8nrbZWBUiRo7yO/yz0x9GUuzKAcj5
+O4bP8ijcxR/vRjqLa2Q4pHkFbzu7RveBYlAeE0uGublQsFzcZyWOJu0q+cJvZ3c=
+-----END CERTIFICATE-----
+
+
+WUS ifx keyid 347c93cabded6168c61fdc8740a7353e46751616
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAax7fM2S0IMmaAAAAAABrDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIyMDIxNDkyOVoXDTI0MTIyMDIxNDkyOVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0zNDdDOTNDQUJERUQ2MTY4QzYxRkRDODc0MEE3MzUzRTQ2NzUx
+NjE2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3/b7+GvRi8g1PFvR
+Gouwj0xGJWOjGiL61D6t5NpfmhBuq+B2b+hzTMXLJSHtTTKcasnqqEPHSB2n8iC9
+SIvN+RSo1EmgNhcEggwgIMGM0aoJ1g0MuIVOsi+IJ+zB7aOorg4cQsJhZhZHfYTl
+wdVRziqxlMiOmInTIFk612iOBzqtJ9+SXCTX66xX0bxf3OFJbdSdZ8W/hB6b2ZM0
+ank7c97/lZtIqD6GX0oXJoUdvJcsMFDtgqh5UVN7dkF4r4CfZXywmBhms/e1IKfS
+644/Lww58JbVRNQRRPbp6SRjd7dK82zno6tLSIreas6pf8GTE1D+/SrfvQkSQZ7s
+dWNIOCNCffZV6RGxcTLAyZL6bFgonNY1g/05L2sWJVOAC5Stn7Fp88LUsi24+9FS
+tVV8eSFUcGudTpr4vgHVuLG6XC3X88cTqnzuRVnRUkmFQ1Q3CteexqZdhtxds3D3
+wCbNUnG5S11YSpmeSzZSiy1N99PtAebaTv0kbx462Z/EmiKh3YA5zOfKpxOpdbQI
+AfksQkwyykdKYzOB2guTbnGifBx0lPenH6pxDoi9UgqhFESfELBEyM/mbbZtHCNr
+BjEwzIMnPH36QZ72pj0c9OQBjwNmolgIispAAuNFso3QPslEFnUgt1QLyK/KsL2/
+wLM2M5TYQeHMB2HnC/o0aG2tprcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNHiq7bCF5EQbI0U
+e9ods8o/u8IrMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAlUOGaNUwI22a2YIxS6kQrDkrds2SL7kGyAnefQ1X6DSg
++/8X0mTmok6vFBO7VBlThdRcoEXMm8WoG3VO596D+lPBqzoKSx8B14CssvKLkBaw
+fvcnbIDZDJYJNhdQzFaL3G067klShhP9UHNmla7njdkeuhosZPiQmvc4Ran8qVn2
+PlDjOdbBl00I0wSUeLhh+/lwoPJdxoaX+TgRyg6nshc4TPt2yH1ztyS/Ufv0l4Na
+E955nQf+hetWARzfKksESqyP3xPZOmdtKfxtsVfWCPgKMa6q0A5dn79J1Qztvlct
+rYF0oE9rK8NHmIEHA4NukRtJhQ80IVzW66BXzqgu+CMQAfaq0+oYlfsIkY6a8f+W
+Bv31M209HCmhAiPdA64Ieqj/nQ2JX1BT4ov/CdIHZx1do8ObITYY4xJV1iVJoAx7
+iq6a8x3J1hCowvzLsRGuhCz1XTmvNz8+mxxjm1whwX6HLqjoIspBZG8LI7HyNlbP
+aLB8/YE+yFEWXuSlinAC9zgj3NwPFcMO+eYFqAY6ApZ8etuQC5hriywmSPQRNwt5
+KBKKhkwztPoljtYFCkXvKo/hP76q9vqCMN8T2LJswtrc9jLlzMgl/3DGfVfOqojd
+SVnkvRz8Qc+83j8avqEtt7SjbO7Gl8XYy3RXEtNhyLQWbL7D3CWxMhh8fhqN7HY=
+-----END CERTIFICATE-----
+
+
+WUS ifx keyid 37ae346baa54c513cff0290bb321a22a34a4a8c4
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAYmQElxp8taimAAAAAABiTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MDkyMDIwMTAwMVoXDTI0MDkyMDIwMTAwMVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0zN0FFMzQ2QkFBNTRDNTEzQ0ZGMDI5MEJCMzIxQTIyQTM0QTRB
+OEM0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwTxPMntcEUD8AaD7
+YPjEKJg6uRXAx5rqJIrLavEXUd+A3JHoYUU+YB3pm3Y8iuuTyVSoy0jcslCfZbAH
+ynIaCwurqYAbjpCIbwVoN1A0vXL5CRO2YqEVxcvjzjvBpJcgX7+niqzNURKBfLho
+yhscrHacreDEjLYI/G/wGw4Xm/ltRyL0AuvxXOnY8AxqyHQm5u0bRUoUEhg6iah5
+YT8tm+W/IT0Fwgw3x7ae1sfgUjlzAix+2y9URcCyA52arm2dFCu0VO3rS8bOX6la
+CLF6qG+C75pXh2gzFXTcBH6IWBTHZCAwtUHgeXuwfBaaHDATRor1JZYiYCPOx2Nf
+suk3nDIQYmUEh0cXpcMjpS/SuVeh0sczy782hbPQexN/AlxsjzD8ADIK4Ha4eOZE
+yS8aH/1loUp9LtkH81NW5A0txBC3rJrcTljH2nd9OGTexal2pzDq/Rum2/11ki+R
+hLGi7UjGRAZNtHB4VCrILzb03EIPbwSuXLAg64G7lxQtvI1wOFk+JpFazG/l5jNp
+/TkKMa0yJuW+55zWRdUGLphbIxhGRQUtnD3mypvoENIdsNlqiqzblJuMFSMGc29h
+aGwD4CVy39DGqKSto27Cc8qZrcFV4BC/ZTgsIsk2dSTMU22e9I/Iy2eYa228bfJW
+5Dd384n6wrDtvrVq7nMAbE6nehMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJT1oo+vcCmXEvi6
+Ehtk7TU1XA/QMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAHp8IhLskAHBnE81dXUpaiJeQk3BBu9AqsNaHZjfv0zKq
+fuNYCFDGEbCaCkE4y1e2K9TUh4tAzEVQREaac8F+FyKRRi+wWNhzaMMMGx8Bdd6B
+T/ji4obv5emvU+NBbAS3B/3jlxoq07zmQdaifb/1BFwgR8UQvGDRP+jJfXe47EmC
+82U4Ju2eCyZGxVs9VBPTVBC8KjVZEgfbmJ8As9jOclzDDJEwEO5jj0Nsv8LoQntf
+c6ntwGc4G6Cs+A+xuxsfZV7287JkYs5ZyRQpOEzYacqM9yuWnMpSfSHbUT3BJZ9K
+2I+1lhOqJuNOKk4kdc9oeLKKy/E04Zj4xx1S1sdANnOdjNcJTT667yleBHCSd2Oj
+cU4l4GpiUI1XBccN4jBLLDj1RCTA5jCuS8Fla69JJ+arCR1YwPkIlkNhQC2dpI9u
+FFTTyhoWCHnBiPSKAPGx2ufu0VX7ntYRpGldnpJL0pEsx37/8QQ2yNN89HBtA8wy
+ZQSXUgWGVg+fAh71QSHv1t2w3VRVyxuaCDbnDIajQlsIqp2mGmSy3omUqGv6/fmc
+f8uuQDmQzFc5hCjjNEUDm/2+yOvXBWEVqzVHoMQ9WsJuaqwe116Xtpeco0t5nqzj
+n2bj7ib6KoC5p9Ld82Ol3LPhmmR6N1DsSNA06KXy+4zMOuE9gJ34lOi3yWLZSJY=
+-----END CERTIFICATE-----
+
+
+WUS ifx keyid 37ae346baa54c513cff0290bb321a22a34a4a8c4 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAApQFdaVGqlv9jQAAAAAClDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAyOVoXDTI1MDMyMTIwMzAyOVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC0zN0FFMzQ2QkFBNTRDNTEzQ0ZGMDI5MEJCMzIxQTIyQTM0QTRB
+OEM0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuDwdAFTtGvOq9j0Y
+Y6D96afPKUJSTenji768wGoSCEoUmJVrtufupm3f5Iy5rsQyPBsKXqXvCznNMvmG
+lk8kCKBcC5swWKDn/MnbIpNIZMhzbyILg6RfH2CUq05M5E6+sOkbAJbXVyHODq4F
+dDZmQjoM2eAMp+bcyydwRitTK2CXKEGYHp/F2YKKWoDRjgn9ZZ7HXZ0Za0h8Tcet
+ty18R0bom7jzSI75x/nlH+zQn8J1TCJtF6Hr2nCzOxtUQjRXjXXviFZwhtm90elM
+wb767SGKlDT8PIR36Qj/ijpMS7ytgrBgfOoachm3ifog0/mR1QgyidfP4KZg2fIM
+2LC8te+NrWMTlVOh6kiMNBXcAqIPygFx1slUw0VZsR09ASvvM/DGN3nZbog7QwEN
+6gg4hvGVJcLdYCml8q2FDi+iXYvUp9csyfOGBcOyEh6HbhqypGRORbhKT6ieK/LO
+7ocNs2soCx5h2IRShzooz/PF4FSQ2a3m837akGsUoQi2Qdm6f6FdqpkWYN0/CHRU
+bygiaCeGIAN79L0Ndyj7S/dk3p6D0OYtT4E7YIEeH+aZWEJw3RMnsqsqAnTncmsB
+YBmjX4jBSLx35pZDeOulsLT94REOnxaODUEZHd5PSkN09nnQG1TteahOeqIvNpku
+o2a/ge8cpHUb96WDOkv9HQTPw00CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMjKHPwxAvDUPTyE
+Hsf5WboXbIYnMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAF3KO7AIiyQMRygVft0z4z5eHwizqPrsXiwukq7TjXN2D
+FM4zjrX3gKJOBKoFHSfCMl0dGf4aKQHRuRrvLyIhL3c2CHxJw8BhnxHLCewIaWy9
+ATLs5n9cQB+p7im3DU3uavZa0Knjdzf5wimlY2r1kGWuzzsVyR9nmyR1+1pU5fVL
+L3WaGhsKVwalQ+HiOIx209JKGstP1Qkgzczr5mjutcHza6NZR1tLRivHIn0JuI7d
+16OlJiQJgoqdj5kQNk/p1wSEPaJzUmaxJZCAZ32WVMP31xr8CHZo94lZcU3yTfta
+5WZR5vYihUE0gFIkG7t6+4qsD5sN3ZQp9ZsMJbDn5/3cP4YtDcw3xn/vvjBEXvnp
+4DLw7yTbc6pmIWrPuWEXnTNWbIju0sYbiGrKHcuAhYvZpqnkpnezZLDYrzbYoN6p
+zfedlvtmhGfBwxT6I7TwiYB7K2+eYkXL3IVT9VfThDu8D6FA54tk0OY8jLmJSSRX
+sDhqdpsgIJkYssBsL/wU8r1abHZ7OL+QoN8G+lACpmQ+mgCuMe7aAgU5AGGQ1A16
+6wC2wdG14bc5GK/suzRee6Bshf/l1ew5CfQ0397spIvCZyPMJ7B1Djp/SaYIJJn3
+PLYtePeJYYB3sDs3Kc0GWcL8a5sArG8bS/D+aDSrBQjuLQH2V+bDpk+IP6pUCXg=
+-----END CERTIFICATE-----
+
+
+WUS ifx keyid 40b8682b8d18450a2b06849d9b5cd96f4cddf4be 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAdk0LCjvHqtWBwAAAAAB2TANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAxNFoXDTI1MDIwNjIxMzAxNFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC00MEI4NjgyQjhEMTg0NTBBMkIwNjg0OUQ5QjVDRDk2RjRDRERG
+NEJFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxYDb7aM9Ea4FpsrJ
+3vnp2dfIzfKa7nFsEfp8QlYt72mvXxoYFqK3eKZLE/9YFh0XyNBxF/x9PDEKauKY
+pRhLdzPqqKUO+F3g6iS3NAiixemzNdccnXnoc2WjK5BP3N2H/0g8nFLJVrHz9aT0
+AV4ekE8d5uDqe4HR8c5/tcbTHpzX5mHbtkTUq8kYNFma4OLaJMN2BpRpUb2t2GuI
+OCkoFtL/YTWc4A+DuvPM24p/MS87AsiNPfQI7M6Psl1bevzwOA+ZY6h5YdUoGQiO
+KK1q4Mwvldey8tM02mhj2mzqFs79E/vRchxtOucAPEtH0sgmLhWydoX5RC59kvbW
+BUdSb0/zgNqdNtKv57/nX0pCbTdfPujuOCZ3HGk8VYcNbPNsbfyTHQNXvK9Rt7BS
+XfGcnNzI6AIxuPr61rFV9gZBoUgbZNoSo2nrFy6YFz25b5YjQr/yuyqTM4Plz3+h
+nPs7fBw4p+JmYDD/XrTL+NFhp1Z6NXcf81HSqK+HTBgfdzlNr/hCsdlNPjjj7U8E
+dAOjuQQaWpNoOH8nzvy71/srFVCcTScIisrXXIju9NkgTHeHWrJ4nCQvmaPl1dLO
+nfTEuB35sh4XE3PiykoZJEnoe0cUyoh527wjHqWW+XqXtFb2JItzwU7M5xF7C16p
+H9ctMEG77GYVVIZaQsBFi66DW2ECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFD/nAkidvIBblwOI
+ik6zxcXbt5ytMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEACw0fmqVeBbZicLgVBRDX6WyHc+90nIveTO9yUd+nYCcp
+1N42FR1mt+P10fEiTmbsrNP27ohbkzQOtcJj07c9X2HGhKV/UckmCtDUaMYFP7SY
+5lUFiyo08c71VJGZ3U78IzkExMEhfNC9rQbPjjOH6R+saRt/id713/BlSLFymahK
+AujEy009PwuetUJG2p6JE7JlhfzhKPNFvVVQ2MAUY4oksbRd2XGJe2niuopxzsMb
+oCIEoyjVYYUV0oDW64wOoB0jVKpt3EcrXhgCUSXZndXtcfnR8iQsIvrx2TvfHrq8
+4hC4knSLaZEnv1oc/jhEZqRK0l0dusYHyAbfGmuH5N5xx5BNDfSlNqCKTg3Mrraj
+Kb34Va0kBDyUxZ/R2qp/vXJCn3RlWWsGS/vamD0muxozNUoXGNtLlKXfJMcB2D8s
+VQSUpTCcyJPz4HbLtEQyVayXiR3KfDLxhRP5KpRfAs8DEQCGdhMUwmtyvAgVSkxs
+JOeWnV8H8o+gTyG/cJk+7fUaDVcI/tDKEo2RARjNav732VWVaJjVd21qWEWgITic
+CL5xDhzFw7zAShc0M+2BN11bXhXpLmtpC7E8uEHEqD0dp6iMAkZrZh8L3vjr6mcX
+wXUAQOe1zvrFH9Vzv/HdQMQyHjkZKot8SN3PrzEVV4sIb49/xy6N4fyKrgrU9Mw=
+-----END CERTIFICATE-----
+
+
+WUS ifx keyid 46f26f96330691e561b72f7a63dce3a0517039fb
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAZYnJUMYl5WHZgAAAAABljANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIwNzIxMTcxN1oXDTI0MTIwNzIxMTcxN1owQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC00NkYyNkY5NjMzMDY5MUU1NjFCNzJGN0E2M0RDRTNBMDUxNzAz
+OUZCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0zfnG3M9zNZZj+iZ
+Qf8hBe73G17J3x6d10KXt1TRsdWOeLZdyRcxzUcKp7+D39cIcfG4LLmLdRmz+Y7c
+KRQpmd1wdubrgVVPIhlF4xLmxgaBMj5ywXZcOyV5PSxxKN6IkJk57jTLhptM79xh
+1AFBlhvbVzQ2xE1bGTEjNOInXDlB/AA/jylqs60Fa5W4R/uzTi8coBXAmIjZeZu5
+hRizvnN0HHQFIPGrB61d4J/tXaglH/9kQCcx8dNW68TqX1mXz55rlRLWEWwun1zw
+I3b+W1Bz5tge1HKbKALxbfleZW4vhSJwCXWRLD5Hk6zNX36r6QGf0FVbOBHpNPtL
+MXhVtlFL4j7SzjWvPc/eyvJRrBjJwXuP/ZRkSu23hEcWFMweHX+o/00kp9Z1Wf23
+T8aEaQ/MBo9HO2ye1pqaDkHs92MRPmnhBKJi/3kef5FdUhKfMURmZaTjNmK2+FeM
+qi3lcyGAYiOQgr0gQV8kx9Dg/k9Z8twVD3t8bIOW52uOjfdz8gG893S8whLFEpjL
+w2Ke9Rzvbn8tAQTTVw2CxmHxu274Ta0yZhgNUO2j7GDRZc7f7sMJaQtfpY5QLVnN
+cTY0BSX7D1s6U4MwFRQ1+c3G9hYKtznqCUMu2jTKpK0TAoVp9qYBeSZQ0zx+o7Jd
+v0pE++kcbDcwlvHCEiCIZng15dcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGyNYLqrM3pjVORr
+2Vz2BNJpD066MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAHRgbWKPNSaxEjNk3YtDMpBbiTBBj9vvTTMPfb+ZrluWa
+bzzIpIAaoux1wNCDtImUWShyGMnFAa/KQVwGxxyb89W/mYgKiX7K14AXiTEuUKN1
+s7b+0TSCPm4dv/qd+6hQeARVkhji3CGkjbu9UoNcA45lYlbizhHTqMDh5Z1yR/nB
+kRLgntszb4EfZNDvnjZspRyv1rnpo8m1pDfc2uxh/wueEQX6JImyO3eWDo/JIxyX
+xgfbjMM3f/a8iQfTV8w4qJHLZ1WLy5KRtBInIDLCHhIzY/cIvo1xmX0Z85T9YraB
+zraiahvNLc8AMqmKfAnRoRzT8KIVgVy9Oq8Ashl8f+iSuy4A0jbpNobJPjlm9oB6
+vPetlqyWjiqQLOYEmoLZOv5FSguzfCrztSXgriKEd0AACLb9ra3J4XhQ6duz9yb/
+jY0ccwC7fDv9mq+RNTP7xdtj1JzR5vD02jLi4xd6y8DBHJpEOkQ8UOQ/hTQzAbQR
+NJvhhixEpC/1qMWq87tu+J/uYABSak58UZWJxi98AVN5yjEHymFFtQtTRpwUm39o
+V3n3h2Utg6eAMSBe15QZZYYp5Ry6beUAMBvNGkNzurPdOKM5BcymfQi/Yy5LwiaJ
+dgUwiAFv/77+3rmvop1i4q+7uozjOs7RDF9mMdDQLKImvutGyUFAs4zXfZOhGCM=
+-----END CERTIFICATE-----
+
+
+WUS ifx keyid 5c2920742179bc704db1d8c54c34ca94405617ca 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAf8GjlzzjVi2cgAAAAAB/zANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzA0NFoXDTI1MDIwNjIxMzA0NFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC01QzI5MjA3NDIxNzlCQzcwNERCMUQ4QzU0QzM0Q0E5NDQwNTYx
+N0NBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3Qa8rooeFvZSMtZ5
+eKDqzVX1yjlYMW1g8EfzIpa43uTXwIZFBCacq9UTRSa+KUqoqEH9a3Hm9SHOALwH
+QAYaRicyFQwiJIgZeXRpJvDzUCRdMgsiFUMndBWo7aTQPCDuLoPYGMGR9djfktBB
+N+pTYMBLPQB9WHeOvL7rdjvC1FAdQl1YSs7D+P2WE/JZVybyKiOZYpZqpGydLwkn
+Ca4SptJkLFCKFSaGABW/4GWxUHXPkH4V/FxyfWPFUNMZNJJDIARe9wBJzoEOPPX0
+lXWgtinTN5P/pPDB9yBTMnjHpv8eTy7V36glbXS6S47aBhd9a2jcKRAGubhBYAtZ
+39IPANIAAw2h7lgxep7u/5+TJ1yqVOc4zCGKHn2ej7wMdn75aDFI4HK2oRRmUXBk
+c7t1CnI+rqDWDypdo66VpKT0B18SzGnbiEt5yw2zLhVY5bOyIxL1ST1ZQWshScJz
+r+v7MZuynrxDs9ouLtmsZA70A8Di8lglBfOxwYnDF3MG80/ZmucpSu8l6xsxpOGe
+f+N/8FqBDc5B6Mj5LGbrW55GUGAisOf09nRShq6YPgW8lUKHGJSfSesFUYCcPbxR
+STo17Et9xc/iwP07rsV84ervIQGESI3KH7fJcVAHID9o6F5RfMzoiiqauoi8EXYc
+sr9oezVpRYtLaxV+mgfgjXU5utsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAfR6msVZZZoJwmC
+WTNZYndHXSFJMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEABUpJjBksxlV3YSXEiTjqNJVf8PoNhwS6SxvZydYBFKtX
+hLtk8mE+Xp6Fd5A04v+p+yfTmii32WXObSfRh2W6Mz6x+5vpzBXHb/F0UHG8W6ff
+b34olqtkMJonscKtCOQTG/kfMCdP/9qNhiBKXol9ucSNr43LdfOZgT2jAssW9Ff0
+l5totV8pMnzCppWJyaJ/FfnNShUhZOW7eLronsStW5JpDufMhxE5/YpebVoV++qw
+jygTIRSGMYg2cAx1J8GBJSUMyio26rZlArP5IRy/oe39vZMPN/IgQnGklkLKhS+i
+hi8I/hFfvaG/tSDIR1muCqgfRR1qcNi7lvC3j+ASWFw3g/JJn//OvPf9qIBPBTOR
+WNvc0H0/k/GJLRp37qWbPd2eCRNL2fXqBbaPkZXD/4aqlASojM8ixFTtblbH3JSF
+4lbgw+4TKWr6I4+Sx6hPq8RIWmMWVC5zeNOsxThEpLeolulKkrdUjUEYueyzoBTO
+OehmUaQ+cJJxtYMpX0f0D/H17dBc1vGy/obWv2pV1oxhxFPoqXDIRWF8MjqnnbO6
+guDYZMrejiBMIVaigUCqgiGv1rihfk9h5jRjyrIpiC9eB+BZgE2IlRE9tBKBIUJh
+fQ4CjxHA63Vxugj0JMNdeybl7Draq+7WiX0IjxZIaJrRgwwJY0SkosFK9WLe+CA=
+-----END CERTIFICATE-----
+
+
+WUS ifx keyid 5d0815951f5f60638a69e7252f3ec4becd7554b2
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAZVkB0Zv+61gHAAAAAABlTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIwNzIxMTcxNloXDTI0MTIwNzIxMTcxNlowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC01RDA4MTU5NTFGNUY2MDYzOEE2OUU3MjUyRjNFQzRCRUNENzU1
+NEIyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAty1wEisbErwlRkgb
+qo1uvbDhcYiEG6DBw6ATBO2qg4gOaJVmvfZPtTvH81xqsYcWYQOq1T6CFAzrCYGE
+7y5G0vPRGu9s9B7Hb8DbPjdhDZtE1dvtp0T9NfRs93oq6MM4LIinm2wQUyHnGtia
+xtjt6x72DBTnLF+Rh8f4H20C/9CpWG2MaQ+z9brrypmllvYppceJF8tunIbmRF9Q
+VZypxGCPRzZc3AJcGjFmSBqgp8J571aED4Q9skGcLk2ZH6J84M1x2zV9jlTMXNZY
+Vxr0ak1W1CQinKcxPGX/UH82bpmRdTanlEYLjbfRqrK6dcV6IRGaMz2mFjW6B9j8
+GF9OxmPd4vp6oQqdZ5+90n8wJm/CW3vNULTUTd+HP1RprHTNShuYmXQCJ+VmlPUh
+9YgMQ0sc2zD/UxzU0xE6GFbTYl0im5bI/EggHYUTuXsHgu3yojJ8AGR4JjsgrsVj
+nINLXWzPbHEdN7ODq+ylt/6nkbxHVBfMq4K/xmA7tpr4dmLWZNR5vO7O0BqZrtIr
++kCI25SXuo/iJcXkYZA0VTLO1l4Js2Xv8ZWNgA1TleSAx12gwCLhlqtmm/a2OjSu
+gHj5XOrbegB6ublS48Kbhu5pfiszND+FeMfBuOs+o+a4j9Iv5FiMLzUHR3Qz08bn
+iMiOUikQEI69SXdQ/Ra/6tW75vMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAj5UjjY3EkNPlwh
+2dOijru0ICVqMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAZYNWmvDteLg1SZeUXpwcUaokFiUpK8Y26S07aTGgD7zW
+AThcf/eH/p7ZcpJ8JkLhgW4m6IZaz8GKJfNvNxSN0O0/UNJpSGAuznEJ4iOTsQUQ
+kEaucxlZnORc/cTSdsO/Lal1mfij0GXn9JAuJgm0ZVRaGZtUhWanHWUppdOn/VFF
+NO5b6buTxAk7zajL64UdEuihkQXLowNl9JFM8La6TOPq79knlwIJoTvFr0FmjDer
+TPBFF0h7Bn6/bQxxptMI9BtW3ft8dSE+iqsGYRFjeHpuPfrzJpMMHFKjJmHry/DS
+5y4HRGMlFG9VtEH/jxAnWu/ierFmF1sLAQcLuvml0wpJAfoHFTjZaDDAil9MMgEN
+Cc07+Yi+9yI1tyX7G7v0dyZWgBS1BCK+lNBt6nw4xFZGt3NLeQ79eDc7FeSDKTl2
+gYIvi75Ucs2mrqxmcV9A2AnQwfx6qIK7pRcrFhR8vkC2/S3lDHwGKAUkVArEbds4
+PeJx5D9H171rXVqZVGk7GdVsCkCoYJVouC/FtbK9qmtlTVxcO78VoJA2IGgbn23F
+acprfxjXBSvCTKIy208GEHE4NlZTNXq0N+l17yifpNlFzEBqGAIr/Z1707gjSF1R
+SG+YYwCJdHTwH7e16sWpkqAFz5DKPW21ErSGicLzHEXxpIO0PPjrjJOUaUzHXB4=
+-----END CERTIFICATE-----
+
+
+WUS ifx keyid 69146ac3cfb3665c7ae78101cca5c14255ca2bc8 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAdxPDlWhHLFDgAAAAAAB3DANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAxNloXDTI1MDIwNjIxMzAxNlowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC02OTE0NkFDM0NGQjM2NjVDN0FFNzgxMDFDQ0E1QzE0MjU1Q0Ey
+QkM4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApILp5bP1Ss9+0sTn
+tF8w7dzQX7yLQEnaTLr6GROohyjh/G9odNqZaZl5N3LzlnayDY7YqPmkPECue29l
+J7GIe4nF9MteDLDNRM1pnOZ0jEIcwCuUe9H49wjbbWW1/NM+BGJRYiiWOZIWp4mH
+tfrscGTQl+5lFphJh/wqA/6LyYt0QgwGXWToVDIjm8RvHLUoC03FhpAWEI0wh4gf
+H5nTJL7rIRZjc0N1vuaNy6CGK8ysFyXU+3SFdZMVE8DmnNjM8eNaKuo709haXe/B
+h9ChTJtPM13b6lF+pYXciJvw0hPB9nlrZWLBvbSe7PqhHOYrDwLo/U3HNGzMztG9
+L3PXtwWRqF6QsyRXQz9sJYLO+uOheC/+W4VHViKJTUtPmBOMgflXJgk/N6VK56cO
+MqQVZVzsxeh9FBJ3TCqrOFa64uC73aj09/PgzsLKPrZ0b/zrYjHjWxTwKfNVfJFB
++hmJ/OcPDmRCrPXBOWyKpNqnABQogeC9MVsqM0HXFyECb/Os0uZPbcN9hj/uDoeR
+N3uFIMr3ygm8GvLvocUagahhjvK8/BPBySZZKm+D9QrB8Bv16XSf6rhAz+h9+1B2
+iPKAJM1kHDIuwSgfM915bxLXuuHfyEOXbGiTDhGJNXddCfQ75iBj7OsqB2qowlrs
+yBhJJ0gymMfzNUKQnpE/w028ObECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCuCYfx3hwnfcaML
+qSXKVCkRExahMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAh1Mz8dU/dOWb//4i/+Zw8bVT5IcaCW0l4SZGQkLNgY/B
+OvVxRnmcXjlxH9M9iC/FnJ9cT/KV4vmYCzt+S9ki7gcrVJVVNDQzMDwoWXQZEW/h
+sYpW5yDB6YKHEhCeoCv3RCvPfAKEf4uqA6obBY4WFxQ9nnHEe/iudRypUJqb6w3T
+a8kSgl+2qq8G8VDgZmJMZ9YX9VOL/OsQlHfN9ZVC+vfHHYjvAHcFlyzFJ1elvU7L
+Tf5XjgJyoROMJo/twZONWR8AON9uCdqfOlUbAyVhnmeNNUg9DqP1+eSicjjNZ9fK
+UVaTnvaSDRQW98w1cxokAMADbAAePt81R2Yq9Dc1oWbTxulVdqc4XYSwgPPGzoBI
+dvj6cV1Ho6/6Ce/epb3eeiJA+vBYJ5lXLwggqg+8UH7ZJ5Qn+2UZ4MSx//6xMfiL
+1eqK+tEgUb9mvL/qHyer6R/t2AJVREY28qd+wbGX4Q7ve7Ccfs+PG0gZ3wDIar6N
+Rm324/wVEpNM2UYE6HwZOtZJsz/yU2ZaGQw0mBAIyF9M2pHDAG2Bf5V7Zac9WOIM
+EHGlRP3XuHIhyIeePt+rR+s+vfQ7IpDAof+NUC23aKGDH539zUn/5RxDF8L1Ucpc
+KGjTJueWqHqZINc61cgQrAZAaxlhvtSpAaAoZGNAtJ/xiaFDAzmvSNpJEQgVSNs=
+-----END CERTIFICATE-----
+
+
+WUS ifx keyid 7cb4b78e688614be4421c5858f15b96d5eab51ee
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAarmUbMT0T133AAAAAABqjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIyMDIxNDkyOFoXDTI0MTIyMDIxNDkyOFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC03Q0I0Qjc4RTY4ODYxNEJFNDQyMUM1ODU4RjE1Qjk2RDVFQUI1
+MUVFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAonRYVxz+UyHHVq6Y
+mluUFoPtDLooWJJnDZhdoDQkwcSkLuG7Zw+Kopjwh9e4+CL8O6gcY6rfT11+qTlq
+8D0d7jTuPOF/YxqzKJm7Q2ZLx/nDcJhVvMDlGfpeWzo4u3aXTw9DRKWG0T++U1wq
+luIXnY7LGKSI+Q1o0dN5uwfz7CTSU5gDokGy9N9YR98B06hoMIMjPu2Wc9WbFeSg
+DMA9UWDUCEYHio9JZXVKsu1c5PTvgycAKBVm318WoVYengQkOXvALyNU083cqc/Z
+QfZcMbjtI4wEoPV4CkmYohJyqUZPEmVnb2rCXGRYyfZyke5mQGT+hknitQWPtyUT
+SYHVtfsFjJjBQEuVeIfvReztZGvV/YbywNHRqSEbvAqTNbEpS6AElHynuiDLPCT+
+e7BF3dOQ/zmjhCla+aOcI8dQuP+bfJU5k/IMSRFVY8pjO5Fxc4MP4l2L4k/SYATx
+GRljTNUbd8o3/AOUK4Xokhqp+LPNqjtcna6N5i4BQ0/RrL0CGjOr5NEaUmZXY788
++lbZzLHPaGzk5H9rM4F2YLdnwSeBUn2IkHmS/DLpZ4sjelv/paYIYE2H7CGP59Hi
+37SpjjRsQwnnGkt5vSu9SI6UJmENgzuIrNB62EPavDN6zZbie/yKhBG9Kf55Vjfa
+0GoR7HS2Fsyq4Z5CSVPl+EY7wt0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGAdAsQlLBCzJ4Zc
+DfzTKYL2E6DmMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAFtAo+A5mabAiKrLpXDyum8VphuqbnA54TCl6m/qi9+zu
+axfkV96tHxSha2RXPOilBi/VQdDhc3sJd1ohTe7Oqsq50uRbOvgjfImWBhaIu/Ko
+MyddSLck7RaUKF5U7CMpGGbTgiM0tmUV16+sxb6QVuvsa5jb7f35NMSXS1EbEP9H
+p1TC02qvQMSQcWZokx8YKfGO54tMu/00lCj8sc6+80MEVcmmAk01cHuwOuhjNL9X
+pjUBgBiPVUJOW4BQ2hC8++wZtXtxYjYk2fWnWh5/4VXhtcH7HolKV+JXV3vFFPCl
+wLD2s3eRBmqCDzpCjCYmjIV6xUtcBOvhvwsAvotaotiI99PS9WhwfjVYSRf+biJi
+Yyzwbv21E0FEGwCREkXC0kghNE9yBFRavOv4Xw4cchsrqo+bKLxEsOmk6CLLfAUZ
+9jdgv5xmEi2ylmty8v5wGT54lGdtcM+gCzww83dEGLRHSW/G5pD3B7fVTtRC21QV
+8lOpivlLvySrajMMkbDigU7BDotHDhHcGUeoQmxI7xchbqKqzdHwjX6uVf0EBPif
+lVtZihTE5HgTWzcBn1kQYgp7XulkFu4NZw5GsbGI9GlbVmEZudFMTJPGaM8VoJms
+APm8PT6e1VQ6R5tLmrzc5D9t5vkv19xSNCHqX0Msk9C2eOqIeYYBdbSHvS7R600=
+-----END CERTIFICATE-----
+
+
+WUS ifx keyid 8343bac2129d78299c4b513cc3de61037bfcc955
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAa2yHy7hFYJYcAAAAAABrTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIyMDIxNDkzMFoXDTI0MTIyMDIxNDkzMFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC04MzQzQkFDMjEyOUQ3ODI5OUM0QjUxM0NDM0RFNjEwMzdCRkND
+OTU1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA14CVTP8cV3+bj9bV
+yPo0P3zkTRMdPgwRkr8rCOwYzj/0AAAPOi5KEV+xF8NnBSj0XXrE4S+iS/TcqEg4
+TgfhxyJC4Tu/vsiVPtErRH45X5g7WW7mMG+/yrkoUto7tUhVXRDuae35wV+E810m
+c+46fROKFIgncZGYG1ZCU4SSiazVhMDzdkVWtuSWc3MJag98rTwx5fvZ3JNuHik4
+5RudBiABDrjR8nvrmTQg+EWlhJ8R5jjdQ6zJzP+YfYJse0oPHKBPDLkQLkhqXoz+
+l+t3LpScBuD7VuU1ZojEsNg8Y2rypkUWEN1e27FPV3rq9DMmjm1GK9YIhUGqdOf8
+omnxxitA0k5dSLGStafmJBml82FHXeDm6u/RT1UZPxr15Qa1dsgTGdg2RMVo7goq
+t/VS9rtcOHoCkh62e2lVOL7ZU/RFmVGta+udRrvGoYsXsUviWvoy71AZyawjn5WA
+aGS+8/dGVsloKf9zWnfmi07veoNgtPSCsbcpTHlBRqfbu8ZBkFL0zu6RWnzu3JNX
+ng1bR2d3S/9vBf8QlYE2jOIZmJ7slV8kSiF8YhCytWWVcjhbkYAGLMCXP57cHspV
+EcZ9WfDdT/B6bxgj5lK8GJKWgOzXUVXB3vDxzCiVR3UE0p1ZHIp6iDKvii8VLvtz
+nponXmbQOjBothW0IScYWwN422cCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHoanpKR+BrmjQIr
+DGirLc5RcQaKMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAVFAVt9e7APcg4u1gdTv4P1eXsFaqypM5GSI6GgdgKnjQ
+4r48747UGovvo0BUg3deAMAK6Djy7zL8S8XUkW9fz9FypCm4yp6Amy10oRVZL0IU
+yLMY8Poyr2n6Q7W6eGaAj1tS+RIBLoHjg2WGQePuWcyMRCb20cTNdxgxWgTYopVd
+bGiaoUGJDReBbOFSDy79h07K8ZpBDo9ZXZF8pCJslWQhuXXvSlczxSyRRx/duUBI
+08LLxqoSaU/YVBZQ+EbY1lheNc8F2LQYdLI2SrlqAcbjtiE34cg7+bqX58/Q6FsS
+H9ro4Qlllc3DQBpMqSiy342IF2lbKscQQlEuYuC9j9N6dX4EsnCg/AmxDch79EYI
+Q4LdLtyyNBJM02bVwMX9CdRlkXnOmcdEiEdlUnxmXIIKqP3Esm1aZGfAxeP+hO47
+A5/0aNtSls/LqIqaSw6HhHLdUJINGtXRMS94EAC9MQOvGe0fzg/J+5YpwUP4H6Nk
+N1TTSvYlhaAXbmAeSIt8INxvDefNfUJAd5zjrHeiQy5Do230xprzvqsw9j/4KsOc
+5WMMrURfqSWoIn+4XclX9d2NBn3qbK0Vyr7kKA5HboJfFQ1gSKNzDzs/FTAX0hgB
+iEq+DsG/3YDe4XZm0TlYgVsNG7npPLIiUVyUeJ7G5Bu9A+D1Q/cACdWtC6eVDTs=
+-----END CERTIFICATE-----
+
+
+WUS ifx keyid 9c7df5a91c3d49bbe7378d4aba12ff8e78a2d75c
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAYgbUmU85y4p0AAAAAABiDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MDkyMDIwMTAwMFoXDTI0MDkyMDIwMTAwMFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC05QzdERjVBOTFDM0Q0OUJCRTczNzhENEFCQTEyRkY4RTc4QTJE
+NzVDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAw0/NkfzOlDuX/mbB
+jqrQObX+GPf1uETSqhdyHinLKCn9BwNse2xTwck0IUg05lKv2DQ/XV7V6oQLr++e
+VXt6pzkTNeDPmu4l++LIWkBWaYLWe+DczafCCF+8ebN74HhWbP/fEMDH92Z2yQkq
+zy/98mKdpGwVrRmOt9NAj8bAipvLwfi4fuWJlyxVxtI6F0uOooZcNxIW64aKFJdZ
+EWc3BfvTpUU25/X/bBA3nAvxIZLWNx2zN8Yl66tFKyvZdnL3go3zSJfMbk1VG7zC
+j/7xVqb+Nf1dd2jQVoP/PTMILGHNKS2sORAzpIPM6hrJh9bDNDU4+kB0KYF9EvQ2
+aVYoPkfRCApaLLnQCiUFUHWSxwI/fN/WHYR8InW9NWatUqFPYFWk+ug714pGz/G1
+4WTQSsOCBZobwldQysBuT19zp5zJFLMyF6SeO5PWY8HjFBgoFTR6NqEIC9wVYW5t
+O/08o9JHJmTUghyfDtWWjp8Dy/8v6un0CFqK3kDxd8OiC6WTtzeIxzjlF7NVoP0+
+uHhitkgAvfmOrhXJuWIoQT4EA+INWpeuL6EuRra2K+8UNVBxjYsB54+qSbUrADn7
+Kal9MKGtxF5k/rmQtL+zwZCK/NLumBk9iG0qFYlTheYJEdE6BQbtpyuga/hqR6Xp
+gD+h2NBeyMxCsURN5f4ImcAUSZkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCgkxje7vFJRCj0f
+C4DNxw8l+dFmMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAdOnRSzkDdI7JkuRYkkmOsFvgz+1/R1BQO6Xk8m5jDHNt
+yof/bOlM72X8Ru7XBWqA9HdeY1BNLio6+ncU6avCH8auajl6/mxwq6reC3lUkfmw
+kZh5PCI6g7pEsD7NPfK1eNMh1oZaMAs4k5lSJQpcH0m/qiVdK7eY+Zel1oGP9jcm
+LxgMtcCiGTX/pH1TNzgtrjrgnpk+t1RhJVszdYXja/gozJeHfe8HdXOCZKaLTeP+
+611g9/3y1LbSyEdd/mCoD1e1vEDXc0Qpl++BCGTBRKSVfJODQHUQo9a1IQmeEPJt
+tk13gw3LvZhagiAsaG5Pbuoy1lhV/0sKQpz5uyAsZFoYp+S8xNAz01XBtdYChozd
+ItMxzLRPjJRDJHmQcJqVtLwO2fZu9aI36WMg0dMhFsEq6sqPSj2eCwfvLYC3MMiP
+WGb/vLwJFvG0iyeBKz5kUGmuhUpu1QavLwpPQrfiUKq7IUW+qjIpqp/UpMpNOccF
+gVhRRO12oY0/oEmXjb4luNSqXD7uqxdybqJD+165Z5V3mgkufutF0FDcC+gjjMyD
+4pg+Tm/APOJSEEdhKPbdJa4NmkDmTDkaNY4JffjoR0UsSE1DMzEEXAD99Y/jiG2G
+2vjETbgQ/sBaZgbxxor+qrxX98iP4BEck+Xyndej5wMywXEJCcpcSE9q9UVJhu0=
+-----END CERTIFICATE-----
+
+
+WUS ifx keyid 9c7df5a91c3d49bbe7378d4aba12ff8e78a2d75c 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAApMQX2BVlgZCegAAAAACkzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzAyOFoXDTI1MDMyMTIwMzAyOFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC05QzdERjVBOTFDM0Q0OUJCRTczNzhENEFCQTEyRkY4RTc4QTJE
+NzVDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmpgzwkKgmeInDv4v
+UQ/tW7/uPmMrxT5Ao3Zu/ftXFMWR86R78TE05H4Pd/7HWBR50FWkRvUrf7H8OcAK
+fcNRq4B/xZjCjJpyGt4O10bQ7KC/HrhQbJHoHVB6aZWZWx9jfLm/m/pExoat7E2M
+jL7f9HaMn5dRJEcs/Y5VciEqGuQw1E04Su9lIBcrpoHTWq9cTVaJ0XpEwlCBHscX
+BRDqPY4eAYPZWwaGZrCSNTZnngm59Mrylpq2tn5DlQJWGvFqlcFa0zIGyVsCPdYo
+OYGibPV6tKYHO1bPEDpfjUcn4fS9OFbQsJrmtgmEka2BbdAigd3rYOsr8JhWCAO3
+KIzoNrnLSC+yeEpp91PWFg6lyPrmXC0L+sqMLxB++3uNT5MOx39HBS+kEfw2UirO
+FAriT5TKg4waHObh/7iMRlqR7zCL7awPyaoMEby7j5xhRLTD6MGPD8THkkZJAkYh
+W4xdJqzYsb+aicklslIXieV15XznbEiRf5mMeON/pDBDYUIHUIsXvK/PInI0AgXe
+RtEPwwaxpS7RJxDJrhepyBDq875k7cpKjUG0WnniqP6ayYhogyIi7Id6RTIS4ktn
+XNPhVQ4dhdZ7mvsQiiT8FBepAXib5ywtqmQrVwdvYwWZ17BuXiS0CW8A4Zw3UCkL
+8egwbQqHqeytt/249No4gTwLhXECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMVZCka4z42Sls4Q
+b0SaeYGwKbsPMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAQYdgCAWxg0CT6lTpPcaZ9o6FAv2a0nyRz8xQUBM4Bfqj
+OVD5gV4BGo33OR0OrDRzE3IXtrMwvMteELHz4Nnq9vOJ+4Fxs7o2Bpse3WfarWH/
+hpOJ96qw5LBM+rRZUxg0lSUKwQ1JNNvKj6Lp5xUMCGQW9GzPQnhprJnXZ3ikz3zp
+fMjQj7dIQrZvE66tat/rlLJ8z+mdzHUNTdmEoqrsymzAxQnPV+0dUUSyqbC6XM/q
+1x1XYUy/r+o80kNk6/ogC740w9Irz35CiyCbMO5X0h+YAlneMBg+3kN1/H9dz54i
+PQDpdRtAf2uoBKzk7qYW2H8VbdIeWpCqSns1Z/TODoIl/DKRfn2yiKIWtDX1vxJw
+Izq/qeWfuG+9F0dbZ7rcbWt5vqsQ1dAXbsQ7/gJEGFRml4lfZH+MI9+HyNfsKAmj
+z3DPtceKqR8cqbFEaFhIZvKnRnNESUqLlo1G5c0gYodc/TfuoX1FuwmiIfZNTDoh
+mat+g6TwAKVE5vmzsMwLJbxHP6HM4kqd3+I0C9jrkh0FnjQvqikeJA5RH/gnKpH7
+jTwD6nE1+Oy/9tzYuPTiWporDYxxQbnad2FSV45vccOkIQuffSWAz43WawtqCyCL
+RhO323d9TjIDbOp1ZIHuVX/iRGyC4/RBKO+CeSJ6FPnfPxHq3wFo4ujDbi39/Xw=
+-----END CERTIFICATE-----
+
+
+WUS ifx keyid a26ceeac95fa33673219d0c2a77637102fb53ff2
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAa7FWkGss8GVSQAAAAABrjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIyMDIxNDkzMVoXDTI0MTIyMDIxNDkzMVowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1BMjZDRUVBQzk1RkEzMzY3MzIxOUQwQzJBNzc2MzcxMDJGQjUz
+RkYyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjjlp/WYBqspIvuv9
+5rl7MHnDl3hrq4YKHuKYNOiGWS40yyT7HrXsVhBBrArPO6KNjWdRNtuikUk52F3k
+VpmF+TLIQ9IuseEIHeY+clcb2q4Wn73TaplVTrHEjo+c9Wk4wEgbw8v+IYbU5d9n
+pRYTMM9j9pupbOwBBWTIJHL3Qx1rMgHS/3d32pUBFGq7dKp0YZKKysUDLfvLMkIh
+f/o8STbF3xGL/GsOlaviYwRXk72uBXYMZiE105dDGz5ciSpjI2bYneJ4XxNwZnH5
+a7HMe4FS0YMzBMqQLXqj8z7bNLIX7YO7ToAu3x8wqNzVZuV8ND+nWqSWOZtgznzV
+jFhFivbDcIBywRVV0PupS/iNRXcsaEWsHSrKiYxCN3YApDMqicf1Saw4bwlqfbOw
+CTo6JTrhEiyK9T5OYq4Qwy1lnjZcfUWtP7MsgVOGHKmXBPnq6lL2s3YKeu03GyXB
+RPxggW7QeHvY0XkUHIr8gCqQ5LykhVN+8T88hVlw38+m8+0UNyQsK86Kc3Tro48C
+vKqrxS7ZQS5KwcX+yMg3HH6DwSLAzoHx6d/tsY4B6RQ039DtTBpfwzSygOoTbD1w
+8QsTNI6M7kN9WveUg1cydWEkA0YQ02T7+y23rDRpwVGUJa+EEcT/zPDoSROjFZxJ
+BuSugPtJtDiZmKS6v1kNraqFeUECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFN8paFTF2IK05NAG
+DdVpQvwmEvSvMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAVPaxxPs8UdSEHgznGp2Ic9GjMoGP6SDx5YEvlQ2TyaqQ
+ruwMbpdQbSEe1bLDTQW+dzaCJedOBtVs3TPKzuCxgCffUR34NN7hCA6zaQvnsTFb
+/fbxZiaSGvDWVEtNd/VcgiDJi/Bt+PiMTv4CPq2z2L0xubzGcJ3MMF0qacwxc3H5
+a1SGTCCfFUSo3TnINRTXLN/s1kR6SCSyLYEuOAc3iAgggxDNfAgfFa6eJoXeKxnI
+v7C0zAZZzfK/ptQ/Y5kPZre61f2yvwzyvVw8YS5KT42/mAWsfE63Xsexvru/jjJ5
+VUWLkqvve0g6k5ur5XGmEnA3jyKterX/TIBnNBCB/WltesYPavH6kAIX2/FtT4VB
+2+8fanwsszX2MMeMWmPgVVmeNZf8fl66D6KnASYvwPQhIS0vLMjG6KSZcnlTObvB
+doWqNp84Ui5S0P0EZIq/DsEJpg2qLBSkJAECGM7jmZz1v/p9FxwWO+L+Dk0NpSp4
+tQ5q8M8Ppuv0adhGtr3W1Q7Kk2pSzq3BdFvgpyxTL7zK099QLbimMHX4QCRexuRI
+UhS6QAtjhCwp6o1PNQTD9722MhYE+rue+3xjC0GEyRUwFeaF94mVSQrwSnOWTcWg
+XafiWGleJJC0sbTjJzwUzryB0MHioCk6lzkBa0CasFJdqdaKIHXg116tKmegUQE=
+-----END CERTIFICATE-----
+
+
+WUS ifx keyid c2ef641c329cb0a9f2eae04bfb10c99b89c34614 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAd2qWsxsYTgE6AAAAAAB3TANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAxN1oXDTI1MDIwNjIxMzAxN1owQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1DMkVGNjQxQzMyOUNCMEE5RjJFQUUwNEJGQjEwQzk5Qjg5QzM0
+NjE0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvX85Y8UW69H7Nuqk
+ld3DATJqrWvyNzDXHDPSr1cOCBUFBWFYWcBI2IADOVrL3/OOW7X9FD5TDys2Sm34
+SPBRWSDN0TxmBpX8PyaJyuRvYpcfovs65TFF82DGxEbH2Z4eYIJnBEYHJAD6K5i7
+A7uTkfJuSWP2j9/NjJvKePMr/G/QJXi8mtExaTzxIk7K4ikvz/ewNg1T58lPYVTS
+WpLP3WyG5gnN6lj0NJahL1IwUQq20+GqJuUXbwUAS+567WS1iYAbzko16qPPw99l
+o1wwIA3+dmatlTtJhuV9+N83Fi5VoqciBnY24dfRw6pZWTvp2s9eGji7eFnmrxGP
+mX32MAu5PU6IVb3NIYhO6H9NTPyu2DPCdojk46oCIJ3EkBKFRqb5FZXNMrbpsov/
+vow7PpQdvXhHjw32LUWdIEZNdXfXtieiviSHQavNOUxY/Nw8ER4t5M2hSSxcMAun
+CkrYGMkq4NTbikIaCwwA3K7eE/qbpQizNFZmLgBKhoOt8dr9f2Cu0D9AFdWMbiTD
+BGpA0Mt3pMKV0//xdj+Yh4iNgsZSw5gVAXKlbHrjLp61Yxm7DaciRJnmuEgDSNMx
+AUBJPFUyTAh5FPrpJ1BT+jS0sYODho0PzWDvmyadAI6lJPpcEWy16gwZByc9lcli
+upky4OhFG+LA2WvjzmyOMXY8oqcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFT4gSKrbP4T70Rx
+3KJJqEEWW7bOMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAjwggZZ0txbQncz55DK00MGvU+VpQvkKVz49zIy0F2h6U
+0D7ACHkKVM/7e8b2tuWb5fnD5tH5/Nv3ECR1e2FLV0MWlZAD2Kek82xkcacL27mt
+1OtW6wUrx/SO5Bg0ZrjJxjHfBmyrhpY1W7skKlqG9oRgZPa9e9+1ewFCOZpLKESE
+wKn8ccN40wdPSygNn09Uk4O+UDz9QoNm7vu8zBWWYQbv/c+Aqb9nBKuqk7tyhjsj
+t9I3pL61kCj0BUssQslHCjlvg1KWp0gtJ+ZUrGG996gnUZ3oVXb8+SMbQ/4hk1a9
+E2j02tJoNmX6ydGbHV3qyi8j3kaPXlqr1WISk80xiZItHsxT4U1dNUV72kEVGD0q
+jSMJ030ufNwoLsMr+Ts4MU+scpm0EWyv2y9zOrEgAScKOc5lB/WrhNHM3wlNwAVF
+VvicLch1tZfClkgZRL4tzddelOXdFhzpIB2M62u4f73XOhUS4YCIozRF1ryqcf7Y
+VaSjJ//QMQ3TPiPd3ABFv/CcRfKtEj3ODGs++rPK15wOPKjqFvtd2FCAEAZBHKIt
+o9yysYZJV8V+yMiEd1dPn29zgseJxllhHCDItqT5Zyd3DiKN4CfIY8O/FnyT+Zmu
+HJ89bquErnE9uttpHa7/vFzhMQ1/y/Fmg8Q5ESh+1pobBW86odDa+TF4PlacCO0=
+-----END CERTIFICATE-----
+
+
+WUS ifx keyid ce77153b6e110ca4ae2971a09851ef499326202a
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAa+miGTNZLNKAgAAAAABrzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIyMDIxNDkzMloXDTI0MTIyMDIxNDkzMlowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1DRTc3MTUzQjZFMTEwQ0E0QUUyOTcxQTA5ODUxRUY0OTkzMjYy
+MDJBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2wElgLck0QMIgkNK
+PSjXEl/lIxzyagTgNXo9xlVJLOTUb/o6/kYH/Titq7786Ae2hhXL2Ct/0kf+uvSQ
+RXNX7vvw5hvRtqjfz36Z4f8k1hE5RgsihkovYx4U2jkPB0GxKnCaGQ2d5xKJplAR
+JmyLvVA6MkhI2zpRIKONDm5nGZXlqfiRADymWnDC8I2hPJFmmRYvFQzvdXKObsuN
+pv7uuV2GLamMJ/nCqZJFO2fe2KMAluvXbr3ICZ14LAnW2zWDXlCg0Gs6rM3aOVGe
+Aa0O/zB+1uEv9BrEy2iSL8qEBEe1P84hiot3/TjFs5A+7L4gNCDqv0nqlzXPCKKk
+oj9DRJtR+1T/n95ttqFw6hG5aDaU2QsYhlNjCNre+oBTSMKIMqnUgnkzGyIHBDe9
+BXZmMZ+xkIf7N757FLNTpUWdRFVNP4iMj1d4CPJAcmlx3+ZwDxvG0CHIgM+NUx5+
+JgFBHNXvXdAa56NoVQcb7EElZW91V4RAWgywgNzijzL1G92zi1Acejg+Ks2Du6UD
+6o70jGmz7Ijl8rqForo2LqUgL1MldNn+1toHu78YEYnYoybalPXNESAE/Z+5TrCm
+7FTQv7UYrBeYBcGcef6C6y9g3vBpm58y7IlEYqUFzNws/pYG4KuCdKlBN281kghQ
+crDsgP0Mle5b3emEBXjkG2I4tfcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHLBdk/BX56JU3sG
+efGUgzf7CVJhMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAif6Ygv+MwbGLUlh/3CxWlf/si4WTKm/+l2BHYXAdN9w6
+wT4UUrPr/dmtxJSgpgJLNVuHNtRSy7EYv8wbzMYNzRkc7zx55rO/9n8/2ynYqnPd
+emjfF5e7TWyPJzKFODdrbY5CuMWPxUcfQbLrfggZkjdnmvImeQEP3FXbweeS3tlz
+06Pa7DVj7TT9X4I5OMYAa4EZ1avn/GtUG1F6MYbNbvvqCQ3vDVtfYjgvV38PWZ7q
+wS+kHe5psL0Cxu5DOqNcAoXhI8LKb8eiQxZDfttAYXbAWiDNKTN8Vmut4rbAPQho
+D8iHsJXrInW93IxDyaLM+cSszHG/v/C1ZSUBJB+5OVYz9bhWQKx+O8UIL+Z0RQq0
+hyflrX+pKtT7FrfnldsSEkUAuhiagwQ2Dt6uUKAiT20wnT5YS8hSS9N/CvhJSrca
+gbbbhiYiIG2ZvpiF2+JaxAzioWXnFyU2bYhyZeFZ/Graw8pZi7TxtMzWvUfL+vFe
+ggGdzIiHrLyu2BoOpwIniXUBQq8wO20tDqE4VRfg6fcdNecOw4W+K9JOvp1Awz37
+ec/EiFqiwBkk2Gw+1reFTDPH01S1XNeVanOztTh2T5yP1vO/zEhwbDAf78jyLlst
+m+Mc3CIsIkHSmZ/aeBoH3JahKjh4EbpC67s+SpC4WqQ3mE5YRjHIhx14v8E7fUU=
+-----END CERTIFICATE-----
+
+
+WUS ifx keyid d8a3f556085a68c8aa5d5fe079bcc6e9c6d37764 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAd9aEQaxas2igQAAAAAB3zANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDIwNjIxMzAxOFoXDTI1MDIwNjIxMzAxOFowQTE/MD0GA1UEAxM2V1VT
+LUlGWC1LRVlJRC1EOEEzRjU1NjA4NUE2OEM4QUE1RDVGRTA3OUJDQzZFOUM2RDM3
+NzY0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtaBGAu9dz6DHALyY
+T7TK27NSl1sexfL1c26uN7V5KWZrOVLdOEWRm2FC2Noh1r7edR/dAXa88Vtfrduz
+1niMk9ep8JwLyKlF6MYvwXL3gCZ4+b2GK1aF109Ds81G0u/3yE/xDa55fuaCjCdv
+x7On2/dMgeA7aBuaFf3lsHVOOthtDR1Yl/t6Z0VnBM4f708+nqUZ+3ptoaM0KRy6
+F0LC+9p9vVD7fqpHkNtd5YKdzOZKfC2xPwq9/AvZhCHIsmrIyo7LYwkrve5VJM17
+8NDPuda4UfqLI0kexElFh0EFC6yojkuxW92sflZG6QuE62YgZNSCgz2OaGWEaOix
+cXOx4Vxbm/vsR03tjM4kV0MTuG70MUu7DQ1lKCcUNddDGCqsGVWfAcvrflNeHMtE
+gNN2kreDXz4k6xz0f+fBZthCJdq6m7zxKfgSnfQa1v/pWxHiX287PN6jiVVoQWbx
+F9YZn9YipiGm0FSd2qLZLuj3I8aIAx6AaZ/UVFI4Y7WxJ5D5jYSnvj7feekHY1f1
+0aveaLytt2/2coN+WzuIHiGdHspLNH2ocPMZVnlf6XsOsr+kFOC/3Rrz5h1n+16z
+6u1EXOd/MmN22QYZZzWScW+z6KtMfpzMuikenRBab8kXTwW3NEJm/2lwLOQPpXjY
+s3alId+fAZpmZNT0Cj5gv3Ap5ecCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOYDYX/V0PxCL3jq
+hAuFm5qqR4KTMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEACGw/HF+6Tja0hNhxeLNWbVQPb7CN2qXJehHrstqEM5iN
+bk9wdso/2QxGWA4ELW3DGoHkB53qlUWJTDR5W04UzVrLYjqVUcTLEojg+Z31OSeQ
+fKeEo7zUTF8h9aEs7awSE5pMJiyewv33w8Yh2Qf1FoC0r6gWRTvKgHDkVV7nNDgu
+GvLLSDFYZuE3CLTQMVwyGauGXMVsmqnqVV6yRocIaRU0Tw3tVgnQvnNPs+a4ICT3
+hoJmm+50/ZHCD3uQnQ7JBDMF2qX+sEaCmaCaSwAE9wRm1ojPFsqi/WBZUu/nq4pU
+kJuOHUS9AwYbYwkoe+UUBWhtr3jWJ9Bz1CDI5YdIsO9uKs+Qso9luqyo78c2Lp1R
+RTo5uEuqBHQJ5TrmScHfbejOzboS4dmB5pW56S2/t/X423ts01rfXJ1he6ZY6ypc
+OIrXMpo9cGGNKz1Kccc8tLUWQj88zAYI9cae1BRBlUZ7l8v/IC4kWB/HuD7ctv/E
+deOg3O9yz8wjrhfU9STuSuPvjRj854ji8Yz++mJ+VueRzwUKBQRR3ujJ4yyYcvn5
+nqTEYFB66nUyirDNp9weKdZkut383VL4vYrg79L5qPu39CnRmAlUsckZZhamOASK
+9eGsbnZbRG3kHxbN99uYORWxBumuh2O/wCda5xvBqYHLxyPDjNeCdf62K8w7RJg=
+-----END CERTIFICATE-----
+
+
+WUS intc keyid 17a00575d05e58e3881210bb98b1045bb4c30639
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAZektHucHY3E8wAAAAABlzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MTIwNzIxMTcxOFoXDTI0MTIwNzIxMTcxOFowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtMTdBMDA1NzVEMDVFNThFMzg4MTIxMEJCOThCMTA0NUJCNEMz
+MDYzOTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAO442urRzVXMRCMm
+CHHX/YegHjNbj0AH6P81JC8MKqqWPF8nK7vEeThBoR5ukVc0FHRoq+aYn+JbKs92
+Hl7RH0I7TGFkH5NaGk5IG0X2Y5q0r0kyjFb/OhOZUH2QRh4kWV0R7uKAnbAn5T7R
+NDJENdHxa8RLtgMaIg7XgD7WxIogeTzHjEOySeIFDO/UOBFrJR9CQEyVZybNi/X2
+Rrz3YKkE6qgzdy1cloFwByajsoe/2hoTSvUzKAJszI8STBS/cyiWeV+Q9Z8yl0ib
+RKblM1ovdsKQW6YQHxyMnii4+j2IZ9JuBrTKkX3BNcQ4pvy4xfNVhdfPBZAhsQtz
+5AGlk1JFUGfhzalxzyxWsiL9tGelxhwpjcP3dIGQOYC8Me5erlmAnfL0Ey6+7WrE
+3JmVW5uvF9GDGmGE8RMU9PIQqd/uYPnwinrJgkbsqsobL32ORigdD3NOAK2JleoN
+yzeN/3rL7ubo/bDRDfkDK7bdP59exNsl5OMTSbIMIYKs18wkPAY1w7rrfIOqllRi
+3fojR7OuAp8V7qwoYXSQPfEdTTk1FhsLOIm6Mrxs+IeVBiQuo8zrxb/aUMyp6pVM
+7n3frm++dC9dqAi+H7AkvXLIOwafTCsFrCyuqkmFqmkRTSzlYw3u6jbPldnUNhdS
+m/MeIhCFSsNXq1Zwv/oiOQvRVWtrAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTggfneSleE1/ua
+sl7VdCG6+n5MhjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAGv8d/JdPw99lm616KyIbYr7pz0ADackzoc31o2oaEOA
+rz3kfjBuGCjQ5k9wyFdz3T2NsVGqzCkdGgOynMp69jBTmB94uoiwg/XiIh3//VFW
+ILCScy3NoK57V4jqHAGn1h8z6QXX0rSC+cBQ6iwvwYW2Ve3v90xTJAOws41MqTtg
+6YZvH1f6YCL/4zVPawAgzzMn7nY6hfHp/5ZcxVg+evbV9KaZQtdSF8hUm7hP5Jyv
+cWXaMM5+qQ274h8R23xGXVKMqzbIuCVJk2YZYtdrq/kMB73Lo2efJGQdpy6WBzRw
+uKg0D1WcJRKOlq7kI0D2nDT+WQ1ALjbwn150B8pN2xeT77FCxtCcgTEYTyQy9x1s
+8vkjS6L08OsRSsPWT1lZXk7sD7lxCpFr0HB9gVM85XGGoqxCNU1PQaxLtXBZ4zOo
+gshF8zLsufXgFDrEiFv2iDQLFvb2F2m5h+fB4iyuKfrbCR99njMjbvhhuMFkI2Ub
+7axASNjsiK1akCkO1iRamo9FYOdSknGB/cAZigtC3Q+chbNl9q2TA1bxmRl72UBw
+Ya37675qvXm1JDpf1oW/d9rFMkIgFVn7thoBXEvY0GyUopIqNh/KdY/Q9Uey598w
+Osr3IyauF86c66DVrh5ZBmnQ8A3Z5XRVFyMSicI/YIaesZwZIQsAFUlxipfgfQ/L
+-----END CERTIFICATE-----
+
+
+WUS intc keyid 9aaf591ee263caae10f57ba04fa8d1dd6613f9eb
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAtEyyPhjddm+rQAAAAAC0TANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUyMjIwMzIyMFoXDTI1MDUyMjIwMzIyMFowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtOUFBRjU5MUVFMjYzQ0FBRTEwRjU3QkEwNEZBOEQxREQ2NjEz
+RjlFQjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAM2hCV5XQSRBs2gr
+AIfvZN4SoOV5rniJkU9haKyJ99pgiaq7fUa4uCO9g19K8GG+3uwrqay74Yt/4mkY
+HBlT82ys5lYXw7Kp4t4C4TCbI3twtx6NIH03oboIpdjuLQGgs0A3YpeYplysMMes
+KD50QS+4hryUoybIYv36UCWmYBXNm5zcMKzoVNgRNsmu//8EQ9+jVQSEm57drnyb
+/62yfz0cROBnN0dUwNbd9bQ8a+eorokM+P3RmXqFPT7ht3nHeQCd1b+vq8Y2LT+T
+LBcJjYcCGFkCPaiPf3fjgBRriLTMJ5F2xQ0sypBmgRmQklEqjyhC206ZGG2HL8em
+dXpB5KnlJBoShxdIsJSlhRRgmV19pv+Linnym19CRH6DqC5wnI4bYueTnfNdvkl4
+9ex6soOg0f3Y+xEyXdx6GS+Ks68yHnWR0s3K7Ti0UfybegyJWh7nAUsdQSoKN7G0
+Pefs19Ouqhs0PV1x5U2VBAgJQ7dvjZRQAat3uU8mHPchGXyzcIIzZ8IQJO4vFrNt
+yKK+ubRejL1EUsXNhEKrDWvx2eGWOKVt3uKmYUiZgQdCyxR+fZ6tzfQsekHwtCpo
+mjfXTXWp8IoWv0hhtNYxJzgCUMl2+qFbHWgN3ujSqvWfj3cmTLT6H8MtjSVfQLqq
+pjkpN/W6feQIxYaMkL+6lmReuJkbAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQPwjDtzRoTAZjD
+kAo1lVLSViuqqzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAFkqH8WT6pOt2nI+rU+300C/mBtV8QACEDD73ZparX3K
+Hop87Xq7pM9CB9g/h7YYTq6BZQgZFmZC7ehQFgzywt+HXfP4bzeciqUby7ZyUqxL
+j2WrLdw7bE5Im2UIJ35MaNOM0sjgOADOPOwwS8m9rbQ3VvmzBB3hfOnc9o6Gs1pj
+WdC8tJD/cYZkywu3oXzSCKP6DJEXvjpQMfue1BuHVSzxpw/9/UPiZXA1ZdBZwx2J
+grci2/V19p/fEYSMxKDsxhg91K8i+1+vJ066s5XCDL/nqYRyOjzRzVTQIkN39OhT
+a4m8ywmt1orULaMGh1Xcy7VC1FVEoqKlToYT8IeTqg8lEbVS9wuJr5sIuZqHSbyM
+BEhERGqKz2OTp+UH4zbYW1clohRFVg4rOk+3S2jRucsQPJFxP07vZ3o5skJgO1Ft
+6kEO7hExKUplG77TWZy7K/801om1nOH4t/LhdIF2fULJaoLDEleL0FfKTIxOYKoz
+pWaCMriZyoGM7zaLYhY6Ae2cuEj/rUUhsJTHu91Y3KslahHJIGVb+PbIcF+uCXJp
+AQwKrprjlUnVmwoUMBEzkW9PaoBzy0AW5VJykn4x6qfvaX1xvIqT8bUmAXfbCn4p
+DwZ+/AfpEFE376eRnmkJwBXg8uuyVS+OIHoHK+HBMPmBTO9VwDRS4CmpN+ITgdMg
+-----END CERTIFICATE-----
+
+
+WUS intc keyid b066d9697f5d3a07b425c10f587cceecf16ffe58
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAvQEJEtM3MseegAAAAAC9DANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDkxMDE5MjAxMFoXDTI2MDkxMDE5MjAxMFowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtQjA2NkQ5Njk3RjVEM0EwN0I0MjVDMTBGNTg3Q0NFRUNGMTZG
+RkU1ODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJCCnZEeRgB1XIl2
+biEr4ffjqSRZE2UJd4IE2fVTqZwbMO4k3Xzwi6elX2EkaogqfLhDgWVfD55rU3OX
+c+rmY1dWnFsOZ69GEEQ8qYdMPVGM8uk+Ggl1fsuEUmLuFgRokPnbCpsjO0WITwE9
+VJhmhNVjV00uxPmqdKL85Y1h2z1gw5xBfsvzvGrfv6CRPVEjsKq2M3SNC9QV+axO
+YAqsAVTMo7qcECrU8TPsbyMOKlNdQEp64rc7EqrJEsKP+H5Xe4hGyTN5gJSfdv0D
+XA7JdW9PshcJJmwEYYVY46C60LGT7p43DZqmvWJKG2Cp4eyMW+5E/n195n/v1mb3
+WwjLkDXsw4dQB0NdKVtz5OxOlRnDHXryHmcTi2cTmx/NduXhy3qONWHKcUJMDkZN
+R1D3MjsiJaAdcEY2kuJZCmUvg8Pc2r3OVnrY4sQSkda5mbyx6KZ5omyTgeRT9rcw
+uhKqaPdD6aG/j+VGEsvNfdD/Zz2RjbVi2330GpXYcGARKRzAEh6uKtRgghzWmKpc
+Ezigj9pjZuMewKDcKgii4ohzJ+abD25wKOVgTfLbMWOdEuoXKe6Xxv5S1h+AaWoQ
+ip57RZwj1fUCkN652QniIVuh4Ga9eClTERPyci4pyuy1DPYhTm3CjoGxD7PoL8WS
+rw+EdTMAmDfd15EVW3rNjMSNkMvfAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBS4QGhrdYLLmVc/
+qN3xqBtCdyCGHDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAFnSXkiK2GNproHmi5TYmrnYXER6SIJiJhbwfpeSuW5J
+r/KNimMLZa8EUzLmb4qjlj5LqcxDGFGSfvqx4M1CKPubyT7kNEJJJvG6cLYABAbt
+/Moia/bPJkk6mgmIBFfN60pbRGHxspO7qU9vuFgV5Wqn8Kkv+JIMU0ZVWet+7oVv
+i+33hmAvDtEmaQvNTmavq8zBSqzNX/wtBCogo+fDYhgfpIUfo1X7cWHrF4oTNS6R
+7ZzCGAMinz1JMCpTwzHnHIP4Bt5S2k/n0qQFC9wZE9srO45QE/bzekiPM59ifywm
+H0704VDmdvFluelIslI9gLK8mqXQWyCcqGBZhVkmx6l/4ZSaUBd8Oeu+HojLA/UB
+trDbas6iIoftY/JmH5VtOR59WMqOXKFFkHMLRNhuRU19ZeqOdkGwpycpB63ijwvn
+LC8MkOVzCu6TGRA/XRoLDujTF9adSt/qNNTF9VHeoXkEQP2P+L92dl7sShoIDrdR
+mslS+MKJ472UWCu65Jthk29KXYxAZ4PU8aU4LrdbgH4EC1KEa1sqCM2Z3uo3rzZQ
+/SehebXuzP1sX4NmL01K7HMNIK101AkwsPcFinuRy28RpoDa1lstCuC4NdtkM9O1
+lO5Ai5P/xC1qEF23u40PUNhJEDDrOfYUGpObtENqIX5HWvJWfLRFnOJfgZ2hRQ4t
+-----END CERTIFICATE-----
+
+
+WUS intc keyid e7083f22152a7492ec59b0c4243437648b15dbb7
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAtJlMfxfe3kISgAAAAAC0jANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDUyMjIwMzIyMVoXDTI1MDUyMjIwMzIyMVowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtRTcwODNGMjIxNTJBNzQ5MkVDNTlCMEM0MjQzNDM3NjQ4QjE1
+REJCNzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANsHFapiqDMZD3nY
+6Jevf1zAWMI+hV4w0CmSZEb+S73hBTplWkg6uv75G7P/x4AFle8/uOlLPOqLlKKK
+nNNVPAnbS+WfspyUFMSsCF/ZOEaP4YBtdQjuoQxrN7X5qmY6C/ZOgt8VmVgkza5P
+ymaxZDPPDKEP9LatDVkUzXutiY1YsUGc6xMq/oa4I3JL7I6nXGWxVN7slSziYHAh
+BTpef5PK235k6AIE+oEbpdmlrEj5UT41SfFIyC8el+Vy2obmuulsziyzyUCbZqBQ
+9yHa3ACCUMqIaDvVin8cEMXA6jcxVI+oYug6Nx77735GuC2we2aQwlaRvOFvxZLp
+hIb/3h17EqakM0NMxFgIVxvvmnmrNIBylN3Uhh6FbvCviWssrl0NR0NNFnV8KCsd
+Isy8w0ALl6wAh0UCitEKuG+fThczYQpMv4KmKPBF2Kq1dloXDK3f9bT5I2pGXpUQ
+HmkAs8TSRNlTso6vfdZ5g5jTJvWNJGUA2H5IgAWs59+ZHZVMlzbGUBIMyo1Po+KC
+lGhEXmBA5Y77qWob/ebAGLibMH2lq9I9eREa/WTpQxcT7uInO45XaU0cxcthNNKs
+POyg5aX3HoClpzPdvizE9iC3y5ydjrvndcg4D/jLrUAZJLwmS+VP+qrDR4/AG/yi
+S38lPvAeeUQD80WX3oonZBYHHd53AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQkq0MpY1b/6VBs
+qtCa/7QpVGd1nTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAJ24mLPy6pE9mVLnL+VQqlPNxohciCr7OeLFudlqpVQo
+oX2Tv5TISYM+jXIckTgqUnLkTP330fdt38ov+K/ZCnw6OymkaqKgDXfojhcNqAmC
+N2fX4j8LhOPhidqxOy2WlNkdXs0SF8c/iR70jsJoXxluotuKbciZ2b8gZquyST0R
+5hn8k2ea59/XO0rzIeZ9fozCDmDuBZcejtFync48TkMUDlwjDLXkBtGBkmE9ZVLL
+3jr1Mu8Nt0gal7eHs3IxPO6n+kC33MF7PxgkWmzqOrs+nStyj2WLNqTkiCCFhEBa
+ePZqptfMejk8k5HJGtqVg9OE0r2HFRQOxkES5BDXwG74L6nw9plEksjjz2tXEKDj
+u9JrL1aNMLgy035exLjWgRa+xiJ9hTgnsAoM9zkJM21dHMnHwGL37YD9lEHyLX+I
+gO/r/WtKoiJScaDqmdow9EmGTqvUqBcE+z3wiT0WIcglea1JidVIWAnoeCQApybX
+17ihBUYgUycvIc6QpmHqrlkEutPc3pQx7ThbIkaq2Sx4VkDWGWw1H/TPnQ4hSEM6
+DlWJBdvdWWoH4yXpF3HZvCBtOyXabnfpIPPX4G+trrpch4xaLxwpDST1VkJ9xRSO
+qoQ2uoIrZWG1fcjEtSh3P+zxDJzFjl0GGJ2zHV9G/N7bvngbho/SV3cETzZoL8Yi
+-----END CERTIFICATE-----
+
+
+WUS intc keyid f307ba33347c283a1e0c1508ad02f5c8ca06f45e
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAvbLTMRnyH+O+gAAAAAC9jANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDkxMDE5MjAxMloXDTI2MDkxMDE5MjAxMlowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtRjMwN0JBMzMzNDdDMjgzQTFFMEMxNTA4QUQwMkY1QzhDQTA2
+RjQ1RTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOnkRB7FnwcwH2j7
+WhQAhOWg00Ki/Vjs59YnkKFBEMYbvTcpkIaQ4WdHJh4rBHEPVorVi6c1Ikg3oVUZ
+e3t5D08g1Hr3mNZaGUmrbF4OnsDFuWcIQIDgL1umnC6xhIzozjMVEz89sPky462X
+cBEkEx9Q+Q8lSzpyop5sRokCQyjuLLP+DTKm4UzoNMzMK16W2r9PL3HP0B3uhXUH
+CsUZBF0O7RndTIDA9XuSZlLJPQry2Jo4cDOXjUK/cMmPQtY2jaaCXGJ3b0a8HBxE
+a2YaF1XrvKcdChFu0AYa07BZ5yi9l/032P1C4YND++8NCNFO57smOeNF7oWq0IiW
+iHAGB4jaQHDPGlmQ0gxUBWF9XKD1t98fVPbkXQs//IZfi05FWkSCwfmYhsl2879E
+hc7KHasCVdAaD6vW9TjgbvJfpPGI+XYahvNto/+zX1RfIQmgvDnT6gtBuLxsN8SF
+jhSe/Laq7fQwL6MKJ8wULyyUK7y+414bWWsvm/vQ9nHwT3ImX2PxH3DqRIMS5ctG
+AtCXU93k9VkG9F3YN+QuVLrdSbYIYGWx6PC/acze90vjFvNakm17egzO5IcAGCL1
+ePxC94lJMtEK937eqHqzMfabBnP0QIJ8ivRhsBKj10F0zEpbq1+awXvEQw0eIWIe
+BO0h8ardQYzvXLyrKDi4fDfCux0TAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQVJamGsfiscuFf
+i2b2vklj+9RHJTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAD8LYHoqLLYgIblCIfQYvMiSY6kInAX63ZQqHRMc49QI
+UjISd1NfckI2CAU1prdJXjUUsuWlXh0ifW/5AKYbqQ0hBQOlzDygIfFUQyiZrb2A
+gM+199K2GnYIE5xTSIlt0aqHz8tXMuSR8DLF46eXN1SVsHT3kxSLoFaMWwH/KXlK
+j0unRP0Hx3I3sDOEnTNJyYSWsnZUApW5Boq5DaFc5dNzTQpPlLkziO08LLmt/msc
+26GjBzVeLkcMDyTeN+Uj9DqpkE1+RIiYF+sngQ+3YcP3gCnW5vmvsA+LEYk4lDZv
+CIwmvdZdjahXwZ3GJvsVPesnxNF3fON19po2gLe5o+Efq6pflU9QBsSPP3yAJCa9
+Oj00HxiAdpwPVRYXcD9Kc9ERH2WJdeg47s9q0D/bKB5FAWRiS5dIo9OKZkuh0whq
+bwSNxfUe01usmr0pKFN18zesLP5OJOMab556cXhUti9Db0L1kTXgzHuqy857p3zh
+kKUs73vTndD1vqRUq5cye3HS+2xsNwkqy/35Tg9GOku8UWlMbztKMWdpvOREnKOb
+FQjyuz8Ee1DjLIWf9BWwKCg3LUU6Oof1/jxasXF5+P8++WqIFyVFPRzzqbdRPlQJ
+FM3PwskbLdEOeFi8vZ0DzqOyTwQHfEUs2LQcJ242Ow2gSfBFuhr5R2WgGgzQJRdj
+-----END CERTIFICATE-----
+
+
+WUS intc keyid f6dcae3808326f10a46a62d55fe0a9cbe841a3d4
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIG7DCCBNSgAwIBAgITMwAAAvXkoDYBk8S1xwAAAAAC9TANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTIwMDkxMDE5MjAxMVoXDTI2MDkxMDE5MjAxMVowQjFAMD4GA1UEAxM3V1VT
+LUlOVEMtS0VZSUQtRjZEQ0FFMzgwODMyNkYxMEE0NkE2MkQ1NUZFMEE5Q0JFODQx
+QTNENDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKikCph2pBy6EaXU
+5G44VceO3cXOYVPufbKGtGjlvQxo1au5i7fNStGglt1YtzDEUD1nD2CsgDBDi5zv
+CM2JfMczcavTYvI/zJUjR0lMjP9tq2PNkUJXp+wM0gDgkDvSOsAZJcWaRTeG3Im2
+tmAijRO0tkxuw3mPcwRL4gMckxf9CNS6q9BFPfIjlfCqBA/IAKklSuj1kKfsUh/r
+vqlb/nX5Poy6ZSWnOFFZUTWm2+5XKU6TO1sPRtWiLtNXfib79mgvSExNmhA0ATIx
+eiyIZ4Q9cZIJN0uRqVGHJ9Td+APVnWAzibUgQfSBLcL9oX9bbtaoB7PX3nTgerlk
+TZ51G5iU5l9J7bfwRvv6jrJ2VXMH/tRIiVkydGhokFD2h8ZAP2dfXHJT+myQN8ww
+S4vX8ySLJdpx2diI3LdqTN36qEGI5SQLXaGtft9nQ5cjhjsAteAVPz199bACLEIn
+QNbrIcqVrmU+OGthCmUVoS6c83uF2GgrrqyHoCIGU0+jjWCG5sDTpwghTNipayQ+
+hwVinH/iOncbcLqFaM10T/5Y+rexwW2az3QrhLU9ojJf5vySkMq61ikvIvj7ZlWj
+7fUMQnLo3n270B6m1nBih/qbfSTOl1K1MLfGehKeN2cR5g8yEPNR9qRs+Xe6EojJ
+30QNmbmjRnxj/IZyH/i1AIWFeKOFAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC
+AoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG
+AQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBT1WnmarvtzSxvf
+PzBp9xPQDWJOuTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV
+HR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny
+bC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp
+dHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6
+Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN
+JTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ
+KoZIhvcNAQELBQADggIBAIOEYzu5vgJbnKPeHA98njIE67R6f09yDyWlbClBKk0k
+ekfVfBCe0sU85ujmR7QuMJfX39to4SSvV9581tfEMNlVGWy0V0Ct3nZZp10yRSEQ
+yfrV+kAVdLK4v3cPlpfZB8JyvLmR9TKxZDah3OpVHG6QS4nCmNwIlZHwTHSs31Qz
+0R5/5rsbZWE/21PMNuqsrYRBDY9OSwuEDg5Agvj5doGI+f/EdrXq7nbjquKiNo7W
+XV27zWilk7YI51tDFAUcM/cP757u9o02hDQrIGqvb0O+oFBpesTd8cgYt/K4u8xN
+V7XGnwo8DTOaEx5QkaScAwTnT36rHDw/7W3kfBOj6Kdt4Yws6kbZL2T5cHUxaKGj
+Klu4rb5YX2wYBc7QnV2WTuuV5h3wGIyWGvuic9rZ7YkEXvP4UxBFpT/dHCmBK01W
+LWPGFh51k8k+VG8YKpaD7CRPAv5DEqbyjUAKHip6LrqiiwhFMYJdAdvni+jXCLfR
+zJ+CNZjBuvE4WfIc20rdSgsTeFgFOlTgJe4nvD5/Uq32cj4R0OcXekmtbmV4MEzE
+NLV0a6Su9ZK10qGt/lEcxkifD2sp0nGT0XG2JK5LbnJsXZnS+yRnbr6AbjI0Dg7n
+1EAOqevdqdcZroO1J2GxD7Rd8hOhL3xD/c/ElIwVLkg2sEzRJGrmx2EBzmIBfdJC
+-----END CERTIFICATE-----
+
+
+WUS ntc keyid 1591d4b6eaf98d0104864b6903a48dd0026077d3 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAqUCVrttiIsXhgAAAAACpTANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzA0MloXDTI1MDMyMTIwMzA0MlowQTE/MD0GA1UEAxM2V1VT
+LU5UQy1LRVlJRC0xNTkxRDRCNkVBRjk4RDAxMDQ4NjRCNjkwM0E0OEREMDAyNjA3
+N0QzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAkpUIa6U7K8e2TlBw
+jMy+3DQkyDMgtB1AmYUgwVCb3v3LhX5LQmk8w8gfa9ANc5K2LBhygZGXI7qzycjx
+flZiJYyCOMkPIS2a+Q91ToXAipae3/8uo+kPsrPP/ODKKCshUCaT6w0ytnnXn2+n
+MFRTWgHypoUdTurYBAuzyXDNbkZPIul8npuN6FUWOyTqBZldNETsqxb0NdHxzRhy
+McPkQRotcC52DTDt5mKwMwlGsYVDPVSg/1UKRwNgEbeeKkvXi7sbBsRrWEIWoQyQ
+tKo7zqX17LzFyC1BsrM7sdz3ahu2Z4VhikYwhVicO/ohleQggVf0JIRI2Hfb5P67
+WokK3E19qrSWdIt/W7hTvkCk3yQcbG1/v0xFLK6Sl1SK8yOee/1a7dViQ/6pYxhg
+eZ+hbd755BHO9CFBAq+eGJffdFvSpPnUvGS+Q4DDbEmXmZva+FQgSef5N6FfzfOa
+no2hzVKPqmMfULQ+OP5lcpMuovlshIuhdadqqECNQmN75jxfL29FPT+g+w1855x0
+voLC95aFMz4yXpgCHz2KLZtT8xhHygNi47D0V2RB6uHAGro1DjXti6vXSGp+Xs/L
+oJOcnVmbwwnNwm92pfZiRe7VuNuygLBDFuRd1L7MIcFWxbFWprgWWoau6JZdBODi
+Zm4hJ9fcQjoWFcegc/NnC32bKwECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPAb53K+HaMKrz2l
+1iucfJQUIgH9MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAibqeCkMxc00T2BrxC3S5UksXJ/zcVz3k+hnGgBZkqfvc
+T2QJ6RK42o/vQlQYCLgZI5RVcCtip6ldjNaHE5oaiZS9joqB/i0At9BSFyPVd2Pn
+2JTPOMzYC+zCjIlICw8LeArNq7qPTSJnp+3uIWkpHsUc2Y2lrrS7/pLeeJanmeOi
+txPgLb5ZCzhtJxYOUhhIOYQwOtoftxFtcHknG8vwPVMSUjMd80qHRjtRhSk6ZdC4
+LlJwdedLzoor7xeU3KvzDj4S+Lq8ajoo1EZaPVKv3IyDPmnYw7PmIhD7BusJvf5K
+rPgmzad+XCrLezLveaQ4uELgxvJFAFF8M7iL/KbrLXEhmrQTYEVqKx8NpVFgsTnd
+nlEfKJ8I6zqTjdWg6Qg95gJdiuh30qnRrmXtqSpZKe7VwBZrc/J4x7lr/dihNQMK
+5owabJH8aw9U/PY0i4JpIoqX9g4H+6PkFhPtxwn6OfQqxKfv6zUWxI6KyoUbENQh
+9e9CO0rWn5hMd/USobvOBMp+QKN3ylXCkHDunCsoJ0I7TMRCIsLKSUTc5aqM1BIV
+eNIMKD/sM4IjgsPBvbQYMHIgGu5P+1u3MLlUwXBydtMVcLhElg6DiFvdE7CIDjkI
+VhRa0AKZh/Q/39d98meBE1br7xbktt//fmKfwOaBj9gpKtpiaK/BrTt33Rq9iUE=
+-----END CERTIFICATE-----
+
+
+WUS ntc keyid 23f4e22ad3be374a449772954aa283aed752572e
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAX4YVGRHvR3DRwAAAAABfjANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MDgwMjE3NTE1OFoXDTI0MDgwMjE3NTE1OFowQTE/MD0GA1UEAxM2V1VT
+LU5UQy1LRVlJRC0yM0Y0RTIyQUQzQkUzNzRBNDQ5NzcyOTU0QUEyODNBRUQ3NTI1
+NzJFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4Sp58SfgGeSuQ0sT
+uTWZ86mXZ36+g5LxTkRecRr2a6UDvqICbnEJPoVdP6o6q9Eq7HC/02vScvgQzUrw
+UOaA8giXlfgXDzNwY16wgu9S1AqUrzVIJZ2OCPxEmZItpObXI/kulR512YRa1IZg
+rSKo3tNhi3YeL93bi4fQR1RRBDrro1SoBRiURgU03v+nLlfFzxGpTfYCo5eee45Y
+DLaToowlQWoblwtW33Nb3VHU1LHL28nHJyuxtteKjJYdzve7w8jnp4sPfVgrwVIV
+XUZ7a7MccmSNdLgmDpgmjt7YSgYsvXy9UBrFQtEkFX4ZssOSrQG0D6QU1xoY+G67
+9cCtXIdwFKciF5ixAXBYzz7j/En4b898DVQAfJl85fT6bOT0CiobLuaKJMBXjHG3
+d5AwD3Slai3JPZfnAsNuuM3tzNx28fbR6N0P0UHNb12EAw31S3KBm9BsAqSFwS+b
+fo9x3X/8H1wak8eWAdWPgkzwxgQQ8UnXjtSdGPp+ZTLN0uddawsOPuZ/4iEsnLv3
+rCQ4oI1r9SBzHnrdX8zJHJpD0XC+2QD3bbPYQG/FgYyyrb4hYfngryarSNtzyPz+
+pvlXAoSZmV7E5AkdrQMjZyHCC7huAok/WjZeDkSlWMizvGaaTXO/xERynhFhA/H4
+y5dq7fJFGNMUxRTXCaLZCfXc6lUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLlLJkl9oh1EDzeR
+gQSm41zBUKZzMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAM15objzvKTW25Rtv8Uy1wbRp0s7pviyq14a2X64NHk6X
+5Z0VjnP4DP4ftaoWngN7IJ+jQLp3yQNIvF5/orB2T6iHXL+j+J+jXfOr1TCHd78k
+Nd6aVzIrzKZCp30ddDYabDBZLGqXg8A8SFmGwwryw4RTjXoS7XfjbPlk8zR5h8Qo
+KmA6fCxiI87Rv9DuewY5vhbhzttaV3+SEee3ejuharxT1rDTsh1MOgR8LP3tNyS4
+XlDpjQMRmE/iot9Bi00MSqWR4+AFhgELduRGaS/1eiQtFYMvOGpalhdZTqvPBn2t
+rwXudbrNN7yBzR8DymlJ41pAOLCrqBHEB2DxfLJaBKi5UJpK5TvTo4GfMUOnvxzA
+nV1ThddE80wD9D4xxA+YAT90pmkWAyuxaKyJthnUAGvxLXk9P59AZL9Wx47QVNka
+imr7zKn5v/UPD6nd0Uecm+yAX4b6zHPl+EqwnisfKjBKU0Qsr7eBKG7Vaa/er8Oq
+eQjFTbmtqGkXaspYBEsd8a6PyTgt9vBalHvVwvC2czxQ61SPNpIMEBu23V52f/NK
+4blkXTnP9Le/fv5GS/url5VVpFMwG28LpESAfz3taZPHB4LLcV5KMi9EDysdcY0K
+LlCoWMmjoa9BSPXSBGx+AFvfo79zUy0u1f9kI6hnM1SuSCuA29KwkBP5tsnFNns=
+-----END CERTIFICATE-----
+
+
+WUS ntc keyid 23f4e22ad3be374a449772954aa283aed752572e 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAqOqTbgw1e4kAgAAAAACozANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzA0MVoXDTI1MDMyMTIwMzA0MVowQTE/MD0GA1UEAxM2V1VT
+LU5UQy1LRVlJRC0yM0Y0RTIyQUQzQkUzNzRBNDQ5NzcyOTU0QUEyODNBRUQ3NTI1
+NzJFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAx9KuJleK2B11eAYD
++kL7UriodV9L8T5nPBtAY6YysLnvfgzjgdQ6JGGi0pFk+YowalosFTfJsjD6eY+m
+3SEFtFCGdmKaKoXqtha2V8y3HcAoqF7GzdHC8l5wbPvJVyl04TJbRZ67uGRaqISE
+JaGzpRUwbWynj95MWPUZY3AslevLYRqbAxUv+BECmRZTbd/pEDIKlfVDO/iAeCwa
+plklGeINC6v/fLvZKR3Ee2H3LKNWrXV/qxiwxCDA9AgKAgzLcIY3J9TUBUC9vyFt
+ZHCjf7FfOOzcGQOI5mMI3r/3SQq0oXFXQBZosBCio93mLUVVCwuvupYIlhn9ICjt
+qsh4Z5sHZkKsNGtG1hkJ2XCVksP8KwJk5s2EoMOiDmRbdWFaIoHusivxv4n8adF8
+QdAXQ4zI89ji4RSmqbdgJ0Cu80yGId+LgIm8CMiEBUkKmUCufz+5+iHhgCF3Ir+5
+3lnJqOxjpvfl0YZre4i1Hsx0ROmrTu/f/LFafWb5KOXhZTXjKaYZmHpuganiO3Bt
+tV0zDtAEzXK5HfyJBV0DYBULe8Ir4UMSXdhjXf2hURhEE8MLG/QqaaDhfv709CfP
+Dl85ci6VuKXPlZyt6Y2i0wbnwdji+oZY5JvQMSHZCBgOhtuggah/EBMBabcHCP6z
+5SCVR+IjNnPrfv+f3fGNEtfB0Z0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEob6uyJsTFJm9/I
+eeB77MrH9KLdMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAKVn58AXi01je06E1D1bdtw92AxsL3HWNgvwDlmArU426
+rVAsNx84wojFicRTs7QpMTtLM579eN5ug7MpODop5I7segZaytjREc0MdI3BPHHy
+ScDXC2+jEnIhRna9E3TfAybE/KD9ry6bl4gaLCftvopz2l0I+boOG9Dl7WlgHTNd
+MVSQK/ccgD7DzRB+yY1vnGQLdWuYOz7/spx1i/xM/YpFfI9vl6+KZ1sfG0iHNL4t
+6vnqiI/OISTys6lGMH49/cQaCw7tLCHwqRlwOWvyC9k6gXMAWCdkhG603UtInAbQ
+eFLZQwkhnvhHqR+hw/yMLKjaTVp3hrwqzQkjHuLwFCVpxYwhj0NX4uIn1Xh22iqQ
+0dwKU9mxNVPTZpwen5ER/KbjoI7eMCHLM/ZWKubApQDSeWm01+SBLvzjz9VTSQrs
+CPdtvg9VV3Xrdn9+pOcJgFIpkdHu9K5vyQWFjEYaeO6il1je8hZKFTYfXGuOEnj2
+R1ecZCmGCKFIdro+kowSJibFos6TIzjuX8kvYmjaayPW4fnKr2eDa2YWBFXXuTef
+TG/vMDE6a4B5r//KTv/fq0U8DN9bLEwd3nIxMQAxVq/nPkmrTSrX7CL9v900dBJy
+FK55aJYdITi/T9R18bzF/2aYu7Jje9NdV126RqL40j1oUYkuM9vYldVYY7UBrU0=
+-----END CERTIFICATE-----
+
+
+WUS ntc keyid 882f047b87121cf9885f31160bc7bb5586af471b
+======================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAX/aoQ40ah+CNgAAAAABfzANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE4MDgwMjE3NTE1OVoXDTI0MDgwMjE3NTE1OVowQTE/MD0GA1UEAxM2V1VT
+LU5UQy1LRVlJRC04ODJGMDQ3Qjg3MTIxQ0Y5ODg1RjMxMTYwQkM3QkI1NTg2QUY0
+NzFCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqv8CKR+xDTi9tAgN
+3wLbPfAipEybhXp+vqNKYlSNWwAE+O9iybajvYygapbzGudRgWqI6ntU4LbIadAv
+9HpNwTFHIycmKemJHWQf2fmK4ylNxgnV/t0yJsgGlp3ZeWmjjPvij7E+03YlSJzD
+e/xoYsuKFpS8Rp0p4l3EebMmsp1ryCDQtKNF/40Wu4ZzQOZURlq70M2dorxDDbKe
+jLx2HkTkr759Hkc/hD77GmNhdSVpSwuVi6hJ9PwdZSsVtXVqDAX6a7oDvjL2CUqW
+LhEmAaAdGVraqH5pRkAzQPJq04/Ad06de/HXety8YPI+wy8loDmwgfpbdkTyKMrJ
+/Va5DLyIh5f0wmLu05sWNwRjNApNZmWJC8/xVidMy5q4EutfdCKGCjChvoMhvYF1
+7T91f5ia+4YIw8BL1AqR77Nspb8fQdTmznLV/YZEHrii1NUg6K4ok9Fp3WLltJU/
+7KzZIEKMgez9SYHeGyjSHlAM0EfC0u5ItRkP5OwYlhe7roklGPNek7xle/QVVeTn
+gpfWH0rlB7nEGXk9kszFTmsBJhryzXrxxbf4se9nukrVCV/gul6vvQOx8LJdnFzd
+kUNHzqSv9cDvmNkEzY+HcOiRBQoBBGc8MabUCXIqHcryk0fBNP/c4YIt7vS40jqX
+p/X1AtPyl6A5tWTkDO0odac4XJkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLuQhxlfpQMV3JfW
+SrFZkRJC3Q2sMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAYvEwS/3xa2Hf10bUNyxD3XQiwAJAbns01jIUMEaGFNAE
+juwOWZov1OoEj049KNqeO32qbgSVGI9bWtfbxwb67Qv6PWdF0EZZUc0DzBXY2suH
+BoQ+WujN4mjtvgaRgcYqAKhgU9yb9YPw9kYvfyoMBdgNsfepVdfTaLvEe900Tjvb
+bYx6OEu6egiP5b0gqhcVaigppbBP0+odrNO3f/c7Q5AO+SENqQvhpSeV+WiNVedk
+ZDAu+JNSZNbUBUUatewsyKyjRNFlzXtRvOmsctXHzrmqXJba5xv82+D6r6RhivGt
+XLjb72UV4bJK6F41PR142G5FBEomj0yi/AFF3vowKEf5dciUturVn5G2MDbMlTPU
+f9349qbaZepxyHYa4hgGYRnuKK4lYK5FLvDtYvun7mkG9JWZqiblG9dA8ZKyMWGs
+iLBP84EplePhzdfAR/RlZKPXe7JEiHffPzexCMB0X/3BnyXxrMKZiFzIXzQ3jBZN
+34I3hQl4ohJMsWX/3FbgrGjJVwOb3ZV6Wk+5VA2iXMnflbOHSnzKBSMYR5uZOdG6
+XJQY++KrJTkyHihAVinu03Ir42BvQ0+2VFTSr6V22hDcW9YQQy8N1b9LVLW+0kqO
++5+QPkJZBB2181kLJnHPcHD6GX5tEwq/CK6UKzb25H7eROZan2kV9yLOXWkQfWo=
+-----END CERTIFICATE-----
+
+
+WUS ntc keyid 882f047b87121cf9885f31160bc7bb5586af471b 2
+========================================================
+-----BEGIN CERTIFICATE-----
+MIIG6zCCBNOgAwIBAgITMwAAAqQPWUBJNgeAvAAAAAACpDANBgkqhkiG9w0BAQsF
+ADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE
+AxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0
+MB4XDTE5MDMyMTIwMzA0MVoXDTI1MDMyMTIwMzA0MVowQTE/MD0GA1UEAxM2V1VT
+LU5UQy1LRVlJRC04ODJGMDQ3Qjg3MTIxQ0Y5ODg1RjMxMTYwQkM3QkI1NTg2QUY0
+NzFCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0i3kXSJd/0UylWdt
+4gh+M/VvYecYVvH28We/c83CLe42EeTbgLLC0PigIS262oV/B+bwDz/HN/rAlQxI
+A2XclywMJRH3MFTXblZzIOfdVYJGThS6fFmaJiXJU/4BMzOXMgLMP3u9PXvnVW4i
+ZRSdl4RXk8N1CIMlg1udinG2s9pH3+EH2UMKQ+OaSU93OSkZsa0NlxLW/pRcZDnr
+61rxa2JuIV9QZaAJfeIw3uBJL3+ocghLzGZLA1Haq09eKjwI/8qyi87ITVzxq3cS
+0/nMXp3KC8QppcjMkSrtKlvOaanJ6G18DkDqiM2bstUxFifxSbY0NYn7NMiS4zhR
+9WLRW9PrhiNpl8buol8WmAIlWyDB6q88NNEaTL3e9wraZfRLanhJy37sA7uAQ/Hh
+TAusyzN2FXZqH6P7a4TaozyCk1UGHHvCZKvUQCSx52+QOq8xOQnSebhz98208+Vz
+l4dDYS1HZmnlpZEzaZgHAGvF/PFkBk1p9JTWq7TNPzOWI/NpfaDuohTPiUl/Iv4X
+i2bMbscDZjBU/Wz9Vp8Y8VqKgJLm2lpf8esLcuSP+C/cyvo6Iu8m2He52bwHfJ6q
+O7w+//iflF3DxUlP+oc+gMlDz5Ynm+Zvxz9iPQuHjfJYHU5PU6mTR6ADd4kY+/NW
+tzWHQW1+ZJsnhJp3M7x6aMidgdkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC
+hDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB
+BAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFzkix20sAidsDbw
+XVqsXI+yNrejMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud
+HwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js
+L01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0
+eSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov
+L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l
+MjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq
+hkiG9w0BAQsFAAOCAgEAG06E9kKeAZpTHL6JAKfxPUJo045KBPVyCpV5U8Fn+oL5
+SXcaumjWGaBYUc2UfTH9bySrENmurQGzZFAfrdwdnXjJ+dKFbOZL1sLqlt0WyEzH
+LKARWCjN4gedGH5746M8qLVaGYHNRt7bK9v2OHCl9sgT1NRzSoQd/3RlIfhscgA+
+7Lcca5Fvt8QmnEXYO3iTH3NFaTnS1ieWYUnKAmkw0o4ZD37zYY0Da3R6zLtqFubu
+iko7x/52XGftM7Np4RKFH0B6O37oOcw4iH9zrBRVjTgUBWQ2Mi4YnDxzmVbDxi9A
+4GkSlJWgl+QRge2r1B+ZKQQ+6nqlLhzDbgLFZJJ2EjYFmVBVG4kziV/wHyEFzC0R
+xsaD+CtOWG83dm+y0hzvLE1PxjUy7Tus/X0G4I2JLrti5zIxr1K5v7a/gO7xemT0
+72iIYW3SBebZ8DwYPlg5tSsO/C9eY8vgIb3mxrDLg/9K9c6DvT7P3iv3BCjrwGdJ
+ocU8ymxk1NAeMScz5Masy0+SXUA9tBW7hO3MVZrrldquKdFVe29tRuPUJFNrmFME
+oLUhgPJsORSTRXZt+hoOqdVEcKpE0emRF5Pj6dhhAq1M1lF2MZ3oN02IUxRF7LY/
+PV7SzFtOkoHcq/RjsbulQfAwB1NzIF3WmiYxICQIyJcVeT8/U5puPkKEUU/uwn8=
+-----END CERTIFICATE-----
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/nitro.pem b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/nitro.pem
new file mode 100644
index 0000000..9bd6ea2
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/nitro.pem
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBmjCCAT8CFBZiBJbp2fT/LaRJ8Xwl9qhX62boMAoGCCqGSM49BAMCME4xCzAJ
+BgNVBAYTAkRFMRYwFAYDVQQKDA1OaXRyb2tleSBHbWJIMRAwDgYDVQQLDAdSb290
+IENBMRUwEwYDVQQDDAxuaXRyb2tleS5jb20wIBcNMTkxMjA0MDczNTM1WhgPMjA2
+OTExMjEwNzM1MzVaME4xCzAJBgNVBAYTAkRFMRYwFAYDVQQKDA1OaXRyb2tleSBH
+bWJIMRAwDgYDVQQLDAdSb290IENBMRUwEwYDVQQDDAxuaXRyb2tleS5jb20wWTAT
+BgcqhkjOPQIBBggqhkjOPQMBBwNCAAQy6KIN2gXqaSMWdWir/Hnx58NBzjthYdNv
+k95hdt7jCpyW2cHqLdQ5Sqcvo0CuordgDOach0ZGB60w9GZY8SHJMAoGCCqGSM49
+BAMCA0kAMEYCIQDLmdy2G2mM4rZKjl6CVfjV7khilIS5D3xRQzubeqzQNAIhAKIG
+X29SfiB6K9k6Hb3q+q7bRn1o1dhV1cj592YYnu1/
+-----END CERTIFICATE-----
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/solo.pem b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/solo.pem
new file mode 100644
index 0000000..c7a3740
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/solo.pem
@@ -0,0 +1,41 @@
+Solokeys FIDO2/U2F Device Attestation CA
+========================================
+ Data:
+ Version: 1 (0x0)
+ Serial Number: 14143382635911888524 (0xc44763928ff4be8c)
+ Signature Algorithm: ecdsa-with-SHA256
+
+ Issuer:
+ emailAddress = hello@solokeys.com
+ commonName = solokeys.com
+ organizationalUnitName = Root CA
+ organizationName = Solo Keys
+ stateOrProvinceName = Maryland
+ countryName = US
+
+ Validity
+ Not Before: Nov 11 12:51:42 2018 GMT
+ Not After : Oct 29 12:51:42 2068 GMT
+
+ Subject:
+ emailAddress = hello@solokeys.com
+ commonName = solokeys.com
+ organizationalUnitName = Root CA
+ organizationName = Solo Keys
+ stateOrProvinceName = Maryland
+ countryName = US
+
+
+-----BEGIN CERTIFICATE-----
+MIIB9DCCAZoCCQDER2OSj/S+jDAKBggqhkjOPQQDAjCBgDELMAkGA1UEBhMCVVMx
+ETAPBgNVBAgMCE1hcnlsYW5kMRIwEAYDVQQKDAlTb2xvIEtleXMxEDAOBgNVBAsM
+B1Jvb3QgQ0ExFTATBgNVBAMMDHNvbG9rZXlzLmNvbTEhMB8GCSqGSIb3DQEJARYS
+aGVsbG9Ac29sb2tleXMuY29tMCAXDTE4MTExMTEyNTE0MloYDzIwNjgxMDI5MTI1
+MTQyWjCBgDELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE1hcnlsYW5kMRIwEAYDVQQK
+DAlTb2xvIEtleXMxEDAOBgNVBAsMB1Jvb3QgQ0ExFTATBgNVBAMMDHNvbG9rZXlz
+LmNvbTEhMB8GCSqGSIb3DQEJARYSaGVsbG9Ac29sb2tleXMuY29tMFkwEwYHKoZI
+zj0CAQYIKoZIzj0DAQcDQgAEWHAN0CCJVZdMs0oktZ5m93uxmB1iyq8ELRLtqVFL
+SOiHQEab56qRTB/QzrpGAY++Y2mw+vRuQMNhBiU0KzwjBjAKBggqhkjOPQQDAgNI
+ADBFAiEAz9SlrAXIlEu87vra54rICPs+4b0qhp3PdzcTg7rvnP0CIGjxzlteQQx+
+jQGd7rwSZuE5RWUPVygYhUstQO9zNUOs
+-----END CERTIFICATE-----
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/yubico.pem b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/yubico.pem
new file mode 100644
index 0000000..e1338a8
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates/yubico.pem
@@ -0,0 +1,42 @@
+Yubico U2F Device Attestation CA
+================================
+
+Last Update: 2014-09-01
+
+Yubico manufacturer U2F devices that contains device attestation
+certificates signed by a set of Yubico CAs. This file contains the CA
+certificates that Relying Parties (RP) need to configure their
+software with to be able to verify U2F device certificates.
+
+This file has been signed with OpenPGP and you should verify the
+signature and the authenticity of the public key before trusting the
+content. The signature is located next to the file:
+
+ https://developers.yubico.com/u2f/yubico-u2f-ca-certs.txt
+ https://developers.yubico.com/u2f/yubico-u2f-ca-certs.txt.sig
+
+We will update this file from time to time when we publish more CA
+certificates.
+
+Name: Yubico U2F Root CA Serial 457200631
+Issued: 2014-08-01
+
+-----BEGIN CERTIFICATE-----
+MIIDHjCCAgagAwIBAgIEG0BT9zANBgkqhkiG9w0BAQsFADAuMSwwKgYDVQQDEyNZ
+dWJpY28gVTJGIFJvb3QgQ0EgU2VyaWFsIDQ1NzIwMDYzMTAgFw0xNDA4MDEwMDAw
+MDBaGA8yMDUwMDkwNDAwMDAwMFowLjEsMCoGA1UEAxMjWXViaWNvIFUyRiBSb290
+IENBIFNlcmlhbCA0NTcyMDA2MzEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQC/jwYuhBVlqaiYWEMsrWFisgJ+PtM91eSrpI4TK7U53mwCIawSDHy8vUmk
+5N2KAj9abvT9NP5SMS1hQi3usxoYGonXQgfO6ZXyUA9a+KAkqdFnBnlyugSeCOep
+8EdZFfsaRFtMjkwz5Gcz2Py4vIYvCdMHPtwaz0bVuzneueIEz6TnQjE63Rdt2zbw
+nebwTG5ZybeWSwbzy+BJ34ZHcUhPAY89yJQXuE0IzMZFcEBbPNRbWECRKgjq//qT
+9nmDOFVlSRCt2wiqPSzluwn+v+suQEBsUjTGMEd25tKXXTkNW21wIWbxeSyUoTXw
+LvGS6xlwQSgNpk2qXYwf8iXg7VWZAgMBAAGjQjBAMB0GA1UdDgQWBBQgIvz0bNGJ
+hjgpToksyKpP9xv9oDAPBgNVHRMECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAN
+BgkqhkiG9w0BAQsFAAOCAQEAjvjuOMDSa+JXFCLyBKsycXtBVZsJ4Ue3LbaEsPY4
+MYN/hIQ5ZM5p7EjfcnMG4CtYkNsfNHc0AhBLdq45rnT87q/6O3vUEtNMafbhU6kt
+hX7Y+9XFN9NpmYxr+ekVY5xOxi8h9JDIgoMP4VB1uS0aunL1IGqrNooL9mmFnL2k
+LVVee6/VR6C5+KSTCMCWppMuJIZII2v9o4dkoZ8Y7QRjQlLfYzd3qGtKbw7xaF1U
+sG/5xUb/Btwb2X2g4InpiB/yt/3CpQXpiWX/K4mBvUKiGn05ZsqeY1gx4g0xLBqc
+U9psmyPzK+Vsgw2jeRQ5JlKDyqE0hebfC1tvFu0CCrJFcw==
+-----END CERTIFICATE-----
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/Yubico.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/Yubico.php
new file mode 100644
index 0000000..cde9f4d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/Yubico.php
@@ -0,0 +1,500 @@
+<?php
+ /**
+ * Class for verifying Yubico One-Time-Passcodes
+ *
+ * @category Auth
+ * @package Auth_Yubico
+ * @author Simon Josefsson <simon@yubico.com>, Olov Danielson <olov@yubico.com>
+ * @copyright 2007-2020 Yubico AB
+ * @license https://opensource.org/licenses/bsd-license.php New BSD License
+ * @version 2.0
+ * @link https://www.yubico.com/
+ */
+
+require_once 'PEAR.php';
+
+/**
+ * Class for verifying Yubico One-Time-Passcodes
+ *
+ * Simple example:
+ * <code>
+ * require_once 'Auth/Yubico.php';
+ * $otp = "ccbbddeertkrctjkkcglfndnlihhnvekchkcctif";
+ *
+ * # Generate a new id+key from https://api.yubico.com/get-api-key/
+ * $yubi = new Auth_Yubico('42', 'FOOBAR=');
+ * $auth = $yubi->verify($otp);
+ * if (PEAR::isError($auth)) {
+ * print "<p>Authentication failed: " . $auth->getMessage();
+ * print "<p>Debug output from server: " . $yubi->getLastResponse();
+ * } else {
+ * print "<p>You are authenticated!";
+ * }
+ * </code>
+ */
+class Auth_Yubico
+{
+ /**#@+
+ * @access private
+ */
+
+ /**
+ * Yubico client ID
+ * @var string
+ */
+ var $_id;
+
+ /**
+ * Yubico client key
+ * @var string
+ */
+ var $_key;
+
+ /**
+ * List with URL part of validation servers
+ * @var array
+ */
+ var $_url_list;
+
+ /**
+ * index to _url_list
+ * @var int
+ */
+ var $_url_index;
+
+ /**
+ * Last query to server
+ * @var string
+ */
+ var $_lastquery;
+
+ /**
+ * Response from server
+ * @var string
+ */
+ var $_response;
+
+ /**
+ * Number of times we retried in our last validation
+ * @var int
+ */
+ var $_retries;
+
+ /**
+ * Flag whether to verify HTTPS server certificates or not.
+ * @var boolean
+ */
+ var $_httpsverify;
+
+ /**
+ * Maximum number of times we will retry transient HTTP errors
+ * @var int
+ */
+ var $_max_retries;
+
+ /**
+ * Constructor
+ *
+ * Sets up the object
+ * @param string $id The client identity
+ * @param string $key The client MAC key (optional)
+ * @param boolean $https noop
+ * @param boolean $httpsverify Flag whether to use verify HTTPS
+ * server certificates (optional,
+ * default true)
+ * @access public
+ */
+ public function __construct($id, $key = '', $https = 0, $httpsverify = 1, $max_retries = 3)
+ {
+ $this->_id = $id;
+ $this->_key = base64_decode($key);
+ $this->_httpsverify = $httpsverify;
+ $this->_max_retries = $max_retries;
+ }
+
+ /**
+ * Specify to use a different URL part for verification.
+ * The default is "https://api.yubico.com/wsapi/2.0/verify".
+ *
+ * @param string $url New server URL part to use
+ * @access public
+ * @deprecated
+ */
+ function setURLpart($url)
+ {
+ $this->_url_list = array($url);
+ }
+
+ /**
+ * Get next URL part from list to use for validation.
+ *
+ * @return mixed string with URL part or false if no more URLs in list
+ * @access public
+ */
+ function getNextURLpart()
+ {
+ if ($this->_url_list) $url_list=$this->_url_list;
+ else $url_list=array('https://api.yubico.com/wsapi/2.0/verify');
+
+ if ($this->_url_index>=count($url_list)) return false;
+ else return $url_list[$this->_url_index++];
+ }
+
+ /**
+ * Resets index to URL list
+ *
+ * @access public
+ */
+ function URLreset()
+ {
+ $this->_url_index=0;
+ }
+
+ /**
+ * Add another URLpart.
+ *
+ * @access public
+ */
+ function addURLpart($URLpart)
+ {
+ $this->_url_list[]=$URLpart;
+ }
+
+ /**
+ * Return the last query sent to the server, if any.
+ *
+ * @return string Request to server
+ * @access public
+ */
+ function getLastQuery()
+ {
+ return $this->_lastquery;
+ }
+
+ /**
+ * Return the last data received from the server, if any.
+ *
+ * @return string Output from server
+ * @access public
+ */
+ function getLastResponse()
+ {
+ return $this->_response;
+ }
+
+ /**
+ * Return the number of retries that were used in the last validation
+ *
+ * @return int Number of retries
+ * @access public
+ */
+ function getRetries()
+ {
+ return $this->_retries;
+ }
+
+ /**
+ * Parse input string into password, yubikey prefix,
+ * ciphertext, and OTP.
+ *
+ * @param string Input string to parse
+ * @param string Optional delimiter re-class, default is '[:]'
+ * @return array Keyed array with fields
+ * @access public
+ */
+ function parsePasswordOTP($str, $delim = '[:]')
+ {
+ if (!preg_match("/^((.*)" . $delim . ")?" .
+ "(([cbdefghijklnrtuv]{0,16})" .
+ "([cbdefghijklnrtuv]{32}))$/i",
+ $str, $matches)) {
+ /* Dvorak? */
+ if (!preg_match("/^((.*)" . $delim . ")?" .
+ "(([jxe\.uidchtnbpygk]{0,16})" .
+ "([jxe\.uidchtnbpygk]{32}))$/i",
+ $str, $matches)) {
+ return false;
+ } else {
+ $ret['otp'] = strtr($matches[3], "jxe.uidchtnbpygk", "cbdefghijklnrtuv");
+ }
+ } else {
+ $ret['otp'] = $matches[3];
+ }
+ $ret['password'] = $matches[2];
+ $ret['prefix'] = $matches[4];
+ $ret['ciphertext'] = $matches[5];
+ return $ret;
+ }
+
+ /* TODO? Add functions to get parsed parts of server response? */
+
+ /**
+ * Parse parameters from last response
+ *
+ * example: getParameters("timestamp", "sessioncounter", "sessionuse");
+ *
+ * @param array @parameters Array with strings representing
+ * parameters to parse
+ * @return array parameter array from last response
+ * @access public
+ */
+ function getParameters($parameters)
+ {
+ if ($parameters == null) {
+ $parameters = array('timestamp', 'sessioncounter', 'sessionuse');
+ }
+ $param_array = array();
+ foreach ($parameters as $param) {
+ if(!preg_match("/" . $param . "=([0-9]+)/", $this->_response, $out)) {
+ return PEAR::raiseError('Could not parse parameter ' . $param . ' from response');
+ }
+ $param_array[$param]=$out[1];
+ }
+ return $param_array;
+ }
+
+ function _make_curl_handle($query, $timeout=null)
+ {
+ flush();
+ $handle = curl_init($query);
+ curl_setopt($handle, CURLOPT_USERAGENT, "PEAR Auth_Yubico");
+ curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1);
+ if (!$this->_httpsverify) {
+ curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, 0);
+ curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, 0);
+ }
+ curl_setopt($handle, CURLOPT_FAILONERROR, true);
+ /* If timeout is set, we better apply it here as well
+ * in case the validation server fails to follow it. */
+ if ($timeout) {
+ curl_setopt($handle, CURLOPT_TIMEOUT, $timeout);
+ }
+
+ return $handle;
+ }
+
+ /**
+ * Verify Yubico OTP against multiple URLs
+ * Protocol specification 2.0 is used to construct validation requests
+ *
+ * @param string $token Yubico OTP
+ * @param int $use_timestamp 1=>send request with ×tamp=1 to
+ * get timestamp and session information
+ * in the response
+ * @param boolean $wait_for_all If true, wait until all
+ * servers responds (for debugging)
+ * @param string $sl Sync level in percentage between 0
+ * and 100 or "fast" or "secure".
+ * @param int $timeout Max number of seconds to wait
+ * for responses
+ * @param int $max_retries Max number of times we will retry on
+ * transient errors.
+ * @return mixed PEAR error on error, true otherwise
+ * @access public
+ */
+ function verify($token, $use_timestamp=null, $wait_for_all=False,
+ $sl=null, $timeout=null, $max_retries=null)
+ {
+ /* If maximum retries is not set, default from instance */
+ if (is_null($max_retries)) {
+ $max_retries = $this->_max_retries;
+ }
+
+ /* Construct parameters string */
+ $ret = $this->parsePasswordOTP($token);
+ if (!$ret) {
+ return PEAR::raiseError('Could not parse Yubikey OTP');
+ }
+ $params = array('id'=>$this->_id,
+ 'otp'=>$ret['otp'],
+ 'nonce'=>md5(uniqid(rand())));
+ /* Take care of protocol version 2 parameters */
+ if ($use_timestamp) $params['timestamp'] = 1;
+ if ($sl) $params['sl'] = $sl;
+ if ($timeout) $params['timeout'] = $timeout;
+ ksort($params);
+ $parameters = '';
+ foreach($params as $p=>$v) $parameters .= "&" . $p . "=" . $v;
+ $parameters = ltrim($parameters, "&");
+
+ /* Generate signature. */
+ if($this->_key <> "") {
+ $signature = base64_encode(hash_hmac('sha1', $parameters,
+ $this->_key, true));
+ $signature = preg_replace('/\+/', '%2B', $signature);
+ $parameters .= '&h=' . $signature;
+ }
+
+ /* Generate and prepare request. */
+ $this->_lastquery = null;
+ $this->_retries = 0;
+ $this->URLreset();
+
+ $mh = curl_multi_init();
+ $ch = array();
+ $retries = array();
+ while($URLpart=$this->getNextURLpart())
+ {
+ $query = $URLpart . "?" . $parameters;
+
+ if ($this->_lastquery) { $this->_lastquery .= " "; }
+ $this->_lastquery .= $query;
+
+ $handle = $this->_make_curl_handle($query, $timeout);
+ curl_multi_add_handle($mh, $handle);
+
+ $ch[(int)$handle] = $handle;
+ $retries[$query] = 0;
+ }
+
+ /* Execute and read request. */
+ $this->_response=null;
+ $replay=False;
+ $valid=False;
+ do {
+ /* Let curl do its work. */
+ while (($mrc = curl_multi_exec($mh, $active))
+ == CURLM_CALL_MULTI_PERFORM) {
+ curl_multi_select($mh);
+ }
+
+ while ($info = curl_multi_info_read($mh)) {
+ $cinfo = curl_getinfo ($info['handle']);
+ if ($info['result'] == CURLE_OK) {
+ /* We have a complete response from one server. */
+
+ $str = curl_multi_getcontent($info['handle']);
+
+ if ($wait_for_all) { # Better debug info
+ $this->_response .= 'URL=' . $cinfo['url'] . ' HTTP_CODE='
+ . $cinfo['http_code'] . "\n"
+ . $str . "\n";
+ }
+
+ if (preg_match("/status=([a-zA-Z0-9_]+)/", $str, $out)) {
+ $status = $out[1];
+
+ /*
+ * There are 3 cases.
+ *
+ * 1. OTP or Nonce values doesn't match - ignore
+ * response.
+ *
+ * 2. We have a HMAC key. If signature is invalid -
+ * ignore response. Return if status=OK or
+ * status=REPLAYED_OTP.
+ *
+ * 3. Return if status=OK or status=REPLAYED_OTP.
+ */
+ if (!preg_match("/otp=".$params['otp']."/", $str) ||
+ !preg_match("/nonce=".$params['nonce']."/", $str)) {
+ /* Case 1. Ignore response. */
+ }
+ elseif ($this->_key <> "") {
+ /* Case 2. Verify signature first */
+ $rows = explode("\r\n", trim($str));
+ $response=array();
+ foreach ($rows as $key => $val) {
+ /* = is also used in BASE64 encoding so we only replace the first = by # which is not used in BASE64 */
+ $val = preg_replace('/=/', '#', $val, 1);
+ $row = explode("#", $val);
+ $response[$row[0]] = $row[1];
+ }
+
+ $parameters=array('nonce','otp', 'sessioncounter', 'sessionuse', 'sl', 'status', 't', 'timeout', 'timestamp');
+ sort($parameters);
+ $check=Null;
+ foreach ($parameters as $param) {
+ if (array_key_exists($param, $response)) {
+ if ($check) $check = $check . '&';
+ $check = $check . $param . '=' . $response[$param];
+ }
+ }
+
+ $checksignature =
+ base64_encode(hash_hmac('sha1', utf8_encode($check),
+ $this->_key, true));
+
+ if($response['h'] == $checksignature) {
+ if ($status == 'REPLAYED_OTP') {
+ if (!$wait_for_all) { $this->_response = $str; }
+ $replay=True;
+ }
+ if ($status == 'OK') {
+ if (!$wait_for_all) { $this->_response = $str; }
+ $valid=True;
+ }
+ }
+ } else {
+ /* Case 3. We check the status directly */
+ if ($status == 'REPLAYED_OTP') {
+ if (!$wait_for_all) { $this->_response = $str; }
+ $replay=True;
+ }
+ if ($status == 'OK') {
+ if (!$wait_for_all) { $this->_response = $str; }
+ $valid=True;
+ }
+ }
+ }
+ if (!$wait_for_all && ($valid || $replay))
+ {
+ /* We have status=OK or status=REPLAYED_OTP, return. */
+ foreach ($ch as $h) {
+ curl_multi_remove_handle($mh, $h);
+ curl_close($h);
+ }
+ curl_multi_close($mh);
+ if ($replay) return PEAR::raiseError('REPLAYED_OTP');
+ if ($valid) return true;
+ return PEAR::raiseError($status);
+ }
+ } else {
+ /* Some kind of error, but def. not a 200 response */
+ /* No status= in response body */
+ $http_status_code = (int)$cinfo['http_code'];
+ $query = $cinfo['url'];
+ if ($http_status_code == 400 ||
+ ($http_status_code >= 500 && $http_status_code < 600)) {
+ /* maybe retry */
+ if ($retries[$query] < $max_retries) {
+ $retries[$query]++; // for this server
+ $this->_retries++; // for this validation attempt
+
+ $newhandle = $this->_make_curl_handle($query, $timeout);
+
+ curl_multi_add_handle($mh, $newhandle);
+ $ch[(int)$newhandle] = $newhandle;
+
+ // Loop back up to curl_multi_exec, even if this
+ // was the last handle and curl_multi_exec _was_
+ // no longer active, it's active again now we've
+ // added a retry.
+ $active = true;
+ }
+ }
+ }
+ /* Done with this handle */
+ curl_multi_remove_handle($mh, $info['handle']);
+ curl_close($info['handle']);
+ unset ($ch[(int)$info['handle']]);
+ }
+ } while ($active);
+
+ /* Typically this is only reached for wait_for_all=true or
+ * when the timeout is reached and there is no
+ * OK/REPLAYED_REQUEST answer (think firewall).
+ */
+
+ foreach ($ch as $h) {
+ curl_multi_remove_handle ($mh, $h);
+ curl_close ($h);
+ }
+ curl_multi_close ($mh);
+
+ if ($replay) return PEAR::raiseError('REPLAYED_OTP');
+ if ($valid) return true;
+ return PEAR::raiseError('NO_VALID_ANSWER');
+ }
+}
+?>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/array_merge_real.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/array_merge_real.php
new file mode 100644
index 0000000..e2a1fbc
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/array_merge_real.php
@@ -0,0 +1,14 @@
+<?php
+
+function array_merge_real()
+{
+ $output = [];
+ foreach (func_get_args() as $array) {
+ foreach ($array as $key => $value) {
+ $output[$key] = isset($output[$key]) ?
+ array_merge($output[$key], $value) : $value;
+ }
+ }
+
+ return $output;
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/composer.json b/mailcow/src/mailcow-dockerized/data/web/inc/lib/composer.json
new file mode 100644
index 0000000..17caa43
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/composer.json
@@ -0,0 +1,13 @@
+{
+ "require": {
+ "robthree/twofactorauth": "^1.6",
+ "yubico/u2flib-server": "^1.0",
+ "phpmailer/phpmailer": "^6.1",
+ "php-mime-mail-parser/php-mime-mail-parser": "^5.0.5",
+ "soundasleep/html2text": "^0.5.0",
+ "ddeboer/imap": "^1.5",
+ "matthiasmullie/minify": "^1.3",
+ "bshaffer/oauth2-server-php": "^1.11",
+ "mustangostang/spyc": "^0.6.3"
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/composer.lock b/mailcow/src/mailcow-dockerized/data/web/inc/lib/composer.lock
new file mode 100644
index 0000000..2c61844
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/composer.lock
@@ -0,0 +1,629 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "58d5d30b266f8b8015d7937e1a35ac5d",
+ "packages": [
+ {
+ "name": "bshaffer/oauth2-server-php",
+ "version": "v1.11.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/bshaffer/oauth2-server-php.git",
+ "reference": "5a0c8000d4763b276919e2106f54eddda6bc50fa"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/bshaffer/oauth2-server-php/zipball/5a0c8000d4763b276919e2106f54eddda6bc50fa",
+ "reference": "5a0c8000d4763b276919e2106f54eddda6bc50fa",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.9"
+ },
+ "require-dev": {
+ "aws/aws-sdk-php": "~2.8",
+ "firebase/php-jwt": "~2.2",
+ "mongodb/mongodb": "^1.1",
+ "phpunit/phpunit": "^4.0",
+ "predis/predis": "dev-master",
+ "thobbs/phpcassa": "dev-master"
+ },
+ "suggest": {
+ "aws/aws-sdk-php": "~2.8 is required to use DynamoDB storage",
+ "firebase/php-jwt": "~2.2 is required to use JWT features",
+ "mongodb/mongodb": "^1.1 is required to use MongoDB storage",
+ "predis/predis": "Required to use Redis storage",
+ "thobbs/phpcassa": "Required to use Cassandra storage"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "OAuth2": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Brent Shaffer",
+ "email": "bshafs@gmail.com",
+ "homepage": "http://brentertainment.com"
+ }
+ ],
+ "description": "OAuth2 Server for PHP",
+ "homepage": "http://github.com/bshaffer/oauth2-server-php",
+ "keywords": [
+ "auth",
+ "oauth",
+ "oauth2"
+ ],
+ "time": "2018-12-04T00:29:32+00:00"
+ },
+ {
+ "name": "ddeboer/imap",
+ "version": "1.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ddeboer/imap.git",
+ "reference": "fc09dbf6fb9ba7317a95c719e45893efc4fe6bde"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ddeboer/imap/zipball/fc09dbf6fb9ba7317a95c719e45893efc4fe6bde",
+ "reference": "fc09dbf6fb9ba7317a95c719e45893efc4fe6bde",
+ "shasum": ""
+ },
+ "require": {
+ "ext-iconv": "*",
+ "ext-imap": "*",
+ "ext-mbstring": "*",
+ "php": "^7.2"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^2.16",
+ "phpstan/phpstan": "^0.12",
+ "phpstan/phpstan-phpunit": "^0.12",
+ "phpstan/phpstan-strict-rules": "^0.12",
+ "phpunit/phpunit": "^8.5",
+ "zendframework/zend-mail": "^2.10"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Ddeboer\\Imap\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "David de Boer",
+ "email": "david@ddeboer.nl"
+ },
+ {
+ "name": "Filippo Tessarotto",
+ "email": "zoeslam@gmail.com"
+ },
+ {
+ "name": "Community contributors",
+ "homepage": "https://github.com/ddeboer/imap/graphs/contributors"
+ }
+ ],
+ "description": "Object-oriented IMAP for PHP",
+ "keywords": [
+ "email",
+ "imap",
+ "mail"
+ ],
+ "time": "2020-01-24T08:15:24+00:00"
+ },
+ {
+ "name": "matthiasmullie/minify",
+ "version": "1.3.63",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/matthiasmullie/minify.git",
+ "reference": "9ba1b459828adc13430f4dd6c49dae4950dc4117"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/matthiasmullie/minify/zipball/9ba1b459828adc13430f4dd6c49dae4950dc4117",
+ "reference": "9ba1b459828adc13430f4dd6c49dae4950dc4117",
+ "shasum": ""
+ },
+ "require": {
+ "ext-pcre": "*",
+ "matthiasmullie/path-converter": "~1.1",
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "~2.0",
+ "matthiasmullie/scrapbook": "~1.0",
+ "phpunit/phpunit": "~4.8"
+ },
+ "suggest": {
+ "psr/cache-implementation": "Cache implementation to use with Minify::cache"
+ },
+ "bin": [
+ "bin/minifycss",
+ "bin/minifyjs"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "MatthiasMullie\\Minify\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Matthias Mullie",
+ "email": "minify@mullie.eu",
+ "homepage": "http://www.mullie.eu",
+ "role": "Developer"
+ }
+ ],
+ "description": "CSS & JavaScript minifier, in PHP. Removes whitespace, strips comments, combines files (incl. @import statements and small assets in CSS files), and optimizes/shortens a few common programming patterns.",
+ "homepage": "http://www.minifier.org",
+ "keywords": [
+ "JS",
+ "css",
+ "javascript",
+ "minifier",
+ "minify"
+ ],
+ "time": "2020-01-21T20:21:08+00:00"
+ },
+ {
+ "name": "matthiasmullie/path-converter",
+ "version": "1.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/matthiasmullie/path-converter.git",
+ "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/matthiasmullie/path-converter/zipball/e7d13b2c7e2f2268e1424aaed02085518afa02d9",
+ "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9",
+ "shasum": ""
+ },
+ "require": {
+ "ext-pcre": "*",
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.8"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "MatthiasMullie\\PathConverter\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Matthias Mullie",
+ "email": "pathconverter@mullie.eu",
+ "homepage": "http://www.mullie.eu",
+ "role": "Developer"
+ }
+ ],
+ "description": "Relative path converter",
+ "homepage": "http://github.com/matthiasmullie/path-converter",
+ "keywords": [
+ "converter",
+ "path",
+ "paths",
+ "relative"
+ ],
+ "time": "2019-02-05T23:41:09+00:00"
+ },
+ {
+ "name": "mustangostang/spyc",
+ "version": "0.6.3",
+ "source": {
+ "type": "git",
+ "url": "git@github.com:mustangostang/spyc.git",
+ "reference": "4627c838b16550b666d15aeae1e5289dd5b77da0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/mustangostang/spyc/zipball/4627c838b16550b666d15aeae1e5289dd5b77da0",
+ "reference": "4627c838b16550b666d15aeae1e5289dd5b77da0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.3.*@dev"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "0.5.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "Spyc.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "mustangostang",
+ "email": "vlad.andersen@gmail.com"
+ }
+ ],
+ "description": "A simple YAML loader/dumper class for PHP",
+ "homepage": "https://github.com/mustangostang/spyc/",
+ "keywords": [
+ "spyc",
+ "yaml",
+ "yml"
+ ],
+ "time": "2019-09-10T13:16:29+00:00"
+ },
+ {
+ "name": "paragonie/random_compat",
+ "version": "v9.99.99",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/paragonie/random_compat.git",
+ "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
+ "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.*|5.*",
+ "vimeo/psalm": "^1"
+ },
+ "suggest": {
+ "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
+ },
+ "type": "library",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Paragon Initiative Enterprises",
+ "email": "security@paragonie.com",
+ "homepage": "https://paragonie.com"
+ }
+ ],
+ "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
+ "keywords": [
+ "csprng",
+ "polyfill",
+ "pseudorandom",
+ "random"
+ ],
+ "time": "2018-07-02T15:55:56+00:00"
+ },
+ {
+ "name": "php-mime-mail-parser/php-mime-mail-parser",
+ "version": "5.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-mime-mail-parser/php-mime-mail-parser.git",
+ "reference": "27983433aabeccee832573c3c56e6a4855e57745"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-mime-mail-parser/php-mime-mail-parser/zipball/27983433aabeccee832573c3c56e6a4855e57745",
+ "reference": "27983433aabeccee832573c3c56e6a4855e57745",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mailparse": "*",
+ "php": "^7.1"
+ },
+ "replace": {
+ "exorus/php-mime-mail-parser": "*",
+ "messaged/php-mime-mail-parser": "*"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.1",
+ "phpunit/php-token-stream": "^3.0",
+ "phpunit/phpunit": "^7.0",
+ "squizlabs/php_codesniffer": "^3.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "PhpMimeMailParser\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "eXorus",
+ "email": "exorus.spam@gmail.com",
+ "homepage": "https://github.com/eXorus/",
+ "role": "Developer"
+ },
+ {
+ "name": "M.Valinskis",
+ "email": "M.Valins@gmail.com",
+ "homepage": "https://code.google.com/p/php-mime-mail-parser",
+ "role": "Developer"
+ },
+ {
+ "name": "eugene.emmett.wood",
+ "email": "gene_w@cementhorizon.com",
+ "homepage": "https://code.google.com/p/php-mime-mail-parser",
+ "role": "Developer"
+ },
+ {
+ "name": "alknetso",
+ "email": "alkne@gmail.com",
+ "homepage": "https://code.google.com/p/php-mime-mail-parser",
+ "role": "Developer"
+ },
+ {
+ "name": "bucabay",
+ "email": "gabe@fijiwebdesign.com",
+ "homepage": "http://www.fijiwebdesign.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "A fully tested email parser for PHP 7.1+ (mailparse extension wrapper).",
+ "homepage": "https://github.com/php-mime-mail-parser/php-mime-mail-parser",
+ "keywords": [
+ "MimeMailParser",
+ "mail",
+ "mailparse",
+ "mime",
+ "parser",
+ "php"
+ ],
+ "time": "2019-09-23T11:57:58+00:00"
+ },
+ {
+ "name": "phpmailer/phpmailer",
+ "version": "v6.1.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHPMailer/PHPMailer.git",
+ "reference": "c2796cb1cb99d7717290b48c4e6f32cb6c60b7b3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/c2796cb1cb99d7717290b48c4e6f32cb6c60b7b3",
+ "reference": "c2796cb1cb99d7717290b48c4e6f32cb6c60b7b3",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "ext-filter": "*",
+ "php": ">=5.5.0"
+ },
+ "require-dev": {
+ "doctrine/annotations": "^1.2",
+ "friendsofphp/php-cs-fixer": "^2.2",
+ "phpunit/phpunit": "^4.8 || ^5.7"
+ },
+ "suggest": {
+ "ext-mbstring": "Needed to send email in multibyte encoding charset",
+ "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
+ "league/oauth2-google": "Needed for Google XOAUTH2 authentication",
+ "psr/log": "For optional PSR-3 debug logging",
+ "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication",
+ "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "PHPMailer\\PHPMailer\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-2.1-only"
+ ],
+ "authors": [
+ {
+ "name": "Marcus Bointon",
+ "email": "phpmailer@synchromedia.co.uk"
+ },
+ {
+ "name": "Jim Jagielski",
+ "email": "jimjag@gmail.com"
+ },
+ {
+ "name": "Andy Prevost",
+ "email": "codeworxtech@users.sourceforge.net"
+ },
+ {
+ "name": "Brent R. Matzelle"
+ }
+ ],
+ "description": "PHPMailer is a full-featured email creation and transfer class for PHP",
+ "funding": [
+ {
+ "url": "https://github.com/synchro",
+ "type": "github"
+ }
+ ],
+ "time": "2020-05-27T12:24:03+00:00"
+ },
+ {
+ "name": "robthree/twofactorauth",
+ "version": "1.7.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/RobThree/TwoFactorAuth.git",
+ "reference": "37983bf675c5baca09d19d6705170489d0df0002"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/RobThree/TwoFactorAuth/zipball/37983bf675c5baca09d19d6705170489d0df0002",
+ "reference": "37983bf675c5baca09d19d6705170489d0df0002",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "@stable"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "RobThree\\Auth\\": "lib"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Rob Janssen",
+ "homepage": "http://robiii.me",
+ "role": "Developer"
+ }
+ ],
+ "description": "Two Factor Authentication",
+ "homepage": "https://github.com/RobThree/TwoFactorAuth",
+ "keywords": [
+ "Authentication",
+ "MFA",
+ "Multi Factor Authentication",
+ "Two Factor Authentication",
+ "authenticator",
+ "authy",
+ "php",
+ "tfa"
+ ],
+ "time": "2020-01-02T19:56:46+00:00"
+ },
+ {
+ "name": "soundasleep/html2text",
+ "version": "0.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/soundasleep/html2text.git",
+ "reference": "cdb89f6ffa2c4cc78f8ed9ea6ee0594a9133ccad"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/soundasleep/html2text/zipball/cdb89f6ffa2c4cc78f8ed9ea6ee0594a9133ccad",
+ "reference": "cdb89f6ffa2c4cc78f8ed9ea6ee0594a9133ccad",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": ">=4.0",
+ "soundasleep/component-tests": "dev-master"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Html2Text\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "EPL-1.0"
+ ],
+ "authors": [
+ {
+ "name": "Jevon Wright",
+ "homepage": "https://jevon.org",
+ "role": "Developer"
+ }
+ ],
+ "description": "A PHP script to convert HTML into a plain text format",
+ "homepage": "https://github.com/soundasleep/html2text",
+ "keywords": [
+ "email",
+ "html",
+ "php",
+ "text"
+ ],
+ "time": "2017-04-19T22:01:50+00:00"
+ },
+ {
+ "name": "yubico/u2flib-server",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Yubico/php-u2flib-server.git",
+ "reference": "55d813acf68212ad2cadecde07551600d6971939"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Yubico/php-u2flib-server/zipball/55d813acf68212ad2cadecde07551600d6971939",
+ "reference": "55d813acf68212ad2cadecde07551600d6971939",
+ "shasum": ""
+ },
+ "require": {
+ "ext-openssl": "*",
+ "paragonie/random_compat": ">= 1",
+ "php": ">=5.6"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~5.7",
+ "vimeo/psalm": "^0|^1|^2"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "description": "Library for U2F implementation",
+ "homepage": "https://developers.yubico.com/php-u2flib-server",
+ "time": "2018-09-07T08:16:44+00:00"
+ }
+ ],
+ "packages-dev": [],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": [],
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": [],
+ "platform-dev": [],
+ "plugin-api-version": "1.1.0"
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveDumpable.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveDumpable.php
new file mode 100644
index 0000000..af82d6a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveDumpable.php
@@ -0,0 +1,7 @@
+<?php namespace Sieve;
+
+interface SieveDumpable
+{
+ function dump();
+ function text();
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveException.php
new file mode 100644
index 0000000..da7fe60
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveException.php
@@ -0,0 +1,47 @@
+<?php namespace Sieve;
+
+require_once('SieveToken.php');
+
+use Exception;
+
+class SieveException extends Exception
+{
+ protected $token_;
+
+ public function __construct(SieveToken $token, $arg)
+ {
+ $message = 'undefined sieve exception';
+ $this->token_ = $token;
+
+ if (is_string($arg))
+ {
+ $message = $arg;
+ }
+ else
+ {
+ if (is_array($arg))
+ {
+ $type = SieveToken::typeString(array_shift($arg));
+ foreach($arg as $t)
+ {
+ $type .= ' or '. SieveToken::typeString($t);
+ }
+ }
+ else
+ {
+ $type = SieveToken::typeString($arg);
+ }
+
+ $tokenType = SieveToken::typeString($token->type);
+ $message = "$tokenType where $type expected near ". $token->text;
+ }
+
+ parent::__construct('line '. $token->line .": $message");
+ }
+
+ public function getLineNo()
+ {
+ return $this->token_->line;
+ }
+
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveKeywordRegistry.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveKeywordRegistry.php
new file mode 100644
index 0000000..b901dbc
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveKeywordRegistry.php
@@ -0,0 +1,233 @@
+<?php namespace Sieve;
+
+class SieveKeywordRegistry
+{
+ protected $registry_ = array();
+ protected $matchTypes_ = array();
+ protected $comparators_ = array();
+ protected $addressParts_ = array();
+ protected $commands_ = array();
+ protected $tests_ = array();
+ protected $arguments_ = array();
+
+ protected static $refcount = 0;
+ protected static $instance = null;
+
+ protected function __construct()
+ {
+ $keywords = simplexml_load_file(dirname(__FILE__) .'/keywords.xml');
+ foreach ($keywords->children() as $keyword)
+ {
+ switch ($keyword->getName())
+ {
+ case 'matchtype':
+ $type =& $this->matchTypes_;
+ break;
+ case 'comparator':
+ $type =& $this->comparators_;
+ break;
+ case 'addresspart':
+ $type =& $this->addressParts_;
+ break;
+ case 'test':
+ $type =& $this->tests_;
+ break;
+ case 'command':
+ $type =& $this->commands_;
+ break;
+ default:
+ trigger_error('Unsupported keyword type "'. $keyword->getName()
+ . '" in file "keywords/'. basename($file) .'"');
+ return;
+ }
+
+ $name = (string) $keyword['name'];
+ if (array_key_exists($name, $type))
+ trigger_error("redefinition of $type $name - skipping");
+ else
+ $type[$name] = $keyword->children();
+ }
+
+ foreach (glob(dirname(__FILE__) .'/extensions/*.xml') as $file)
+ {
+ $extension = simplexml_load_file($file);
+ $name = (string) $extension['name'];
+
+ if (array_key_exists($name, $this->registry_))
+ {
+ trigger_error('overwriting extension "'. $name .'"');
+ }
+ $this->registry_[$name] = $extension;
+ }
+ }
+
+ public static function get()
+ {
+ if (self::$instance == null)
+ {
+ self::$instance = new SieveKeywordRegistry();
+ }
+
+ self::$refcount++;
+
+ return self::$instance;
+ }
+
+ public function put()
+ {
+ if (--self::$refcount == 0)
+ {
+ self::$instance = null;
+ }
+ }
+
+ public function activate($extension)
+ {
+ if (!isset($this->registry_[$extension]))
+ {
+ return;
+ }
+
+ $xml = $this->registry_[$extension];
+
+ foreach ($xml->children() as $e)
+ {
+ switch ($e->getName())
+ {
+ case 'matchtype':
+ $type =& $this->matchTypes_;
+ break;
+ case 'comparator':
+ $type =& $this->comparators_;
+ break;
+ case 'addresspart':
+ $type =& $this->addressParts_;
+ break;
+ case 'test':
+ $type =& $this->tests_;
+ break;
+ case 'command':
+ $type =& $this->commands_;
+ break;
+ case 'tagged-argument':
+ $xml = $e->parameter[0];
+ $this->arguments_[(string) $xml['name']] = array(
+ 'extends' => (string) $e['extends'],
+ 'rules' => $xml
+ );
+ continue;
+ default:
+ trigger_error('Unsupported extension type \''.
+ $e->getName() ."' in extension '$extension'");
+ return;
+ }
+
+ $name = (string) $e['name'];
+ if (!isset($type[$name]) ||
+ (string) $e['overrides'] == 'true')
+ {
+ $type[$name] = $e->children();
+ }
+ }
+ }
+
+ public function isTest($name)
+ {
+ return (isset($this->tests_[$name]) ? true : false);
+ }
+
+ public function isCommand($name)
+ {
+ return (isset($this->commands_[$name]) ? true : false);
+ }
+
+ public function matchtype($name)
+ {
+ if (isset($this->matchTypes_[$name]))
+ {
+ return $this->matchTypes_[$name];
+ }
+ return null;
+ }
+
+ public function addresspart($name)
+ {
+ if (isset($this->addressParts_[$name]))
+ {
+ return $this->addressParts_[$name];
+ }
+ return null;
+ }
+
+ public function comparator($name)
+ {
+ if (isset($this->comparators_[$name]))
+ {
+ return $this->comparators_[$name];
+ }
+ return null;
+ }
+
+ public function test($name)
+ {
+ if (isset($this->tests_[$name]))
+ {
+ return $this->tests_[$name];
+ }
+ return null;
+ }
+
+ public function command($name)
+ {
+ if (isset($this->commands_[$name]))
+ {
+ return $this->commands_[$name];
+ }
+ return null;
+ }
+
+ public function arguments($command)
+ {
+ $res = array();
+ foreach ($this->arguments_ as $arg)
+ {
+ if (preg_match('/'.$arg['extends'].'/', $command))
+ array_push($res, $arg['rules']);
+ }
+ return $res;
+ }
+
+ public function argument($name)
+ {
+ if (isset($this->arguments_[$name]))
+ {
+ return $this->arguments_[$name]['rules'];
+ }
+ return null;
+ }
+
+ public function requireStrings()
+ {
+ return array_keys($this->registry_);
+ }
+ public function matchTypes()
+ {
+ return array_keys($this->matchTypes_);
+ }
+ public function comparators()
+ {
+ return array_keys($this->comparators_);
+ }
+ public function addressParts()
+ {
+ return array_keys($this->addressParts_);
+ }
+ public function tests()
+ {
+ return array_keys($this->tests_);
+ }
+ public function commands()
+ {
+ return array_keys($this->commands_);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveParser.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveParser.php
new file mode 100644
index 0000000..3d81c14
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveParser.php
@@ -0,0 +1,255 @@
+<?php namespace Sieve;
+
+include_once 'SieveTree.php';
+include_once 'SieveScanner.php';
+include_once 'SieveSemantics.php';
+include_once 'SieveException.php';
+
+class SieveParser
+{
+ protected $scanner_;
+ protected $script_;
+ protected $tree_;
+ protected $status_;
+
+ public function __construct($script = null)
+ {
+ if (isset($script))
+ $this->parse($script);
+ }
+
+ public function GetParseTree()
+ {
+ return $this->tree_;
+ }
+
+ public function dumpParseTree()
+ {
+ return $this->tree_->dump();
+ }
+
+ public function getScriptText()
+ {
+ return $this->tree_->getText();
+ }
+
+ protected function getPrevToken_($parent_id)
+ {
+ $childs = $this->tree_->getChilds($parent_id);
+
+ for ($i = count($childs); $i > 0; --$i)
+ {
+ $prev = $this->tree_->getNode($childs[$i-1]);
+ if ($prev->is(SieveToken::Comment|SieveToken::Whitespace))
+ continue;
+
+ // use command owning a block or list instead of previous
+ if ($prev->is(SieveToken::BlockStart|SieveToken::Comma|SieveToken::LeftParenthesis))
+ $prev = $this->tree_->getNode($parent_id);
+
+ return $prev;
+ }
+
+ return $this->tree_->getNode($parent_id);
+ }
+
+ /*******************************************************************************
+ * methods for recursive descent start below
+ */
+ public function passthroughWhitespaceComment($token)
+ {
+ return 0;
+ }
+
+ public function passthroughFunction($token)
+ {
+ $this->tree_->addChild($token);
+ }
+
+ public function parse($script)
+ {
+ $this->script_ = $script;
+
+ $this->scanner_ = new SieveScanner($this->script_);
+
+ // Define what happens with passthrough tokens like whitespacs and comments
+ $this->scanner_->setPassthroughFunc(
+ array(
+ $this, 'passthroughWhitespaceComment'
+ )
+ );
+
+ $this->tree_ = new SieveTree('tree');
+
+ $this->commands_($this->tree_->getRoot());
+
+ if (!$this->scanner_->nextTokenIs(SieveToken::ScriptEnd)) {
+ $token = $this->scanner_->nextToken();
+ throw new SieveException($token, SieveToken::ScriptEnd);
+ }
+ }
+
+ protected function commands_($parent_id)
+ {
+ while (true)
+ {
+ if (!$this->scanner_->nextTokenIs(SieveToken::Identifier))
+ break;
+
+ // Get and check a command token
+ $token = $this->scanner_->nextToken();
+ $semantics = new SieveSemantics($token, $this->getPrevToken_($parent_id));
+
+ // Process eventual arguments
+ $this_node = $this->tree_->addChildTo($parent_id, $token);
+ $this->arguments_($this_node, $semantics);
+
+ $token = $this->scanner_->nextToken();
+ if (!$token->is(SieveToken::Semicolon))
+ {
+ // TODO: check if/when semcheck is needed here
+ $semantics->validateToken($token);
+
+ if ($token->is(SieveToken::BlockStart))
+ {
+ $this->tree_->addChildTo($this_node, $token);
+ $this->block_($this_node, $semantics);
+ continue;
+ }
+
+ throw new SieveException($token, SieveToken::Semicolon);
+ }
+
+ $semantics->done($token);
+ $this->tree_->addChildTo($this_node, $token);
+ }
+ }
+
+ protected function arguments_($parent_id, &$semantics)
+ {
+ while (true)
+ {
+ if ($this->scanner_->nextTokenIs(SieveToken::Number|SieveToken::Tag))
+ {
+ // Check if semantics allow a number or tag
+ $token = $this->scanner_->nextToken();
+ $semantics->validateToken($token);
+ $this->tree_->addChildTo($parent_id, $token);
+ }
+ else if ($this->scanner_->nextTokenIs(SieveToken::StringList))
+ {
+ $this->stringlist_($parent_id, $semantics);
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ if ($this->scanner_->nextTokenIs(SieveToken::TestList))
+ {
+ $this->testlist_($parent_id, $semantics);
+ }
+ }
+
+ protected function stringlist_($parent_id, &$semantics)
+ {
+ if (!$this->scanner_->nextTokenIs(SieveToken::LeftBracket))
+ {
+ $this->string_($parent_id, $semantics);
+ return;
+ }
+
+ $token = $this->scanner_->nextToken();
+ $semantics->startStringList($token);
+ $this->tree_->addChildTo($parent_id, $token);
+
+ if($this->scanner_->nextTokenIs(SieveToken::RightBracket)) {
+ //allow empty lists
+ $token = $this->scanner_->nextToken();
+ $this->tree_->addChildTo($parent_id, $token);
+ $semantics->endStringList();
+ return;
+ }
+
+ do
+ {
+ $this->string_($parent_id, $semantics);
+ $token = $this->scanner_->nextToken();
+
+ if (!$token->is(SieveToken::Comma|SieveToken::RightBracket))
+ throw new SieveException($token, array(SieveToken::Comma, SieveToken::RightBracket));
+
+ if ($token->is(SieveToken::Comma))
+ $semantics->continueStringList();
+
+ $this->tree_->addChildTo($parent_id, $token);
+ }
+ while (!$token->is(SieveToken::RightBracket));
+
+ $semantics->endStringList();
+ }
+
+ protected function string_($parent_id, &$semantics)
+ {
+ $token = $this->scanner_->nextToken();
+ $semantics->validateToken($token);
+ $this->tree_->addChildTo($parent_id, $token);
+ }
+
+ protected function testlist_($parent_id, &$semantics)
+ {
+ if (!$this->scanner_->nextTokenIs(SieveToken::LeftParenthesis))
+ {
+ $this->test_($parent_id, $semantics);
+ return;
+ }
+
+ $token = $this->scanner_->nextToken();
+ $semantics->validateToken($token);
+ $this->tree_->addChildTo($parent_id, $token);
+
+ do
+ {
+ $this->test_($parent_id, $semantics);
+
+ $token = $this->scanner_->nextToken();
+ if (!$token->is(SieveToken::Comma|SieveToken::RightParenthesis))
+ {
+ throw new SieveException($token, array(SieveToken::Comma, SieveToken::RightParenthesis));
+ }
+ $this->tree_->addChildTo($parent_id, $token);
+ }
+ while (!$token->is(SieveToken::RightParenthesis));
+ }
+
+ protected function test_($parent_id, &$semantics)
+ {
+ // Check if semantics allow an identifier
+ $token = $this->scanner_->nextToken();
+ $semantics->validateToken($token);
+
+ // Get semantics for this test command
+ $this_semantics = new SieveSemantics($token, $this->getPrevToken_($parent_id));
+ $this_node = $this->tree_->addChildTo($parent_id, $token);
+
+ // Consume eventual argument tokens
+ $this->arguments_($this_node, $this_semantics);
+
+ // Check that all required arguments were there
+ $token = $this->scanner_->peekNextToken();
+ $this_semantics->done($token);
+ }
+
+ protected function block_($parent_id, &$semantics)
+ {
+ $this->commands_($parent_id, $semantics);
+
+ $token = $this->scanner_->nextToken();
+ if (!$token->is(SieveToken::BlockEnd))
+ {
+ throw new SieveException($token, SieveToken::BlockEnd);
+ }
+ $this->tree_->addChildTo($parent_id, $token);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveScanner.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveScanner.php
new file mode 100644
index 0000000..a0fa57a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveScanner.php
@@ -0,0 +1,145 @@
+<?php namespace Sieve;
+
+include_once('SieveToken.php');
+
+class SieveScanner
+{
+ public function __construct(&$script)
+ {
+ if ($script === null)
+ return;
+
+ $this->tokenize($script);
+ }
+
+ public function setPassthroughFunc($callback)
+ {
+ if ($callback == null || is_callable($callback))
+ $this->ptFn_ = $callback;
+ }
+
+ public function tokenize(&$script)
+ {
+ $pos = 0;
+ $line = 1;
+
+ $scriptLength = mb_strlen($script);
+
+ $unprocessedScript = $script;
+
+
+ //create one regex to find the right match
+ //avoids looping over all possible tokens: increases performance
+ $nameToType = [];
+ $regex = [];
+ // chr(65) == 'A'
+ $i = 65;
+
+ foreach ($this->tokenMatch_ as $type => $subregex) {
+ $nameToType[chr($i)] = $type;
+ $regex[] = "(?P<". chr($i) . ">^$subregex)";
+ $i++;
+ }
+
+ $regex = '/' . join('|', $regex) . '/';
+
+ while ($pos < $scriptLength)
+ {
+ if (preg_match($regex, $unprocessedScript, $match)) {
+
+ // only keep the group that match and we only want matches with group names
+ // we can use the group name to find the token type using nameToType
+ $filterMatch = array_filter(array_filter($match), 'is_string', ARRAY_FILTER_USE_KEY);
+
+ // the first element in filterMatch will contain the matched group and the key will be the name
+ $type = $nameToType[key($filterMatch)];
+ $currentMatch = current($filterMatch);
+
+ //create the token
+ $token = new SieveToken($type, $currentMatch, $line);
+ $this->tokens_[] = $token;
+
+ if ($type == SieveToken::Unknown)
+ return;
+
+ // just remove the part that we parsed: don't extract the new substring using script length
+ // as mb_strlen is \theta(pos) (it's linear in the position)
+ $matchLength = mb_strlen($currentMatch);
+ $unprocessedScript = mb_substr($unprocessedScript, $matchLength);
+
+ $pos += $matchLength;
+ $line += mb_substr_count($currentMatch, "\n");
+ } else {
+ $this->tokens_[] = new SieveToken(SieveToken::Unknown, '', $line);
+ return;
+ }
+
+ }
+
+ $this->tokens_[] = new SieveToken(SieveToken::ScriptEnd, '', $line);
+ }
+
+ public function nextTokenIs($type)
+ {
+ return $this->peekNextToken()->is($type);
+ }
+
+ public function peekNextToken()
+ {
+ $offset = 0;
+ do {
+ $next = $this->tokens_[$this->tokenPos_ + $offset++];
+ } while ($next->is(SieveToken::Comment|SieveToken::Whitespace));
+
+ return $next;
+ }
+
+ public function nextToken()
+ {
+ $token = $this->tokens_[$this->tokenPos_++];
+
+ while ($token->is(SieveToken::Comment|SieveToken::Whitespace))
+ {
+ if ($this->ptFn_ != null)
+ call_user_func($this->ptFn_, $token);
+
+ $token = $this->tokens_[$this->tokenPos_++];
+ }
+
+ return $token;
+ }
+
+ protected $ptFn_ = null;
+ protected $tokenPos_ = 0;
+ protected $tokens_ = array();
+ protected $tokenMatch_ = array (
+ SieveToken::LeftBracket => '\[',
+ SieveToken::RightBracket => '\]',
+ SieveToken::BlockStart => '\{',
+ SieveToken::BlockEnd => '\}',
+ SieveToken::LeftParenthesis => '\(',
+ SieveToken::RightParenthesis => '\)',
+ SieveToken::Comma => ',',
+ SieveToken::Semicolon => ';',
+ SieveToken::Whitespace => '[ \r\n\t]+',
+ SieveToken::Tag => ':[[:alpha:]_][[:alnum:]_]*(?=\b)',
+ /*
+ " # match a quotation mark
+ ( # start matching parts that include an escaped quotation mark
+ ([^"]*[^"\\\\]) # match a string without quotation marks and not ending with a backlash
+ ? # this also includes the empty string
+ (\\\\\\\\)* # match any groups of even number of backslashes
+ # (thus the character after these groups are not escaped)
+ \\\\" # match an escaped quotation mark
+ )* # accept any number of strings that end with an escaped quotation mark
+ [^"]* # accept any trailing part that does not contain any quotation marks
+ " # end of the quoted string
+ */
+ SieveToken::QuotedString => '"(([^"]*[^"\\\\])?(\\\\\\\\)*\\\\")*[^"]*"',
+ SieveToken::Number => '[[:digit:]]+(?:[KMG])?(?=\b)',
+ SieveToken::Comment => '(?:\/\*(?:[^\*]|\*(?=[^\/]))*\*\/|#[^\r\n]*\r?(\n|$))',
+ SieveToken::MultilineString => 'text:[ \t]*(?:#[^\r\n]*)?\r?\n(\.[^\r\n]+\r?\n|[^\.][^\r\n]*\r?\n)*\.\r?(\n|$)',
+ SieveToken::Identifier => '[[:alpha:]_][[:alnum:]_]*(?=\b)',
+ SieveToken::Unknown => '[^ \r\n\t]+'
+ );
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveScript.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveScript.php
new file mode 100644
index 0000000..befd99a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveScript.php
@@ -0,0 +1,6 @@
+<?php namespace Sieve;
+
+class SieveScript
+{
+ // TODO: implement
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveSemantics.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveSemantics.php
new file mode 100644
index 0000000..e131d5b
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveSemantics.php
@@ -0,0 +1,611 @@
+<?php namespace Sieve;
+
+require_once('SieveKeywordRegistry.php');
+require_once('SieveToken.php');
+require_once('SieveException.php');
+
+class SieveSemantics
+{
+ protected static $requiredExtensions_ = array();
+
+ protected $comparator_;
+ protected $matchType_;
+ protected $addressPart_;
+ protected $tags_ = array();
+ protected $arguments_;
+ protected $deps_ = array();
+ protected $followupToken_;
+
+ public function __construct($token, $prevToken)
+ {
+ $this->registry_ = SieveKeywordRegistry::get();
+ $command = strtolower($token->text);
+
+ // Check the registry for $command
+ if ($this->registry_->isCommand($command))
+ {
+ $xml = $this->registry_->command($command);
+ $this->arguments_ = $this->makeArguments_($xml);
+ $this->followupToken_ = SieveToken::Semicolon;
+ }
+ else if ($this->registry_->isTest($command))
+ {
+ $xml = $this->registry_->test($command);
+ $this->arguments_ = $this->makeArguments_($xml);
+ $this->followupToken_ = SieveToken::BlockStart;
+ }
+ else
+ {
+ throw new SieveException($token, 'unknown command '. $command);
+ }
+
+ // Check if command may appear at this position within the script
+ if ($this->registry_->isTest($command))
+ {
+ if (is_null($prevToken))
+ throw new SieveException($token, $command .' may not appear as first command');
+
+ if (!preg_match('/^(if|elsif|anyof|allof|not)$/i', $prevToken->text))
+ throw new SieveException($token, $command .' may not appear after '. $prevToken->text);
+ }
+ else if (isset($prevToken))
+ {
+ switch ($command)
+ {
+ case 'require':
+ $valid_after = 'require';
+ break;
+ case 'elsif':
+ case 'else':
+ $valid_after = '(if|elsif)';
+ break;
+ default:
+ $valid_after = $this->commandsRegex_();
+ }
+
+ if (!preg_match('/^'. $valid_after .'$/i', $prevToken->text))
+ throw new SieveException($token, $command .' may not appear after '. $prevToken->text);
+ }
+
+ // Check for extension arguments to add to the command
+ foreach ($this->registry_->arguments($command) as $arg)
+ {
+ switch ((string) $arg['type'])
+ {
+ case 'tag':
+ array_unshift($this->arguments_, array(
+ 'type' => SieveToken::Tag,
+ 'occurrence' => $this->occurrence_($arg),
+ 'regex' => $this->regex_($arg),
+ 'call' => 'tagHook_',
+ 'name' => $this->name_($arg),
+ 'subArgs' => $this->makeArguments_($arg->children())
+ ));
+ break;
+ }
+ }
+ }
+
+ public function __destruct()
+ {
+ $this->registry_->put();
+ }
+
+ // TODO: the *Regex functions could possibly also be static properties
+ protected function requireStringsRegex_()
+ {
+ return '('. implode('|', $this->registry_->requireStrings()) .')';
+ }
+
+ protected function matchTypeRegex_()
+ {
+ return '('. implode('|', $this->registry_->matchTypes()) .')';
+ }
+
+ protected function addressPartRegex_()
+ {
+ return '('. implode('|', $this->registry_->addressParts()) .')';
+ }
+
+ protected function commandsRegex_()
+ {
+ return '('. implode('|', $this->registry_->commands()) .')';
+ }
+
+ protected function testsRegex_()
+ {
+ return '('. implode('|', $this->registry_->tests()) .')';
+ }
+
+ protected function comparatorRegex_()
+ {
+ return '('. implode('|', $this->registry_->comparators()) .')';
+ }
+
+ protected function occurrence_($arg)
+ {
+ if (isset($arg['occurrence']))
+ {
+ switch ((string) $arg['occurrence'])
+ {
+ case 'optional':
+ return '?';
+ case 'any':
+ return '*';
+ case 'some':
+ return '+';
+ }
+ }
+ return '1';
+ }
+
+ protected function name_($arg)
+ {
+ if (isset($arg['name']))
+ {
+ return (string) $arg['name'];
+ }
+ return (string) $arg['type'];
+ }
+
+ protected function regex_($arg)
+ {
+ if (isset($arg['regex']))
+ {
+ return (string) $arg['regex'];
+ }
+ return '.*';
+ }
+
+ protected function case_($arg)
+ {
+ if (isset($arg['case']))
+ {
+ return (string) $arg['case'];
+ }
+ return 'adhere';
+ }
+
+ protected function follows_($arg)
+ {
+ if (isset($arg['follows']))
+ {
+ return (string) $arg['follows'];
+ }
+ return '.*';
+ }
+
+ protected function makeValue_($arg)
+ {
+ if (isset($arg->value))
+ {
+ $res = $this->makeArguments_($arg->value);
+ return array_shift($res);
+ }
+ return null;
+ }
+
+ /**
+ * Convert an extension (test) commands parameters from XML to
+ * a PHP array the {@see Semantics} class understands.
+ * @param array(SimpleXMLElement) $parameters
+ * @return array
+ */
+ protected function makeArguments_($parameters)
+ {
+ $arguments = array();
+
+ foreach ($parameters as $arg)
+ {
+ // Ignore anything not a <parameter>
+ if ($arg->getName() != 'parameter')
+ continue;
+
+ switch ((string) $arg['type'])
+ {
+ case 'addresspart':
+ array_push($arguments, array(
+ 'type' => SieveToken::Tag,
+ 'occurrence' => $this->occurrence_($arg),
+ 'regex' => $this->addressPartRegex_(),
+ 'call' => 'addressPartHook_',
+ 'name' => 'address part',
+ 'subArgs' => $this->makeArguments_($arg)
+ ));
+ break;
+
+ case 'block':
+ array_push($arguments, array(
+ 'type' => SieveToken::BlockStart,
+ 'occurrence' => '1',
+ 'regex' => '{',
+ 'name' => 'block',
+ 'subArgs' => $this->makeArguments_($arg)
+ ));
+ break;
+
+ case 'comparator':
+ array_push($arguments, array(
+ 'type' => SieveToken::Tag,
+ 'occurrence' => $this->occurrence_($arg),
+ 'regex' => 'comparator',
+ 'name' => 'comparator',
+ 'subArgs' => array( array(
+ 'type' => SieveToken::String,
+ 'occurrence' => '1',
+ 'call' => 'comparatorHook_',
+ 'case' => 'adhere',
+ 'regex' => $this->comparatorRegex_(),
+ 'name' => 'comparator string',
+ 'follows' => 'comparator'
+ ))
+ ));
+ break;
+
+ case 'matchtype':
+ array_push($arguments, array(
+ 'type' => SieveToken::Tag,
+ 'occurrence' => $this->occurrence_($arg),
+ 'regex' => $this->matchTypeRegex_(),
+ 'call' => 'matchTypeHook_',
+ 'name' => 'match type',
+ 'subArgs' => $this->makeArguments_($arg)
+ ));
+ break;
+
+ case 'number':
+ array_push($arguments, array(
+ 'type' => SieveToken::Number,
+ 'occurrence' => $this->occurrence_($arg),
+ 'regex' => $this->regex_($arg),
+ 'name' => $this->name_($arg),
+ 'follows' => $this->follows_($arg)
+ ));
+ break;
+
+ case 'requirestrings':
+ array_push($arguments, array(
+ 'type' => SieveToken::StringList,
+ 'occurrence' => $this->occurrence_($arg),
+ 'call' => 'setRequire_',
+ 'case' => 'adhere',
+ 'regex' => $this->requireStringsRegex_(),
+ 'name' => $this->name_($arg)
+ ));
+ break;
+
+ case 'string':
+ array_push($arguments, array(
+ 'type' => SieveToken::String,
+ 'occurrence' => $this->occurrence_($arg),
+ 'regex' => $this->regex_($arg),
+ 'case' => $this->case_($arg),
+ 'name' => $this->name_($arg),
+ 'follows' => $this->follows_($arg)
+ ));
+ break;
+
+ case 'stringlist':
+ array_push($arguments, array(
+ 'type' => SieveToken::StringList,
+ 'occurrence' => $this->occurrence_($arg),
+ 'regex' => $this->regex_($arg),
+ 'case' => $this->case_($arg),
+ 'name' => $this->name_($arg),
+ 'follows' => $this->follows_($arg)
+ ));
+ break;
+
+ case 'tag':
+ array_push($arguments, array(
+ 'type' => SieveToken::Tag,
+ 'occurrence' => $this->occurrence_($arg),
+ 'regex' => $this->regex_($arg),
+ 'call' => 'tagHook_',
+ 'name' => $this->name_($arg),
+ 'subArgs' => $this->makeArguments_($arg->children()),
+ 'follows' => $this->follows_($arg)
+ ));
+ break;
+
+ case 'test':
+ array_push($arguments, array(
+ 'type' => SieveToken::Identifier,
+ 'occurrence' => $this->occurrence_($arg),
+ 'regex' => $this->testsRegex_(),
+ 'name' => $this->name_($arg),
+ 'subArgs' => $this->makeArguments_($arg->children())
+ ));
+ break;
+
+ case 'testlist':
+ array_push($arguments, array(
+ 'type' => SieveToken::LeftParenthesis,
+ 'occurrence' => '1',
+ 'regex' => '\(',
+ 'name' => $this->name_($arg),
+ 'subArgs' => null
+ ));
+ array_push($arguments, array(
+ 'type' => SieveToken::Identifier,
+ 'occurrence' => '+',
+ 'regex' => $this->testsRegex_(),
+ 'name' => $this->name_($arg),
+ 'subArgs' => $this->makeArguments_($arg->children())
+ ));
+ break;
+ }
+ }
+
+ return $arguments;
+ }
+
+ /**
+ * Add argument(s) expected / allowed to appear next.
+ * @param array $value
+ */
+ protected function addArguments_($identifier, $subArgs)
+ {
+ for ($i = count($subArgs); $i > 0; $i--)
+ {
+ $arg = $subArgs[$i-1];
+ if (preg_match('/^'. $arg['follows'] .'$/si', $identifier))
+ array_unshift($this->arguments_, $arg);
+ }
+ }
+
+ /**
+ * Add dependency that is expected to be fullfilled when parsing
+ * of the current command is {@see done}.
+ * @param array $dependency
+ */
+ protected function addDependency_($type, $name, $dependencies)
+ {
+ foreach ($dependencies as $d)
+ {
+ array_push($this->deps_, array(
+ 'o_type' => $type,
+ 'o_name' => $name,
+ 'type' => $d['type'],
+ 'name' => $d['name'],
+ 'regex' => $d['regex']
+ ));
+ }
+ }
+
+ protected function invoke_($token, $func, $arg = array())
+ {
+ if (!is_array($arg))
+ $arg = array($arg);
+
+ $err = call_user_func_array(array(&$this, $func), $arg);
+
+ if ($err)
+ throw new SieveException($token, $err);
+ }
+
+ protected function setRequire_($extension)
+ {
+ array_push(self::$requiredExtensions_, $extension);
+ $this->registry_->activate($extension);
+ }
+
+ /**
+ * Hook function that is called after a address part match was found
+ * in a command. The kind of address part is remembered in case it's
+ * needed later {@see done}. For address parts from a extension
+ * dependency information and valid values are looked up as well.
+ * @param string $addresspart
+ */
+ protected function addressPartHook_($addresspart)
+ {
+ $this->addressPart_ = $addresspart;
+ $xml = $this->registry_->addresspart($this->addressPart_);
+
+ if (isset($xml))
+ {
+ // Add possible value and dependancy
+ $this->addArguments_($this->addressPart_, $this->makeArguments_($xml));
+ $this->addDependency_('address part', $this->addressPart_, $xml->requires);
+ }
+ }
+
+ /**
+ * Hook function that is called after a match type was found in a
+ * command. The kind of match type is remembered in case it's
+ * needed later {@see done}. For a match type from extensions
+ * dependency information and valid values are looked up as well.
+ * @param string $matchtype
+ */
+ protected function matchTypeHook_($matchtype)
+ {
+ $this->matchType_ = $matchtype;
+ $xml = $this->registry_->matchtype($this->matchType_);
+
+ if (isset($xml))
+ {
+ // Add possible value and dependancy
+ $this->addArguments_($this->matchType_, $this->makeArguments_($xml));
+ $this->addDependency_('match type', $this->matchType_, $xml->requires);
+ }
+ }
+
+ /**
+ * Hook function that is called after a comparator was found in
+ * a command. The comparator is remembered in case it's needed for
+ * comparsion later {@see done}. For a comparator from extensions
+ * dependency information is looked up as well.
+ * @param string $comparator
+ */
+ protected function comparatorHook_($comparator)
+ {
+ $this->comparator_ = $comparator;
+ $xml = $this->registry_->comparator($this->comparator_);
+
+ if (isset($xml))
+ {
+ // Add possible dependancy
+ $this->addDependency_('comparator', $this->comparator_, $xml->requires);
+ }
+ }
+
+ /**
+ * Hook function that is called after a tag was found in
+ * a command. The tag is remembered in case it's needed for
+ * comparsion later {@see done}. For a tags from extensions
+ * dependency information is looked up as well.
+ * @param string $tag
+ */
+ protected function tagHook_($tag)
+ {
+ array_push($this->tags_, $tag);
+ $xml = $this->registry_->argument($tag);
+
+ // Add possible dependancies
+ if (isset($xml))
+ $this->addDependency_('tag', $tag, $xml->requires);
+ }
+
+ protected function validType_($token)
+ {
+ foreach ($this->arguments_ as $arg)
+ {
+ if ($arg['occurrence'] == '0')
+ {
+ array_shift($this->arguments_);
+ continue;
+ }
+
+ if ($token->is($arg['type']))
+ return;
+
+ // Is the argument required
+ if ($arg['occurrence'] != '?' && $arg['occurrence'] != '*')
+ throw new SieveException($token, $arg['type']);
+
+ array_shift($this->arguments_);
+ }
+
+ // Check if command expects any (more) arguments
+ if (empty($this->arguments_))
+ throw new SieveException($token, $this->followupToken_);
+
+ throw new SieveException($token, 'unexpected '. SieveToken::typeString($token->type) .' '. $token->text);
+ }
+
+ public function startStringList($token)
+ {
+ $this->validType_($token);
+ $this->arguments_[0]['type'] = SieveToken::String;
+ $this->arguments_[0]['occurrence'] = '+';
+ }
+
+ public function continueStringList()
+ {
+ $this->arguments_[0]['occurrence'] = '+';
+ }
+
+ public function endStringList()
+ {
+ array_shift($this->arguments_);
+ }
+
+ public function validateToken($token)
+ {
+ // Make sure the argument has a valid type
+ $this->validType_($token);
+
+ foreach ($this->arguments_ as &$arg)
+ {
+ // Build regular expression according to argument type
+ switch ($arg['type'])
+ {
+ case SieveToken::String:
+ case SieveToken::StringList:
+ $regex = '/^(?:text:[^\n]*\n(?P<one>'. $arg['regex'] .')\.\r?\n?|"(?P<two>'. $arg['regex'] .')")$/'
+ . ($arg['case'] == 'ignore' ? 'si' : 's');
+ break;
+ case SieveToken::Tag:
+ $regex = '/^:(?P<one>'. $arg['regex'] .')$/si';
+ break;
+ default:
+ $regex = '/^(?P<one>'. $arg['regex'] .')$/si';
+ }
+
+ if (preg_match($regex, $token->text, $match))
+ {
+ $text = ($match['one'] ? $match['one'] : $match['two']);
+
+ // Add argument(s) that may now appear after this one
+ if (isset($arg['subArgs']))
+ $this->addArguments_($text, $arg['subArgs']);
+
+ // Call extra processing function if defined
+ if (isset($arg['call']))
+ $this->invoke_($token, $arg['call'], $text);
+
+ // Check if a possible value of this argument may occur
+ if ($arg['occurrence'] == '?' || $arg['occurrence'] == '1')
+ {
+ $arg['occurrence'] = '0';
+ }
+ else if ($arg['occurrence'] == '+')
+ {
+ $arg['occurrence'] = '*';
+ }
+
+ return;
+ }
+
+ if ($token->is($arg['type']) && $arg['occurrence'] == 1)
+ {
+ throw new SieveException($token,
+ SieveToken::typeString($token->type) ." $token->text where ". $arg['name'] .' expected');
+ }
+ }
+
+ throw new SieveException($token, 'unexpected '. SieveToken::typeString($token->type) .' '. $token->text);
+ }
+
+ public function done($token)
+ {
+ // Check if there are required arguments left
+ foreach ($this->arguments_ as $arg)
+ {
+ if ($arg['occurrence'] == '+' || $arg['occurrence'] == '1')
+ throw new SieveException($token, $arg['type']);
+ }
+
+ // Check if the command depends on use of a certain tag
+ foreach ($this->deps_ as $d)
+ {
+ switch ($d['type'])
+ {
+ case 'addresspart':
+ $values = array($this->addressPart_);
+ break;
+
+ case 'matchtype':
+ $values = array($this->matchType_);
+ break;
+
+ case 'comparator':
+ $values = array($this->comparator_);
+ break;
+
+ case 'tag':
+ $values = $this->tags_;
+ break;
+ }
+
+ foreach ($values as $value)
+ {
+ if (preg_match('/^'. $d['regex'] .'$/mi', $value))
+ break 2;
+ }
+
+ throw new SieveException($token,
+ $d['o_type'] .' '. $d['o_name'] .' requires use of '. $d['type'] .' '. $d['name']);
+ }
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveToken.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveToken.php
new file mode 100644
index 0000000..459f45b
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveToken.php
@@ -0,0 +1,88 @@
+<?php namespace Sieve;
+
+include_once('SieveDumpable.php');
+
+class SieveToken implements SieveDumpable
+{
+ const Unknown = 0x0000;
+ const ScriptEnd = 0x0001;
+ const LeftBracket = 0x0002;
+ const RightBracket = 0x0004;
+ const BlockStart = 0x0008;
+ const BlockEnd = 0x0010;
+ const LeftParenthesis = 0x0020;
+ const RightParenthesis = 0x0040;
+ const Comma = 0x0080;
+ const Semicolon = 0x0100;
+ const Whitespace = 0x0200;
+ const Tag = 0x0400;
+ const QuotedString = 0x0800;
+ const Number = 0x1000;
+ const Comment = 0x2000;
+ const MultilineString = 0x4000;
+ const Identifier = 0x8000;
+
+ const String = 0x4800; // Quoted | Multiline
+ const StringList = 0x4802; // Quoted | Multiline | LeftBracket
+ const StringListSep = 0x0084; // Comma | RightBracket
+ const Unparsed = 0x2200; // Comment | Whitespace
+ const TestList = 0x8020; // Identifier | LeftParenthesis
+
+ public $type;
+ public $text;
+ public $line;
+
+ public function __construct($type, $text, $line)
+ {
+ $this->text = $text;
+ $this->type = $type;
+ $this->line = intval($line);
+ }
+
+ public function dump()
+ {
+ return '<'. SieveToken::escape($this->text) .'> type:'. SieveToken::typeString($this->type) .' line:'. $this->line;
+ }
+
+ public function text()
+ {
+ return $this->text;
+ }
+
+ public function is($type)
+ {
+ return (bool)($this->type & $type);
+ }
+
+ public static function typeString($type)
+ {
+ switch ($type)
+ {
+ case SieveToken::Identifier: return 'identifier';
+ case SieveToken::Whitespace: return 'whitespace';
+ case SieveToken::QuotedString: return 'quoted string';
+ case SieveToken::Tag: return 'tag';
+ case SieveToken::Semicolon: return 'semicolon';
+ case SieveToken::LeftBracket: return 'left bracket';
+ case SieveToken::RightBracket: return 'right bracket';
+ case SieveToken::BlockStart: return 'block start';
+ case SieveToken::BlockEnd: return 'block end';
+ case SieveToken::LeftParenthesis: return 'left parenthesis';
+ case SieveToken::RightParenthesis: return 'right parenthesis';
+ case SieveToken::Comma: return 'comma';
+ case SieveToken::Number: return 'number';
+ case SieveToken::Comment: return 'comment';
+ case SieveToken::MultilineString: return 'multiline string';
+ case SieveToken::ScriptEnd: return 'script end';
+ case SieveToken::String: return 'string';
+ case SieveToken::StringList: return 'string list';
+ default: return 'unknown token';
+ }
+ }
+
+ protected static $tr_ = array("\r" => '\r', "\n" => '\n', "\t" => '\t');
+ public static function escape($val)
+ {
+ return strtr($val, self::$tr_);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveTree.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveTree.php
new file mode 100644
index 0000000..49c7349
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/SieveTree.php
@@ -0,0 +1,117 @@
+<?php namespace Sieve;
+
+class SieveTree
+{
+ protected $childs_;
+ protected $parents_;
+ protected $nodes_;
+ protected $max_id_;
+ protected $dump_;
+
+ public function __construct($name = 'tree')
+ {
+ $this->childs_ = array();
+ $this->parents_ = array();
+ $this->nodes_ = array();
+ $this->max_id_ = 0;
+
+ $this->parents_[0] = null;
+ $this->nodes_[0] = $name;
+ }
+
+ public function addChild(SieveDumpable $child)
+ {
+ return $this->addChildTo($this->max_id_, $child);
+ }
+
+ public function addChildTo($parent_id, SieveDumpable $child)
+ {
+ if (!is_int($parent_id)
+ || !isset($this->nodes_[$parent_id]))
+ return null;
+
+ if (!isset($this->childs_[$parent_id]))
+ $this->childs_[$parent_id] = array();
+
+ $child_id = ++$this->max_id_;
+ $this->nodes_[$child_id] = $child;
+ $this->parents_[$child_id] = $parent_id;
+ array_push($this->childs_[$parent_id], $child_id);
+
+ return $child_id;
+ }
+
+ public function getRoot()
+ {
+ return 0;
+ }
+
+ public function getChilds($node_id)
+ {
+ if (!is_int($node_id)
+ || !isset($this->nodes_[$node_id]))
+ return null;
+
+ if (!isset($this->childs_[$node_id]))
+ return array();
+
+ return $this->childs_[$node_id];
+ }
+
+ public function getNode($node_id)
+ {
+ if ($node_id == 0 || !is_int($node_id)
+ || !isset($this->nodes_[$node_id]))
+ return null;
+
+ return $this->nodes_[$node_id];
+ }
+
+ public function dump()
+ {
+ $this->dump_ = $this->nodes_[$this->getRoot()] ."\n";
+ $this->dumpChilds_($this->getRoot(), ' ');
+ return $this->dump_;
+ }
+
+ protected function dumpChilds_($parent_id, $prefix)
+ {
+ if (!isset($this->childs_[$parent_id]))
+ return;
+
+ $childs = $this->childs_[$parent_id];
+ $last_child = count($childs);
+
+ for ($i=1; $i <= $last_child; ++$i)
+ {
+ $child_node = $this->nodes_[$childs[$i-1]];
+ $infix = ($i == $last_child ? '`--- ' : '|--- ');
+ $this->dump_ .= $prefix . $infix . $child_node->dump() . " (id:" . $childs[$i-1] . ")\n";
+
+ $next_prefix = $prefix . ($i == $last_child ? ' ' : '| ');
+ $this->dumpChilds_($childs[$i-1], $next_prefix);
+ }
+ }
+
+ public function getText()
+ {
+ $this->dump_ = '';
+ $this->childText_($this->getRoot());
+ return $this->dump_;
+ }
+
+ protected function childText_($parent_id)
+ {
+ if (!isset($this->childs_[$parent_id]))
+ return;
+
+ $childs = $this->childs_[$parent_id];
+
+ for ($i = 0; $i < count($childs); ++$i)
+ {
+ $child_node = $this->nodes_[$childs[$i]];
+ $this->dump_ .= $child_node->text();
+ $this->childText_($childs[$i]);
+ }
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/body.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/body.xml
new file mode 100644
index 0000000..657b845
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/body.xml
@@ -0,0 +1,14 @@
+<?xml version='1.0' standalone='yes'?>
+
+<extension name="body">
+
+ <test name="body">
+ <parameter type="matchtype" occurrence="optional" />
+ <parameter type="comparator" occurrence="optional" />
+ <parameter type="tag" name="body transform" regex="(raw|content|text)" occurrence="optional">
+ <parameter type="stringlist" name="content types" follows="content" />
+ </parameter>
+ <parameter type="stringlist" name="key list" />
+ </test>
+
+</extension>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/comparator-ascii-numeric.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/comparator-ascii-numeric.xml
new file mode 100644
index 0000000..6f96f8d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/comparator-ascii-numeric.xml
@@ -0,0 +1,7 @@
+<?xml version='1.0' standalone='yes'?>
+
+<extension name="comparator-i;ascii-numeric">
+
+ <comparator name="i;ascii-numeric" />
+
+</extension>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/copy.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/copy.xml
new file mode 100644
index 0000000..4e3f902
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/copy.xml
@@ -0,0 +1,9 @@
+<?xml version='1.0' standalone='yes'?>
+
+<extension name="copy">
+
+ <tagged-argument extends="(fileinto|redirect)">
+ <parameter type="tag" name="copy" regex="copy" occurrence="optional" />
+ </tagged-argument>
+
+</extension>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/date.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/date.xml
new file mode 100644
index 0000000..08f6540
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/date.xml
@@ -0,0 +1,28 @@
+<?xml version='1.0' standalone='yes'?>
+
+<extension name="date">
+
+ <test name="date">
+ <parameter type="matchtype" occurrence="optional" />
+ <parameter type="comparator" occurrence="optional" />
+ <parameter type="tag" name="zone" regex="(zone|originalzone)" occurrence="optional">
+ <parameter type="string" name="time-zone" follows="zone" />
+ </parameter>
+ <parameter type="string" name="header-name" />
+ <parameter type="string" case="ignore" name="date-part"
+ regex="(year|month|day|date|julian|hour|minute|second|time|iso8601|std11|zone|weekday)" />
+ <parameter type="stringlist" name="key-list" />
+ </test>
+
+ <test name="currentdate">
+ <parameter type="matchtype" occurrence="optional" />
+ <parameter type="comparator" occurrence="optional" />
+ <parameter type="tag" name="zone" regex="zone" occurrence="optional">
+ <parameter type="string" name="time-zone" />
+ </parameter>
+ <parameter type="string" case="ignore" name="date-part"
+ regex="(year|month|day|date|julian|hour|minute|second|time|iso8601|std11|zone|weekday)" />
+ <parameter type="stringlist" name="key-list" />
+ </test>
+
+</extension>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/duplicate.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/duplicate.xml
new file mode 100644
index 0000000..1108d2c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/duplicate.xml
@@ -0,0 +1,9 @@
+<?xml version='1.0' standalone='yes'?>
+
+<extension name="duplicate">
+
+ <test name="duplicate">
+
+ </test>
+
+</extension>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/editheader.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/editheader.xml
new file mode 100644
index 0000000..5224482
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/editheader.xml
@@ -0,0 +1,22 @@
+<?xml version='1.0' standalone='yes'?>
+
+<extension name="editheader">
+
+ <command name="addheader">
+ <parameter type="tag" name="last" regex="last" occurrence="optional" />
+ <parameter type="string" name="field name" />
+ <parameter type="string" name="value" />
+ </command>
+
+ <command name="deleteheader">
+ <parameter type="tag" name="index" regex="index" occurrence="optional">
+ <parameter type="number" name="field number" />
+ <parameter type="tag" name="last" regex="last" occurrence="optional" />
+ </parameter>
+ <parameter type="matchtype" occurrence="optional" />
+ <parameter type="comparator" occurrence="optional" />
+ <parameter type="string" name="field name" />
+ <parameter type="stringlist" name="value patterns" occurrence="optional" />
+ </command>
+
+</extension>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/envelope.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/envelope.xml
new file mode 100644
index 0000000..ce88ada
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/envelope.xml
@@ -0,0 +1,13 @@
+<?xml version='1.0' standalone='yes'?>
+
+<extension name="envelope">
+
+ <test name="envelope">
+ <parameter type="matchtype" occurrence="optional" />
+ <parameter type="comparator" occurrence="optional" />
+ <parameter type="addresspart" occurrence="optional" />
+ <parameter type="stringlist" name="envelope-part" />
+ <parameter type="stringlist" name="key" />
+ </test>
+
+</extension>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/environment.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/environment.xml
new file mode 100644
index 0000000..edaab8d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/environment.xml
@@ -0,0 +1,13 @@
+<?xml version='1.0' standalone='yes'?>
+
+<extension name="environment">
+
+ <test name="environment">
+ <parameter type="matchtype" occurrence="optional" />
+ <parameter type="comparator" occurrence="optional" />
+ <parameter type="string" name="name"
+ regex="(domain|host|location|name|phase|remote-host|remote-ip|version|vnd\..+)" />
+ <parameter type="stringlist" name="key-list" />
+ </test>
+
+</extension>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/ereject.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/ereject.xml
new file mode 100644
index 0000000..f723019
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/ereject.xml
@@ -0,0 +1,11 @@
+<?xml version='1.0' standalone='yes'?>
+
+<extension name="ereject">
+
+ <command name="ereject">
+
+ <parameter type="string" name="reason" />
+
+ </command>
+
+</extension>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/fileinto.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/fileinto.xml
new file mode 100644
index 0000000..de3974c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/fileinto.xml
@@ -0,0 +1,10 @@
+<?xml version='1.0' standalone='yes'?>
+
+<extension name="fileinto">
+
+ <command name="fileinto">
+ <parameter type="tag" name="create" regex="create" occurrence="optional" />
+ <parameter type="string" name="folder" />
+ </command>
+
+</extension>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/imap4flags.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/imap4flags.xml
new file mode 100644
index 0000000..5f6d176
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/imap4flags.xml
@@ -0,0 +1,29 @@
+<?xml version='1.0' standalone='yes'?>
+
+<extension name="imap4flags">
+
+ <command name="setflag">
+ <parameter type="stringlist" name="flag list" />
+ </command>
+
+ <command name="addflag">
+ <parameter type="stringlist" name="flag list" />
+ </command>
+
+ <command name="removeflag">
+ <parameter type="stringlist" name="flag list" />
+ </command>
+
+ <test name="hasflag">
+ <parameter type="matchtype" occurrence="optional" />
+ <parameter type="comparator" occurrence="optional" />
+ <parameter type="stringlist" name="flag list" />
+ </test>
+
+ <tagged-argument extends="(fileinto|keep)">
+ <parameter type="tag" name="flags" regex="flags" occurrence="optional">
+ <parameter type="stringlist" name="flag list" />
+ </parameter>
+ </tagged-argument>
+
+</extension>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/imapflags.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/imapflags.xml
new file mode 100644
index 0000000..4b78cc8
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/imapflags.xml
@@ -0,0 +1,21 @@
+<?xml version='1.0' standalone='yes'?>
+
+<extension name="imapflags">
+
+ <command name="mark" />
+
+ <command name="unmark" />
+
+ <command name="setflag">
+ <parameter type="stringlist" name="flag list" />
+ </command>
+
+ <command name="addflag">
+ <parameter type="stringlist" name="flag list" />
+ </command>
+
+ <command name="removeflag">
+ <parameter type="stringlist" name="flag list" />
+ </command>
+
+</extension>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/index.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/index.xml
new file mode 100644
index 0000000..f81055c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/index.xml
@@ -0,0 +1,17 @@
+<?xml version='1.0' standalone='yes'?>
+
+<extension name="index">
+
+ <tagged-argument extends="(header|address|date)">
+ <parameter type="tag" name="index" regex="index" occurrence="optional">
+ <parameter type="number" name="field number" />
+ </parameter>
+ </tagged-argument>
+
+ <tagged-argument extends="(header|address|date)">
+ <parameter type="tag" name="last" regex="last" occurrence="optional">
+ <requires type="tag" name="index" regex="index" />
+ </parameter>
+ </tagged-argument>
+
+</extension>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/mailbox.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/mailbox.xml
new file mode 100644
index 0000000..c21960f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/mailbox.xml
@@ -0,0 +1,8 @@
+<?xml version='1.0' standalone='yes'?>
+
+<extension name="mailbox">
+
+ <test name="mailboxexists">
+ <parameter type="string" name="folder" />
+ </test>
+</extension>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/notify.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/notify.xml
new file mode 100644
index 0000000..e1702e9
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/notify.xml
@@ -0,0 +1,29 @@
+<?xml version='1.0' standalone='yes'?>
+
+<extension name="notify">
+
+ <command name="notify">
+ <parameter type="tag" name="method" regex="method" occurrence="optional">
+ <parameter type="string" name="method-name" />
+ </parameter>
+
+ <parameter type="tag" name="id" regex="id" occurrence="optional">
+ <parameter type="string" name="message-id" />
+ </parameter>
+
+ <parameter type="tag" name="priority" regex="(low|normal|high)" occurrence="optional" />
+
+ <parameter type="tag" name="message" regex="message" occurrence="optional">
+ <parameter type="string" name="message-text" />
+ </parameter>
+ </command>
+
+ <command name="denotify">
+ <parameter type="matchtype" occurrence="optional">
+ <parameter type="string" name="message-id" />
+ </parameter>
+
+ <parameter type="tag" name="priority" regex="(low|normal|high)" occurrence="optional" />
+ </command>
+
+</extension>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/regex.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/regex.xml
new file mode 100644
index 0000000..79d67fc
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/regex.xml
@@ -0,0 +1,11 @@
+<?xml version='1.0' standalone='yes'?>
+
+<extension name="regex">
+
+ <matchtype name="regex" />
+
+ <tagged-argument extends="set">
+ <parameter type="tag" name="modifier" regex="quoteregex" occurrence="optional" />
+ </tagged-argument>
+
+</extension>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/reject.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/reject.xml
new file mode 100644
index 0000000..33d2573
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/reject.xml
@@ -0,0 +1,11 @@
+<?xml version='1.0' standalone='yes'?>
+
+<extension name="reject">
+
+ <command name="reject">
+
+ <parameter type="string" name="reason" />
+
+ </command>
+
+</extension>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/relational.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/relational.xml
new file mode 100644
index 0000000..b9e2b39
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/relational.xml
@@ -0,0 +1,14 @@
+<?xml version='1.0' standalone='yes'?>
+
+<extension name="relational">
+
+ <matchtype name="count">
+ <requires type="comparator" name="i;ascii-numeric" regex="i;ascii-numeric" />
+ <parameter type="string" name="relation string" regex="(lt|le|eq|ge|gt|ne)" />
+ </matchtype>
+
+ <matchtype name="value">
+ <parameter type="string" name="relation string" regex="(lt|le|eq|ge|gt|ne)" />
+ </matchtype>
+
+</extension>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/spamtest.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/spamtest.xml
new file mode 100644
index 0000000..06c8c3b
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/spamtest.xml
@@ -0,0 +1,11 @@
+<?xml version='1.0' standalone='yes'?>
+
+<extension name="spamtest">
+
+ <test name="spamtest">
+ <parameter type="comparator" occurrence="optional" />
+ <parameter type="matchtype" occurrence="optional" />
+ <parameter type="string" name="value" />
+ </test>
+
+</extension>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/spamtestplus.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/spamtestplus.xml
new file mode 100644
index 0000000..c7b768d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/spamtestplus.xml
@@ -0,0 +1,12 @@
+<?xml version='1.0' standalone='yes'?>
+
+<extension name="spamtestplus">
+
+ <test name="spamtest" overrides="true">
+ <parameter type="comparator" occurrence="optional" />
+ <parameter type="matchtype" occurrence="optional" />
+ <parameter type="tag" name="percent" regex="percent" occurrence="optional" />
+ <parameter type="string" name="value" />
+ </test>
+
+</extension>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/subaddress.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/subaddress.xml
new file mode 100644
index 0000000..a668fdf
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/subaddress.xml
@@ -0,0 +1,8 @@
+<?xml version='1.0' standalone='yes'?>
+
+<extension name="subaddress">
+
+ <addresspart name="user" />
+ <addresspart name="detail" />
+
+</extension>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/vacation-seconds.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/vacation-seconds.xml
new file mode 100644
index 0000000..6418ef8
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/vacation-seconds.xml
@@ -0,0 +1,32 @@
+<?xml version='1.0' standalone='yes'?>
+
+<extension name="vacation-seconds">
+
+ <command name="vacation">
+
+ <parameter type="tag" name="seconds" occurrence="optional" regex="seconds">
+ <parameter type="number" name="period" />
+ </parameter>
+
+ <parameter type="tag" name="addresses" occurrence="optional" regex="addresses">
+ <parameter type="stringlist" name="address strings" />
+ </parameter>
+
+ <parameter type="tag" name="subject" occurrence="optional" regex="subject">
+ <parameter type="string" name="subject string" />
+ </parameter>
+
+ <parameter type="tag" name="from" occurrence="optional" regex="from">
+ <parameter type="string" name="from string" />
+ </parameter>
+
+ <parameter type="tag" name="handle" occurrence="optional" regex="handle">
+ <parameter type="string" name="handle string" />
+ </parameter>
+
+ <parameter type="tag" name="mime" occurrence="optional" regex="mime" />
+
+ <parameter type="string" name="reason" />
+ </command>
+
+</extension>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/vacation.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/vacation.xml
new file mode 100644
index 0000000..dbd6992
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/vacation.xml
@@ -0,0 +1,31 @@
+<?xml version='1.0' standalone='yes'?>
+
+<extension name="vacation">
+
+ <command name="vacation">
+ <parameter type="tag" name="days" occurrence="optional" regex="days">
+ <parameter type="number" name="period" />
+ </parameter>
+
+ <parameter type="tag" name="addresses" occurrence="optional" regex="addresses">
+ <parameter type="stringlist" name="address strings" />
+ </parameter>
+
+ <parameter type="tag" name="subject" occurrence="optional" regex="subject">
+ <parameter type="string" name="subject string" />
+ </parameter>
+
+ <parameter type="tag" name="from" occurrence="optional" regex="from">
+ <parameter type="string" name="from string" />
+ </parameter>
+
+ <parameter type="tag" name="handle" occurrence="optional" regex="handle">
+ <parameter type="string" name="handle string" />
+ </parameter>
+
+ <parameter type="tag" name="mime" occurrence="optional" regex="mime" />
+
+ <parameter type="string" name="reason" />
+ </command>
+
+</extension>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/variables.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/variables.xml
new file mode 100644
index 0000000..d9ff000
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/variables.xml
@@ -0,0 +1,21 @@
+<?xml version='1.0' standalone='yes'?>
+
+<extension name="variables">
+
+ <command name="set">
+ <parameter type="tag" name="modifier" regex="(lower|upper)" occurrence="optional" />
+ <parameter type="tag" name="modifier" regex="(lower|upper)first" occurrence="optional" />
+ <parameter type="tag" name="modifier" regex="quotewildcard" occurrence="optional" />
+ <parameter type="tag" name="modifier" regex="length" occurrence="optional" />
+ <parameter type="string" name="name" regex="[[:alpha:]_][[:alnum:]_]*" />
+ <parameter type="string" name="value" />
+ </command>
+
+ <test name="string">
+ <parameter type="matchtype" occurrence="optional" />
+ <parameter type="comparator" occurrence="optional" />
+ <parameter type="stringlist" name="source" />
+ <parameter type="stringlist" name="key list" />
+ </test>
+
+</extension>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/virustest.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/virustest.xml
new file mode 100644
index 0000000..6dac8e8
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/extensions/virustest.xml
@@ -0,0 +1,11 @@
+<?xml version='1.0' standalone='yes'?>
+
+<extension name="virustest">
+
+ <test name="virustest">
+ <parameter type="comparator" occurrence="optional" />
+ <parameter type="matchtype" occurrence="optional" />
+ <parameter type="string" name="value" />
+ </test>
+
+</extension>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/keywords.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/keywords.xml
new file mode 100644
index 0000000..1ab7c4d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/sieve/keywords.xml
@@ -0,0 +1,91 @@
+<?xml version='1.0' standalone='yes'?>
+
+<keywords>
+
+ <matchtype name="is" />
+ <matchtype name="contains" />
+ <matchtype name="matches" />
+ <matchtype name="value">
+ <parameter type="string" name="operator" regex="(gt|ge|eq|le|lt)" />
+ </matchtype>
+
+
+ <comparator name="i;octet" />
+ <comparator name="i;ascii-casemap" />
+ <comparator name="i;unicode-casemap" />
+
+ <addresspart name="all" />
+ <addresspart name="localpart" />
+ <addresspart name="domain" />
+
+
+ <command name="discard" />
+
+ <command name="elsif">
+ <parameter type="test" name="test command" />
+ <parameter type="block" />
+ </command>
+
+ <command name="else">
+ <parameter type="block" />
+ </command>
+
+ <command name="if">
+ <parameter type="test" name="test command" />
+ <parameter type="block" />
+ </command>
+
+ <command name="keep" />
+
+ <command name="redirect">
+ <parameter type="string" name="address string" />
+ </command>
+
+ <command name="require">
+ <parameter type="requirestrings" name="require string" />
+ </command>
+
+ <command name="stop" />
+
+
+ <test name="address">
+ <parameter type="matchtype" occurrence="optional" />
+ <parameter type="comparator" occurrence="optional" />
+ <parameter type="addresspart" occurrence="optional" />
+ <parameter type="stringlist" name="header list" />
+ <parameter type="stringlist" name="key list" />
+ </test>
+
+ <test name="allof">
+ <parameter type="testlist" name="test" />
+ </test>
+
+ <test name="anyof">
+ <parameter type="testlist" name="test" />
+ </test>
+
+ <test name="exists">
+ <parameter type="stringlist" name="header names" />
+ </test>
+
+ <test name="false" />
+
+ <test name="header">
+ <parameter type="matchtype" occurrence="optional" />
+ <parameter type="comparator" occurrence="optional" />
+ <parameter type="stringlist" name="header names" />
+ <parameter type="stringlist" name="key list" />
+ </test>
+
+ <test name="not">
+ <parameter type="test" />
+ </test>
+
+ <test name="size">
+ <parameter type="tag" regex="(over|under)" />
+ <parameter type="number" name="limit" />
+ </test>
+
+ <test name="true" />
+
+</keywords>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/autoload.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/autoload.php
new file mode 100644
index 0000000..011c527
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInit873464e4bd965a3168f133248b1b218b::getLoader();
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bin/minifycss b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bin/minifycss
new file mode 120000
index 0000000..04f60a4
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bin/minifycss
@@ -0,0 +1 @@
+../matthiasmullie/minify/bin/minifycss
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bin/minifyjs b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bin/minifyjs
new file mode 120000
index 0000000..6112446
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bin/minifyjs
@@ -0,0 +1 @@
+../matthiasmullie/minify/bin/minifyjs
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/CHANGELOG.md b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/CHANGELOG.md
new file mode 100644
index 0000000..1b87f3d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/CHANGELOG.md
@@ -0,0 +1,200 @@
+CHANGELOG for 1.x
+=================
+
+This changelog references the relevant changes (bug and security fixes) done
+in 1.x minor versions.
+
+To see the files changed for a given bug, go to https://github.com/bshaffer/oauth2-server-php/issues/### where ### is the bug number
+To get the diff between two versions, go to https://github.com/bshaffer/oauth2-server-php/compare/v1.0...v1.1
+To get the diff for a specific change, go to https://github.com/bshaffer/oauth2-server-php/commit/XXX where XXX is the change hash
+
+* 1.10.0 (2017-11-15)
+
+ PR: https://github.com/bshaffer/oauth2-server-php/pull/889
+
+ * #795 - [feature] added protected createPayload method to allow easier customization of JWT payload
+ * #807 - [refactor] simplifies UserInfoController constructor
+ * #814 - [docs] Adds https to README link
+ * #827 - [testing] Explicitly pulls in phpunit 4
+ * #828 - [docs] PHPDoc improvements and type hinting of variables.
+ * #829 - [bug] Fix CORS issue for revoking and requesting an access token
+ * #869 - [testing] Remove php 5.3 from travis and use vendored phpunit
+ * #834 - [feature] use random_bytes if available
+ * #851 - [docs] Fix PHPDoc
+ * #872 - [bug] Fix count() error on PHP 7.2
+ * #873 - [testing] adds php 7.2 to travis
+ * #794 - [docs] Fix typo in composer.json
+ * #885 - [testing] Use PHPUnit\Framework\TestCase instead of PHPUnit_Framework_TestCase
+
+* 1.9.0 (2017-01-06)
+
+ PR: https://github.com/bshaffer/oauth2-server-php/pull/788
+
+ * bug #645 - Allow null for client_secret
+ * bug #651 - Fix bug in isPublicClient of Cassandra Storage
+ * bug #670 - Bug in client's scope restriction
+ * bug #672 - Implemented method to override the password hashing algorithm
+ * bug #698 - Fix Token Response's Content-Type to application/json
+ * bug #729 - Ensures unsetAccessToken and unsetRefreshToken return a bool
+ * bug #749 - Fix UserClaims for CodeIdToken
+ * bug #784 - RFC6750 compatibility
+ * bug #776 - Fix "redirect_uri_mismatch" for URIs with encoded characters
+ * bug #759 - no access token supplied to resource controller results in empty request body
+ * bug #773 - Use OpenSSL random method before attempting Mcrypt's.
+ * bug #790 - Add mongo db
+
+* 1.8.0 (2015-09-18)
+
+ PR: https://github.com/bshaffer/oauth2-server-php/pull/643
+
+ * bug #594 - adds jti
+ * bug #598 - fixes lifetime configurations for JWTs
+ * bug #634 - fixes travis builds, upgrade to containers
+ * bug #586 - support for revoking tokens
+ * bug #636 - Adds FirebaseJWT bridge
+ * bug #639 - Mongo HHVM compatibility
+
+* 1.7.0 (2015-04-23)
+
+ PR: https://github.com/bshaffer/oauth2-server-php/pull/572
+
+ * bug #500 - PDO fetch mode changed from FETCH_BOTH to FETCH_ASSOC
+ * bug #508 - Case insensitive for Bearer token header name ba716d4
+ * bug #512 - validateRedirectUri is now public
+ * bug #530 - Add PublicKeyInterface, UserClaimsInterface to Cassandra Storage
+ * bug #505 - DynamoDB storage fixes
+ * bug #556 - adds "code id_token" return type to openid connect
+ * bug #563 - Include "issuer" config key for JwtAccessToken
+ * bug #564 - Fixes JWT vulnerability
+ * bug #571 - Added unset_refresh_token_after_use option
+
+* 1.6 (2015-01-16)
+
+ PR: https://github.com/bshaffer/oauth2-server-php/pull/496
+
+ * bug 437 - renames CryptoToken to JwtAccessToken / use_crypto_tokens to use_jwt_access_tokens
+ * bug 447 - Adds a Couchbase storage implementation
+ * bug 460 - Rename JWT claims to match spec
+ * bug 470 - order does not matter for multi-valued response types
+ * bug 471 - Make validateAuthorizeRequest available for POST in addition to GET
+ * bug 475 - Adds JTI table definitiion
+ * bug 481 - better randomness for generating access tokens
+ * bug 480 - Use hash_equals() for signature verification (prevents remote timing attacks)
+ * bugs 489, 491, 498 - misc other fixes
+
+* 1.5 (2014-08-27)
+
+ PR: https://github.com/bshaffer/oauth2-server-php/pull/446
+
+ * bug #399 - Add DynamoDB Support
+ * bug #404 - renamed error name for malformed/expired tokens
+ * bug #412 - Openid connect: fixes for claims with more than one scope / Add support for the prompt parameter ('consent' and 'none')
+ * bug #411 - fixes xml output
+ * bug #413 - fixes invalid format error
+ * bug #401 - fixes code standards / whitespace
+ * bug #354 - bundles PDO SQL with the library
+ * [BC] bug #397 - refresh tokens should not be encrypted
+ * bug #423 - makes "scope" optional for refresh token storage
+
+* 1.4 (2014-06-12)
+
+ PR: https://github.com/bshaffer/oauth2-server-php/pull/392
+
+ * bug #189 Storage\PDO - allows DSN string in constructor
+ * bug #233 Bearer Tokens - allows token in request body for PUT requests
+ * bug #346 Fixes open_basedir warning
+ * bug #351 Adds OpenID Connect support
+ * bug #355 Adds php 5.6 and HHVM to travis.ci testing
+ * [BC] bug #358 Adds `getQueryStringIdentifier()` to the GrantType interface
+ * bug #363 Encryption\JWT - Allows for subclassing JWT Headers
+ * bug #349 Bearer Tokens - adds requestHasToken method for when access tokens are optional
+ * bug #301 Encryption\JWT - fixes urlSafeB64Encode(): ensures newlines are replaced as expected
+ * bug #323 ResourceController - client_id is no longer required to be returned when calling getAccessToken
+ * bug #367 Storage\PDO - adds Postgres support
+ * bug #368 Access Tokens - use mcrypt_create_iv or openssl_random_pseudo_bytes to create token string
+ * bug #376 Request - allows case insensitive headers
+ * bug #384 Storage\PDO - can pass in PDO options in constructor of PDO storage
+ * misc fixes #361, #292, #373, #374, #379, #396
+* 1.3 (2014-02-27)
+
+ PR: https://github.com/bshaffer/oauth2-server-php/pull/325
+
+ * bug #311 adds cassandra storage
+ * bug #298 fixes response code for user credentials grant type
+ * bug #318 adds 'use_crypto_tokens' config to Server class for better DX
+ * [BC] bug #320 pass client_id to getDefaultScope
+ * bug #324 better feedback when running tests
+ * bug #335 adds support for non-expiring refresh tokens
+ * bug #333 fixes Pdo storage for getClientKey
+ * bug #336 fixes Redis storage for expireAuthorizationCode
+
+* 1.3 (2014-02-27)
+
+ PR: https://github.com/bshaffer/oauth2-server-php/pull/325
+
+ * bug #311 adds cassandra storage
+ * bug #298 fixes response code for user credentials grant type
+ * bug #318 adds 'use_crypto_tokens' config to Server class for better DX
+ * bug #320 pass client_id to getDefaultScope
+ * bug #324 better feedback when running tests
+ * bug #335 adds support for non-expiring refresh tokens
+ * bug #333 fixes Pdo storage for getClientKey
+ * bug #336 fixes Redis storage for expireAuthorizationCode
+
+* 1.2 (2014-01-03)
+
+ PR: https://github.com/bshaffer/oauth2-server-php/pull/288
+
+ * bug #285 changed response header from 200 to 401 when empty token received
+ * bug #286 adds documentation and links to spec for not including error messages when no token is supplied
+ * bug #280 ensures PHP warnings do not get thrown as a result of an invalid argument to $jwt->decode()
+ * bug #279 predis wrong number of arguments
+ * bug #277 Securing JS WebApp client secret w/ password grant type
+
+* 1.1 (2013-12-17)
+
+ PR: https://github.com/bshaffer/oauth2-server-php/pull/276
+
+ * bug #278 adds refresh token configuration to Server class
+ * bug #274 Supplying a null client_id and client_secret grants API access
+ * bug #244 [MongoStorage] More detailed implementation info
+ * bug #268 Implement jti for JWT Bearer tokens to prevent replay attacks.
+ * bug #266 Removing unused argument to getAccessTokenData
+ * bug #247 Make Bearer token type consistent
+ * bug #253 Fixing CryptoToken refresh token lifetime
+ * bug #246 refactors public key logic to be more intuitive
+ * bug #245 adds support for JSON crypto tokens
+ * bug #230 Remove unused columns in oauth_clients
+ * bug #215 makes Redis Scope Storage obey the same paradigm as PDO
+ * bug #228 removes scope group
+ * bug #227 squelches open basedir restriction error
+ * bug #223 Updated docblocks for RefreshTokenInterface.php
+ * bug #224 Adds protected properties
+ * bug #217 Implement ScopeInterface for PDO, Redis
+
+* 1.0 (2013-08-12)
+
+ * bug #203 Add redirect\_status_code config param for AuthorizeController
+ * bug #205 ensures unnecessary ? is not set when ** bug
+ * bug #204 Fixed call to LogicException
+ * bug #202 Add explode to checkRestrictedGrant in PDO Storage
+ * bug #197 adds support for 'false' default scope ** bug
+ * bug #192 reference errors and adds tests
+ * bug #194 makes some appropriate properties ** bug
+ * bug #191 passes config to HttpBasic
+ * bug #190 validates client credentials before ** bug
+ * bug #171 Fix wrong redirect following authorization step
+ * bug #187 client_id is now passed to getDefaultScope().
+ * bug #176 Require refresh_token in getRefreshToken response
+ * bug #174 make user\_id not required for refresh_token grant
+ * bug #173 Duplication in JwtBearer Grant
+ * bug #168 user\_id not required for authorization_code grant
+ * bug #133 hardens default security for user object
+ * bug #163 allows redirect\_uri on authorization_code to be NULL in docs example
+ * bug #162 adds getToken on ResourceController for convenience
+ * bug #161 fixes fatal error
+ * bug #163 Invalid redirect_uri handling
+ * bug #156 user\_id in OAuth2\_Storage_AuthorizationCodeInterface::getAuthorizationCode() response
+ * bug #157 Fix for extending access and refresh tokens
+ * bug #154 ResponseInterface: getParameter method is used in the library but not defined in the interface
+ * bug #148 Add more detail to examples in Readme.md
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/LICENSE b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/LICENSE
new file mode 100644
index 0000000..d7ece84
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/LICENSE
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2014 Brent Shaffer
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/README.md b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/README.md
new file mode 100644
index 0000000..117743d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/README.md
@@ -0,0 +1,8 @@
+oauth2-server-php
+=================
+
+[![Build Status](https://travis-ci.org/bshaffer/oauth2-server-php.svg?branch=master)](https://travis-ci.org/bshaffer/oauth2-server-php)
+
+[![Total Downloads](https://poser.pugx.org/bshaffer/oauth2-server-php/downloads.png)](https://packagist.org/packages/bshaffer/oauth2-server-php)
+
+View the [complete documentation](https://bshaffer.github.io/oauth2-server-php-docs/)
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/composer.json b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/composer.json
new file mode 100644
index 0000000..272d200
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/composer.json
@@ -0,0 +1,36 @@
+{
+ "name": "bshaffer/oauth2-server-php",
+ "description":"OAuth2 Server for PHP",
+ "keywords":["oauth","oauth2","auth"],
+ "type":"library",
+ "license":"MIT",
+ "authors":[
+ {
+ "name":"Brent Shaffer",
+ "email": "bshafs@gmail.com",
+ "homepage":"http://brentertainment.com"
+ }
+ ],
+ "homepage": "http://github.com/bshaffer/oauth2-server-php",
+ "autoload": {
+ "psr-0": { "OAuth2": "src/" }
+ },
+ "require":{
+ "php":">=5.3.9"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.0",
+ "aws/aws-sdk-php": "~2.8",
+ "firebase/php-jwt": "~2.2",
+ "predis/predis": "dev-master",
+ "thobbs/phpcassa": "dev-master",
+ "mongodb/mongodb": "^1.1"
+ },
+ "suggest": {
+ "predis/predis": "Required to use Redis storage",
+ "thobbs/phpcassa": "Required to use Cassandra storage",
+ "aws/aws-sdk-php": "~2.8 is required to use DynamoDB storage",
+ "firebase/php-jwt": "~2.2 is required to use JWT features",
+ "mongodb/mongodb": "^1.1 is required to use MongoDB storage"
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Autoloader.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Autoloader.php
new file mode 100644
index 0000000..4ec08cb
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Autoloader.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace OAuth2;
+
+/**
+ * Autoloads OAuth2 classes
+ *
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ * @license MIT License
+ */
+class Autoloader
+{
+ /**
+ * @var string
+ */
+ private $dir;
+
+ /**
+ * @param string $dir
+ */
+ public function __construct($dir = null)
+ {
+ if (is_null($dir)) {
+ $dir = dirname(__FILE__).'/..';
+ }
+ $this->dir = $dir;
+ }
+
+ /**
+ * Registers OAuth2\Autoloader as an SPL autoloader.
+ */
+ public static function register($dir = null)
+ {
+ ini_set('unserialize_callback_func', 'spl_autoload_call');
+ spl_autoload_register(array(new self($dir), 'autoload'));
+ }
+
+ /**
+ * Handles autoloading of classes.
+ *
+ * @param string $class - A class name.
+ * @return boolean - Returns true if the class has been loaded
+ */
+ public function autoload($class)
+ {
+ if (0 !== strpos($class, 'OAuth2')) {
+ return;
+ }
+
+ if (file_exists($file = $this->dir.'/'.str_replace('\\', '/', $class).'.php')) {
+ require $file;
+ }
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ClientAssertionType/ClientAssertionTypeInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ClientAssertionType/ClientAssertionTypeInterface.php
new file mode 100644
index 0000000..6a167da
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ClientAssertionType/ClientAssertionTypeInterface.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace OAuth2\ClientAssertionType;
+
+use OAuth2\RequestInterface;
+use OAuth2\ResponseInterface;
+
+/**
+ * Interface for all OAuth2 Client Assertion Types
+ */
+interface ClientAssertionTypeInterface
+{
+ /**
+ * Validate the OAuth request
+ *
+ * @param RequestInterface $request
+ * @param ResponseInterface $response
+ * @return mixed
+ */
+ public function validateRequest(RequestInterface $request, ResponseInterface $response);
+
+ /**
+ * Get the client id
+ *
+ * @return mixed
+ */
+ public function getClientId();
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ClientAssertionType/HttpBasic.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ClientAssertionType/HttpBasic.php
new file mode 100644
index 0000000..ef61203
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ClientAssertionType/HttpBasic.php
@@ -0,0 +1,139 @@
+<?php
+
+namespace OAuth2\ClientAssertionType;
+
+use OAuth2\Storage\ClientCredentialsInterface;
+use OAuth2\RequestInterface;
+use OAuth2\ResponseInterface;
+use LogicException;
+
+/**
+ * Validate a client via Http Basic authentication
+ *
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+class HttpBasic implements ClientAssertionTypeInterface
+{
+ private $clientData;
+
+ protected $storage;
+ protected $config;
+
+ /**
+ * Config array $config should look as follows:
+ * @code
+ * $config = array(
+ * 'allow_credentials_in_request_body' => true, // whether to look for credentials in the POST body in addition to the Authorize HTTP Header
+ * 'allow_public_clients' => true // if true, "public clients" (clients without a secret) may be authenticated
+ * );
+ * @endcode
+ *
+ * @param ClientCredentialsInterface $storage Storage
+ * @param array $config Configuration options for the server
+ */
+ public function __construct(ClientCredentialsInterface $storage, array $config = array())
+ {
+ $this->storage = $storage;
+ $this->config = array_merge(array(
+ 'allow_credentials_in_request_body' => true,
+ 'allow_public_clients' => true,
+ ), $config);
+ }
+
+ /**
+ * Validate the OAuth request
+ *
+ * @param RequestInterface $request
+ * @param ResponseInterface $response
+ * @return bool|mixed
+ * @throws LogicException
+ */
+ public function validateRequest(RequestInterface $request, ResponseInterface $response)
+ {
+ if (!$clientData = $this->getClientCredentials($request, $response)) {
+ return false;
+ }
+
+ if (!isset($clientData['client_id'])) {
+ throw new LogicException('the clientData array must have "client_id" set');
+ }
+
+ if (!isset($clientData['client_secret']) || $clientData['client_secret'] == '') {
+ if (!$this->config['allow_public_clients']) {
+ $response->setError(400, 'invalid_client', 'client credentials are required');
+
+ return false;
+ }
+
+ if (!$this->storage->isPublicClient($clientData['client_id'])) {
+ $response->setError(400, 'invalid_client', 'This client is invalid or must authenticate using a client secret');
+
+ return false;
+ }
+ } elseif ($this->storage->checkClientCredentials($clientData['client_id'], $clientData['client_secret']) === false) {
+ $response->setError(400, 'invalid_client', 'The client credentials are invalid');
+
+ return false;
+ }
+
+ $this->clientData = $clientData;
+
+ return true;
+ }
+
+ /**
+ * Get the client id
+ *
+ * @return mixed
+ */
+ public function getClientId()
+ {
+ return $this->clientData['client_id'];
+ }
+
+ /**
+ * Internal function used to get the client credentials from HTTP basic
+ * auth or POST data.
+ *
+ * According to the spec (draft 20), the client_id can be provided in
+ * the Basic Authorization header (recommended) or via GET/POST.
+ *
+ * @param RequestInterface $request
+ * @param ResponseInterface $response
+ * @return array|null A list containing the client identifier and password, for example:
+ * @code
+ * return array(
+ * "client_id" => CLIENT_ID, // REQUIRED the client id
+ * "client_secret" => CLIENT_SECRET, // OPTIONAL the client secret (may be omitted for public clients)
+ * );
+ * @endcode
+ *
+ * @see http://tools.ietf.org/html/rfc6749#section-2.3.1
+ *
+ * @ingroup oauth2_section_2
+ */
+ public function getClientCredentials(RequestInterface $request, ResponseInterface $response = null)
+ {
+ if (!is_null($request->headers('PHP_AUTH_USER')) && !is_null($request->headers('PHP_AUTH_PW'))) {
+ return array('client_id' => $request->headers('PHP_AUTH_USER'), 'client_secret' => $request->headers('PHP_AUTH_PW'));
+ }
+
+ if ($this->config['allow_credentials_in_request_body']) {
+ // Using POST for HttpBasic authorization is not recommended, but is supported by specification
+ if (!is_null($request->request('client_id'))) {
+ /**
+ * client_secret can be null if the client's password is an empty string
+ * @see http://tools.ietf.org/html/rfc6749#section-2.3.1
+ */
+ return array('client_id' => $request->request('client_id'), 'client_secret' => $request->request('client_secret'));
+ }
+ }
+
+ if ($response) {
+ $message = $this->config['allow_credentials_in_request_body'] ? ' or body' : '';
+ $response->setError(400, 'invalid_client', 'Client credentials were not found in the headers'.$message);
+ }
+
+ return null;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/AuthorizeController.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/AuthorizeController.php
new file mode 100644
index 0000000..4bafb1d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/AuthorizeController.php
@@ -0,0 +1,480 @@
+<?php
+
+namespace OAuth2\Controller;
+
+use OAuth2\Storage\ClientInterface;
+use OAuth2\ScopeInterface;
+use OAuth2\RequestInterface;
+use OAuth2\ResponseInterface;
+use OAuth2\Scope;
+use InvalidArgumentException;
+
+/**
+ * @see AuthorizeControllerInterface
+ */
+class AuthorizeController implements AuthorizeControllerInterface
+{
+ /**
+ * @var string
+ */
+ private $scope;
+
+ /**
+ * @var int
+ */
+ private $state;
+
+ /**
+ * @var mixed
+ */
+ private $client_id;
+
+ /**
+ * @var string
+ */
+ private $redirect_uri;
+
+ /**
+ * The response type
+ *
+ * @var string
+ */
+ private $response_type;
+
+ /**
+ * @var ClientInterface
+ */
+ protected $clientStorage;
+
+ /**
+ * @var array
+ */
+ protected $responseTypes;
+
+ /**
+ * @var array
+ */
+ protected $config;
+
+ /**
+ * @var ScopeInterface
+ */
+ protected $scopeUtil;
+
+ /**
+ * Constructor
+ *
+ * @param ClientInterface $clientStorage REQUIRED Instance of OAuth2\Storage\ClientInterface to retrieve client information
+ * @param array $responseTypes OPTIONAL Array of OAuth2\ResponseType\ResponseTypeInterface objects. Valid array
+ * keys are "code" and "token"
+ * @param array $config OPTIONAL Configuration options for the server:
+ * @param ScopeInterface $scopeUtil OPTIONAL Instance of OAuth2\ScopeInterface to validate the requested scope
+ * @code
+ * $config = array(
+ * 'allow_implicit' => false, // if the controller should allow the "implicit" grant type
+ * 'enforce_state' => true // if the controller should require the "state" parameter
+ * 'require_exact_redirect_uri' => true, // if the controller should require an exact match on the "redirect_uri" parameter
+ * 'redirect_status_code' => 302, // HTTP status code to use for redirect responses
+ * );
+ * @endcode
+ */
+ public function __construct(ClientInterface $clientStorage, array $responseTypes = array(), array $config = array(), ScopeInterface $scopeUtil = null)
+ {
+ $this->clientStorage = $clientStorage;
+ $this->responseTypes = $responseTypes;
+ $this->config = array_merge(array(
+ 'allow_implicit' => false,
+ 'enforce_state' => true,
+ 'require_exact_redirect_uri' => true,
+ 'redirect_status_code' => 302,
+ ), $config);
+
+ if (is_null($scopeUtil)) {
+ $scopeUtil = new Scope();
+ }
+ $this->scopeUtil = $scopeUtil;
+ }
+
+ /**
+ * Handle the authorization request
+ *
+ * @param RequestInterface $request
+ * @param ResponseInterface $response
+ * @param boolean $is_authorized
+ * @param mixed $user_id
+ * @return mixed|void
+ * @throws InvalidArgumentException
+ */
+ public function handleAuthorizeRequest(RequestInterface $request, ResponseInterface $response, $is_authorized, $user_id = null)
+ {
+ if (!is_bool($is_authorized)) {
+ throw new InvalidArgumentException('Argument "is_authorized" must be a boolean. This method must know if the user has granted access to the client.');
+ }
+
+ // We repeat this, because we need to re-validate. The request could be POSTed
+ // by a 3rd-party (because we are not internally enforcing NONCEs, etc)
+ if (!$this->validateAuthorizeRequest($request, $response)) {
+ return;
+ }
+
+ // If no redirect_uri is passed in the request, use client's registered one
+ if (empty($this->redirect_uri)) {
+ $clientData = $this->clientStorage->getClientDetails($this->client_id);
+ $registered_redirect_uri = $clientData['redirect_uri'];
+ }
+
+ // the user declined access to the client's application
+ if ($is_authorized === false) {
+ $redirect_uri = $this->redirect_uri ?: $registered_redirect_uri;
+ $this->setNotAuthorizedResponse($request, $response, $redirect_uri, $user_id);
+
+ return;
+ }
+
+ // build the parameters to set in the redirect URI
+ if (!$params = $this->buildAuthorizeParameters($request, $response, $user_id)) {
+ return;
+ }
+
+ $authResult = $this->responseTypes[$this->response_type]->getAuthorizeResponse($params, $user_id);
+
+ list($redirect_uri, $uri_params) = $authResult;
+
+ if (empty($redirect_uri) && !empty($registered_redirect_uri)) {
+ $redirect_uri = $registered_redirect_uri;
+ }
+
+ $uri = $this->buildUri($redirect_uri, $uri_params);
+
+ // return redirect response
+ $response->setRedirect($this->config['redirect_status_code'], $uri);
+ }
+
+ /**
+ * Set not authorized response
+ *
+ * @param RequestInterface $request
+ * @param ResponseInterface $response
+ * @param string $redirect_uri
+ * @param mixed $user_id
+ */
+ protected function setNotAuthorizedResponse(RequestInterface $request, ResponseInterface $response, $redirect_uri, $user_id = null)
+ {
+ $error = 'access_denied';
+ $error_message = 'The user denied access to your application';
+ $response->setRedirect($this->config['redirect_status_code'], $redirect_uri, $this->state, $error, $error_message);
+ }
+
+ /**
+ * We have made this protected so this class can be extended to add/modify
+ * these parameters
+ *
+ * @TODO: add dependency injection for the parameters in this method
+ *
+ * @param RequestInterface $request
+ * @param ResponseInterface $response
+ * @param mixed $user_id
+ * @return array
+ */
+ protected function buildAuthorizeParameters($request, $response, $user_id)
+ {
+ // @TODO: we should be explicit with this in the future
+ $params = array(
+ 'scope' => $this->scope,
+ 'state' => $this->state,
+ 'client_id' => $this->client_id,
+ 'redirect_uri' => $this->redirect_uri,
+ 'response_type' => $this->response_type,
+ );
+
+ return $params;
+ }
+
+ /**
+ * Validate the OAuth request
+ *
+ * @param RequestInterface $request
+ * @param ResponseInterface $response
+ * @return bool
+ */
+ public function validateAuthorizeRequest(RequestInterface $request, ResponseInterface $response)
+ {
+ // Make sure a valid client id was supplied (we can not redirect because we were unable to verify the URI)
+ if (!$client_id = $request->query('client_id', $request->request('client_id'))) {
+ // We don't have a good URI to use
+ $response->setError(400, 'invalid_client', "No client id supplied");
+
+ return false;
+ }
+
+ // Get client details
+ if (!$clientData = $this->clientStorage->getClientDetails($client_id)) {
+ $response->setError(400, 'invalid_client', 'The client id supplied is invalid');
+
+ return false;
+ }
+
+ $registered_redirect_uri = isset($clientData['redirect_uri']) ? $clientData['redirect_uri'] : '';
+
+ // Make sure a valid redirect_uri was supplied. If specified, it must match the clientData URI.
+ // @see http://tools.ietf.org/html/rfc6749#section-3.1.2
+ // @see http://tools.ietf.org/html/rfc6749#section-4.1.2.1
+ // @see http://tools.ietf.org/html/rfc6749#section-4.2.2.1
+ if ($supplied_redirect_uri = $request->query('redirect_uri', $request->request('redirect_uri'))) {
+ // validate there is no fragment supplied
+ $parts = parse_url($supplied_redirect_uri);
+ if (isset($parts['fragment']) && $parts['fragment']) {
+ $response->setError(400, 'invalid_uri', 'The redirect URI must not contain a fragment');
+
+ return false;
+ }
+
+ // validate against the registered redirect uri(s) if available
+ if ($registered_redirect_uri && !$this->validateRedirectUri($supplied_redirect_uri, $registered_redirect_uri)) {
+ $response->setError(400, 'redirect_uri_mismatch', 'The redirect URI provided is missing or does not match', '#section-3.1.2');
+
+ return false;
+ }
+ $redirect_uri = $supplied_redirect_uri;
+ } else {
+ // use the registered redirect_uri if none has been supplied, if possible
+ if (!$registered_redirect_uri) {
+ $response->setError(400, 'invalid_uri', 'No redirect URI was supplied or stored');
+
+ return false;
+ }
+
+ if (count(explode(' ', $registered_redirect_uri)) > 1) {
+ $response->setError(400, 'invalid_uri', 'A redirect URI must be supplied when multiple redirect URIs are registered', '#section-3.1.2.3');
+
+ return false;
+ }
+ $redirect_uri = $registered_redirect_uri;
+ }
+
+ // Select the response type
+ $response_type = $request->query('response_type', $request->request('response_type'));
+
+ // for multiple-valued response types - make them alphabetical
+ if (false !== strpos($response_type, ' ')) {
+ $types = explode(' ', $response_type);
+ sort($types);
+ $response_type = ltrim(implode(' ', $types));
+ }
+
+ $state = $request->query('state', $request->request('state'));
+
+ // type and client_id are required
+ if (!$response_type || !in_array($response_type, $this->getValidResponseTypes())) {
+ $response->setRedirect($this->config['redirect_status_code'], $redirect_uri, $state, 'invalid_request', 'Invalid or missing response type', null);
+
+ return false;
+ }
+
+ if ($response_type == self::RESPONSE_TYPE_AUTHORIZATION_CODE) {
+ if (!isset($this->responseTypes['code'])) {
+ $response->setRedirect($this->config['redirect_status_code'], $redirect_uri, $state, 'unsupported_response_type', 'authorization code grant type not supported', null);
+
+ return false;
+ }
+ if (!$this->clientStorage->checkRestrictedGrantType($client_id, 'authorization_code')) {
+ $response->setRedirect($this->config['redirect_status_code'], $redirect_uri, $state, 'unauthorized_client', 'The grant type is unauthorized for this client_id', null);
+
+ return false;
+ }
+ if ($this->responseTypes['code']->enforceRedirect() && !$redirect_uri) {
+ $response->setError(400, 'redirect_uri_mismatch', 'The redirect URI is mandatory and was not supplied');
+
+ return false;
+ }
+ } else {
+ if (!$this->config['allow_implicit']) {
+ $response->setRedirect($this->config['redirect_status_code'], $redirect_uri, $state, 'unsupported_response_type', 'implicit grant type not supported', null);
+
+ return false;
+ }
+ if (!$this->clientStorage->checkRestrictedGrantType($client_id, 'implicit')) {
+ $response->setRedirect($this->config['redirect_status_code'], $redirect_uri, $state, 'unauthorized_client', 'The grant type is unauthorized for this client_id', null);
+
+ return false;
+ }
+ }
+
+ // validate requested scope if it exists
+ $requestedScope = $this->scopeUtil->getScopeFromRequest($request);
+
+ if ($requestedScope) {
+ // restrict scope by client specific scope if applicable,
+ // otherwise verify the scope exists
+ $clientScope = $this->clientStorage->getClientScope($client_id);
+ if ((empty($clientScope) && !$this->scopeUtil->scopeExists($requestedScope))
+ || (!empty($clientScope) && !$this->scopeUtil->checkScope($requestedScope, $clientScope))) {
+ $response->setRedirect($this->config['redirect_status_code'], $redirect_uri, $state, 'invalid_scope', 'An unsupported scope was requested', null);
+
+ return false;
+ }
+ } else {
+ // use a globally-defined default scope
+ $defaultScope = $this->scopeUtil->getDefaultScope($client_id);
+
+ if (false === $defaultScope) {
+ $response->setRedirect($this->config['redirect_status_code'], $redirect_uri, $state, 'invalid_client', 'This application requires you specify a scope parameter', null);
+
+ return false;
+ }
+
+ $requestedScope = $defaultScope;
+ }
+
+ // Validate state parameter exists (if configured to enforce this)
+ if ($this->config['enforce_state'] && !$state) {
+ $response->setRedirect($this->config['redirect_status_code'], $redirect_uri, null, 'invalid_request', 'The state parameter is required');
+
+ return false;
+ }
+
+ // save the input data and return true
+ $this->scope = $requestedScope;
+ $this->state = $state;
+ $this->client_id = $client_id;
+ // Only save the SUPPLIED redirect URI (@see http://tools.ietf.org/html/rfc6749#section-4.1.3)
+ $this->redirect_uri = $supplied_redirect_uri;
+ $this->response_type = $response_type;
+
+ return true;
+ }
+
+ /**
+ * Build the absolute URI based on supplied URI and parameters.
+ *
+ * @param string $uri An absolute URI.
+ * @param array $params Parameters to be append as GET.
+ *
+ * @return string
+ * An absolute URI with supplied parameters.
+ *
+ * @ingroup oauth2_section_4
+ */
+ private function buildUri($uri, $params)
+ {
+ $parse_url = parse_url($uri);
+
+ // Add our params to the parsed uri
+ foreach ($params as $k => $v) {
+ if (isset($parse_url[$k])) {
+ $parse_url[$k] .= "&" . http_build_query($v, '', '&');
+ } else {
+ $parse_url[$k] = http_build_query($v, '', '&');
+ }
+ }
+
+ // Put the uri back together
+ return
+ ((isset($parse_url["scheme"])) ? $parse_url["scheme"] . "://" : "")
+ . ((isset($parse_url["user"])) ? $parse_url["user"]
+ . ((isset($parse_url["pass"])) ? ":" . $parse_url["pass"] : "") . "@" : "")
+ . ((isset($parse_url["host"])) ? $parse_url["host"] : "")
+ . ((isset($parse_url["port"])) ? ":" . $parse_url["port"] : "")
+ . ((isset($parse_url["path"])) ? $parse_url["path"] : "")
+ . ((isset($parse_url["query"]) && !empty($parse_url['query'])) ? "?" . $parse_url["query"] : "")
+ . ((isset($parse_url["fragment"])) ? "#" . $parse_url["fragment"] : "")
+ ;
+ }
+
+ protected function getValidResponseTypes()
+ {
+ return array(
+ self::RESPONSE_TYPE_ACCESS_TOKEN,
+ self::RESPONSE_TYPE_AUTHORIZATION_CODE,
+ );
+ }
+
+ /**
+ * Internal method for validating redirect URI supplied
+ *
+ * @param string $inputUri The submitted URI to be validated
+ * @param string $registeredUriString The allowed URI(s) to validate against. Can be a space-delimited string of URIs to
+ * allow for multiple URIs
+ * @return bool
+ * @see http://tools.ietf.org/html/rfc6749#section-3.1.2
+ */
+ protected function validateRedirectUri($inputUri, $registeredUriString)
+ {
+ if (!$inputUri || !$registeredUriString) {
+ return false; // if either one is missing, assume INVALID
+ }
+
+ $registered_uris = preg_split('/\s+/', $registeredUriString);
+ foreach ($registered_uris as $registered_uri) {
+ if ($this->config['require_exact_redirect_uri']) {
+ // the input uri is validated against the registered uri using exact match
+ if (strcmp($inputUri, $registered_uri) === 0) {
+ return true;
+ }
+ } else {
+ $registered_uri_length = strlen($registered_uri);
+ if ($registered_uri_length === 0) {
+ return false;
+ }
+
+ // the input uri is validated against the registered uri using case-insensitive match of the initial string
+ // i.e. additional query parameters may be applied
+ if (strcasecmp(substr($inputUri, 0, $registered_uri_length), $registered_uri) === 0) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Convenience method to access the scope
+ *
+ * @return string
+ */
+ public function getScope()
+ {
+ return $this->scope;
+ }
+
+ /**
+ * Convenience method to access the state
+ *
+ * @return int
+ */
+ public function getState()
+ {
+ return $this->state;
+ }
+
+ /**
+ * Convenience method to access the client id
+ *
+ * @return mixed
+ */
+ public function getClientId()
+ {
+ return $this->client_id;
+ }
+
+ /**
+ * Convenience method to access the redirect url
+ *
+ * @return string
+ */
+ public function getRedirectUri()
+ {
+ return $this->redirect_uri;
+ }
+
+ /**
+ * Convenience method to access the response type
+ *
+ * @return string
+ */
+ public function getResponseType()
+ {
+ return $this->response_type;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/AuthorizeControllerInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/AuthorizeControllerInterface.php
new file mode 100644
index 0000000..f758f97
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/AuthorizeControllerInterface.php
@@ -0,0 +1,58 @@
+<?php
+
+namespace OAuth2\Controller;
+
+use OAuth2\RequestInterface;
+use OAuth2\ResponseInterface;
+
+/**
+ * This controller is called when a user should be authorized
+ * by an authorization server. As OAuth2 does not handle
+ * authorization directly, this controller ensures the request is valid, but
+ * requires the application to determine the value of $is_authorized
+ *
+ * @code
+ * $user_id = $this->somehowDetermineUserId();
+ * $is_authorized = $this->somehowDetermineUserAuthorization();
+ * $response = new OAuth2\Response();
+ * $authorizeController->handleAuthorizeRequest(
+ * OAuth2\Request::createFromGlobals(),
+ * $response,
+ * $is_authorized,
+ * $user_id
+ * );
+ * $response->send();
+ * @endcode
+ */
+interface AuthorizeControllerInterface
+{
+ /**
+ * List of possible authentication response types.
+ * The "authorization_code" mechanism exclusively supports 'code'
+ * and the "implicit" mechanism exclusively supports 'token'.
+ *
+ * @var string
+ * @see http://tools.ietf.org/html/rfc6749#section-4.1.1
+ * @see http://tools.ietf.org/html/rfc6749#section-4.2.1
+ */
+ const RESPONSE_TYPE_AUTHORIZATION_CODE = 'code';
+ const RESPONSE_TYPE_ACCESS_TOKEN = 'token';
+
+ /**
+ * Handle the OAuth request
+ *
+ * @param RequestInterface $request
+ * @param ResponseInterface $response
+ * @param $is_authorized
+ * @param null $user_id
+ * @return mixed
+ */
+ public function handleAuthorizeRequest(RequestInterface $request, ResponseInterface $response, $is_authorized, $user_id = null);
+
+ /**
+ * @param RequestInterface $request
+ * @param ResponseInterface $response
+ * @return bool
+ */
+ public function validateAuthorizeRequest(RequestInterface $request, ResponseInterface $response);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/ResourceController.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/ResourceController.php
new file mode 100644
index 0000000..926f90f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/ResourceController.php
@@ -0,0 +1,156 @@
+<?php
+
+namespace OAuth2\Controller;
+
+use OAuth2\TokenType\TokenTypeInterface;
+use OAuth2\Storage\AccessTokenInterface;
+use OAuth2\ScopeInterface;
+use OAuth2\RequestInterface;
+use OAuth2\ResponseInterface;
+use OAuth2\Scope;
+
+/**
+ * @see ResourceControllerInterface
+ */
+class ResourceController implements ResourceControllerInterface
+{
+ /**
+ * @var array
+ */
+ private $token;
+
+ /**
+ * @var TokenTypeInterface
+ */
+ protected $tokenType;
+
+ /**
+ * @var AccessTokenInterface
+ */
+ protected $tokenStorage;
+
+ /**
+ * @var array
+ */
+ protected $config;
+
+ /**
+ * @var ScopeInterface
+ */
+ protected $scopeUtil;
+
+ /**
+ * Constructor
+ *
+ * @param TokenTypeInterface $tokenType
+ * @param AccessTokenInterface $tokenStorage
+ * @param array $config
+ * @param ScopeInterface $scopeUtil
+ */
+ public function __construct(TokenTypeInterface $tokenType, AccessTokenInterface $tokenStorage, $config = array(), ScopeInterface $scopeUtil = null)
+ {
+ $this->tokenType = $tokenType;
+ $this->tokenStorage = $tokenStorage;
+
+ $this->config = array_merge(array(
+ 'www_realm' => 'Service',
+ ), $config);
+
+ if (is_null($scopeUtil)) {
+ $scopeUtil = new Scope();
+ }
+ $this->scopeUtil = $scopeUtil;
+ }
+
+ /**
+ * Verify the resource request
+ *
+ * @param RequestInterface $request
+ * @param ResponseInterface $response
+ * @param null $scope
+ * @return bool
+ */
+ public function verifyResourceRequest(RequestInterface $request, ResponseInterface $response, $scope = null)
+ {
+ $token = $this->getAccessTokenData($request, $response);
+
+ // Check if we have token data
+ if (is_null($token)) {
+ return false;
+ }
+
+ /**
+ * Check scope, if provided
+ * If token doesn't have a scope, it's null/empty, or it's insufficient, then throw 403
+ * @see http://tools.ietf.org/html/rfc6750#section-3.1
+ */
+ if ($scope && (!isset($token["scope"]) || !$token["scope"] || !$this->scopeUtil->checkScope($scope, $token["scope"]))) {
+ $response->setError(403, 'insufficient_scope', 'The request requires higher privileges than provided by the access token');
+ $response->addHttpHeaders(array(
+ 'WWW-Authenticate' => sprintf('%s realm="%s", scope="%s", error="%s", error_description="%s"',
+ $this->tokenType->getTokenType(),
+ $this->config['www_realm'],
+ $scope,
+ $response->getParameter('error'),
+ $response->getParameter('error_description')
+ )
+ ));
+
+ return false;
+ }
+
+ // allow retrieval of the token
+ $this->token = $token;
+
+ return (bool) $token;
+ }
+
+ /**
+ * Get access token data.
+ *
+ * @param RequestInterface $request
+ * @param ResponseInterface $response
+ * @return array|null
+ */
+ public function getAccessTokenData(RequestInterface $request, ResponseInterface $response)
+ {
+ // Get the token parameter
+ if ($token_param = $this->tokenType->getAccessTokenParameter($request, $response)) {
+ // Get the stored token data (from the implementing subclass)
+ // Check we have a well formed token
+ // Check token expiration (expires is a mandatory paramter)
+ if (!$token = $this->tokenStorage->getAccessToken($token_param)) {
+ $response->setError(401, 'invalid_token', 'The access token provided is invalid');
+ } elseif (!isset($token["expires"]) || !isset($token["client_id"])) {
+ $response->setError(401, 'malformed_token', 'Malformed token (missing "expires")');
+ } elseif (time() > $token["expires"]) {
+ $response->setError(401, 'invalid_token', 'The access token provided has expired');
+ } else {
+ return $token;
+ }
+ }
+
+ $authHeader = sprintf('%s realm="%s"', $this->tokenType->getTokenType(), $this->config['www_realm']);
+
+ if ($error = $response->getParameter('error')) {
+ $authHeader = sprintf('%s, error="%s"', $authHeader, $error);
+ if ($error_description = $response->getParameter('error_description')) {
+ $authHeader = sprintf('%s, error_description="%s"', $authHeader, $error_description);
+ }
+ }
+
+ $response->addHttpHeaders(array('WWW-Authenticate' => $authHeader));
+
+ return null;
+ }
+
+ /**
+ * convenience method to allow retrieval of the token.
+ *
+ * @return array
+ */
+ public function getToken()
+ {
+ return $this->token;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/ResourceControllerInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/ResourceControllerInterface.php
new file mode 100644
index 0000000..9d00514
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/ResourceControllerInterface.php
@@ -0,0 +1,41 @@
+<?php
+
+namespace OAuth2\Controller;
+
+use OAuth2\RequestInterface;
+use OAuth2\ResponseInterface;
+
+/**
+ * This controller is called when a "resource" is requested.
+ * call verifyResourceRequest in order to determine if the request
+ * contains a valid token.
+ *
+ * @code
+ * if (!$resourceController->verifyResourceRequest(OAuth2\Request::createFromGlobals(), $response = new OAuth2\Response())) {
+ * $response->send(); // authorization failed
+ * exit();
+ * }
+ * return json_encode($resource); // valid token! Send the stuff!
+ * @endcode
+ */
+interface ResourceControllerInterface
+{
+ /**
+ * Verify the resource request
+ *
+ * @param RequestInterface $request - Request object
+ * @param ResponseInterface $response - Response object
+ * @param string $scope
+ * @return mixed
+ */
+ public function verifyResourceRequest(RequestInterface $request, ResponseInterface $response, $scope = null);
+
+ /**
+ * Get access token data.
+ *
+ * @param RequestInterface $request - Request object
+ * @param ResponseInterface $response - Response object
+ * @return mixed
+ */
+ public function getAccessTokenData(RequestInterface $request, ResponseInterface $response);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/TokenController.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/TokenController.php
new file mode 100644
index 0000000..7fdaf85
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/TokenController.php
@@ -0,0 +1,333 @@
+<?php
+
+namespace OAuth2\Controller;
+
+use OAuth2\ResponseType\AccessTokenInterface;
+use OAuth2\ClientAssertionType\ClientAssertionTypeInterface;
+use OAuth2\GrantType\GrantTypeInterface;
+use OAuth2\ScopeInterface;
+use OAuth2\Scope;
+use OAuth2\Storage\ClientInterface;
+use OAuth2\RequestInterface;
+use OAuth2\ResponseInterface;
+use InvalidArgumentException;
+use LogicException;
+use RuntimeException;
+
+/**
+ * @see TokenControllerInterface
+ */
+class TokenController implements TokenControllerInterface
+{
+ /**
+ * @var AccessTokenInterface
+ */
+ protected $accessToken;
+
+ /**
+ * @var array<GrantTypeInterface>
+ */
+ protected $grantTypes;
+
+ /**
+ * @var ClientAssertionTypeInterface
+ */
+ protected $clientAssertionType;
+
+ /**
+ * @var ScopeInterface
+ */
+ protected $scopeUtil;
+
+ /**
+ * @var ClientInterface
+ */
+ protected $clientStorage;
+
+ /**
+ * Constructor
+ *
+ * @param AccessTokenInterface $accessToken
+ * @param ClientInterface $clientStorage
+ * @param array $grantTypes
+ * @param ClientAssertionTypeInterface $clientAssertionType
+ * @param ScopeInterface $scopeUtil
+ * @throws InvalidArgumentException
+ */
+ public function __construct(AccessTokenInterface $accessToken, ClientInterface $clientStorage, array $grantTypes = array(), ClientAssertionTypeInterface $clientAssertionType = null, ScopeInterface $scopeUtil = null)
+ {
+ if (is_null($clientAssertionType)) {
+ foreach ($grantTypes as $grantType) {
+ if (!$grantType instanceof ClientAssertionTypeInterface) {
+ throw new InvalidArgumentException('You must supply an instance of OAuth2\ClientAssertionType\ClientAssertionTypeInterface or only use grant types which implement OAuth2\ClientAssertionType\ClientAssertionTypeInterface');
+ }
+ }
+ }
+ $this->clientAssertionType = $clientAssertionType;
+ $this->accessToken = $accessToken;
+ $this->clientStorage = $clientStorage;
+ foreach ($grantTypes as $grantType) {
+ $this->addGrantType($grantType);
+ }
+
+ if (is_null($scopeUtil)) {
+ $scopeUtil = new Scope();
+ }
+ $this->scopeUtil = $scopeUtil;
+ }
+
+ /**
+ * Handle the token request.
+ *
+ * @param RequestInterface $request - Request object to grant access token
+ * @param ResponseInterface $response - Response object
+ */
+ public function handleTokenRequest(RequestInterface $request, ResponseInterface $response)
+ {
+ if ($token = $this->grantAccessToken($request, $response)) {
+ // @see http://tools.ietf.org/html/rfc6749#section-5.1
+ // server MUST disable caching in headers when tokens are involved
+ $response->setStatusCode(200);
+ $response->addParameters($token);
+ $response->addHttpHeaders(array(
+ 'Cache-Control' => 'no-store',
+ 'Pragma' => 'no-cache',
+ 'Content-Type' => 'application/json'
+ ));
+ }
+ }
+
+ /**
+ * Grant or deny a requested access token.
+ * This would be called from the "/token" endpoint as defined in the spec.
+ * You can call your endpoint whatever you want.
+ *
+ * @param RequestInterface $request - Request object to grant access token
+ * @param ResponseInterface $response - Response object
+ *
+ * @return bool|null|array
+ *
+ * @throws \InvalidArgumentException
+ * @throws \LogicException
+ *
+ * @see http://tools.ietf.org/html/rfc6749#section-4
+ * @see http://tools.ietf.org/html/rfc6749#section-10.6
+ * @see http://tools.ietf.org/html/rfc6749#section-4.1.3
+ *
+ * @ingroup oauth2_section_4
+ */
+ public function grantAccessToken(RequestInterface $request, ResponseInterface $response)
+ {
+ if (strtolower($request->server('REQUEST_METHOD')) === 'options') {
+ $response->addHttpHeaders(array('Allow' => 'POST, OPTIONS'));
+
+ return null;
+ }
+
+ if (strtolower($request->server('REQUEST_METHOD')) !== 'post') {
+ $response->setError(405, 'invalid_request', 'The request method must be POST when requesting an access token', '#section-3.2');
+ $response->addHttpHeaders(array('Allow' => 'POST, OPTIONS'));
+
+ return null;
+ }
+
+ /**
+ * Determine grant type from request
+ * and validate the request for that grant type
+ */
+ if (!$grantTypeIdentifier = $request->request('grant_type')) {
+ $response->setError(400, 'invalid_request', 'The grant type was not specified in the request');
+
+ return null;
+ }
+
+ if (!isset($this->grantTypes[$grantTypeIdentifier])) {
+ /* TODO: If this is an OAuth2 supported grant type that we have chosen not to implement, throw a 501 Not Implemented instead */
+ $response->setError(400, 'unsupported_grant_type', sprintf('Grant type "%s" not supported', $grantTypeIdentifier));
+
+ return null;
+ }
+
+ /** @var GrantTypeInterface $grantType */
+ $grantType = $this->grantTypes[$grantTypeIdentifier];
+
+ /**
+ * Retrieve the client information from the request
+ * ClientAssertionTypes allow for grant types which also assert the client data
+ * in which case ClientAssertion is handled in the validateRequest method
+ *
+ * @see \OAuth2\GrantType\JWTBearer
+ * @see \OAuth2\GrantType\ClientCredentials
+ */
+ if (!$grantType instanceof ClientAssertionTypeInterface) {
+ if (!$this->clientAssertionType->validateRequest($request, $response)) {
+ return null;
+ }
+ $clientId = $this->clientAssertionType->getClientId();
+ }
+
+ /**
+ * Retrieve the grant type information from the request
+ * The GrantTypeInterface object handles all validation
+ * If the object is an instance of ClientAssertionTypeInterface,
+ * That logic is handled here as well
+ */
+ if (!$grantType->validateRequest($request, $response)) {
+ return null;
+ }
+
+ if ($grantType instanceof ClientAssertionTypeInterface) {
+ $clientId = $grantType->getClientId();
+ } else {
+ // validate the Client ID (if applicable)
+ if (!is_null($storedClientId = $grantType->getClientId()) && $storedClientId != $clientId) {
+ $response->setError(400, 'invalid_grant', sprintf('%s doesn\'t exist or is invalid for the client', $grantTypeIdentifier));
+
+ return null;
+ }
+ }
+
+ /**
+ * Validate the client can use the requested grant type
+ */
+ if (!$this->clientStorage->checkRestrictedGrantType($clientId, $grantTypeIdentifier)) {
+ $response->setError(400, 'unauthorized_client', 'The grant type is unauthorized for this client_id');
+
+ return false;
+ }
+
+ /**
+ * Validate the scope of the token
+ *
+ * requestedScope - the scope specified in the token request
+ * availableScope - the scope associated with the grant type
+ * ex: in the case of the "Authorization Code" grant type,
+ * the scope is specified in the authorize request
+ *
+ * @see http://tools.ietf.org/html/rfc6749#section-3.3
+ */
+ $requestedScope = $this->scopeUtil->getScopeFromRequest($request);
+ $availableScope = $grantType->getScope();
+
+ if ($requestedScope) {
+ // validate the requested scope
+ if ($availableScope) {
+ if (!$this->scopeUtil->checkScope($requestedScope, $availableScope)) {
+ $response->setError(400, 'invalid_scope', 'The scope requested is invalid for this request');
+
+ return null;
+ }
+ } else {
+ // validate the client has access to this scope
+ if ($clientScope = $this->clientStorage->getClientScope($clientId)) {
+ if (!$this->scopeUtil->checkScope($requestedScope, $clientScope)) {
+ $response->setError(400, 'invalid_scope', 'The scope requested is invalid for this client');
+
+ return false;
+ }
+ } elseif (!$this->scopeUtil->scopeExists($requestedScope)) {
+ $response->setError(400, 'invalid_scope', 'An unsupported scope was requested');
+
+ return null;
+ }
+ }
+ } elseif ($availableScope) {
+ // use the scope associated with this grant type
+ $requestedScope = $availableScope;
+ } else {
+ // use a globally-defined default scope
+ $defaultScope = $this->scopeUtil->getDefaultScope($clientId);
+
+ // "false" means default scopes are not allowed
+ if (false === $defaultScope) {
+ $response->setError(400, 'invalid_scope', 'This application requires you specify a scope parameter');
+
+ return null;
+ }
+
+ $requestedScope = $defaultScope;
+ }
+
+ return $grantType->createAccessToken($this->accessToken, $clientId, $grantType->getUserId(), $requestedScope);
+ }
+
+ /**
+ * Add grant type
+ *
+ * @param GrantTypeInterface $grantType - the grant type to add for the specified identifier
+ * @param string|null $identifier - a string passed in as "grant_type" in the response that will call this grantType
+ */
+ public function addGrantType(GrantTypeInterface $grantType, $identifier = null)
+ {
+ if (is_null($identifier) || is_numeric($identifier)) {
+ $identifier = $grantType->getQueryStringIdentifier();
+ }
+
+ $this->grantTypes[$identifier] = $grantType;
+ }
+
+ /**
+ * @param RequestInterface $request
+ * @param ResponseInterface $response
+ */
+ public function handleRevokeRequest(RequestInterface $request, ResponseInterface $response)
+ {
+ if ($this->revokeToken($request, $response)) {
+ $response->setStatusCode(200);
+ $response->addParameters(array('revoked' => true));
+ }
+ }
+
+ /**
+ * Revoke a refresh or access token. Returns true on success and when tokens are invalid
+ *
+ * Note: invalid tokens do not cause an error response since the client
+ * cannot handle such an error in a reasonable way. Moreover, the
+ * purpose of the revocation request, invalidating the particular token,
+ * is already achieved.
+ *
+ * @param RequestInterface $request
+ * @param ResponseInterface $response
+ * @throws RuntimeException
+ * @return bool|null
+ */
+ public function revokeToken(RequestInterface $request, ResponseInterface $response)
+ {
+ if (strtolower($request->server('REQUEST_METHOD')) === 'options') {
+ $response->addHttpHeaders(array('Allow' => 'POST, OPTIONS'));
+
+ return null;
+ }
+
+ if (strtolower($request->server('REQUEST_METHOD')) !== 'post') {
+ $response->setError(405, 'invalid_request', 'The request method must be POST when revoking an access token', '#section-3.2');
+ $response->addHttpHeaders(array('Allow' => 'POST, OPTIONS'));
+
+ return null;
+ }
+
+ $token_type_hint = $request->request('token_type_hint');
+ if (!in_array($token_type_hint, array(null, 'access_token', 'refresh_token'), true)) {
+ $response->setError(400, 'invalid_request', 'Token type hint must be either \'access_token\' or \'refresh_token\'');
+
+ return null;
+ }
+
+ $token = $request->request('token');
+ if ($token === null) {
+ $response->setError(400, 'invalid_request', 'Missing token parameter to revoke');
+
+ return null;
+ }
+
+ // @todo remove this check for v2.0
+ if (!method_exists($this->accessToken, 'revokeToken')) {
+ $class = get_class($this->accessToken);
+ throw new RuntimeException("AccessToken {$class} does not implement required revokeToken method");
+ }
+
+ $this->accessToken->revokeToken($token, $token_type_hint);
+
+ return true;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/TokenControllerInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/TokenControllerInterface.php
new file mode 100644
index 0000000..2f83ce4
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/TokenControllerInterface.php
@@ -0,0 +1,39 @@
+<?php
+
+namespace OAuth2\Controller;
+
+use OAuth2\RequestInterface;
+use OAuth2\ResponseInterface;
+
+/**
+ * This controller is called when a token is being requested.
+ * it is called to handle all grant types the application supports.
+ * It also validates the client's credentials
+ *
+ * @code
+ * $tokenController->handleTokenRequest(OAuth2\Request::createFromGlobals(), $response = new OAuth2\Response());
+ * $response->send();
+ * @endcode
+ */
+interface TokenControllerInterface
+{
+ /**
+ * Handle the token request
+ *
+ * @param RequestInterface $request - The current http request
+ * @param ResponseInterface $response - An instance of OAuth2\ResponseInterface to contain the response data
+ */
+ public function handleTokenRequest(RequestInterface $request, ResponseInterface $response);
+
+ /**
+ * Grant or deny a requested access token.
+ * This would be called from the "/token" endpoint as defined in the spec.
+ * You can call your endpoint whatever you want.
+ *
+ * @param RequestInterface $request - Request object to grant access token
+ * @param ResponseInterface $response - Response object
+ *
+ * @return mixed
+ */
+ public function grantAccessToken(RequestInterface $request, ResponseInterface $response);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Encryption/EncryptionInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Encryption/EncryptionInterface.php
new file mode 100644
index 0000000..8dc720a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Encryption/EncryptionInterface.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace OAuth2\Encryption;
+
+interface EncryptionInterface
+{
+ /**
+ * @param $payload
+ * @param $key
+ * @param null $algorithm
+ * @return mixed
+ */
+ public function encode($payload, $key, $algorithm = null);
+
+ /**
+ * @param $payload
+ * @param $key
+ * @param null $algorithm
+ * @return mixed
+ */
+ public function decode($payload, $key, $algorithm = null);
+
+ /**
+ * @param $data
+ * @return mixed
+ */
+ public function urlSafeB64Encode($data);
+
+ /**
+ * @param $b64
+ * @return mixed
+ */
+ public function urlSafeB64Decode($b64);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Encryption/FirebaseJwt.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Encryption/FirebaseJwt.php
new file mode 100644
index 0000000..1b527e0
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Encryption/FirebaseJwt.php
@@ -0,0 +1,47 @@
+<?php
+
+namespace OAuth2\Encryption;
+
+/**
+ * Bridge file to use the firebase/php-jwt package for JWT encoding and decoding.
+ * @author Francis Chuang <francis.chuang@gmail.com>
+ */
+class FirebaseJwt implements EncryptionInterface
+{
+ public function __construct()
+ {
+ if (!class_exists('\JWT')) {
+ throw new \ErrorException('firebase/php-jwt must be installed to use this feature. You can do this by running "composer require firebase/php-jwt"');
+ }
+ }
+
+ public function encode($payload, $key, $alg = 'HS256', $keyId = null)
+ {
+ return \JWT::encode($payload, $key, $alg, $keyId);
+ }
+
+ public function decode($jwt, $key = null, $allowedAlgorithms = null)
+ {
+ try {
+
+ //Maintain BC: Do not verify if no algorithms are passed in.
+ if (!$allowedAlgorithms) {
+ $key = null;
+ }
+
+ return (array)\JWT::decode($jwt, $key, $allowedAlgorithms);
+ } catch (\Exception $e) {
+ return false;
+ }
+ }
+
+ public function urlSafeB64Encode($data)
+ {
+ return \JWT::urlsafeB64Encode($data);
+ }
+
+ public function urlSafeB64Decode($b64)
+ {
+ return \JWT::urlsafeB64Decode($b64);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Encryption/Jwt.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Encryption/Jwt.php
new file mode 100644
index 0000000..c258b8f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Encryption/Jwt.php
@@ -0,0 +1,223 @@
+<?php
+
+namespace OAuth2\Encryption;
+
+use Exception;
+use InvalidArgumentException;
+
+/**
+ * @link https://github.com/F21/jwt
+ * @author F21
+ */
+class Jwt implements EncryptionInterface
+{
+ /**
+ * @param $payload
+ * @param $key
+ * @param string $algo
+ * @return string
+ */
+ public function encode($payload, $key, $algo = 'HS256')
+ {
+ $header = $this->generateJwtHeader($payload, $algo);
+
+ $segments = array(
+ $this->urlSafeB64Encode(json_encode($header)),
+ $this->urlSafeB64Encode(json_encode($payload))
+ );
+
+ $signing_input = implode('.', $segments);
+
+ $signature = $this->sign($signing_input, $key, $algo);
+ $segments[] = $this->urlsafeB64Encode($signature);
+
+ return implode('.', $segments);
+ }
+
+ /**
+ * @param string $jwt
+ * @param null $key
+ * @param array|bool $allowedAlgorithms
+ * @return bool|mixed
+ */
+ public function decode($jwt, $key = null, $allowedAlgorithms = true)
+ {
+ if (!strpos($jwt, '.')) {
+ return false;
+ }
+
+ $tks = explode('.', $jwt);
+
+ if (count($tks) != 3) {
+ return false;
+ }
+
+ list($headb64, $payloadb64, $cryptob64) = $tks;
+
+ if (null === ($header = json_decode($this->urlSafeB64Decode($headb64), true))) {
+ return false;
+ }
+
+ if (null === $payload = json_decode($this->urlSafeB64Decode($payloadb64), true)) {
+ return false;
+ }
+
+ $sig = $this->urlSafeB64Decode($cryptob64);
+
+ if ((bool) $allowedAlgorithms) {
+ if (!isset($header['alg'])) {
+ return false;
+ }
+
+ // check if bool arg supplied here to maintain BC
+ if (is_array($allowedAlgorithms) && !in_array($header['alg'], $allowedAlgorithms)) {
+ return false;
+ }
+
+ if (!$this->verifySignature($sig, "$headb64.$payloadb64", $key, $header['alg'])) {
+ return false;
+ }
+ }
+
+ return $payload;
+ }
+
+ /**
+ * @param $signature
+ * @param $input
+ * @param $key
+ * @param string $algo
+ * @return bool
+ * @throws InvalidArgumentException
+ */
+ private function verifySignature($signature, $input, $key, $algo = 'HS256')
+ {
+ // use constants when possible, for HipHop support
+ switch ($algo) {
+ case'HS256':
+ case'HS384':
+ case'HS512':
+ return $this->hash_equals(
+ $this->sign($input, $key, $algo),
+ $signature
+ );
+
+ case 'RS256':
+ return openssl_verify($input, $signature, $key, defined('OPENSSL_ALGO_SHA256') ? OPENSSL_ALGO_SHA256 : 'sha256') === 1;
+
+ case 'RS384':
+ return @openssl_verify($input, $signature, $key, defined('OPENSSL_ALGO_SHA384') ? OPENSSL_ALGO_SHA384 : 'sha384') === 1;
+
+ case 'RS512':
+ return @openssl_verify($input, $signature, $key, defined('OPENSSL_ALGO_SHA512') ? OPENSSL_ALGO_SHA512 : 'sha512') === 1;
+
+ default:
+ throw new InvalidArgumentException("Unsupported or invalid signing algorithm.");
+ }
+ }
+
+ /**
+ * @param $input
+ * @param $key
+ * @param string $algo
+ * @return string
+ * @throws Exception
+ */
+ private function sign($input, $key, $algo = 'HS256')
+ {
+ switch ($algo) {
+ case 'HS256':
+ return hash_hmac('sha256', $input, $key, true);
+
+ case 'HS384':
+ return hash_hmac('sha384', $input, $key, true);
+
+ case 'HS512':
+ return hash_hmac('sha512', $input, $key, true);
+
+ case 'RS256':
+ return $this->generateRSASignature($input, $key, defined('OPENSSL_ALGO_SHA256') ? OPENSSL_ALGO_SHA256 : 'sha256');
+
+ case 'RS384':
+ return $this->generateRSASignature($input, $key, defined('OPENSSL_ALGO_SHA384') ? OPENSSL_ALGO_SHA384 : 'sha384');
+
+ case 'RS512':
+ return $this->generateRSASignature($input, $key, defined('OPENSSL_ALGO_SHA512') ? OPENSSL_ALGO_SHA512 : 'sha512');
+
+ default:
+ throw new Exception("Unsupported or invalid signing algorithm.");
+ }
+ }
+
+ /**
+ * @param $input
+ * @param $key
+ * @param string $algo
+ * @return mixed
+ * @throws Exception
+ */
+ private function generateRSASignature($input, $key, $algo)
+ {
+ if (!openssl_sign($input, $signature, $key, $algo)) {
+ throw new Exception("Unable to sign data.");
+ }
+
+ return $signature;
+ }
+
+ /**
+ * @param string $data
+ * @return string
+ */
+ public function urlSafeB64Encode($data)
+ {
+ $b64 = base64_encode($data);
+ $b64 = str_replace(array('+', '/', "\r", "\n", '='),
+ array('-', '_'),
+ $b64);
+
+ return $b64;
+ }
+
+ /**
+ * @param string $b64
+ * @return mixed|string
+ */
+ public function urlSafeB64Decode($b64)
+ {
+ $b64 = str_replace(array('-', '_'),
+ array('+', '/'),
+ $b64);
+
+ return base64_decode($b64);
+ }
+
+ /**
+ * Override to create a custom header
+ */
+ protected function generateJwtHeader($payload, $algorithm)
+ {
+ return array(
+ 'typ' => 'JWT',
+ 'alg' => $algorithm,
+ );
+ }
+
+ /**
+ * @param string $a
+ * @param string $b
+ * @return bool
+ */
+ protected function hash_equals($a, $b)
+ {
+ if (function_exists('hash_equals')) {
+ return hash_equals($a, $b);
+ }
+ $diff = strlen($a) ^ strlen($b);
+ for ($i = 0; $i < strlen($a) && $i < strlen($b); $i++) {
+ $diff |= ord($a[$i]) ^ ord($b[$i]);
+ }
+
+ return $diff === 0;
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/AuthorizationCode.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/AuthorizationCode.php
new file mode 100644
index 0000000..784f6b3
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/AuthorizationCode.php
@@ -0,0 +1,142 @@
+<?php
+
+namespace OAuth2\GrantType;
+
+use OAuth2\Storage\AuthorizationCodeInterface;
+use OAuth2\ResponseType\AccessTokenInterface;
+use OAuth2\RequestInterface;
+use OAuth2\ResponseInterface;
+use Exception;
+
+/**
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+class AuthorizationCode implements GrantTypeInterface
+{
+ /**
+ * @var AuthorizationCodeInterface
+ */
+ protected $storage;
+
+ /**
+ * @var array
+ */
+ protected $authCode;
+
+ /**
+ * @param AuthorizationCodeInterface $storage - REQUIRED Storage class for retrieving authorization code information
+ */
+ public function __construct(AuthorizationCodeInterface $storage)
+ {
+ $this->storage = $storage;
+ }
+
+ /**
+ * @return string
+ */
+ public function getQueryStringIdentifier()
+ {
+ return 'authorization_code';
+ }
+
+ /**
+ * Validate the OAuth request
+ *
+ * @param RequestInterface $request
+ * @param ResponseInterface $response
+ * @return bool
+ * @throws Exception
+ */
+ public function validateRequest(RequestInterface $request, ResponseInterface $response)
+ {
+ if (!$request->request('code')) {
+ $response->setError(400, 'invalid_request', 'Missing parameter: "code" is required');
+
+ return false;
+ }
+
+ $code = $request->request('code');
+ if (!$authCode = $this->storage->getAuthorizationCode($code)) {
+ $response->setError(400, 'invalid_grant', 'Authorization code doesn\'t exist or is invalid for the client');
+
+ return false;
+ }
+
+ /*
+ * 4.1.3 - ensure that the "redirect_uri" parameter is present if the "redirect_uri" parameter was included in the initial authorization request
+ * @uri - http://tools.ietf.org/html/rfc6749#section-4.1.3
+ */
+ if (isset($authCode['redirect_uri']) && $authCode['redirect_uri']) {
+ if (!$request->request('redirect_uri') || urldecode($request->request('redirect_uri')) != urldecode($authCode['redirect_uri'])) {
+ $response->setError(400, 'redirect_uri_mismatch', "The redirect URI is missing or do not match", "#section-4.1.3");
+
+ return false;
+ }
+ }
+
+ if (!isset($authCode['expires'])) {
+ throw new \Exception('Storage must return authcode with a value for "expires"');
+ }
+
+ if ($authCode["expires"] < time()) {
+ $response->setError(400, 'invalid_grant', "The authorization code has expired");
+
+ return false;
+ }
+
+ if (!isset($authCode['code'])) {
+ $authCode['code'] = $code; // used to expire the code after the access token is granted
+ }
+
+ $this->authCode = $authCode;
+
+ return true;
+ }
+
+ /**
+ * Get the client id
+ *
+ * @return mixed
+ */
+ public function getClientId()
+ {
+ return $this->authCode['client_id'];
+ }
+
+ /**
+ * Get the scope
+ *
+ * @return string
+ */
+ public function getScope()
+ {
+ return isset($this->authCode['scope']) ? $this->authCode['scope'] : null;
+ }
+
+ /**
+ * Get the user id
+ *
+ * @return mixed
+ */
+ public function getUserId()
+ {
+ return isset($this->authCode['user_id']) ? $this->authCode['user_id'] : null;
+ }
+
+ /**
+ * Create access token
+ *
+ * @param AccessTokenInterface $accessToken
+ * @param mixed $client_id - client identifier related to the access token.
+ * @param mixed $user_id - user id associated with the access token
+ * @param string $scope - scopes to be stored in space-separated string.
+ * @return array
+ */
+ public function createAccessToken(AccessTokenInterface $accessToken, $client_id, $user_id, $scope)
+ {
+ $token = $accessToken->createAccessToken($client_id, $user_id, $scope);
+ $this->storage->expireAuthorizationCode($this->authCode['code']);
+
+ return $token;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/ClientCredentials.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/ClientCredentials.php
new file mode 100644
index 0000000..e135c2d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/ClientCredentials.php
@@ -0,0 +1,98 @@
+<?php
+
+namespace OAuth2\GrantType;
+
+use OAuth2\ClientAssertionType\HttpBasic;
+use OAuth2\ResponseType\AccessTokenInterface;
+use OAuth2\Storage\ClientCredentialsInterface;
+
+/**
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ *
+ * @see HttpBasic
+ */
+class ClientCredentials extends HttpBasic implements GrantTypeInterface
+{
+ /**
+ * @var array
+ */
+ private $clientData;
+
+ /**
+ * @param ClientCredentialsInterface $storage
+ * @param array $config
+ */
+ public function __construct(ClientCredentialsInterface $storage, array $config = array())
+ {
+ /**
+ * The client credentials grant type MUST only be used by confidential clients
+ *
+ * @see http://tools.ietf.org/html/rfc6749#section-4.4
+ */
+ $config['allow_public_clients'] = false;
+
+ parent::__construct($storage, $config);
+ }
+
+ /**
+ * Get query string identifier
+ *
+ * @return string
+ */
+ public function getQueryStringIdentifier()
+ {
+ return 'client_credentials';
+ }
+
+ /**
+ * Get scope
+ *
+ * @return string|null
+ */
+ public function getScope()
+ {
+ $this->loadClientData();
+
+ return isset($this->clientData['scope']) ? $this->clientData['scope'] : null;
+ }
+
+ /**
+ * Get user id
+ *
+ * @return mixed
+ */
+ public function getUserId()
+ {
+ $this->loadClientData();
+
+ return isset($this->clientData['user_id']) ? $this->clientData['user_id'] : null;
+ }
+
+ /**
+ * Create access token
+ *
+ * @param AccessTokenInterface $accessToken
+ * @param mixed $client_id - client identifier related to the access token.
+ * @param mixed $user_id - user id associated with the access token
+ * @param string $scope - scopes to be stored in space-separated string.
+ * @return array
+ */
+ public function createAccessToken(AccessTokenInterface $accessToken, $client_id, $user_id, $scope)
+ {
+ /**
+ * Client Credentials Grant does NOT include a refresh token
+ *
+ * @see http://tools.ietf.org/html/rfc6749#section-4.4.3
+ */
+ $includeRefreshToken = false;
+
+ return $accessToken->createAccessToken($client_id, $user_id, $scope, $includeRefreshToken);
+ }
+
+ private function loadClientData()
+ {
+ if (!$this->clientData) {
+ $this->clientData = $this->storage->getClientDetails($this->getClientId());
+ }
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/GrantTypeInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/GrantTypeInterface.php
new file mode 100644
index 0000000..f45786f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/GrantTypeInterface.php
@@ -0,0 +1,59 @@
+<?php
+
+namespace OAuth2\GrantType;
+
+use OAuth2\ResponseType\AccessTokenInterface;
+use OAuth2\RequestInterface;
+use OAuth2\ResponseInterface;
+
+/**
+ * Interface for all OAuth2 Grant Types
+ */
+interface GrantTypeInterface
+{
+ /**
+ * Get query string identifier
+ *
+ * @return string
+ */
+ public function getQueryStringIdentifier();
+
+ /**
+ * @param RequestInterface $request
+ * @param ResponseInterface $response
+ * @return mixed
+ */
+ public function validateRequest(RequestInterface $request, ResponseInterface $response);
+
+ /**
+ * Get client id
+ *
+ * @return mixed
+ */
+ public function getClientId();
+
+ /**
+ * Get user id
+ *
+ * @return mixed
+ */
+ public function getUserId();
+
+ /**
+ * Get scope
+ *
+ * @return string|null
+ */
+ public function getScope();
+
+ /**
+ * Create access token
+ *
+ * @param AccessTokenInterface $accessToken
+ * @param mixed $client_id - client identifier related to the access token.
+ * @param mixed $user_id - user id associated with the access token
+ * @param string $scope - scopes to be stored in space-separated string.
+ * @return array
+ */
+ public function createAccessToken(AccessTokenInterface $accessToken, $client_id, $user_id, $scope);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/JwtBearer.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/JwtBearer.php
new file mode 100644
index 0000000..62c1efa
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/JwtBearer.php
@@ -0,0 +1,247 @@
+<?php
+
+namespace OAuth2\GrantType;
+
+use OAuth2\ClientAssertionType\ClientAssertionTypeInterface;
+use OAuth2\Storage\JwtBearerInterface;
+use OAuth2\Encryption\Jwt;
+use OAuth2\Encryption\EncryptionInterface;
+use OAuth2\ResponseType\AccessTokenInterface;
+use OAuth2\RequestInterface;
+use OAuth2\ResponseInterface;
+
+/**
+ * The JWT bearer authorization grant implements JWT (JSON Web Tokens) as a grant type per the IETF draft.
+ *
+ * @see http://tools.ietf.org/html/draft-ietf-oauth-jwt-bearer-04#section-4
+ *
+ * @author F21
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+class JwtBearer implements GrantTypeInterface, ClientAssertionTypeInterface
+{
+ private $jwt;
+
+ protected $storage;
+ protected $audience;
+ protected $jwtUtil;
+ protected $allowedAlgorithms;
+
+ /**
+ * Creates an instance of the JWT bearer grant type.
+ *
+ * @param JwtBearerInterface $storage - A valid storage interface that implements storage hooks for the JWT
+ * bearer grant type.
+ * @param string $audience - The audience to validate the token against. This is usually the full
+ * URI of the OAuth token requests endpoint.
+ * @param EncryptionInterface|JWT $jwtUtil - OPTONAL The class used to decode, encode and verify JWTs.
+ * @param array $config
+ */
+ public function __construct(JwtBearerInterface $storage, $audience, EncryptionInterface $jwtUtil = null, array $config = array())
+ {
+ $this->storage = $storage;
+ $this->audience = $audience;
+
+ if (is_null($jwtUtil)) {
+ $jwtUtil = new Jwt();
+ }
+
+ $this->config = array_merge(array(
+ 'allowed_algorithms' => array('RS256', 'RS384', 'RS512')
+ ), $config);
+
+ $this->jwtUtil = $jwtUtil;
+
+ $this->allowedAlgorithms = $this->config['allowed_algorithms'];
+ }
+
+ /**
+ * Returns the grant_type get parameter to identify the grant type request as JWT bearer authorization grant.
+ *
+ * @return string - The string identifier for grant_type.
+ *
+ * @see GrantTypeInterface::getQueryStringIdentifier()
+ */
+ public function getQueryStringIdentifier()
+ {
+ return 'urn:ietf:params:oauth:grant-type:jwt-bearer';
+ }
+
+ /**
+ * Validates the data from the decoded JWT.
+ *
+ * @param RequestInterface $request
+ * @param ResponseInterface $response
+ * @return bool|mixed|null TRUE if the JWT request is valid and can be decoded. Otherwise, FALSE is returned.@see GrantTypeInterface::getTokenData()
+ */
+ public function validateRequest(RequestInterface $request, ResponseInterface $response)
+ {
+ if (!$request->request("assertion")) {
+ $response->setError(400, 'invalid_request', 'Missing parameters: "assertion" required');
+
+ return null;
+ }
+
+ // Store the undecoded JWT for later use
+ $undecodedJWT = $request->request('assertion');
+
+ // Decode the JWT
+ $jwt = $this->jwtUtil->decode($request->request('assertion'), null, false);
+
+ if (!$jwt) {
+ $response->setError(400, 'invalid_request', "JWT is malformed");
+
+ return null;
+ }
+
+ // ensure these properties contain a value
+ // @todo: throw malformed error for missing properties
+ $jwt = array_merge(array(
+ 'scope' => null,
+ 'iss' => null,
+ 'sub' => null,
+ 'aud' => null,
+ 'exp' => null,
+ 'nbf' => null,
+ 'iat' => null,
+ 'jti' => null,
+ 'typ' => null,
+ ), $jwt);
+
+ if (!isset($jwt['iss'])) {
+ $response->setError(400, 'invalid_grant', "Invalid issuer (iss) provided");
+
+ return null;
+ }
+
+ if (!isset($jwt['sub'])) {
+ $response->setError(400, 'invalid_grant', "Invalid subject (sub) provided");
+
+ return null;
+ }
+
+ if (!isset($jwt['exp'])) {
+ $response->setError(400, 'invalid_grant', "Expiration (exp) time must be present");
+
+ return null;
+ }
+
+ // Check expiration
+ if (ctype_digit($jwt['exp'])) {
+ if ($jwt['exp'] <= time()) {
+ $response->setError(400, 'invalid_grant', "JWT has expired");
+
+ return null;
+ }
+ } else {
+ $response->setError(400, 'invalid_grant', "Expiration (exp) time must be a unix time stamp");
+
+ return null;
+ }
+
+ // Check the not before time
+ if ($notBefore = $jwt['nbf']) {
+ if (ctype_digit($notBefore)) {
+ if ($notBefore > time()) {
+ $response->setError(400, 'invalid_grant', "JWT cannot be used before the Not Before (nbf) time");
+
+ return null;
+ }
+ } else {
+ $response->setError(400, 'invalid_grant', "Not Before (nbf) time must be a unix time stamp");
+
+ return null;
+ }
+ }
+
+ // Check the audience if required to match
+ if (!isset($jwt['aud']) || ($jwt['aud'] != $this->audience)) {
+ $response->setError(400, 'invalid_grant', "Invalid audience (aud)");
+
+ return null;
+ }
+
+ // Check the jti (nonce)
+ // @see http://tools.ietf.org/html/draft-ietf-oauth-json-web-token-13#section-4.1.7
+ if (isset($jwt['jti'])) {
+ $jti = $this->storage->getJti($jwt['iss'], $jwt['sub'], $jwt['aud'], $jwt['exp'], $jwt['jti']);
+
+ //Reject if jti is used and jwt is still valid (exp parameter has not expired).
+ if ($jti && $jti['expires'] > time()) {
+ $response->setError(400, 'invalid_grant', "JSON Token Identifier (jti) has already been used");
+
+ return null;
+ } else {
+ $this->storage->setJti($jwt['iss'], $jwt['sub'], $jwt['aud'], $jwt['exp'], $jwt['jti']);
+ }
+ }
+
+ // Get the iss's public key
+ // @see http://tools.ietf.org/html/draft-ietf-oauth-json-web-token-06#section-4.1.1
+ if (!$key = $this->storage->getClientKey($jwt['iss'], $jwt['sub'])) {
+ $response->setError(400, 'invalid_grant', "Invalid issuer (iss) or subject (sub) provided");
+
+ return null;
+ }
+
+ // Verify the JWT
+ if (!$this->jwtUtil->decode($undecodedJWT, $key, $this->allowedAlgorithms)) {
+ $response->setError(400, 'invalid_grant', "JWT failed signature verification");
+
+ return null;
+ }
+
+ $this->jwt = $jwt;
+
+ return true;
+ }
+
+ /**
+ * Get client id
+ *
+ * @return mixed
+ */
+ public function getClientId()
+ {
+ return $this->jwt['iss'];
+ }
+
+ /**
+ * Get user id
+ *
+ * @return mixed
+ */
+ public function getUserId()
+ {
+ return $this->jwt['sub'];
+ }
+
+ /**
+ * Get scope
+ *
+ * @return null
+ */
+ public function getScope()
+ {
+ return null;
+ }
+
+ /**
+ * Creates an access token that is NOT associated with a refresh token.
+ * If a subject (sub) the name of the user/account we are accessing data on behalf of.
+ *
+ * @see GrantTypeInterface::createAccessToken()
+ *
+ * @param AccessTokenInterface $accessToken
+ * @param mixed $client_id - client identifier related to the access token.
+ * @param mixed $user_id - user id associated with the access token
+ * @param string $scope - scopes to be stored in space-separated string.
+ * @return array
+ */
+ public function createAccessToken(AccessTokenInterface $accessToken, $client_id, $user_id, $scope)
+ {
+ $includeRefreshToken = false;
+
+ return $accessToken->createAccessToken($client_id, $user_id, $scope, $includeRefreshToken);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/RefreshToken.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/RefreshToken.php
new file mode 100644
index 0000000..75c611f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/RefreshToken.php
@@ -0,0 +1,154 @@
+<?php
+
+namespace OAuth2\GrantType;
+
+use OAuth2\Storage\RefreshTokenInterface;
+use OAuth2\ResponseType\AccessTokenInterface;
+use OAuth2\RequestInterface;
+use OAuth2\ResponseInterface;
+
+/**
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+class RefreshToken implements GrantTypeInterface
+{
+ /**
+ * @var array
+ */
+ private $refreshToken;
+
+ /**
+ * @var RefreshTokenInterface
+ */
+ protected $storage;
+
+ /**
+ * @var array
+ */
+ protected $config;
+
+ /**
+ * @param RefreshTokenInterface $storage - REQUIRED Storage class for retrieving refresh token information
+ * @param array $config - OPTIONAL Configuration options for the server
+ * @code
+ * $config = array(
+ * 'always_issue_new_refresh_token' => true, // whether to issue a new refresh token upon successful token request
+ * 'unset_refresh_token_after_use' => true // whether to unset the refresh token after after using
+ * );
+ * @endcode
+ */
+ public function __construct(RefreshTokenInterface $storage, $config = array())
+ {
+ $this->config = array_merge(array(
+ 'always_issue_new_refresh_token' => false,
+ 'unset_refresh_token_after_use' => true
+ ), $config);
+
+ // to preserve B.C. with v1.6
+ // @see https://github.com/bshaffer/oauth2-server-php/pull/580
+ // @todo - remove in v2.0
+ if (isset($config['always_issue_new_refresh_token']) && !isset($config['unset_refresh_token_after_use'])) {
+ $this->config['unset_refresh_token_after_use'] = $config['always_issue_new_refresh_token'];
+ }
+
+ $this->storage = $storage;
+ }
+
+ /**
+ * @return string
+ */
+ public function getQueryStringIdentifier()
+ {
+ return 'refresh_token';
+ }
+
+ /**
+ * Validate the OAuth request
+ *
+ * @param RequestInterface $request
+ * @param ResponseInterface $response
+ * @return bool|mixed|null
+ */
+ public function validateRequest(RequestInterface $request, ResponseInterface $response)
+ {
+ if (!$request->request("refresh_token")) {
+ $response->setError(400, 'invalid_request', 'Missing parameter: "refresh_token" is required');
+
+ return null;
+ }
+
+ if (!$refreshToken = $this->storage->getRefreshToken($request->request("refresh_token"))) {
+ $response->setError(400, 'invalid_grant', 'Invalid refresh token');
+
+ return null;
+ }
+
+ if ($refreshToken['expires'] > 0 && $refreshToken["expires"] < time()) {
+ $response->setError(400, 'invalid_grant', 'Refresh token has expired');
+
+ return null;
+ }
+
+ // store the refresh token locally so we can delete it when a new refresh token is generated
+ $this->refreshToken = $refreshToken;
+
+ return true;
+ }
+
+ /**
+ * Get client id
+ *
+ * @return mixed
+ */
+ public function getClientId()
+ {
+ return $this->refreshToken['client_id'];
+ }
+
+ /**
+ * Get user id
+ *
+ * @return mixed|null
+ */
+ public function getUserId()
+ {
+ return isset($this->refreshToken['user_id']) ? $this->refreshToken['user_id'] : null;
+ }
+
+ /**
+ * Get scope
+ *
+ * @return null|string
+ */
+ public function getScope()
+ {
+ return isset($this->refreshToken['scope']) ? $this->refreshToken['scope'] : null;
+ }
+
+ /**
+ * Create access token
+ *
+ * @param AccessTokenInterface $accessToken
+ * @param mixed $client_id - client identifier related to the access token.
+ * @param mixed $user_id - user id associated with the access token
+ * @param string $scope - scopes to be stored in space-separated string.
+ * @return array
+ */
+ public function createAccessToken(AccessTokenInterface $accessToken, $client_id, $user_id, $scope)
+ {
+ /*
+ * It is optional to force a new refresh token when a refresh token is used.
+ * However, if a new refresh token is issued, the old one MUST be expired
+ * @see http://tools.ietf.org/html/rfc6749#section-6
+ */
+ $issueNewRefreshToken = $this->config['always_issue_new_refresh_token'];
+ $unsetRefreshToken = $this->config['unset_refresh_token_after_use'];
+ $token = $accessToken->createAccessToken($client_id, $user_id, $scope, $issueNewRefreshToken);
+
+ if ($unsetRefreshToken) {
+ $this->storage->unsetRefreshToken($this->refreshToken['refresh_token']);
+ }
+
+ return $token;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/UserCredentials.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/UserCredentials.php
new file mode 100644
index 0000000..b10c2dd
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/UserCredentials.php
@@ -0,0 +1,123 @@
+<?php
+
+namespace OAuth2\GrantType;
+
+use OAuth2\Storage\UserCredentialsInterface;
+use OAuth2\ResponseType\AccessTokenInterface;
+use OAuth2\RequestInterface;
+use OAuth2\ResponseInterface;
+use LogicException;
+
+/**
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+class UserCredentials implements GrantTypeInterface
+{
+ /**
+ * @var array
+ */
+ private $userInfo;
+
+ /**
+ * @var UserCredentialsInterface
+ */
+ protected $storage;
+
+ /**
+ * @param UserCredentialsInterface $storage - REQUIRED Storage class for retrieving user credentials information
+ */
+ public function __construct(UserCredentialsInterface $storage)
+ {
+ $this->storage = $storage;
+ }
+
+ /**
+ * @return string
+ */
+ public function getQueryStringIdentifier()
+ {
+ return 'password';
+ }
+
+ /**
+ * @param RequestInterface $request
+ * @param ResponseInterface $response
+ * @return bool|mixed|null
+ *
+ * @throws LogicException
+ */
+ public function validateRequest(RequestInterface $request, ResponseInterface $response)
+ {
+ if (!$request->request("password") || !$request->request("username")) {
+ $response->setError(400, 'invalid_request', 'Missing parameters: "username" and "password" required');
+
+ return null;
+ }
+
+ if (!$this->storage->checkUserCredentials($request->request("username"), $request->request("password"))) {
+ $response->setError(401, 'invalid_grant', 'Invalid username and password combination');
+
+ return null;
+ }
+
+ $userInfo = $this->storage->getUserDetails($request->request("username"));
+
+ if (empty($userInfo)) {
+ $response->setError(400, 'invalid_grant', 'Unable to retrieve user information');
+
+ return null;
+ }
+
+ if (!isset($userInfo['user_id'])) {
+ throw new \LogicException("you must set the user_id on the array returned by getUserDetails");
+ }
+
+ $this->userInfo = $userInfo;
+
+ return true;
+ }
+
+ /**
+ * Get client id
+ *
+ * @return mixed|null
+ */
+ public function getClientId()
+ {
+ return null;
+ }
+
+ /**
+ * Get user id
+ *
+ * @return mixed
+ */
+ public function getUserId()
+ {
+ return $this->userInfo['user_id'];
+ }
+
+ /**
+ * Get scope
+ *
+ * @return null|string
+ */
+ public function getScope()
+ {
+ return isset($this->userInfo['scope']) ? $this->userInfo['scope'] : null;
+ }
+
+ /**
+ * Create access token
+ *
+ * @param AccessTokenInterface $accessToken
+ * @param mixed $client_id - client identifier related to the access token.
+ * @param mixed $user_id - user id associated with the access token
+ * @param string $scope - scopes to be stored in space-separated string.
+ * @return array
+ */
+ public function createAccessToken(AccessTokenInterface $accessToken, $client_id, $user_id, $scope)
+ {
+ return $accessToken->createAccessToken($client_id, $user_id, $scope);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/AuthorizeController.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/AuthorizeController.php
new file mode 100644
index 0000000..54c5f9a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/AuthorizeController.php
@@ -0,0 +1,135 @@
+<?php
+
+namespace OAuth2\OpenID\Controller;
+
+use OAuth2\Controller\AuthorizeController as BaseAuthorizeController;
+use OAuth2\RequestInterface;
+use OAuth2\ResponseInterface;
+
+/**
+ * @see OAuth2\Controller\AuthorizeControllerInterface
+ */
+class AuthorizeController extends BaseAuthorizeController implements AuthorizeControllerInterface
+{
+ /**
+ * @var mixed
+ */
+ private $nonce;
+
+ /**
+ * Set not authorized response
+ *
+ * @param RequestInterface $request
+ * @param ResponseInterface $response
+ * @param string $redirect_uri
+ * @param null $user_id
+ */
+ protected function setNotAuthorizedResponse(RequestInterface $request, ResponseInterface $response, $redirect_uri, $user_id = null)
+ {
+ $prompt = $request->query('prompt', 'consent');
+ if ($prompt == 'none') {
+ if (is_null($user_id)) {
+ $error = 'login_required';
+ $error_message = 'The user must log in';
+ } else {
+ $error = 'interaction_required';
+ $error_message = 'The user must grant access to your application';
+ }
+ } else {
+ $error = 'consent_required';
+ $error_message = 'The user denied access to your application';
+ }
+
+ $response->setRedirect($this->config['redirect_status_code'], $redirect_uri, $this->getState(), $error, $error_message);
+ }
+
+ /**
+ * @TODO: add dependency injection for the parameters in this method
+ *
+ * @param RequestInterface $request
+ * @param ResponseInterface $response
+ * @param mixed $user_id
+ * @return array
+ */
+ protected function buildAuthorizeParameters($request, $response, $user_id)
+ {
+ if (!$params = parent::buildAuthorizeParameters($request, $response, $user_id)) {
+ return;
+ }
+
+ // Generate an id token if needed.
+ if ($this->needsIdToken($this->getScope()) && $this->getResponseType() == self::RESPONSE_TYPE_AUTHORIZATION_CODE) {
+ $params['id_token'] = $this->responseTypes['id_token']->createIdToken($this->getClientId(), $user_id, $this->nonce);
+ }
+
+ // add the nonce to return with the redirect URI
+ $params['nonce'] = $this->nonce;
+
+ return $params;
+ }
+
+ /**
+ * @param RequestInterface $request
+ * @param ResponseInterface $response
+ * @return bool
+ */
+ public function validateAuthorizeRequest(RequestInterface $request, ResponseInterface $response)
+ {
+ if (!parent::validateAuthorizeRequest($request, $response)) {
+ return false;
+ }
+
+ $nonce = $request->query('nonce');
+
+ // Validate required nonce for "id_token" and "id_token token"
+ if (!$nonce && in_array($this->getResponseType(), array(self::RESPONSE_TYPE_ID_TOKEN, self::RESPONSE_TYPE_ID_TOKEN_TOKEN))) {
+ $response->setError(400, 'invalid_nonce', 'This application requires you specify a nonce parameter');
+
+ return false;
+ }
+
+ $this->nonce = $nonce;
+
+ return true;
+ }
+
+ /**
+ * Array of valid response types
+ *
+ * @return array
+ */
+ protected function getValidResponseTypes()
+ {
+ return array(
+ self::RESPONSE_TYPE_ACCESS_TOKEN,
+ self::RESPONSE_TYPE_AUTHORIZATION_CODE,
+ self::RESPONSE_TYPE_ID_TOKEN,
+ self::RESPONSE_TYPE_ID_TOKEN_TOKEN,
+ self::RESPONSE_TYPE_CODE_ID_TOKEN,
+ );
+ }
+
+ /**
+ * Returns whether the current request needs to generate an id token.
+ *
+ * ID Tokens are a part of the OpenID Connect specification, so this
+ * method checks whether OpenID Connect is enabled in the server settings
+ * and whether the openid scope was requested.
+ *
+ * @param string $request_scope - A space-separated string of scopes.
+ * @return boolean - TRUE if an id token is needed, FALSE otherwise.
+ */
+ public function needsIdToken($request_scope)
+ {
+ // see if the "openid" scope exists in the requested scope
+ return $this->scopeUtil->checkScope('openid', $request_scope);
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getNonce()
+ {
+ return $this->nonce;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/AuthorizeControllerInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/AuthorizeControllerInterface.php
new file mode 100644
index 0000000..b4967c3
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/AuthorizeControllerInterface.php
@@ -0,0 +1,12 @@
+<?php
+
+namespace OAuth2\OpenID\Controller;
+
+interface AuthorizeControllerInterface
+{
+ const RESPONSE_TYPE_ID_TOKEN = 'id_token';
+
+ const RESPONSE_TYPE_ID_TOKEN_TOKEN = 'id_token token';
+
+ const RESPONSE_TYPE_CODE_ID_TOKEN = 'code id_token';
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/UserInfoController.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/UserInfoController.php
new file mode 100644
index 0000000..c489b7a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/UserInfoController.php
@@ -0,0 +1,62 @@
+<?php
+
+namespace OAuth2\OpenID\Controller;
+
+use OAuth2\Scope;
+use OAuth2\TokenType\TokenTypeInterface;
+use OAuth2\Storage\AccessTokenInterface;
+use OAuth2\OpenID\Storage\UserClaimsInterface;
+use OAuth2\Controller\ResourceController;
+use OAuth2\ScopeInterface;
+use OAuth2\RequestInterface;
+use OAuth2\ResponseInterface;
+
+/**
+ * @see OAuth2\Controller\UserInfoControllerInterface
+ */
+class UserInfoController extends ResourceController implements UserInfoControllerInterface
+{
+ /**
+ * @var UserClaimsInterface
+ */
+ protected $userClaimsStorage;
+
+ /**
+ * Constructor
+ *
+ * @param TokenTypeInterface $tokenType
+ * @param AccessTokenInterface $tokenStorage
+ * @param UserClaimsInterface $userClaimsStorage
+ * @param array $config
+ * @param ScopeInterface $scopeUtil
+ */
+ public function __construct(TokenTypeInterface $tokenType, AccessTokenInterface $tokenStorage, UserClaimsInterface $userClaimsStorage, $config = array(), ScopeInterface $scopeUtil = null)
+ {
+ parent::__construct($tokenType, $tokenStorage, $config, $scopeUtil);
+
+ $this->userClaimsStorage = $userClaimsStorage;
+ }
+
+ /**
+ * Handle the user info request
+ *
+ * @param RequestInterface $request
+ * @param ResponseInterface $response
+ * @return void
+ */
+ public function handleUserInfoRequest(RequestInterface $request, ResponseInterface $response)
+ {
+ if (!$this->verifyResourceRequest($request, $response, 'openid')) {
+ return;
+ }
+
+ $token = $this->getToken();
+ $claims = $this->userClaimsStorage->getUserClaims($token['user_id'], $token['scope']);
+ // The sub Claim MUST always be returned in the UserInfo Response.
+ // http://openid.net/specs/openid-connect-core-1_0.html#UserInfoResponse
+ $claims += array(
+ 'sub' => $token['user_id'],
+ );
+ $response->addParameters($claims);
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/UserInfoControllerInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/UserInfoControllerInterface.php
new file mode 100644
index 0000000..88e9228
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/UserInfoControllerInterface.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace OAuth2\OpenID\Controller;
+
+use OAuth2\RequestInterface;
+use OAuth2\ResponseInterface;
+
+/**
+ * This controller is called when the user claims for OpenID Connect's
+ * UserInfo endpoint should be returned.
+ *
+ * @code
+ * $response = new OAuth2\Response();
+ * $userInfoController->handleUserInfoRequest(
+ * OAuth2\Request::createFromGlobals(),
+ * $response
+ * );
+ * $response->send();
+ * @endcode
+ */
+interface UserInfoControllerInterface
+{
+ /**
+ * Handle user info request
+ *
+ * @param RequestInterface $request
+ * @param ResponseInterface $response
+ */
+ public function handleUserInfoRequest(RequestInterface $request, ResponseInterface $response);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/GrantType/AuthorizationCode.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/GrantType/AuthorizationCode.php
new file mode 100644
index 0000000..ee113a0
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/GrantType/AuthorizationCode.php
@@ -0,0 +1,41 @@
+<?php
+
+namespace OAuth2\OpenID\GrantType;
+
+use OAuth2\GrantType\AuthorizationCode as BaseAuthorizationCode;
+use OAuth2\ResponseType\AccessTokenInterface;
+
+/**
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+class AuthorizationCode extends BaseAuthorizationCode
+{
+ /**
+ * Create access token
+ *
+ * @param AccessTokenInterface $accessToken
+ * @param mixed $client_id - client identifier related to the access token.
+ * @param mixed $user_id - user id associated with the access token
+ * @param string $scope - scopes to be stored in space-separated string.
+ * @return array
+ */
+ public function createAccessToken(AccessTokenInterface $accessToken, $client_id, $user_id, $scope)
+ {
+ $includeRefreshToken = true;
+ if (isset($this->authCode['id_token'])) {
+ // OpenID Connect requests include the refresh token only if the
+ // offline_access scope has been requested and granted.
+ $scopes = explode(' ', trim($scope));
+ $includeRefreshToken = in_array('offline_access', $scopes);
+ }
+
+ $token = $accessToken->createAccessToken($client_id, $user_id, $scope, $includeRefreshToken);
+ if (isset($this->authCode['id_token'])) {
+ $token['id_token'] = $this->authCode['id_token'];
+ }
+
+ $this->storage->expireAuthorizationCode($this->authCode['code']);
+
+ return $token;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/AuthorizationCode.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/AuthorizationCode.php
new file mode 100644
index 0000000..b8ad41f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/AuthorizationCode.php
@@ -0,0 +1,66 @@
+<?php
+
+namespace OAuth2\OpenID\ResponseType;
+
+use OAuth2\ResponseType\AuthorizationCode as BaseAuthorizationCode;
+use OAuth2\OpenID\Storage\AuthorizationCodeInterface as AuthorizationCodeStorageInterface;
+
+/**
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+class AuthorizationCode extends BaseAuthorizationCode implements AuthorizationCodeInterface
+{
+ /**
+ * Constructor
+ *
+ * @param AuthorizationCodeStorageInterface $storage
+ * @param array $config
+ */
+ public function __construct(AuthorizationCodeStorageInterface $storage, array $config = array())
+ {
+ parent::__construct($storage, $config);
+ }
+
+ /**
+ * @param $params
+ * @param null $user_id
+ * @return array
+ */
+ public function getAuthorizeResponse($params, $user_id = null)
+ {
+ // build the URL to redirect to
+ $result = array('query' => array());
+
+ $params += array('scope' => null, 'state' => null, 'id_token' => null);
+
+ $result['query']['code'] = $this->createAuthorizationCode($params['client_id'], $user_id, $params['redirect_uri'], $params['scope'], $params['id_token']);
+
+ if (isset($params['state'])) {
+ $result['query']['state'] = $params['state'];
+ }
+
+ return array($params['redirect_uri'], $result);
+ }
+
+ /**
+ * Handle the creation of the authorization code.
+ *
+ * @param mixed $client_id - Client identifier related to the authorization code
+ * @param mixed $user_id - User ID associated with the authorization code
+ * @param string $redirect_uri - An absolute URI to which the authorization server will redirect the
+ * user-agent to when the end-user authorization step is completed.
+ * @param string $scope - OPTIONAL Scopes to be stored in space-separated string.
+ * @param string $id_token - OPTIONAL The OpenID Connect id_token.
+ *
+ * @return string
+ * @see http://tools.ietf.org/html/rfc6749#section-4
+ * @ingroup oauth2_section_4
+ */
+ public function createAuthorizationCode($client_id, $user_id, $redirect_uri, $scope = null, $id_token = null)
+ {
+ $code = $this->generateAuthorizationCode();
+ $this->storage->setAuthorizationCode($code, $client_id, $user_id, $redirect_uri, time() + $this->config['auth_code_lifetime'], $scope, $id_token);
+
+ return $code;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/AuthorizationCodeInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/AuthorizationCodeInterface.php
new file mode 100644
index 0000000..eb94ef0
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/AuthorizationCodeInterface.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace OAuth2\OpenID\ResponseType;
+
+use OAuth2\ResponseType\AuthorizationCodeInterface as BaseAuthorizationCodeInterface;
+
+/**
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+interface AuthorizationCodeInterface extends BaseAuthorizationCodeInterface
+{
+ /**
+ * Handle the creation of the authorization code.
+ *
+ * @param mixed $client_id - Client identifier related to the authorization code
+ * @param mixed $user_id - User ID associated with the authorization code
+ * @param string $redirect_uri - An absolute URI to which the authorization server will redirect the
+ * user-agent to when the end-user authorization step is completed.
+ * @param string $scope - OPTIONAL Scopes to be stored in space-separated string.
+ * @param string $id_token - OPTIONAL The OpenID Connect id_token.
+ * @return string
+ *
+ * @see http://tools.ietf.org/html/rfc6749#section-4
+ * @ingroup oauth2_section_4
+ */
+ public function createAuthorizationCode($client_id, $user_id, $redirect_uri, $scope = null, $id_token = null);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/CodeIdToken.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/CodeIdToken.php
new file mode 100644
index 0000000..2696ada
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/CodeIdToken.php
@@ -0,0 +1,40 @@
+<?php
+
+namespace OAuth2\OpenID\ResponseType;
+
+class CodeIdToken implements CodeIdTokenInterface
+{
+ /**
+ * @var AuthorizationCodeInterface
+ */
+ protected $authCode;
+
+ /**
+ * @var IdTokenInterface
+ */
+ protected $idToken;
+
+ /**
+ * @param AuthorizationCodeInterface $authCode
+ * @param IdTokenInterface $idToken
+ */
+ public function __construct(AuthorizationCodeInterface $authCode, IdTokenInterface $idToken)
+ {
+ $this->authCode = $authCode;
+ $this->idToken = $idToken;
+ }
+
+ /**
+ * @param array $params
+ * @param mixed $user_id
+ * @return mixed
+ */
+ public function getAuthorizeResponse($params, $user_id = null)
+ {
+ $result = $this->authCode->getAuthorizeResponse($params, $user_id);
+ $resultIdToken = $this->idToken->getAuthorizeResponse($params, $user_id);
+ $result[1]['query']['id_token'] = $resultIdToken[1]['fragment']['id_token'];
+
+ return $result;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/CodeIdTokenInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/CodeIdTokenInterface.php
new file mode 100644
index 0000000..629adcc
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/CodeIdTokenInterface.php
@@ -0,0 +1,9 @@
+<?php
+
+namespace OAuth2\OpenID\ResponseType;
+
+use OAuth2\ResponseType\ResponseTypeInterface;
+
+interface CodeIdTokenInterface extends ResponseTypeInterface
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdToken.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdToken.php
new file mode 100644
index 0000000..55e4460
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdToken.php
@@ -0,0 +1,178 @@
+<?php
+
+namespace OAuth2\OpenID\ResponseType;
+
+use OAuth2\Encryption\EncryptionInterface;
+use OAuth2\Encryption\Jwt;
+use OAuth2\Storage\PublicKeyInterface;
+use OAuth2\OpenID\Storage\UserClaimsInterface;
+use LogicException;
+
+class IdToken implements IdTokenInterface
+{
+ /**
+ * @var UserClaimsInterface
+ */
+ protected $userClaimsStorage;
+ /**
+ * @var PublicKeyInterface
+ */
+ protected $publicKeyStorage;
+
+ /**
+ * @var array
+ */
+ protected $config;
+
+ /**
+ * @var EncryptionInterface
+ */
+ protected $encryptionUtil;
+
+ /**
+ * Constructor
+ *
+ * @param UserClaimsInterface $userClaimsStorage
+ * @param PublicKeyInterface $publicKeyStorage
+ * @param array $config
+ * @param EncryptionInterface $encryptionUtil
+ * @throws LogicException
+ */
+ public function __construct(UserClaimsInterface $userClaimsStorage, PublicKeyInterface $publicKeyStorage, array $config = array(), EncryptionInterface $encryptionUtil = null)
+ {
+ $this->userClaimsStorage = $userClaimsStorage;
+ $this->publicKeyStorage = $publicKeyStorage;
+ if (is_null($encryptionUtil)) {
+ $encryptionUtil = new Jwt();
+ }
+ $this->encryptionUtil = $encryptionUtil;
+
+ if (!isset($config['issuer'])) {
+ throw new LogicException('config parameter "issuer" must be set');
+ }
+ $this->config = array_merge(array(
+ 'id_lifetime' => 3600,
+ ), $config);
+ }
+
+ /**
+ * @param array $params
+ * @param null $userInfo
+ * @return array|mixed
+ */
+ public function getAuthorizeResponse($params, $userInfo = null)
+ {
+ // build the URL to redirect to
+ $result = array('query' => array());
+ $params += array('scope' => null, 'state' => null, 'nonce' => null);
+
+ // create the id token.
+ list($user_id, $auth_time) = $this->getUserIdAndAuthTime($userInfo);
+ $userClaims = $this->userClaimsStorage->getUserClaims($user_id, $params['scope']);
+
+ $id_token = $this->createIdToken($params['client_id'], $userInfo, $params['nonce'], $userClaims, null);
+ $result["fragment"] = array('id_token' => $id_token);
+ if (isset($params['state'])) {
+ $result["fragment"]["state"] = $params['state'];
+ }
+
+ return array($params['redirect_uri'], $result);
+ }
+
+ /**
+ * Create id token
+ *
+ * @param string $client_id
+ * @param mixed $userInfo
+ * @param mixed $nonce
+ * @param mixed $userClaims
+ * @param mixed $access_token
+ * @return mixed|string
+ */
+ public function createIdToken($client_id, $userInfo, $nonce = null, $userClaims = null, $access_token = null)
+ {
+ // pull auth_time from user info if supplied
+ list($user_id, $auth_time) = $this->getUserIdAndAuthTime($userInfo);
+
+ $token = array(
+ 'iss' => $this->config['issuer'],
+ 'sub' => $user_id,
+ 'aud' => $client_id,
+ 'iat' => time(),
+ 'exp' => time() + $this->config['id_lifetime'],
+ 'auth_time' => $auth_time,
+ );
+
+ if ($nonce) {
+ $token['nonce'] = $nonce;
+ }
+
+ if ($userClaims) {
+ $token += $userClaims;
+ }
+
+ if ($access_token) {
+ $token['at_hash'] = $this->createAtHash($access_token, $client_id);
+ }
+
+ return $this->encodeToken($token, $client_id);
+ }
+
+ /**
+ * @param $access_token
+ * @param null $client_id
+ * @return mixed|string
+ */
+ protected function createAtHash($access_token, $client_id = null)
+ {
+ // maps HS256 and RS256 to sha256, etc.
+ $algorithm = $this->publicKeyStorage->getEncryptionAlgorithm($client_id);
+ $hash_algorithm = 'sha' . substr($algorithm, 2);
+ $hash = hash($hash_algorithm, $access_token, true);
+ $at_hash = substr($hash, 0, strlen($hash) / 2);
+
+ return $this->encryptionUtil->urlSafeB64Encode($at_hash);
+ }
+
+ /**
+ * @param array $token
+ * @param null $client_id
+ * @return mixed|string
+ */
+ protected function encodeToken(array $token, $client_id = null)
+ {
+ $private_key = $this->publicKeyStorage->getPrivateKey($client_id);
+ $algorithm = $this->publicKeyStorage->getEncryptionAlgorithm($client_id);
+
+ return $this->encryptionUtil->encode($token, $private_key, $algorithm);
+ }
+
+ /**
+ * @param $userInfo
+ * @return array
+ * @throws LogicException
+ */
+ private function getUserIdAndAuthTime($userInfo)
+ {
+ $auth_time = null;
+
+ // support an array for user_id / auth_time
+ if (is_array($userInfo)) {
+ if (!isset($userInfo['user_id'])) {
+ throw new LogicException('if $user_id argument is an array, user_id index must be set');
+ }
+
+ $auth_time = isset($userInfo['auth_time']) ? $userInfo['auth_time'] : null;
+ $user_id = $userInfo['user_id'];
+ } else {
+ $user_id = $userInfo;
+ }
+
+ if (is_null($auth_time)) {
+ $auth_time = time();
+ }
+
+ // userInfo is a scalar, and so this is the $user_id. Auth Time is null
+ return array($user_id, $auth_time);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdTokenInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdTokenInterface.php
new file mode 100644
index 0000000..226a3bc
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdTokenInterface.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace OAuth2\OpenID\ResponseType;
+
+use OAuth2\ResponseType\ResponseTypeInterface;
+
+interface IdTokenInterface extends ResponseTypeInterface
+{
+ /**
+ * Create the id token.
+ *
+ * If Authorization Code Flow is used, the id_token is generated when the
+ * authorization code is issued, and later returned from the token endpoint
+ * together with the access_token.
+ * If the Implicit Flow is used, the token and id_token are generated and
+ * returned together.
+ *
+ * @param string $client_id - The client id.
+ * @param mixed $userInfo - User info
+ * @param string $nonce - OPTIONAL The nonce.
+ * @param string $userClaims - OPTIONAL Claims about the user.
+ * @param string $access_token - OPTIONAL The access token, if known.
+
+ * @internal param string $user_id - The user id.
+ * @return string The ID Token represented as a JSON Web Token (JWT).
+ *
+ * @see http://openid.net/specs/openid-connect-core-1_0.html#IDToken
+ */
+ public function createIdToken($client_id, $userInfo, $nonce = null, $userClaims = null, $access_token = null);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdTokenToken.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdTokenToken.php
new file mode 100644
index 0000000..94c51ae
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdTokenToken.php
@@ -0,0 +1,45 @@
+<?php
+
+namespace OAuth2\OpenID\ResponseType;
+
+use OAuth2\ResponseType\AccessTokenInterface;
+
+class IdTokenToken implements IdTokenTokenInterface
+{
+ /**
+ * @var AccessTokenInterface
+ */
+ protected $accessToken;
+
+ /**
+ * @var IdTokenInterface
+ */
+ protected $idToken;
+
+ /**
+ * Constructor
+ *
+ * @param AccessTokenInterface $accessToken
+ * @param IdTokenInterface $idToken
+ */
+ public function __construct(AccessTokenInterface $accessToken, IdTokenInterface $idToken)
+ {
+ $this->accessToken = $accessToken;
+ $this->idToken = $idToken;
+ }
+
+ /**
+ * @param array $params
+ * @param mixed $user_id
+ * @return mixed
+ */
+ public function getAuthorizeResponse($params, $user_id = null)
+ {
+ $result = $this->accessToken->getAuthorizeResponse($params, $user_id);
+ $access_token = $result[1]['fragment']['access_token'];
+ $id_token = $this->idToken->createIdToken($params['client_id'], $user_id, $params['nonce'], null, $access_token);
+ $result[1]['fragment']['id_token'] = $id_token;
+
+ return $result;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdTokenTokenInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdTokenTokenInterface.php
new file mode 100644
index 0000000..ac13e20
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdTokenTokenInterface.php
@@ -0,0 +1,9 @@
+<?php
+
+namespace OAuth2\OpenID\ResponseType;
+
+use OAuth2\ResponseType\ResponseTypeInterface;
+
+interface IdTokenTokenInterface extends ResponseTypeInterface
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Storage/AuthorizationCodeInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Storage/AuthorizationCodeInterface.php
new file mode 100644
index 0000000..446cec9
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Storage/AuthorizationCodeInterface.php
@@ -0,0 +1,37 @@
+<?php
+
+namespace OAuth2\OpenID\Storage;
+
+use OAuth2\Storage\AuthorizationCodeInterface as BaseAuthorizationCodeInterface;
+/**
+ * Implement this interface to specify where the OAuth2 Server
+ * should get/save authorization codes for the "Authorization Code"
+ * grant type
+ *
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+interface AuthorizationCodeInterface extends BaseAuthorizationCodeInterface
+{
+ /**
+ * Take the provided authorization code values and store them somewhere.
+ *
+ * This function should be the storage counterpart to getAuthCode().
+ *
+ * If storage fails for some reason, we're not currently checking for
+ * any sort of success/failure, so you should bail out of the script
+ * and provide a descriptive fail message.
+ *
+ * Required for OAuth2::GRANT_TYPE_AUTH_CODE.
+ *
+ * @param string $code - authorization code to be stored.
+ * @param mixed $client_id - client identifier to be stored.
+ * @param mixed $user_id - user identifier to be stored.
+ * @param string $redirect_uri - redirect URI(s) to be stored in a space-separated string.
+ * @param int $expires - expiration to be stored as a Unix timestamp.
+ * @param string $scope - OPTIONAL scopes to be stored in space-separated string.
+ * @param string $id_token - OPTIONAL the OpenID Connect id_token.
+ *
+ * @ingroup oauth2_section_4
+ */
+ public function setAuthorizationCode($code, $client_id, $user_id, $redirect_uri, $expires, $scope = null, $id_token = null);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Storage/UserClaimsInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Storage/UserClaimsInterface.php
new file mode 100644
index 0000000..9c5e7c8
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Storage/UserClaimsInterface.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace OAuth2\OpenID\Storage;
+
+/**
+ * Implement this interface to specify where the OAuth2 Server
+ * should retrieve user claims for the OpenID Connect id_token.
+ */
+interface UserClaimsInterface
+{
+ // valid scope values to pass into the user claims API call
+ const VALID_CLAIMS = 'profile email address phone';
+
+ // fields returned for the claims above
+ const PROFILE_CLAIM_VALUES = 'name family_name given_name middle_name nickname preferred_username profile picture website gender birthdate zoneinfo locale updated_at';
+ const EMAIL_CLAIM_VALUES = 'email email_verified';
+ const ADDRESS_CLAIM_VALUES = 'formatted street_address locality region postal_code country';
+ const PHONE_CLAIM_VALUES = 'phone_number phone_number_verified';
+
+ /**
+ * Return claims about the provided user id.
+ *
+ * Groups of claims are returned based on the requested scopes. No group
+ * is required, and no claim is required.
+ *
+ * @param mixed $user_id - The id of the user for which claims should be returned.
+ * @param string $scope - The requested scope.
+ * Scopes with matching claims: profile, email, address, phone.
+ *
+ * @return array - An array in the claim => value format.
+ *
+ * @see http://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims
+ */
+ public function getUserClaims($user_id, $scope);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Request.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Request.php
new file mode 100644
index 0000000..f547bf6
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Request.php
@@ -0,0 +1,252 @@
+<?php
+
+namespace OAuth2;
+
+use LogicException;
+
+/**
+ * OAuth2\Request
+ * This class is taken from the Symfony2 Framework and is part of the Symfony package.
+ * See Symfony\Component\HttpFoundation\Request (https://github.com/symfony/symfony)
+ */
+class Request implements RequestInterface
+{
+ public $attributes;
+ public $request;
+ public $query;
+ public $server;
+ public $files;
+ public $cookies;
+ public $headers;
+ public $content;
+
+ /**
+ * Constructor.
+ *
+ * @param array $query - The GET parameters
+ * @param array $request - The POST parameters
+ * @param array $attributes - The request attributes (parameters parsed from the PATH_INFO, ...)
+ * @param array $cookies - The COOKIE parameters
+ * @param array $files - The FILES parameters
+ * @param array $server - The SERVER parameters
+ * @param string $content - The raw body data
+ * @param array $headers - The headers
+ *
+ * @api
+ */
+ public function __construct(array $query = array(), array $request = array(), array $attributes = array(), array $cookies = array(), array $files = array(), array $server = array(), $content = null, array $headers = null)
+ {
+ $this->initialize($query, $request, $attributes, $cookies, $files, $server, $content, $headers);
+ }
+
+ /**
+ * Sets the parameters for this request.
+ *
+ * This method also re-initializes all properties.
+ *
+ * @param array $query - The GET parameters
+ * @param array $request - The POST parameters
+ * @param array $attributes - The request attributes (parameters parsed from the PATH_INFO, ...)
+ * @param array $cookies - The COOKIE parameters
+ * @param array $files - The FILES parameters
+ * @param array $server - The SERVER parameters
+ * @param string $content - The raw body data
+ * @param array $headers - The headers
+ *
+ * @api
+ */
+ public function initialize(array $query = array(), array $request = array(), array $attributes = array(), array $cookies = array(), array $files = array(), array $server = array(), $content = null, array $headers = null)
+ {
+ $this->request = $request;
+ $this->query = $query;
+ $this->attributes = $attributes;
+ $this->cookies = $cookies;
+ $this->files = $files;
+ $this->server = $server;
+ $this->content = $content;
+
+ if ($headers === null) {
+ $headers = array();
+ }
+
+ $this->headers = $headers + $this->getHeadersFromServer($this->server);
+ }
+
+ /**
+ * @param string $name
+ * @param mixed $default
+ * @return mixed
+ */
+ public function query($name, $default = null)
+ {
+ return isset($this->query[$name]) ? $this->query[$name] : $default;
+ }
+
+ /**
+ * @param string $name
+ * @param mixed $default
+ * @return mixed
+ */
+ public function request($name, $default = null)
+ {
+ return isset($this->request[$name]) ? $this->request[$name] : $default;
+ }
+
+ /**
+ * @param string $name
+ * @param mixed $default
+ * @return mixed
+ */
+ public function server($name, $default = null)
+ {
+ return isset($this->server[$name]) ? $this->server[$name] : $default;
+ }
+
+ /**
+ * @param string $name
+ * @param mixed $default
+ * @return mixed
+ */
+ public function headers($name, $default = null)
+ {
+ $headers = array_change_key_case($this->headers);
+ $name = strtolower($name);
+
+ return isset($headers[$name]) ? $headers[$name] : $default;
+ }
+
+ /**
+ * @return array
+ */
+ public function getAllQueryParameters()
+ {
+ return $this->query;
+ }
+
+ /**
+ * Returns the request body content.
+ *
+ * @param boolean $asResource - If true, a resource will be returned
+ * @return string|resource - The request body content or a resource to read the body stream.
+ *
+ * @throws LogicException
+ */
+ public function getContent($asResource = false)
+ {
+ if (false === $this->content || (true === $asResource && null !== $this->content)) {
+ throw new LogicException('getContent() can only be called once when using the resource return type.');
+ }
+
+ if (true === $asResource) {
+ $this->content = false;
+
+ return fopen('php://input', 'rb');
+ }
+
+ if (null === $this->content) {
+ $this->content = file_get_contents('php://input');
+ }
+
+ return $this->content;
+ }
+
+ /**
+ * @param array $server
+ * @return array
+ */
+ private function getHeadersFromServer($server)
+ {
+ $headers = array();
+ foreach ($server as $key => $value) {
+ if (0 === strpos($key, 'HTTP_')) {
+ $headers[substr($key, 5)] = $value;
+ }
+ // CONTENT_* are not prefixed with HTTP_
+ elseif (in_array($key, array('CONTENT_LENGTH', 'CONTENT_MD5', 'CONTENT_TYPE'))) {
+ $headers[$key] = $value;
+ }
+ }
+
+ if (isset($server['PHP_AUTH_USER'])) {
+ $headers['PHP_AUTH_USER'] = $server['PHP_AUTH_USER'];
+ $headers['PHP_AUTH_PW'] = isset($server['PHP_AUTH_PW']) ? $server['PHP_AUTH_PW'] : '';
+ } else {
+ /*
+ * php-cgi under Apache does not pass HTTP Basic user/pass to PHP by default
+ * For this workaround to work, add this line to your .htaccess file:
+ * RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
+ *
+ * A sample .htaccess file:
+ * RewriteEngine On
+ * RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
+ * RewriteCond %{REQUEST_FILENAME} !-f
+ * RewriteRule ^(.*)$ app.php [QSA,L]
+ */
+
+ $authorizationHeader = null;
+ if (isset($server['HTTP_AUTHORIZATION'])) {
+ $authorizationHeader = $server['HTTP_AUTHORIZATION'];
+ } elseif (isset($server['REDIRECT_HTTP_AUTHORIZATION'])) {
+ $authorizationHeader = $server['REDIRECT_HTTP_AUTHORIZATION'];
+ } elseif (function_exists('apache_request_headers')) {
+ $requestHeaders = (array) apache_request_headers();
+
+ // Server-side fix for bug in old Android versions (a nice side-effect of this fix means we don't care about capitalization for Authorization)
+ $requestHeaders = array_combine(array_map('ucwords', array_keys($requestHeaders)), array_values($requestHeaders));
+
+ if (isset($requestHeaders['Authorization'])) {
+ $authorizationHeader = trim($requestHeaders['Authorization']);
+ }
+ }
+
+ if (null !== $authorizationHeader) {
+ $headers['AUTHORIZATION'] = $authorizationHeader;
+ // Decode AUTHORIZATION header into PHP_AUTH_USER and PHP_AUTH_PW when authorization header is basic
+ if (0 === stripos($authorizationHeader, 'basic')) {
+ $exploded = explode(':', base64_decode(substr($authorizationHeader, 6)));
+ if (count($exploded) == 2) {
+ list($headers['PHP_AUTH_USER'], $headers['PHP_AUTH_PW']) = $exploded;
+ }
+ }
+ }
+ }
+
+ // PHP_AUTH_USER/PHP_AUTH_PW
+ if (isset($headers['PHP_AUTH_USER'])) {
+ $headers['AUTHORIZATION'] = 'Basic '.base64_encode($headers['PHP_AUTH_USER'].':'.$headers['PHP_AUTH_PW']);
+ }
+
+ return $headers;
+ }
+
+ /**
+ * Creates a new request with values from PHP's super globals.
+ *
+ * @return Request - A new request
+ *
+ * @api
+ */
+ public static function createFromGlobals()
+ {
+ $class = get_called_class();
+
+ /** @var Request $request */
+ $request = new $class($_GET, $_POST, array(), $_COOKIE, $_FILES, $_SERVER);
+
+ $contentType = $request->server('CONTENT_TYPE', '');
+ $requestMethod = $request->server('REQUEST_METHOD', 'GET');
+ if (0 === strpos($contentType, 'application/x-www-form-urlencoded')
+ && in_array(strtoupper($requestMethod), array('PUT', 'DELETE'))
+ ) {
+ parse_str($request->getContent(), $data);
+ $request->request = $data;
+ } elseif (0 === strpos($contentType, 'application/json')
+ && in_array(strtoupper($requestMethod), array('POST', 'PUT', 'DELETE'))
+ ) {
+ $data = json_decode($request->getContent(), true);
+ $request->request = $data;
+ }
+
+ return $request;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/RequestInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/RequestInterface.php
new file mode 100644
index 0000000..1d036b7
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/RequestInterface.php
@@ -0,0 +1,39 @@
+<?php
+
+namespace OAuth2;
+
+interface RequestInterface
+{
+ /**
+ * @param string $name
+ * @param mixed $default
+ * @return mixed
+ */
+ public function query($name, $default = null);
+
+ /**
+ * @param string $name
+ * @param mixed $default
+ * @return mixed
+ */
+ public function request($name, $default = null);
+
+ /**
+ * @param string $name
+ * @param mixed $default
+ * @return mixed
+ */
+ public function server($name, $default = null);
+
+ /**
+ * @param string $name
+ * @param mixed $default
+ * @return mixed
+ */
+ public function headers($name, $default = null);
+
+ /**
+ * @return mixed
+ */
+ public function getAllQueryParameters();
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Response.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Response.php
new file mode 100644
index 0000000..88c1ad5
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Response.php
@@ -0,0 +1,487 @@
+<?php
+
+namespace OAuth2;
+
+use InvalidArgumentException;
+
+/**
+ * Class to handle OAuth2 Responses in a graceful way. Use this interface
+ * to output the proper OAuth2 responses.
+ *
+ * @see OAuth2\ResponseInterface
+ *
+ * This class borrows heavily from the Symfony2 Framework and is part of the symfony package
+ * @see Symfony\Component\HttpFoundation\Request (https://github.com/symfony/symfony)
+ */
+class Response implements ResponseInterface
+{
+ /**
+ * @var string
+ */
+ public $version;
+
+ /**
+ * @var int
+ */
+ protected $statusCode = 200;
+
+ /**
+ * @var string
+ */
+ protected $statusText;
+
+ /**
+ * @var array
+ */
+ protected $parameters = array();
+
+ /**
+ * @var array
+ */
+ protected $httpHeaders = array();
+
+ /**
+ * @var array
+ */
+ public static $statusTexts = array(
+ 100 => 'Continue',
+ 101 => 'Switching Protocols',
+ 200 => 'OK',
+ 201 => 'Created',
+ 202 => 'Accepted',
+ 203 => 'Non-Authoritative Information',
+ 204 => 'No Content',
+ 205 => 'Reset Content',
+ 206 => 'Partial Content',
+ 300 => 'Multiple Choices',
+ 301 => 'Moved Permanently',
+ 302 => 'Found',
+ 303 => 'See Other',
+ 304 => 'Not Modified',
+ 305 => 'Use Proxy',
+ 307 => 'Temporary Redirect',
+ 400 => 'Bad Request',
+ 401 => 'Unauthorized',
+ 402 => 'Payment Required',
+ 403 => 'Forbidden',
+ 404 => 'Not Found',
+ 405 => 'Method Not Allowed',
+ 406 => 'Not Acceptable',
+ 407 => 'Proxy Authentication Required',
+ 408 => 'Request Timeout',
+ 409 => 'Conflict',
+ 410 => 'Gone',
+ 411 => 'Length Required',
+ 412 => 'Precondition Failed',
+ 413 => 'Request Entity Too Large',
+ 414 => 'Request-URI Too Long',
+ 415 => 'Unsupported Media Type',
+ 416 => 'Requested Range Not Satisfiable',
+ 417 => 'Expectation Failed',
+ 418 => 'I\'m a teapot',
+ 500 => 'Internal Server Error',
+ 501 => 'Not Implemented',
+ 502 => 'Bad Gateway',
+ 503 => 'Service Unavailable',
+ 504 => 'Gateway Timeout',
+ 505 => 'HTTP Version Not Supported',
+ );
+
+ /**
+ * @param array $parameters
+ * @param int $statusCode
+ * @param array $headers
+ */
+ public function __construct($parameters = array(), $statusCode = 200, $headers = array())
+ {
+ $this->setParameters($parameters);
+ $this->setStatusCode($statusCode);
+ $this->setHttpHeaders($headers);
+ $this->version = '1.1';
+ }
+
+ /**
+ * Converts the response object to string containing all headers and the response content.
+ *
+ * @return string The response with headers and content
+ */
+ public function __toString()
+ {
+ $headers = array();
+ foreach ($this->httpHeaders as $name => $value) {
+ $headers[$name] = (array) $value;
+ }
+
+ return
+ sprintf('HTTP/%s %s %s', $this->version, $this->statusCode, $this->statusText)."\r\n".
+ $this->getHttpHeadersAsString($headers)."\r\n".
+ $this->getResponseBody();
+ }
+
+ /**
+ * Returns the build header line.
+ *
+ * @param string $name The header name
+ * @param string $value The header value
+ *
+ * @return string The built header line
+ */
+ protected function buildHeader($name, $value)
+ {
+ return sprintf("%s: %s\n", $name, $value);
+ }
+
+ /**
+ * @return int
+ */
+ public function getStatusCode()
+ {
+ return $this->statusCode;
+ }
+
+ /**
+ * @param int $statusCode
+ * @param string $text
+ * @throws InvalidArgumentException
+ */
+ public function setStatusCode($statusCode, $text = null)
+ {
+ $this->statusCode = (int) $statusCode;
+ if ($this->isInvalid()) {
+ throw new InvalidArgumentException(sprintf('The HTTP status code "%s" is not valid.', $statusCode));
+ }
+
+ $this->statusText = false === $text ? '' : (null === $text ? self::$statusTexts[$this->statusCode] : $text);
+ }
+
+ /**
+ * @return string
+ */
+ public function getStatusText()
+ {
+ return $this->statusText;
+ }
+
+ /**
+ * @return array
+ */
+ public function getParameters()
+ {
+ return $this->parameters;
+ }
+
+ /**
+ * @param array $parameters
+ */
+ public function setParameters(array $parameters)
+ {
+ $this->parameters = $parameters;
+ }
+
+ /**
+ * @param array $parameters
+ */
+ public function addParameters(array $parameters)
+ {
+ $this->parameters = array_merge($this->parameters, $parameters);
+ }
+
+ /**
+ * @param string $name
+ * @param mixed $default
+ * @return mixed
+ */
+ public function getParameter($name, $default = null)
+ {
+ return isset($this->parameters[$name]) ? $this->parameters[$name] : $default;
+ }
+
+ /**
+ * @param string $name
+ * @param mixed $value
+ */
+ public function setParameter($name, $value)
+ {
+ $this->parameters[$name] = $value;
+ }
+
+ /**
+ * @param array $httpHeaders
+ */
+ public function setHttpHeaders(array $httpHeaders)
+ {
+ $this->httpHeaders = $httpHeaders;
+ }
+
+ /**
+ * @param string $name
+ * @param mixed $value
+ */
+ public function setHttpHeader($name, $value)
+ {
+ $this->httpHeaders[$name] = $value;
+ }
+
+ /**
+ * @param array $httpHeaders
+ */
+ public function addHttpHeaders(array $httpHeaders)
+ {
+ $this->httpHeaders = array_merge($this->httpHeaders, $httpHeaders);
+ }
+
+ /**
+ * @return array
+ */
+ public function getHttpHeaders()
+ {
+ return $this->httpHeaders;
+ }
+
+ /**
+ * @param string $name
+ * @param mixed $default
+ * @return mixed
+ */
+ public function getHttpHeader($name, $default = null)
+ {
+ return isset($this->httpHeaders[$name]) ? $this->httpHeaders[$name] : $default;
+ }
+
+ /**
+ * @param string $format
+ * @return mixed
+ * @throws InvalidArgumentException
+ */
+ public function getResponseBody($format = 'json')
+ {
+ switch ($format) {
+ case 'json':
+ return $this->parameters ? json_encode($this->parameters) : '';
+ case 'xml':
+ // this only works for single-level arrays
+ $xml = new \SimpleXMLElement('<response/>');
+ foreach ($this->parameters as $key => $param) {
+ $xml->addChild($key, $param);
+ }
+
+ return $xml->asXML();
+ }
+
+ throw new InvalidArgumentException(sprintf('The format %s is not supported', $format));
+
+ }
+
+ /**
+ * @param string $format
+ */
+ public function send($format = 'json')
+ {
+ // headers have already been sent by the developer
+ if (headers_sent()) {
+ return;
+ }
+
+ switch ($format) {
+ case 'json':
+ $this->setHttpHeader('Content-Type', 'application/json');
+ break;
+ case 'xml':
+ $this->setHttpHeader('Content-Type', 'text/xml');
+ break;
+ }
+ // status
+ header(sprintf('HTTP/%s %s %s', $this->version, $this->statusCode, $this->statusText));
+
+ foreach ($this->getHttpHeaders() as $name => $header) {
+ header(sprintf('%s: %s', $name, $header));
+ }
+ echo $this->getResponseBody($format);
+ }
+
+ /**
+ * @param int $statusCode
+ * @param string $error
+ * @param string $errorDescription
+ * @param string $errorUri
+ * @return mixed
+ * @throws InvalidArgumentException
+ */
+ public function setError($statusCode, $error, $errorDescription = null, $errorUri = null)
+ {
+ $parameters = array(
+ 'error' => $error,
+ 'error_description' => $errorDescription,
+ );
+
+ if (!is_null($errorUri)) {
+ if (strlen($errorUri) > 0 && $errorUri[0] == '#') {
+ // we are referencing an oauth bookmark (for brevity)
+ $errorUri = 'http://tools.ietf.org/html/rfc6749' . $errorUri;
+ }
+ $parameters['error_uri'] = $errorUri;
+ }
+
+ $httpHeaders = array(
+ 'Cache-Control' => 'no-store'
+ );
+
+ $this->setStatusCode($statusCode);
+ $this->addParameters($parameters);
+ $this->addHttpHeaders($httpHeaders);
+
+ if (!$this->isClientError() && !$this->isServerError()) {
+ throw new InvalidArgumentException(sprintf('The HTTP status code is not an error ("%s" given).', $statusCode));
+ }
+ }
+
+ /**
+ * @param int $statusCode
+ * @param string $url
+ * @param string $state
+ * @param string $error
+ * @param string $errorDescription
+ * @param string $errorUri
+ * @return mixed
+ * @throws InvalidArgumentException
+ */
+ public function setRedirect($statusCode, $url, $state = null, $error = null, $errorDescription = null, $errorUri = null)
+ {
+ if (empty($url)) {
+ throw new InvalidArgumentException('Cannot redirect to an empty URL.');
+ }
+
+ $parameters = array();
+
+ if (!is_null($state)) {
+ $parameters['state'] = $state;
+ }
+
+ if (!is_null($error)) {
+ $this->setError(400, $error, $errorDescription, $errorUri);
+ }
+ $this->setStatusCode($statusCode);
+ $this->addParameters($parameters);
+
+ if (count($this->parameters) > 0) {
+ // add parameters to URL redirection
+ $parts = parse_url($url);
+ $sep = isset($parts['query']) && !empty($parts['query']) ? '&' : '?';
+ $url .= $sep . http_build_query($this->parameters);
+ }
+
+ $this->addHttpHeaders(array('Location' => $url));
+
+ if (!$this->isRedirection()) {
+ throw new InvalidArgumentException(sprintf('The HTTP status code is not a redirect ("%s" given).', $statusCode));
+ }
+ }
+
+ /**
+ * @return Boolean
+ *
+ * @api
+ *
+ * @see http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
+ */
+ public function isInvalid()
+ {
+ return $this->statusCode < 100 || $this->statusCode >= 600;
+ }
+
+ /**
+ * @return Boolean
+ *
+ * @api
+ */
+ public function isInformational()
+ {
+ return $this->statusCode >= 100 && $this->statusCode < 200;
+ }
+
+ /**
+ * @return Boolean
+ *
+ * @api
+ */
+ public function isSuccessful()
+ {
+ return $this->statusCode >= 200 && $this->statusCode < 300;
+ }
+
+ /**
+ * @return Boolean
+ *
+ * @api
+ */
+ public function isRedirection()
+ {
+ return $this->statusCode >= 300 && $this->statusCode < 400;
+ }
+
+ /**
+ * @return Boolean
+ *
+ * @api
+ */
+ public function isClientError()
+ {
+ return $this->statusCode >= 400 && $this->statusCode < 500;
+ }
+
+ /**
+ * @return Boolean
+ *
+ * @api
+ */
+ public function isServerError()
+ {
+ return $this->statusCode >= 500 && $this->statusCode < 600;
+ }
+
+ /**
+ * Function from Symfony2 HttpFoundation - output pretty header
+ *
+ * @param array $headers
+ * @return string
+ */
+ private function getHttpHeadersAsString($headers)
+ {
+ if (count($headers) == 0) {
+ return '';
+ }
+
+ $max = max(array_map('strlen', array_keys($headers))) + 1;
+ $content = '';
+ ksort($headers);
+ foreach ($headers as $name => $values) {
+ foreach ($values as $value) {
+ $content .= sprintf("%-{$max}s %s\r\n", $this->beautifyHeaderName($name).':', $value);
+ }
+ }
+
+ return $content;
+ }
+
+ /**
+ * Function from Symfony2 HttpFoundation - output pretty header
+ *
+ * @param string $name
+ * @return mixed
+ */
+ private function beautifyHeaderName($name)
+ {
+ return preg_replace_callback('/\-(.)/', array($this, 'beautifyCallback'), ucfirst($name));
+ }
+
+ /**
+ * Function from Symfony2 HttpFoundation - output pretty header
+ *
+ * @param array $match
+ * @return string
+ */
+ private function beautifyCallback($match)
+ {
+ return '-'.strtoupper($match[1]);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseInterface.php
new file mode 100644
index 0000000..fe92086
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseInterface.php
@@ -0,0 +1,53 @@
+<?php
+
+namespace OAuth2;
+
+/**
+ * Interface which represents an object response. Meant to handle and display the proper OAuth2 Responses
+ * for errors and successes
+ *
+ * @see \OAuth2\Response
+ */
+interface ResponseInterface
+{
+ /**
+ * @param array $parameters
+ */
+ public function addParameters(array $parameters);
+
+ /**
+ * @param array $httpHeaders
+ */
+ public function addHttpHeaders(array $httpHeaders);
+
+ /**
+ * @param int $statusCode
+ */
+ public function setStatusCode($statusCode);
+
+ /**
+ * @param int $statusCode
+ * @param string $name
+ * @param string $description
+ * @param string $uri
+ * @return mixed
+ */
+ public function setError($statusCode, $name, $description = null, $uri = null);
+
+ /**
+ * @param int $statusCode
+ * @param string $url
+ * @param string $state
+ * @param string $error
+ * @param string $errorDescription
+ * @param string $errorUri
+ * @return mixed
+ */
+ public function setRedirect($statusCode, $url, $state = null, $error = null, $errorDescription = null, $errorUri = null);
+
+ /**
+ * @param string $name
+ * @return mixed
+ */
+ public function getParameter($name);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AccessToken.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AccessToken.php
new file mode 100644
index 0000000..e836a34
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AccessToken.php
@@ -0,0 +1,218 @@
+<?php
+
+namespace OAuth2\ResponseType;
+
+use OAuth2\Storage\AccessTokenInterface as AccessTokenStorageInterface;
+use OAuth2\Storage\RefreshTokenInterface;
+use RuntimeException;
+
+/**
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+class AccessToken implements AccessTokenInterface
+{
+ /**
+ * @var AccessTokenInterface
+ */
+ protected $tokenStorage;
+
+ /**
+ * @var RefreshTokenInterface
+ */
+ protected $refreshStorage;
+
+ /**
+ * @var array
+ */
+ protected $config;
+
+ /**
+ * @param AccessTokenStorageInterface $tokenStorage - REQUIRED Storage class for saving access token information
+ * @param RefreshTokenInterface $refreshStorage - OPTIONAL Storage class for saving refresh token information
+ * @param array $config - OPTIONAL Configuration options for the server
+ * @code
+ * $config = array(
+ * 'token_type' => 'bearer', // token type identifier
+ * 'access_lifetime' => 3600, // time before access token expires
+ * 'refresh_token_lifetime' => 1209600, // time before refresh token expires
+ * );
+ * @endcode
+ */
+ public function __construct(AccessTokenStorageInterface $tokenStorage, RefreshTokenInterface $refreshStorage = null, array $config = array())
+ {
+ $this->tokenStorage = $tokenStorage;
+ $this->refreshStorage = $refreshStorage;
+
+ $this->config = array_merge(array(
+ 'token_type' => 'bearer',
+ 'access_lifetime' => 3600,
+ 'refresh_token_lifetime' => 1209600,
+ ), $config);
+ }
+
+ /**
+ * Get authorize response
+ *
+ * @param array $params
+ * @param mixed $user_id
+ * @return array
+ */
+ public function getAuthorizeResponse($params, $user_id = null)
+ {
+ // build the URL to redirect to
+ $result = array('query' => array());
+
+ $params += array('scope' => null, 'state' => null);
+
+ /*
+ * a refresh token MUST NOT be included in the fragment
+ *
+ * @see http://tools.ietf.org/html/rfc6749#section-4.2.2
+ */
+ $includeRefreshToken = false;
+ $result["fragment"] = $this->createAccessToken($params['client_id'], $user_id, $params['scope'], $includeRefreshToken);
+
+ if (isset($params['state'])) {
+ $result["fragment"]["state"] = $params['state'];
+ }
+
+ return array($params['redirect_uri'], $result);
+ }
+
+ /**
+ * Handle the creation of access token, also issue refresh token if supported / desirable.
+ *
+ * @param mixed $client_id - client identifier related to the access token.
+ * @param mixed $user_id - user ID associated with the access token
+ * @param string $scope - OPTIONAL scopes to be stored in space-separated string.
+ * @param bool $includeRefreshToken - if true, a new refresh_token will be added to the response
+ * @return array
+ *
+ * @see http://tools.ietf.org/html/rfc6749#section-5
+ * @ingroup oauth2_section_5
+ */
+ public function createAccessToken($client_id, $user_id, $scope = null, $includeRefreshToken = true)
+ {
+ $token = array(
+ "access_token" => $this->generateAccessToken(),
+ "expires_in" => $this->config['access_lifetime'],
+ "token_type" => $this->config['token_type'],
+ "scope" => $scope
+ );
+
+ $this->tokenStorage->setAccessToken($token["access_token"], $client_id, $user_id, $this->config['access_lifetime'] ? time() + $this->config['access_lifetime'] : null, $scope);
+
+ /*
+ * Issue a refresh token also, if we support them
+ *
+ * Refresh Tokens are considered supported if an instance of OAuth2\Storage\RefreshTokenInterface
+ * is supplied in the constructor
+ */
+ if ($includeRefreshToken && $this->refreshStorage) {
+ $token["refresh_token"] = $this->generateRefreshToken();
+ $expires = 0;
+ if ($this->config['refresh_token_lifetime'] > 0) {
+ $expires = time() + $this->config['refresh_token_lifetime'];
+ }
+ $this->refreshStorage->setRefreshToken($token['refresh_token'], $client_id, $user_id, $expires, $scope);
+ }
+
+ return $token;
+ }
+
+ /**
+ * Generates an unique access token.
+ *
+ * Implementing classes may want to override this function to implement
+ * other access token generation schemes.
+ *
+ * @return string - A unique access token.
+ *
+ * @ingroup oauth2_section_4
+ */
+ protected function generateAccessToken()
+ {
+ if (function_exists('random_bytes')) {
+ $randomData = random_bytes(20);
+ if ($randomData !== false && strlen($randomData) === 20) {
+ return bin2hex($randomData);
+ }
+ }
+ if (function_exists('openssl_random_pseudo_bytes')) {
+ $randomData = openssl_random_pseudo_bytes(20);
+ if ($randomData !== false && strlen($randomData) === 20) {
+ return bin2hex($randomData);
+ }
+ }
+ if (function_exists('mcrypt_create_iv')) {
+ $randomData = mcrypt_create_iv(20, MCRYPT_DEV_URANDOM);
+ if ($randomData !== false && strlen($randomData) === 20) {
+ return bin2hex($randomData);
+ }
+ }
+ if (@file_exists('/dev/urandom')) { // Get 100 bytes of random data
+ $randomData = file_get_contents('/dev/urandom', false, null, 0, 20);
+ if ($randomData !== false && strlen($randomData) === 20) {
+ return bin2hex($randomData);
+ }
+ }
+ // Last resort which you probably should just get rid of:
+ $randomData = mt_rand() . mt_rand() . mt_rand() . mt_rand() . microtime(true) . uniqid(mt_rand(), true);
+
+ return substr(hash('sha512', $randomData), 0, 40);
+ }
+
+ /**
+ * Generates an unique refresh token
+ *
+ * Implementing classes may want to override this function to implement
+ * other refresh token generation schemes.
+ *
+ * @return string - A unique refresh token.
+ *
+ * @ingroup oauth2_section_4
+ * @see OAuth2::generateAccessToken()
+ */
+ protected function generateRefreshToken()
+ {
+ return $this->generateAccessToken(); // let's reuse the same scheme for token generation
+ }
+
+ /**
+ * Handle the revoking of refresh tokens, and access tokens if supported / desirable
+ * RFC7009 specifies that "If the server is unable to locate the token using
+ * the given hint, it MUST extend its search across all of its supported token types"
+ *
+ * @param $token
+ * @param null $tokenTypeHint
+ * @throws RuntimeException
+ * @return boolean
+ */
+ public function revokeToken($token, $tokenTypeHint = null)
+ {
+ if ($tokenTypeHint == 'refresh_token') {
+ if ($this->refreshStorage && $revoked = $this->refreshStorage->unsetRefreshToken($token)) {
+ return true;
+ }
+ }
+
+ /** @TODO remove in v2 */
+ if (!method_exists($this->tokenStorage, 'unsetAccessToken')) {
+ throw new RuntimeException(
+ sprintf('Token storage %s must implement unsetAccessToken method', get_class($this->tokenStorage)
+ ));
+ }
+
+ $revoked = $this->tokenStorage->unsetAccessToken($token);
+
+ // if a typehint is supplied and fails, try other storages
+ // @see https://tools.ietf.org/html/rfc7009#section-2.1
+ if (!$revoked && $tokenTypeHint != 'refresh_token') {
+ if ($this->refreshStorage) {
+ $revoked = $this->refreshStorage->unsetRefreshToken($token);
+ }
+ }
+
+ return $revoked;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AccessTokenInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AccessTokenInterface.php
new file mode 100644
index 0000000..0e576df
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AccessTokenInterface.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace OAuth2\ResponseType;
+
+/**
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+interface AccessTokenInterface extends ResponseTypeInterface
+{
+ /**
+ * Handle the creation of access token, also issue refresh token if supported / desirable.
+ *
+ * @param mixed $client_id - client identifier related to the access token.
+ * @param mixed $user_id - user ID associated with the access token
+ * @param string $scope - OPTONAL scopes to be stored in space-separated string.
+ * @param bool $includeRefreshToken - if true, a new refresh_token will be added to the response
+ *
+ * @see http://tools.ietf.org/html/rfc6749#section-5
+ * @ingroup oauth2_section_5
+ */
+ public function createAccessToken($client_id, $user_id, $scope = null, $includeRefreshToken = true);
+
+ /**
+ * Handle the revoking of refresh tokens, and access tokens if supported / desirable
+ *
+ * @param $token
+ * @param $tokenTypeHint
+ * @return mixed
+ *
+ * @todo v2.0 include this method in interface. Omitted to maintain BC in v1.x
+ */
+ //public function revokeToken($token, $tokenTypeHint);
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AuthorizationCode.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AuthorizationCode.php
new file mode 100644
index 0000000..b92c73c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AuthorizationCode.php
@@ -0,0 +1,101 @@
+<?php
+
+namespace OAuth2\ResponseType;
+
+use OAuth2\Storage\AuthorizationCodeInterface as AuthorizationCodeStorageInterface;
+
+/**
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+class AuthorizationCode implements AuthorizationCodeInterface
+{
+ protected $storage;
+ protected $config;
+
+ public function __construct(AuthorizationCodeStorageInterface $storage, array $config = array())
+ {
+ $this->storage = $storage;
+ $this->config = array_merge(array(
+ 'enforce_redirect' => false,
+ 'auth_code_lifetime' => 30,
+ ), $config);
+ }
+
+ public function getAuthorizeResponse($params, $user_id = null)
+ {
+ // build the URL to redirect to
+ $result = array('query' => array());
+
+ $params += array('scope' => null, 'state' => null);
+
+ $result['query']['code'] = $this->createAuthorizationCode($params['client_id'], $user_id, $params['redirect_uri'], $params['scope']);
+
+ if (isset($params['state'])) {
+ $result['query']['state'] = $params['state'];
+ }
+
+ return array($params['redirect_uri'], $result);
+ }
+
+ /**
+ * Handle the creation of the authorization code.
+ *
+ * @param $client_id
+ * Client identifier related to the authorization code
+ * @param $user_id
+ * User ID associated with the authorization code
+ * @param $redirect_uri
+ * An absolute URI to which the authorization server will redirect the
+ * user-agent to when the end-user authorization step is completed.
+ * @param $scope
+ * (optional) Scopes to be stored in space-separated string.
+ *
+ * @see http://tools.ietf.org/html/rfc6749#section-4
+ * @ingroup oauth2_section_4
+ */
+ public function createAuthorizationCode($client_id, $user_id, $redirect_uri, $scope = null)
+ {
+ $code = $this->generateAuthorizationCode();
+ $this->storage->setAuthorizationCode($code, $client_id, $user_id, $redirect_uri, time() + $this->config['auth_code_lifetime'], $scope);
+
+ return $code;
+ }
+
+ /**
+ * @return
+ * TRUE if the grant type requires a redirect_uri, FALSE if not
+ */
+ public function enforceRedirect()
+ {
+ return $this->config['enforce_redirect'];
+ }
+
+ /**
+ * Generates an unique auth code.
+ *
+ * Implementing classes may want to override this function to implement
+ * other auth code generation schemes.
+ *
+ * @return
+ * An unique auth code.
+ *
+ * @ingroup oauth2_section_4
+ */
+ protected function generateAuthorizationCode()
+ {
+ $tokenLen = 40;
+ if (function_exists('random_bytes')) {
+ $randomData = random_bytes(100);
+ } elseif (function_exists('openssl_random_pseudo_bytes')) {
+ $randomData = openssl_random_pseudo_bytes(100);
+ } elseif (function_exists('mcrypt_create_iv')) {
+ $randomData = mcrypt_create_iv(100, MCRYPT_DEV_URANDOM);
+ } elseif (@file_exists('/dev/urandom')) { // Get 100 bytes of random data
+ $randomData = file_get_contents('/dev/urandom', false, null, 0, 100) . uniqid(mt_rand(), true);
+ } else {
+ $randomData = mt_rand() . mt_rand() . mt_rand() . mt_rand() . microtime(true) . uniqid(mt_rand(), true);
+ }
+
+ return substr(hash('sha512', $randomData), 0, $tokenLen);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AuthorizationCodeInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AuthorizationCodeInterface.php
new file mode 100644
index 0000000..4f0a29d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AuthorizationCodeInterface.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace OAuth2\ResponseType;
+
+/**
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+interface AuthorizationCodeInterface extends ResponseTypeInterface
+{
+ /**
+ * @return
+ * TRUE if the grant type requires a redirect_uri, FALSE if not
+ */
+ public function enforceRedirect();
+
+ /**
+ * Handle the creation of the authorization code.
+ *
+ * @param mixed $client_id - Client identifier related to the authorization code
+ * @param mixed $user_id - User ID associated with the authorization code
+ * @param string $redirect_uri - An absolute URI to which the authorization server will redirect the
+ * user-agent to when the end-user authorization step is completed.
+ * @param string $scope - OPTIONAL Scopes to be stored in space-separated string.
+ * @return string
+ *
+ * @see http://tools.ietf.org/html/rfc6749#section-4
+ * @ingroup oauth2_section_4
+ */
+ public function createAuthorizationCode($client_id, $user_id, $redirect_uri, $scope = null);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/JwtAccessToken.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/JwtAccessToken.php
new file mode 100644
index 0000000..0ee3708
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/JwtAccessToken.php
@@ -0,0 +1,159 @@
+<?php
+
+namespace OAuth2\ResponseType;
+
+use OAuth2\Encryption\EncryptionInterface;
+use OAuth2\Encryption\Jwt;
+use OAuth2\Storage\AccessTokenInterface as AccessTokenStorageInterface;
+use OAuth2\Storage\RefreshTokenInterface;
+use OAuth2\Storage\PublicKeyInterface;
+use OAuth2\Storage\Memory;
+
+/**
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+class JwtAccessToken extends AccessToken
+{
+ protected $publicKeyStorage;
+ protected $encryptionUtil;
+
+ /**
+ * @param PublicKeyInterface $publicKeyStorage -
+ * @param AccessTokenStorageInterface $tokenStorage -
+ * @param RefreshTokenInterface $refreshStorage -
+ * @param array $config - array with key store_encrypted_token_string (bool true)
+ * whether the entire encrypted string is stored,
+ * or just the token ID is stored
+ * @param EncryptionInterface $encryptionUtil -
+ */
+ public function __construct(PublicKeyInterface $publicKeyStorage = null, AccessTokenStorageInterface $tokenStorage = null, RefreshTokenInterface $refreshStorage = null, array $config = array(), EncryptionInterface $encryptionUtil = null)
+ {
+ $this->publicKeyStorage = $publicKeyStorage;
+ $config = array_merge(array(
+ 'store_encrypted_token_string' => true,
+ 'issuer' => ''
+ ), $config);
+ if (is_null($tokenStorage)) {
+ // a pass-thru, so we can call the parent constructor
+ $tokenStorage = new Memory();
+ }
+ if (is_null($encryptionUtil)) {
+ $encryptionUtil = new Jwt();
+ }
+ $this->encryptionUtil = $encryptionUtil;
+ parent::__construct($tokenStorage, $refreshStorage, $config);
+ }
+
+ /**
+ * Handle the creation of access token, also issue refresh token if supported / desirable.
+ *
+ * @param mixed $client_id - Client identifier related to the access token.
+ * @param mixed $user_id - User ID associated with the access token
+ * @param string $scope - (optional) Scopes to be stored in space-separated string.
+ * @param bool $includeRefreshToken - If true, a new refresh_token will be added to the response
+ * @return array - The access token
+ *
+ * @see http://tools.ietf.org/html/rfc6749#section-5
+ * @ingroup oauth2_section_5
+ */
+ public function createAccessToken($client_id, $user_id, $scope = null, $includeRefreshToken = true)
+ {
+ // payload to encrypt
+ $payload = $this->createPayload($client_id, $user_id, $scope);
+
+ /*
+ * Encode the payload data into a single JWT access_token string
+ */
+ $access_token = $this->encodeToken($payload, $client_id);
+
+ /*
+ * Save the token to a secondary storage. This is implemented on the
+ * OAuth2\Storage\JwtAccessToken side, and will not actually store anything,
+ * if no secondary storage has been supplied
+ */
+ $token_to_store = $this->config['store_encrypted_token_string'] ? $access_token : $payload['id'];
+ $this->tokenStorage->setAccessToken($token_to_store, $client_id, $user_id, $this->config['access_lifetime'] ? time() + $this->config['access_lifetime'] : null, $scope);
+
+ // token to return to the client
+ $token = array(
+ 'access_token' => $access_token,
+ 'expires_in' => $this->config['access_lifetime'],
+ 'token_type' => $this->config['token_type'],
+ 'scope' => $scope
+ );
+
+ /*
+ * Issue a refresh token also, if we support them
+ *
+ * Refresh Tokens are considered supported if an instance of OAuth2\Storage\RefreshTokenInterface
+ * is supplied in the constructor
+ */
+ if ($includeRefreshToken && $this->refreshStorage) {
+ $refresh_token = $this->generateRefreshToken();
+ $expires = 0;
+ if ($this->config['refresh_token_lifetime'] > 0) {
+ $expires = time() + $this->config['refresh_token_lifetime'];
+ }
+ $this->refreshStorage->setRefreshToken($refresh_token, $client_id, $user_id, $expires, $scope);
+ $token['refresh_token'] = $refresh_token;
+ }
+
+ return $token;
+ }
+
+ /**
+ * @param array $token
+ * @param mixed $client_id
+ * @return mixed
+ */
+ protected function encodeToken(array $token, $client_id = null)
+ {
+ $private_key = $this->publicKeyStorage->getPrivateKey($client_id);
+ $algorithm = $this->publicKeyStorage->getEncryptionAlgorithm($client_id);
+
+ return $this->encryptionUtil->encode($token, $private_key, $algorithm);
+ }
+
+ /**
+ * This function can be used to create custom JWT payloads
+ *
+ * @param mixed $client_id - Client identifier related to the access token.
+ * @param mixed $user_id - User ID associated with the access token
+ * @param string $scope - (optional) Scopes to be stored in space-separated string.
+ * @return array - The access token
+ */
+ protected function createPayload($client_id, $user_id, $scope = null)
+ {
+ // token to encrypt
+ $expires = time() + $this->config['access_lifetime'];
+ $id = $this->generateAccessToken();
+
+ $payload = array(
+ 'id' => $id, // for BC (see #591)
+ 'jti' => $id,
+ 'iss' => $this->config['issuer'],
+ 'aud' => $client_id,
+ 'sub' => $user_id,
+ 'exp' => $expires,
+ 'iat' => time(),
+ 'token_type' => $this->config['token_type'],
+ 'scope' => $scope
+ );
+
+ if (isset($this->config['jwt_extra_payload_callable'])) {
+ if (!is_callable($this->config['jwt_extra_payload_callable'])) {
+ throw new \InvalidArgumentException('jwt_extra_payload_callable is not callable');
+ }
+
+ $extra = call_user_func($this->config['jwt_extra_payload_callable'], $client_id, $user_id, $scope);
+
+ if (!is_array($extra)) {
+ throw new \InvalidArgumentException('jwt_extra_payload_callable must return array');
+ }
+
+ $payload = array_merge($extra, $payload);
+ }
+
+ return $payload;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/ResponseTypeInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/ResponseTypeInterface.php
new file mode 100644
index 0000000..a271565
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/ResponseTypeInterface.php
@@ -0,0 +1,13 @@
+<?php
+
+namespace OAuth2\ResponseType;
+
+interface ResponseTypeInterface
+{
+ /**
+ * @param array $params
+ * @param mixed $user_id
+ * @return mixed
+ */
+ public function getAuthorizeResponse($params, $user_id = null);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Scope.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Scope.php
new file mode 100644
index 0000000..3ba6e53
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Scope.php
@@ -0,0 +1,109 @@
+<?php
+
+namespace OAuth2;
+
+use InvalidArgumentException;
+use OAuth2\Storage\Memory;
+use OAuth2\Storage\ScopeInterface as ScopeStorageInterface;
+
+/**
+* @see ScopeInterface
+*/
+class Scope implements ScopeInterface
+{
+ protected $storage;
+
+ /**
+ * Constructor
+ *
+ * @param mixed $storage - Either an array of supported scopes, or an instance of OAuth2\Storage\ScopeInterface
+ *
+ * @throws InvalidArgumentException
+ */
+ public function __construct($storage = null)
+ {
+ if (is_null($storage) || is_array($storage)) {
+ $storage = new Memory((array) $storage);
+ }
+
+ if (!$storage instanceof ScopeStorageInterface) {
+ throw new InvalidArgumentException("Argument 1 to OAuth2\Scope must be null, an array, or instance of OAuth2\Storage\ScopeInterface");
+ }
+
+ $this->storage = $storage;
+ }
+
+ /**
+ * Check if everything in required scope is contained in available scope.
+ *
+ * @param string $required_scope - A space-separated string of scopes.
+ * @param string $available_scope - A space-separated string of scopes.
+ * @return bool - TRUE if everything in required scope is contained in available scope and FALSE
+ * if it isn't.
+ *
+ * @see http://tools.ietf.org/html/rfc6749#section-7
+ *
+ * @ingroup oauth2_section_7
+ */
+ public function checkScope($required_scope, $available_scope)
+ {
+ $required_scope = explode(' ', trim($required_scope));
+ $available_scope = explode(' ', trim($available_scope));
+
+ return (count(array_diff($required_scope, $available_scope)) == 0);
+ }
+
+ /**
+ * Check if the provided scope exists in storage.
+ *
+ * @param string $scope - A space-separated string of scopes.
+ * @return bool - TRUE if it exists, FALSE otherwise.
+ */
+ public function scopeExists($scope)
+ {
+ // Check reserved scopes first.
+ $scope = explode(' ', trim($scope));
+ $reservedScope = $this->getReservedScopes();
+ $nonReservedScopes = array_diff($scope, $reservedScope);
+ if (count($nonReservedScopes) == 0) {
+ return true;
+ } else {
+ // Check the storage for non-reserved scopes.
+ $nonReservedScopes = implode(' ', $nonReservedScopes);
+
+ return $this->storage->scopeExists($nonReservedScopes);
+ }
+ }
+
+ /**
+ * @param RequestInterface $request
+ * @return string
+ */
+ public function getScopeFromRequest(RequestInterface $request)
+ {
+ // "scope" is valid if passed in either POST or QUERY
+ return $request->request('scope', $request->query('scope'));
+ }
+
+ /**
+ * @param null $client_id
+ * @return mixed
+ */
+ public function getDefaultScope($client_id = null)
+ {
+ return $this->storage->getDefaultScope($client_id);
+ }
+
+ /**
+ * Get reserved scopes needed by the server.
+ *
+ * In case OpenID Connect is used, these scopes must include:
+ * 'openid', offline_access'.
+ *
+ * @return array - An array of reserved scopes.
+ */
+ public function getReservedScopes()
+ {
+ return array('openid', 'offline_access');
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ScopeInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ScopeInterface.php
new file mode 100644
index 0000000..f65cfa7
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ScopeInterface.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace OAuth2;
+
+use OAuth2\Storage\ScopeInterface as ScopeStorageInterface;
+
+/**
+ * Class to handle scope implementation logic
+ *
+ * @see \OAuth2\Storage\ScopeInterface
+ */
+interface ScopeInterface extends ScopeStorageInterface
+{
+ /**
+ * Check if everything in required scope is contained in available scope.
+ *
+ * @param string $required_scope - A space-separated string of scopes.
+ * @param string $available_scope - A space-separated string of scopes.
+ * @return boolean - TRUE if everything in required scope is contained in available scope and FALSE
+ * if it isn't.
+ *
+ * @see http://tools.ietf.org/html/rfc6749#section-7
+ *
+ * @ingroup oauth2_section_7
+ */
+ public function checkScope($required_scope, $available_scope);
+
+ /**
+ * Return scope info from request
+ *
+ * @param RequestInterface $request - Request object to check
+ * @return string - representation of requested scope
+ */
+ public function getScopeFromRequest(RequestInterface $request);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Server.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Server.php
new file mode 100644
index 0000000..cf040c2
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Server.php
@@ -0,0 +1,1019 @@
+<?php
+
+namespace OAuth2;
+
+use OAuth2\Controller\ResourceControllerInterface;
+use OAuth2\Controller\ResourceController;
+use OAuth2\OpenID\Controller\UserInfoControllerInterface;
+use OAuth2\OpenID\Controller\UserInfoController;
+use OAuth2\OpenID\Controller\AuthorizeController as OpenIDAuthorizeController;
+use OAuth2\OpenID\ResponseType\AuthorizationCode as OpenIDAuthorizationCodeResponseType;
+use OAuth2\OpenID\Storage\AuthorizationCodeInterface as OpenIDAuthorizationCodeInterface;
+use OAuth2\OpenID\GrantType\AuthorizationCode as OpenIDAuthorizationCodeGrantType;
+use OAuth2\Controller\AuthorizeControllerInterface;
+use OAuth2\Controller\AuthorizeController;
+use OAuth2\Controller\TokenControllerInterface;
+use OAuth2\Controller\TokenController;
+use OAuth2\ClientAssertionType\ClientAssertionTypeInterface;
+use OAuth2\ClientAssertionType\HttpBasic;
+use OAuth2\ResponseType\ResponseTypeInterface;
+use OAuth2\ResponseType\AuthorizationCode as AuthorizationCodeResponseType;
+use OAuth2\ResponseType\AccessToken;
+use OAuth2\ResponseType\JwtAccessToken;
+use OAuth2\OpenID\ResponseType\CodeIdToken;
+use OAuth2\OpenID\ResponseType\IdToken;
+use OAuth2\OpenID\ResponseType\IdTokenToken;
+use OAuth2\TokenType\TokenTypeInterface;
+use OAuth2\TokenType\Bearer;
+use OAuth2\GrantType\GrantTypeInterface;
+use OAuth2\GrantType\UserCredentials;
+use OAuth2\GrantType\ClientCredentials;
+use OAuth2\GrantType\RefreshToken;
+use OAuth2\GrantType\AuthorizationCode;
+use OAuth2\Storage\ClientCredentialsInterface;
+use OAuth2\Storage\ClientInterface;
+use OAuth2\Storage\JwtAccessToken as JwtAccessTokenStorage;
+use OAuth2\Storage\JwtAccessTokenInterface;
+use InvalidArgumentException;
+use LogicException;
+
+/**
+* Server class for OAuth2
+* This class serves as a convience class which wraps the other Controller classes
+*
+* @see \OAuth2\Controller\ResourceController
+* @see \OAuth2\Controller\AuthorizeController
+* @see \OAuth2\Controller\TokenController
+*/
+class Server implements ResourceControllerInterface,
+ AuthorizeControllerInterface,
+ TokenControllerInterface,
+ UserInfoControllerInterface
+{
+ /**
+ * @var ResponseInterface
+ */
+ protected $response;
+
+ /**
+ * @var array
+ */
+ protected $config;
+
+ /**
+ * @var array
+ */
+ protected $storages;
+
+ /**
+ * @var AuthorizeControllerInterface
+ */
+ protected $authorizeController;
+
+ /**
+ * @var TokenControllerInterface
+ */
+ protected $tokenController;
+
+ /**
+ * @var ResourceControllerInterface
+ */
+ protected $resourceController;
+
+ /**
+ * @var UserInfoControllerInterface
+ */
+ protected $userInfoController;
+
+ /**
+ * @var array
+ */
+ protected $grantTypes = array();
+
+ /**
+ * @var array
+ */
+ protected $responseTypes = array();
+
+ /**
+ * @var TokenTypeInterface
+ */
+ protected $tokenType;
+
+ /**
+ * @var ScopeInterface
+ */
+ protected $scopeUtil;
+
+ /**
+ * @var ClientAssertionTypeInterface
+ */
+ protected $clientAssertionType;
+
+ /**
+ * @var array
+ */
+ protected $storageMap = array(
+ 'access_token' => 'OAuth2\Storage\AccessTokenInterface',
+ 'authorization_code' => 'OAuth2\Storage\AuthorizationCodeInterface',
+ 'client_credentials' => 'OAuth2\Storage\ClientCredentialsInterface',
+ 'client' => 'OAuth2\Storage\ClientInterface',
+ 'refresh_token' => 'OAuth2\Storage\RefreshTokenInterface',
+ 'user_credentials' => 'OAuth2\Storage\UserCredentialsInterface',
+ 'user_claims' => 'OAuth2\OpenID\Storage\UserClaimsInterface',
+ 'public_key' => 'OAuth2\Storage\PublicKeyInterface',
+ 'jwt_bearer' => 'OAuth2\Storage\JWTBearerInterface',
+ 'scope' => 'OAuth2\Storage\ScopeInterface',
+ );
+
+ /**
+ * @var array
+ */
+ protected $responseTypeMap = array(
+ 'token' => 'OAuth2\ResponseType\AccessTokenInterface',
+ 'code' => 'OAuth2\ResponseType\AuthorizationCodeInterface',
+ 'id_token' => 'OAuth2\OpenID\ResponseType\IdTokenInterface',
+ 'id_token token' => 'OAuth2\OpenID\ResponseType\IdTokenTokenInterface',
+ 'code id_token' => 'OAuth2\OpenID\ResponseType\CodeIdTokenInterface',
+ );
+
+ /**
+ * @param mixed $storage (array or OAuth2\Storage) - single object or array of objects implementing the
+ * required storage types (ClientCredentialsInterface and AccessTokenInterface as a minimum)
+ * @param array $config specify a different token lifetime, token header name, etc
+ * @param array $grantTypes An array of OAuth2\GrantType\GrantTypeInterface to use for granting access tokens
+ * @param array $responseTypes Response types to use. array keys should be "code" and "token" for
+ * Access Token and Authorization Code response types
+ * @param TokenTypeInterface $tokenType The token type object to use. Valid token types are "bearer" and "mac"
+ * @param ScopeInterface $scopeUtil The scope utility class to use to validate scope
+ * @param ClientAssertionTypeInterface $clientAssertionType The method in which to verify the client identity. Default is HttpBasic
+ *
+ * @ingroup oauth2_section_7
+ */
+ public function __construct($storage = array(), array $config = array(), array $grantTypes = array(), array $responseTypes = array(), TokenTypeInterface $tokenType = null, ScopeInterface $scopeUtil = null, ClientAssertionTypeInterface $clientAssertionType = null)
+ {
+ $storage = is_array($storage) ? $storage : array($storage);
+ $this->storages = array();
+ foreach ($storage as $key => $service) {
+ $this->addStorage($service, $key);
+ }
+
+ // merge all config values. These get passed to our controller objects
+ $this->config = array_merge(array(
+ 'use_jwt_access_tokens' => false,
+ 'jwt_extra_payload_callable' => null,
+ 'store_encrypted_token_string' => true,
+ 'use_openid_connect' => false,
+ 'id_lifetime' => 3600,
+ 'access_lifetime' => 3600,
+ 'www_realm' => 'Service',
+ 'token_param_name' => 'access_token',
+ 'token_bearer_header_name' => 'Bearer',
+ 'enforce_state' => true,
+ 'require_exact_redirect_uri' => true,
+ 'allow_implicit' => false,
+ 'allow_credentials_in_request_body' => true,
+ 'allow_public_clients' => true,
+ 'always_issue_new_refresh_token' => false,
+ 'unset_refresh_token_after_use' => true,
+ ), $config);
+
+ foreach ($grantTypes as $key => $grantType) {
+ $this->addGrantType($grantType, $key);
+ }
+
+ foreach ($responseTypes as $key => $responseType) {
+ $this->addResponseType($responseType, $key);
+ }
+
+ $this->tokenType = $tokenType;
+ $this->scopeUtil = $scopeUtil;
+ $this->clientAssertionType = $clientAssertionType;
+
+ if ($this->config['use_openid_connect']) {
+ $this->validateOpenIdConnect();
+ }
+ }
+
+ /**
+ * @return AuthorizeControllerInterface
+ */
+ public function getAuthorizeController()
+ {
+ if (is_null($this->authorizeController)) {
+ $this->authorizeController = $this->createDefaultAuthorizeController();
+ }
+
+ return $this->authorizeController;
+ }
+
+ /**
+ * @return TokenController
+ */
+ public function getTokenController()
+ {
+ if (is_null($this->tokenController)) {
+ $this->tokenController = $this->createDefaultTokenController();
+ }
+
+ return $this->tokenController;
+ }
+
+ /**
+ * @return ResourceControllerInterface
+ */
+ public function getResourceController()
+ {
+ if (is_null($this->resourceController)) {
+ $this->resourceController = $this->createDefaultResourceController();
+ }
+
+ return $this->resourceController;
+ }
+
+ /**
+ * @return UserInfoControllerInterface
+ */
+ public function getUserInfoController()
+ {
+ if (is_null($this->userInfoController)) {
+ $this->userInfoController = $this->createDefaultUserInfoController();
+ }
+
+ return $this->userInfoController;
+ }
+
+ /**
+ * @param AuthorizeControllerInterface $authorizeController
+ */
+ public function setAuthorizeController(AuthorizeControllerInterface $authorizeController)
+ {
+ $this->authorizeController = $authorizeController;
+ }
+
+ /**
+ * @param TokenControllerInterface $tokenController
+ */
+ public function setTokenController(TokenControllerInterface $tokenController)
+ {
+ $this->tokenController = $tokenController;
+ }
+
+ /**
+ * @param ResourceControllerInterface $resourceController
+ */
+ public function setResourceController(ResourceControllerInterface $resourceController)
+ {
+ $this->resourceController = $resourceController;
+ }
+
+ /**
+ * @param UserInfoControllerInterface $userInfoController
+ */
+ public function setUserInfoController(UserInfoControllerInterface $userInfoController)
+ {
+ $this->userInfoController = $userInfoController;
+ }
+
+ /**
+ * Return claims about the authenticated end-user.
+ * This would be called from the "/UserInfo" endpoint as defined in the spec.
+ *
+ * @param RequestInterface $request - Request object to grant access token
+ * @param ResponseInterface $response - Response object containing error messages (failure) or user claims (success)
+ * @return ResponseInterface
+ *
+ * @throws \InvalidArgumentException
+ * @throws \LogicException
+ *
+ * @see http://openid.net/specs/openid-connect-core-1_0.html#UserInfo
+ */
+ public function handleUserInfoRequest(RequestInterface $request, ResponseInterface $response = null)
+ {
+ $this->response = is_null($response) ? new Response() : $response;
+ $this->getUserInfoController()->handleUserInfoRequest($request, $this->response);
+
+ return $this->response;
+ }
+
+ /**
+ * Grant or deny a requested access token.
+ * This would be called from the "/token" endpoint as defined in the spec.
+ * Obviously, you can call your endpoint whatever you want.
+ *
+ * @param RequestInterface $request - Request object to grant access token
+ * @param ResponseInterface $response - Response object containing error messages (failure) or access token (success)
+ * @return ResponseInterface
+ *
+ * @throws \InvalidArgumentException
+ * @throws \LogicException
+ *
+ * @see http://tools.ietf.org/html/rfc6749#section-4
+ * @see http://tools.ietf.org/html/rfc6749#section-10.6
+ * @see http://tools.ietf.org/html/rfc6749#section-4.1.3
+ *
+ * @ingroup oauth2_section_4
+ */
+ public function handleTokenRequest(RequestInterface $request, ResponseInterface $response = null)
+ {
+ $this->response = is_null($response) ? new Response() : $response;
+ $this->getTokenController()->handleTokenRequest($request, $this->response);
+
+ return $this->response;
+ }
+
+ /**
+ * @param RequestInterface $request - Request object to grant access token
+ * @param ResponseInterface $response - Response object
+ * @return mixed
+ */
+ public function grantAccessToken(RequestInterface $request, ResponseInterface $response = null)
+ {
+ $this->response = is_null($response) ? new Response() : $response;
+ $value = $this->getTokenController()->grantAccessToken($request, $this->response);
+
+ return $value;
+ }
+
+ /**
+ * Handle a revoke token request
+ * This would be called from the "/revoke" endpoint as defined in the draft Token Revocation spec
+ *
+ * @see https://tools.ietf.org/html/rfc7009#section-2
+ *
+ * @param RequestInterface $request
+ * @param ResponseInterface $response
+ * @return Response|ResponseInterface
+ */
+ public function handleRevokeRequest(RequestInterface $request, ResponseInterface $response = null)
+ {
+ $this->response = is_null($response) ? new Response() : $response;
+ $this->getTokenController()->handleRevokeRequest($request, $this->response);
+
+ return $this->response;
+ }
+
+ /**
+ * Redirect the user appropriately after approval.
+ *
+ * After the user has approved or denied the resource request the
+ * authorization server should call this function to redirect the user
+ * appropriately.
+ *
+ * @param RequestInterface $request - The request should have the follow parameters set in the querystring:
+ * - response_type: The requested response: an access token, an authorization code, or both.
+ * - client_id: The client identifier as described in Section 2.
+ * - redirect_uri: An absolute URI to which the authorization server will redirect the user-agent to when the
+ * end-user authorization step is completed.
+ * - scope: (optional) The scope of the resource request expressed as a list of space-delimited strings.
+ * - state: (optional) An opaque value used by the client to maintain state between the request and callback.
+ *
+ * @param ResponseInterface $response - Response object
+ * @param bool $is_authorized - TRUE or FALSE depending on whether the user authorized the access.
+ * @param mixed $user_id - Identifier of user who authorized the client
+ * @return ResponseInterface
+ *
+ * @see http://tools.ietf.org/html/rfc6749#section-4
+ *
+ * @ingroup oauth2_section_4
+ */
+ public function handleAuthorizeRequest(RequestInterface $request, ResponseInterface $response, $is_authorized, $user_id = null)
+ {
+ $this->response = $response;
+ $this->getAuthorizeController()->handleAuthorizeRequest($request, $this->response, $is_authorized, $user_id);
+
+ return $this->response;
+ }
+
+ /**
+ * Pull the authorization request data out of the HTTP request.
+ * - The redirect_uri is OPTIONAL as per draft 20. But your implementation can enforce it
+ * by setting $config['enforce_redirect'] to true.
+ * - The state is OPTIONAL but recommended to enforce CSRF. Draft 21 states, however, that
+ * CSRF protection is MANDATORY. You can enforce this by setting the $config['enforce_state'] to true.
+ *
+ * The draft specifies that the parameters should be retrieved from GET, override the Response
+ * object to change this
+ *
+ * @param RequestInterface $request - Request object
+ * @param ResponseInterface $response - Response object
+ * @return bool
+ *
+ * The authorization parameters so the authorization server can prompt
+ * the user for approval if valid.
+ *
+ * @see http://tools.ietf.org/html/rfc6749#section-4.1.1
+ * @see http://tools.ietf.org/html/rfc6749#section-10.12
+ *
+ * @ingroup oauth2_section_3
+ */
+ public function validateAuthorizeRequest(RequestInterface $request, ResponseInterface $response = null)
+ {
+ $this->response = is_null($response) ? new Response() : $response;
+ $value = $this->getAuthorizeController()->validateAuthorizeRequest($request, $this->response);
+
+ return $value;
+ }
+
+ /**
+ * @param RequestInterface $request - Request object
+ * @param ResponseInterface $response - Response object
+ * @param string $scope - Scope
+ * @return mixed
+ */
+ public function verifyResourceRequest(RequestInterface $request, ResponseInterface $response = null, $scope = null)
+ {
+ $this->response = is_null($response) ? new Response() : $response;
+ $value = $this->getResourceController()->verifyResourceRequest($request, $this->response, $scope);
+
+ return $value;
+ }
+
+ /**
+ * @param RequestInterface $request - Request object
+ * @param ResponseInterface $response - Response object
+ * @return mixed
+ */
+ public function getAccessTokenData(RequestInterface $request, ResponseInterface $response = null)
+ {
+ $this->response = is_null($response) ? new Response() : $response;
+ $value = $this->getResourceController()->getAccessTokenData($request, $this->response);
+
+ return $value;
+ }
+
+ /**
+ * @param GrantTypeInterface $grantType
+ * @param mixed $identifier
+ */
+ public function addGrantType(GrantTypeInterface $grantType, $identifier = null)
+ {
+ if (!is_string($identifier)) {
+ $identifier = $grantType->getQueryStringIdentifier();
+ }
+
+ $this->grantTypes[$identifier] = $grantType;
+
+ // persist added grant type down to TokenController
+ if (!is_null($this->tokenController)) {
+ $this->getTokenController()->addGrantType($grantType, $identifier);
+ }
+ }
+
+ /**
+ * Set a storage object for the server
+ *
+ * @param object $storage - An object implementing one of the Storage interfaces
+ * @param mixed $key - If null, the storage is set to the key of each storage interface it implements
+ *
+ * @throws InvalidArgumentException
+ * @see storageMap
+ */
+ public function addStorage($storage, $key = null)
+ {
+ // if explicitly set to a valid key, do not "magically" set below
+ if (isset($this->storageMap[$key])) {
+ if (!is_null($storage) && !$storage instanceof $this->storageMap[$key]) {
+ throw new \InvalidArgumentException(sprintf('storage of type "%s" must implement interface "%s"', $key, $this->storageMap[$key]));
+ }
+ $this->storages[$key] = $storage;
+
+ // special logic to handle "client" and "client_credentials" strangeness
+ if ($key === 'client' && !isset($this->storages['client_credentials'])) {
+ if ($storage instanceof ClientCredentialsInterface) {
+ $this->storages['client_credentials'] = $storage;
+ }
+ } elseif ($key === 'client_credentials' && !isset($this->storages['client'])) {
+ if ($storage instanceof ClientInterface) {
+ $this->storages['client'] = $storage;
+ }
+ }
+ } elseif (!is_null($key) && !is_numeric($key)) {
+ throw new \InvalidArgumentException(sprintf('unknown storage key "%s", must be one of [%s]', $key, implode(', ', array_keys($this->storageMap))));
+ } else {
+ $set = false;
+ foreach ($this->storageMap as $type => $interface) {
+ if ($storage instanceof $interface) {
+ $this->storages[$type] = $storage;
+ $set = true;
+ }
+ }
+
+ if (!$set) {
+ throw new \InvalidArgumentException(sprintf('storage of class "%s" must implement one of [%s]', get_class($storage), implode(', ', $this->storageMap)));
+ }
+ }
+ }
+
+ /**
+ * @param ResponseTypeInterface $responseType
+ * @param mixed $key
+ *
+ * @throws InvalidArgumentException
+ */
+ public function addResponseType(ResponseTypeInterface $responseType, $key = null)
+ {
+ $key = $this->normalizeResponseType($key);
+
+ if (isset($this->responseTypeMap[$key])) {
+ if (!$responseType instanceof $this->responseTypeMap[$key]) {
+ throw new \InvalidArgumentException(sprintf('responseType of type "%s" must implement interface "%s"', $key, $this->responseTypeMap[$key]));
+ }
+ $this->responseTypes[$key] = $responseType;
+ } elseif (!is_null($key) && !is_numeric($key)) {
+ throw new \InvalidArgumentException(sprintf('unknown responseType key "%s", must be one of [%s]', $key, implode(', ', array_keys($this->responseTypeMap))));
+ } else {
+ $set = false;
+ foreach ($this->responseTypeMap as $type => $interface) {
+ if ($responseType instanceof $interface) {
+ $this->responseTypes[$type] = $responseType;
+ $set = true;
+ }
+ }
+
+ if (!$set) {
+ throw new \InvalidArgumentException(sprintf('Unknown response type %s. Please implement one of [%s]', get_class($responseType), implode(', ', $this->responseTypeMap)));
+ }
+ }
+ }
+
+ /**
+ * @return ScopeInterface
+ */
+ public function getScopeUtil()
+ {
+ if (!$this->scopeUtil) {
+ $storage = isset($this->storages['scope']) ? $this->storages['scope'] : null;
+ $this->scopeUtil = new Scope($storage);
+ }
+
+ return $this->scopeUtil;
+ }
+
+ /**
+ * @param ScopeInterface $scopeUtil
+ */
+ public function setScopeUtil($scopeUtil)
+ {
+ $this->scopeUtil = $scopeUtil;
+ }
+
+ /**
+ * @return AuthorizeControllerInterface
+ * @throws LogicException
+ */
+ protected function createDefaultAuthorizeController()
+ {
+ if (!isset($this->storages['client'])) {
+ throw new \LogicException('You must supply a storage object implementing \OAuth2\Storage\ClientInterface to use the authorize server');
+ }
+ if (0 == count($this->responseTypes)) {
+ $this->responseTypes = $this->getDefaultResponseTypes();
+ }
+ if ($this->config['use_openid_connect'] && !isset($this->responseTypes['id_token'])) {
+ $this->responseTypes['id_token'] = $this->createDefaultIdTokenResponseType();
+ if ($this->config['allow_implicit']) {
+ $this->responseTypes['id_token token'] = $this->createDefaultIdTokenTokenResponseType();
+ }
+ }
+
+ $config = array_intersect_key($this->config, array_flip(explode(' ', 'allow_implicit enforce_state require_exact_redirect_uri')));
+
+ if ($this->config['use_openid_connect']) {
+ return new OpenIDAuthorizeController($this->storages['client'], $this->responseTypes, $config, $this->getScopeUtil());
+ }
+
+ return new AuthorizeController($this->storages['client'], $this->responseTypes, $config, $this->getScopeUtil());
+ }
+
+ /**
+ * @return TokenControllerInterface
+ * @throws LogicException
+ */
+ protected function createDefaultTokenController()
+ {
+ if (0 == count($this->grantTypes)) {
+ $this->grantTypes = $this->getDefaultGrantTypes();
+ }
+
+ if (is_null($this->clientAssertionType)) {
+ // see if HttpBasic assertion type is requred. If so, then create it from storage classes.
+ foreach ($this->grantTypes as $grantType) {
+ if (!$grantType instanceof ClientAssertionTypeInterface) {
+ if (!isset($this->storages['client_credentials'])) {
+ throw new \LogicException('You must supply a storage object implementing OAuth2\Storage\ClientCredentialsInterface to use the token server');
+ }
+ $config = array_intersect_key($this->config, array_flip(explode(' ', 'allow_credentials_in_request_body allow_public_clients')));
+ $this->clientAssertionType = new HttpBasic($this->storages['client_credentials'], $config);
+ break;
+ }
+ }
+ }
+
+ if (!isset($this->storages['client'])) {
+ throw new LogicException("You must supply a storage object implementing OAuth2\Storage\ClientInterface to use the token server");
+ }
+
+ $accessTokenResponseType = $this->getAccessTokenResponseType();
+
+ return new TokenController($accessTokenResponseType, $this->storages['client'], $this->grantTypes, $this->clientAssertionType, $this->getScopeUtil());
+ }
+
+ /**
+ * @return ResourceControllerInterface
+ * @throws LogicException
+ */
+ protected function createDefaultResourceController()
+ {
+ if ($this->config['use_jwt_access_tokens']) {
+ // overwrites access token storage with crypto token storage if "use_jwt_access_tokens" is set
+ if (!isset($this->storages['access_token']) || !$this->storages['access_token'] instanceof JwtAccessTokenInterface) {
+ $this->storages['access_token'] = $this->createDefaultJwtAccessTokenStorage();
+ }
+ } elseif (!isset($this->storages['access_token'])) {
+ throw new \LogicException('You must supply a storage object implementing OAuth2\Storage\AccessTokenInterface or use JwtAccessTokens to use the resource server');
+ }
+
+ if (!$this->tokenType) {
+ $this->tokenType = $this->getDefaultTokenType();
+ }
+
+ $config = array_intersect_key($this->config, array('www_realm' => ''));
+
+ return new ResourceController($this->tokenType, $this->storages['access_token'], $config, $this->getScopeUtil());
+ }
+
+ /**
+ * @return UserInfoControllerInterface
+ * @throws LogicException
+ */
+ protected function createDefaultUserInfoController()
+ {
+ if ($this->config['use_jwt_access_tokens']) {
+ // overwrites access token storage with crypto token storage if "use_jwt_access_tokens" is set
+ if (!isset($this->storages['access_token']) || !$this->storages['access_token'] instanceof JwtAccessTokenInterface) {
+ $this->storages['access_token'] = $this->createDefaultJwtAccessTokenStorage();
+ }
+ } elseif (!isset($this->storages['access_token'])) {
+ throw new \LogicException('You must supply a storage object implementing OAuth2\Storage\AccessTokenInterface or use JwtAccessTokens to use the UserInfo server');
+ }
+
+ if (!isset($this->storages['user_claims'])) {
+ throw new \LogicException('You must supply a storage object implementing OAuth2\OpenID\Storage\UserClaimsInterface to use the UserInfo server');
+ }
+
+ if (!$this->tokenType) {
+ $this->tokenType = $this->getDefaultTokenType();
+ }
+
+ $config = array_intersect_key($this->config, array('www_realm' => ''));
+
+ return new UserInfoController($this->tokenType, $this->storages['access_token'], $this->storages['user_claims'], $config, $this->getScopeUtil());
+ }
+
+ /**
+ * @return Bearer
+ */
+ protected function getDefaultTokenType()
+ {
+ $config = array_intersect_key($this->config, array_flip(explode(' ', 'token_param_name token_bearer_header_name')));
+
+ return new Bearer($config);
+ }
+
+ /**
+ * @return array
+ * @throws LogicException
+ */
+ protected function getDefaultResponseTypes()
+ {
+ $responseTypes = array();
+
+ if ($this->config['allow_implicit']) {
+ $responseTypes['token'] = $this->getAccessTokenResponseType();
+ }
+
+ if ($this->config['use_openid_connect']) {
+ $responseTypes['id_token'] = $this->getIdTokenResponseType();
+ if ($this->config['allow_implicit']) {
+ $responseTypes['id_token token'] = $this->getIdTokenTokenResponseType();
+ }
+ }
+
+ if (isset($this->storages['authorization_code'])) {
+ $config = array_intersect_key($this->config, array_flip(explode(' ', 'enforce_redirect auth_code_lifetime')));
+ if ($this->config['use_openid_connect']) {
+ if (!$this->storages['authorization_code'] instanceof OpenIDAuthorizationCodeInterface) {
+ throw new \LogicException('Your authorization_code storage must implement OAuth2\OpenID\Storage\AuthorizationCodeInterface to work when "use_openid_connect" is true');
+ }
+ $responseTypes['code'] = new OpenIDAuthorizationCodeResponseType($this->storages['authorization_code'], $config);
+ $responseTypes['code id_token'] = new CodeIdToken($responseTypes['code'], $responseTypes['id_token']);
+ } else {
+ $responseTypes['code'] = new AuthorizationCodeResponseType($this->storages['authorization_code'], $config);
+ }
+ }
+
+ if (count($responseTypes) == 0) {
+ throw new \LogicException('You must supply an array of response_types in the constructor or implement a OAuth2\Storage\AuthorizationCodeInterface storage object or set "allow_implicit" to true and implement a OAuth2\Storage\AccessTokenInterface storage object');
+ }
+
+ return $responseTypes;
+ }
+
+ /**
+ * @return array
+ * @throws LogicException
+ */
+ protected function getDefaultGrantTypes()
+ {
+ $grantTypes = array();
+
+ if (isset($this->storages['user_credentials'])) {
+ $grantTypes['password'] = new UserCredentials($this->storages['user_credentials']);
+ }
+
+ if (isset($this->storages['client_credentials'])) {
+ $config = array_intersect_key($this->config, array('allow_credentials_in_request_body' => ''));
+ $grantTypes['client_credentials'] = new ClientCredentials($this->storages['client_credentials'], $config);
+ }
+
+ if (isset($this->storages['refresh_token'])) {
+ $config = array_intersect_key($this->config, array_flip(explode(' ', 'always_issue_new_refresh_token unset_refresh_token_after_use')));
+ $grantTypes['refresh_token'] = new RefreshToken($this->storages['refresh_token'], $config);
+ }
+
+ if (isset($this->storages['authorization_code'])) {
+ if ($this->config['use_openid_connect']) {
+ if (!$this->storages['authorization_code'] instanceof OpenIDAuthorizationCodeInterface) {
+ throw new \LogicException('Your authorization_code storage must implement OAuth2\OpenID\Storage\AuthorizationCodeInterface to work when "use_openid_connect" is true');
+ }
+ $grantTypes['authorization_code'] = new OpenIDAuthorizationCodeGrantType($this->storages['authorization_code']);
+ } else {
+ $grantTypes['authorization_code'] = new AuthorizationCode($this->storages['authorization_code']);
+ }
+ }
+
+ if (count($grantTypes) == 0) {
+ throw new \LogicException('Unable to build default grant types - You must supply an array of grant_types in the constructor');
+ }
+
+ return $grantTypes;
+ }
+
+ /**
+ * @return AccessToken
+ */
+ protected function getAccessTokenResponseType()
+ {
+ if (isset($this->responseTypes['token'])) {
+ return $this->responseTypes['token'];
+ }
+
+ if ($this->config['use_jwt_access_tokens']) {
+ return $this->createDefaultJwtAccessTokenResponseType();
+ }
+
+ return $this->createDefaultAccessTokenResponseType();
+ }
+
+ /**
+ * @return IdToken
+ */
+ protected function getIdTokenResponseType()
+ {
+ if (isset($this->responseTypes['id_token'])) {
+ return $this->responseTypes['id_token'];
+ }
+
+ return $this->createDefaultIdTokenResponseType();
+ }
+
+ /**
+ * @return IdTokenToken
+ */
+ protected function getIdTokenTokenResponseType()
+ {
+ if (isset($this->responseTypes['id_token token'])) {
+ return $this->responseTypes['id_token token'];
+ }
+
+ return $this->createDefaultIdTokenTokenResponseType();
+ }
+
+ /**
+ * For Resource Controller
+ *
+ * @return JwtAccessTokenStorage
+ * @throws LogicException
+ */
+ protected function createDefaultJwtAccessTokenStorage()
+ {
+ if (!isset($this->storages['public_key'])) {
+ throw new \LogicException('You must supply a storage object implementing OAuth2\Storage\PublicKeyInterface to use crypto tokens');
+ }
+ $tokenStorage = null;
+ if (!empty($this->config['store_encrypted_token_string']) && isset($this->storages['access_token'])) {
+ $tokenStorage = $this->storages['access_token'];
+ }
+ // wrap the access token storage as required.
+ return new JwtAccessTokenStorage($this->storages['public_key'], $tokenStorage);
+ }
+
+ /**
+ * For Authorize and Token Controllers
+ *
+ * @return JwtAccessToken
+ * @throws LogicException
+ */
+ protected function createDefaultJwtAccessTokenResponseType()
+ {
+ if (!isset($this->storages['public_key'])) {
+ throw new \LogicException('You must supply a storage object implementing OAuth2\Storage\PublicKeyInterface to use crypto tokens');
+ }
+
+ $tokenStorage = null;
+ if (isset($this->storages['access_token'])) {
+ $tokenStorage = $this->storages['access_token'];
+ }
+
+ $refreshStorage = null;
+ if (isset($this->storages['refresh_token'])) {
+ $refreshStorage = $this->storages['refresh_token'];
+ }
+
+ $config = array_intersect_key($this->config, array_flip(explode(' ', 'store_encrypted_token_string issuer access_lifetime refresh_token_lifetime jwt_extra_payload_callable')));
+
+ return new JwtAccessToken($this->storages['public_key'], $tokenStorage, $refreshStorage, $config);
+ }
+
+ /**
+ * @return AccessToken
+ * @throws LogicException
+ */
+ protected function createDefaultAccessTokenResponseType()
+ {
+ if (!isset($this->storages['access_token'])) {
+ throw new LogicException("You must supply a response type implementing OAuth2\ResponseType\AccessTokenInterface, or a storage object implementing OAuth2\Storage\AccessTokenInterface to use the token server");
+ }
+
+ $refreshStorage = null;
+ if (isset($this->storages['refresh_token'])) {
+ $refreshStorage = $this->storages['refresh_token'];
+ }
+
+ $config = array_intersect_key($this->config, array_flip(explode(' ', 'access_lifetime refresh_token_lifetime')));
+ $config['token_type'] = $this->tokenType ? $this->tokenType->getTokenType() : $this->getDefaultTokenType()->getTokenType();
+
+ return new AccessToken($this->storages['access_token'], $refreshStorage, $config);
+ }
+
+ /**
+ * @return IdToken
+ * @throws LogicException
+ */
+ protected function createDefaultIdTokenResponseType()
+ {
+ if (!isset($this->storages['user_claims'])) {
+ throw new LogicException("You must supply a storage object implementing OAuth2\OpenID\Storage\UserClaimsInterface to use openid connect");
+ }
+ if (!isset($this->storages['public_key'])) {
+ throw new LogicException("You must supply a storage object implementing OAuth2\Storage\PublicKeyInterface to use openid connect");
+ }
+
+ $config = array_intersect_key($this->config, array_flip(explode(' ', 'issuer id_lifetime')));
+
+ return new IdToken($this->storages['user_claims'], $this->storages['public_key'], $config);
+ }
+
+ /**
+ * @return IdTokenToken
+ */
+ protected function createDefaultIdTokenTokenResponseType()
+ {
+ return new IdTokenToken($this->getAccessTokenResponseType(), $this->getIdTokenResponseType());
+ }
+
+ /**
+ * @throws InvalidArgumentException
+ */
+ protected function validateOpenIdConnect()
+ {
+ $authCodeGrant = $this->getGrantType('authorization_code');
+ if (!empty($authCodeGrant) && !$authCodeGrant instanceof OpenIDAuthorizationCodeGrantType) {
+ throw new \InvalidArgumentException('You have enabled OpenID Connect, but supplied a grant type that does not support it.');
+ }
+ }
+
+ /**
+ * @param string $name
+ * @return string
+ */
+ protected function normalizeResponseType($name)
+ {
+ // for multiple-valued response types - make them alphabetical
+ if (!empty($name) && false !== strpos($name, ' ')) {
+ $types = explode(' ', $name);
+ sort($types);
+ $name = implode(' ', $types);
+ }
+
+ return $name;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getResponse()
+ {
+ return $this->response;
+ }
+
+ /**
+ * @return array
+ */
+ public function getStorages()
+ {
+ return $this->storages;
+ }
+
+ /**
+ * @param string $name
+ * @return object|null
+ */
+ public function getStorage($name)
+ {
+ return isset($this->storages[$name]) ? $this->storages[$name] : null;
+ }
+
+ /**
+ * @return array
+ */
+ public function getGrantTypes()
+ {
+ return $this->grantTypes;
+ }
+
+ /**
+ * @param string $name
+ * @return object|null
+ */
+ public function getGrantType($name)
+ {
+ return isset($this->grantTypes[$name]) ? $this->grantTypes[$name] : null;
+ }
+
+ /**
+ * @return array
+ */
+ public function getResponseTypes()
+ {
+ return $this->responseTypes;
+ }
+
+ /**
+ * @param string $name
+ * @return object|null
+ */
+ public function getResponseType($name)
+ {
+ // for multiple-valued response types - make them alphabetical
+ $name = $this->normalizeResponseType($name);
+
+ return isset($this->responseTypes[$name]) ? $this->responseTypes[$name] : null;
+ }
+
+ /**
+ * @return TokenTypeInterface
+ */
+ public function getTokenType()
+ {
+ return $this->tokenType;
+ }
+
+ /**
+ * @return ClientAssertionTypeInterface
+ */
+ public function getClientAssertionType()
+ {
+ return $this->clientAssertionType;
+ }
+
+ /**
+ * @param string $name
+ * @param mixed $value
+ */
+ public function setConfig($name, $value)
+ {
+ $this->config[$name] = $value;
+ }
+
+ /**
+ * @param string $name
+ * @param mixed $default
+ * @return mixed
+ */
+ public function getConfig($name, $default = null)
+ {
+ return isset($this->config[$name]) ? $this->config[$name] : $default;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/AccessTokenInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/AccessTokenInterface.php
new file mode 100644
index 0000000..22428f2
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/AccessTokenInterface.php
@@ -0,0 +1,65 @@
+<?php
+
+namespace OAuth2\Storage;
+
+/**
+ * Implement this interface to specify where the OAuth2 Server
+ * should get/save access tokens
+ *
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+interface AccessTokenInterface
+{
+ /**
+ * Look up the supplied oauth_token from storage.
+ *
+ * We need to retrieve access token data as we create and verify tokens.
+ *
+ * @param string $oauth_token - oauth_token to be check with.
+ *
+ * @return array|null - An associative array as below, and return NULL if the supplied oauth_token is invalid:
+ * @code
+ * array(
+ * 'expires' => $expires, // Stored expiration in unix timestamp.
+ * 'client_id' => $client_id, // (optional) Stored client identifier.
+ * 'user_id' => $user_id, // (optional) Stored user identifier.
+ * 'scope' => $scope, // (optional) Stored scope values in space-separated string.
+ * 'id_token' => $id_token // (optional) Stored id_token (if "use_openid_connect" is true).
+ * );
+ * @endcode
+ *
+ * @ingroup oauth2_section_7
+ */
+ public function getAccessToken($oauth_token);
+
+ /**
+ * Store the supplied access token values to storage.
+ *
+ * We need to store access token data as we create and verify tokens.
+ *
+ * @param string $oauth_token - oauth_token to be stored.
+ * @param mixed $client_id - client identifier to be stored.
+ * @param mixed $user_id - user identifier to be stored.
+ * @param int $expires - expiration to be stored as a Unix timestamp.
+ * @param string $scope - OPTIONAL Scopes to be stored in space-separated string.
+ *
+ * @ingroup oauth2_section_4
+ */
+ public function setAccessToken($oauth_token, $client_id, $user_id, $expires, $scope = null);
+
+ /**
+ * Expire an access token.
+ *
+ * This is not explicitly required in the spec, but if defined in a draft RFC for token
+ * revoking (RFC 7009) https://tools.ietf.org/html/rfc7009
+ *
+ * @param $access_token
+ * Access token to be expired.
+ *
+ * @return BOOL true if an access token was unset, false if not
+ * @ingroup oauth2_section_6
+ *
+ * @todo v2.0 include this method in interface. Omitted to maintain BC in v1.x
+ */
+ //public function unsetAccessToken($access_token);
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/AuthorizationCodeInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/AuthorizationCodeInterface.php
new file mode 100644
index 0000000..2dbc138
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/AuthorizationCodeInterface.php
@@ -0,0 +1,86 @@
+<?php
+
+namespace OAuth2\Storage;
+
+/**
+ * Implement this interface to specify where the OAuth2 Server
+ * should get/save authorization codes for the "Authorization Code"
+ * grant type
+ *
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+interface AuthorizationCodeInterface
+{
+ /**
+ * The Authorization Code grant type supports a response type of "code".
+ *
+ * @var string
+ * @see http://tools.ietf.org/html/rfc6749#section-1.4.1
+ * @see http://tools.ietf.org/html/rfc6749#section-4.2
+ */
+ const RESPONSE_TYPE_CODE = "code";
+
+ /**
+ * Fetch authorization code data (probably the most common grant type).
+ *
+ * Retrieve the stored data for the given authorization code.
+ *
+ * Required for OAuth2::GRANT_TYPE_AUTH_CODE.
+ *
+ * @param $code
+ * Authorization code to be check with.
+ *
+ * @return
+ * An associative array as below, and NULL if the code is invalid
+ * @code
+ * return array(
+ * "client_id" => CLIENT_ID, // REQUIRED Stored client identifier
+ * "user_id" => USER_ID, // REQUIRED Stored user identifier
+ * "expires" => EXPIRES, // REQUIRED Stored expiration in unix timestamp
+ * "redirect_uri" => REDIRECT_URI, // REQUIRED Stored redirect URI
+ * "scope" => SCOPE, // OPTIONAL Stored scope values in space-separated string
+ * );
+ * @endcode
+ *
+ * @see http://tools.ietf.org/html/rfc6749#section-4.1
+ *
+ * @ingroup oauth2_section_4
+ */
+ public function getAuthorizationCode($code);
+
+ /**
+ * Take the provided authorization code values and store them somewhere.
+ *
+ * This function should be the storage counterpart to getAuthCode().
+ *
+ * If storage fails for some reason, we're not currently checking for
+ * any sort of success/failure, so you should bail out of the script
+ * and provide a descriptive fail message.
+ *
+ * Required for OAuth2::GRANT_TYPE_AUTH_CODE.
+ *
+ * @param string $code - Authorization code to be stored.
+ * @param mixed $client_id - Client identifier to be stored.
+ * @param mixed $user_id - User identifier to be stored.
+ * @param string $redirect_uri - Redirect URI(s) to be stored in a space-separated string.
+ * @param int $expires - Expiration to be stored as a Unix timestamp.
+ * @param string $scope - OPTIONAL Scopes to be stored in space-separated string.
+ *
+ * @ingroup oauth2_section_4
+ */
+ public function setAuthorizationCode($code, $client_id, $user_id, $redirect_uri, $expires, $scope = null);
+
+ /**
+ * once an Authorization Code is used, it must be expired
+ *
+ * @see http://tools.ietf.org/html/rfc6749#section-4.1.2
+ *
+ * The client MUST NOT use the authorization code
+ * more than once. If an authorization code is used more than
+ * once, the authorization server MUST deny the request and SHOULD
+ * revoke (when possible) all tokens previously issued based on
+ * that authorization code
+ *
+ */
+ public function expireAuthorizationCode($code);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Cassandra.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Cassandra.php
new file mode 100644
index 0000000..e60e9d3
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Cassandra.php
@@ -0,0 +1,660 @@
+<?php
+
+namespace OAuth2\Storage;
+
+use phpcassa\ColumnFamily;
+use phpcassa\ColumnSlice;
+use phpcassa\Connection\ConnectionPool;
+use OAuth2\OpenID\Storage\UserClaimsInterface;
+use OAuth2\OpenID\Storage\AuthorizationCodeInterface as OpenIDAuthorizationCodeInterface;
+use InvalidArgumentException;
+
+/**
+ * Cassandra storage for all storage types
+ *
+ * To use, install "thobbs/phpcassa" via composer:
+ * <code>
+ * composer require thobbs/phpcassa:dev-master
+ * </code>
+ *
+ * Once this is done, instantiate the connection:
+ * <code>
+ * $cassandra = new \phpcassa\Connection\ConnectionPool('oauth2_server', array('127.0.0.1:9160'));
+ * </code>
+ *
+ * Then, register the storage client:
+ * <code>
+ * $storage = new OAuth2\Storage\Cassandra($cassandra);
+ * $storage->setClientDetails($client_id, $client_secret, $redirect_uri);
+ * </code>
+ *
+ * @see test/lib/OAuth2/Storage/Bootstrap::getCassandraStorage
+ */
+class Cassandra implements AuthorizationCodeInterface,
+ AccessTokenInterface,
+ ClientCredentialsInterface,
+ UserCredentialsInterface,
+ RefreshTokenInterface,
+ JwtBearerInterface,
+ ScopeInterface,
+ PublicKeyInterface,
+ UserClaimsInterface,
+ OpenIDAuthorizationCodeInterface
+{
+
+ private $cache;
+
+ /**
+ * @var ConnectionPool
+ */
+ protected $cassandra;
+
+ /**
+ * @var array
+ */
+ protected $config;
+
+ /**
+ * Cassandra Storage! uses phpCassa
+ *
+ * @param ConnectionPool|array $connection
+ * @param array $config
+ *
+ * @throws InvalidArgumentException
+ */
+ public function __construct($connection = array(), array $config = array())
+ {
+ if ($connection instanceof ConnectionPool) {
+ $this->cassandra = $connection;
+ } else {
+ if (!is_array($connection)) {
+ throw new InvalidArgumentException('First argument to OAuth2\Storage\Cassandra must be an instance of phpcassa\Connection\ConnectionPool or a configuration array');
+ }
+ $connection = array_merge(array(
+ 'keyspace' => 'oauth2',
+ 'servers' => null,
+ ), $connection);
+
+ $this->cassandra = new ConnectionPool($connection['keyspace'], $connection['servers']);
+ }
+
+ $this->config = array_merge(array(
+ // cassandra config
+ 'column_family' => 'auth',
+
+ // key names
+ 'client_key' => 'oauth_clients:',
+ 'access_token_key' => 'oauth_access_tokens:',
+ 'refresh_token_key' => 'oauth_refresh_tokens:',
+ 'code_key' => 'oauth_authorization_codes:',
+ 'user_key' => 'oauth_users:',
+ 'jwt_key' => 'oauth_jwt:',
+ 'scope_key' => 'oauth_scopes:',
+ 'public_key_key' => 'oauth_public_keys:',
+ ), $config);
+ }
+
+ /**
+ * @param $key
+ * @return bool|mixed
+ */
+ protected function getValue($key)
+ {
+ if (isset($this->cache[$key])) {
+ return $this->cache[$key];
+ }
+ $cf = new ColumnFamily($this->cassandra, $this->config['column_family']);
+
+ try {
+ $value = $cf->get($key, new ColumnSlice("", ""));
+ $value = array_shift($value);
+ } catch (\cassandra\NotFoundException $e) {
+ return false;
+ }
+
+ return json_decode($value, true);
+ }
+
+ /**
+ * @param $key
+ * @param $value
+ * @param int $expire
+ * @return bool
+ */
+ protected function setValue($key, $value, $expire = 0)
+ {
+ $this->cache[$key] = $value;
+
+ $cf = new ColumnFamily($this->cassandra, $this->config['column_family']);
+
+ $str = json_encode($value);
+ if ($expire > 0) {
+ try {
+ $seconds = $expire - time();
+ // __data key set as C* requires a field, note: max TTL can only be 630720000 seconds
+ $cf->insert($key, array('__data' => $str), null, $seconds);
+ } catch (\Exception $e) {
+ return false;
+ }
+ } else {
+ try {
+ // __data key set as C* requires a field
+ $cf->insert($key, array('__data' => $str));
+ } catch (\Exception $e) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * @param $key
+ * @return bool
+ */
+ protected function expireValue($key)
+ {
+ unset($this->cache[$key]);
+
+ $cf = new ColumnFamily($this->cassandra, $this->config['column_family']);
+
+ if ($cf->get_count($key) > 0) {
+ try {
+ // __data key set as C* requires a field
+ $cf->remove($key, array('__data'));
+ } catch (\Exception $e) {
+ return false;
+ }
+
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * @param string $code
+ * @return bool|mixed
+ */
+ public function getAuthorizationCode($code)
+ {
+ return $this->getValue($this->config['code_key'] . $code);
+ }
+
+ /**
+ * @param string $authorization_code
+ * @param mixed $client_id
+ * @param mixed $user_id
+ * @param string $redirect_uri
+ * @param int $expires
+ * @param string $scope
+ * @param string $id_token
+ * @return bool
+ */
+ public function setAuthorizationCode($authorization_code, $client_id, $user_id, $redirect_uri, $expires, $scope = null, $id_token = null)
+ {
+ return $this->setValue(
+ $this->config['code_key'] . $authorization_code,
+ compact('authorization_code', 'client_id', 'user_id', 'redirect_uri', 'expires', 'scope', 'id_token'),
+ $expires
+ );
+ }
+
+ /**
+ * @param string $code
+ * @return bool
+ */
+ public function expireAuthorizationCode($code)
+ {
+ $key = $this->config['code_key'] . $code;
+ unset($this->cache[$key]);
+
+ return $this->expireValue($key);
+ }
+
+ /**
+ * @param string $username
+ * @param string $password
+ * @return bool
+ */
+ public function checkUserCredentials($username, $password)
+ {
+ if ($user = $this->getUser($username)) {
+ return $this->checkPassword($user, $password);
+ }
+
+ return false;
+ }
+
+ /**
+ * plaintext passwords are bad! Override this for your application
+ *
+ * @param array $user
+ * @param string $password
+ * @return bool
+ */
+ protected function checkPassword($user, $password)
+ {
+ return $user['password'] == $this->hashPassword($password);
+ }
+
+ // use a secure hashing algorithm when storing passwords. Override this for your application
+ protected function hashPassword($password)
+ {
+ return sha1($password);
+ }
+
+ /**
+ * @param string $username
+ * @return array|bool|false
+ */
+ public function getUserDetails($username)
+ {
+ return $this->getUser($username);
+ }
+
+ /**
+ * @param string $username
+ * @return array|bool
+ */
+ public function getUser($username)
+ {
+ if (!$userInfo = $this->getValue($this->config['user_key'] . $username)) {
+ return false;
+ }
+
+ // the default behavior is to use "username" as the user_id
+ return array_merge(array(
+ 'user_id' => $username,
+ ), $userInfo);
+ }
+
+ /**
+ * @param string $username
+ * @param string $password
+ * @param string $first_name
+ * @param string $last_name
+ * @return bool
+ */
+ public function setUser($username, $password, $first_name = null, $last_name = null)
+ {
+ $password = $this->hashPassword($password);
+
+ return $this->setValue(
+ $this->config['user_key'] . $username,
+ compact('username', 'password', 'first_name', 'last_name')
+ );
+ }
+
+ /**
+ * @param mixed $client_id
+ * @param string $client_secret
+ * @return bool
+ */
+ public function checkClientCredentials($client_id, $client_secret = null)
+ {
+ if (!$client = $this->getClientDetails($client_id)) {
+ return false;
+ }
+
+ return isset($client['client_secret'])
+ && $client['client_secret'] == $client_secret;
+ }
+
+ /**
+ * @param $client_id
+ * @return bool
+ */
+ public function isPublicClient($client_id)
+ {
+ if (!$client = $this->getClientDetails($client_id)) {
+ return false;
+ }
+
+ return empty($client['client_secret']);
+ }
+
+ /**
+ * @param $client_id
+ * @return array|bool|mixed
+ */
+ public function getClientDetails($client_id)
+ {
+ return $this->getValue($this->config['client_key'] . $client_id);
+ }
+
+ /**
+ * @param $client_id
+ * @param null $client_secret
+ * @param null $redirect_uri
+ * @param null $grant_types
+ * @param null $scope
+ * @param null $user_id
+ * @return bool
+ */
+ public function setClientDetails($client_id, $client_secret = null, $redirect_uri = null, $grant_types = null, $scope = null, $user_id = null)
+ {
+ return $this->setValue(
+ $this->config['client_key'] . $client_id,
+ compact('client_id', 'client_secret', 'redirect_uri', 'grant_types', 'scope', 'user_id')
+ );
+ }
+
+ /**
+ * @param $client_id
+ * @param $grant_type
+ * @return bool
+ */
+ public function checkRestrictedGrantType($client_id, $grant_type)
+ {
+ $details = $this->getClientDetails($client_id);
+ if (isset($details['grant_types'])) {
+ $grant_types = explode(' ', $details['grant_types']);
+
+ return in_array($grant_type, (array) $grant_types);
+ }
+
+ // if grant_types are not defined, then none are restricted
+ return true;
+ }
+
+ /**
+ * @param $refresh_token
+ * @return bool|mixed
+ */
+ public function getRefreshToken($refresh_token)
+ {
+ return $this->getValue($this->config['refresh_token_key'] . $refresh_token);
+ }
+
+ /**
+ * @param $refresh_token
+ * @param $client_id
+ * @param $user_id
+ * @param $expires
+ * @param null $scope
+ * @return bool
+ */
+ public function setRefreshToken($refresh_token, $client_id, $user_id, $expires, $scope = null)
+ {
+ return $this->setValue(
+ $this->config['refresh_token_key'] . $refresh_token,
+ compact('refresh_token', 'client_id', 'user_id', 'expires', 'scope'),
+ $expires
+ );
+ }
+
+ /**
+ * @param $refresh_token
+ * @return bool
+ */
+ public function unsetRefreshToken($refresh_token)
+ {
+ return $this->expireValue($this->config['refresh_token_key'] . $refresh_token);
+ }
+
+ /**
+ * @param string $access_token
+ * @return array|bool|mixed|null
+ */
+ public function getAccessToken($access_token)
+ {
+ return $this->getValue($this->config['access_token_key'].$access_token);
+ }
+
+ /**
+ * @param string $access_token
+ * @param mixed $client_id
+ * @param mixed $user_id
+ * @param int $expires
+ * @param null $scope
+ * @return bool
+ */
+ public function setAccessToken($access_token, $client_id, $user_id, $expires, $scope = null)
+ {
+ return $this->setValue(
+ $this->config['access_token_key'].$access_token,
+ compact('access_token', 'client_id', 'user_id', 'expires', 'scope'),
+ $expires
+ );
+ }
+
+ /**
+ * @param $access_token
+ * @return bool
+ */
+ public function unsetAccessToken($access_token)
+ {
+ return $this->expireValue($this->config['access_token_key'] . $access_token);
+ }
+
+ /**
+ * @param $scope
+ * @return bool
+ */
+ public function scopeExists($scope)
+ {
+ $scope = explode(' ', $scope);
+
+ $result = $this->getValue($this->config['scope_key'].'supported:global');
+
+ $supportedScope = explode(' ', (string) $result);
+
+ return (count(array_diff($scope, $supportedScope)) == 0);
+ }
+
+ /**
+ * @param null $client_id
+ * @return bool|mixed
+ */
+ public function getDefaultScope($client_id = null)
+ {
+ if (is_null($client_id) || !$result = $this->getValue($this->config['scope_key'].'default:'.$client_id)) {
+ $result = $this->getValue($this->config['scope_key'].'default:global');
+ }
+
+ return $result;
+ }
+
+ /**
+ * @param $scope
+ * @param null $client_id
+ * @param string $type
+ * @return bool
+ * @throws \InvalidArgumentException
+ */
+ public function setScope($scope, $client_id = null, $type = 'supported')
+ {
+ if (!in_array($type, array('default', 'supported'))) {
+ throw new \InvalidArgumentException('"$type" must be one of "default", "supported"');
+ }
+
+ if (is_null($client_id)) {
+ $key = $this->config['scope_key'].$type.':global';
+ } else {
+ $key = $this->config['scope_key'].$type.':'.$client_id;
+ }
+
+ return $this->setValue($key, $scope);
+ }
+
+ /**
+ * @param $client_id
+ * @param $subject
+ * @return bool|null
+ */
+ public function getClientKey($client_id, $subject)
+ {
+ if (!$jwt = $this->getValue($this->config['jwt_key'] . $client_id)) {
+ return false;
+ }
+
+ if (isset($jwt['subject']) && $jwt['subject'] == $subject ) {
+ return $jwt['key'];
+ }
+
+ return null;
+ }
+
+ /**
+ * @param $client_id
+ * @param $key
+ * @param null $subject
+ * @return bool
+ */
+ public function setClientKey($client_id, $key, $subject = null)
+ {
+ return $this->setValue($this->config['jwt_key'] . $client_id, array(
+ 'key' => $key,
+ 'subject' => $subject
+ ));
+ }
+
+ /**
+ * @param $client_id
+ * @return bool|null
+ */
+ public function getClientScope($client_id)
+ {
+ if (!$clientDetails = $this->getClientDetails($client_id)) {
+ return false;
+ }
+
+ if (isset($clientDetails['scope'])) {
+ return $clientDetails['scope'];
+ }
+
+ return null;
+ }
+
+ /**
+ * @param $client_id
+ * @param $subject
+ * @param $audience
+ * @param $expiration
+ * @param $jti
+ * @throws \Exception
+ */
+ public function getJti($client_id, $subject, $audience, $expiration, $jti)
+ {
+ //TODO: Needs cassandra implementation.
+ throw new \Exception('getJti() for the Cassandra driver is currently unimplemented.');
+ }
+
+ /**
+ * @param $client_id
+ * @param $subject
+ * @param $audience
+ * @param $expiration
+ * @param $jti
+ * @throws \Exception
+ */
+ public function setJti($client_id, $subject, $audience, $expiration, $jti)
+ {
+ //TODO: Needs cassandra implementation.
+ throw new \Exception('setJti() for the Cassandra driver is currently unimplemented.');
+ }
+
+ /**
+ * @param string $client_id
+ * @return mixed
+ */
+ public function getPublicKey($client_id = '')
+ {
+ $public_key = $this->getValue($this->config['public_key_key'] . $client_id);
+ if (is_array($public_key)) {
+ return $public_key['public_key'];
+ }
+ $public_key = $this->getValue($this->config['public_key_key']);
+ if (is_array($public_key)) {
+ return $public_key['public_key'];
+ }
+ }
+
+ /**
+ * @param string $client_id
+ * @return mixed
+ */
+ public function getPrivateKey($client_id = '')
+ {
+ $public_key = $this->getValue($this->config['public_key_key'] . $client_id);
+ if (is_array($public_key)) {
+ return $public_key['private_key'];
+ }
+ $public_key = $this->getValue($this->config['public_key_key']);
+ if (is_array($public_key)) {
+ return $public_key['private_key'];
+ }
+ }
+
+ /**
+ * @param null $client_id
+ * @return mixed|string
+ */
+ public function getEncryptionAlgorithm($client_id = null)
+ {
+ $public_key = $this->getValue($this->config['public_key_key'] . $client_id);
+ if (is_array($public_key)) {
+ return $public_key['encryption_algorithm'];
+ }
+ $public_key = $this->getValue($this->config['public_key_key']);
+ if (is_array($public_key)) {
+ return $public_key['encryption_algorithm'];
+ }
+
+ return 'RS256';
+ }
+
+ /**
+ * @param mixed $user_id
+ * @param string $claims
+ * @return array|bool
+ */
+ public function getUserClaims($user_id, $claims)
+ {
+ $userDetails = $this->getUserDetails($user_id);
+ if (!is_array($userDetails)) {
+ return false;
+ }
+
+ $claims = explode(' ', trim($claims));
+ $userClaims = array();
+
+ // for each requested claim, if the user has the claim, set it in the response
+ $validClaims = explode(' ', self::VALID_CLAIMS);
+ foreach ($validClaims as $validClaim) {
+ if (in_array($validClaim, $claims)) {
+ if ($validClaim == 'address') {
+ // address is an object with subfields
+ $userClaims['address'] = $this->getUserClaim($validClaim, $userDetails['address'] ?: $userDetails);
+ } else {
+ $userClaims = array_merge($userClaims, $this->getUserClaim($validClaim, $userDetails));
+ }
+ }
+ }
+
+ return $userClaims;
+ }
+
+ /**
+ * @param $claim
+ * @param $userDetails
+ * @return array
+ */
+ protected function getUserClaim($claim, $userDetails)
+ {
+ $userClaims = array();
+ $claimValuesString = constant(sprintf('self::%s_CLAIM_VALUES', strtoupper($claim)));
+ $claimValues = explode(' ', $claimValuesString);
+
+ foreach ($claimValues as $value) {
+ if ($value == 'email_verified') {
+ $userClaims[$value] = $userDetails[$value]=='true' ? true : false;
+ } else {
+ $userClaims[$value] = isset($userDetails[$value]) ? $userDetails[$value] : null;
+ }
+ }
+
+ return $userClaims;
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/ClientCredentialsInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/ClientCredentialsInterface.php
new file mode 100644
index 0000000..3318c69
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/ClientCredentialsInterface.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace OAuth2\Storage;
+
+/**
+ * Implement this interface to specify how the OAuth2 Server
+ * should verify client credentials
+ *
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+interface ClientCredentialsInterface extends ClientInterface
+{
+
+ /**
+ * Make sure that the client credentials is valid.
+ *
+ * @param $client_id
+ * Client identifier to be check with.
+ * @param $client_secret
+ * (optional) If a secret is required, check that they've given the right one.
+ *
+ * @return
+ * TRUE if the client credentials are valid, and MUST return FALSE if it isn't.
+ * @endcode
+ *
+ * @see http://tools.ietf.org/html/rfc6749#section-3.1
+ *
+ * @ingroup oauth2_section_3
+ */
+ public function checkClientCredentials($client_id, $client_secret = null);
+
+ /**
+ * Determine if the client is a "public" client, and therefore
+ * does not require passing credentials for certain grant types
+ *
+ * @param $client_id
+ * Client identifier to be check with.
+ *
+ * @return
+ * TRUE if the client is public, and FALSE if it isn't.
+ * @endcode
+ *
+ * @see http://tools.ietf.org/html/rfc6749#section-2.3
+ * @see https://github.com/bshaffer/oauth2-server-php/issues/257
+ *
+ * @ingroup oauth2_section_2
+ */
+ public function isPublicClient($client_id);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/ClientInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/ClientInterface.php
new file mode 100644
index 0000000..09a5bff
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/ClientInterface.php
@@ -0,0 +1,66 @@
+<?php
+
+namespace OAuth2\Storage;
+
+/**
+ * Implement this interface to specify where the OAuth2 Server
+ * should retrieve client information
+ *
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+interface ClientInterface
+{
+ /**
+ * Get client details corresponding client_id.
+ *
+ * OAuth says we should store request URIs for each registered client.
+ * Implement this function to grab the stored URI for a given client id.
+ *
+ * @param $client_id
+ * Client identifier to be check with.
+ *
+ * @return array
+ * Client details. The only mandatory key in the array is "redirect_uri".
+ * This function MUST return FALSE if the given client does not exist or is
+ * invalid. "redirect_uri" can be space-delimited to allow for multiple valid uris.
+ * <code>
+ * return array(
+ * "redirect_uri" => REDIRECT_URI, // REQUIRED redirect_uri registered for the client
+ * "client_id" => CLIENT_ID, // OPTIONAL the client id
+ * "grant_types" => GRANT_TYPES, // OPTIONAL an array of restricted grant types
+ * "user_id" => USER_ID, // OPTIONAL the user identifier associated with this client
+ * "scope" => SCOPE, // OPTIONAL the scopes allowed for this client
+ * );
+ * </code>
+ *
+ * @ingroup oauth2_section_4
+ */
+ public function getClientDetails($client_id);
+
+ /**
+ * Get the scope associated with this client
+ *
+ * @return
+ * STRING the space-delineated scope list for the specified client_id
+ */
+ public function getClientScope($client_id);
+
+ /**
+ * Check restricted grant types of corresponding client identifier.
+ *
+ * If you want to restrict clients to certain grant types, override this
+ * function.
+ *
+ * @param $client_id
+ * Client identifier to be check with.
+ * @param $grant_type
+ * Grant type to be check with
+ *
+ * @return
+ * TRUE if the grant type is supported by this client identifier, and
+ * FALSE if it isn't.
+ *
+ * @ingroup oauth2_section_4
+ */
+ public function checkRestrictedGrantType($client_id, $grant_type);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/CouchbaseDB.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/CouchbaseDB.php
new file mode 100755
index 0000000..9e8148b
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/CouchbaseDB.php
@@ -0,0 +1,331 @@
+<?php
+
+namespace OAuth2\Storage;
+
+use OAuth2\OpenID\Storage\AuthorizationCodeInterface as OpenIDAuthorizationCodeInterface;
+
+/**
+ * Simple Couchbase storage for all storage types
+ *
+ * This class should be extended or overridden as required
+ *
+ * NOTE: Passwords are stored in plaintext, which is never
+ * a good idea. Be sure to override this for your application
+ *
+ * @author Tom Park <tom@raucter.com>
+ */
+class CouchbaseDB implements AuthorizationCodeInterface,
+ AccessTokenInterface,
+ ClientCredentialsInterface,
+ UserCredentialsInterface,
+ RefreshTokenInterface,
+ JwtBearerInterface,
+ OpenIDAuthorizationCodeInterface
+{
+ protected $db;
+ protected $config;
+
+ public function __construct($connection, $config = array())
+ {
+ if ($connection instanceof \Couchbase) {
+ $this->db = $connection;
+ } else {
+ if (!is_array($connection) || !is_array($connection['servers'])) {
+ throw new \InvalidArgumentException('First argument to OAuth2\Storage\CouchbaseDB must be an instance of Couchbase or a configuration array containing a server array');
+ }
+
+ $this->db = new \Couchbase($connection['servers'], (!isset($connection['username'])) ? '' : $connection['username'], (!isset($connection['password'])) ? '' : $connection['password'], $connection['bucket'], false);
+ }
+
+ $this->config = array_merge(array(
+ 'client_table' => 'oauth_clients',
+ 'access_token_table' => 'oauth_access_tokens',
+ 'refresh_token_table' => 'oauth_refresh_tokens',
+ 'code_table' => 'oauth_authorization_codes',
+ 'user_table' => 'oauth_users',
+ 'jwt_table' => 'oauth_jwt',
+ ), $config);
+ }
+
+ // Helper function to access couchbase item by type:
+ protected function getObjectByType($name,$id)
+ {
+ return json_decode($this->db->get($this->config[$name].'-'.$id),true);
+ }
+
+ // Helper function to set couchbase item by type:
+ protected function setObjectByType($name,$id,$array)
+ {
+ $array['type'] = $name;
+
+ return $this->db->set($this->config[$name].'-'.$id,json_encode($array));
+ }
+
+ // Helper function to delete couchbase item by type, wait for persist to at least 1 node
+ protected function deleteObjectByType($name,$id)
+ {
+ $this->db->delete($this->config[$name].'-'.$id,"",1);
+ }
+
+ /* ClientCredentialsInterface */
+ public function checkClientCredentials($client_id, $client_secret = null)
+ {
+ if ($result = $this->getObjectByType('client_table',$client_id)) {
+ return $result['client_secret'] == $client_secret;
+ }
+
+ return false;
+ }
+
+ public function isPublicClient($client_id)
+ {
+ if (!$result = $this->getObjectByType('client_table',$client_id)) {
+ return false;
+ }
+
+ return empty($result['client_secret']);
+ }
+
+ /* ClientInterface */
+ public function getClientDetails($client_id)
+ {
+ $result = $this->getObjectByType('client_table',$client_id);
+
+ return is_null($result) ? false : $result;
+ }
+
+ public function setClientDetails($client_id, $client_secret = null, $redirect_uri = null, $grant_types = null, $scope = null, $user_id = null)
+ {
+ if ($this->getClientDetails($client_id)) {
+
+ $this->setObjectByType('client_table',$client_id, array(
+ 'client_id' => $client_id,
+ 'client_secret' => $client_secret,
+ 'redirect_uri' => $redirect_uri,
+ 'grant_types' => $grant_types,
+ 'scope' => $scope,
+ 'user_id' => $user_id,
+ ));
+ } else {
+ $this->setObjectByType('client_table',$client_id, array(
+ 'client_id' => $client_id,
+ 'client_secret' => $client_secret,
+ 'redirect_uri' => $redirect_uri,
+ 'grant_types' => $grant_types,
+ 'scope' => $scope,
+ 'user_id' => $user_id,
+ ));
+ }
+
+ return true;
+ }
+
+ public function checkRestrictedGrantType($client_id, $grant_type)
+ {
+ $details = $this->getClientDetails($client_id);
+ if (isset($details['grant_types'])) {
+ $grant_types = explode(' ', $details['grant_types']);
+
+ return in_array($grant_type, $grant_types);
+ }
+
+ // if grant_types are not defined, then none are restricted
+ return true;
+ }
+
+ /* AccessTokenInterface */
+ public function getAccessToken($access_token)
+ {
+ $token = $this->getObjectByType('access_token_table',$access_token);
+
+ return is_null($token) ? false : $token;
+ }
+
+ public function setAccessToken($access_token, $client_id, $user_id, $expires, $scope = null)
+ {
+ // if it exists, update it.
+ if ($this->getAccessToken($access_token)) {
+ $this->setObjectByType('access_token_table',$access_token, array(
+ 'access_token' => $access_token,
+ 'client_id' => $client_id,
+ 'expires' => $expires,
+ 'user_id' => $user_id,
+ 'scope' => $scope
+ ));
+ } else {
+ $this->setObjectByType('access_token_table',$access_token, array(
+ 'access_token' => $access_token,
+ 'client_id' => $client_id,
+ 'expires' => $expires,
+ 'user_id' => $user_id,
+ 'scope' => $scope
+ ));
+ }
+
+ return true;
+ }
+
+ /* AuthorizationCodeInterface */
+ public function getAuthorizationCode($code)
+ {
+ $code = $this->getObjectByType('code_table',$code);
+
+ return is_null($code) ? false : $code;
+ }
+
+ public function setAuthorizationCode($code, $client_id, $user_id, $redirect_uri, $expires, $scope = null, $id_token = null)
+ {
+ // if it exists, update it.
+ if ($this->getAuthorizationCode($code)) {
+ $this->setObjectByType('code_table',$code, array(
+ 'authorization_code' => $code,
+ 'client_id' => $client_id,
+ 'user_id' => $user_id,
+ 'redirect_uri' => $redirect_uri,
+ 'expires' => $expires,
+ 'scope' => $scope,
+ 'id_token' => $id_token,
+ ));
+ } else {
+ $this->setObjectByType('code_table',$code,array(
+ 'authorization_code' => $code,
+ 'client_id' => $client_id,
+ 'user_id' => $user_id,
+ 'redirect_uri' => $redirect_uri,
+ 'expires' => $expires,
+ 'scope' => $scope,
+ 'id_token' => $id_token,
+ ));
+ }
+
+ return true;
+ }
+
+ public function expireAuthorizationCode($code)
+ {
+ $this->deleteObjectByType('code_table',$code);
+
+ return true;
+ }
+
+ /* UserCredentialsInterface */
+ public function checkUserCredentials($username, $password)
+ {
+ if ($user = $this->getUser($username)) {
+ return $this->checkPassword($user, $password);
+ }
+
+ return false;
+ }
+
+ public function getUserDetails($username)
+ {
+ if ($user = $this->getUser($username)) {
+ $user['user_id'] = $user['username'];
+ }
+
+ return $user;
+ }
+
+ /* RefreshTokenInterface */
+ public function getRefreshToken($refresh_token)
+ {
+ $token = $this->getObjectByType('refresh_token_table',$refresh_token);
+
+ return is_null($token) ? false : $token;
+ }
+
+ public function setRefreshToken($refresh_token, $client_id, $user_id, $expires, $scope = null)
+ {
+ $this->setObjectByType('refresh_token_table',$refresh_token, array(
+ 'refresh_token' => $refresh_token,
+ 'client_id' => $client_id,
+ 'user_id' => $user_id,
+ 'expires' => $expires,
+ 'scope' => $scope
+ ));
+
+ return true;
+ }
+
+ public function unsetRefreshToken($refresh_token)
+ {
+ $this->deleteObjectByType('refresh_token_table',$refresh_token);
+
+ return true;
+ }
+
+ // plaintext passwords are bad! Override this for your application
+ protected function checkPassword($user, $password)
+ {
+ return $user['password'] == $password;
+ }
+
+ public function getUser($username)
+ {
+ $result = $this->getObjectByType('user_table',$username);
+
+ return is_null($result) ? false : $result;
+ }
+
+ public function setUser($username, $password, $firstName = null, $lastName = null)
+ {
+ if ($this->getUser($username)) {
+ $this->setObjectByType('user_table',$username, array(
+ 'username' => $username,
+ 'password' => $password,
+ 'first_name' => $firstName,
+ 'last_name' => $lastName
+ ));
+
+ } else {
+ $this->setObjectByType('user_table',$username, array(
+ 'username' => $username,
+ 'password' => $password,
+ 'first_name' => $firstName,
+ 'last_name' => $lastName
+ ));
+
+ }
+
+ return true;
+ }
+
+ public function getClientKey($client_id, $subject)
+ {
+ if (!$jwt = $this->getObjectByType('jwt_table',$client_id)) {
+ return false;
+ }
+
+ if (isset($jwt['subject']) && $jwt['subject'] == $subject) {
+ return $jwt['key'];
+ }
+
+ return false;
+ }
+
+ public function getClientScope($client_id)
+ {
+ if (!$clientDetails = $this->getClientDetails($client_id)) {
+ return false;
+ }
+
+ if (isset($clientDetails['scope'])) {
+ return $clientDetails['scope'];
+ }
+
+ return null;
+ }
+
+ public function getJti($client_id, $subject, $audience, $expiration, $jti)
+ {
+ //TODO: Needs couchbase implementation.
+ throw new \Exception('getJti() for the Couchbase driver is currently unimplemented.');
+ }
+
+ public function setJti($client_id, $subject, $audience, $expiration, $jti)
+ {
+ //TODO: Needs couchbase implementation.
+ throw new \Exception('setJti() for the Couchbase driver is currently unimplemented.');
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/DynamoDB.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/DynamoDB.php
new file mode 100644
index 0000000..a54cb37
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/DynamoDB.php
@@ -0,0 +1,540 @@
+<?php
+
+namespace OAuth2\Storage;
+
+use Aws\DynamoDb\DynamoDbClient;
+
+use OAuth2\OpenID\Storage\UserClaimsInterface;
+use OAuth2\OpenID\Storage\AuthorizationCodeInterface as OpenIDAuthorizationCodeInterface;
+/**
+ * DynamoDB storage for all storage types
+ *
+ * To use, install "aws/aws-sdk-php" via composer
+ * <code>
+ * composer require aws/aws-sdk-php:dev-master
+ * </code>
+ *
+ * Once this is done, instantiate the DynamoDB client
+ * <code>
+ * $storage = new OAuth2\Storage\Dynamodb(array("key" => "YOURKEY", "secret" => "YOURSECRET", "region" => "YOURREGION"));
+ * </code>
+ *
+ * Table :
+ * - oauth_access_tokens (primary hash key : access_token)
+ * - oauth_authorization_codes (primary hash key : authorization_code)
+ * - oauth_clients (primary hash key : client_id)
+ * - oauth_jwt (primary hash key : client_id, primary range key : subject)
+ * - oauth_public_keys (primary hash key : client_id)
+ * - oauth_refresh_tokens (primary hash key : refresh_token)
+ * - oauth_scopes (primary hash key : scope, secondary index : is_default-index hash key is_default)
+ * - oauth_users (primary hash key : username)
+ *
+ * @author Frederic AUGUSTE <frederic.auguste at gmail dot com>
+ */
+class DynamoDB implements
+ AuthorizationCodeInterface,
+ AccessTokenInterface,
+ ClientCredentialsInterface,
+ UserCredentialsInterface,
+ RefreshTokenInterface,
+ JwtBearerInterface,
+ ScopeInterface,
+ PublicKeyInterface,
+ UserClaimsInterface,
+ OpenIDAuthorizationCodeInterface
+{
+ protected $client;
+ protected $config;
+
+ public function __construct($connection, $config = array())
+ {
+ if (!($connection instanceof DynamoDbClient)) {
+ if (!is_array($connection)) {
+ throw new \InvalidArgumentException('First argument to OAuth2\Storage\Dynamodb must be an instance a configuration array containt key, secret, region');
+ }
+ if (!array_key_exists("key",$connection) || !array_key_exists("secret",$connection) || !array_key_exists("region",$connection) ) {
+ throw new \InvalidArgumentException('First argument to OAuth2\Storage\Dynamodb must be an instance a configuration array containt key, secret, region');
+ }
+ $this->client = DynamoDbClient::factory(array(
+ 'key' => $connection["key"],
+ 'secret' => $connection["secret"],
+ 'region' =>$connection["region"]
+ ));
+ } else {
+ $this->client = $connection;
+ }
+
+ $this->config = array_merge(array(
+ 'client_table' => 'oauth_clients',
+ 'access_token_table' => 'oauth_access_tokens',
+ 'refresh_token_table' => 'oauth_refresh_tokens',
+ 'code_table' => 'oauth_authorization_codes',
+ 'user_table' => 'oauth_users',
+ 'jwt_table' => 'oauth_jwt',
+ 'scope_table' => 'oauth_scopes',
+ 'public_key_table' => 'oauth_public_keys',
+ ), $config);
+ }
+
+ /* OAuth2\Storage\ClientCredentialsInterface */
+ public function checkClientCredentials($client_id, $client_secret = null)
+ {
+ $result = $this->client->getItem(array(
+ "TableName"=> $this->config['client_table'],
+ "Key" => array('client_id' => array('S' => $client_id))
+ ));
+
+ return $result->count()==1 && $result["Item"]["client_secret"]["S"] == $client_secret;
+ }
+
+ public function isPublicClient($client_id)
+ {
+ $result = $this->client->getItem(array(
+ "TableName"=> $this->config['client_table'],
+ "Key" => array('client_id' => array('S' => $client_id))
+ ));
+
+ if ($result->count()==0) {
+ return false ;
+ }
+
+ return empty($result["Item"]["client_secret"]);
+ }
+
+ /* OAuth2\Storage\ClientInterface */
+ public function getClientDetails($client_id)
+ {
+ $result = $this->client->getItem(array(
+ "TableName"=> $this->config['client_table'],
+ "Key" => array('client_id' => array('S' => $client_id))
+ ));
+ if ($result->count()==0) {
+ return false ;
+ }
+ $result = $this->dynamo2array($result);
+ foreach (array('client_id', 'client_secret', 'redirect_uri', 'grant_types', 'scope', 'user_id') as $key => $val) {
+ if (!array_key_exists ($val, $result)) {
+ $result[$val] = null;
+ }
+ }
+
+ return $result;
+ }
+
+ public function setClientDetails($client_id, $client_secret = null, $redirect_uri = null, $grant_types = null, $scope = null, $user_id = null)
+ {
+ $clientData = compact('client_id', 'client_secret', 'redirect_uri', 'grant_types', 'scope', 'user_id');
+ $clientData = array_filter($clientData, 'self::isNotEmpty');
+
+ $result = $this->client->putItem(array(
+ 'TableName' => $this->config['client_table'],
+ 'Item' => $this->client->formatAttributes($clientData)
+ ));
+
+ return true;
+ }
+
+ public function checkRestrictedGrantType($client_id, $grant_type)
+ {
+ $details = $this->getClientDetails($client_id);
+ if (isset($details['grant_types'])) {
+ $grant_types = explode(' ', $details['grant_types']);
+
+ return in_array($grant_type, (array) $grant_types);
+ }
+
+ // if grant_types are not defined, then none are restricted
+ return true;
+ }
+
+ /* OAuth2\Storage\AccessTokenInterface */
+ public function getAccessToken($access_token)
+ {
+ $result = $this->client->getItem(array(
+ "TableName"=> $this->config['access_token_table'],
+ "Key" => array('access_token' => array('S' => $access_token))
+ ));
+ if ($result->count()==0) {
+ return false ;
+ }
+ $token = $this->dynamo2array($result);
+ if (array_key_exists ('expires', $token)) {
+ $token['expires'] = strtotime($token['expires']);
+ }
+
+ return $token;
+ }
+
+ public function setAccessToken($access_token, $client_id, $user_id, $expires, $scope = null)
+ {
+ // convert expires to datestring
+ $expires = date('Y-m-d H:i:s', $expires);
+
+ $clientData = compact('access_token', 'client_id', 'user_id', 'expires', 'scope');
+ $clientData = array_filter($clientData, 'self::isNotEmpty');
+
+ $result = $this->client->putItem(array(
+ 'TableName' => $this->config['access_token_table'],
+ 'Item' => $this->client->formatAttributes($clientData)
+ ));
+
+ return true;
+
+ }
+
+ public function unsetAccessToken($access_token)
+ {
+ $result = $this->client->deleteItem(array(
+ 'TableName' => $this->config['access_token_table'],
+ 'Key' => $this->client->formatAttributes(array("access_token" => $access_token)),
+ 'ReturnValues' => 'ALL_OLD',
+ ));
+
+ return null !== $result->get('Attributes');
+ }
+
+ /* OAuth2\Storage\AuthorizationCodeInterface */
+ public function getAuthorizationCode($code)
+ {
+ $result = $this->client->getItem(array(
+ "TableName"=> $this->config['code_table'],
+ "Key" => array('authorization_code' => array('S' => $code))
+ ));
+ if ($result->count()==0) {
+ return false ;
+ }
+ $token = $this->dynamo2array($result);
+ if (!array_key_exists("id_token", $token )) {
+ $token['id_token'] = null;
+ }
+ $token['expires'] = strtotime($token['expires']);
+
+ return $token;
+
+ }
+
+ public function setAuthorizationCode($authorization_code, $client_id, $user_id, $redirect_uri, $expires, $scope = null, $id_token = null)
+ {
+ // convert expires to datestring
+ $expires = date('Y-m-d H:i:s', $expires);
+
+ $clientData = compact('authorization_code', 'client_id', 'user_id', 'redirect_uri', 'expires', 'id_token', 'scope');
+ $clientData = array_filter($clientData, 'self::isNotEmpty');
+
+ $result = $this->client->putItem(array(
+ 'TableName' => $this->config['code_table'],
+ 'Item' => $this->client->formatAttributes($clientData)
+ ));
+
+ return true;
+ }
+
+ public function expireAuthorizationCode($code)
+ {
+
+ $result = $this->client->deleteItem(array(
+ 'TableName' => $this->config['code_table'],
+ 'Key' => $this->client->formatAttributes(array("authorization_code" => $code))
+ ));
+
+ return true;
+ }
+
+ /* OAuth2\Storage\UserCredentialsInterface */
+ public function checkUserCredentials($username, $password)
+ {
+ if ($user = $this->getUser($username)) {
+ return $this->checkPassword($user, $password);
+ }
+
+ return false;
+ }
+
+ public function getUserDetails($username)
+ {
+ return $this->getUser($username);
+ }
+
+ /* UserClaimsInterface */
+ public function getUserClaims($user_id, $claims)
+ {
+ if (!$userDetails = $this->getUserDetails($user_id)) {
+ return false;
+ }
+
+ $claims = explode(' ', trim($claims));
+ $userClaims = array();
+
+ // for each requested claim, if the user has the claim, set it in the response
+ $validClaims = explode(' ', self::VALID_CLAIMS);
+ foreach ($validClaims as $validClaim) {
+ if (in_array($validClaim, $claims)) {
+ if ($validClaim == 'address') {
+ // address is an object with subfields
+ $userClaims['address'] = $this->getUserClaim($validClaim, $userDetails['address'] ?: $userDetails);
+ } else {
+ $userClaims = array_merge($userClaims, $this->getUserClaim($validClaim, $userDetails));
+ }
+ }
+ }
+
+ return $userClaims;
+ }
+
+ protected function getUserClaim($claim, $userDetails)
+ {
+ $userClaims = array();
+ $claimValuesString = constant(sprintf('self::%s_CLAIM_VALUES', strtoupper($claim)));
+ $claimValues = explode(' ', $claimValuesString);
+
+ foreach ($claimValues as $value) {
+ if ($value == 'email_verified') {
+ $userClaims[$value] = $userDetails[$value]=='true' ? true : false;
+ } else {
+ $userClaims[$value] = isset($userDetails[$value]) ? $userDetails[$value] : null;
+ }
+ }
+
+ return $userClaims;
+ }
+
+ /* OAuth2\Storage\RefreshTokenInterface */
+ public function getRefreshToken($refresh_token)
+ {
+ $result = $this->client->getItem(array(
+ "TableName"=> $this->config['refresh_token_table'],
+ "Key" => array('refresh_token' => array('S' => $refresh_token))
+ ));
+ if ($result->count()==0) {
+ return false ;
+ }
+ $token = $this->dynamo2array($result);
+ $token['expires'] = strtotime($token['expires']);
+
+ return $token;
+ }
+
+ public function setRefreshToken($refresh_token, $client_id, $user_id, $expires, $scope = null)
+ {
+ // convert expires to datestring
+ $expires = date('Y-m-d H:i:s', $expires);
+
+ $clientData = compact('refresh_token', 'client_id', 'user_id', 'expires', 'scope');
+ $clientData = array_filter($clientData, 'self::isNotEmpty');
+
+ $result = $this->client->putItem(array(
+ 'TableName' => $this->config['refresh_token_table'],
+ 'Item' => $this->client->formatAttributes($clientData)
+ ));
+
+ return true;
+ }
+
+ public function unsetRefreshToken($refresh_token)
+ {
+ $result = $this->client->deleteItem(array(
+ 'TableName' => $this->config['refresh_token_table'],
+ 'Key' => $this->client->formatAttributes(array("refresh_token" => $refresh_token))
+ ));
+
+ return true;
+ }
+
+ // plaintext passwords are bad! Override this for your application
+ protected function checkPassword($user, $password)
+ {
+ return $user['password'] == $this->hashPassword($password);
+ }
+
+ // use a secure hashing algorithm when storing passwords. Override this for your application
+ protected function hashPassword($password)
+ {
+ return sha1($password);
+ }
+
+ public function getUser($username)
+ {
+ $result = $this->client->getItem(array(
+ "TableName"=> $this->config['user_table'],
+ "Key" => array('username' => array('S' => $username))
+ ));
+ if ($result->count()==0) {
+ return false ;
+ }
+ $token = $this->dynamo2array($result);
+ $token['user_id'] = $username;
+
+ return $token;
+ }
+
+ public function setUser($username, $password, $first_name = null, $last_name = null)
+ {
+ // do not store in plaintext
+ $password = $this->hashPassword($password);
+
+ $clientData = compact('username', 'password', 'first_name', 'last_name');
+ $clientData = array_filter($clientData, 'self::isNotEmpty');
+
+ $result = $this->client->putItem(array(
+ 'TableName' => $this->config['user_table'],
+ 'Item' => $this->client->formatAttributes($clientData)
+ ));
+
+ return true;
+
+ }
+
+ /* ScopeInterface */
+ public function scopeExists($scope)
+ {
+ $scope = explode(' ', $scope);
+ $scope_query = array();
+ $count = 0;
+ foreach ($scope as $key => $val) {
+ $result = $this->client->query(array(
+ 'TableName' => $this->config['scope_table'],
+ 'Select' => 'COUNT',
+ 'KeyConditions' => array(
+ 'scope' => array(
+ 'AttributeValueList' => array(array('S' => $val)),
+ 'ComparisonOperator' => 'EQ'
+ )
+ )
+ ));
+ $count += $result['Count'];
+ }
+
+ return $count == count($scope);
+ }
+
+ public function getDefaultScope($client_id = null)
+ {
+
+ $result = $this->client->query(array(
+ 'TableName' => $this->config['scope_table'],
+ 'IndexName' => 'is_default-index',
+ 'Select' => 'ALL_ATTRIBUTES',
+ 'KeyConditions' => array(
+ 'is_default' => array(
+ 'AttributeValueList' => array(array('S' => 'true')),
+ 'ComparisonOperator' => 'EQ',
+ ),
+ )
+ ));
+ $defaultScope = array();
+ if ($result->count() > 0) {
+ $array = $result->toArray();
+ foreach ($array["Items"] as $item) {
+ $defaultScope[] = $item['scope']['S'];
+ }
+
+ return empty($defaultScope) ? null : implode(' ', $defaultScope);
+ }
+
+ return null;
+ }
+
+ /* JWTBearerInterface */
+ public function getClientKey($client_id, $subject)
+ {
+ $result = $this->client->getItem(array(
+ "TableName"=> $this->config['jwt_table'],
+ "Key" => array('client_id' => array('S' => $client_id), 'subject' => array('S' => $subject))
+ ));
+ if ($result->count()==0) {
+ return false ;
+ }
+ $token = $this->dynamo2array($result);
+
+ return $token['public_key'];
+ }
+
+ public function getClientScope($client_id)
+ {
+ if (!$clientDetails = $this->getClientDetails($client_id)) {
+ return false;
+ }
+
+ if (isset($clientDetails['scope'])) {
+ return $clientDetails['scope'];
+ }
+
+ return null;
+ }
+
+ public function getJti($client_id, $subject, $audience, $expires, $jti)
+ {
+ //TODO not use.
+ }
+
+ public function setJti($client_id, $subject, $audience, $expires, $jti)
+ {
+ //TODO not use.
+ }
+
+ /* PublicKeyInterface */
+ public function getPublicKey($client_id = '0')
+ {
+
+ $result = $this->client->getItem(array(
+ "TableName"=> $this->config['public_key_table'],
+ "Key" => array('client_id' => array('S' => $client_id))
+ ));
+ if ($result->count()==0) {
+ return false ;
+ }
+ $token = $this->dynamo2array($result);
+
+ return $token['public_key'];
+
+ }
+
+ public function getPrivateKey($client_id = '0')
+ {
+ $result = $this->client->getItem(array(
+ "TableName"=> $this->config['public_key_table'],
+ "Key" => array('client_id' => array('S' => $client_id))
+ ));
+ if ($result->count()==0) {
+ return false ;
+ }
+ $token = $this->dynamo2array($result);
+
+ return $token['private_key'];
+ }
+
+ public function getEncryptionAlgorithm($client_id = null)
+ {
+ $result = $this->client->getItem(array(
+ "TableName"=> $this->config['public_key_table'],
+ "Key" => array('client_id' => array('S' => $client_id))
+ ));
+ if ($result->count()==0) {
+ return 'RS256' ;
+ }
+ $token = $this->dynamo2array($result);
+
+ return $token['encryption_algorithm'];
+ }
+
+ /**
+ * Transform dynamodb resultset to an array.
+ * @param $dynamodbResult
+ * @return $array
+ */
+ private function dynamo2array($dynamodbResult)
+ {
+ $result = array();
+ foreach ($dynamodbResult["Item"] as $key => $val) {
+ $result[$key] = $val["S"];
+ $result[] = $val["S"];
+ }
+
+ return $result;
+ }
+
+ private static function isNotEmpty($value)
+ {
+ return null !== $value && '' !== $value;
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/JwtAccessToken.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/JwtAccessToken.php
new file mode 100644
index 0000000..6ccacd6
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/JwtAccessToken.php
@@ -0,0 +1,87 @@
+<?php
+
+namespace OAuth2\Storage;
+
+use OAuth2\Encryption\EncryptionInterface;
+use OAuth2\Encryption\Jwt;
+
+/**
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+class JwtAccessToken implements JwtAccessTokenInterface
+{
+ protected $publicKeyStorage;
+ protected $tokenStorage;
+ protected $encryptionUtil;
+
+ /**
+ * @param OAuth2\Encryption\PublicKeyInterface $publicKeyStorage the public key encryption to use
+ * @param OAuth2\Storage\AccessTokenInterface $tokenStorage OPTIONAL persist the access token to another storage. This is useful if
+ * you want to retain access token grant information somewhere, but
+ * is not necessary when using this grant type.
+ * @param OAuth2\Encryption\EncryptionInterface $encryptionUtil OPTIONAL class to use for "encode" and "decode" functions.
+ */
+ public function __construct(PublicKeyInterface $publicKeyStorage, AccessTokenInterface $tokenStorage = null, EncryptionInterface $encryptionUtil = null)
+ {
+ $this->publicKeyStorage = $publicKeyStorage;
+ $this->tokenStorage = $tokenStorage;
+ if (is_null($encryptionUtil)) {
+ $encryptionUtil = new Jwt;
+ }
+ $this->encryptionUtil = $encryptionUtil;
+ }
+
+ public function getAccessToken($oauth_token)
+ {
+ // just decode the token, don't verify
+ if (!$tokenData = $this->encryptionUtil->decode($oauth_token, null, false)) {
+ return false;
+ }
+
+ $client_id = isset($tokenData['aud']) ? $tokenData['aud'] : null;
+ $public_key = $this->publicKeyStorage->getPublicKey($client_id);
+ $algorithm = $this->publicKeyStorage->getEncryptionAlgorithm($client_id);
+
+ // now that we have the client_id, verify the token
+ if (false === $this->encryptionUtil->decode($oauth_token, $public_key, array($algorithm))) {
+ return false;
+ }
+
+ // normalize the JWT claims to the format expected by other components in this library
+ return $this->convertJwtToOAuth2($tokenData);
+ }
+
+ public function setAccessToken($oauth_token, $client_id, $user_id, $expires, $scope = null)
+ {
+ if ($this->tokenStorage) {
+ return $this->tokenStorage->setAccessToken($oauth_token, $client_id, $user_id, $expires, $scope);
+ }
+ }
+
+ public function unsetAccessToken($access_token)
+ {
+ if ($this->tokenStorage) {
+ return $this->tokenStorage->unsetAccessToken($access_token);
+ }
+ }
+
+
+ // converts a JWT access token into an OAuth2-friendly format
+ protected function convertJwtToOAuth2($tokenData)
+ {
+ $keyMapping = array(
+ 'aud' => 'client_id',
+ 'exp' => 'expires',
+ 'sub' => 'user_id'
+ );
+
+ foreach ($keyMapping as $jwtKey => $oauth2Key) {
+ if (isset($tokenData[$jwtKey])) {
+ $tokenData[$oauth2Key] = $tokenData[$jwtKey];
+ unset($tokenData[$jwtKey]);
+ }
+ }
+
+ return $tokenData;
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/JwtAccessTokenInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/JwtAccessTokenInterface.php
new file mode 100644
index 0000000..3abb2aa
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/JwtAccessTokenInterface.php
@@ -0,0 +1,14 @@
+<?php
+
+namespace OAuth2\Storage;
+
+/**
+ * No specific methods, but allows the library to check "instanceof"
+ * against interface rather than class
+ *
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+interface JwtAccessTokenInterface extends AccessTokenInterface
+{
+
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/JwtBearerInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/JwtBearerInterface.php
new file mode 100644
index 0000000..c83aa72
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/JwtBearerInterface.php
@@ -0,0 +1,74 @@
+<?php
+
+namespace OAuth2\Storage;
+
+/**
+ * Implement this interface to specify where the OAuth2 Server
+ * should get the JWT key for clients
+ *
+ * @TODO consider extending ClientInterface, as this will almost always
+ * be the same storage as retrieving clientData
+ *
+ * @author F21
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+interface JwtBearerInterface
+{
+ /**
+ * Get the public key associated with a client_id
+ *
+ * @param $client_id
+ * Client identifier to be checked with.
+ *
+ * @return
+ * STRING Return the public key for the client_id if it exists, and MUST return FALSE if it doesn't.
+ */
+ public function getClientKey($client_id, $subject);
+
+ /**
+ * Get a jti (JSON token identifier) by matching against the client_id, subject, audience and expiration.
+ *
+ * @param $client_id
+ * Client identifier to match.
+ *
+ * @param $subject
+ * The subject to match.
+ *
+ * @param $audience
+ * The audience to match.
+ *
+ * @param $expiration
+ * The expiration of the jti.
+ *
+ * @param $jti
+ * The jti to match.
+ *
+ * @return
+ * An associative array as below, and return NULL if the jti does not exist.
+ * - issuer: Stored client identifier.
+ * - subject: Stored subject.
+ * - audience: Stored audience.
+ * - expires: Stored expiration in unix timestamp.
+ * - jti: The stored jti.
+ */
+ public function getJti($client_id, $subject, $audience, $expiration, $jti);
+
+ /**
+ * Store a used jti so that we can check against it to prevent replay attacks.
+ * @param $client_id
+ * Client identifier to insert.
+ *
+ * @param $subject
+ * The subject to insert.
+ *
+ * @param $audience
+ * The audience to insert.
+ *
+ * @param $expiration
+ * The expiration of the jti.
+ *
+ * @param $jti
+ * The jti to insert.
+ */
+ public function setJti($client_id, $subject, $audience, $expiration, $jti);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Memory.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Memory.php
new file mode 100644
index 0000000..2c60b71
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Memory.php
@@ -0,0 +1,381 @@
+<?php
+
+namespace OAuth2\Storage;
+
+use OAuth2\OpenID\Storage\UserClaimsInterface;
+use OAuth2\OpenID\Storage\AuthorizationCodeInterface as OpenIDAuthorizationCodeInterface;
+
+/**
+ * Simple in-memory storage for all storage types
+ *
+ * NOTE: This class should never be used in production, and is
+ * a stub class for example use only
+ *
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+class Memory implements AuthorizationCodeInterface,
+ UserCredentialsInterface,
+ UserClaimsInterface,
+ AccessTokenInterface,
+ ClientCredentialsInterface,
+ RefreshTokenInterface,
+ JwtBearerInterface,
+ ScopeInterface,
+ PublicKeyInterface,
+ OpenIDAuthorizationCodeInterface
+{
+ public $authorizationCodes;
+ public $userCredentials;
+ public $clientCredentials;
+ public $refreshTokens;
+ public $accessTokens;
+ public $jwt;
+ public $jti;
+ public $supportedScopes;
+ public $defaultScope;
+ public $keys;
+
+ public function __construct($params = array())
+ {
+ $params = array_merge(array(
+ 'authorization_codes' => array(),
+ 'user_credentials' => array(),
+ 'client_credentials' => array(),
+ 'refresh_tokens' => array(),
+ 'access_tokens' => array(),
+ 'jwt' => array(),
+ 'jti' => array(),
+ 'default_scope' => null,
+ 'supported_scopes' => array(),
+ 'keys' => array(),
+ ), $params);
+
+ $this->authorizationCodes = $params['authorization_codes'];
+ $this->userCredentials = $params['user_credentials'];
+ $this->clientCredentials = $params['client_credentials'];
+ $this->refreshTokens = $params['refresh_tokens'];
+ $this->accessTokens = $params['access_tokens'];
+ $this->jwt = $params['jwt'];
+ $this->jti = $params['jti'];
+ $this->supportedScopes = $params['supported_scopes'];
+ $this->defaultScope = $params['default_scope'];
+ $this->keys = $params['keys'];
+ }
+
+ /* AuthorizationCodeInterface */
+ public function getAuthorizationCode($code)
+ {
+ if (!isset($this->authorizationCodes[$code])) {
+ return false;
+ }
+
+ return array_merge(array(
+ 'authorization_code' => $code,
+ ), $this->authorizationCodes[$code]);
+ }
+
+ public function setAuthorizationCode($code, $client_id, $user_id, $redirect_uri, $expires, $scope = null, $id_token = null)
+ {
+ $this->authorizationCodes[$code] = compact('code', 'client_id', 'user_id', 'redirect_uri', 'expires', 'scope', 'id_token');
+
+ return true;
+ }
+
+ public function setAuthorizationCodes($authorization_codes)
+ {
+ $this->authorizationCodes = $authorization_codes;
+ }
+
+ public function expireAuthorizationCode($code)
+ {
+ unset($this->authorizationCodes[$code]);
+ }
+
+ /* UserCredentialsInterface */
+ public function checkUserCredentials($username, $password)
+ {
+ $userDetails = $this->getUserDetails($username);
+
+ return $userDetails && $userDetails['password'] && $userDetails['password'] === $password;
+ }
+
+ public function setUser($username, $password, $firstName = null, $lastName = null)
+ {
+ $this->userCredentials[$username] = array(
+ 'password' => $password,
+ 'first_name' => $firstName,
+ 'last_name' => $lastName,
+ );
+
+ return true;
+ }
+
+ public function getUserDetails($username)
+ {
+ if (!isset($this->userCredentials[$username])) {
+ return false;
+ }
+
+ return array_merge(array(
+ 'user_id' => $username,
+ 'password' => null,
+ 'first_name' => null,
+ 'last_name' => null,
+ ), $this->userCredentials[$username]);
+ }
+
+ /* UserClaimsInterface */
+ public function getUserClaims($user_id, $claims)
+ {
+ if (!$userDetails = $this->getUserDetails($user_id)) {
+ return false;
+ }
+
+ $claims = explode(' ', trim($claims));
+ $userClaims = array();
+
+ // for each requested claim, if the user has the claim, set it in the response
+ $validClaims = explode(' ', self::VALID_CLAIMS);
+ foreach ($validClaims as $validClaim) {
+ if (in_array($validClaim, $claims)) {
+ if ($validClaim == 'address') {
+ // address is an object with subfields
+ $userClaims['address'] = $this->getUserClaim($validClaim, $userDetails['address'] ?: $userDetails);
+ } else {
+ $userClaims = array_merge($userClaims, $this->getUserClaim($validClaim, $userDetails));
+ }
+ }
+ }
+
+ return $userClaims;
+ }
+
+ protected function getUserClaim($claim, $userDetails)
+ {
+ $userClaims = array();
+ $claimValuesString = constant(sprintf('self::%s_CLAIM_VALUES', strtoupper($claim)));
+ $claimValues = explode(' ', $claimValuesString);
+
+ foreach ($claimValues as $value) {
+ $userClaims[$value] = isset($userDetails[$value]) ? $userDetails[$value] : null;
+ }
+
+ return $userClaims;
+ }
+
+ /* ClientCredentialsInterface */
+ public function checkClientCredentials($client_id, $client_secret = null)
+ {
+ return isset($this->clientCredentials[$client_id]['client_secret']) && $this->clientCredentials[$client_id]['client_secret'] === $client_secret;
+ }
+
+ public function isPublicClient($client_id)
+ {
+ if (!isset($this->clientCredentials[$client_id])) {
+ return false;
+ }
+
+ return empty($this->clientCredentials[$client_id]['client_secret']);
+ }
+
+ /* ClientInterface */
+ public function getClientDetails($client_id)
+ {
+ if (!isset($this->clientCredentials[$client_id])) {
+ return false;
+ }
+
+ $clientDetails = array_merge(array(
+ 'client_id' => $client_id,
+ 'client_secret' => null,
+ 'redirect_uri' => null,
+ 'scope' => null,
+ ), $this->clientCredentials[$client_id]);
+
+ return $clientDetails;
+ }
+
+ public function checkRestrictedGrantType($client_id, $grant_type)
+ {
+ if (isset($this->clientCredentials[$client_id]['grant_types'])) {
+ $grant_types = explode(' ', $this->clientCredentials[$client_id]['grant_types']);
+
+ return in_array($grant_type, $grant_types);
+ }
+
+ // if grant_types are not defined, then none are restricted
+ return true;
+ }
+
+ public function setClientDetails($client_id, $client_secret = null, $redirect_uri = null, $grant_types = null, $scope = null, $user_id = null)
+ {
+ $this->clientCredentials[$client_id] = array(
+ 'client_id' => $client_id,
+ 'client_secret' => $client_secret,
+ 'redirect_uri' => $redirect_uri,
+ 'grant_types' => $grant_types,
+ 'scope' => $scope,
+ 'user_id' => $user_id,
+ );
+
+ return true;
+ }
+
+ /* RefreshTokenInterface */
+ public function getRefreshToken($refresh_token)
+ {
+ return isset($this->refreshTokens[$refresh_token]) ? $this->refreshTokens[$refresh_token] : false;
+ }
+
+ public function setRefreshToken($refresh_token, $client_id, $user_id, $expires, $scope = null)
+ {
+ $this->refreshTokens[$refresh_token] = compact('refresh_token', 'client_id', 'user_id', 'expires', 'scope');
+
+ return true;
+ }
+
+ public function unsetRefreshToken($refresh_token)
+ {
+ if (isset($this->refreshTokens[$refresh_token])) {
+ unset($this->refreshTokens[$refresh_token]);
+
+ return true;
+ }
+
+ return false;
+ }
+
+ public function setRefreshTokens($refresh_tokens)
+ {
+ $this->refreshTokens = $refresh_tokens;
+ }
+
+ /* AccessTokenInterface */
+ public function getAccessToken($access_token)
+ {
+ return isset($this->accessTokens[$access_token]) ? $this->accessTokens[$access_token] : false;
+ }
+
+ public function setAccessToken($access_token, $client_id, $user_id, $expires, $scope = null, $id_token = null)
+ {
+ $this->accessTokens[$access_token] = compact('access_token', 'client_id', 'user_id', 'expires', 'scope', 'id_token');
+
+ return true;
+ }
+
+ public function unsetAccessToken($access_token)
+ {
+ if (isset($this->accessTokens[$access_token])) {
+ unset($this->accessTokens[$access_token]);
+
+ return true;
+ }
+
+ return false;
+ }
+
+ public function scopeExists($scope)
+ {
+ $scope = explode(' ', trim($scope));
+
+ return (count(array_diff($scope, $this->supportedScopes)) == 0);
+ }
+
+ public function getDefaultScope($client_id = null)
+ {
+ return $this->defaultScope;
+ }
+
+ /*JWTBearerInterface */
+ public function getClientKey($client_id, $subject)
+ {
+ if (isset($this->jwt[$client_id])) {
+ $jwt = $this->jwt[$client_id];
+ if ($jwt) {
+ if ($jwt["subject"] == $subject) {
+ return $jwt["key"];
+ }
+ }
+ }
+
+ return false;
+ }
+
+ public function getClientScope($client_id)
+ {
+ if (!$clientDetails = $this->getClientDetails($client_id)) {
+ return false;
+ }
+
+ if (isset($clientDetails['scope'])) {
+ return $clientDetails['scope'];
+ }
+
+ return null;
+ }
+
+ public function getJti($client_id, $subject, $audience, $expires, $jti)
+ {
+ foreach ($this->jti as $storedJti) {
+ if ($storedJti['issuer'] == $client_id && $storedJti['subject'] == $subject && $storedJti['audience'] == $audience && $storedJti['expires'] == $expires && $storedJti['jti'] == $jti) {
+ return array(
+ 'issuer' => $storedJti['issuer'],
+ 'subject' => $storedJti['subject'],
+ 'audience' => $storedJti['audience'],
+ 'expires' => $storedJti['expires'],
+ 'jti' => $storedJti['jti']
+ );
+ }
+ }
+
+ return null;
+ }
+
+ public function setJti($client_id, $subject, $audience, $expires, $jti)
+ {
+ $this->jti[] = array('issuer' => $client_id, 'subject' => $subject, 'audience' => $audience, 'expires' => $expires, 'jti' => $jti);
+ }
+
+ /*PublicKeyInterface */
+ public function getPublicKey($client_id = null)
+ {
+ if (isset($this->keys[$client_id])) {
+ return $this->keys[$client_id]['public_key'];
+ }
+
+ // use a global encryption pair
+ if (isset($this->keys['public_key'])) {
+ return $this->keys['public_key'];
+ }
+
+ return false;
+ }
+
+ public function getPrivateKey($client_id = null)
+ {
+ if (isset($this->keys[$client_id])) {
+ return $this->keys[$client_id]['private_key'];
+ }
+
+ // use a global encryption pair
+ if (isset($this->keys['private_key'])) {
+ return $this->keys['private_key'];
+ }
+
+ return false;
+ }
+
+ public function getEncryptionAlgorithm($client_id = null)
+ {
+ if (isset($this->keys[$client_id]['encryption_algorithm'])) {
+ return $this->keys[$client_id]['encryption_algorithm'];
+ }
+
+ // use a global encryption algorithm
+ if (isset($this->keys['encryption_algorithm'])) {
+ return $this->keys['encryption_algorithm'];
+ }
+
+ return 'RS256';
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Mongo.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Mongo.php
new file mode 100644
index 0000000..eea06e3
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Mongo.php
@@ -0,0 +1,392 @@
+<?php
+
+namespace OAuth2\Storage;
+
+use OAuth2\OpenID\Storage\AuthorizationCodeInterface as OpenIDAuthorizationCodeInterface;
+
+/**
+ * Simple MongoDB storage for all storage types
+ *
+ * NOTE: This class is meant to get users started
+ * quickly. If your application requires further
+ * customization, extend this class or create your own.
+ *
+ * NOTE: Passwords are stored in plaintext, which is never
+ * a good idea. Be sure to override this for your application
+ *
+ * @author Julien Chaumond <chaumond@gmail.com>
+ */
+class Mongo implements AuthorizationCodeInterface,
+ AccessTokenInterface,
+ ClientCredentialsInterface,
+ UserCredentialsInterface,
+ RefreshTokenInterface,
+ JwtBearerInterface,
+ PublicKeyInterface,
+ OpenIDAuthorizationCodeInterface
+{
+ protected $db;
+ protected $config;
+
+ public function __construct($connection, $config = array())
+ {
+ if ($connection instanceof \MongoDB) {
+ $this->db = $connection;
+ } else {
+ if (!is_array($connection)) {
+ throw new \InvalidArgumentException('First argument to OAuth2\Storage\Mongo must be an instance of MongoDB or a configuration array');
+ }
+ $server = sprintf('mongodb://%s:%d', $connection['host'], $connection['port']);
+ $m = new \MongoClient($server);
+ $this->db = $m->{$connection['database']};
+ }
+
+ $this->config = array_merge(array(
+ 'client_table' => 'oauth_clients',
+ 'access_token_table' => 'oauth_access_tokens',
+ 'refresh_token_table' => 'oauth_refresh_tokens',
+ 'code_table' => 'oauth_authorization_codes',
+ 'user_table' => 'oauth_users',
+ 'key_table' => 'oauth_keys',
+ 'jwt_table' => 'oauth_jwt',
+ ), $config);
+ }
+
+ // Helper function to access a MongoDB collection by `type`:
+ protected function collection($name)
+ {
+ return $this->db->{$this->config[$name]};
+ }
+
+ /* ClientCredentialsInterface */
+ public function checkClientCredentials($client_id, $client_secret = null)
+ {
+ if ($result = $this->collection('client_table')->findOne(array('client_id' => $client_id))) {
+ return $result['client_secret'] == $client_secret;
+ }
+
+ return false;
+ }
+
+ public function isPublicClient($client_id)
+ {
+ if (!$result = $this->collection('client_table')->findOne(array('client_id' => $client_id))) {
+ return false;
+ }
+
+ return empty($result['client_secret']);
+ }
+
+ /* ClientInterface */
+ public function getClientDetails($client_id)
+ {
+ $result = $this->collection('client_table')->findOne(array('client_id' => $client_id));
+
+ return is_null($result) ? false : $result;
+ }
+
+ public function setClientDetails($client_id, $client_secret = null, $redirect_uri = null, $grant_types = null, $scope = null, $user_id = null)
+ {
+ if ($this->getClientDetails($client_id)) {
+ $this->collection('client_table')->update(
+ array('client_id' => $client_id),
+ array('$set' => array(
+ 'client_secret' => $client_secret,
+ 'redirect_uri' => $redirect_uri,
+ 'grant_types' => $grant_types,
+ 'scope' => $scope,
+ 'user_id' => $user_id,
+ ))
+ );
+ } else {
+ $client = array(
+ 'client_id' => $client_id,
+ 'client_secret' => $client_secret,
+ 'redirect_uri' => $redirect_uri,
+ 'grant_types' => $grant_types,
+ 'scope' => $scope,
+ 'user_id' => $user_id,
+ );
+ $this->collection('client_table')->insert($client);
+ }
+
+ return true;
+ }
+
+ public function checkRestrictedGrantType($client_id, $grant_type)
+ {
+ $details = $this->getClientDetails($client_id);
+ if (isset($details['grant_types'])) {
+ $grant_types = explode(' ', $details['grant_types']);
+
+ return in_array($grant_type, $grant_types);
+ }
+
+ // if grant_types are not defined, then none are restricted
+ return true;
+ }
+
+ /* AccessTokenInterface */
+ public function getAccessToken($access_token)
+ {
+ $token = $this->collection('access_token_table')->findOne(array('access_token' => $access_token));
+
+ return is_null($token) ? false : $token;
+ }
+
+ public function setAccessToken($access_token, $client_id, $user_id, $expires, $scope = null)
+ {
+ // if it exists, update it.
+ if ($this->getAccessToken($access_token)) {
+ $this->collection('access_token_table')->update(
+ array('access_token' => $access_token),
+ array('$set' => array(
+ 'client_id' => $client_id,
+ 'expires' => $expires,
+ 'user_id' => $user_id,
+ 'scope' => $scope
+ ))
+ );
+ } else {
+ $token = array(
+ 'access_token' => $access_token,
+ 'client_id' => $client_id,
+ 'expires' => $expires,
+ 'user_id' => $user_id,
+ 'scope' => $scope
+ );
+ $this->collection('access_token_table')->insert($token);
+ }
+
+ return true;
+ }
+
+ public function unsetAccessToken($access_token)
+ {
+ $result = $this->collection('access_token_table')->remove(array(
+ 'access_token' => $access_token
+ ), array('w' => 1));
+
+ return $result['n'] > 0;
+ }
+
+
+ /* AuthorizationCodeInterface */
+ public function getAuthorizationCode($code)
+ {
+ $code = $this->collection('code_table')->findOne(array('authorization_code' => $code));
+
+ return is_null($code) ? false : $code;
+ }
+
+ public function setAuthorizationCode($code, $client_id, $user_id, $redirect_uri, $expires, $scope = null, $id_token = null)
+ {
+ // if it exists, update it.
+ if ($this->getAuthorizationCode($code)) {
+ $this->collection('code_table')->update(
+ array('authorization_code' => $code),
+ array('$set' => array(
+ 'client_id' => $client_id,
+ 'user_id' => $user_id,
+ 'redirect_uri' => $redirect_uri,
+ 'expires' => $expires,
+ 'scope' => $scope,
+ 'id_token' => $id_token,
+ ))
+ );
+ } else {
+ $token = array(
+ 'authorization_code' => $code,
+ 'client_id' => $client_id,
+ 'user_id' => $user_id,
+ 'redirect_uri' => $redirect_uri,
+ 'expires' => $expires,
+ 'scope' => $scope,
+ 'id_token' => $id_token,
+ );
+ $this->collection('code_table')->insert($token);
+ }
+
+ return true;
+ }
+
+ public function expireAuthorizationCode($code)
+ {
+ $this->collection('code_table')->remove(array('authorization_code' => $code));
+
+ return true;
+ }
+
+ /* UserCredentialsInterface */
+ public function checkUserCredentials($username, $password)
+ {
+ if ($user = $this->getUser($username)) {
+ return $this->checkPassword($user, $password);
+ }
+
+ return false;
+ }
+
+ public function getUserDetails($username)
+ {
+ if ($user = $this->getUser($username)) {
+ $user['user_id'] = $user['username'];
+ }
+
+ return $user;
+ }
+
+ /* RefreshTokenInterface */
+ public function getRefreshToken($refresh_token)
+ {
+ $token = $this->collection('refresh_token_table')->findOne(array('refresh_token' => $refresh_token));
+
+ return is_null($token) ? false : $token;
+ }
+
+ public function setRefreshToken($refresh_token, $client_id, $user_id, $expires, $scope = null)
+ {
+ $token = array(
+ 'refresh_token' => $refresh_token,
+ 'client_id' => $client_id,
+ 'user_id' => $user_id,
+ 'expires' => $expires,
+ 'scope' => $scope
+ );
+ $this->collection('refresh_token_table')->insert($token);
+
+ return true;
+ }
+
+ public function unsetRefreshToken($refresh_token)
+ {
+ $result = $this->collection('refresh_token_table')->remove(array(
+ 'refresh_token' => $refresh_token
+ ), array('w' => 1));
+
+ return $result['n'] > 0;
+ }
+
+ // plaintext passwords are bad! Override this for your application
+ protected function checkPassword($user, $password)
+ {
+ return $user['password'] == $password;
+ }
+
+ public function getUser($username)
+ {
+ $result = $this->collection('user_table')->findOne(array('username' => $username));
+
+ return is_null($result) ? false : $result;
+ }
+
+ public function setUser($username, $password, $firstName = null, $lastName = null)
+ {
+ if ($this->getUser($username)) {
+ $this->collection('user_table')->update(
+ array('username' => $username),
+ array('$set' => array(
+ 'password' => $password,
+ 'first_name' => $firstName,
+ 'last_name' => $lastName
+ ))
+ );
+ } else {
+ $user = array(
+ 'username' => $username,
+ 'password' => $password,
+ 'first_name' => $firstName,
+ 'last_name' => $lastName
+ );
+ $this->collection('user_table')->insert($user);
+ }
+
+ return true;
+ }
+
+ public function getClientKey($client_id, $subject)
+ {
+ $result = $this->collection('jwt_table')->findOne(array(
+ 'client_id' => $client_id,
+ 'subject' => $subject
+ ));
+
+ return is_null($result) ? false : $result['key'];
+ }
+
+ public function getClientScope($client_id)
+ {
+ if (!$clientDetails = $this->getClientDetails($client_id)) {
+ return false;
+ }
+
+ if (isset($clientDetails['scope'])) {
+ return $clientDetails['scope'];
+ }
+
+ return null;
+ }
+
+ public function getJti($client_id, $subject, $audience, $expiration, $jti)
+ {
+ //TODO: Needs mongodb implementation.
+ throw new \Exception('getJti() for the MongoDB driver is currently unimplemented.');
+ }
+
+ public function setJti($client_id, $subject, $audience, $expiration, $jti)
+ {
+ //TODO: Needs mongodb implementation.
+ throw new \Exception('setJti() for the MongoDB driver is currently unimplemented.');
+ }
+
+ public function getPublicKey($client_id = null)
+ {
+ if ($client_id) {
+ $result = $this->collection('key_table')->findOne(array(
+ 'client_id' => $client_id
+ ));
+ if ($result) {
+ return $result['public_key'];
+ }
+ }
+
+ $result = $this->collection('key_table')->findOne(array(
+ 'client_id' => null
+ ));
+ return is_null($result) ? false : $result['public_key'];
+ }
+
+ public function getPrivateKey($client_id = null)
+ {
+ if ($client_id) {
+ $result = $this->collection('key_table')->findOne(array(
+ 'client_id' => $client_id
+ ));
+ if ($result) {
+ return $result['private_key'];
+ }
+ }
+
+ $result = $this->collection('key_table')->findOne(array(
+ 'client_id' => null
+ ));
+ return is_null($result) ? false : $result['private_key'];
+ }
+
+ public function getEncryptionAlgorithm($client_id = null)
+ {
+ if ($client_id) {
+ $result = $this->collection('key_table')->findOne(array(
+ 'client_id' => $client_id
+ ));
+ if ($result) {
+ return $result['encryption_algorithm'];
+ }
+ }
+
+ $result = $this->collection('key_table')->findOne(array(
+ 'client_id' => null
+ ));
+ return is_null($result) ? 'RS256' : $result['encryption_algorithm'];
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/MongoDB.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/MongoDB.php
new file mode 100644
index 0000000..64f740f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/MongoDB.php
@@ -0,0 +1,380 @@
+<?php
+
+namespace OAuth2\Storage;
+
+use MongoDB\Client;
+use MongoDB\Database;
+use OAuth2\OpenID\Storage\AuthorizationCodeInterface as OpenIDAuthorizationCodeInterface;
+
+/**
+ * Simple MongoDB storage for all storage types
+ *
+ * NOTE: This class is meant to get users started
+ * quickly. If your application requires further
+ * customization, extend this class or create your own.
+ *
+ * NOTE: Passwords are stored in plaintext, which is never
+ * a good idea. Be sure to override this for your application
+ *
+ * @author Julien Chaumond <chaumond@gmail.com>
+ */
+class MongoDB implements AuthorizationCodeInterface,
+ UserCredentialsInterface,
+ AccessTokenInterface,
+ ClientCredentialsInterface,
+ RefreshTokenInterface,
+ JwtBearerInterface,
+ PublicKeyInterface,
+ OpenIDAuthorizationCodeInterface
+{
+ protected $db;
+ protected $config;
+
+ public function __construct($connection, $config = array())
+ {
+ if ($connection instanceof Database) {
+ $this->db = $connection;
+ } else {
+ if (!is_array($connection)) {
+ throw new \InvalidArgumentException('First argument to OAuth2\Storage\Mongo must be an instance of MongoDB\Database or a configuration array');
+ }
+ $server = sprintf('mongodb://%s:%d', $connection['host'], $connection['port']);
+ $m = new Client($server);
+ $this->db = $m->selectDatabase($connection['database']);
+ }
+ $this->config = array_merge(array(
+ 'client_table' => 'oauth_clients',
+ 'access_token_table' => 'oauth_access_tokens',
+ 'refresh_token_table' => 'oauth_refresh_tokens',
+ 'code_table' => 'oauth_authorization_codes',
+ 'user_table' => 'oauth_users',
+ 'jwt_table' => 'oauth_jwt',
+ 'jti_table' => 'oauth_jti',
+ 'scope_table' => 'oauth_scopes',
+ 'key_table' => 'oauth_keys',
+ ), $config);
+ }
+
+ /* ClientCredentialsInterface */
+ public function checkClientCredentials($client_id, $client_secret = null)
+ {
+ if ($result = $this->collection('client_table')->findOne(array('client_id' => $client_id))) {
+ return $result['client_secret'] == $client_secret;
+ }
+ return false;
+ }
+
+ public function isPublicClient($client_id)
+ {
+ if (!$result = $this->collection('client_table')->findOne(array('client_id' => $client_id))) {
+ return false;
+ }
+ return empty($result['client_secret']);
+ }
+
+ /* ClientInterface */
+ public function getClientDetails($client_id)
+ {
+ $result = $this->collection('client_table')->findOne(array('client_id' => $client_id));
+ return is_null($result) ? false : $result;
+ }
+
+ public function setClientDetails($client_id, $client_secret = null, $redirect_uri = null, $grant_types = null, $scope = null, $user_id = null)
+ {
+ if ($this->getClientDetails($client_id)) {
+ $result = $this->collection('client_table')->updateOne(
+ array('client_id' => $client_id),
+ array('$set' => array(
+ 'client_secret' => $client_secret,
+ 'redirect_uri' => $redirect_uri,
+ 'grant_types' => $grant_types,
+ 'scope' => $scope,
+ 'user_id' => $user_id,
+ ))
+ );
+ return $result->getMatchedCount() > 0;
+ }
+ $client = array(
+ 'client_id' => $client_id,
+ 'client_secret' => $client_secret,
+ 'redirect_uri' => $redirect_uri,
+ 'grant_types' => $grant_types,
+ 'scope' => $scope,
+ 'user_id' => $user_id,
+ );
+ $result = $this->collection('client_table')->insertOne($client);
+ return $result->getInsertedCount() > 0;
+ }
+
+ public function checkRestrictedGrantType($client_id, $grant_type)
+ {
+ $details = $this->getClientDetails($client_id);
+ if (isset($details['grant_types'])) {
+ $grant_types = explode(' ', $details['grant_types']);
+ return in_array($grant_type, $grant_types);
+ }
+ // if grant_types are not defined, then none are restricted
+ return true;
+ }
+
+ /* AccessTokenInterface */
+ public function getAccessToken($access_token)
+ {
+ $token = $this->collection('access_token_table')->findOne(array('access_token' => $access_token));
+ return is_null($token) ? false : $token;
+ }
+
+ public function setAccessToken($access_token, $client_id, $user_id, $expires, $scope = null)
+ {
+ // if it exists, update it.
+ if ($this->getAccessToken($access_token)) {
+ $result = $this->collection('access_token_table')->updateOne(
+ array('access_token' => $access_token),
+ array('$set' => array(
+ 'client_id' => $client_id,
+ 'expires' => $expires,
+ 'user_id' => $user_id,
+ 'scope' => $scope
+ ))
+ );
+ return $result->getMatchedCount() > 0;
+ }
+ $token = array(
+ 'access_token' => $access_token,
+ 'client_id' => $client_id,
+ 'expires' => $expires,
+ 'user_id' => $user_id,
+ 'scope' => $scope
+ );
+ $result = $this->collection('access_token_table')->insertOne($token);
+ return $result->getInsertedCount() > 0;
+ }
+
+ public function unsetAccessToken($access_token)
+ {
+ $result = $this->collection('access_token_table')->deleteOne(array(
+ 'access_token' => $access_token
+ ));
+ return $result->getDeletedCount() > 0;
+ }
+
+ /* AuthorizationCodeInterface */
+ public function getAuthorizationCode($code)
+ {
+ $code = $this->collection('code_table')->findOne(array(
+ 'authorization_code' => $code
+ ));
+ return is_null($code) ? false : $code;
+ }
+
+ public function setAuthorizationCode($code, $client_id, $user_id, $redirect_uri, $expires, $scope = null, $id_token = null)
+ {
+ // if it exists, update it.
+ if ($this->getAuthorizationCode($code)) {
+ $result = $this->collection('code_table')->updateOne(
+ array('authorization_code' => $code),
+ array('$set' => array(
+ 'client_id' => $client_id,
+ 'user_id' => $user_id,
+ 'redirect_uri' => $redirect_uri,
+ 'expires' => $expires,
+ 'scope' => $scope,
+ 'id_token' => $id_token,
+ ))
+ );
+ return $result->getMatchedCount() > 0;
+ }
+ $token = array(
+ 'authorization_code' => $code,
+ 'client_id' => $client_id,
+ 'user_id' => $user_id,
+ 'redirect_uri' => $redirect_uri,
+ 'expires' => $expires,
+ 'scope' => $scope,
+ 'id_token' => $id_token,
+ );
+ $result = $this->collection('code_table')->insertOne($token);
+ return $result->getInsertedCount() > 0;
+ }
+
+ public function expireAuthorizationCode($code)
+ {
+ $result = $this->collection('code_table')->deleteOne(array(
+ 'authorization_code' => $code
+ ));
+ return $result->getDeletedCount() > 0;
+ }
+
+ /* UserCredentialsInterface */
+ public function checkUserCredentials($username, $password)
+ {
+ if ($user = $this->getUser($username)) {
+ return $this->checkPassword($user, $password);
+ }
+ return false;
+ }
+
+ public function getUserDetails($username)
+ {
+ if ($user = $this->getUser($username)) {
+ $user['user_id'] = $user['username'];
+ }
+ return $user;
+ }
+
+ /* RefreshTokenInterface */
+ public function getRefreshToken($refresh_token)
+ {
+ $token = $this->collection('refresh_token_table')->findOne(array(
+ 'refresh_token' => $refresh_token
+ ));
+ return is_null($token) ? false : $token;
+ }
+
+ public function setRefreshToken($refresh_token, $client_id, $user_id, $expires, $scope = null)
+ {
+ $token = array(
+ 'refresh_token' => $refresh_token,
+ 'client_id' => $client_id,
+ 'user_id' => $user_id,
+ 'expires' => $expires,
+ 'scope' => $scope
+ );
+ $result = $this->collection('refresh_token_table')->insertOne($token);
+ return $result->getInsertedCount() > 0;
+ }
+
+ public function unsetRefreshToken($refresh_token)
+ {
+ $result = $this->collection('refresh_token_table')->deleteOne(array(
+ 'refresh_token' => $refresh_token
+ ));
+ return $result->getDeletedCount() > 0;
+ }
+
+ // plaintext passwords are bad! Override this for your application
+ protected function checkPassword($user, $password)
+ {
+ return $user['password'] == $password;
+ }
+
+ public function getUser($username)
+ {
+ $result = $this->collection('user_table')->findOne(array('username' => $username));
+ return is_null($result) ? false : $result;
+ }
+
+ public function setUser($username, $password, $firstName = null, $lastName = null)
+ {
+ if ($this->getUser($username)) {
+ $result = $this->collection('user_table')->updateOne(
+ array('username' => $username),
+ array('$set' => array(
+ 'password' => $password,
+ 'first_name' => $firstName,
+ 'last_name' => $lastName
+ ))
+ );
+
+ return $result->getMatchedCount() > 0;
+ }
+
+ $user = array(
+ 'username' => $username,
+ 'password' => $password,
+ 'first_name' => $firstName,
+ 'last_name' => $lastName
+ );
+ $result = $this->collection('user_table')->insertOne($user);
+ return $result->getInsertedCount() > 0;
+ }
+
+ public function getClientKey($client_id, $subject)
+ {
+ $result = $this->collection('jwt_table')->findOne(array(
+ 'client_id' => $client_id,
+ 'subject' => $subject
+ ));
+ return is_null($result) ? false : $result['key'];
+ }
+
+ public function getClientScope($client_id)
+ {
+ if (!$clientDetails = $this->getClientDetails($client_id)) {
+ return false;
+ }
+ if (isset($clientDetails['scope'])) {
+ return $clientDetails['scope'];
+ }
+ return null;
+ }
+
+ public function getJti($client_id, $subject, $audience, $expires, $jti)
+ {
+ //TODO: Needs mongodb implementation.
+ throw new \Exception('getJti() for the MongoDB driver is currently unimplemented.');
+ }
+
+ public function setJti($client_id, $subject, $audience, $expires, $jti)
+ {
+ //TODO: Needs mongodb implementation.
+ throw new \Exception('setJti() for the MongoDB driver is currently unimplemented.');
+ }
+
+ public function getPublicKey($client_id = null)
+ {
+ if ($client_id) {
+ $result = $this->collection('key_table')->findOne(array(
+ 'client_id' => $client_id
+ ));
+ if ($result) {
+ return $result['public_key'];
+ }
+ }
+
+ $result = $this->collection('key_table')->findOne(array(
+ 'client_id' => null
+ ));
+ return is_null($result) ? false : $result['public_key'];
+ }
+
+ public function getPrivateKey($client_id = null)
+ {
+ if ($client_id) {
+ $result = $this->collection('key_table')->findOne(array(
+ 'client_id' => $client_id
+ ));
+ if ($result) {
+ return $result['private_key'];
+ }
+ }
+
+ $result = $this->collection('key_table')->findOne(array(
+ 'client_id' => null
+ ));
+ return is_null($result) ? false : $result['private_key'];
+ }
+
+ public function getEncryptionAlgorithm($client_id = null)
+ {
+ if ($client_id) {
+ $result = $this->collection('key_table')->findOne(array(
+ 'client_id' => $client_id
+ ));
+ if ($result) {
+ return $result['encryption_algorithm'];
+ }
+ }
+
+ $result = $this->collection('key_table')->findOne(array(
+ 'client_id' => null
+ ));
+ return is_null($result) ? 'RS256' : $result['encryption_algorithm'];
+ }
+
+ // Helper function to access a MongoDB collection by `type`:
+ protected function collection($name)
+ {
+ return $this->db->{$this->config[$name]};
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Pdo.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Pdo.php
new file mode 100644
index 0000000..074cee4
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Pdo.php
@@ -0,0 +1,731 @@
+<?php
+
+namespace OAuth2\Storage;
+
+use OAuth2\OpenID\Storage\UserClaimsInterface;
+use OAuth2\OpenID\Storage\AuthorizationCodeInterface as OpenIDAuthorizationCodeInterface;
+use InvalidArgumentException;
+
+/**
+ * Simple PDO storage for all storage types
+ *
+ * NOTE: This class is meant to get users started
+ * quickly. If your application requires further
+ * customization, extend this class or create your own.
+ *
+ * NOTE: Passwords are stored in plaintext, which is never
+ * a good idea. Be sure to override this for your application
+ *
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+class Pdo implements
+ AuthorizationCodeInterface,
+ AccessTokenInterface,
+ ClientCredentialsInterface,
+ UserCredentialsInterface,
+ RefreshTokenInterface,
+ JwtBearerInterface,
+ ScopeInterface,
+ PublicKeyInterface,
+ UserClaimsInterface,
+ OpenIDAuthorizationCodeInterface
+{
+ /**
+ * @var \PDO
+ */
+ protected $db;
+
+ /**
+ * @var array
+ */
+ protected $config;
+
+ /**
+ * @param mixed $connection
+ * @param array $config
+ *
+ * @throws InvalidArgumentException
+ */
+ public function __construct($connection, $config = array())
+ {
+ if (!$connection instanceof \PDO) {
+ if (is_string($connection)) {
+ $connection = array('dsn' => $connection);
+ }
+ if (!is_array($connection)) {
+ throw new \InvalidArgumentException('First argument to OAuth2\Storage\Pdo must be an instance of PDO, a DSN string, or a configuration array');
+ }
+ if (!isset($connection['dsn'])) {
+ throw new \InvalidArgumentException('configuration array must contain "dsn"');
+ }
+ // merge optional parameters
+ $connection = array_merge(array(
+ 'username' => null,
+ 'password' => null,
+ 'options' => array(),
+ ), $connection);
+ $connection = new \PDO($connection['dsn'], $connection['username'], $connection['password'], $connection['options']);
+ }
+ $this->db = $connection;
+
+ // debugging
+ $connection->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
+
+ $this->config = array_merge(array(
+ 'client_table' => 'oauth_clients',
+ 'access_token_table' => 'oauth_access_tokens',
+ 'refresh_token_table' => 'oauth_refresh_tokens',
+ 'code_table' => 'oauth_authorization_codes',
+ 'user_table' => 'oauth_users',
+ 'jwt_table' => 'oauth_jwt',
+ 'jti_table' => 'oauth_jti',
+ 'scope_table' => 'oauth_scopes',
+ 'public_key_table' => 'oauth_public_keys',
+ ), $config);
+ }
+
+ /**
+ * @param string $client_id
+ * @param null|string $client_secret
+ * @return bool
+ */
+ public function checkClientCredentials($client_id, $client_secret = null)
+ {
+ $stmt = $this->db->prepare(sprintf('SELECT * from %s where client_id = :client_id', $this->config['client_table']));
+ $stmt->execute(compact('client_id'));
+ $result = $stmt->fetch(\PDO::FETCH_ASSOC);
+
+ // make this extensible
+ return $result && $result['client_secret'] == $client_secret;
+ }
+
+ /**
+ * @param string $client_id
+ * @return bool
+ */
+ public function isPublicClient($client_id)
+ {
+ $stmt = $this->db->prepare(sprintf('SELECT * from %s where client_id = :client_id', $this->config['client_table']));
+ $stmt->execute(compact('client_id'));
+
+ if (!$result = $stmt->fetch(\PDO::FETCH_ASSOC)) {
+ return false;
+ }
+
+ return empty($result['client_secret']);
+ }
+
+ /**
+ * @param string $client_id
+ * @return array|mixed
+ */
+ public function getClientDetails($client_id)
+ {
+ $stmt = $this->db->prepare(sprintf('SELECT * from %s where client_id = :client_id', $this->config['client_table']));
+ $stmt->execute(compact('client_id'));
+
+ return $stmt->fetch(\PDO::FETCH_ASSOC);
+ }
+
+ /**
+ * @param string $client_id
+ * @param null|string $client_secret
+ * @param null|string $redirect_uri
+ * @param null|array $grant_types
+ * @param null|string $scope
+ * @param null|string $user_id
+ * @return bool
+ */
+ public function setClientDetails($client_id, $client_secret = null, $redirect_uri = null, $grant_types = null, $scope = null, $user_id = null)
+ {
+ // if it exists, update it.
+ if ($this->getClientDetails($client_id)) {
+ $stmt = $this->db->prepare($sql = sprintf('UPDATE %s SET client_secret=:client_secret, redirect_uri=:redirect_uri, grant_types=:grant_types, scope=:scope, user_id=:user_id where client_id=:client_id', $this->config['client_table']));
+ } else {
+ $stmt = $this->db->prepare(sprintf('INSERT INTO %s (client_id, client_secret, redirect_uri, grant_types, scope, user_id) VALUES (:client_id, :client_secret, :redirect_uri, :grant_types, :scope, :user_id)', $this->config['client_table']));
+ }
+
+ return $stmt->execute(compact('client_id', 'client_secret', 'redirect_uri', 'grant_types', 'scope', 'user_id'));
+ }
+
+ /**
+ * @param $client_id
+ * @param $grant_type
+ * @return bool
+ */
+ public function checkRestrictedGrantType($client_id, $grant_type)
+ {
+ $details = $this->getClientDetails($client_id);
+ if (isset($details['grant_types'])) {
+ $grant_types = explode(' ', $details['grant_types']);
+
+ return in_array($grant_type, (array) $grant_types);
+ }
+
+ // if grant_types are not defined, then none are restricted
+ return true;
+ }
+
+ /**
+ * @param string $access_token
+ * @return array|bool|mixed|null
+ */
+ public function getAccessToken($access_token)
+ {
+ $stmt = $this->db->prepare(sprintf('SELECT * from %s where access_token = :access_token', $this->config['access_token_table']));
+
+ $token = $stmt->execute(compact('access_token'));
+ if ($token = $stmt->fetch(\PDO::FETCH_ASSOC)) {
+ // convert date string back to timestamp
+ $token['expires'] = strtotime($token['expires']);
+ }
+
+ return $token;
+ }
+
+ /**
+ * @param string $access_token
+ * @param mixed $client_id
+ * @param mixed $user_id
+ * @param int $expires
+ * @param string $scope
+ * @return bool
+ */
+ public function setAccessToken($access_token, $client_id, $user_id, $expires, $scope = null)
+ {
+ // convert expires to datestring
+ $expires = date('Y-m-d H:i:s', $expires);
+
+ // if it exists, update it.
+ if ($this->getAccessToken($access_token)) {
+ $stmt = $this->db->prepare(sprintf('UPDATE %s SET client_id=:client_id, expires=:expires, user_id=:user_id, scope=:scope where access_token=:access_token', $this->config['access_token_table']));
+ } else {
+ $stmt = $this->db->prepare(sprintf('INSERT INTO %s (access_token, client_id, expires, user_id, scope) VALUES (:access_token, :client_id, :expires, :user_id, :scope)', $this->config['access_token_table']));
+ }
+
+ return $stmt->execute(compact('access_token', 'client_id', 'user_id', 'expires', 'scope'));
+ }
+
+ /**
+ * @param $access_token
+ * @return bool
+ */
+ public function unsetAccessToken($access_token)
+ {
+ $stmt = $this->db->prepare(sprintf('DELETE FROM %s WHERE access_token = :access_token', $this->config['access_token_table']));
+
+ $stmt->execute(compact('access_token'));
+
+ return $stmt->rowCount() > 0;
+ }
+
+ /* OAuth2\Storage\AuthorizationCodeInterface */
+ /**
+ * @param string $code
+ * @return mixed
+ */
+ public function getAuthorizationCode($code)
+ {
+ $stmt = $this->db->prepare(sprintf('SELECT * from %s where authorization_code = :code', $this->config['code_table']));
+ $stmt->execute(compact('code'));
+
+ if ($code = $stmt->fetch(\PDO::FETCH_ASSOC)) {
+ // convert date string back to timestamp
+ $code['expires'] = strtotime($code['expires']);
+ }
+
+ return $code;
+ }
+
+ /**
+ * @param string $code
+ * @param mixed $client_id
+ * @param mixed $user_id
+ * @param string $redirect_uri
+ * @param int $expires
+ * @param string $scope
+ * @param string $id_token
+ * @return bool|mixed
+ */
+ public function setAuthorizationCode($code, $client_id, $user_id, $redirect_uri, $expires, $scope = null, $id_token = null)
+ {
+ if (func_num_args() > 6) {
+ // we are calling with an id token
+ return call_user_func_array(array($this, 'setAuthorizationCodeWithIdToken'), func_get_args());
+ }
+
+ // convert expires to datestring
+ $expires = date('Y-m-d H:i:s', $expires);
+
+ // if it exists, update it.
+ if ($this->getAuthorizationCode($code)) {
+ $stmt = $this->db->prepare($sql = sprintf('UPDATE %s SET client_id=:client_id, user_id=:user_id, redirect_uri=:redirect_uri, expires=:expires, scope=:scope where authorization_code=:code', $this->config['code_table']));
+ } else {
+ $stmt = $this->db->prepare(sprintf('INSERT INTO %s (authorization_code, client_id, user_id, redirect_uri, expires, scope) VALUES (:code, :client_id, :user_id, :redirect_uri, :expires, :scope)', $this->config['code_table']));
+ }
+
+ return $stmt->execute(compact('code', 'client_id', 'user_id', 'redirect_uri', 'expires', 'scope'));
+ }
+
+ /**
+ * @param string $code
+ * @param mixed $client_id
+ * @param mixed $user_id
+ * @param string $redirect_uri
+ * @param string $expires
+ * @param string $scope
+ * @param string $id_token
+ * @return bool
+ */
+ private function setAuthorizationCodeWithIdToken($code, $client_id, $user_id, $redirect_uri, $expires, $scope = null, $id_token = null)
+ {
+ // convert expires to datestring
+ $expires = date('Y-m-d H:i:s', $expires);
+
+ // if it exists, update it.
+ if ($this->getAuthorizationCode($code)) {
+ $stmt = $this->db->prepare($sql = sprintf('UPDATE %s SET client_id=:client_id, user_id=:user_id, redirect_uri=:redirect_uri, expires=:expires, scope=:scope, id_token =:id_token where authorization_code=:code', $this->config['code_table']));
+ } else {
+ $stmt = $this->db->prepare(sprintf('INSERT INTO %s (authorization_code, client_id, user_id, redirect_uri, expires, scope, id_token) VALUES (:code, :client_id, :user_id, :redirect_uri, :expires, :scope, :id_token)', $this->config['code_table']));
+ }
+
+ return $stmt->execute(compact('code', 'client_id', 'user_id', 'redirect_uri', 'expires', 'scope', 'id_token'));
+ }
+
+ /**
+ * @param string $code
+ * @return bool
+ */
+ public function expireAuthorizationCode($code)
+ {
+ $stmt = $this->db->prepare(sprintf('DELETE FROM %s WHERE authorization_code = :code', $this->config['code_table']));
+
+ return $stmt->execute(compact('code'));
+ }
+
+ /**
+ * @param string $username
+ * @param string $password
+ * @return bool
+ */
+ public function checkUserCredentials($username, $password)
+ {
+ if ($user = $this->getUser($username)) {
+ return $this->checkPassword($user, $password);
+ }
+
+ return false;
+ }
+
+ /**
+ * @param string $username
+ * @return array|bool
+ */
+ public function getUserDetails($username)
+ {
+ return $this->getUser($username);
+ }
+
+ /**
+ * @param mixed $user_id
+ * @param string $claims
+ * @return array|bool
+ */
+ public function getUserClaims($user_id, $claims)
+ {
+ if (!$userDetails = $this->getUserDetails($user_id)) {
+ return false;
+ }
+
+ $claims = explode(' ', trim($claims));
+ $userClaims = array();
+
+ // for each requested claim, if the user has the claim, set it in the response
+ $validClaims = explode(' ', self::VALID_CLAIMS);
+ foreach ($validClaims as $validClaim) {
+ if (in_array($validClaim, $claims)) {
+ if ($validClaim == 'address') {
+ // address is an object with subfields
+ $userClaims['address'] = $this->getUserClaim($validClaim, $userDetails['address'] ?: $userDetails);
+ } else {
+ $userClaims = array_merge($userClaims, $this->getUserClaim($validClaim, $userDetails));
+ }
+ }
+ }
+
+ return $userClaims;
+ }
+
+ /**
+ * @param string $claim
+ * @param array $userDetails
+ * @return array
+ */
+ protected function getUserClaim($claim, $userDetails)
+ {
+ $userClaims = array();
+ $claimValuesString = constant(sprintf('self::%s_CLAIM_VALUES', strtoupper($claim)));
+ $claimValues = explode(' ', $claimValuesString);
+
+ foreach ($claimValues as $value) {
+ $userClaims[$value] = isset($userDetails[$value]) ? $userDetails[$value] : null;
+ }
+
+ return $userClaims;
+ }
+
+ /**
+ * @param string $refresh_token
+ * @return bool|mixed
+ */
+ public function getRefreshToken($refresh_token)
+ {
+ $stmt = $this->db->prepare(sprintf('SELECT * FROM %s WHERE refresh_token = :refresh_token', $this->config['refresh_token_table']));
+
+ $token = $stmt->execute(compact('refresh_token'));
+ if ($token = $stmt->fetch(\PDO::FETCH_ASSOC)) {
+ // convert expires to epoch time
+ $token['expires'] = strtotime($token['expires']);
+ }
+
+ return $token;
+ }
+
+ /**
+ * @param string $refresh_token
+ * @param mixed $client_id
+ * @param mixed $user_id
+ * @param string $expires
+ * @param string $scope
+ * @return bool
+ */
+ public function setRefreshToken($refresh_token, $client_id, $user_id, $expires, $scope = null)
+ {
+ // convert expires to datestring
+ $expires = date('Y-m-d H:i:s', $expires);
+
+ $stmt = $this->db->prepare(sprintf('INSERT INTO %s (refresh_token, client_id, user_id, expires, scope) VALUES (:refresh_token, :client_id, :user_id, :expires, :scope)', $this->config['refresh_token_table']));
+
+ return $stmt->execute(compact('refresh_token', 'client_id', 'user_id', 'expires', 'scope'));
+ }
+
+ /**
+ * @param string $refresh_token
+ * @return bool
+ */
+ public function unsetRefreshToken($refresh_token)
+ {
+ $stmt = $this->db->prepare(sprintf('DELETE FROM %s WHERE refresh_token = :refresh_token', $this->config['refresh_token_table']));
+
+ $stmt->execute(compact('refresh_token'));
+
+ return $stmt->rowCount() > 0;
+ }
+
+ /**
+ * plaintext passwords are bad! Override this for your application
+ *
+ * @param array $user
+ * @param string $password
+ * @return bool
+ */
+ protected function checkPassword($user, $password)
+ {
+ return $user['password'] == $this->hashPassword($password);
+ }
+
+ // use a secure hashing algorithm when storing passwords. Override this for your application
+ protected function hashPassword($password)
+ {
+ return sha1($password);
+ }
+
+ /**
+ * @param string $username
+ * @return array|bool
+ */
+ public function getUser($username)
+ {
+ $stmt = $this->db->prepare($sql = sprintf('SELECT * from %s where username=:username', $this->config['user_table']));
+ $stmt->execute(array('username' => $username));
+
+ if (!$userInfo = $stmt->fetch(\PDO::FETCH_ASSOC)) {
+ return false;
+ }
+
+ // the default behavior is to use "username" as the user_id
+ return array_merge(array(
+ 'user_id' => $username
+ ), $userInfo);
+ }
+
+ /**
+ * plaintext passwords are bad! Override this for your application
+ *
+ * @param string $username
+ * @param string $password
+ * @param string $firstName
+ * @param string $lastName
+ * @return bool
+ */
+ public function setUser($username, $password, $firstName = null, $lastName = null)
+ {
+ // do not store in plaintext
+ $password = $this->hashPassword($password);
+
+ // if it exists, update it.
+ if ($this->getUser($username)) {
+ $stmt = $this->db->prepare($sql = sprintf('UPDATE %s SET password=:password, first_name=:firstName, last_name=:lastName where username=:username', $this->config['user_table']));
+ } else {
+ $stmt = $this->db->prepare(sprintf('INSERT INTO %s (username, password, first_name, last_name) VALUES (:username, :password, :firstName, :lastName)', $this->config['user_table']));
+ }
+
+ return $stmt->execute(compact('username', 'password', 'firstName', 'lastName'));
+ }
+
+ /**
+ * @param string $scope
+ * @return bool
+ */
+ public function scopeExists($scope)
+ {
+ $scope = explode(' ', $scope);
+ $whereIn = implode(',', array_fill(0, count($scope), '?'));
+ $stmt = $this->db->prepare(sprintf('SELECT count(scope) as count FROM %s WHERE scope IN (%s)', $this->config['scope_table'], $whereIn));
+ $stmt->execute($scope);
+
+ if ($result = $stmt->fetch(\PDO::FETCH_ASSOC)) {
+ return $result['count'] == count($scope);
+ }
+
+ return false;
+ }
+
+ /**
+ * @param mixed $client_id
+ * @return null|string
+ */
+ public function getDefaultScope($client_id = null)
+ {
+ $stmt = $this->db->prepare(sprintf('SELECT scope FROM %s WHERE is_default=:is_default', $this->config['scope_table']));
+ $stmt->execute(array('is_default' => true));
+
+ if ($result = $stmt->fetchAll(\PDO::FETCH_ASSOC)) {
+ $defaultScope = array_map(function ($row) {
+ return $row['scope'];
+ }, $result);
+
+ return implode(' ', $defaultScope);
+ }
+
+ return null;
+ }
+
+ /**
+ * @param mixed $client_id
+ * @param $subject
+ * @return string
+ */
+ public function getClientKey($client_id, $subject)
+ {
+ $stmt = $this->db->prepare($sql = sprintf('SELECT public_key from %s where client_id=:client_id AND subject=:subject', $this->config['jwt_table']));
+
+ $stmt->execute(array('client_id' => $client_id, 'subject' => $subject));
+
+ return $stmt->fetchColumn();
+ }
+
+ /**
+ * @param mixed $client_id
+ * @return bool|null
+ */
+ public function getClientScope($client_id)
+ {
+ if (!$clientDetails = $this->getClientDetails($client_id)) {
+ return false;
+ }
+
+ if (isset($clientDetails['scope'])) {
+ return $clientDetails['scope'];
+ }
+
+ return null;
+ }
+
+ /**
+ * @param mixed $client_id
+ * @param $subject
+ * @param $audience
+ * @param $expires
+ * @param $jti
+ * @return array|null
+ */
+ public function getJti($client_id, $subject, $audience, $expires, $jti)
+ {
+ $stmt = $this->db->prepare($sql = sprintf('SELECT * FROM %s WHERE issuer=:client_id AND subject=:subject AND audience=:audience AND expires=:expires AND jti=:jti', $this->config['jti_table']));
+
+ $stmt->execute(compact('client_id', 'subject', 'audience', 'expires', 'jti'));
+
+ if ($result = $stmt->fetch(\PDO::FETCH_ASSOC)) {
+ return array(
+ 'issuer' => $result['issuer'],
+ 'subject' => $result['subject'],
+ 'audience' => $result['audience'],
+ 'expires' => $result['expires'],
+ 'jti' => $result['jti'],
+ );
+ }
+
+ return null;
+ }
+
+ /**
+ * @param mixed $client_id
+ * @param $subject
+ * @param $audience
+ * @param $expires
+ * @param $jti
+ * @return bool
+ */
+ public function setJti($client_id, $subject, $audience, $expires, $jti)
+ {
+ $stmt = $this->db->prepare(sprintf('INSERT INTO %s (issuer, subject, audience, expires, jti) VALUES (:client_id, :subject, :audience, :expires, :jti)', $this->config['jti_table']));
+
+ return $stmt->execute(compact('client_id', 'subject', 'audience', 'expires', 'jti'));
+ }
+
+ /**
+ * @param mixed $client_id
+ * @return mixed
+ */
+ public function getPublicKey($client_id = null)
+ {
+ $stmt = $this->db->prepare($sql = sprintf('SELECT public_key FROM %s WHERE client_id=:client_id OR client_id IS NULL ORDER BY client_id IS NOT NULL DESC', $this->config['public_key_table']));
+
+ $stmt->execute(compact('client_id'));
+ if ($result = $stmt->fetch(\PDO::FETCH_ASSOC)) {
+ return $result['public_key'];
+ }
+ }
+
+ /**
+ * @param mixed $client_id
+ * @return mixed
+ */
+ public function getPrivateKey($client_id = null)
+ {
+ $stmt = $this->db->prepare($sql = sprintf('SELECT private_key FROM %s WHERE client_id=:client_id OR client_id IS NULL ORDER BY client_id IS NOT NULL DESC', $this->config['public_key_table']));
+
+ $stmt->execute(compact('client_id'));
+ if ($result = $stmt->fetch(\PDO::FETCH_ASSOC)) {
+ return $result['private_key'];
+ }
+ }
+
+ /**
+ * @param mixed $client_id
+ * @return string
+ */
+ public function getEncryptionAlgorithm($client_id = null)
+ {
+ $stmt = $this->db->prepare($sql = sprintf('SELECT encryption_algorithm FROM %s WHERE client_id=:client_id OR client_id IS NULL ORDER BY client_id IS NOT NULL DESC', $this->config['public_key_table']));
+
+ $stmt->execute(compact('client_id'));
+ if ($result = $stmt->fetch(\PDO::FETCH_ASSOC)) {
+ return $result['encryption_algorithm'];
+ }
+
+ return 'RS256';
+ }
+
+ /**
+ * DDL to create OAuth2 database and tables for PDO storage
+ *
+ * @see https://github.com/dsquier/oauth2-server-php-mysql
+ *
+ * @param string $dbName
+ * @return string
+ */
+ public function getBuildSql($dbName = 'oauth2_server_php')
+ {
+ $sql = "
+ CREATE TABLE {$this->config['client_table']} (
+ client_id VARCHAR(80) NOT NULL,
+ client_secret VARCHAR(80),
+ redirect_uri VARCHAR(2000),
+ grant_types VARCHAR(80),
+ scope VARCHAR(4000),
+ user_id VARCHAR(80),
+ PRIMARY KEY (client_id)
+ );
+
+ CREATE TABLE {$this->config['access_token_table']} (
+ access_token VARCHAR(40) NOT NULL,
+ client_id VARCHAR(80) NOT NULL,
+ user_id VARCHAR(80),
+ expires TIMESTAMP NOT NULL,
+ scope VARCHAR(4000),
+ PRIMARY KEY (access_token)
+ );
+
+ CREATE TABLE {$this->config['code_table']} (
+ authorization_code VARCHAR(40) NOT NULL,
+ client_id VARCHAR(80) NOT NULL,
+ user_id VARCHAR(80),
+ redirect_uri VARCHAR(2000),
+ expires TIMESTAMP NOT NULL,
+ scope VARCHAR(4000),
+ id_token VARCHAR(1000),
+ PRIMARY KEY (authorization_code)
+ );
+
+ CREATE TABLE {$this->config['refresh_token_table']} (
+ refresh_token VARCHAR(40) NOT NULL,
+ client_id VARCHAR(80) NOT NULL,
+ user_id VARCHAR(80),
+ expires TIMESTAMP NOT NULL,
+ scope VARCHAR(4000),
+ PRIMARY KEY (refresh_token)
+ );
+
+ CREATE TABLE {$this->config['user_table']} (
+ username VARCHAR(80),
+ password VARCHAR(80),
+ first_name VARCHAR(80),
+ last_name VARCHAR(80),
+ email VARCHAR(80),
+ email_verified BOOLEAN,
+ scope VARCHAR(4000)
+ );
+
+ CREATE TABLE {$this->config['scope_table']} (
+ scope VARCHAR(80) NOT NULL,
+ is_default BOOLEAN,
+ PRIMARY KEY (scope)
+ );
+
+ CREATE TABLE {$this->config['jwt_table']} (
+ client_id VARCHAR(80) NOT NULL,
+ subject VARCHAR(80),
+ public_key VARCHAR(2000) NOT NULL
+ );
+
+ CREATE TABLE {$this->config['jti_table']} (
+ issuer VARCHAR(80) NOT NULL,
+ subject VARCHAR(80),
+ audiance VARCHAR(80),
+ expires TIMESTAMP NOT NULL,
+ jti VARCHAR(2000) NOT NULL
+ );
+
+ CREATE TABLE {$this->config['public_key_table']} (
+ client_id VARCHAR(80),
+ public_key VARCHAR(2000),
+ private_key VARCHAR(2000),
+ encryption_algorithm VARCHAR(100) DEFAULT 'RS256'
+ )
+ ";
+
+ return $sql;
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/PublicKeyInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/PublicKeyInterface.php
new file mode 100644
index 0000000..a6dc49f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/PublicKeyInterface.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace OAuth2\Storage;
+
+/**
+ * Implement this interface to specify where the OAuth2 Server
+ * should get public/private key information
+ *
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+interface PublicKeyInterface
+{
+ /**
+ * @param mixed $client_id
+ * @return mixed
+ */
+ public function getPublicKey($client_id = null);
+
+ /**
+ * @param mixed $client_id
+ * @return mixed
+ */
+ public function getPrivateKey($client_id = null);
+
+ /**
+ * @param mixed $client_id
+ * @return mixed
+ */
+ public function getEncryptionAlgorithm($client_id = null);
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Redis.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Redis.php
new file mode 100644
index 0000000..e6294e2
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Redis.php
@@ -0,0 +1,321 @@
+<?php
+
+namespace OAuth2\Storage;
+
+use OAuth2\OpenID\Storage\AuthorizationCodeInterface as OpenIDAuthorizationCodeInterface;
+
+/**
+ * redis storage for all storage types
+ *
+ * To use, install "predis/predis" via composer
+ *
+ * Register client:
+ * <code>
+ * $storage = new OAuth2\Storage\Redis($redis);
+ * $storage->setClientDetails($client_id, $client_secret, $redirect_uri);
+ * </code>
+ */
+class Redis implements AuthorizationCodeInterface,
+ AccessTokenInterface,
+ ClientCredentialsInterface,
+ UserCredentialsInterface,
+ RefreshTokenInterface,
+ JwtBearerInterface,
+ ScopeInterface,
+ OpenIDAuthorizationCodeInterface
+{
+
+ private $cache;
+
+ /* The redis client */
+ protected $redis;
+
+ /* Configuration array */
+ protected $config;
+
+ /**
+ * Redis Storage!
+ *
+ * @param \Predis\Client $redis
+ * @param array $config
+ */
+ public function __construct($redis, $config=array())
+ {
+ $this->redis = $redis;
+ $this->config = array_merge(array(
+ 'client_key' => 'oauth_clients:',
+ 'access_token_key' => 'oauth_access_tokens:',
+ 'refresh_token_key' => 'oauth_refresh_tokens:',
+ 'code_key' => 'oauth_authorization_codes:',
+ 'user_key' => 'oauth_users:',
+ 'jwt_key' => 'oauth_jwt:',
+ 'scope_key' => 'oauth_scopes:',
+ ), $config);
+ }
+
+ protected function getValue($key)
+ {
+ if ( isset($this->cache[$key]) ) {
+ return $this->cache[$key];
+ }
+ $value = $this->redis->get($key);
+ if ( isset($value) ) {
+ return json_decode($value, true);
+ } else {
+ return false;
+ }
+ }
+
+ protected function setValue($key, $value, $expire=0)
+ {
+ $this->cache[$key] = $value;
+ $str = json_encode($value);
+ if ($expire > 0) {
+ $seconds = $expire - time();
+ $ret = $this->redis->setex($key, $seconds, $str);
+ } else {
+ $ret = $this->redis->set($key, $str);
+ }
+
+ // check that the key was set properly
+ // if this fails, an exception will usually thrown, so this step isn't strictly necessary
+ return is_bool($ret) ? $ret : $ret->getPayload() == 'OK';
+ }
+
+ protected function expireValue($key)
+ {
+ unset($this->cache[$key]);
+
+ return $this->redis->del($key);
+ }
+
+ /* AuthorizationCodeInterface */
+ public function getAuthorizationCode($code)
+ {
+ return $this->getValue($this->config['code_key'] . $code);
+ }
+
+ public function setAuthorizationCode($authorization_code, $client_id, $user_id, $redirect_uri, $expires, $scope = null, $id_token = null)
+ {
+ return $this->setValue(
+ $this->config['code_key'] . $authorization_code,
+ compact('authorization_code', 'client_id', 'user_id', 'redirect_uri', 'expires', 'scope', 'id_token'),
+ $expires
+ );
+ }
+
+ public function expireAuthorizationCode($code)
+ {
+ $key = $this->config['code_key'] . $code;
+ unset($this->cache[$key]);
+
+ return $this->expireValue($key);
+ }
+
+ /* UserCredentialsInterface */
+ public function checkUserCredentials($username, $password)
+ {
+ $user = $this->getUserDetails($username);
+
+ return $user && $user['password'] === $password;
+ }
+
+ public function getUserDetails($username)
+ {
+ return $this->getUser($username);
+ }
+
+ public function getUser($username)
+ {
+ if (!$userInfo = $this->getValue($this->config['user_key'] . $username)) {
+ return false;
+ }
+
+ // the default behavior is to use "username" as the user_id
+ return array_merge(array(
+ 'user_id' => $username,
+ ), $userInfo);
+ }
+
+ public function setUser($username, $password, $first_name = null, $last_name = null)
+ {
+ return $this->setValue(
+ $this->config['user_key'] . $username,
+ compact('username', 'password', 'first_name', 'last_name')
+ );
+ }
+
+ /* ClientCredentialsInterface */
+ public function checkClientCredentials($client_id, $client_secret = null)
+ {
+ if (!$client = $this->getClientDetails($client_id)) {
+ return false;
+ }
+
+ return isset($client['client_secret'])
+ && $client['client_secret'] == $client_secret;
+ }
+
+ public function isPublicClient($client_id)
+ {
+ if (!$client = $this->getClientDetails($client_id)) {
+ return false;
+ }
+
+ return empty($client['client_secret']);
+ }
+
+ /* ClientInterface */
+ public function getClientDetails($client_id)
+ {
+ return $this->getValue($this->config['client_key'] . $client_id);
+ }
+
+ public function setClientDetails($client_id, $client_secret = null, $redirect_uri = null, $grant_types = null, $scope = null, $user_id = null)
+ {
+ return $this->setValue(
+ $this->config['client_key'] . $client_id,
+ compact('client_id', 'client_secret', 'redirect_uri', 'grant_types', 'scope', 'user_id')
+ );
+ }
+
+ public function checkRestrictedGrantType($client_id, $grant_type)
+ {
+ $details = $this->getClientDetails($client_id);
+ if (isset($details['grant_types'])) {
+ $grant_types = explode(' ', $details['grant_types']);
+
+ return in_array($grant_type, (array) $grant_types);
+ }
+
+ // if grant_types are not defined, then none are restricted
+ return true;
+ }
+
+ /* RefreshTokenInterface */
+ public function getRefreshToken($refresh_token)
+ {
+ return $this->getValue($this->config['refresh_token_key'] . $refresh_token);
+ }
+
+ public function setRefreshToken($refresh_token, $client_id, $user_id, $expires, $scope = null)
+ {
+ return $this->setValue(
+ $this->config['refresh_token_key'] . $refresh_token,
+ compact('refresh_token', 'client_id', 'user_id', 'expires', 'scope'),
+ $expires
+ );
+ }
+
+ public function unsetRefreshToken($refresh_token)
+ {
+ $result = $this->expireValue($this->config['refresh_token_key'] . $refresh_token);
+
+ return $result > 0;
+ }
+
+ /* AccessTokenInterface */
+ public function getAccessToken($access_token)
+ {
+ return $this->getValue($this->config['access_token_key'].$access_token);
+ }
+
+ public function setAccessToken($access_token, $client_id, $user_id, $expires, $scope = null)
+ {
+ return $this->setValue(
+ $this->config['access_token_key'].$access_token,
+ compact('access_token', 'client_id', 'user_id', 'expires', 'scope'),
+ $expires
+ );
+ }
+
+ public function unsetAccessToken($access_token)
+ {
+ $result = $this->expireValue($this->config['access_token_key'] . $access_token);
+
+ return $result > 0;
+ }
+
+ /* ScopeInterface */
+ public function scopeExists($scope)
+ {
+ $scope = explode(' ', $scope);
+
+ $result = $this->getValue($this->config['scope_key'].'supported:global');
+
+ $supportedScope = explode(' ', (string) $result);
+
+ return (count(array_diff($scope, $supportedScope)) == 0);
+ }
+
+ public function getDefaultScope($client_id = null)
+ {
+ if (is_null($client_id) || !$result = $this->getValue($this->config['scope_key'].'default:'.$client_id)) {
+ $result = $this->getValue($this->config['scope_key'].'default:global');
+ }
+
+ return $result;
+ }
+
+ public function setScope($scope, $client_id = null, $type = 'supported')
+ {
+ if (!in_array($type, array('default', 'supported'))) {
+ throw new \InvalidArgumentException('"$type" must be one of "default", "supported"');
+ }
+
+ if (is_null($client_id)) {
+ $key = $this->config['scope_key'].$type.':global';
+ } else {
+ $key = $this->config['scope_key'].$type.':'.$client_id;
+ }
+
+ return $this->setValue($key, $scope);
+ }
+
+ /*JWTBearerInterface */
+ public function getClientKey($client_id, $subject)
+ {
+ if (!$jwt = $this->getValue($this->config['jwt_key'] . $client_id)) {
+ return false;
+ }
+
+ if (isset($jwt['subject']) && $jwt['subject'] == $subject) {
+ return $jwt['key'];
+ }
+
+ return null;
+ }
+
+ public function setClientKey($client_id, $key, $subject = null)
+ {
+ return $this->setValue($this->config['jwt_key'] . $client_id, array(
+ 'key' => $key,
+ 'subject' => $subject
+ ));
+ }
+
+ public function getClientScope($client_id)
+ {
+ if (!$clientDetails = $this->getClientDetails($client_id)) {
+ return false;
+ }
+
+ if (isset($clientDetails['scope'])) {
+ return $clientDetails['scope'];
+ }
+
+ return null;
+ }
+
+ public function getJti($client_id, $subject, $audience, $expiration, $jti)
+ {
+ //TODO: Needs redis implementation.
+ throw new \Exception('getJti() for the Redis driver is currently unimplemented.');
+ }
+
+ public function setJti($client_id, $subject, $audience, $expiration, $jti)
+ {
+ //TODO: Needs redis implementation.
+ throw new \Exception('setJti() for the Redis driver is currently unimplemented.');
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/RefreshTokenInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/RefreshTokenInterface.php
new file mode 100644
index 0000000..e6407e4
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/RefreshTokenInterface.php
@@ -0,0 +1,82 @@
+<?php
+
+namespace OAuth2\Storage;
+
+/**
+ * Implement this interface to specify where the OAuth2 Server
+ * should get/save refresh tokens for the "Refresh Token"
+ * grant type
+ *
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+interface RefreshTokenInterface
+{
+ /**
+ * Grant refresh access tokens.
+ *
+ * Retrieve the stored data for the given refresh token.
+ *
+ * Required for OAuth2::GRANT_TYPE_REFRESH_TOKEN.
+ *
+ * @param $refresh_token
+ * Refresh token to be check with.
+ *
+ * @return
+ * An associative array as below, and NULL if the refresh_token is
+ * invalid:
+ * - refresh_token: Refresh token identifier.
+ * - client_id: Client identifier.
+ * - user_id: User identifier.
+ * - expires: Expiration unix timestamp, or 0 if the token doesn't expire.
+ * - scope: (optional) Scope values in space-separated string.
+ *
+ * @see http://tools.ietf.org/html/rfc6749#section-6
+ *
+ * @ingroup oauth2_section_6
+ */
+ public function getRefreshToken($refresh_token);
+
+ /**
+ * Take the provided refresh token values and store them somewhere.
+ *
+ * This function should be the storage counterpart to getRefreshToken().
+ *
+ * If storage fails for some reason, we're not currently checking for
+ * any sort of success/failure, so you should bail out of the script
+ * and provide a descriptive fail message.
+ *
+ * Required for OAuth2::GRANT_TYPE_REFRESH_TOKEN.
+ *
+ * @param $refresh_token
+ * Refresh token to be stored.
+ * @param $client_id
+ * Client identifier to be stored.
+ * @param $user_id
+ * User identifier to be stored.
+ * @param $expires
+ * Expiration timestamp to be stored. 0 if the token doesn't expire.
+ * @param $scope
+ * (optional) Scopes to be stored in space-separated string.
+ *
+ * @ingroup oauth2_section_6
+ */
+ public function setRefreshToken($refresh_token, $client_id, $user_id, $expires, $scope = null);
+
+ /**
+ * Expire a used refresh token.
+ *
+ * This is not explicitly required in the spec, but is almost implied.
+ * After granting a new refresh token, the old one is no longer useful and
+ * so should be forcibly expired in the data store so it can't be used again.
+ *
+ * If storage fails for some reason, we're not currently checking for
+ * any sort of success/failure, so you should bail out of the script
+ * and provide a descriptive fail message.
+ *
+ * @param $refresh_token
+ * Refresh token to be expired.
+ *
+ * @ingroup oauth2_section_6
+ */
+ public function unsetRefreshToken($refresh_token);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/ScopeInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/ScopeInterface.php
new file mode 100644
index 0000000..a829226
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/ScopeInterface.php
@@ -0,0 +1,46 @@
+<?php
+
+namespace OAuth2\Storage;
+
+/**
+ * Implement this interface to specify where the OAuth2 Server
+ * should retrieve data involving the relevent scopes associated
+ * with this implementation.
+ *
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+interface ScopeInterface
+{
+ /**
+ * Check if the provided scope exists.
+ *
+ * @param $scope
+ * A space-separated string of scopes.
+ *
+ * @return
+ * TRUE if it exists, FALSE otherwise.
+ */
+ public function scopeExists($scope);
+
+ /**
+ * The default scope to use in the event the client
+ * does not request one. By returning "false", a
+ * request_error is returned by the server to force a
+ * scope request by the client. By returning "null",
+ * opt out of requiring scopes
+ *
+ * @param $client_id
+ * An optional client id that can be used to return customized default scopes.
+ *
+ * @return
+ * string representation of default scope, null if
+ * scopes are not defined, or false to force scope
+ * request by the client
+ *
+ * ex:
+ * 'default'
+ * ex:
+ * null
+ */
+ public function getDefaultScope($client_id = null);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/UserCredentialsInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/UserCredentialsInterface.php
new file mode 100644
index 0000000..f550579
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/UserCredentialsInterface.php
@@ -0,0 +1,52 @@
+<?php
+
+namespace OAuth2\Storage;
+
+/**
+ * Implement this interface to specify where the OAuth2 Server
+ * should retrieve user credentials for the
+ * "Resource Owner Password Credentials" grant type
+ *
+ * @author Brent Shaffer <bshafs at gmail dot com>
+ */
+interface UserCredentialsInterface
+{
+ /**
+ * Grant access tokens for basic user credentials.
+ *
+ * Check the supplied username and password for validity.
+ *
+ * You can also use the $client_id param to do any checks required based
+ * on a client, if you need that.
+ *
+ * Required for OAuth2::GRANT_TYPE_USER_CREDENTIALS.
+ *
+ * @param $username
+ * Username to be check with.
+ * @param $password
+ * Password to be check with.
+ *
+ * @return
+ * TRUE if the username and password are valid, and FALSE if it isn't.
+ * Moreover, if the username and password are valid, and you want to
+ *
+ * @see http://tools.ietf.org/html/rfc6749#section-4.3
+ *
+ * @ingroup oauth2_section_4
+ */
+ public function checkUserCredentials($username, $password);
+
+ /**
+ * @param string $username - username to get details for
+ * @return array|false - the associated "user_id" and optional "scope" values
+ * This function MUST return FALSE if the requested user does not exist or is
+ * invalid. "scope" is a space-separated list of restricted scopes.
+ * @code
+ * return array(
+ * "user_id" => USER_ID, // REQUIRED user_id to be stored with the authorization code or access token
+ * "scope" => SCOPE // OPTIONAL space-separated list of restricted scopes
+ * );
+ * @endcode
+ */
+ public function getUserDetails($username);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/TokenType/Bearer.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/TokenType/Bearer.php
new file mode 100644
index 0000000..8ac8596
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/TokenType/Bearer.php
@@ -0,0 +1,130 @@
+<?php
+
+namespace OAuth2\TokenType;
+
+use OAuth2\RequestInterface;
+use OAuth2\ResponseInterface;
+
+/**
+*
+*/
+class Bearer implements TokenTypeInterface
+{
+ private $config;
+
+ public function __construct(array $config = array())
+ {
+ $this->config = array_merge(array(
+ 'token_param_name' => 'access_token',
+ 'token_bearer_header_name' => 'Bearer',
+ ), $config);
+ }
+
+ public function getTokenType()
+ {
+ return 'Bearer';
+ }
+
+ /**
+ * Check if the request has supplied token
+ *
+ * @see https://github.com/bshaffer/oauth2-server-php/issues/349#issuecomment-37993588
+ */
+ public function requestHasToken(RequestInterface $request)
+ {
+ $headers = $request->headers('AUTHORIZATION');
+
+ // check the header, then the querystring, then the request body
+ return !empty($headers) || (bool) ($request->request($this->config['token_param_name'])) || (bool) ($request->query($this->config['token_param_name']));
+ }
+
+ /**
+ * This is a convenience function that can be used to get the token, which can then
+ * be passed to getAccessTokenData(). The constraints specified by the draft are
+ * attempted to be adheared to in this method.
+ *
+ * As per the Bearer spec (draft 8, section 2) - there are three ways for a client
+ * to specify the bearer token, in order of preference: Authorization Header,
+ * POST and GET.
+ *
+ * NB: Resource servers MUST accept tokens via the Authorization scheme
+ * (http://tools.ietf.org/html/rfc6750#section-2).
+ *
+ * @todo Should we enforce TLS/SSL in this function?
+ *
+ * @see http://tools.ietf.org/html/rfc6750#section-2.1
+ * @see http://tools.ietf.org/html/rfc6750#section-2.2
+ * @see http://tools.ietf.org/html/rfc6750#section-2.3
+ *
+ * Old Android version bug (at least with version 2.2)
+ * @see http://code.google.com/p/android/issues/detail?id=6684
+ *
+ */
+ public function getAccessTokenParameter(RequestInterface $request, ResponseInterface $response)
+ {
+ $headers = $request->headers('AUTHORIZATION');
+
+ /**
+ * Ensure more than one method is not used for including an
+ * access token
+ *
+ * @see http://tools.ietf.org/html/rfc6750#section-3.1
+ */
+ $methodsUsed = !empty($headers) + (bool) ($request->query($this->config['token_param_name'])) + (bool) ($request->request($this->config['token_param_name']));
+ if ($methodsUsed > 1) {
+ $response->setError(400, 'invalid_request', 'Only one method may be used to authenticate at a time (Auth header, GET or POST)');
+
+ return null;
+ }
+
+ /**
+ * If no authentication is provided, set the status code
+ * to 401 and return no other error information
+ *
+ * @see http://tools.ietf.org/html/rfc6750#section-3.1
+ */
+ if ($methodsUsed == 0) {
+ $response->setStatusCode(401);
+
+ return null;
+ }
+
+ // HEADER: Get the access token from the header
+ if (!empty($headers)) {
+ if (!preg_match('/' . $this->config['token_bearer_header_name'] . '\s(\S+)/i', $headers, $matches)) {
+ $response->setError(400, 'invalid_request', 'Malformed auth header');
+
+ return null;
+ }
+
+ return $matches[1];
+ }
+
+ if ($request->request($this->config['token_param_name'])) {
+ // // POST: Get the token from POST data
+ if (!in_array(strtolower($request->server('REQUEST_METHOD')), array('post', 'put'))) {
+ $response->setError(400, 'invalid_request', 'When putting the token in the body, the method must be POST or PUT', '#section-2.2');
+
+ return null;
+ }
+
+ $contentType = $request->server('CONTENT_TYPE');
+ if (false !== $pos = strpos($contentType, ';')) {
+ $contentType = substr($contentType, 0, $pos);
+ }
+
+ if ($contentType !== null && $contentType != 'application/x-www-form-urlencoded') {
+ // IETF specifies content-type. NB: Not all webservers populate this _SERVER variable
+ // @see http://tools.ietf.org/html/rfc6750#section-2.2
+ $response->setError(400, 'invalid_request', 'The content type for POST requests must be "application/x-www-form-urlencoded"');
+
+ return null;
+ }
+
+ return $request->request($this->config['token_param_name']);
+ }
+
+ // GET method
+ return $request->query($this->config['token_param_name']);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/TokenType/Mac.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/TokenType/Mac.php
new file mode 100644
index 0000000..fe6a86a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/TokenType/Mac.php
@@ -0,0 +1,22 @@
+<?php
+
+namespace OAuth2\TokenType;
+
+use OAuth2\RequestInterface;
+use OAuth2\ResponseInterface;
+
+/**
+* This is not yet supported!
+*/
+class Mac implements TokenTypeInterface
+{
+ public function getTokenType()
+ {
+ return 'mac';
+ }
+
+ public function getAccessTokenParameter(RequestInterface $request, ResponseInterface $response)
+ {
+ throw new \LogicException("Not supported");
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/TokenType/TokenTypeInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/TokenType/TokenTypeInterface.php
new file mode 100644
index 0000000..ad77d4a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/TokenType/TokenTypeInterface.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace OAuth2\TokenType;
+
+use OAuth2\RequestInterface;
+use OAuth2\ResponseInterface;
+
+interface TokenTypeInterface
+{
+ /**
+ * Token type identification string
+ *
+ * ex: "bearer" or "mac"
+ */
+ public function getTokenType();
+
+ /**
+ * Retrieves the token string from the request object
+ */
+ public function getAccessTokenParameter(RequestInterface $request, ResponseInterface $response);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/AutoloadTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/AutoloadTest.php
new file mode 100644
index 0000000..2cb2923
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/AutoloadTest.php
@@ -0,0 +1,18 @@
+<?php
+
+namespace OAuth2;
+
+use PHPUnit\Framework\TestCase;
+
+class AutoloadTest extends TestCase
+{
+ public function testClassesExist()
+ {
+ // autoloader is called in test/bootstrap.php
+ $this->assertTrue(class_exists('OAuth2\Server'));
+ $this->assertTrue(class_exists('OAuth2\Request'));
+ $this->assertTrue(class_exists('OAuth2\Response'));
+ $this->assertTrue(class_exists('OAuth2\GrantType\UserCredentials'));
+ $this->assertTrue(interface_exists('OAuth2\Storage\AccessTokenInterface'));
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Controller/AuthorizeControllerTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Controller/AuthorizeControllerTest.php
new file mode 100644
index 0000000..fe3553b
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Controller/AuthorizeControllerTest.php
@@ -0,0 +1,493 @@
+<?php
+
+namespace OAuth2\Controller;
+
+use OAuth2\Storage\Memory;
+use OAuth2\Scope;
+use OAuth2\Storage\Bootstrap;
+use OAuth2\Server;
+use OAuth2\GrantType\AuthorizationCode;
+use OAuth2\Request;
+use OAuth2\Response;
+use OAuth2\Request\TestRequest;
+use PHPUnit\Framework\TestCase;
+
+class AuthorizeControllerTest extends TestCase
+{
+ public function testNoClientIdResponse()
+ {
+ $server = $this->getTestServer();
+ $request = new Request();
+ $server->handleAuthorizeRequest($request, $response = new Response(), false);
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_client');
+ $this->assertEquals($response->getParameter('error_description'), 'No client id supplied');
+ }
+
+ public function testInvalidClientIdResponse()
+ {
+ $server = $this->getTestServer();
+ $request = new Request(array(
+ 'client_id' => 'Fake Client ID', // invalid client id
+ ));
+ $server->handleAuthorizeRequest($request, $response = new Response(), false);
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_client');
+ $this->assertEquals($response->getParameter('error_description'), 'The client id supplied is invalid');
+ }
+
+ public function testNoRedirectUriSuppliedOrStoredResponse()
+ {
+ $server = $this->getTestServer();
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID', // valid client id
+ ));
+ $server->handleAuthorizeRequest($request, $response = new Response(), false);
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_uri');
+ $this->assertEquals($response->getParameter('error_description'), 'No redirect URI was supplied or stored');
+ }
+
+ public function testNoResponseTypeResponse()
+ {
+ $server = $this->getTestServer();
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID', // valid client id
+ 'redirect_uri' => 'http://adobe.com', // valid redirect URI
+ ));
+ $server->handleAuthorizeRequest($request, $response = new Response(), false);
+
+ $this->assertEquals($response->getStatusCode(), 302);
+ $location = $response->getHttpHeader('Location');
+ $parts = parse_url($location);
+ parse_str($parts['query'], $query);
+
+ $this->assertEquals($query['error'], 'invalid_request');
+ $this->assertEquals($query['error_description'], 'Invalid or missing response type');
+ }
+
+ public function testInvalidResponseTypeResponse()
+ {
+ $server = $this->getTestServer();
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID', // valid client id
+ 'redirect_uri' => 'http://adobe.com', // valid redirect URI
+ 'response_type' => 'invalid', // invalid response type
+ ));
+ $server->handleAuthorizeRequest($request, $response = new Response(), false);
+
+ $this->assertEquals($response->getStatusCode(), 302);
+ $location = $response->getHttpHeader('Location');
+ $parts = parse_url($location);
+ parse_str($parts['query'], $query);
+
+ $this->assertEquals($query['error'], 'invalid_request');
+ $this->assertEquals($query['error_description'], 'Invalid or missing response type');
+ }
+
+ public function testRedirectUriFragmentResponse()
+ {
+ $server = $this->getTestServer();
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID', // valid client id
+ 'redirect_uri' => 'http://adobe.com#fragment', // valid redirect URI
+ 'response_type' => 'code', // invalid response type
+ ));
+ $server->handleAuthorizeRequest($request, $response = new Response(), true);
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_uri');
+ $this->assertEquals($response->getParameter('error_description'), 'The redirect URI must not contain a fragment');
+ }
+
+ public function testEnforceState()
+ {
+ $server = $this->getTestServer(array('enforce_state' => true));
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID', // valid client id
+ 'redirect_uri' => 'http://adobe.com', // valid redirect URI
+ 'response_type' => 'code',
+ ));
+ $server->handleAuthorizeRequest($request, $response = new Response(), true);
+
+ $this->assertEquals($response->getStatusCode(), 302);
+ $location = $response->getHttpHeader('Location');
+ $parts = parse_url($location);
+ parse_str($parts['query'], $query);
+
+ $this->assertEquals($query['error'], 'invalid_request');
+ $this->assertEquals($query['error_description'], 'The state parameter is required');
+ }
+
+ public function testDoNotEnforceState()
+ {
+ $server = $this->getTestServer(array('enforce_state' => false));
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID', // valid client id
+ 'redirect_uri' => 'http://adobe.com', // valid redirect URI
+ 'response_type' => 'code',
+ ));
+ $server->handleAuthorizeRequest($request, $response = new Response(), true);
+
+ $this->assertEquals($response->getStatusCode(), 302);
+ $this->assertNotContains('error', $response->getHttpHeader('Location'));
+ }
+
+ public function testEnforceScope()
+ {
+ $server = $this->getTestServer();
+ $scopeStorage = new Memory(array('default_scope' => false, 'supported_scopes' => array('testscope')));
+ $server->setScopeUtil(new Scope($scopeStorage));
+
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID', // valid client id
+ 'redirect_uri' => 'http://adobe.com', // valid redirect URI
+ 'response_type' => 'code',
+ 'state' => 'xyz',
+ ));
+ $server->handleAuthorizeRequest($request, $response = new Response(), true);
+
+ $this->assertEquals($response->getStatusCode(), 302);
+ $parts = parse_url($response->getHttpHeader('Location'));
+ parse_str($parts['query'], $query);
+
+ $this->assertEquals($query['error'], 'invalid_client');
+ $this->assertEquals($query['error_description'], 'This application requires you specify a scope parameter');
+
+ $request->query['scope'] = 'testscope';
+ $server->handleAuthorizeRequest($request, $response = new Response(), true);
+
+ $this->assertEquals($response->getStatusCode(), 302);
+ $this->assertNotContains('error', $response->getHttpHeader('Location'));
+ }
+
+ public function testInvalidRedirectUri()
+ {
+ $server = $this->getTestServer();
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID with Redirect Uri', // valid client id
+ 'redirect_uri' => 'http://adobe.com', // invalid redirect URI
+ 'response_type' => 'code',
+ ));
+ $server->handleAuthorizeRequest($request, $response = new Response(), true);
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'redirect_uri_mismatch');
+ $this->assertEquals($response->getParameter('error_description'), 'The redirect URI provided is missing or does not match');
+ }
+
+ public function testInvalidRedirectUriApprovedByBuggyRegisteredUri()
+ {
+ $server = $this->getTestServer();
+ $server->setConfig('require_exact_redirect_uri', false);
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID with Buggy Redirect Uri', // valid client id
+ 'redirect_uri' => 'http://adobe.com', // invalid redirect URI
+ 'response_type' => 'code',
+ ));
+ $server->handleAuthorizeRequest($request, $response = new Response(), true);
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'redirect_uri_mismatch');
+ $this->assertEquals($response->getParameter('error_description'), 'The redirect URI provided is missing or does not match');
+ }
+
+ public function testNoRedirectUriWithMultipleRedirectUris()
+ {
+ $server = $this->getTestServer();
+
+ // create a request with no "redirect_uri" in querystring
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID with Multiple Redirect Uris', // valid client id
+ 'response_type' => 'code',
+ ));
+
+ $server->handleAuthorizeRequest($request, $response = new Response(), true);
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_uri');
+ $this->assertEquals($response->getParameter('error_description'), 'A redirect URI must be supplied when multiple redirect URIs are registered');
+ }
+
+ public function testRedirectUriWithValidRedirectUri()
+ {
+ $server = $this->getTestServer();
+
+ // create a request with no "redirect_uri" in querystring
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID with Redirect Uri Parts', // valid client id
+ 'response_type' => 'code',
+ 'redirect_uri' => 'http://user:pass@brentertainment.com:2222/authorize/cb?auth_type=oauth&test=true',
+ 'state' => 'xyz',
+ ));
+
+ $server->handleAuthorizeRequest($request, $response = new Response(), true);
+
+ $this->assertEquals($response->getStatusCode(), 302);
+ $this->assertContains('code', $response->getHttpHeader('Location'));
+ }
+
+ public function testRedirectUriWithDifferentQueryAndExactMatchRequired()
+ {
+ $server = $this->getTestServer(array('require_exact_redirect_uri' => true));
+
+ // create a request with no "redirect_uri" in querystring
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID with Redirect Uri Parts', // valid client id
+ 'response_type' => 'code',
+ 'redirect_uri' => 'http://user:pass@brentertainment.com:2222/authorize/cb?auth_type=oauth&test=true&hereisa=querystring',
+ ));
+
+ $server->handleAuthorizeRequest($request, $response = new Response(), true);
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'redirect_uri_mismatch');
+ $this->assertEquals($response->getParameter('error_description'), 'The redirect URI provided is missing or does not match');
+ }
+
+ public function testRedirectUriWithDifferentQueryAndExactMatchNotRequired()
+ {
+ $server = $this->getTestServer(array('require_exact_redirect_uri' => false));
+
+ // create a request with no "redirect_uri" in querystring
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID with Redirect Uri Parts', // valid client id
+ 'response_type' => 'code',
+ 'redirect_uri' => 'http://user:pass@brentertainment.com:2222/authorize/cb?auth_type=oauth&test=true&hereisa=querystring',
+ 'state' => 'xyz',
+ ));
+
+ $server->handleAuthorizeRequest($request, $response = new Response(), true);
+
+ $this->assertEquals($response->getStatusCode(), 302);
+ $this->assertContains('code', $response->getHttpHeader('Location'));
+ }
+
+ public function testMultipleRedirectUris()
+ {
+ $server = $this->getTestServer();
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID with Multiple Redirect Uris', // valid client id
+ 'redirect_uri' => 'http://brentertainment.com', // valid redirect URI
+ 'response_type' => 'code',
+ 'state' => 'xyz'
+ ));
+
+ $server->handleAuthorizeRequest($request, $response = new Response(), true);
+ $this->assertEquals($response->getStatusCode(), 302);
+ $this->assertContains('code', $response->getHttpHeader('Location'));
+
+ // call again with different (but still valid) redirect URI
+ $request->query['redirect_uri'] = 'http://morehazards.com';
+
+ $server->handleAuthorizeRequest($request, $response = new Response(), true);
+ $this->assertEquals($response->getStatusCode(), 302);
+ $this->assertContains('code', $response->getHttpHeader('Location'));
+ }
+
+ /**
+ * @see http://tools.ietf.org/html/rfc6749#section-4.1.3
+ * @see https://github.com/bshaffer/oauth2-server-php/issues/163
+ */
+ public function testNoRedirectUriSuppliedDoesNotRequireTokenRedirectUri()
+ {
+ $server = $this->getTestServer();
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID with Redirect Uri', // valid client id
+ 'response_type' => 'code',
+ 'state' => 'xyz',
+ ));
+
+ $server->handleAuthorizeRequest($request, $response = new Response(), true);
+ $this->assertEquals($response->getStatusCode(), 302);
+ $this->assertContains('state', $response->getHttpHeader('Location'));
+ $this->assertStringStartsWith('http://brentertainment.com?code=', $response->getHttpHeader('Location'));
+
+ $parts = parse_url($response->getHttpHeader('Location'));
+ parse_str($parts['query'], $query);
+
+ // call token endpoint with no redirect_uri supplied
+ $request = TestRequest::createPost(array(
+ 'client_id' => 'Test Client ID with Redirect Uri', // valid client id
+ 'client_secret' => 'TestSecret2',
+ 'grant_type' => 'authorization_code',
+ 'code' => $query['code'],
+ ));
+
+ $server->handleTokenRequest($request, $response = new Response(), true);
+ $this->assertEquals($response->getStatusCode(), 200);
+ $this->assertNotNull($response->getParameter('access_token'));
+ }
+
+ public function testUserDeniesAccessResponse()
+ {
+ $server = $this->getTestServer();
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID', // valid client id
+ 'redirect_uri' => 'http://adobe.com', // valid redirect URI
+ 'response_type' => 'code',
+ 'state' => 'xyz',
+ ));
+ $server->handleAuthorizeRequest($request, $response = new Response(), false);
+
+ $this->assertEquals($response->getStatusCode(), 302);
+ $location = $response->getHttpHeader('Location');
+ $parts = parse_url($location);
+ parse_str($parts['query'], $query);
+
+ $this->assertEquals($query['error'], 'access_denied');
+ $this->assertEquals($query['error_description'], 'The user denied access to your application');
+ }
+
+ public function testCodeQueryParamIsSet()
+ {
+ $server = $this->getTestServer();
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID', // valid client id
+ 'redirect_uri' => 'http://adobe.com', // valid redirect URI
+ 'response_type' => 'code',
+ 'state' => 'xyz',
+ ));
+ $server->handleAuthorizeRequest($request, $response = new Response(), true);
+
+ $this->assertEquals($response->getStatusCode(), 302);
+ $location = $response->getHttpHeader('Location');
+ $parts = parse_url($location);
+ parse_str($parts['query'], $query);
+
+ $location = $response->getHttpHeader('Location');
+ $parts = parse_url($location);
+
+ $this->assertEquals('http', $parts['scheme']); // same as passed in to redirect_uri
+ $this->assertEquals('adobe.com', $parts['host']); // same as passed in to redirect_uri
+ $this->assertArrayHasKey('query', $parts);
+ $this->assertFalse(isset($parts['fragment']));
+
+ // assert fragment is in "application/x-www-form-urlencoded" format
+ parse_str($parts['query'], $query);
+ $this->assertNotNull($query);
+ $this->assertArrayHasKey('code', $query);
+
+ // ensure no id_token was saved, since the openid scope wasn't requested
+ $storage = $server->getStorage('authorization_code');
+ $code = $storage->getAuthorizationCode($query['code']);
+ $this->assertTrue(empty($code['id_token']));
+
+ // ensure no error was returned
+ $this->assertFalse(isset($query['error']));
+ $this->assertFalse(isset($query['error_description']));
+ }
+
+ public function testSuccessfulRequestReturnsStateParameter()
+ {
+ $server = $this->getTestServer(array('allow_implicit' => true));
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID', // valid client id
+ 'redirect_uri' => 'http://adobe.com', // valid redirect URI
+ 'response_type' => 'code',
+ 'state' => 'test', // valid state string (just needs to be passed back to us)
+ ));
+ $server->handleAuthorizeRequest($request, $response = new Response(), true);
+
+ $this->assertEquals($response->getStatusCode(), 302);
+
+ $location = $response->getHttpHeader('Location');
+ $parts = parse_url($location);
+ $this->assertArrayHasKey('query', $parts);
+ parse_str($parts['query'], $query);
+
+ $this->assertArrayHasKey('state', $query);
+ $this->assertEquals($query['state'], 'test');
+
+ // ensure no error was returned
+ $this->assertFalse(isset($query['error']));
+ $this->assertFalse(isset($query['error_description']));
+ }
+
+ public function testSuccessfulRequestStripsExtraParameters()
+ {
+ $server = $this->getTestServer(array('allow_implicit' => true));
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID', // valid client id
+ 'redirect_uri' => 'http://adobe.com', // valid redirect URI
+ 'response_type' => 'code',
+ 'state' => 'test', // valid state string (just needs to be passed back to us)
+ 'fake' => 'something', // extra query param
+ ));
+ $server->handleAuthorizeRequest($request, $response = new Response(), true);
+
+ $this->assertEquals($response->getStatusCode(), 302);
+ $location = $response->getHttpHeader('Location');
+ $this->assertNotContains('error', $location);
+
+ $parts = parse_url($location);
+ $this->assertFalse(isset($parts['fake']));
+ $this->assertArrayHasKey('query', $parts);
+ parse_str($parts['query'], $query);
+
+ $this->assertFalse(isset($parmas['fake']));
+ $this->assertArrayHasKey('state', $query);
+ $this->assertEquals($query['state'], 'test');
+ }
+
+ public function testSuccessfulOpenidConnectRequest()
+ {
+ $server = $this->getTestServer(array(
+ 'use_openid_connect' => true,
+ 'issuer' => 'bojanz',
+ ));
+
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID',
+ 'redirect_uri' => 'http://adobe.com',
+ 'response_type' => 'code',
+ 'state' => 'xyz',
+ 'scope' => 'openid',
+ ));
+ $server->handleAuthorizeRequest($request, $response = new Response(), true);
+
+ $this->assertEquals($response->getStatusCode(), 302);
+ $location = $response->getHttpHeader('Location');
+ $parts = parse_url($location);
+ parse_str($parts['query'], $query);
+
+ $location = $response->getHttpHeader('Location');
+ $parts = parse_url($location);
+ $this->assertArrayHasKey('query', $parts);
+ $this->assertFalse(isset($parts['fragment']));
+
+ // assert fragment is in "application/x-www-form-urlencoded" format
+ parse_str($parts['query'], $query);
+ $this->assertNotNull($query);
+ $this->assertArrayHasKey('code', $query);
+
+ // ensure no error was returned
+ $this->assertFalse(isset($query['error']));
+ $this->assertFalse(isset($query['error_description']));
+
+ // confirm that the id_token has been created.
+ $storage = $server->getStorage('authorization_code');
+ $code = $storage->getAuthorizationCode($query['code']);
+ $this->assertTrue(!empty($code['id_token']));
+ }
+
+ public function testCreateController()
+ {
+ $storage = Bootstrap::getInstance()->getMemoryStorage();
+ $controller = new AuthorizeController($storage);
+ }
+
+ private function getTestServer($config = array())
+ {
+ $storage = Bootstrap::getInstance()->getMemoryStorage();
+ $server = new Server($storage, $config);
+
+ // Add the two types supported for authorization grant
+ $server->addGrantType(new AuthorizationCode($storage));
+
+ return $server;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Controller/ResourceControllerTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Controller/ResourceControllerTest.php
new file mode 100644
index 0000000..cd54d23
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Controller/ResourceControllerTest.php
@@ -0,0 +1,177 @@
+<?php
+
+namespace OAuth2\Controller;
+
+use OAuth2\Storage\Bootstrap;
+use OAuth2\Server;
+use OAuth2\GrantType\AuthorizationCode;
+use OAuth2\Request;
+use OAuth2\Response;
+use PHPUnit\Framework\TestCase;
+
+class ResourceControllerTest extends TestCase
+{
+ public function testNoAccessToken()
+ {
+ $server = $this->getTestServer();
+ $request = Request::createFromGlobals();
+ $allow = $server->verifyResourceRequest($request, $response = new Response());
+ $this->assertFalse($allow);
+
+ $this->assertEquals($response->getStatusCode(), 401);
+ $this->assertNull($response->getParameter('error'));
+ $this->assertNull($response->getParameter('error_description'));
+ $this->assertEquals('', $response->getResponseBody());
+ }
+
+ public function testMalformedHeader()
+ {
+ $server = $this->getTestServer();
+ $request = Request::createFromGlobals();
+ $request->headers['AUTHORIZATION'] = 'tH1s i5 B0gU5';
+ $allow = $server->verifyResourceRequest($request, $response = new Response());
+ $this->assertFalse($allow);
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_request');
+ $this->assertEquals($response->getParameter('error_description'), 'Malformed auth header');
+ }
+
+ public function testMultipleTokensSubmitted()
+ {
+ $server = $this->getTestServer();
+ $request = Request::createFromGlobals();
+ $request->request['access_token'] = 'TEST';
+ $request->query['access_token'] = 'TEST';
+ $allow = $server->verifyResourceRequest($request, $response = new Response());
+ $this->assertFalse($allow);
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_request');
+ $this->assertEquals($response->getParameter('error_description'), 'Only one method may be used to authenticate at a time (Auth header, GET or POST)');
+ }
+
+ public function testInvalidRequestMethod()
+ {
+ $server = $this->getTestServer();
+ $request = Request::createFromGlobals();
+ $request->server['REQUEST_METHOD'] = 'GET';
+ $request->request['access_token'] = 'TEST';
+ $allow = $server->verifyResourceRequest($request, $response = new Response());
+ $this->assertFalse($allow);
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_request');
+ $this->assertEquals($response->getParameter('error_description'), 'When putting the token in the body, the method must be POST or PUT');
+ }
+
+ public function testInvalidContentType()
+ {
+ $server = $this->getTestServer();
+ $request = Request::createFromGlobals();
+ $request->server['REQUEST_METHOD'] = 'POST';
+ $request->server['CONTENT_TYPE'] = 'application/json';
+ $request->request['access_token'] = 'TEST';
+ $allow = $server->verifyResourceRequest($request, $response = new Response());
+ $this->assertFalse($allow);
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_request');
+ $this->assertEquals($response->getParameter('error_description'), 'The content type for POST requests must be "application/x-www-form-urlencoded"');
+ }
+
+ public function testInvalidToken()
+ {
+ $server = $this->getTestServer();
+ $request = Request::createFromGlobals();
+ $request->headers['AUTHORIZATION'] = 'Bearer TESTTOKEN';
+ $allow = $server->verifyResourceRequest($request, $response = new Response());
+ $this->assertFalse($allow);
+
+ $this->assertEquals($response->getStatusCode(), 401);
+ $this->assertEquals($response->getParameter('error'), 'invalid_token');
+ $this->assertEquals($response->getParameter('error_description'), 'The access token provided is invalid');
+ }
+
+ public function testExpiredToken()
+ {
+ $server = $this->getTestServer();
+ $request = Request::createFromGlobals();
+ $request->headers['AUTHORIZATION'] = 'Bearer accesstoken-expired';
+ $allow = $server->verifyResourceRequest($request, $response = new Response());
+ $this->assertFalse($allow);
+
+ $this->assertEquals($response->getStatusCode(), 401);
+ $this->assertEquals($response->getParameter('error'), 'invalid_token');
+ $this->assertEquals($response->getParameter('error_description'), 'The access token provided has expired');
+ }
+
+ public function testOutOfScopeToken()
+ {
+ $server = $this->getTestServer();
+ $request = Request::createFromGlobals();
+ $request->headers['AUTHORIZATION'] = 'Bearer accesstoken-scope';
+ $scope = 'outofscope';
+ $allow = $server->verifyResourceRequest($request, $response = new Response(), $scope);
+ $this->assertFalse($allow);
+
+ $this->assertEquals($response->getStatusCode(), 403);
+ $this->assertEquals($response->getParameter('error'), 'insufficient_scope');
+ $this->assertEquals($response->getParameter('error_description'), 'The request requires higher privileges than provided by the access token');
+
+ // verify the "scope" has been set in the "WWW-Authenticate" header
+ preg_match('/scope="(.*?)"/', $response->getHttpHeader('WWW-Authenticate'), $matches);
+ $this->assertEquals(2, count($matches));
+ $this->assertEquals($matches[1], 'outofscope');
+ }
+
+ public function testMalformedToken()
+ {
+ $server = $this->getTestServer();
+ $request = Request::createFromGlobals();
+ $request->headers['AUTHORIZATION'] = 'Bearer accesstoken-malformed';
+ $allow = $server->verifyResourceRequest($request, $response = new Response());
+ $this->assertFalse($allow);
+
+ $this->assertEquals($response->getStatusCode(), 401);
+ $this->assertEquals($response->getParameter('error'), 'malformed_token');
+ $this->assertEquals($response->getParameter('error_description'), 'Malformed token (missing "expires")');
+ }
+
+ public function testValidToken()
+ {
+ $server = $this->getTestServer();
+ $request = Request::createFromGlobals();
+ $request->headers['AUTHORIZATION'] = 'Bearer accesstoken-scope';
+ $allow = $server->verifyResourceRequest($request, $response = new Response());
+ $this->assertTrue($allow);
+ }
+
+ public function testValidTokenWithScopeParam()
+ {
+ $server = $this->getTestServer();
+ $request = Request::createFromGlobals();
+ $request->headers['AUTHORIZATION'] = 'Bearer accesstoken-scope';
+ $request->query['scope'] = 'testscope';
+ $allow = $server->verifyResourceRequest($request, $response = new Response());
+ $this->assertTrue($allow);
+ }
+
+ public function testCreateController()
+ {
+ $storage = Bootstrap::getInstance()->getMemoryStorage();
+ $tokenType = new \OAuth2\TokenType\Bearer();
+ $controller = new ResourceController($tokenType, $storage);
+ }
+
+ private function getTestServer($config = array())
+ {
+ $storage = Bootstrap::getInstance()->getMemoryStorage();
+ $server = new Server($storage, $config);
+
+ // Add the two types supported for authorization grant
+ $server->addGrantType(new AuthorizationCode($storage));
+
+ return $server;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Controller/TokenControllerTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Controller/TokenControllerTest.php
new file mode 100644
index 0000000..d18eaa6
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Controller/TokenControllerTest.php
@@ -0,0 +1,332 @@
+<?php
+
+namespace OAuth2\Controller;
+
+use OAuth2\Storage\Bootstrap;
+use OAuth2\Server;
+use OAuth2\GrantType\AuthorizationCode;
+use OAuth2\GrantType\ClientCredentials;
+use OAuth2\GrantType\UserCredentials;
+use OAuth2\Scope;
+use OAuth2\Request\TestRequest;
+use OAuth2\Response;
+use PHPUnit\Framework\TestCase;
+
+class TokenControllerTest extends TestCase
+{
+ public function testNoGrantType()
+ {
+ // add the test parameters in memory
+ $server = $this->getTestServer();
+ $server->handleTokenRequest(TestRequest::createPost(), $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_request');
+ $this->assertEquals($response->getParameter('error_description'), 'The grant type was not specified in the request');
+ }
+
+ public function testInvalidGrantType()
+ {
+ // add the test parameters in memory
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'invalid_grant_type', // invalid grant type
+ ));
+ $server->handleTokenRequest($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'unsupported_grant_type');
+ $this->assertEquals($response->getParameter('error_description'), 'Grant type "invalid_grant_type" not supported');
+ }
+
+ public function testNoClientId()
+ {
+ // add the test parameters in memory
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'authorization_code', // valid grant type
+ 'code' => 'testcode',
+ ));
+ $server->handleTokenRequest($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_client');
+ $this->assertEquals($response->getParameter('error_description'), 'Client credentials were not found in the headers or body');
+ }
+
+ public function testNoClientSecretWithConfidentialClient()
+ {
+ // add the test parameters in memory
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'authorization_code', // valid grant type
+ 'code' => 'testcode',
+ 'client_id' => 'Test Client ID', // valid client id
+ ));
+ $server->handleTokenRequest($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_client');
+ $this->assertEquals($response->getParameter('error_description'), 'This client is invalid or must authenticate using a client secret');
+ }
+
+ public function testNoClientSecretWithEmptySecret()
+ {
+ // add the test parameters in memory
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'authorization_code', // valid grant type
+ 'code' => 'testcode-empty-secret',
+ 'client_id' => 'Test Client ID Empty Secret', // valid client id
+ ));
+ $server->handleTokenRequest($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 200);
+ }
+
+ public function testInvalidClientId()
+ {
+ // add the test parameters in memory
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'authorization_code', // valid grant type
+ 'code' => 'testcode',
+ 'client_id' => 'Fake Client ID', // invalid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ ));
+ $server->handleTokenRequest($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_client');
+ $this->assertEquals($response->getParameter('error_description'), 'The client credentials are invalid');
+ }
+
+ public function testInvalidClientSecret()
+ {
+ // add the test parameters in memory
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'authorization_code', // valid grant type
+ 'code' => 'testcode',
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'Fake Client Secret', // invalid client secret
+ ));
+ $server->handleTokenRequest($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_client');
+ $this->assertEquals($response->getParameter('error_description'), 'The client credentials are invalid');
+ }
+
+ public function testValidTokenResponse()
+ {
+ // add the test parameters in memory
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'authorization_code', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'code' => 'testcode', // valid authorization code
+ ));
+ $server->handleTokenRequest($request, $response = new Response());
+
+ $this->assertTrue($response instanceof Response);
+ $this->assertEquals($response->getStatusCode(), 200);
+ $this->assertNull($response->getParameter('error'));
+ $this->assertNull($response->getParameter('error_description'));
+ $this->assertNotNull($response->getParameter('access_token'));
+ $this->assertNotNull($response->getParameter('expires_in'));
+ $this->assertNotNull($response->getParameter('token_type'));
+ }
+
+ public function testValidClientIdScope()
+ {
+ // add the test parameters in memory
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'authorization_code', // valid grant type
+ 'code' => 'testcode',
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'scope' => 'clientscope1 clientscope2'
+ ));
+ $server->handleTokenRequest($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 200);
+ $this->assertNull($response->getParameter('error'));
+ $this->assertNull($response->getParameter('error_description'));
+ $this->assertEquals('clientscope1 clientscope2', $response->getParameter('scope'));
+ }
+
+ public function testInvalidClientIdScope()
+ {
+ // add the test parameters in memory
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'authorization_code', // valid grant type
+ 'code' => 'testcode-with-scope',
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'scope' => 'clientscope3'
+ ));
+ $server->handleTokenRequest($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_scope');
+ $this->assertEquals($response->getParameter('error_description'), 'The scope requested is invalid for this request');
+ }
+
+ public function testEnforceScope()
+ {
+ $storage = Bootstrap::getInstance()->getMemoryStorage();
+ $server = new Server($storage);
+ $server->addGrantType(new ClientCredentials($storage));
+
+ $scope = new Scope(array(
+ 'default_scope' => false,
+ 'supported_scopes' => array('testscope')
+ ));
+ $server->setScopeUtil($scope);
+
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'client_credentials', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ ));
+ $response = $server->handleTokenRequest($request);
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_scope');
+ $this->assertEquals($response->getParameter('error_description'), 'This application requires you specify a scope parameter');
+ }
+
+ public function testCanReceiveAccessTokenUsingPasswordGrantTypeWithoutClientSecret()
+ {
+ // add the test parameters in memory
+ $storage = Bootstrap::getInstance()->getMemoryStorage();
+ $server = new Server($storage);
+ $server->addGrantType(new UserCredentials($storage));
+
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'password', // valid grant type
+ 'client_id' => 'Test Client ID For Password Grant', // valid client id
+ 'username' => 'johndoe', // valid username
+ 'password' => 'password', // valid password for username
+ ));
+ $server->handleTokenRequest($request, $response = new Response());
+
+ $this->assertTrue($response instanceof Response);
+ $this->assertEquals(200, $response->getStatusCode(), var_export($response, 1));
+ $this->assertNull($response->getParameter('error'));
+ $this->assertNull($response->getParameter('error_description'));
+ $this->assertNotNull($response->getParameter('access_token'));
+ $this->assertNotNull($response->getParameter('expires_in'));
+ $this->assertNotNull($response->getParameter('token_type'));
+ }
+
+ public function testInvalidTokenTypeHintForRevoke()
+ {
+ $server = $this->getTestServer();
+
+ $request = TestRequest::createPost(array(
+ 'token_type_hint' => 'foo',
+ 'token' => 'sometoken'
+ ));
+
+ $server->handleRevokeRequest($request, $response = new Response());
+
+ $this->assertTrue($response instanceof Response);
+ $this->assertEquals(400, $response->getStatusCode(), var_export($response, 1));
+ $this->assertEquals($response->getParameter('error'), 'invalid_request');
+ $this->assertEquals($response->getParameter('error_description'), 'Token type hint must be either \'access_token\' or \'refresh_token\'');
+ }
+
+ public function testMissingTokenForRevoke()
+ {
+ $server = $this->getTestServer();
+
+ $request = TestRequest::createPost(array(
+ 'token_type_hint' => 'access_token'
+ ));
+
+ $server->handleRevokeRequest($request, $response = new Response());
+ $this->assertTrue($response instanceof Response);
+ $this->assertEquals(400, $response->getStatusCode(), var_export($response, 1));
+ $this->assertEquals($response->getParameter('error'), 'invalid_request');
+ $this->assertEquals($response->getParameter('error_description'), 'Missing token parameter to revoke');
+ }
+
+ public function testInvalidRequestMethodForRevoke()
+ {
+ $server = $this->getTestServer();
+
+ $request = new TestRequest();
+ $request->setQuery(array(
+ 'token_type_hint' => 'access_token'
+ ));
+
+ $server->handleRevokeRequest($request, $response = new Response());
+ $this->assertTrue($response instanceof Response);
+ $this->assertEquals(405, $response->getStatusCode(), var_export($response, 1));
+ $this->assertEquals($response->getParameter('error'), 'invalid_request');
+ $this->assertEquals($response->getParameter('error_description'), 'The request method must be POST when revoking an access token');
+ }
+
+ public function testCanUseCrossOriginRequestForRevoke()
+ {
+ $server = $this->getTestServer();
+
+ $request = new TestRequest();
+ $request->setMethod('OPTIONS');
+
+ $server->handleRevokeRequest($request, $response = new Response());
+ $this->assertTrue($response instanceof Response);
+ $this->assertEquals(200, $response->getStatusCode(), var_export($response, 1));
+ $this->assertEquals($response->getHttpHeader('Allow'), 'POST, OPTIONS');
+ }
+
+ public function testInvalidRequestMethodForAccessToken()
+ {
+ $server = $this->getTestServer();
+
+ $request = new TestRequest();
+ $request->setQuery(array(
+ 'token_type_hint' => 'access_token'
+ ));
+
+ $server->handleTokenRequest($request, $response = new Response());
+ $this->assertTrue($response instanceof Response);
+ $this->assertEquals(405, $response->getStatusCode(), var_export($response, 1));
+ $this->assertEquals($response->getParameter('error'), 'invalid_request');
+ $this->assertEquals($response->getParameter('error_description'), 'The request method must be POST when requesting an access token');
+ }
+
+ public function testCanUseCrossOriginRequestForAccessToken()
+ {
+ $server = $this->getTestServer();
+
+ $request = new TestRequest();
+ $request->setMethod('OPTIONS');
+
+ $server->handleTokenRequest($request, $response = new Response());
+ $this->assertTrue($response instanceof Response);
+ $this->assertEquals(200, $response->getStatusCode(), var_export($response, 1));
+ $this->assertEquals($response->getHttpHeader('Allow'), 'POST, OPTIONS');
+ }
+
+ public function testCreateController()
+ {
+ $storage = Bootstrap::getInstance()->getMemoryStorage();
+ $accessToken = new \OAuth2\ResponseType\AccessToken($storage);
+ $controller = new TokenController($accessToken, $storage);
+ }
+
+ private function getTestServer()
+ {
+ $storage = Bootstrap::getInstance()->getMemoryStorage();
+ $server = new Server($storage);
+ $server->addGrantType(new AuthorizationCode($storage));
+
+ return $server;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Encryption/FirebaseJwtTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Encryption/FirebaseJwtTest.php
new file mode 100644
index 0000000..c7e92c0
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Encryption/FirebaseJwtTest.php
@@ -0,0 +1,103 @@
+<?php
+
+namespace OAuth2\Encryption;
+
+use OAuth2\Storage\Bootstrap;
+use PHPUnit\Framework\TestCase;
+
+class FirebaseJwtTest extends TestCase
+{
+ private $privateKey;
+
+ public function setUp()
+ {
+ $this->privateKey = <<<EOD
+-----BEGIN RSA PRIVATE KEY-----
+MIICXAIBAAKBgQC5/SxVlE8gnpFqCxgl2wjhzY7ucEi00s0kUg3xp7lVEvgLgYcA
+nHiWp+gtSjOFfH2zsvpiWm6Lz5f743j/FEzHIO1owR0p4d9pOaJK07d01+RzoQLO
+IQAgXrr4T1CCWUesncwwPBVCyy2Mw3Nmhmr9MrF8UlvdRKBxriRnlP3qJQIDAQAB
+AoGAVgJJVU4fhYMu1e5JfYAcTGfF+Gf+h3iQm4JCpoUcxMXf5VpB9ztk3K7LRN5y
+kwFuFALpnUAarRcUPs0D8FoP4qBluKksbAtgHkO7bMSH9emN+mH4le4qpFlR7+P1
+3fLE2Y19IBwPwEfClC+TpJvuog6xqUYGPlg6XLq/MxQUB4ECQQDgovP1v+ONSeGS
+R+NgJTR47noTkQT3M2izlce/OG7a+O0yw6BOZjNXqH2wx3DshqMcPUFrTjibIClP
+l/tEQ3ShAkEA0/TdBYDtXpNNjqg0R9GVH2pw7Kh68ne6mZTuj0kCgFYpUF6L6iMm
+zXamIJ51rTDsTyKTAZ1JuAhAsK/M2BbDBQJAKQ5fXEkIA+i+64dsDUR/hKLBeRYG
+PFAPENONQGvGBwt7/s02XV3cgGbxIgAxqWkqIp0neb9AJUoJgtyaNe3GQQJANoL4
+QQ0af0NVJAZgg8QEHTNL3aGrFSbzx8IE5Lb7PLRsJa5bP5lQxnDoYuU+EI/Phr62
+niisp/b/ZDGidkTMXQJBALeRsH1I+LmICAvWXpLKa9Gv0zGCwkuIJLiUbV9c6CVh
+suocCAteQwL5iW2gA4AnYr5OGeHFsEl7NCQcwfPZpJ0=
+-----END RSA PRIVATE KEY-----
+EOD;
+ }
+
+ /** @dataProvider provideClientCredentials */
+ public function testJwtUtil($client_id, $client_key)
+ {
+ $jwtUtil = new FirebaseJwt();
+
+ $params = array(
+ 'iss' => $client_id,
+ 'exp' => time() + 1000,
+ 'iat' => time(),
+ 'sub' => 'testuser@ourdomain.com',
+ 'aud' => 'http://myapp.com/oauth/auth',
+ 'scope' => null,
+ );
+
+ $encoded = $jwtUtil->encode($params, $this->privateKey, 'RS256');
+
+ // test BC behaviour of trusting the algorithm in the header
+ $payload = $jwtUtil->decode($encoded, $client_key, array('RS256'));
+ $this->assertEquals($params, $payload);
+
+ // test BC behaviour of not verifying by passing false
+ $payload = $jwtUtil->decode($encoded, $client_key, false);
+ $this->assertEquals($params, $payload);
+
+ // test the new restricted algorithms header
+ $payload = $jwtUtil->decode($encoded, $client_key, array('RS256'));
+ $this->assertEquals($params, $payload);
+ }
+
+ public function testInvalidJwt()
+ {
+ $jwtUtil = new FirebaseJwt();
+
+ $this->assertFalse($jwtUtil->decode('goob'));
+ $this->assertFalse($jwtUtil->decode('go.o.b'));
+ }
+
+ /** @dataProvider provideClientCredentials */
+ public function testInvalidJwtHeader($client_id, $client_key)
+ {
+ $jwtUtil = new FirebaseJwt();
+
+ $params = array(
+ 'iss' => $client_id,
+ 'exp' => time() + 1000,
+ 'iat' => time(),
+ 'sub' => 'testuser@ourdomain.com',
+ 'aud' => 'http://myapp.com/oauth/auth',
+ 'scope' => null,
+ );
+
+ // testing for algorithm tampering when only RSA256 signing is allowed
+ // @see https://auth0.com/blog/2015/03/31/critical-vulnerabilities-in-json-web-token-libraries/
+ $tampered = $jwtUtil->encode($params, $client_key, 'HS256');
+
+ $payload = $jwtUtil->decode($tampered, $client_key, array('RS256'));
+
+ $this->assertFalse($payload);
+ }
+
+ public function provideClientCredentials()
+ {
+ $storage = Bootstrap::getInstance()->getMemoryStorage();
+ $client_id = 'Test Client ID';
+ $client_key = $storage->getClientKey($client_id, "testuser@ourdomain.com");
+
+ return array(
+ array($client_id, $client_key),
+ );
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Encryption/JwtTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Encryption/JwtTest.php
new file mode 100644
index 0000000..d73b4c9
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Encryption/JwtTest.php
@@ -0,0 +1,103 @@
+<?php
+
+namespace OAuth2\Encryption;
+
+use OAuth2\Storage\Bootstrap;
+use PHPUnit\Framework\TestCase;
+
+class JwtTest extends TestCase
+{
+ private $privateKey;
+
+ public function setUp()
+ {
+ $this->privateKey = <<<EOD
+-----BEGIN RSA PRIVATE KEY-----
+MIICXAIBAAKBgQC5/SxVlE8gnpFqCxgl2wjhzY7ucEi00s0kUg3xp7lVEvgLgYcA
+nHiWp+gtSjOFfH2zsvpiWm6Lz5f743j/FEzHIO1owR0p4d9pOaJK07d01+RzoQLO
+IQAgXrr4T1CCWUesncwwPBVCyy2Mw3Nmhmr9MrF8UlvdRKBxriRnlP3qJQIDAQAB
+AoGAVgJJVU4fhYMu1e5JfYAcTGfF+Gf+h3iQm4JCpoUcxMXf5VpB9ztk3K7LRN5y
+kwFuFALpnUAarRcUPs0D8FoP4qBluKksbAtgHkO7bMSH9emN+mH4le4qpFlR7+P1
+3fLE2Y19IBwPwEfClC+TpJvuog6xqUYGPlg6XLq/MxQUB4ECQQDgovP1v+ONSeGS
+R+NgJTR47noTkQT3M2izlce/OG7a+O0yw6BOZjNXqH2wx3DshqMcPUFrTjibIClP
+l/tEQ3ShAkEA0/TdBYDtXpNNjqg0R9GVH2pw7Kh68ne6mZTuj0kCgFYpUF6L6iMm
+zXamIJ51rTDsTyKTAZ1JuAhAsK/M2BbDBQJAKQ5fXEkIA+i+64dsDUR/hKLBeRYG
+PFAPENONQGvGBwt7/s02XV3cgGbxIgAxqWkqIp0neb9AJUoJgtyaNe3GQQJANoL4
+QQ0af0NVJAZgg8QEHTNL3aGrFSbzx8IE5Lb7PLRsJa5bP5lQxnDoYuU+EI/Phr62
+niisp/b/ZDGidkTMXQJBALeRsH1I+LmICAvWXpLKa9Gv0zGCwkuIJLiUbV9c6CVh
+suocCAteQwL5iW2gA4AnYr5OGeHFsEl7NCQcwfPZpJ0=
+-----END RSA PRIVATE KEY-----
+EOD;
+ }
+
+ /** @dataProvider provideClientCredentials */
+ public function testJwtUtil($client_id, $client_key)
+ {
+ $jwtUtil = new Jwt();
+
+ $params = array(
+ 'iss' => $client_id,
+ 'exp' => time() + 1000,
+ 'iat' => time(),
+ 'sub' => 'testuser@ourdomain.com',
+ 'aud' => 'http://myapp.com/oauth/auth',
+ 'scope' => null,
+ );
+
+ $encoded = $jwtUtil->encode($params, $this->privateKey, 'RS256');
+
+ // test BC behaviour of trusting the algorithm in the header
+ $payload = $jwtUtil->decode($encoded, $client_key);
+ $this->assertEquals($params, $payload);
+
+ // test BC behaviour of not verifying by passing false
+ $payload = $jwtUtil->decode($encoded, $client_key, false);
+ $this->assertEquals($params, $payload);
+
+ // test the new restricted algorithms header
+ $payload = $jwtUtil->decode($encoded, $client_key, array('RS256'));
+ $this->assertEquals($params, $payload);
+ }
+
+ public function testInvalidJwt()
+ {
+ $jwtUtil = new Jwt();
+
+ $this->assertFalse($jwtUtil->decode('goob'));
+ $this->assertFalse($jwtUtil->decode('go.o.b'));
+ }
+
+ /** @dataProvider provideClientCredentials */
+ public function testInvalidJwtHeader($client_id, $client_key)
+ {
+ $jwtUtil = new Jwt();
+
+ $params = array(
+ 'iss' => $client_id,
+ 'exp' => time() + 1000,
+ 'iat' => time(),
+ 'sub' => 'testuser@ourdomain.com',
+ 'aud' => 'http://myapp.com/oauth/auth',
+ 'scope' => null,
+ );
+
+ // testing for algorithm tampering when only RSA256 signing is allowed
+ // @see https://auth0.com/blog/2015/03/31/critical-vulnerabilities-in-json-web-token-libraries/
+ $tampered = $jwtUtil->encode($params, $client_key, 'HS256');
+
+ $payload = $jwtUtil->decode($tampered, $client_key, array('RS256'));
+
+ $this->assertFalse($payload);
+ }
+
+ public function provideClientCredentials()
+ {
+ $storage = Bootstrap::getInstance()->getMemoryStorage();
+ $client_id = 'Test Client ID';
+ $client_key = $storage->getClientKey($client_id, "testuser@ourdomain.com");
+
+ return array(
+ array($client_id, $client_key),
+ );
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/AuthorizationCodeTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/AuthorizationCodeTest.php
new file mode 100644
index 0000000..b2314ff
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/AuthorizationCodeTest.php
@@ -0,0 +1,224 @@
+<?php
+
+namespace OAuth2\GrantType;
+
+use OAuth2\Storage\Bootstrap;
+use OAuth2\Server;
+use OAuth2\Request\TestRequest;
+use OAuth2\Response;
+use PHPUnit\Framework\TestCase;
+
+class AuthorizationCodeTest extends TestCase
+{
+ public function testNoCode()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'authorization_code', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ ));
+ $server->handleTokenRequest($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_request');
+ $this->assertEquals($response->getParameter('error_description'), 'Missing parameter: "code" is required');
+ }
+
+ public function testInvalidCode()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'authorization_code', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'code' => 'InvalidCode', // invalid authorization code
+ ));
+ $server->handleTokenRequest($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_grant');
+ $this->assertEquals($response->getParameter('error_description'), 'Authorization code doesn\'t exist or is invalid for the client');
+ }
+
+ public function testCodeCannotBeUsedTwice()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'authorization_code', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'code' => 'testcode', // valid code
+ ));
+ $server->handleTokenRequest($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 200);
+ $this->assertNotNull($response->getParameter('access_token'));
+
+ // try to use the same code again
+ $server->handleTokenRequest($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_grant');
+ $this->assertEquals($response->getParameter('error_description'), 'Authorization code doesn\'t exist or is invalid for the client');
+ }
+
+ public function testExpiredCode()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'authorization_code', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'code' => 'testcode-expired', // expired authorization code
+ ));
+ $server->handleTokenRequest($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_grant');
+ $this->assertEquals($response->getParameter('error_description'), 'The authorization code has expired');
+ }
+
+ public function testValidCode()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'authorization_code', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'code' => 'testcode', // valid code
+ ));
+ $token = $server->grantAccessToken($request, new Response());
+
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('access_token', $token);
+ }
+
+ public function testValidRedirectUri()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'authorization_code', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'redirect_uri' => 'http://brentertainment.com/voil%C3%A0', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'code' => 'testcode-redirect-uri', // valid code
+ ));
+ $token = $server->grantAccessToken($request, new Response());
+
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('access_token', $token);
+ }
+
+ public function testValidCodeNoScope()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'authorization_code', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'code' => 'testcode-with-scope', // valid code
+ ));
+ $token = $server->grantAccessToken($request, new Response());
+
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('access_token', $token);
+ $this->assertArrayHasKey('scope', $token);
+ $this->assertEquals($token['scope'], 'scope1 scope2');
+ }
+
+ public function testValidCodeSameScope()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'authorization_code', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'code' => 'testcode-with-scope', // valid code
+ 'scope' => 'scope2 scope1',
+ ));
+ $token = $server->grantAccessToken($request, new Response());
+
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('access_token', $token);
+ $this->assertArrayHasKey('scope', $token);
+ $this->assertEquals($token['scope'], 'scope2 scope1');
+ }
+
+ public function testValidCodeLessScope()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'authorization_code', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'code' => 'testcode-with-scope', // valid code
+ 'scope' => 'scope1',
+ ));
+ $token = $server->grantAccessToken($request, new Response());
+
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('access_token', $token);
+ $this->assertArrayHasKey('scope', $token);
+ $this->assertEquals($token['scope'], 'scope1');
+ }
+
+ public function testValidCodeDifferentScope()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'authorization_code', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'code' => 'testcode-with-scope', // valid code
+ 'scope' => 'scope3',
+ ));
+ $token = $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_scope');
+ $this->assertEquals($response->getParameter('error_description'), 'The scope requested is invalid for this request');
+ }
+
+ public function testValidCodeInvalidScope()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'authorization_code', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'code' => 'testcode-with-scope', // valid code
+ 'scope' => 'invalid-scope',
+ ));
+ $token = $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_scope');
+ $this->assertEquals($response->getParameter('error_description'), 'The scope requested is invalid for this request');
+ }
+
+ public function testValidClientDifferentCode()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'authorization_code', // valid grant type
+ 'client_id' => 'Test Some Other Client', // valid client id
+ 'client_secret' => 'TestSecret3', // valid client secret
+ 'code' => 'testcode', // valid code
+ ));
+ $token = $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_grant');
+ $this->assertEquals($response->getParameter('error_description'), 'authorization_code doesn\'t exist or is invalid for the client');
+ }
+
+ private function getTestServer()
+ {
+ $storage = Bootstrap::getInstance()->getMemoryStorage();
+ $server = new Server($storage);
+ $server->addGrantType(new AuthorizationCode($storage));
+
+ return $server;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/ClientCredentialsTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/ClientCredentialsTest.php
new file mode 100644
index 0000000..2a7d0eb
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/ClientCredentialsTest.php
@@ -0,0 +1,160 @@
+<?php
+
+namespace OAuth2\GrantType;
+
+use OAuth2\Storage\Bootstrap;
+use OAuth2\Server;
+use OAuth2\Request\TestRequest;
+use OAuth2\Request;
+use OAuth2\Response;
+use PHPUnit\Framework\TestCase;
+
+class ClientCredentialsTest extends TestCase
+{
+ public function testInvalidCredentials()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'client_credentials', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'FakeSecret', // valid client secret
+ ));
+ $server->handleTokenRequest($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_client');
+ $this->assertEquals($response->getParameter('error_description'), 'The client credentials are invalid');
+ }
+
+ public function testValidCredentials()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'client_credentials', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ ));
+ $token = $server->grantAccessToken($request, new Response());
+
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('scope', $token);
+ $this->assertNull($token['scope']);
+ }
+
+ public function testValidCredentialsWithScope()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'client_credentials', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'scope' => 'scope1',
+ ));
+ $token = $server->grantAccessToken($request, new Response());
+
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('access_token', $token);
+ $this->assertArrayHasKey('scope', $token);
+ $this->assertEquals($token['scope'], 'scope1');
+ }
+
+ public function testValidCredentialsInvalidScope()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'client_credentials', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'scope' => 'invalid-scope',
+ ));
+ $token = $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_scope');
+ $this->assertEquals($response->getParameter('error_description'), 'An unsupported scope was requested');
+ }
+
+ public function testValidCredentialsInHeader()
+ {
+ // create with HTTP_AUTHORIZATION in header
+ $server = $this->getTestServer();
+ $headers = array('HTTP_AUTHORIZATION' => 'Basic '.base64_encode('Test Client ID:TestSecret'), 'REQUEST_METHOD' => 'POST');
+ $params = array('grant_type' => 'client_credentials');
+ $request = new Request(array(), $params, array(), array(), array(), $headers);
+ $token = $server->grantAccessToken($request, new Response());
+
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('access_token', $token);
+ $this->assertNotNull($token['access_token']);
+
+ // create using PHP Authorization Globals
+ $headers = array('PHP_AUTH_USER' => 'Test Client ID', 'PHP_AUTH_PW' => 'TestSecret', 'REQUEST_METHOD' => 'POST');
+ $params = array('grant_type' => 'client_credentials');
+ $request = new Request(array(), $params, array(), array(), array(), $headers);
+ $token = $server->grantAccessToken($request, new Response());
+
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('access_token', $token);
+ $this->assertNotNull($token['access_token']);
+ }
+
+ public function testValidCredentialsInRequest()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'client_credentials', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ ));
+ $token = $server->grantAccessToken($request, new Response());
+
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('access_token', $token);
+ $this->assertNotNull($token['access_token']);
+ }
+
+ public function testValidCredentialsInQuerystring()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'client_credentials', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ ));
+ $token = $server->grantAccessToken($request, new Response());
+
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('access_token', $token);
+ $this->assertNotNull($token['access_token']);
+ }
+
+ public function testClientUserIdIsSetInAccessToken()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'client_credentials', // valid grant type
+ 'client_id' => 'Client ID With User ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ ));
+ $token = $server->grantAccessToken($request, new Response());
+
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('access_token', $token);
+
+ // verify the user_id was associated with the token
+ $storage = $server->getStorage('client');
+ $token = $storage->getAccessToken($token['access_token']);
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('user_id', $token);
+ $this->assertEquals($token['user_id'], 'brent@brentertainment.com');
+ }
+
+ private function getTestServer()
+ {
+ $storage = Bootstrap::getInstance()->getMemoryStorage();
+ $server = new Server($storage);
+ $server->addGrantType(new ClientCredentials($storage));
+
+ return $server;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/ImplicitTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/ImplicitTest.php
new file mode 100644
index 0000000..14bf980
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/ImplicitTest.php
@@ -0,0 +1,144 @@
+<?php
+
+namespace OAuth2\GrantType;
+
+use OAuth2\Storage\Bootstrap;
+use OAuth2\Server;
+use OAuth2\Request;
+use OAuth2\Response;
+use PHPUnit\Framework\TestCase;
+
+class ImplicitTest extends TestCase
+{
+ public function testImplicitNotAllowedResponse()
+ {
+ $server = $this->getTestServer();
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID', // valid client id
+ 'redirect_uri' => 'http://adobe.com', // valid redirect URI
+ 'response_type' => 'token', // invalid response type
+ ));
+ $server->handleAuthorizeRequest($request, $response = new Response(), false);
+
+ $this->assertEquals($response->getStatusCode(), 302);
+ $location = $response->getHttpHeader('Location');
+ $parts = parse_url($location);
+ parse_str($parts['query'], $query);
+
+ $this->assertEquals($query['error'], 'unsupported_response_type');
+ $this->assertEquals($query['error_description'], 'implicit grant type not supported');
+ }
+
+ public function testUserDeniesAccessResponse()
+ {
+ $server = $this->getTestServer(array('allow_implicit' => true));
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID', // valid client id
+ 'redirect_uri' => 'http://adobe.com', // valid redirect URI
+ 'response_type' => 'token', // valid response type
+ 'state' => 'xyz',
+ ));
+ $server->handleAuthorizeRequest($request, $response = new Response(), false);
+
+ $this->assertEquals($response->getStatusCode(), 302);
+ $location = $response->getHttpHeader('Location');
+ $parts = parse_url($location);
+ parse_str($parts['query'], $query);
+
+ $this->assertEquals($query['error'], 'access_denied');
+ $this->assertEquals($query['error_description'], 'The user denied access to your application');
+ }
+
+ public function testSuccessfulRequestFragmentParameter()
+ {
+ $server = $this->getTestServer(array('allow_implicit' => true));
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID', // valid client id
+ 'redirect_uri' => 'http://adobe.com', // valid redirect URI
+ 'response_type' => 'token', // valid response type
+ 'state' => 'xyz',
+ ));
+ $server->handleAuthorizeRequest($request, $response = new Response(), true);
+
+ $this->assertEquals($response->getStatusCode(), 302);
+ $this->assertNull($response->getParameter('error'));
+ $this->assertNull($response->getParameter('error_description'));
+
+ $location = $response->getHttpHeader('Location');
+ $parts = parse_url($location);
+
+ $this->assertEquals('http', $parts['scheme']); // same as passed in to redirect_uri
+ $this->assertEquals('adobe.com', $parts['host']); // same as passed in to redirect_uri
+ $this->assertArrayHasKey('fragment', $parts);
+ $this->assertFalse(isset($parts['query']));
+
+ // assert fragment is in "application/x-www-form-urlencoded" format
+ parse_str($parts['fragment'], $params);
+ $this->assertNotNull($params);
+ $this->assertArrayHasKey('access_token', $params);
+ $this->assertArrayHasKey('expires_in', $params);
+ $this->assertArrayHasKey('token_type', $params);
+ }
+
+ public function testSuccessfulRequestReturnsStateParameter()
+ {
+ $server = $this->getTestServer(array('allow_implicit' => true));
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID', // valid client id
+ 'redirect_uri' => 'http://adobe.com', // valid redirect URI
+ 'response_type' => 'token', // valid response type
+ 'state' => 'test', // valid state string (just needs to be passed back to us)
+ ));
+ $server->handleAuthorizeRequest($request, $response = new Response(), true);
+
+ $this->assertEquals($response->getStatusCode(), 302);
+ $this->assertNull($response->getParameter('error'));
+ $this->assertNull($response->getParameter('error_description'));
+
+ $location = $response->getHttpHeader('Location');
+ $parts = parse_url($location);
+ $this->assertArrayHasKey('fragment', $parts);
+ parse_str($parts['fragment'], $params);
+
+ $this->assertArrayHasKey('state', $params);
+ $this->assertEquals($params['state'], 'test');
+ }
+
+ public function testSuccessfulRequestStripsExtraParameters()
+ {
+ $server = $this->getTestServer(array('allow_implicit' => true));
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID', // valid client id
+ 'redirect_uri' => 'http://adobe.com?fake=something', // valid redirect URI
+ 'response_type' => 'token', // valid response type
+ 'state' => 'test', // valid state string (just needs to be passed back to us)
+ 'fake' => 'something', // add extra param to querystring
+ ));
+ $server->handleAuthorizeRequest($request, $response = new Response(), true);
+
+ $this->assertEquals($response->getStatusCode(), 302);
+ $this->assertNull($response->getParameter('error'));
+ $this->assertNull($response->getParameter('error_description'));
+
+ $location = $response->getHttpHeader('Location');
+ $parts = parse_url($location);
+ $this->assertFalse(isset($parts['fake']));
+ $this->assertArrayHasKey('fragment', $parts);
+ parse_str($parts['fragment'], $params);
+
+ $this->assertFalse(isset($params['fake']));
+ $this->assertArrayHasKey('state', $params);
+ $this->assertEquals($params['state'], 'test');
+ }
+
+ private function getTestServer($config = array())
+ {
+ $storage = Bootstrap::getInstance()->getMemoryStorage();
+ $server = new Server($storage, $config);
+
+ // Add the two types supported for authorization grant
+ $server->addGrantType(new AuthorizationCode($storage));
+
+ return $server;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/JwtBearerTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/JwtBearerTest.php
new file mode 100644
index 0000000..e60023b
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/JwtBearerTest.php
@@ -0,0 +1,361 @@
+<?php
+
+namespace OAuth2\GrantType;
+
+use OAuth2\Storage\Bootstrap;
+use OAuth2\Server;
+use OAuth2\Request\TestRequest;
+use OAuth2\Response;
+use OAuth2\Encryption\Jwt;
+use PHPUnit\Framework\TestCase;
+
+class JwtBearerTest extends TestCase
+{
+ private $privateKey;
+
+ public function setUp()
+ {
+ $this->privateKey = <<<EOD
+-----BEGIN RSA PRIVATE KEY-----
+MIICXAIBAAKBgQC5/SxVlE8gnpFqCxgl2wjhzY7ucEi00s0kUg3xp7lVEvgLgYcA
+nHiWp+gtSjOFfH2zsvpiWm6Lz5f743j/FEzHIO1owR0p4d9pOaJK07d01+RzoQLO
+IQAgXrr4T1CCWUesncwwPBVCyy2Mw3Nmhmr9MrF8UlvdRKBxriRnlP3qJQIDAQAB
+AoGAVgJJVU4fhYMu1e5JfYAcTGfF+Gf+h3iQm4JCpoUcxMXf5VpB9ztk3K7LRN5y
+kwFuFALpnUAarRcUPs0D8FoP4qBluKksbAtgHkO7bMSH9emN+mH4le4qpFlR7+P1
+3fLE2Y19IBwPwEfClC+TpJvuog6xqUYGPlg6XLq/MxQUB4ECQQDgovP1v+ONSeGS
+R+NgJTR47noTkQT3M2izlce/OG7a+O0yw6BOZjNXqH2wx3DshqMcPUFrTjibIClP
+l/tEQ3ShAkEA0/TdBYDtXpNNjqg0R9GVH2pw7Kh68ne6mZTuj0kCgFYpUF6L6iMm
+zXamIJ51rTDsTyKTAZ1JuAhAsK/M2BbDBQJAKQ5fXEkIA+i+64dsDUR/hKLBeRYG
+PFAPENONQGvGBwt7/s02XV3cgGbxIgAxqWkqIp0neb9AJUoJgtyaNe3GQQJANoL4
+QQ0af0NVJAZgg8QEHTNL3aGrFSbzx8IE5Lb7PLRsJa5bP5lQxnDoYuU+EI/Phr62
+niisp/b/ZDGidkTMXQJBALeRsH1I+LmICAvWXpLKa9Gv0zGCwkuIJLiUbV9c6CVh
+suocCAteQwL5iW2gA4AnYr5OGeHFsEl7NCQcwfPZpJ0=
+-----END RSA PRIVATE KEY-----
+EOD;
+ }
+
+ public function testMalformedJWT()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // valid grant type
+ ));
+
+ //Get the jwt and break it
+ $jwt = $this->getJWT();
+ $jwt = substr_replace($jwt, 'broken', 3, 6);
+
+ $request->request['assertion'] = $jwt;
+
+ $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_request');
+ $this->assertEquals($response->getParameter('error_description'), 'JWT is malformed');
+ }
+
+ public function testBrokenSignature()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // valid grant type
+ ));
+
+ //Get the jwt and break signature
+ $jwt = $this->getJWT() . 'notSupposeToBeHere';
+ $request->request['assertion'] = $jwt;
+
+ $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_grant');
+ $this->assertEquals($response->getParameter('error_description'), 'JWT failed signature verification');
+ }
+
+ public function testExpiredJWT()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // valid grant type
+ ));
+
+ //Get an expired JWT
+ $jwt = $this->getJWT(1234);
+ $request->request['assertion'] = $jwt;
+
+ $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_grant');
+ $this->assertEquals($response->getParameter('error_description'), 'JWT has expired');
+ }
+
+ public function testBadExp()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // valid grant type
+ ));
+
+ //Get an expired JWT
+ $jwt = $this->getJWT('badtimestamp');
+ $request->request['assertion'] = $jwt;
+
+ $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_grant');
+ $this->assertEquals($response->getParameter('error_description'), 'Expiration (exp) time must be a unix time stamp');
+ }
+
+ public function testNoAssert()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // valid grant type
+ ));
+
+ //Do not pass the assert (JWT)
+
+ $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_request');
+ $this->assertEquals($response->getParameter('error_description'), 'Missing parameters: "assertion" required');
+ }
+
+ public function testNotBefore()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // valid grant type
+ ));
+
+ //Get a future NBF
+ $jwt = $this->getJWT(null, time() + 10000);
+ $request->request['assertion'] = $jwt;
+
+ $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_grant');
+ $this->assertEquals($response->getParameter('error_description'), 'JWT cannot be used before the Not Before (nbf) time');
+ }
+
+ public function testBadNotBefore()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // valid grant type
+ ));
+
+ //Get a non timestamp nbf
+ $jwt = $this->getJWT(null, 'notatimestamp');
+ $request->request['assertion'] = $jwt;
+
+ $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_grant');
+ $this->assertEquals($response->getParameter('error_description'), 'Not Before (nbf) time must be a unix time stamp');
+ }
+
+ public function testNonMatchingAudience()
+ {
+ $server = $this->getTestServer('http://google.com/oauth/o/auth');
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // valid grant type
+ 'assertion' => $this->getJWT(),
+ ));
+
+ $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_grant');
+ $this->assertEquals($response->getParameter('error_description'), 'Invalid audience (aud)');
+ }
+
+ public function testBadClientID()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // valid grant type
+ 'assertion' => $this->getJWT(null, null, null, 'bad_client_id'),
+ ));
+
+ $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_grant');
+ $this->assertEquals($response->getParameter('error_description'), 'Invalid issuer (iss) or subject (sub) provided');
+ }
+
+ public function testBadSubject()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // valid grant type
+ 'assertion' => $this->getJWT(null, null, 'anotheruser@ourdomain,com'),
+ ));
+
+ $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_grant');
+ $this->assertEquals($response->getParameter('error_description'), 'Invalid issuer (iss) or subject (sub) provided');
+ }
+
+ public function testMissingKey()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // valid grant type
+ 'assertion' => $this->getJWT(null, null, null, 'Missing Key Cli,nt'),
+ ));
+
+ $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_grant');
+ $this->assertEquals($response->getParameter('error_description'), 'Invalid issuer (iss) or subject (sub) provided');
+ }
+
+ public function testValidJwt()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // valid grant type
+ 'assertion' => $this->getJWT(), // valid assertion
+ ));
+
+ $token = $server->grantAccessToken($request, new Response());
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('access_token', $token);
+ }
+
+ public function testValidJwtWithScope()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // valid grant type
+ 'assertion' => $this->getJWT(null, null, null, 'Test Client ID'), // valid assertion
+ 'scope' => 'scope1', // valid scope
+ ));
+ $token = $server->grantAccessToken($request, new Response());
+
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('access_token', $token);
+ $this->assertArrayHasKey('scope', $token);
+ $this->assertEquals($token['scope'], 'scope1');
+ }
+
+ public function testValidJwtInvalidScope()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // valid grant type
+ 'assertion' => $this->getJWT(null, null, null, 'Test Client ID'), // valid assertion
+ 'scope' => 'invalid-scope', // invalid scope
+ ));
+ $token = $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_scope');
+ $this->assertEquals($response->getParameter('error_description'), 'An unsupported scope was requested');
+ }
+
+ public function testValidJti()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // valid grant type
+ 'assertion' => $this->getJWT(null, null, 'testuser@ourdomain.com', 'Test Client ID', 'unused_jti'), // valid assertion with invalid scope
+ ));
+ $token = $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('access_token', $token);
+ }
+
+ public function testInvalidJti()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // valid grant type
+ 'assertion' => $this->getJWT(99999999900, null, 'testuser@ourdomain.com', 'Test Client ID', 'used_jti'), // valid assertion with invalid scope
+ ));
+ $token = $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_grant');
+ $this->assertEquals($response->getParameter('error_description'), 'JSON Token Identifier (jti) has already been used');
+ }
+
+ public function testJtiReplayAttack()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // valid grant type
+ 'assertion' => $this->getJWT(99999999900, null, 'testuser@ourdomain.com', 'Test Client ID', 'totally_new_jti'), // valid assertion with invalid scope
+ ));
+ $token = $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('access_token', $token);
+
+ //Replay the same request
+ $token = $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_grant');
+ $this->assertEquals($response->getParameter('error_description'), 'JSON Token Identifier (jti) has already been used');
+ }
+
+ /**
+ * Generates a JWT
+ * @param $exp The expiration date. If the current time is greater than the exp, the JWT is invalid.
+ * @param $nbf The "not before" time. If the current time is less than the nbf, the JWT is invalid.
+ * @param $sub The subject we are acting on behalf of. This could be the email address of the user in the system.
+ * @param $iss The issuer, usually the client_id.
+ * @return string
+ */
+ private function getJWT($exp = null, $nbf = null, $sub = null, $iss = 'Test Client ID', $jti = null)
+ {
+ if (!$exp) {
+ $exp = time() + 1000;
+ }
+
+ if (!$sub) {
+ $sub = "testuser@ourdomain.com";
+ }
+
+ $params = array(
+ 'iss' => $iss,
+ 'exp' => $exp,
+ 'iat' => time(),
+ 'sub' => $sub,
+ 'aud' => 'http://myapp.com/oauth/auth',
+ );
+
+ if ($nbf) {
+ $params['nbf'] = $nbf;
+ }
+
+ if ($jti) {
+ $params['jti'] = $jti;
+ }
+
+ $jwtUtil = new Jwt();
+
+ return $jwtUtil->encode($params, $this->privateKey, 'RS256');
+ }
+
+ private function getTestServer($audience = 'http://myapp.com/oauth/auth')
+ {
+ $storage = Bootstrap::getInstance()->getMemoryStorage();
+ $server = new Server($storage);
+ $server->addGrantType(new JwtBearer($storage, $audience, new Jwt()));
+
+ return $server;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/RefreshTokenTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/RefreshTokenTest.php
new file mode 100644
index 0000000..c964c6b
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/RefreshTokenTest.php
@@ -0,0 +1,205 @@
+<?php
+
+namespace OAuth2\GrantType;
+
+use OAuth2\Storage\Bootstrap;
+use OAuth2\Server;
+use OAuth2\Request\TestRequest;
+use OAuth2\Response;
+use PHPUnit\Framework\TestCase;
+
+class RefreshTokenTest extends TestCase
+{
+ private $storage;
+
+ public function testNoRefreshToken()
+ {
+ $server = $this->getTestServer();
+ $server->addGrantType(new RefreshToken($this->storage));
+
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'refresh_token', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ ));
+ $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_request');
+ $this->assertEquals($response->getParameter('error_description'), 'Missing parameter: "refresh_token" is required');
+ }
+
+ public function testInvalidRefreshToken()
+ {
+ $server = $this->getTestServer();
+ $server->addGrantType(new RefreshToken($this->storage));
+
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'refresh_token', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'refresh_token' => 'fake-token', // invalid refresh token
+ ));
+ $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_grant');
+ $this->assertEquals($response->getParameter('error_description'), 'Invalid refresh token');
+ }
+
+ public function testValidRefreshTokenWithNewRefreshTokenInResponse()
+ {
+ $server = $this->getTestServer();
+ $server->addGrantType(new RefreshToken($this->storage, array('always_issue_new_refresh_token' => true)));
+
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'refresh_token', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'refresh_token' => 'test-refreshtoken', // valid refresh token
+ ));
+ $token = $server->grantAccessToken($request, new Response());
+ $this->assertTrue(isset($token['refresh_token']), 'refresh token should always refresh');
+
+ $refresh_token = $this->storage->getRefreshToken($token['refresh_token']);
+ $this->assertNotNull($refresh_token);
+ $this->assertEquals($refresh_token['refresh_token'], $token['refresh_token']);
+ $this->assertEquals($refresh_token['client_id'], $request->request('client_id'));
+ $this->assertTrue($token['refresh_token'] != 'test-refreshtoken', 'the refresh token returned is not the one used');
+ $used_token = $this->storage->getRefreshToken('test-refreshtoken');
+ $this->assertFalse($used_token, 'the refresh token used is no longer valid');
+ }
+
+ public function testValidRefreshTokenDoesNotUnsetToken()
+ {
+ $server = $this->getTestServer();
+ $server->addGrantType(new RefreshToken($this->storage, array(
+ 'always_issue_new_refresh_token' => true,
+ 'unset_refresh_token_after_use' => false,
+ )));
+
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'refresh_token', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'refresh_token' => 'test-refreshtoken', // valid refresh token
+ ));
+ $token = $server->grantAccessToken($request, new Response());
+ $this->assertTrue(isset($token['refresh_token']), 'refresh token should always refresh');
+
+ $used_token = $this->storage->getRefreshToken('test-refreshtoken');
+ $this->assertNotNull($used_token, 'the refresh token used is still valid');
+ }
+
+ public function testValidRefreshTokenWithNoRefreshTokenInResponse()
+ {
+ $server = $this->getTestServer();
+ $server->addGrantType(new RefreshToken($this->storage, array('always_issue_new_refresh_token' => false)));
+
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'refresh_token', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'refresh_token' => 'test-refreshtoken', // valid refresh token
+ ));
+ $token = $server->grantAccessToken($request, new Response());
+ $this->assertFalse(isset($token['refresh_token']), 'refresh token should not be returned');
+
+ $used_token = $this->storage->getRefreshToken('test-refreshtoken');
+ $this->assertNotNull($used_token, 'the refresh token used is still valid');
+ }
+
+ public function testValidRefreshTokenSameScope()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'refresh_token', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'refresh_token' => 'test-refreshtoken-with-scope', // valid refresh token (with scope)
+ 'scope' => 'scope2 scope1',
+ ));
+ $token = $server->grantAccessToken($request, new Response());
+
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('access_token', $token);
+ $this->assertArrayHasKey('scope', $token);
+ $this->assertEquals($token['scope'], 'scope2 scope1');
+ }
+
+ public function testValidRefreshTokenLessScope()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'refresh_token', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'refresh_token' => 'test-refreshtoken-with-scope', // valid refresh token (with scope)
+ 'scope' => 'scope1',
+ ));
+ $token = $server->grantAccessToken($request, new Response());
+
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('access_token', $token);
+ $this->assertArrayHasKey('scope', $token);
+ $this->assertEquals($token['scope'], 'scope1');
+ }
+
+ public function testValidRefreshTokenDifferentScope()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'refresh_token', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'refresh_token' => 'test-refreshtoken-with-scope', // valid refresh token (with scope)
+ 'scope' => 'scope3',
+ ));
+ $token = $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_scope');
+ $this->assertEquals($response->getParameter('error_description'), 'The scope requested is invalid for this request');
+ }
+
+ public function testValidRefreshTokenInvalidScope()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'refresh_token', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'refresh_token' => 'test-refreshtoken-with-scope', // valid refresh token (with scope)
+ 'scope' => 'invalid-scope',
+ ));
+ $token = $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_scope');
+ $this->assertEquals($response->getParameter('error_description'), 'The scope requested is invalid for this request');
+ }
+
+ public function testValidClientDifferentRefreshToken()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'refresh_token', // valid grant type
+ 'client_id' => 'Test Some Other Client', // valid client id
+ 'client_secret' => 'TestSecret3', // valid client secret
+ 'refresh_token' => 'test-refreshtoken', // valid refresh token
+ ));
+ $token = $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_grant');
+ $this->assertEquals($response->getParameter('error_description'), 'refresh_token doesn\'t exist or is invalid for the client');
+ }
+
+ private function getTestServer()
+ {
+ $this->storage = Bootstrap::getInstance()->getMemoryStorage();
+ $server = new Server($this->storage);
+
+ return $server;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/UserCredentialsTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/UserCredentialsTest.php
new file mode 100644
index 0000000..8b725e1
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/UserCredentialsTest.php
@@ -0,0 +1,173 @@
+<?php
+
+namespace OAuth2\GrantType;
+
+use OAuth2\Storage\Bootstrap;
+use OAuth2\Server;
+use OAuth2\Request\TestRequest;
+use OAuth2\Response;
+use PHPUnit\Framework\TestCase;
+
+class UserCredentialsTest extends TestCase
+{
+ public function testNoUsername()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'password', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'password' => 'testpass', // valid password
+ ));
+ $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_request');
+ $this->assertEquals($response->getParameter('error_description'), 'Missing parameters: "username" and "password" required');
+ }
+
+ public function testNoPassword()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'password', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'username' => 'test-username', // valid username
+ ));
+ $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_request');
+ $this->assertEquals($response->getParameter('error_description'), 'Missing parameters: "username" and "password" required');
+ }
+
+ public function testInvalidUsername()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'password', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'username' => 'fake-username', // valid username
+ 'password' => 'testpass', // valid password
+ ));
+ $token = $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 401);
+ $this->assertEquals($response->getParameter('error'), 'invalid_grant');
+ $this->assertEquals($response->getParameter('error_description'), 'Invalid username and password combination');
+ }
+
+ public function testInvalidPassword()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'password', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'username' => 'test-username', // valid username
+ 'password' => 'fakepass', // invalid password
+ ));
+ $token = $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 401);
+ $this->assertEquals($response->getParameter('error'), 'invalid_grant');
+ $this->assertEquals($response->getParameter('error_description'), 'Invalid username and password combination');
+ }
+
+ public function testValidCredentials()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'password', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'username' => 'test-username', // valid username
+ 'password' => 'testpass', // valid password
+ ));
+ $token = $server->grantAccessToken($request, new Response());
+
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('access_token', $token);
+ }
+
+ public function testValidCredentialsWithScope()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'password', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'username' => 'test-username', // valid username
+ 'password' => 'testpass', // valid password
+ 'scope' => 'scope1', // valid scope
+ ));
+ $token = $server->grantAccessToken($request, new Response());
+
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('access_token', $token);
+ $this->assertArrayHasKey('scope', $token);
+ $this->assertEquals($token['scope'], 'scope1');
+ }
+
+ public function testValidCredentialsInvalidScope()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'password', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'username' => 'test-username', // valid username
+ 'password' => 'testpass', // valid password
+ 'scope' => 'invalid-scope',
+ ));
+ $token = $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_scope');
+ $this->assertEquals($response->getParameter('error_description'), 'An unsupported scope was requested');
+ }
+
+ public function testNoSecretWithPublicClient()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'password', // valid grant type
+ 'client_id' => 'Test Client ID Empty Secret', // valid public client
+ 'username' => 'test-username', // valid username
+ 'password' => 'testpass', // valid password
+ ));
+
+ $token = $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('access_token', $token);
+ }
+
+ public function testNoSecretWithConfidentialClient()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'password', // valid grant type
+ 'client_id' => 'Test Client ID', // valid public client
+ 'username' => 'test-username', // valid username
+ 'password' => 'testpass', // valid password
+ ));
+
+ $token = $server->grantAccessToken($request, $response = new Response());
+
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_client');
+ $this->assertEquals($response->getParameter('error_description'), 'This client is invalid or must authenticate using a client secret');
+ }
+
+ private function getTestServer()
+ {
+ $storage = Bootstrap::getInstance()->getMemoryStorage();
+ $server = new Server($storage);
+ $server->addGrantType(new UserCredentials($storage));
+
+ return $server;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/Controller/AuthorizeControllerTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/Controller/AuthorizeControllerTest.php
new file mode 100644
index 0000000..fdc16da
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/Controller/AuthorizeControllerTest.php
@@ -0,0 +1,183 @@
+<?php
+
+namespace OAuth2\OpenID\Controller;
+
+use OAuth2\Storage\Bootstrap;
+use OAuth2\Server;
+use OAuth2\Request;
+use OAuth2\Response;
+use PHPUnit\Framework\TestCase;
+
+class AuthorizeControllerTest extends TestCase
+{
+ public function testValidateAuthorizeRequest()
+ {
+ $server = $this->getTestServer();
+
+ $response = new Response();
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID', // valid client id
+ 'redirect_uri' => 'http://adobe.com', // valid redirect URI
+ 'response_type' => 'id_token',
+ 'state' => 'af0ifjsldkj',
+ 'nonce' => 'n-0S6_WzA2Mj',
+ ));
+
+ // Test valid id_token request
+ $server->handleAuthorizeRequest($request, $response, true);
+
+ $parts = parse_url($response->getHttpHeader('Location'));
+ parse_str($parts['fragment'], $query);
+
+ $this->assertEquals('n-0S6_WzA2Mj', $server->getAuthorizeController()->getNonce());
+ $this->assertEquals($query['state'], 'af0ifjsldkj');
+
+ $this->assertArrayHasKey('id_token', $query);
+ $this->assertArrayHasKey('state', $query);
+ $this->assertArrayNotHasKey('access_token', $query);
+ $this->assertArrayNotHasKey('expires_in', $query);
+ $this->assertArrayNotHasKey('token_type', $query);
+
+ // Test valid token id_token request
+ $request->query['response_type'] = 'id_token token';
+ $server->handleAuthorizeRequest($request, $response, true);
+
+ $parts = parse_url($response->getHttpHeader('Location'));
+ parse_str($parts['fragment'], $query);
+
+ $this->assertEquals('n-0S6_WzA2Mj', $server->getAuthorizeController()->getNonce());
+ $this->assertEquals($query['state'], 'af0ifjsldkj');
+
+ $this->assertArrayHasKey('access_token', $query);
+ $this->assertArrayHasKey('expires_in', $query);
+ $this->assertArrayHasKey('token_type', $query);
+ $this->assertArrayHasKey('state', $query);
+ $this->assertArrayHasKey('id_token', $query);
+
+ // assert that with multiple-valued response types, order does not matter
+ $request->query['response_type'] = 'token id_token';
+ $server->handleAuthorizeRequest($request, $response, true);
+
+ $parts = parse_url($response->getHttpHeader('Location'));
+ parse_str($parts['fragment'], $query);
+
+ $this->assertEquals('n-0S6_WzA2Mj', $server->getAuthorizeController()->getNonce());
+ $this->assertEquals($query['state'], 'af0ifjsldkj');
+
+ $this->assertArrayHasKey('access_token', $query);
+ $this->assertArrayHasKey('expires_in', $query);
+ $this->assertArrayHasKey('token_type', $query);
+ $this->assertArrayHasKey('state', $query);
+ $this->assertArrayHasKey('id_token', $query);
+
+ // assert that with multiple-valued response types with extra spaces do not matter
+ $request->query['response_type'] = ' token id_token ';
+ $server->handleAuthorizeRequest($request, $response, true);
+
+ $parts = parse_url($response->getHttpHeader('Location'));
+ parse_str($parts['fragment'], $query);
+
+ $this->assertEquals('n-0S6_WzA2Mj', $server->getAuthorizeController()->getNonce());
+ $this->assertEquals($query['state'], 'af0ifjsldkj');
+
+ $this->assertArrayHasKey('access_token', $query);
+ $this->assertArrayHasKey('expires_in', $query);
+ $this->assertArrayHasKey('token_type', $query);
+ $this->assertArrayHasKey('state', $query);
+ $this->assertArrayHasKey('id_token', $query);
+ }
+
+ public function testMissingNonce()
+ {
+ $server = $this->getTestServer();
+ $authorize = $server->getAuthorizeController();
+
+ $response = new Response();
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID', // valid client id
+ 'redirect_uri' => 'http://adobe.com', // valid redirect URI
+ 'response_type' => 'id_token',
+ 'state' => 'xyz',
+ ));
+
+ // Test missing nonce for 'id_token' response type
+ $server->handleAuthorizeRequest($request, $response, true);
+ $params = $response->getParameters();
+
+ $this->assertEquals($params['error'], 'invalid_nonce');
+ $this->assertEquals($params['error_description'], 'This application requires you specify a nonce parameter');
+
+ // Test missing nonce for 'id_token token' response type
+ $request->query['response_type'] = 'id_token token';
+ $server->handleAuthorizeRequest($request, $response, true);
+ $params = $response->getParameters();
+
+ $this->assertEquals($params['error'], 'invalid_nonce');
+ $this->assertEquals($params['error_description'], 'This application requires you specify a nonce parameter');
+ }
+
+ public function testNotGrantedApplication()
+ {
+ $server = $this->getTestServer();
+
+ $response = new Response();
+ $request = new Request(array(
+ 'client_id' => 'Test Client ID', // valid client id
+ 'redirect_uri' => 'http://adobe.com', // valid redirect URI
+ 'response_type' => 'id_token',
+ 'state' => 'af0ifjsldkj',
+ 'nonce' => 'n-0S6_WzA2Mj',
+ ));
+
+ // Test not approved application
+ $server->handleAuthorizeRequest($request, $response, false);
+
+ $params = $response->getParameters();
+
+ $this->assertEquals($params['error'], 'consent_required');
+ $this->assertEquals($params['error_description'], 'The user denied access to your application');
+
+ // Test not approved application with prompt parameter
+ $request->query['prompt'] = 'none';
+ $server->handleAuthorizeRequest($request, $response, false);
+
+ $params = $response->getParameters();
+
+ $this->assertEquals($params['error'], 'login_required');
+ $this->assertEquals($params['error_description'], 'The user must log in');
+
+ // Test not approved application with user_id set
+ $request->query['prompt'] = 'none';
+ $server->handleAuthorizeRequest($request, $response, false, 'some-user-id');
+
+ $params = $response->getParameters();
+
+ $this->assertEquals($params['error'], 'interaction_required');
+ $this->assertEquals($params['error_description'], 'The user must grant access to your application');
+ }
+
+ public function testNeedsIdToken()
+ {
+ $server = $this->getTestServer();
+ $authorize = $server->getAuthorizeController();
+
+ $this->assertTrue($authorize->needsIdToken('openid'));
+ $this->assertTrue($authorize->needsIdToken('openid profile'));
+ $this->assertFalse($authorize->needsIdToken(''));
+ $this->assertFalse($authorize->needsIdToken('some-scope'));
+ }
+
+ private function getTestServer($config = array())
+ {
+ $config += array(
+ 'use_openid_connect' => true,
+ 'issuer' => 'phpunit',
+ 'allow_implicit' => true
+ );
+
+ $storage = Bootstrap::getInstance()->getMemoryStorage();
+ $server = new Server($storage, $config);
+
+ return $server;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/Controller/UserInfoControllerTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/Controller/UserInfoControllerTest.php
new file mode 100644
index 0000000..62e84df
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/Controller/UserInfoControllerTest.php
@@ -0,0 +1,45 @@
+<?php
+
+namespace OAuth2\OpenID\Controller;
+
+use OAuth2\Storage\Bootstrap;
+use OAuth2\Server;
+use OAuth2\Request;
+use OAuth2\Response;
+use PHPUnit\Framework\TestCase;
+
+class UserInfoControllerTest extends TestCase
+{
+ public function testCreateController()
+ {
+ $tokenType = new \OAuth2\TokenType\Bearer();
+ $storage = new \OAuth2\Storage\Memory();
+ $controller = new UserInfoController($tokenType, $storage, $storage);
+
+ $response = new Response();
+ $controller->handleUserInfoRequest(new Request(), $response);
+ $this->assertEquals(401, $response->getStatusCode());
+ }
+
+ public function testValidToken()
+ {
+ $server = $this->getTestServer();
+ $request = Request::createFromGlobals();
+ $request->headers['AUTHORIZATION'] = 'Bearer accesstoken-openid-connect';
+ $response = new Response();
+
+ $server->handleUserInfoRequest($request, $response);
+ $parameters = $response->getParameters();
+ $this->assertEquals($parameters['sub'], 'testuser');
+ $this->assertEquals($parameters['email'], 'testuser@test.com');
+ $this->assertEquals($parameters['email_verified'], true);
+ }
+
+ private function getTestServer($config = array())
+ {
+ $storage = Bootstrap::getInstance()->getMemoryStorage();
+ $server = new Server($storage, $config);
+
+ return $server;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/GrantType/AuthorizationCodeTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/GrantType/AuthorizationCodeTest.php
new file mode 100644
index 0000000..c89a1ae
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/GrantType/AuthorizationCodeTest.php
@@ -0,0 +1,58 @@
+<?php
+
+namespace OAuth2\OpenID\GrantType;
+
+use OAuth2\Storage\Bootstrap;
+use OAuth2\Server;
+use OAuth2\Request\TestRequest;
+use OAuth2\Response;
+use PHPUnit\Framework\TestCase;
+
+class AuthorizationCodeTest extends TestCase
+{
+ public function testValidCode()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'authorization_code', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'code' => 'testcode-openid', // valid code
+ ));
+ $token = $server->grantAccessToken($request, new Response());
+
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('id_token', $token);
+ $this->assertEquals('test_id_token', $token['id_token']);
+
+ // this is only true if "offline_access" was requested
+ $this->assertFalse(isset($token['refresh_token']));
+ }
+
+ public function testOfflineAccess()
+ {
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'authorization_code', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'code' => 'testcode-openid', // valid code
+ 'scope' => 'offline_access', // valid code
+ ));
+ $token = $server->grantAccessToken($request, new Response());
+
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('id_token', $token);
+ $this->assertEquals('test_id_token', $token['id_token']);
+ $this->assertTrue(isset($token['refresh_token']));
+ }
+
+ private function getTestServer()
+ {
+ $storage = Bootstrap::getInstance()->getMemoryStorage();
+ $server = new Server($storage, array('use_openid_connect' => true));
+ $server->addGrantType(new AuthorizationCode($storage));
+
+ return $server;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/ResponseType/CodeIdTokenTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/ResponseType/CodeIdTokenTest.php
new file mode 100644
index 0000000..7b892c9
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/ResponseType/CodeIdTokenTest.php
@@ -0,0 +1,183 @@
+<?php
+
+namespace OAuth2\OpenID\ResponseType;
+
+use OAuth2\Server;
+use OAuth2\Request;
+use OAuth2\Response;
+use OAuth2\Storage\Bootstrap;
+use OAuth2\GrantType\ClientCredentials;
+use PHPUnit\Framework\TestCase;
+
+class CodeIdTokenTest extends TestCase
+{
+ public function testHandleAuthorizeRequest()
+ {
+ // add the test parameters in memory
+ $server = $this->getTestServer();
+
+ $request = new Request(array(
+ 'response_type' => 'code id_token',
+ 'redirect_uri' => 'http://adobe.com',
+ 'client_id' => 'Test Client ID',
+ 'scope' => 'openid',
+ 'state' => 'test',
+ 'nonce' => 'test',
+ ));
+
+ $server->handleAuthorizeRequest($request, $response = new Response(), true);
+
+ $this->assertEquals($response->getStatusCode(), 302);
+ $location = $response->getHttpHeader('Location');
+ $this->assertNotContains('error', $location);
+
+ $parts = parse_url($location);
+ $this->assertArrayHasKey('query', $parts);
+
+ // assert fragment is in "application/x-www-form-urlencoded" format
+ parse_str($parts['query'], $params);
+ $this->assertNotNull($params);
+ $this->assertArrayHasKey('id_token', $params);
+ $this->assertArrayHasKey('code', $params);
+
+ // validate ID Token
+ $parts = explode('.', $params['id_token']);
+ foreach ($parts as &$part) {
+ // Each part is a base64url encoded json string.
+ $part = str_replace(array('-', '_'), array('+', '/'), $part);
+ $part = base64_decode($part);
+ $part = json_decode($part, true);
+ }
+ list($header, $claims, $signature) = $parts;
+
+ $this->assertArrayHasKey('iss', $claims);
+ $this->assertArrayHasKey('sub', $claims);
+ $this->assertArrayHasKey('aud', $claims);
+ $this->assertArrayHasKey('iat', $claims);
+ $this->assertArrayHasKey('exp', $claims);
+ $this->assertArrayHasKey('auth_time', $claims);
+ $this->assertArrayHasKey('nonce', $claims);
+
+ // only exists if an access token was granted along with the id_token
+ $this->assertArrayNotHasKey('at_hash', $claims);
+
+ $this->assertEquals($claims['iss'], 'test');
+ $this->assertEquals($claims['aud'], 'Test Client ID');
+ $this->assertEquals($claims['nonce'], 'test');
+ $duration = $claims['exp'] - $claims['iat'];
+ $this->assertEquals($duration, 3600);
+ }
+
+ public function testUserClaimsWithUserId()
+ {
+ // add the test parameters in memory
+ $server = $this->getTestServer();
+
+ $request = new Request(array(
+ 'response_type' => 'code id_token',
+ 'redirect_uri' => 'http://adobe.com',
+ 'client_id' => 'Test Client ID',
+ 'scope' => 'openid email',
+ 'state' => 'test',
+ 'nonce' => 'test',
+ ));
+
+ $userId = 'testuser';
+ $server->handleAuthorizeRequest($request, $response = new Response(), true, $userId);
+
+ $this->assertEquals($response->getStatusCode(), 302);
+ $location = $response->getHttpHeader('Location');
+ $this->assertNotContains('error', $location);
+
+ $parts = parse_url($location);
+ $this->assertArrayHasKey('query', $parts);
+
+ // assert fragment is in "application/x-www-form-urlencoded" format
+ parse_str($parts['query'], $params);
+ $this->assertNotNull($params);
+ $this->assertArrayHasKey('id_token', $params);
+ $this->assertArrayHasKey('code', $params);
+
+ // validate ID Token
+ $parts = explode('.', $params['id_token']);
+ foreach ($parts as &$part) {
+ // Each part is a base64url encoded json string.
+ $part = str_replace(array('-', '_'), array('+', '/'), $part);
+ $part = base64_decode($part);
+ $part = json_decode($part, true);
+ }
+ list($header, $claims, $signature) = $parts;
+
+ $this->assertArrayHasKey('email', $claims);
+ $this->assertArrayHasKey('email_verified', $claims);
+ $this->assertNotNull($claims['email']);
+ $this->assertNotNull($claims['email_verified']);
+ }
+
+ public function testUserClaimsWithoutUserId()
+ {
+ // add the test parameters in memory
+ $server = $this->getTestServer();
+
+ $request = new Request(array(
+ 'response_type' => 'code id_token',
+ 'redirect_uri' => 'http://adobe.com',
+ 'client_id' => 'Test Client ID',
+ 'scope' => 'openid email',
+ 'state' => 'test',
+ 'nonce' => 'test',
+ ));
+
+ $userId = null;
+ $server->handleAuthorizeRequest($request, $response = new Response(), true, $userId);
+
+ $this->assertEquals($response->getStatusCode(), 302);
+ $location = $response->getHttpHeader('Location');
+ $this->assertNotContains('error', $location);
+
+ $parts = parse_url($location);
+ $this->assertArrayHasKey('query', $parts);
+
+ // assert fragment is in "application/x-www-form-urlencoded" format
+ parse_str($parts['query'], $params);
+ $this->assertNotNull($params);
+ $this->assertArrayHasKey('id_token', $params);
+ $this->assertArrayHasKey('code', $params);
+
+ // validate ID Token
+ $parts = explode('.', $params['id_token']);
+ foreach ($parts as &$part) {
+ // Each part is a base64url encoded json string.
+ $part = str_replace(array('-', '_'), array('+', '/'), $part);
+ $part = base64_decode($part);
+ $part = json_decode($part, true);
+ }
+ list($header, $claims, $signature) = $parts;
+
+ $this->assertArrayNotHasKey('email', $claims);
+ $this->assertArrayNotHasKey('email_verified', $claims);
+ }
+
+ private function getTestServer($config = array())
+ {
+ $config += array(
+ 'use_openid_connect' => true,
+ 'issuer' => 'test',
+ 'id_lifetime' => 3600,
+ 'allow_implicit' => true,
+ );
+
+ $memoryStorage = Bootstrap::getInstance()->getMemoryStorage();
+ $memoryStorage->supportedScopes[] = 'email';
+ $responseTypes = array(
+ 'code' => $code = new AuthorizationCode($memoryStorage),
+ 'id_token' => $idToken = new IdToken($memoryStorage, $memoryStorage, $config),
+ 'code id_token' => new CodeIdToken($code, $idToken),
+ );
+
+ $server = new Server($memoryStorage, $config, array(), $responseTypes);
+ $server->addGrantType(new ClientCredentials($memoryStorage));
+
+ return $server;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/ResponseType/IdTokenTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/ResponseType/IdTokenTest.php
new file mode 100644
index 0000000..a0df3a9
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/ResponseType/IdTokenTest.php
@@ -0,0 +1,185 @@
+<?php
+
+namespace OAuth2\OpenID\ResponseType;
+
+use OAuth2\Server;
+use OAuth2\Request;
+use OAuth2\Response;
+use OAuth2\Storage\Bootstrap;
+use OAuth2\GrantType\ClientCredentials;
+use OAuth2\Encryption\Jwt;
+use PHPUnit\Framework\TestCase;
+
+class IdTokenTest extends TestCase
+{
+ public function testValidateAuthorizeRequest()
+ {
+ $query = array(
+ 'response_type' => 'id_token',
+ 'redirect_uri' => 'http://adobe.com',
+ 'client_id' => 'Test Client ID',
+ 'scope' => 'openid',
+ 'state' => 'test',
+ );
+
+ // attempt to do the request without a nonce.
+ $server = $this->getTestServer(array('allow_implicit' => true));
+ $request = new Request($query);
+ $valid = $server->validateAuthorizeRequest($request, $response = new Response());
+
+ // Add a nonce and retry.
+ $query['nonce'] = 'test';
+ $request = new Request($query);
+ $valid = $server->validateAuthorizeRequest($request, $response = new Response());
+ $this->assertTrue($valid);
+ }
+
+ public function testHandleAuthorizeRequest()
+ {
+ // add the test parameters in memory
+ $server = $this->getTestServer(array('allow_implicit' => true));
+ $request = new Request(array(
+ 'response_type' => 'id_token',
+ 'redirect_uri' => 'http://adobe.com',
+ 'client_id' => 'Test Client ID',
+ 'scope' => 'openid email',
+ 'state' => 'test',
+ 'nonce' => 'test',
+ ));
+
+ $user_id = 'testuser';
+ $server->handleAuthorizeRequest($request, $response = new Response(), true, $user_id);
+
+ $this->assertEquals($response->getStatusCode(), 302);
+ $location = $response->getHttpHeader('Location');
+ $this->assertNotContains('error', $location);
+
+ $parts = parse_url($location);
+ $this->assertArrayHasKey('fragment', $parts);
+ $this->assertFalse(isset($parts['query']));
+
+ // assert fragment is in "application/x-www-form-urlencoded" format
+ parse_str($parts['fragment'], $params);
+ $this->assertNotNull($params);
+ $this->assertArrayHasKey('id_token', $params);
+ $this->assertArrayNotHasKey('access_token', $params);
+ $this->validateIdToken($params['id_token']);
+ }
+
+ public function testPassInAuthTime()
+ {
+ $server = $this->getTestServer(array('allow_implicit' => true));
+ $request = new Request(array(
+ 'response_type' => 'id_token',
+ 'redirect_uri' => 'http://adobe.com',
+ 'client_id' => 'Test Client ID',
+ 'scope' => 'openid email',
+ 'state' => 'test',
+ 'nonce' => 'test',
+ ));
+
+ // test with a scalar user id
+ $user_id = 'testuser123';
+ $server->handleAuthorizeRequest($request, $response = new Response(), true, $user_id);
+
+ list($header, $payload, $signature) = $this->extractTokenDataFromResponse($response);
+
+ $this->assertTrue(is_array($payload));
+ $this->assertArrayHasKey('sub', $payload);
+ $this->assertEquals($user_id, $payload['sub']);
+ $this->assertArrayHasKey('auth_time', $payload);
+
+ // test with an array of user info
+ $userInfo = array(
+ 'user_id' => 'testuser1234',
+ 'auth_time' => date('Y-m-d H:i:s', strtotime('20 minutes ago')
+ ));
+
+ $server->handleAuthorizeRequest($request, $response = new Response(), true, $userInfo);
+
+ list($header, $payload, $signature) = $this->extractTokenDataFromResponse($response);
+
+ $this->assertTrue(is_array($payload));
+ $this->assertArrayHasKey('sub', $payload);
+ $this->assertEquals($userInfo['user_id'], $payload['sub']);
+ $this->assertArrayHasKey('auth_time', $payload);
+ $this->assertEquals($userInfo['auth_time'], $payload['auth_time']);
+ }
+
+ private function extractTokenDataFromResponse(Response $response)
+ {
+ $this->assertEquals($response->getStatusCode(), 302);
+ $location = $response->getHttpHeader('Location');
+ $this->assertNotContains('error', $location);
+
+ $parts = parse_url($location);
+ $this->assertArrayHasKey('fragment', $parts);
+ $this->assertFalse(isset($parts['query']));
+
+ parse_str($parts['fragment'], $params);
+ $this->assertNotNull($params);
+ $this->assertArrayHasKey('id_token', $params);
+ $this->assertArrayNotHasKey('access_token', $params);
+
+ list($headb64, $payloadb64, $signature) = explode('.', $params['id_token']);
+
+ $jwt = new Jwt();
+ $header = json_decode($jwt->urlSafeB64Decode($headb64), true);
+ $payload = json_decode($jwt->urlSafeB64Decode($payloadb64), true);
+
+ return array($header, $payload, $signature);
+ }
+
+ private function validateIdToken($id_token)
+ {
+ $parts = explode('.', $id_token);
+ foreach ($parts as &$part) {
+ // Each part is a base64url encoded json string.
+ $part = str_replace(array('-', '_'), array('+', '/'), $part);
+ $part = base64_decode($part);
+ $part = json_decode($part, true);
+ }
+ list($header, $claims, $signature) = $parts;
+
+ $this->assertArrayHasKey('iss', $claims);
+ $this->assertArrayHasKey('sub', $claims);
+ $this->assertArrayHasKey('aud', $claims);
+ $this->assertArrayHasKey('iat', $claims);
+ $this->assertArrayHasKey('exp', $claims);
+ $this->assertArrayHasKey('auth_time', $claims);
+ $this->assertArrayHasKey('nonce', $claims);
+ $this->assertArrayHasKey('email', $claims);
+ $this->assertArrayHasKey('email_verified', $claims);
+
+ $this->assertEquals($claims['iss'], 'test');
+ $this->assertEquals($claims['aud'], 'Test Client ID');
+ $this->assertEquals($claims['nonce'], 'test');
+ $this->assertEquals($claims['email'], 'testuser@test.com');
+ $duration = $claims['exp'] - $claims['iat'];
+ $this->assertEquals($duration, 3600);
+ }
+
+ private function getTestServer($config = array())
+ {
+ $config += array(
+ 'use_openid_connect' => true,
+ 'issuer' => 'test',
+ 'id_lifetime' => 3600,
+ );
+
+ $memoryStorage = Bootstrap::getInstance()->getMemoryStorage();
+ $memoryStorage->supportedScopes[] = 'email';
+ $storage = array(
+ 'client' => $memoryStorage,
+ 'scope' => $memoryStorage,
+ );
+ $responseTypes = array(
+ 'id_token' => new IdToken($memoryStorage, $memoryStorage, $config),
+ );
+
+ $server = new Server($storage, $config, array(), $responseTypes);
+ $server->addGrantType(new ClientCredentials($memoryStorage));
+
+ return $server;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/ResponseType/IdTokenTokenTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/ResponseType/IdTokenTokenTest.php
new file mode 100644
index 0000000..0573a98
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/ResponseType/IdTokenTokenTest.php
@@ -0,0 +1,92 @@
+<?php
+
+namespace OAuth2\OpenID\ResponseType;
+
+use OAuth2\Server;
+use OAuth2\Request;
+use OAuth2\Response;
+use OAuth2\Storage\Bootstrap;
+use OAuth2\GrantType\ClientCredentials;
+use OAuth2\ResponseType\AccessToken;
+use PHPUnit\Framework\TestCase;
+
+class IdTokenTokenTest extends TestCase
+{
+
+ public function testHandleAuthorizeRequest()
+ {
+ // add the test parameters in memory
+ $server = $this->getTestServer(array('allow_implicit' => true));
+
+ $request = new Request(array(
+ 'response_type' => 'id_token token',
+ 'redirect_uri' => 'http://adobe.com',
+ 'client_id' => 'Test Client ID',
+ 'scope' => 'openid',
+ 'state' => 'test',
+ 'nonce' => 'test',
+ ));
+
+ $server->handleAuthorizeRequest($request, $response = new Response(), true);
+
+ $this->assertEquals($response->getStatusCode(), 302);
+ $location = $response->getHttpHeader('Location');
+ $this->assertNotContains('error', $location);
+
+ $parts = parse_url($location);
+ $this->assertArrayHasKey('fragment', $parts);
+ $this->assertFalse(isset($parts['query']));
+
+ // assert fragment is in "application/x-www-form-urlencoded" format
+ parse_str($parts['fragment'], $params);
+ $this->assertNotNull($params);
+ $this->assertArrayHasKey('id_token', $params);
+ $this->assertArrayHasKey('access_token', $params);
+
+ // validate ID Token
+ $parts = explode('.', $params['id_token']);
+ foreach ($parts as &$part) {
+ // Each part is a base64url encoded json string.
+ $part = str_replace(array('-', '_'), array('+', '/'), $part);
+ $part = base64_decode($part);
+ $part = json_decode($part, true);
+ }
+ list($header, $claims, $signature) = $parts;
+
+ $this->assertArrayHasKey('iss', $claims);
+ $this->assertArrayHasKey('sub', $claims);
+ $this->assertArrayHasKey('aud', $claims);
+ $this->assertArrayHasKey('iat', $claims);
+ $this->assertArrayHasKey('exp', $claims);
+ $this->assertArrayHasKey('auth_time', $claims);
+ $this->assertArrayHasKey('nonce', $claims);
+ $this->assertArrayHasKey('at_hash', $claims);
+
+ $this->assertEquals($claims['iss'], 'test');
+ $this->assertEquals($claims['aud'], 'Test Client ID');
+ $this->assertEquals($claims['nonce'], 'test');
+ $duration = $claims['exp'] - $claims['iat'];
+ $this->assertEquals($duration, 3600);
+ }
+
+ private function getTestServer($config = array())
+ {
+ $config += array(
+ 'use_openid_connect' => true,
+ 'issuer' => 'test',
+ 'id_lifetime' => 3600,
+ );
+
+ $memoryStorage = Bootstrap::getInstance()->getMemoryStorage();
+ $responseTypes = array(
+ 'token' => $token = new AccessToken($memoryStorage, $memoryStorage),
+ 'id_token' => $idToken = new IdToken($memoryStorage, $memoryStorage, $config),
+ 'id_token token' => new IdTokenToken($token, $idToken),
+ );
+
+ $server = new Server($memoryStorage, $config, array(), $responseTypes);
+ $server->addGrantType(new ClientCredentials($memoryStorage));
+
+ return $server;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/Storage/AuthorizationCodeTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/Storage/AuthorizationCodeTest.php
new file mode 100644
index 0000000..bdfb085
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/Storage/AuthorizationCodeTest.php
@@ -0,0 +1,95 @@
+<?php
+
+namespace OAuth2\OpenID\Storage;
+
+use OAuth2\Storage\BaseTest;
+use OAuth2\Storage\NullStorage;
+
+class AuthorizationCodeTest extends BaseTest
+{
+ /** @dataProvider provideStorage */
+ public function testCreateAuthorizationCode($storage)
+ {
+ if ($storage instanceof NullStorage) {
+ $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());
+
+ return;
+ }
+
+ if (!$storage instanceof AuthorizationCodeInterface) {
+ return;
+ }
+
+ // assert code we are about to add does not exist
+ $code = $storage->getAuthorizationCode('new-openid-code');
+ $this->assertFalse($code);
+
+ // add new code
+ $expires = time() + 20;
+ $scope = null;
+ $id_token = 'fake_id_token';
+ $success = $storage->setAuthorizationCode('new-openid-code', 'client ID', 'SOMEUSERID', 'http://example.com', $expires, $scope, $id_token);
+ $this->assertTrue($success);
+
+ $code = $storage->getAuthorizationCode('new-openid-code');
+ $this->assertNotNull($code);
+ $this->assertArrayHasKey('authorization_code', $code);
+ $this->assertArrayHasKey('client_id', $code);
+ $this->assertArrayHasKey('user_id', $code);
+ $this->assertArrayHasKey('redirect_uri', $code);
+ $this->assertArrayHasKey('expires', $code);
+ $this->assertEquals($code['authorization_code'], 'new-openid-code');
+ $this->assertEquals($code['client_id'], 'client ID');
+ $this->assertEquals($code['user_id'], 'SOMEUSERID');
+ $this->assertEquals($code['redirect_uri'], 'http://example.com');
+ $this->assertEquals($code['expires'], $expires);
+ $this->assertEquals($code['id_token'], $id_token);
+
+ // change existing code
+ $expires = time() + 42;
+ $new_id_token = 'fake_id_token-2';
+ $success = $storage->setAuthorizationCode('new-openid-code', 'client ID2', 'SOMEOTHERID', 'http://example.org', $expires, $scope, $new_id_token);
+ $this->assertTrue($success);
+
+ $code = $storage->getAuthorizationCode('new-openid-code');
+ $this->assertNotNull($code);
+ $this->assertArrayHasKey('authorization_code', $code);
+ $this->assertArrayHasKey('client_id', $code);
+ $this->assertArrayHasKey('user_id', $code);
+ $this->assertArrayHasKey('redirect_uri', $code);
+ $this->assertArrayHasKey('expires', $code);
+ $this->assertEquals($code['authorization_code'], 'new-openid-code');
+ $this->assertEquals($code['client_id'], 'client ID2');
+ $this->assertEquals($code['user_id'], 'SOMEOTHERID');
+ $this->assertEquals($code['redirect_uri'], 'http://example.org');
+ $this->assertEquals($code['expires'], $expires);
+ $this->assertEquals($code['id_token'], $new_id_token);
+ }
+
+ /** @dataProvider provideStorage */
+ public function testRemoveIdTokenFromAuthorizationCode($storage)
+ {
+ // add new code
+ $expires = time() + 20;
+ $scope = null;
+ $id_token = 'fake_id_token_to_remove';
+ $authcode = 'new-openid-code-'.rand();
+ $success = $storage->setAuthorizationCode($authcode, 'client ID', 'SOMEUSERID', 'http://example.com', $expires, $scope, $id_token);
+ $this->assertTrue($success);
+
+ // verify params were set
+ $code = $storage->getAuthorizationCode($authcode);
+ $this->assertNotNull($code);
+ $this->assertArrayHasKey('id_token', $code);
+ $this->assertEquals($code['id_token'], $id_token);
+
+ // remove the id_token
+ $success = $storage->setAuthorizationCode($authcode, 'client ID', 'SOMEUSERID', 'http://example.com', $expires, $scope, null);
+
+ // verify the "id_token" is now null
+ $code = $storage->getAuthorizationCode($authcode);
+ $this->assertNotNull($code);
+ $this->assertArrayHasKey('id_token', $code);
+ $this->assertEquals($code['id_token'], null);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/Storage/UserClaimsTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/Storage/UserClaimsTest.php
new file mode 100644
index 0000000..840f6c5
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/Storage/UserClaimsTest.php
@@ -0,0 +1,41 @@
+<?php
+
+namespace OAuth2\OpenID\Storage;
+
+use OAuth2\Storage\BaseTest;
+use OAuth2\Storage\NullStorage;
+
+class UserClaimsTest extends BaseTest
+{
+ /** @dataProvider provideStorage */
+ public function testGetUserClaims($storage)
+ {
+ if ($storage instanceof NullStorage) {
+ $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());
+
+ return;
+ }
+
+ if (!$storage instanceof UserClaimsInterface) {
+ // incompatible storage
+ return;
+ }
+
+ // invalid user
+ $claims = $storage->getUserClaims('fake-user', '');
+ $this->assertFalse($claims);
+
+ // valid user (no scope)
+ $claims = $storage->getUserClaims('testuser', '');
+
+ /* assert the decoded token is the same */
+ $this->assertFalse(isset($claims['email']));
+
+ // valid user
+ $claims = $storage->getUserClaims('testuser', 'email');
+
+ /* assert the decoded token is the same */
+ $this->assertEquals($claims['email'], "testuser@test.com");
+ $this->assertEquals($claims['email_verified'], true);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/RequestTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/RequestTest.php
new file mode 100644
index 0000000..770cd89
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/RequestTest.php
@@ -0,0 +1,117 @@
+<?php
+
+namespace OAuth2;
+
+use OAuth2\Request\TestRequest;
+use OAuth2\Storage\Bootstrap;
+use OAuth2\GrantType\AuthorizationCode;
+use PHPUnit\Framework\TestCase;
+
+class RequestTest extends TestCase
+{
+ public function testRequestOverride()
+ {
+ $request = new TestRequest();
+ $server = $this->getTestServer();
+
+ // Smoke test for override request class
+ // $server->handleTokenRequest($request, $response = new Response());
+ // $this->assertInstanceOf('Response', $response);
+ // $server->handleAuthorizeRequest($request, $response = new Response(), true);
+ // $this->assertInstanceOf('Response', $response);
+ // $response = $server->verifyResourceRequest($request, $response = new Response());
+ // $this->assertTrue(is_bool($response));
+
+ /*** make some valid requests ***/
+
+ // Valid Token Request
+ $request->setPost(array(
+ 'grant_type' => 'authorization_code',
+ 'client_id' => 'Test Client ID',
+ 'client_secret' => 'TestSecret',
+ 'code' => 'testcode',
+ ));
+ $server->handleTokenRequest($request, $response = new Response());
+ $this->assertEquals($response->getStatusCode(), 200);
+ $this->assertNull($response->getParameter('error'));
+ $this->assertNotNUll($response->getParameter('access_token'));
+ }
+
+ public function testHeadersReturnsValueByKey()
+ {
+ $request = new Request(
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array('AUTHORIZATION' => 'Basic secret')
+ );
+
+ $this->assertEquals('Basic secret', $request->headers('AUTHORIZATION'));
+ }
+
+ public function testHeadersReturnsDefaultIfHeaderNotPresent()
+ {
+ $request = new Request();
+
+ $this->assertEquals('Bearer', $request->headers('AUTHORIZATION', 'Bearer'));
+ }
+
+ public function testHeadersIsCaseInsensitive()
+ {
+ $request = new Request(
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array('AUTHORIZATION' => 'Basic secret')
+ );
+
+ $this->assertEquals('Basic secret', $request->headers('Authorization'));
+ }
+
+ public function testRequestReturnsPostParamIfNoQueryParamAvailable()
+ {
+ $request = new Request(
+ array(),
+ array('client_id' => 'correct')
+ );
+
+ $this->assertEquals('correct', $request->query('client_id', $request->request('client_id')));
+ }
+
+ public function testRequestHasHeadersAndServerHeaders()
+ {
+ $request = new Request(
+ array(),
+ array(),
+ array(),
+ array(),
+ array(),
+ array('CONTENT_TYPE' => 'text/xml', 'PHP_AUTH_USER' => 'client_id', 'PHP_AUTH_PW' => 'client_pass'),
+ null,
+ array('CONTENT_TYPE' => 'application/json')
+ );
+
+ $this->assertSame('client_id', $request->headers('PHP_AUTH_USER'));
+ $this->assertSame('client_pass', $request->headers('PHP_AUTH_PW'));
+ $this->assertSame('application/json', $request->headers('CONTENT_TYPE'));
+ }
+
+ private function getTestServer($config = array())
+ {
+ $storage = Bootstrap::getInstance()->getMemoryStorage();
+ $server = new Server($storage, $config);
+
+ // Add the two types supported for authorization grant
+ $server->addGrantType(new AuthorizationCode($storage));
+
+ return $server;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/ResponseTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/ResponseTest.php
new file mode 100644
index 0000000..172bc88
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/ResponseTest.php
@@ -0,0 +1,38 @@
+<?php
+
+namespace OAuth2;
+
+use PHPUnit\Framework\TestCase;
+
+class ResponseTest extends TestCase
+{
+ public function testRenderAsXml()
+ {
+ $response = new Response(array(
+ 'foo' => 'bar',
+ 'halland' => 'oates',
+ ));
+
+ $string = $response->getResponseBody('xml');
+ $this->assertContains('<response><foo>bar</foo><halland>oates</halland></response>', $string);
+ }
+
+ public function testSetRedirect()
+ {
+ $response = new Response();
+ $url = 'https://foo/bar';
+ $state = 'stateparam';
+ $response->setRedirect(301, $url, $state);
+ $this->assertEquals(
+ sprintf('%s?state=%s', $url, $state),
+ $response->getHttpHeader('Location')
+ );
+
+ $query = 'query=foo';
+ $response->setRedirect(301, $url . '?' . $query, $state);
+ $this->assertEquals(
+ sprintf('%s?%s&state=%s', $url, $query, $state),
+ $response->getHttpHeader('Location')
+ );
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/ResponseType/AccessTokenTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/ResponseType/AccessTokenTest.php
new file mode 100644
index 0000000..43b0225
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/ResponseType/AccessTokenTest.php
@@ -0,0 +1,108 @@
+<?php
+
+namespace OAuth2\ResponseType;
+
+use OAuth2\Server;
+use OAuth2\Storage\Memory;
+use PHPUnit\Framework\TestCase;
+
+class AccessTokenTest extends TestCase
+{
+ public function testRevokeAccessTokenWithTypeHint()
+ {
+ $tokenStorage = new Memory(array(
+ 'access_tokens' => array(
+ 'revoke' => array('mytoken'),
+ ),
+ ));
+
+ $this->assertEquals(array('mytoken'), $tokenStorage->getAccessToken('revoke'));
+ $accessToken = new AccessToken($tokenStorage);
+ $accessToken->revokeToken('revoke', 'access_token');
+ $this->assertFalse($tokenStorage->getAccessToken('revoke'));
+ }
+
+ public function testRevokeAccessTokenWithoutTypeHint()
+ {
+ $tokenStorage = new Memory(array(
+ 'access_tokens' => array(
+ 'revoke' => array('mytoken'),
+ ),
+ ));
+
+ $this->assertEquals(array('mytoken'), $tokenStorage->getAccessToken('revoke'));
+ $accessToken = new AccessToken($tokenStorage);
+ $accessToken->revokeToken('revoke');
+ $this->assertFalse($tokenStorage->getAccessToken('revoke'));
+ }
+
+ public function testRevokeRefreshTokenWithTypeHint()
+ {
+ $tokenStorage = new Memory(array(
+ 'refresh_tokens' => array(
+ 'revoke' => array('mytoken'),
+ ),
+ ));
+
+ $this->assertEquals(array('mytoken'), $tokenStorage->getRefreshToken('revoke'));
+ $accessToken = new AccessToken(new Memory, $tokenStorage);
+ $accessToken->revokeToken('revoke', 'refresh_token');
+ $this->assertFalse($tokenStorage->getRefreshToken('revoke'));
+ }
+
+ public function testRevokeRefreshTokenWithoutTypeHint()
+ {
+ $tokenStorage = new Memory(array(
+ 'refresh_tokens' => array(
+ 'revoke' => array('mytoken'),
+ ),
+ ));
+
+ $this->assertEquals(array('mytoken'), $tokenStorage->getRefreshToken('revoke'));
+ $accessToken = new AccessToken(new Memory, $tokenStorage);
+ $accessToken->revokeToken('revoke');
+ $this->assertFalse($tokenStorage->getRefreshToken('revoke'));
+ }
+
+ public function testRevokeAccessTokenWithRefreshTokenTypeHint()
+ {
+ $tokenStorage = new Memory(array(
+ 'access_tokens' => array(
+ 'revoke' => array('mytoken'),
+ ),
+ ));
+
+ $this->assertEquals(array('mytoken'), $tokenStorage->getAccessToken('revoke'));
+ $accessToken = new AccessToken($tokenStorage);
+ $accessToken->revokeToken('revoke', 'refresh_token');
+ $this->assertFalse($tokenStorage->getAccessToken('revoke'));
+ }
+
+ public function testRevokeAccessTokenWithBogusTypeHint()
+ {
+ $tokenStorage = new Memory(array(
+ 'access_tokens' => array(
+ 'revoke' => array('mytoken'),
+ ),
+ ));
+
+ $this->assertEquals(array('mytoken'), $tokenStorage->getAccessToken('revoke'));
+ $accessToken = new AccessToken($tokenStorage);
+ $accessToken->revokeToken('revoke', 'foo');
+ $this->assertFalse($tokenStorage->getAccessToken('revoke'));
+ }
+
+ public function testRevokeRefreshTokenWithBogusTypeHint()
+ {
+ $tokenStorage = new Memory(array(
+ 'refresh_tokens' => array(
+ 'revoke' => array('mytoken'),
+ ),
+ ));
+
+ $this->assertEquals(array('mytoken'), $tokenStorage->getRefreshToken('revoke'));
+ $accessToken = new AccessToken(new Memory, $tokenStorage);
+ $accessToken->revokeToken('revoke', 'foo');
+ $this->assertFalse($tokenStorage->getRefreshToken('revoke'));
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/ResponseType/JwtAccessTokenTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/ResponseType/JwtAccessTokenTest.php
new file mode 100644
index 0000000..6195d55
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/ResponseType/JwtAccessTokenTest.php
@@ -0,0 +1,178 @@
+<?php
+
+namespace OAuth2\ResponseType;
+
+use OAuth2\Server;
+use OAuth2\Response;
+use OAuth2\Request\TestRequest;
+use OAuth2\Storage\Bootstrap;
+use OAuth2\Storage\JwtAccessToken as JwtAccessTokenStorage;
+use OAuth2\GrantType\ClientCredentials;
+use OAuth2\GrantType\UserCredentials;
+use OAuth2\GrantType\RefreshToken;
+use OAuth2\Encryption\Jwt;
+use PHPUnit\Framework\TestCase;
+
+class JwtAccessTokenTest extends TestCase
+{
+ public function testCreateAccessToken()
+ {
+ $server = $this->getTestServer();
+ $jwtResponseType = $server->getResponseType('token');
+
+ $accessToken = $jwtResponseType->createAccessToken('Test Client ID', 123, 'test', false);
+ $jwt = new Jwt;
+ $decodedAccessToken = $jwt->decode($accessToken['access_token'], null, false);
+
+ $this->assertArrayHasKey('id', $decodedAccessToken);
+ $this->assertArrayHasKey('jti', $decodedAccessToken);
+ $this->assertArrayHasKey('iss', $decodedAccessToken);
+ $this->assertArrayHasKey('aud', $decodedAccessToken);
+ $this->assertArrayHasKey('exp', $decodedAccessToken);
+ $this->assertArrayHasKey('iat', $decodedAccessToken);
+ $this->assertArrayHasKey('token_type', $decodedAccessToken);
+ $this->assertArrayHasKey('scope', $decodedAccessToken);
+
+ $this->assertEquals('https://api.example.com', $decodedAccessToken['iss']);
+ $this->assertEquals('Test Client ID', $decodedAccessToken['aud']);
+ $this->assertEquals(123, $decodedAccessToken['sub']);
+ $delta = $decodedAccessToken['exp'] - $decodedAccessToken['iat'];
+ $this->assertEquals(3600, $delta);
+ $this->assertEquals($decodedAccessToken['id'], $decodedAccessToken['jti']);
+ }
+
+ public function testExtraPayloadCallback()
+ {
+ $jwtconfig = array('jwt_extra_payload_callable' => function() {
+ return array('custom_param' => 'custom_value');
+ });
+
+ $server = $this->getTestServer($jwtconfig);
+ $jwtResponseType = $server->getResponseType('token');
+
+ $accessToken = $jwtResponseType->createAccessToken('Test Client ID', 123, 'test', false);
+ $jwt = new Jwt;
+ $decodedAccessToken = $jwt->decode($accessToken['access_token'], null, false);
+
+ $this->assertArrayHasKey('custom_param', $decodedAccessToken);
+ $this->assertEquals('custom_value', $decodedAccessToken['custom_param']);
+ }
+
+ public function testGrantJwtAccessToken()
+ {
+ // add the test parameters in memory
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'client_credentials', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ ));
+ $server->handleTokenRequest($request, $response = new Response());
+
+ $this->assertNotNull($response->getParameter('access_token'));
+ $this->assertEquals(2, substr_count($response->getParameter('access_token'), '.'));
+ }
+
+ public function testAccessResourceWithJwtAccessToken()
+ {
+ // add the test parameters in memory
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'client_credentials', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ ));
+ $server->handleTokenRequest($request, $response = new Response());
+ $this->assertNotNull($JwtAccessToken = $response->getParameter('access_token'));
+
+ // make a call to the resource server using the crypto token
+ $request = TestRequest::createPost(array(
+ 'access_token' => $JwtAccessToken,
+ ));
+
+ $this->assertTrue($server->verifyResourceRequest($request));
+ }
+
+ public function testAccessResourceWithJwtAccessTokenUsingSecondaryStorage()
+ {
+ // add the test parameters in memory
+ $server = $this->getTestServer();
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'client_credentials', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ ));
+ $server->handleTokenRequest($request, $response = new Response());
+ $this->assertNotNull($JwtAccessToken = $response->getParameter('access_token'));
+
+ // make a call to the resource server using the crypto token
+ $request = TestRequest::createPost(array(
+ 'access_token' => $JwtAccessToken,
+ ));
+
+ // create a resource server with the "memory" storage from the grant server
+ $resourceServer = new Server($server->getStorage('client_credentials'));
+
+ $this->assertTrue($resourceServer->verifyResourceRequest($request));
+ }
+
+ public function testJwtAccessTokenWithRefreshToken()
+ {
+ $server = $this->getTestServer();
+
+ // add "UserCredentials" grant type and "JwtAccessToken" response type
+ // and ensure "JwtAccessToken" response type has "RefreshToken" storage
+ $memoryStorage = Bootstrap::getInstance()->getMemoryStorage();
+ $server->addGrantType(new UserCredentials($memoryStorage));
+ $server->addGrantType(new RefreshToken($memoryStorage));
+ $server->addResponseType(new JwtAccessToken($memoryStorage, $memoryStorage, $memoryStorage), 'token');
+
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'password', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'username' => 'test-username', // valid username
+ 'password' => 'testpass', // valid password
+ ));
+
+ // make the call to grant a crypto token
+ $server->handleTokenRequest($request, $response = new Response());
+ $this->assertNotNull($JwtAccessToken = $response->getParameter('access_token'));
+ $this->assertNotNull($refreshToken = $response->getParameter('refresh_token'));
+
+ // decode token and make sure refresh_token isn't set
+ list($header, $payload, $signature) = explode('.', $JwtAccessToken);
+ $decodedToken = json_decode(base64_decode($payload), true);
+ $this->assertFalse(array_key_exists('refresh_token', $decodedToken));
+
+ // use the refresh token to get another access token
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'refresh_token',
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'refresh_token' => $refreshToken,
+ ));
+
+ $server->handleTokenRequest($request, $response = new Response());
+ $this->assertNotNull($response->getParameter('access_token'));
+ }
+
+ private function getTestServer($jwtconfig = array())
+ {
+ $memoryStorage = Bootstrap::getInstance()->getMemoryStorage();
+
+ $storage = array(
+ 'access_token' => new JwtAccessTokenStorage($memoryStorage),
+ 'client' => $memoryStorage,
+ 'client_credentials' => $memoryStorage,
+ );
+ $server = new Server($storage);
+ $server->addGrantType(new ClientCredentials($memoryStorage));
+
+ // make the "token" response type a JwtAccessToken
+ $config = array_merge(array('issuer' => 'https://api.example.com'), $jwtconfig);
+ $server->addResponseType(new JwtAccessToken($memoryStorage, $memoryStorage, null, $config));
+
+ return $server;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/ScopeTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/ScopeTest.php
new file mode 100644
index 0000000..5b51be1
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/ScopeTest.php
@@ -0,0 +1,43 @@
+<?php
+
+namespace OAuth2;
+
+use OAuth2\Storage\Memory;
+use PHPUnit\Framework\TestCase;
+
+class ScopeTest extends TestCase
+{
+ public function testCheckScope()
+ {
+ $scopeUtil = new Scope();
+
+ $this->assertFalse($scopeUtil->checkScope('invalid', 'list of scopes'));
+ $this->assertTrue($scopeUtil->checkScope('valid', 'valid and-some other-scopes'));
+ $this->assertTrue($scopeUtil->checkScope('valid another-valid', 'valid another-valid and-some other-scopes'));
+ // all scopes must match
+ $this->assertFalse($scopeUtil->checkScope('valid invalid', 'valid and-some other-scopes'));
+ $this->assertFalse($scopeUtil->checkScope('valid valid2 invalid', 'valid valid2 and-some other-scopes'));
+ }
+
+ public function testScopeStorage()
+ {
+ $scopeUtil = new Scope();
+ $this->assertEquals($scopeUtil->getDefaultScope(), null);
+
+ $scopeUtil = new Scope(array(
+ 'default_scope' => 'default',
+ 'supported_scopes' => array('this', 'that', 'another'),
+ ));
+ $this->assertEquals($scopeUtil->getDefaultScope(), 'default');
+ $this->assertTrue($scopeUtil->scopeExists('this that another', 'client_id'));
+
+ $memoryStorage = new Memory(array(
+ 'default_scope' => 'base',
+ 'supported_scopes' => array('only-this-one'),
+ ));
+ $scopeUtil = new Scope($memoryStorage);
+
+ $this->assertEquals($scopeUtil->getDefaultScope(), 'base');
+ $this->assertTrue($scopeUtil->scopeExists('only-this-one', 'client_id'));
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/ServerTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/ServerTest.php
new file mode 100644
index 0000000..3106961
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/ServerTest.php
@@ -0,0 +1,685 @@
+<?php
+
+namespace OAuth2;
+
+use OAuth2\Request\TestRequest;
+use OAuth2\ResponseType\AuthorizationCode;
+use OAuth2\Storage\Bootstrap;
+use PHPUnit\Framework\TestCase;
+
+class ServerTest extends TestCase
+{
+ /**
+ * @expectedException LogicException OAuth2\Storage\ClientInterface
+ **/
+ public function testGetAuthorizeControllerWithNoClientStorageThrowsException()
+ {
+ // must set Client Storage
+ $server = new Server();
+ $server->getAuthorizeController();
+ }
+
+ /**
+ * @expectedException LogicException OAuth2\Storage\AccessTokenInterface
+ **/
+ public function testGetAuthorizeControllerWithNoAccessTokenStorageThrowsException()
+ {
+ // must set AccessToken or AuthorizationCode
+ $server = new Server();
+ $server->addStorage($this->getMock('OAuth2\Storage\ClientInterface'));
+ $server->getAuthorizeController();
+ }
+
+ public function testGetAuthorizeControllerWithClientStorageAndAccessTokenResponseType()
+ {
+ // must set AccessToken or AuthorizationCode
+ $server = new Server();
+ $server->addStorage($this->getMock('OAuth2\Storage\ClientInterface'));
+ $server->addResponseType($this->getMock('OAuth2\ResponseType\AccessTokenInterface'));
+
+ $this->assertNotNull($server->getAuthorizeController());
+ }
+
+ public function testGetAuthorizeControllerWithClientStorageAndAuthorizationCodeResponseType()
+ {
+ // must set AccessToken or AuthorizationCode
+ $server = new Server();
+ $server->addStorage($this->getMock('OAuth2\Storage\ClientInterface'));
+ $server->addResponseType($this->getMock('OAuth2\ResponseType\AuthorizationCodeInterface'));
+
+ $this->assertNotNull($server->getAuthorizeController());
+ }
+
+ /**
+ * @expectedException LogicException allow_implicit
+ **/
+ public function testGetAuthorizeControllerWithClientStorageAndAccessTokenStorageThrowsException()
+ {
+ // must set AuthorizationCode or AccessToken / implicit
+ $server = new Server();
+ $server->addStorage($this->getMock('OAuth2\Storage\ClientInterface'));
+ $server->addStorage($this->getMock('OAuth2\Storage\AccessTokenInterface'));
+
+ $this->assertNotNull($server->getAuthorizeController());
+ }
+
+ public function testGetAuthorizeControllerWithClientStorageAndAccessTokenStorage()
+ {
+ // must set AuthorizationCode or AccessToken / implicit
+ $server = new Server(array(), array('allow_implicit' => true));
+ $server->addStorage($this->getMock('OAuth2\Storage\ClientInterface'));
+ $server->addStorage($this->getMock('OAuth2\Storage\AccessTokenInterface'));
+
+ $this->assertNotNull($server->getAuthorizeController());
+ }
+
+ public function testGetAuthorizeControllerWithClientStorageAndAuthorizationCodeStorage()
+ {
+ // must set AccessToken or AuthorizationCode
+ $server = new Server();
+ $server->addStorage($this->getMock('OAuth2\Storage\ClientInterface'));
+ $server->addStorage($this->getMock('OAuth2\Storage\AuthorizationCodeInterface'));
+
+ $this->assertNotNull($server->getAuthorizeController());
+ }
+
+ /**
+ * @expectedException LogicException grant_types
+ **/
+ public function testGetTokenControllerWithGrantTypeStorageThrowsException()
+ {
+ $server = new Server();
+ $server->getTokenController();
+ }
+
+ /**
+ * @expectedException LogicException OAuth2\Storage\ClientCredentialsInterface
+ **/
+ public function testGetTokenControllerWithNoClientCredentialsStorageThrowsException()
+ {
+ $server = new Server();
+ $server->addStorage($this->getMock('OAuth2\Storage\UserCredentialsInterface'));
+ $server->getTokenController();
+ }
+
+ /**
+ * @expectedException LogicException OAuth2\Storage\AccessTokenInterface
+ **/
+ public function testGetTokenControllerWithNoAccessTokenStorageThrowsException()
+ {
+ $server = new Server();
+ $server->addStorage($this->getMock('OAuth2\Storage\ClientCredentialsInterface'));
+ $server->getTokenController();
+ }
+
+ public function testGetTokenControllerWithAccessTokenAndClientCredentialsStorage()
+ {
+ $server = new Server();
+ $server->addStorage($this->getMock('OAuth2\Storage\AccessTokenInterface'));
+ $server->addStorage($this->getMock('OAuth2\Storage\ClientCredentialsInterface'));
+ $server->getTokenController();
+ }
+
+ public function testGetTokenControllerAccessTokenStorageAndClientCredentialsStorageAndGrantTypes()
+ {
+ $server = new Server();
+ $server->addStorage($this->getMock('OAuth2\Storage\AccessTokenInterface'));
+ $server->addStorage($this->getMock('OAuth2\Storage\ClientCredentialsInterface'));
+ $server->addGrantType($this->getMockBuilder('OAuth2\GrantType\AuthorizationCode')->disableOriginalConstructor()->getMock());
+ $server->getTokenController();
+ }
+
+ /**
+ * @expectedException LogicException OAuth2\Storage\AccessTokenInterface
+ **/
+ public function testGetResourceControllerWithNoAccessTokenStorageThrowsException()
+ {
+ $server = new Server();
+ $server->getResourceController();
+ }
+
+ public function testGetResourceControllerWithAccessTokenStorage()
+ {
+ $server = new Server();
+ $server->addStorage($this->getMock('OAuth2\Storage\AccessTokenInterface'));
+ $server->getResourceController();
+ }
+
+ /**
+ * @expectedException InvalidArgumentException OAuth2\Storage\AccessTokenInterface
+ **/
+ public function testAddingStorageWithInvalidClass()
+ {
+ $server = new Server();
+ $server->addStorage(new \StdClass());
+ }
+
+ /**
+ * @expectedException InvalidArgumentException access_token
+ **/
+ public function testAddingStorageWithInvalidKey()
+ {
+ $server = new Server();
+ $server->addStorage($this->getMock('OAuth2\Storage\AccessTokenInterface'), 'nonexistant_storage');
+ }
+
+ /**
+ * @expectedException InvalidArgumentException OAuth2\Storage\AuthorizationCodeInterface
+ **/
+ public function testAddingStorageWithInvalidKeyStorageCombination()
+ {
+ $server = new Server();
+ $server->addStorage($this->getMock('OAuth2\Storage\AccessTokenInterface'), 'authorization_code');
+ }
+
+ public function testAddingStorageWithValidKeyOnlySetsThatKey()
+ {
+ $server = new Server();
+ $server->addStorage($this->getMock('OAuth2\Storage\Memory'), 'access_token');
+
+ $reflection = new \ReflectionClass($server);
+ $prop = $reflection->getProperty('storages');
+ $prop->setAccessible(true);
+
+ $storages = $prop->getValue($server); // get the private "storages" property
+
+ $this->assertEquals(1, count($storages));
+ $this->assertTrue(isset($storages['access_token']));
+ $this->assertFalse(isset($storages['authorization_code']));
+ }
+
+ public function testAddingClientStorageSetsClientCredentialsStorageByDefault()
+ {
+ $server = new Server();
+ $memory = $this->getMock('OAuth2\Storage\Memory');
+ $server->addStorage($memory, 'client');
+
+ $client_credentials = $server->getStorage('client_credentials');
+
+ $this->assertNotNull($client_credentials);
+ $this->assertEquals($client_credentials, $memory);
+ }
+
+ public function testAddStorageWithNullValue()
+ {
+ $memory = $this->getMock('OAuth2\Storage\Memory');
+ $server = new Server($memory);
+ $server->addStorage(null, 'refresh_token');
+
+ $client_credentials = $server->getStorage('client_credentials');
+
+ $this->assertNotNull($client_credentials);
+ $this->assertEquals($client_credentials, $memory);
+
+ $refresh_token = $server->getStorage('refresh_token');
+
+ $this->assertNull($refresh_token);
+ }
+
+ public function testNewServerWithNullStorageValue()
+ {
+ $memory = $this->getMock('OAuth2\Storage\Memory');
+ $server = new Server(array(
+ 'client_credentials' => $memory,
+ 'refresh_token' => null,
+ ));
+
+ $client_credentials = $server->getStorage('client_credentials');
+
+ $this->assertNotNull($client_credentials);
+ $this->assertEquals($client_credentials, $memory);
+
+ $refresh_token = $server->getStorage('refresh_token');
+
+ $this->assertNull($refresh_token);
+ }
+
+ public function testAddingClientCredentialsStorageSetsClientStorageByDefault()
+ {
+ $server = new Server();
+ $memory = $this->getMock('OAuth2\Storage\Memory');
+ $server->addStorage($memory, 'client_credentials');
+
+ $client = $server->getStorage('client');
+
+ $this->assertNotNull($client);
+ $this->assertEquals($client, $memory);
+ }
+
+ public function testSettingClientStorageByDefaultDoesNotOverrideSetStorage()
+ {
+ $server = new Server();
+ $pdo = $this->getMockBuilder('OAuth2\Storage\Pdo')
+ ->disableOriginalConstructor()->getMock();
+
+ $memory = $this->getMock('OAuth2\Storage\Memory');
+
+ $server->addStorage($pdo, 'client');
+ $server->addStorage($memory, 'client_credentials');
+
+ $client = $server->getStorage('client');
+ $client_credentials = $server->getStorage('client_credentials');
+
+ $this->assertEquals($client, $pdo);
+ $this->assertEquals($client_credentials, $memory);
+ }
+
+ public function testAddingResponseType()
+ {
+ $storage = $this->getMock('OAuth2\Storage\Memory');
+ $storage
+ ->expects($this->any())
+ ->method('getClientDetails')
+ ->will($this->returnValue(array('client_id' => 'some_client')));
+ $storage
+ ->expects($this->any())
+ ->method('checkRestrictedGrantType')
+ ->will($this->returnValue(true));
+
+ // add with the "code" key explicitly set
+ $codeType = new AuthorizationCode($storage);
+ $server = new Server();
+ $server->addStorage($storage);
+ $server->addResponseType($codeType);
+ $request = new Request(array(
+ 'response_type' => 'code',
+ 'client_id' => 'some_client',
+ 'redirect_uri' => 'http://example.com',
+ 'state' => 'xyx',
+ ));
+ $server->handleAuthorizeRequest($request, $response = new Response(), true);
+
+ // the response is successful
+ $this->assertEquals($response->getStatusCode(), 302);
+ $parts = parse_url($response->getHttpHeader('Location'));
+ parse_str($parts['query'], $query);
+ $this->assertTrue(isset($query['code']));
+ $this->assertFalse(isset($query['error']));
+
+ // add with the "code" key not set
+ $codeType = new AuthorizationCode($storage);
+ $server = new Server(array($storage), array(), array(), array($codeType));
+ $request = new Request(array(
+ 'response_type' => 'code',
+ 'client_id' => 'some_client',
+ 'redirect_uri' => 'http://example.com',
+ 'state' => 'xyx',
+ ));
+ $server->handleAuthorizeRequest($request, $response = new Response(), true);
+
+ // the response is successful
+ $this->assertEquals($response->getStatusCode(), 302);
+ $parts = parse_url($response->getHttpHeader('Location'));
+ parse_str($parts['query'], $query);
+ $this->assertTrue(isset($query['code']));
+ $this->assertFalse(isset($query['error']));
+ }
+
+ public function testCustomClientAssertionType()
+ {
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'authorization_code',
+ 'client_id' =>'Test Client ID',
+ 'code' => 'testcode',
+ ));
+ // verify the mock clientAssertionType was called as expected
+ $clientAssertionType = $this->getMock('OAuth2\ClientAssertionType\ClientAssertionTypeInterface', array('validateRequest', 'getClientId'));
+ $clientAssertionType
+ ->expects($this->once())
+ ->method('validateRequest')
+ ->will($this->returnValue(true));
+ $clientAssertionType
+ ->expects($this->once())
+ ->method('getClientId')
+ ->will($this->returnValue('Test Client ID'));
+
+ // create mock storage
+ $storage = Bootstrap::getInstance()->getMemoryStorage();
+ $server = new Server(array($storage), array(), array(), array(), null, null, $clientAssertionType);
+ $server->handleTokenRequest($request, $response = new Response());
+ }
+
+ public function testHttpBasicConfig()
+ {
+ // create mock storage
+ $storage = Bootstrap::getInstance()->getMemoryStorage();
+ $server = new Server(array($storage), array(
+ 'allow_credentials_in_request_body' => false,
+ 'allow_public_clients' => false
+ ));
+ $server->getTokenController();
+ $httpBasic = $server->getClientAssertionType();
+
+ $reflection = new \ReflectionClass($httpBasic);
+ $prop = $reflection->getProperty('config');
+ $prop->setAccessible(true);
+
+ $config = $prop->getValue($httpBasic); // get the private "config" property
+
+ $this->assertEquals($config['allow_credentials_in_request_body'], false);
+ $this->assertEquals($config['allow_public_clients'], false);
+ }
+
+ public function testRefreshTokenConfig()
+ {
+ // create mock storage
+ $storage = Bootstrap::getInstance()->getMemoryStorage();
+ $server1 = new Server(array($storage));
+ $server2 = new Server(array($storage), array('always_issue_new_refresh_token' => true, 'unset_refresh_token_after_use' => false));
+
+ $server1->getTokenController();
+ $refreshToken1 = $server1->getGrantType('refresh_token');
+
+ $server2->getTokenController();
+ $refreshToken2 = $server2->getGrantType('refresh_token');
+
+ $reflection1 = new \ReflectionClass($refreshToken1);
+ $prop1 = $reflection1->getProperty('config');
+ $prop1->setAccessible(true);
+
+ $reflection2 = new \ReflectionClass($refreshToken2);
+ $prop2 = $reflection2->getProperty('config');
+ $prop2->setAccessible(true);
+
+ // get the private "config" property
+ $config1 = $prop1->getValue($refreshToken1);
+ $config2 = $prop2->getValue($refreshToken2);
+
+ $this->assertEquals($config1['always_issue_new_refresh_token'], false);
+ $this->assertEquals($config2['always_issue_new_refresh_token'], true);
+
+ $this->assertEquals($config1['unset_refresh_token_after_use'], true);
+ $this->assertEquals($config2['unset_refresh_token_after_use'], false);
+ }
+
+ /**
+ * Test setting "always_issue_new_refresh_token" on a server level
+ *
+ * @see test/OAuth2/GrantType/RefreshTokenTest::testValidRefreshTokenWithNewRefreshTokenInResponse
+ **/
+ public function testValidRefreshTokenWithNewRefreshTokenInResponse()
+ {
+ $storage = Bootstrap::getInstance()->getMemoryStorage();
+ $server = new Server($storage, array('always_issue_new_refresh_token' => true));
+
+ $request = TestRequest::createPost(array(
+ 'grant_type' => 'refresh_token', // valid grant type
+ 'client_id' => 'Test Client ID', // valid client id
+ 'client_secret' => 'TestSecret', // valid client secret
+ 'refresh_token' => 'test-refreshtoken', // valid refresh token
+ ));
+ $token = $server->grantAccessToken($request, new Response());
+ $this->assertTrue(isset($token['refresh_token']), 'refresh token should always refresh');
+
+ $refresh_token = $storage->getRefreshToken($token['refresh_token']);
+ $this->assertNotNull($refresh_token);
+ $this->assertEquals($refresh_token['refresh_token'], $token['refresh_token']);
+ $this->assertEquals($refresh_token['client_id'], $request->request('client_id'));
+ $this->assertTrue($token['refresh_token'] != 'test-refreshtoken', 'the refresh token returned is not the one used');
+ $used_token = $storage->getRefreshToken('test-refreshtoken');
+ $this->assertFalse($used_token, 'the refresh token used is no longer valid');
+ }
+
+ /**
+ * @expectedException InvalidArgumentException OAuth2\ResponseType\AuthorizationCodeInterface
+ **/
+ public function testAddingUnknownResponseTypeThrowsException()
+ {
+ $server = new Server();
+ $server->addResponseType($this->getMock('OAuth2\ResponseType\ResponseTypeInterface'));
+ }
+
+ /**
+ * @expectedException LogicException OAuth2\Storage\PublicKeyInterface
+ **/
+ public function testUsingJwtAccessTokensWithoutPublicKeyStorageThrowsException()
+ {
+ $server = new Server(array(), array('use_jwt_access_tokens' => true));
+ $server->addGrantType($this->getMock('OAuth2\GrantType\GrantTypeInterface'));
+ $server->addStorage($this->getMock('OAuth2\Storage\ClientCredentialsInterface'));
+ $server->addStorage($this->getMock('OAuth2\Storage\ClientCredentialsInterface'));
+
+ $server->getTokenController();
+ }
+
+ public function testUsingJustJwtAccessTokenStorageWithResourceControllerIsOkay()
+ {
+ $pubkey = $this->getMock('OAuth2\Storage\PublicKeyInterface');
+ $server = new Server(array($pubkey), array('use_jwt_access_tokens' => true));
+
+ $this->assertNotNull($server->getResourceController());
+ $this->assertInstanceOf('OAuth2\Storage\PublicKeyInterface', $server->getStorage('public_key'));
+ }
+
+ /**
+ * @expectedException LogicException OAuth2\Storage\ClientInterface
+ **/
+ public function testUsingJustJwtAccessTokenStorageWithAuthorizeControllerThrowsException()
+ {
+ $pubkey = $this->getMock('OAuth2\Storage\PublicKeyInterface');
+ $server = new Server(array($pubkey), array('use_jwt_access_tokens' => true));
+ $this->assertNotNull($server->getAuthorizeController());
+ }
+
+ /**
+ * @expectedException LogicException grant_types
+ **/
+ public function testUsingJustJwtAccessTokenStorageWithTokenControllerThrowsException()
+ {
+ $pubkey = $this->getMock('OAuth2\Storage\PublicKeyInterface');
+ $server = new Server(array($pubkey), array('use_jwt_access_tokens' => true));
+ $server->getTokenController();
+ }
+
+ public function testUsingJwtAccessTokenAndClientStorageWithAuthorizeControllerIsOkay()
+ {
+ $pubkey = $this->getMock('OAuth2\Storage\PublicKeyInterface');
+ $client = $this->getMock('OAuth2\Storage\ClientInterface');
+ $server = new Server(array($pubkey, $client), array('use_jwt_access_tokens' => true, 'allow_implicit' => true));
+ $this->assertNotNull($server->getAuthorizeController());
+
+ $this->assertInstanceOf('OAuth2\ResponseType\JwtAccessToken', $server->getResponseType('token'));
+ }
+
+ /**
+ * @expectedException LogicException UserClaims
+ **/
+ public function testUsingOpenIDConnectWithoutUserClaimsThrowsException()
+ {
+ $client = $this->getMock('OAuth2\Storage\ClientInterface');
+ $server = new Server($client, array('use_openid_connect' => true));
+
+ $server->getAuthorizeController();
+ }
+
+ /**
+ * @expectedException LogicException PublicKeyInterface
+ **/
+ public function testUsingOpenIDConnectWithoutPublicKeyThrowsException()
+ {
+ $client = $this->getMock('OAuth2\Storage\ClientInterface');
+ $userclaims = $this->getMock('OAuth2\OPenID\Storage\UserClaimsInterface');
+ $server = new Server(array($client, $userclaims), array('use_openid_connect' => true));
+
+ $server->getAuthorizeController();
+ }
+
+ /**
+ * @expectedException LogicException issuer
+ **/
+ public function testUsingOpenIDConnectWithoutIssuerThrowsException()
+ {
+ $client = $this->getMock('OAuth2\Storage\ClientInterface');
+ $userclaims = $this->getMock('OAuth2\OpenID\Storage\UserClaimsInterface');
+ $pubkey = $this->getMock('OAuth2\Storage\PublicKeyInterface');
+ $server = new Server(array($client, $userclaims, $pubkey), array('use_openid_connect' => true));
+
+ $server->getAuthorizeController();
+ }
+
+ public function testUsingOpenIDConnectWithIssuerPublicKeyAndUserClaimsIsOkay()
+ {
+ $client = $this->getMock('OAuth2\Storage\ClientInterface');
+ $userclaims = $this->getMock('OAuth2\OpenID\Storage\UserClaimsInterface');
+ $pubkey = $this->getMock('OAuth2\Storage\PublicKeyInterface');
+ $server = new Server(array($client, $userclaims, $pubkey), array(
+ 'use_openid_connect' => true,
+ 'issuer' => 'someguy',
+ ));
+
+ $server->getAuthorizeController();
+
+ $this->assertInstanceOf('OAuth2\OpenID\ResponseType\IdTokenInterface', $server->getResponseType('id_token'));
+ $this->assertNull($server->getResponseType('id_token token'));
+ }
+
+ /**
+ * @expectedException LogicException OAuth2\ResponseType\AccessTokenInterface
+ **/
+ public function testUsingOpenIDConnectWithAllowImplicitWithoutTokenStorageThrowsException()
+ {
+ $client = $this->getMock('OAuth2\Storage\ClientInterface');
+ $userclaims = $this->getMock('OAuth2\OpenID\Storage\UserClaimsInterface');
+ $pubkey = $this->getMock('OAuth2\Storage\PublicKeyInterface');
+ $server = new Server(array($client, $userclaims, $pubkey), array(
+ 'use_openid_connect' => true,
+ 'issuer' => 'someguy',
+ 'allow_implicit' => true,
+ ));
+
+ $server->getAuthorizeController();
+ }
+
+ public function testUsingOpenIDConnectWithAllowImplicitAndUseJwtAccessTokensIsOkay()
+ {
+ $client = $this->getMock('OAuth2\Storage\ClientInterface');
+ $userclaims = $this->getMock('OAuth2\OpenID\Storage\UserClaimsInterface');
+ $pubkey = $this->getMock('OAuth2\Storage\PublicKeyInterface');
+ $server = new Server(array($client, $userclaims, $pubkey), array(
+ 'use_openid_connect' => true,
+ 'issuer' => 'someguy',
+ 'allow_implicit' => true,
+ 'use_jwt_access_tokens' => true,
+ ));
+
+ $server->getAuthorizeController();
+
+ $this->assertInstanceOf('OAuth2\OpenID\ResponseType\IdTokenInterface', $server->getResponseType('id_token'));
+ $this->assertInstanceOf('OAuth2\OpenID\ResponseType\IdTokenTokenInterface', $server->getResponseType('id_token token'));
+ }
+
+ public function testUsingOpenIDConnectWithAllowImplicitAndAccessTokenStorageIsOkay()
+ {
+ $client = $this->getMock('OAuth2\Storage\ClientInterface');
+ $userclaims = $this->getMock('OAuth2\OpenID\Storage\UserClaimsInterface');
+ $pubkey = $this->getMock('OAuth2\Storage\PublicKeyInterface');
+ $token = $this->getMock('OAuth2\Storage\AccessTokenInterface');
+ $server = new Server(array($client, $userclaims, $pubkey, $token), array(
+ 'use_openid_connect' => true,
+ 'issuer' => 'someguy',
+ 'allow_implicit' => true,
+ ));
+
+ $server->getAuthorizeController();
+
+ $this->assertInstanceOf('OAuth2\OpenID\ResponseType\IdTokenInterface', $server->getResponseType('id_token'));
+ $this->assertInstanceOf('OAuth2\OpenID\ResponseType\IdTokenTokenInterface', $server->getResponseType('id_token token'));
+ }
+
+ public function testUsingOpenIDConnectWithAllowImplicitAndAccessTokenResponseTypeIsOkay()
+ {
+ $client = $this->getMock('OAuth2\Storage\ClientInterface');
+ $userclaims = $this->getMock('OAuth2\OpenID\Storage\UserClaimsInterface');
+ $pubkey = $this->getMock('OAuth2\Storage\PublicKeyInterface');
+ // $token = $this->getMock('OAuth2\Storage\AccessTokenInterface');
+ $server = new Server(array($client, $userclaims, $pubkey), array(
+ 'use_openid_connect' => true,
+ 'issuer' => 'someguy',
+ 'allow_implicit' => true,
+ ));
+
+ $token = $this->getMock('OAuth2\ResponseType\AccessTokenInterface');
+ $server->addResponseType($token, 'token');
+
+ $server->getAuthorizeController();
+
+ $this->assertInstanceOf('OAuth2\OpenID\ResponseType\IdTokenInterface', $server->getResponseType('id_token'));
+ $this->assertInstanceOf('OAuth2\OpenID\ResponseType\IdTokenTokenInterface', $server->getResponseType('id_token token'));
+ }
+
+ /**
+ * @expectedException LogicException OAuth2\OpenID\Storage\AuthorizationCodeInterface
+ **/
+ public function testUsingOpenIDConnectWithAuthorizationCodeStorageThrowsException()
+ {
+ $client = $this->getMock('OAuth2\Storage\ClientCredentialsInterface');
+ $userclaims = $this->getMock('OAuth2\OpenID\Storage\UserClaimsInterface');
+ $pubkey = $this->getMock('OAuth2\Storage\PublicKeyInterface');
+ $token = $this->getMock('OAuth2\Storage\AccessTokenInterface');
+ $authcode = $this->getMock('OAuth2\Storage\AuthorizationCodeInterface');
+
+ $server = new Server(array($client, $userclaims, $pubkey, $token, $authcode), array(
+ 'use_openid_connect' => true,
+ 'issuer' => 'someguy'
+ ));
+
+ $server->getTokenController();
+
+ $this->assertInstanceOf('OAuth2\OpenID\GrantType\AuthorizationCode', $server->getGrantType('authorization_code'));
+ }
+
+ public function testUsingOpenIDConnectWithOpenIDAuthorizationCodeStorageCreatesOpenIDAuthorizationCodeGrantType()
+ {
+ $client = $this->getMock('OAuth2\Storage\ClientCredentialsInterface');
+ $userclaims = $this->getMock('OAuth2\OpenID\Storage\UserClaimsInterface');
+ $pubkey = $this->getMock('OAuth2\Storage\PublicKeyInterface');
+ $token = $this->getMock('OAuth2\Storage\AccessTokenInterface');
+ $authcode = $this->getMock('OAuth2\OpenID\Storage\AuthorizationCodeInterface');
+
+ $server = new Server(array($client, $userclaims, $pubkey, $token, $authcode), array(
+ 'use_openid_connect' => true,
+ 'issuer' => 'someguy'
+ ));
+
+ $server->getTokenController();
+
+ $this->assertInstanceOf('OAuth2\OpenID\GrantType\AuthorizationCode', $server->getGrantType('authorization_code'));
+ }
+
+ public function testMultipleValuedResponseTypeOrderDoesntMatter()
+ {
+ $responseType = $this->getMock('OAuth2\OpenID\ResponseType\IdTokenTokenInterface');
+ $server = new Server(array(), array(), array(), array(
+ 'token id_token' => $responseType,
+ ));
+
+ $this->assertEquals($responseType, $server->getResponseType('id_token token'));
+ }
+
+ public function testAddGrantTypeWithoutKey()
+ {
+ $server = new Server();
+ $server->addGrantType(new \OAuth2\GrantType\AuthorizationCode($this->getMock('OAuth2\Storage\AuthorizationCodeInterface')));
+
+ $grantTypes = $server->getGrantTypes();
+ $this->assertEquals('authorization_code', key($grantTypes));
+ }
+
+ public function testAddGrantTypeWithKey()
+ {
+ $server = new Server();
+ $server->addGrantType(new \OAuth2\GrantType\AuthorizationCode($this->getMock('OAuth2\Storage\AuthorizationCodeInterface')), 'ac');
+
+ $grantTypes = $server->getGrantTypes();
+ $this->assertEquals('ac', key($grantTypes));
+ }
+
+ public function testAddGrantTypeWithKeyNotString()
+ {
+ $server = new Server();
+ $server->addGrantType(new \OAuth2\GrantType\AuthorizationCode($this->getMock('OAuth2\Storage\AuthorizationCodeInterface')), 42);
+
+ $grantTypes = $server->getGrantTypes();
+ $this->assertEquals('authorization_code', key($grantTypes));
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/AccessTokenTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/AccessTokenTest.php
new file mode 100644
index 0000000..b34e0bf
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/AccessTokenTest.php
@@ -0,0 +1,102 @@
+<?php
+
+namespace OAuth2\Storage;
+
+class AccessTokenTest extends BaseTest
+{
+ /** @dataProvider provideStorage */
+ public function testSetAccessToken(AccessTokenInterface $storage)
+ {
+ if ($storage instanceof NullStorage) {
+ $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());
+
+ return;
+ }
+
+ // assert token we are about to add does not exist
+ $token = $storage->getAccessToken('newtoken');
+ $this->assertFalse($token);
+
+ // add new token
+ $expires = time() + 20;
+ $success = $storage->setAccessToken('newtoken', 'client ID', 'SOMEUSERID', $expires);
+ $this->assertTrue($success);
+
+ $token = $storage->getAccessToken('newtoken');
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('access_token', $token);
+ $this->assertArrayHasKey('client_id', $token);
+ $this->assertArrayHasKey('user_id', $token);
+ $this->assertArrayHasKey('expires', $token);
+ $this->assertEquals($token['access_token'], 'newtoken');
+ $this->assertEquals($token['client_id'], 'client ID');
+ $this->assertEquals($token['user_id'], 'SOMEUSERID');
+ $this->assertEquals($token['expires'], $expires);
+
+ // change existing token
+ $expires = time() + 42;
+ $success = $storage->setAccessToken('newtoken', 'client ID2', 'SOMEOTHERID', $expires);
+ $this->assertTrue($success);
+
+ $token = $storage->getAccessToken('newtoken');
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('access_token', $token);
+ $this->assertArrayHasKey('client_id', $token);
+ $this->assertArrayHasKey('user_id', $token);
+ $this->assertArrayHasKey('expires', $token);
+ $this->assertEquals($token['access_token'], 'newtoken');
+ $this->assertEquals($token['client_id'], 'client ID2');
+ $this->assertEquals($token['user_id'], 'SOMEOTHERID');
+ $this->assertEquals($token['expires'], $expires);
+
+ // add token with scope having an empty string value
+ $expires = time() + 42;
+ $success = $storage->setAccessToken('newtoken', 'client ID', 'SOMEOTHERID', $expires, '');
+ $this->assertTrue($success);
+ }
+
+ /** @dataProvider provideStorage */
+ public function testUnsetAccessToken(AccessTokenInterface $storage)
+ {
+ if ($storage instanceof NullStorage || !method_exists($storage, 'unsetAccessToken')) {
+ $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());
+
+ return;
+ }
+
+ // assert token we are about to unset does not exist
+ $token = $storage->getAccessToken('revokabletoken');
+ $this->assertFalse($token);
+
+ // add new token
+ $expires = time() + 20;
+ $success = $storage->setAccessToken('revokabletoken', 'client ID', 'SOMEUSERID', $expires);
+ $this->assertTrue($success);
+
+ // assert unsetAccessToken returns true
+ $result = $storage->unsetAccessToken('revokabletoken');
+ $this->assertTrue($result);
+
+ // assert token we unset does not exist
+ $token = $storage->getAccessToken('revokabletoken');
+ $this->assertFalse($token);
+ }
+
+ /** @dataProvider provideStorage */
+ public function testUnsetAccessTokenReturnsFalse(AccessTokenInterface $storage)
+ {
+ if ($storage instanceof NullStorage || !method_exists($storage, 'unsetAccessToken')) {
+ $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());
+
+ return;
+ }
+
+ // assert token we are about to unset does not exist
+ $token = $storage->getAccessToken('nonexistanttoken');
+ $this->assertFalse($token);
+
+ // assert unsetAccessToken returns false
+ $result = $storage->unsetAccessToken('nonexistanttoken');
+ $this->assertFalse($result);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/AuthorizationCodeTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/AuthorizationCodeTest.php
new file mode 100644
index 0000000..2d901b5
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/AuthorizationCodeTest.php
@@ -0,0 +1,106 @@
+<?php
+
+namespace OAuth2\Storage;
+
+class AuthorizationCodeTest extends BaseTest
+{
+ /** @dataProvider provideStorage */
+ public function testGetAuthorizationCode(AuthorizationCodeInterface $storage)
+ {
+ if ($storage instanceof NullStorage) {
+ $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());
+
+ return;
+ }
+
+ // nonexistant client_id
+ $details = $storage->getAuthorizationCode('faketoken');
+ $this->assertFalse($details);
+
+ // valid client_id
+ $details = $storage->getAuthorizationCode('testtoken');
+ $this->assertNotNull($details);
+ }
+
+ /** @dataProvider provideStorage */
+ public function testSetAuthorizationCode(AuthorizationCodeInterface $storage)
+ {
+ if ($storage instanceof NullStorage) {
+ $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());
+
+ return;
+ }
+
+ // assert code we are about to add does not exist
+ $code = $storage->getAuthorizationCode('newcode');
+ $this->assertFalse($code);
+
+ // add new code
+ $expires = time() + 20;
+ $success = $storage->setAuthorizationCode('newcode', 'client ID', 'SOMEUSERID', 'http://example.com', $expires);
+ $this->assertTrue($success);
+
+ $code = $storage->getAuthorizationCode('newcode');
+ $this->assertNotNull($code);
+ $this->assertArrayHasKey('authorization_code', $code);
+ $this->assertArrayHasKey('client_id', $code);
+ $this->assertArrayHasKey('user_id', $code);
+ $this->assertArrayHasKey('redirect_uri', $code);
+ $this->assertArrayHasKey('expires', $code);
+ $this->assertEquals($code['authorization_code'], 'newcode');
+ $this->assertEquals($code['client_id'], 'client ID');
+ $this->assertEquals($code['user_id'], 'SOMEUSERID');
+ $this->assertEquals($code['redirect_uri'], 'http://example.com');
+ $this->assertEquals($code['expires'], $expires);
+
+ // change existing code
+ $expires = time() + 42;
+ $success = $storage->setAuthorizationCode('newcode', 'client ID2', 'SOMEOTHERID', 'http://example.org', $expires);
+ $this->assertTrue($success);
+
+ $code = $storage->getAuthorizationCode('newcode');
+ $this->assertNotNull($code);
+ $this->assertArrayHasKey('authorization_code', $code);
+ $this->assertArrayHasKey('client_id', $code);
+ $this->assertArrayHasKey('user_id', $code);
+ $this->assertArrayHasKey('redirect_uri', $code);
+ $this->assertArrayHasKey('expires', $code);
+ $this->assertEquals($code['authorization_code'], 'newcode');
+ $this->assertEquals($code['client_id'], 'client ID2');
+ $this->assertEquals($code['user_id'], 'SOMEOTHERID');
+ $this->assertEquals($code['redirect_uri'], 'http://example.org');
+ $this->assertEquals($code['expires'], $expires);
+
+ // add new code with scope having an empty string value
+ $expires = time() + 20;
+ $success = $storage->setAuthorizationCode('newcode', 'client ID', 'SOMEUSERID', 'http://example.com', $expires, '');
+ $this->assertTrue($success);
+ }
+
+ /** @dataProvider provideStorage */
+ public function testExpireAccessToken(AccessTokenInterface $storage)
+ {
+ if ($storage instanceof NullStorage) {
+ $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());
+
+ return;
+ }
+
+ // create a valid code
+ $expires = time() + 20;
+ $success = $storage->setAuthorizationCode('code-to-expire', 'client ID', 'SOMEUSERID', 'http://example.com', time() + 20);
+ $this->assertTrue($success);
+
+ // verify the new code exists
+ $code = $storage->getAuthorizationCode('code-to-expire');
+ $this->assertNotNull($code);
+
+ $this->assertArrayHasKey('authorization_code', $code);
+ $this->assertEquals($code['authorization_code'], 'code-to-expire');
+
+ // now expire the code and ensure it's no longer available
+ $storage->expireAuthorizationCode('code-to-expire');
+ $code = $storage->getAuthorizationCode('code-to-expire');
+ $this->assertFalse($code);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/ClientCredentialsTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/ClientCredentialsTest.php
new file mode 100644
index 0000000..15289af
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/ClientCredentialsTest.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace OAuth2\Storage;
+
+class ClientCredentialsTest extends BaseTest
+{
+ /** @dataProvider provideStorage */
+ public function testCheckClientCredentials(ClientCredentialsInterface $storage)
+ {
+ if ($storage instanceof NullStorage) {
+ $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());
+
+ return;
+ }
+
+ // nonexistant client_id
+ $pass = $storage->checkClientCredentials('fakeclient', 'testpass');
+ $this->assertFalse($pass);
+
+ // invalid password
+ $pass = $storage->checkClientCredentials('oauth_test_client', 'invalidcredentials');
+ $this->assertFalse($pass);
+
+ // valid credentials
+ $pass = $storage->checkClientCredentials('oauth_test_client', 'testpass');
+ $this->assertTrue($pass);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/ClientTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/ClientTest.php
new file mode 100644
index 0000000..6a5cc0b
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/ClientTest.php
@@ -0,0 +1,110 @@
+<?php
+
+namespace OAuth2\Storage;
+
+class ClientTest extends BaseTest
+{
+ /** @dataProvider provideStorage */
+ public function testGetClientDetails(ClientInterface $storage)
+ {
+ if ($storage instanceof NullStorage) {
+ $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());
+
+ return;
+ }
+
+ // nonexistant client_id
+ $details = $storage->getClientDetails('fakeclient');
+ $this->assertFalse($details);
+
+ // valid client_id
+ $details = $storage->getClientDetails('oauth_test_client');
+ $this->assertNotNull($details);
+ $this->assertArrayHasKey('client_id', $details);
+ $this->assertArrayHasKey('client_secret', $details);
+ $this->assertArrayHasKey('redirect_uri', $details);
+ }
+
+ /** @dataProvider provideStorage */
+ public function testCheckRestrictedGrantType(ClientInterface $storage)
+ {
+ if ($storage instanceof NullStorage) {
+ $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());
+
+ return;
+ }
+
+ // Check invalid
+ $pass = $storage->checkRestrictedGrantType('oauth_test_client', 'authorization_code');
+ $this->assertFalse($pass);
+
+ // Check valid
+ $pass = $storage->checkRestrictedGrantType('oauth_test_client', 'implicit');
+ $this->assertTrue($pass);
+ }
+
+ /** @dataProvider provideStorage */
+ public function testGetAccessToken(ClientInterface $storage)
+ {
+ if ($storage instanceof NullStorage) {
+ $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());
+
+ return;
+ }
+
+ // nonexistant client_id
+ $details = $storage->getAccessToken('faketoken');
+ $this->assertFalse($details);
+
+ // valid client_id
+ $details = $storage->getAccessToken('testtoken');
+ $this->assertNotNull($details);
+ }
+
+ /** @dataProvider provideStorage */
+ public function testIsPublicClient(ClientInterface $storage)
+ {
+ if ($storage instanceof NullStorage) {
+ $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());
+
+ return;
+ }
+
+ $publicClientId = 'public-client-'.rand();
+ $confidentialClientId = 'confidential-client-'.rand();
+
+ // create a new client
+ $success1 = $storage->setClientDetails($publicClientId, '');
+ $success2 = $storage->setClientDetails($confidentialClientId, 'some-secret');
+ $this->assertTrue($success1);
+ $this->assertTrue($success2);
+
+ // assert isPublicClient for both
+ $this->assertTrue($storage->isPublicClient($publicClientId));
+ $this->assertFalse($storage->isPublicClient($confidentialClientId));
+ }
+
+ /** @dataProvider provideStorage */
+ public function testSaveClient(ClientInterface $storage)
+ {
+ if ($storage instanceof NullStorage) {
+ $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());
+
+ return;
+ }
+
+ $clientId = 'some-client-'.rand();
+
+ // create a new client
+ $success = $storage->setClientDetails($clientId, 'somesecret', 'http://test.com', 'client_credentials', 'clientscope1', 'brent@brentertainment.com');
+ $this->assertTrue($success);
+
+ // valid client_id
+ $details = $storage->getClientDetails($clientId);
+ $this->assertEquals($details['client_secret'], 'somesecret');
+ $this->assertEquals($details['redirect_uri'], 'http://test.com');
+ $this->assertEquals($details['grant_types'], 'client_credentials');
+ $this->assertEquals($details['scope'], 'clientscope1');
+ $this->assertEquals($details['user_id'], 'brent@brentertainment.com');
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/DynamoDBTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/DynamoDBTest.php
new file mode 100644
index 0000000..2147f09
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/DynamoDBTest.php
@@ -0,0 +1,40 @@
+<?php
+
+namespace OAuth2\Storage;
+
+class DynamoDBTest extends BaseTest
+{
+ public function testGetDefaultScope()
+ {
+ $client = $this->getMockBuilder('\Aws\DynamoDb\DynamoDbClient')
+ ->disableOriginalConstructor()
+ ->setMethods(array('query'))
+ ->getMock();
+
+ $return = $this->getMockBuilder('\Guzzle\Service\Resource\Model')
+ ->setMethods(array('count', 'toArray'))
+ ->getMock();
+
+ $data = array(
+ 'Items' => array(),
+ 'Count' => 0,
+ 'ScannedCount'=> 0
+ );
+
+ $return->expects($this->once())
+ ->method('count')
+ ->will($this->returnValue(count($data)));
+
+ $return->expects($this->once())
+ ->method('toArray')
+ ->will($this->returnValue($data));
+
+ // should return null default scope if none is set in database
+ $client->expects($this->once())
+ ->method('query')
+ ->will($this->returnValue($return));
+
+ $storage = new DynamoDB($client);
+ $this->assertNull($storage->getDefaultScope());
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/JwtAccessTokenTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/JwtAccessTokenTest.php
new file mode 100644
index 0000000..a6acbea
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/JwtAccessTokenTest.php
@@ -0,0 +1,41 @@
+<?php
+
+namespace OAuth2\Storage;
+
+use OAuth2\Encryption\Jwt;
+
+class JwtAccessTokenTest extends BaseTest
+{
+ /** @dataProvider provideStorage */
+ public function testSetAccessToken($storage)
+ {
+ if (!$storage instanceof PublicKey) {
+ // incompatible storage
+ return;
+ }
+
+ $crypto = new jwtAccessToken($storage);
+
+ $publicKeyStorage = Bootstrap::getInstance()->getMemoryStorage();
+ $encryptionUtil = new Jwt();
+
+ $jwtAccessToken = array(
+ 'access_token' => rand(),
+ 'expires' => time() + 100,
+ 'scope' => 'foo',
+ );
+
+ $token = $encryptionUtil->encode($jwtAccessToken, $storage->getPrivateKey(), $storage->getEncryptionAlgorithm());
+
+ $this->assertNotNull($token);
+
+ $tokenData = $crypto->getAccessToken($token);
+
+ $this->assertTrue(is_array($tokenData));
+
+ /* assert the decoded token is the same */
+ $this->assertEquals($tokenData['access_token'], $jwtAccessToken['access_token']);
+ $this->assertEquals($tokenData['expires'], $jwtAccessToken['expires']);
+ $this->assertEquals($tokenData['scope'], $jwtAccessToken['scope']);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/JwtBearerTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/JwtBearerTest.php
new file mode 100644
index 0000000..d0ab9b8
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/JwtBearerTest.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace OAuth2\Storage;
+
+class JwtBearerTest extends BaseTest
+{
+ /** @dataProvider provideStorage */
+ public function testGetClientKey(JwtBearerInterface $storage)
+ {
+ if ($storage instanceof NullStorage) {
+ $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());
+
+ return;
+ }
+
+ // nonexistant client_id
+ $key = $storage->getClientKey('this-is-not-real', 'nor-is-this');
+ $this->assertFalse($key);
+
+ // valid client_id and subject
+ $key = $storage->getClientKey('oauth_test_client', 'test_subject');
+ $this->assertNotNull($key);
+ $this->assertEquals($key, Bootstrap::getInstance()->getTestPublicKey());
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/PdoTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/PdoTest.php
new file mode 100644
index 0000000..4599f69
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/PdoTest.php
@@ -0,0 +1,41 @@
+<?php
+
+namespace OAuth2\Storage;
+
+class PdoTest extends BaseTest
+{
+ public function testCreatePdoStorageUsingPdoClass()
+ {
+ $dsn = sprintf('sqlite:%s', Bootstrap::getInstance()->getSqliteDir());
+ $pdo = new \PDO($dsn);
+ $storage = new Pdo($pdo);
+
+ $this->assertNotNull($storage->getClientDetails('oauth_test_client'));
+ }
+
+ public function testCreatePdoStorageUsingDSN()
+ {
+ $dsn = sprintf('sqlite:%s', Bootstrap::getInstance()->getSqliteDir());
+ $storage = new Pdo($dsn);
+
+ $this->assertNotNull($storage->getClientDetails('oauth_test_client'));
+ }
+
+ public function testCreatePdoStorageUsingConfig()
+ {
+ $dsn = sprintf('sqlite:%s', Bootstrap::getInstance()->getSqliteDir());
+ $config = array('dsn' => $dsn);
+ $storage = new Pdo($config);
+
+ $this->assertNotNull($storage->getClientDetails('oauth_test_client'));
+ }
+
+ /**
+ * @expectedException InvalidArgumentException dsn
+ */
+ public function testCreatePdoStorageWithoutDSNThrowsException()
+ {
+ $config = array('username' => 'brent', 'password' => 'brentisaballer');
+ $storage = new Pdo($config);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/PublicKeyTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/PublicKeyTest.php
new file mode 100644
index 0000000..f851958
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/PublicKeyTest.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace OAuth2\Storage;
+
+class PublicKeyTest extends BaseTest
+{
+ /** @dataProvider provideStorage */
+ public function testSetAccessToken($storage)
+ {
+ if ($storage instanceof NullStorage) {
+ $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());
+
+ return;
+ }
+
+ if (!$storage instanceof PublicKeyInterface) {
+ // incompatible storage
+ return;
+ }
+
+ $configDir = Bootstrap::getInstance()->getConfigDir();
+ $globalPublicKey = file_get_contents($configDir.'/keys/id_rsa.pub');
+ $globalPrivateKey = file_get_contents($configDir.'/keys/id_rsa');
+
+ /* assert values from storage */
+ $this->assertEquals($storage->getPublicKey(), $globalPublicKey);
+ $this->assertEquals($storage->getPrivateKey(), $globalPrivateKey);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/RefreshTokenTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/RefreshTokenTest.php
new file mode 100644
index 0000000..314c931
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/RefreshTokenTest.php
@@ -0,0 +1,41 @@
+<?php
+
+namespace OAuth2\Storage;
+
+class RefreshTokenTest extends BaseTest
+{
+ /** @dataProvider provideStorage */
+ public function testSetRefreshToken(RefreshTokenInterface $storage)
+ {
+ if ($storage instanceof NullStorage) {
+ $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());
+
+ return;
+ }
+
+ // assert token we are about to add does not exist
+ $token = $storage->getRefreshToken('refreshtoken');
+ $this->assertFalse($token);
+
+ // add new token
+ $expires = time() + 20;
+ $success = $storage->setRefreshToken('refreshtoken', 'client ID', 'SOMEUSERID', $expires);
+ $this->assertTrue($success);
+
+ $token = $storage->getRefreshToken('refreshtoken');
+ $this->assertNotNull($token);
+ $this->assertArrayHasKey('refresh_token', $token);
+ $this->assertArrayHasKey('client_id', $token);
+ $this->assertArrayHasKey('user_id', $token);
+ $this->assertArrayHasKey('expires', $token);
+ $this->assertEquals($token['refresh_token'], 'refreshtoken');
+ $this->assertEquals($token['client_id'], 'client ID');
+ $this->assertEquals($token['user_id'], 'SOMEUSERID');
+ $this->assertEquals($token['expires'], $expires);
+
+ // add token with scope having an empty string value
+ $expires = time() + 20;
+ $success = $storage->setRefreshToken('refreshtoken2', 'client ID', 'SOMEUSERID', $expires, '');
+ $this->assertTrue($success);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/ScopeTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/ScopeTest.php
new file mode 100644
index 0000000..fd1edeb
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/ScopeTest.php
@@ -0,0 +1,53 @@
+<?php
+
+namespace OAuth2\Storage;
+
+use OAuth2\Scope;
+
+class ScopeTest extends BaseTest
+{
+ /** @dataProvider provideStorage */
+ public function testScopeExists($storage)
+ {
+ if ($storage instanceof NullStorage) {
+ $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());
+
+ return;
+ }
+
+ if (!$storage instanceof ScopeInterface) {
+ // incompatible storage
+ return;
+ }
+
+ //Test getting scopes
+ $scopeUtil = new Scope($storage);
+ $this->assertTrue($scopeUtil->scopeExists('supportedscope1'));
+ $this->assertTrue($scopeUtil->scopeExists('supportedscope1 supportedscope2 supportedscope3'));
+ $this->assertFalse($scopeUtil->scopeExists('fakescope'));
+ $this->assertFalse($scopeUtil->scopeExists('supportedscope1 supportedscope2 supportedscope3 fakescope'));
+ }
+
+ /** @dataProvider provideStorage */
+ public function testGetDefaultScope($storage)
+ {
+ if ($storage instanceof NullStorage) {
+ $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());
+
+ return;
+ }
+
+ if (!$storage instanceof ScopeInterface) {
+ // incompatible storage
+ return;
+ }
+
+ // test getting default scope
+ $scopeUtil = new Scope($storage);
+ $expected = explode(' ', $scopeUtil->getDefaultScope());
+ $actual = explode(' ', 'defaultscope1 defaultscope2');
+ sort($expected);
+ sort($actual);
+ $this->assertEquals($expected, $actual);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/UserCredentialsTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/UserCredentialsTest.php
new file mode 100644
index 0000000..65655a6
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/UserCredentialsTest.php
@@ -0,0 +1,40 @@
+<?php
+
+namespace OAuth2\Storage;
+
+class UserCredentialsTest extends BaseTest
+{
+ /** @dataProvider provideStorage */
+ public function testCheckUserCredentials(UserCredentialsInterface $storage)
+ {
+ if ($storage instanceof NullStorage) {
+ $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());
+
+ return;
+ }
+
+ // create a new user for testing
+ $success = $storage->setUser('testusername', 'testpass', 'Test', 'User');
+ $this->assertTrue($success);
+
+ // correct credentials
+ $this->assertTrue($storage->checkUserCredentials('testusername', 'testpass'));
+ // invalid password
+ $this->assertFalse($storage->checkUserCredentials('testusername', 'fakepass'));
+ // invalid username
+ $this->assertFalse($storage->checkUserCredentials('fakeusername', 'testpass'));
+
+ // invalid username
+ $this->assertFalse($storage->getUserDetails('fakeusername'));
+
+ // ensure all properties are set
+ $user = $storage->getUserDetails('testusername');
+ $this->assertTrue($user !== false);
+ $this->assertArrayHasKey('user_id', $user);
+ $this->assertArrayHasKey('first_name', $user);
+ $this->assertArrayHasKey('last_name', $user);
+ $this->assertEquals($user['user_id'], 'testusername');
+ $this->assertEquals($user['first_name'], 'Test');
+ $this->assertEquals($user['last_name'], 'User');
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/TokenType/BearerTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/TokenType/BearerTest.php
new file mode 100644
index 0000000..71cca3b
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/TokenType/BearerTest.php
@@ -0,0 +1,59 @@
+<?php
+
+namespace OAuth2\TokenType;
+
+use OAuth2\Request\TestRequest;
+use OAuth2\Response;
+use PHPUnit\Framework\TestCase;
+
+class BearerTest extends TestCase
+{
+ public function testValidContentTypeWithCharset()
+ {
+ $bearer = new Bearer();
+ $request = TestRequest::createPost(array(
+ 'access_token' => 'ThisIsMyAccessToken'
+ ));
+ $request->server['CONTENT_TYPE'] = 'application/x-www-form-urlencoded; charset=UTF-8';
+
+ $param = $bearer->getAccessTokenParameter($request, $response = new Response());
+ $this->assertEquals($param, 'ThisIsMyAccessToken');
+ }
+
+ public function testInvalidContentType()
+ {
+ $bearer = new Bearer();
+ $request = TestRequest::createPost(array(
+ 'access_token' => 'ThisIsMyAccessToken'
+ ));
+ $request->server['CONTENT_TYPE'] = 'application/json; charset=UTF-8';
+
+ $param = $bearer->getAccessTokenParameter($request, $response = new Response());
+ $this->assertNull($param);
+ $this->assertEquals($response->getStatusCode(), 400);
+ $this->assertEquals($response->getParameter('error'), 'invalid_request');
+ $this->assertEquals($response->getParameter('error_description'), 'The content type for POST requests must be "application/x-www-form-urlencoded"');
+ }
+
+ public function testValidRequestUsingAuthorizationHeader()
+ {
+ $bearer = new Bearer();
+ $request = new TestRequest();
+ $request->headers['AUTHORIZATION'] = 'Bearer MyToken';
+ $request->server['CONTENT_TYPE'] = 'application/x-www-form-urlencoded; charset=UTF-8';
+
+ $param = $bearer->getAccessTokenParameter($request, $response = new Response());
+ $this->assertEquals('MyToken', $param);
+ }
+
+ public function testValidRequestUsingAuthorizationHeaderCaseInsensitive()
+ {
+ $bearer = new Bearer();
+ $request = new TestRequest();
+ $request->server['CONTENT_TYPE'] = 'application/x-www-form-urlencoded; charset=UTF-8';
+ $request->headers['Authorization'] = 'Bearer MyToken';
+
+ $param = $bearer->getAccessTokenParameter($request, $response = new Response());
+ $this->assertEquals('MyToken', $param);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/bootstrap.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/bootstrap.php
new file mode 100644
index 0000000..0a4af07
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/bootstrap.php
@@ -0,0 +1,12 @@
+<?php
+
+require_once(dirname(__FILE__).'/../src/OAuth2/Autoloader.php');
+OAuth2\Autoloader::register();
+
+// register test classes
+OAuth2\Autoloader::register(dirname(__FILE__).'/lib');
+
+// register vendors if possible
+if (file_exists(__DIR__.'/../vendor/autoload.php')) {
+ require_once(__DIR__.'/../vendor/autoload.php');
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/cleanup.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/cleanup.php
new file mode 100644
index 0000000..8663a90
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/cleanup.php
@@ -0,0 +1,15 @@
+<?php
+
+require_once(dirname(__FILE__).'/../src/OAuth2/Autoloader.php');
+OAuth2\Autoloader::register();
+
+// register test classes
+OAuth2\Autoloader::register(dirname(__FILE__).'/lib');
+
+// register vendors if possible
+if (file_exists(__DIR__.'/../vendor/autoload.php')) {
+ require_once(__DIR__.'/../vendor/autoload.php');
+}
+
+// remove the dynamoDB database that was created for this build
+OAuth2\Storage\Bootstrap::getInstance()->cleanupTravisDynamoDb();
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/config/keys/id_rsa b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/config/keys/id_rsa
new file mode 100644
index 0000000..e8b9eff
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/config/keys/id_rsa
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQC8fpi06NfVYHAOAnxNMVnTXr/ptsLsNjP+uAt2eO0cc5J9H5XV
+8lFVujOrRu/JWi1TDmAvOaf/6A3BphIA1Pwp0AAqlZdwizIum8j0KzpsGYH5qReN
+QDwF3oUSKMsQCCGCDHrDYifG/pRi9bN1ZVjEXPr35HJuBe+FQpZTs8DewwIDAQAB
+AoGARfNxNknmtx/n1bskZ/01iZRzAge6BLEE0LV6Q4gS7mkRZu/Oyiv39Sl5vUlA
++WdGxLjkBwKNjxGN8Vxw9/ASd8rSsqeAUYIwAeifXrHhj5DBPQT/pDPkeFnp9B1w
+C6jo+3AbBQ4/b0ONSIEnCL2xGGglSIAxO17T1ViXp7lzXPECQQDe63nkRdWM0OCb
+oaHQPT3E26224maIstrGFUdt9yw3yJf4bOF7TtiPLlLuHsTTge3z+fG6ntC0xG56
+1cl37C3ZAkEA2HdVcRGugNp/qmVz4LJTpD+WZKi73PLAO47wDOrYh9Pn2I6fcEH0
+CPnggt1ko4ujvGzFTvRH64HXa6aPCv1j+wJBAMQMah3VQPNf/DlDVFEUmw9XeBZg
+VHaifX851aEjgXLp6qVj9IYCmLiLsAmVa9rr6P7p8asD418nZlaHUHE0eDkCQQCr
+uxis6GMx1Ka971jcJX2X696LoxXPd0KsvXySMupv79yagKPa8mgBiwPjrnK+EPVo
+cj6iochA/bSCshP/mwFrAkBHEKPi6V6gb94JinCT7x3weahbdp6bJ6/nzBH/p9VA
+HoT1JtwNFhGv9BCjmDydshQHfSWpY9NxlccBKL7ITm8R
+-----END RSA PRIVATE KEY-----
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/config/keys/id_rsa.pub b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/config/keys/id_rsa.pub
new file mode 100644
index 0000000..1ac15f5
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/config/keys/id_rsa.pub
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICiDCCAfGgAwIBAgIBADANBgkqhkiG9w0BAQQFADA9MQswCQYDVQQGEwJVUzEL
+MAkGA1UECBMCVVQxITAfBgNVBAoTGFZpZ25ldHRlIENvcnBvcmF0aW9uIFNCWDAe
+Fw0xMTEwMTUwMzE4MjdaFw0zMTEwMTAwMzE4MjdaMD0xCzAJBgNVBAYTAlVTMQsw
+CQYDVQQIEwJVVDEhMB8GA1UEChMYVmlnbmV0dGUgQ29ycG9yYXRpb24gU0JYMIGf
+MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8fpi06NfVYHAOAnxNMVnTXr/ptsLs
+NjP+uAt2eO0cc5J9H5XV8lFVujOrRu/JWi1TDmAvOaf/6A3BphIA1Pwp0AAqlZdw
+izIum8j0KzpsGYH5qReNQDwF3oUSKMsQCCGCDHrDYifG/pRi9bN1ZVjEXPr35HJu
+Be+FQpZTs8DewwIDAQABo4GXMIGUMB0GA1UdDgQWBBRe8hrEXm+Yim4YlD5Nx+1K
+vCYs9DBlBgNVHSMEXjBcgBRe8hrEXm+Yim4YlD5Nx+1KvCYs9KFBpD8wPTELMAkG
+A1UEBhMCVVMxCzAJBgNVBAgTAlVUMSEwHwYDVQQKExhWaWduZXR0ZSBDb3Jwb3Jh
+dGlvbiBTQliCAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQBjhyRD
+lM7vnLn6drgQVftW5V9nDFAyPAuiGvMIKFSbiAf1PxXCRn5sfJquwWKsJUi4ZGNl
+aViXdFmN6/F13PSM+yg63tpKy0fYqMbTM+Oe5WuSHkSW1VuYNHV+24adgNk/FRDL
+FRrlM1f6s9VTLWvwGItjfrof0Ba8Uq7ZDSb9Xg==
+-----END CERTIFICATE-----
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/config/storage.json b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/config/storage.json
new file mode 100644
index 0000000..52d3f23
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/config/storage.json
@@ -0,0 +1,188 @@
+{
+ "authorization_codes": {
+ "testcode": {
+ "client_id": "Test Client ID",
+ "user_id": "",
+ "redirect_uri": "",
+ "expires": "9999999999",
+ "id_token": "IDTOKEN"
+ },
+ "testcode-with-scope": {
+ "client_id": "Test Client ID",
+ "user_id": "",
+ "redirect_uri": "",
+ "expires": "9999999999",
+ "scope": "scope1 scope2"
+ },
+ "testcode-expired": {
+ "client_id": "Test Client ID",
+ "user_id": "",
+ "redirect_uri": "",
+ "expires": "1356998400"
+ },
+ "testcode-empty-secret": {
+ "client_id": "Test Client ID Empty Secret",
+ "user_id": "",
+ "redirect_uri": "",
+ "expires": "9999999999"
+ },
+ "testcode-openid": {
+ "client_id": "Test Client ID",
+ "user_id": "",
+ "redirect_uri": "",
+ "expires": "9999999999",
+ "id_token": "test_id_token"
+ },
+ "testcode-redirect-uri": {
+ "client_id": "Test Client ID",
+ "user_id": "",
+ "redirect_uri": "http://brentertainment.com/voil%C3%A0",
+ "expires": "9999999999",
+ "id_token": "IDTOKEN"
+ }
+ },
+ "client_credentials" : {
+ "Test Client ID": {
+ "client_secret": "TestSecret"
+ },
+ "Test Client ID with Redirect Uri": {
+ "client_secret": "TestSecret2",
+ "redirect_uri": "http://brentertainment.com"
+ },
+ "Test Client ID with Buggy Redirect Uri": {
+ "client_secret": "TestSecret2",
+ "redirect_uri": " http://brentertainment.com"
+ },
+ "Test Client ID with Multiple Redirect Uris": {
+ "client_secret": "TestSecret3",
+ "redirect_uri": "http://brentertainment.com http://morehazards.com"
+ },
+ "Test Client ID with Redirect Uri Parts": {
+ "client_secret": "TestSecret4",
+ "redirect_uri": "http://user:pass@brentertainment.com:2222/authorize/cb?auth_type=oauth&test=true"
+ },
+ "Test Some Other Client": {
+ "client_secret": "TestSecret3"
+ },
+ "Test Client ID Empty Secret": {
+ "client_secret": ""
+ },
+ "Test Client ID For Password Grant": {
+ "grant_types": "password",
+ "client_secret": ""
+ },
+ "Client ID With User ID": {
+ "client_secret": "TestSecret",
+ "user_id": "brent@brentertainment.com"
+ },
+ "oauth_test_client": {
+ "client_secret": "testpass",
+ "grant_types": "implicit password"
+ }
+ },
+ "user_credentials" : {
+ "test-username": {
+ "password": "testpass"
+ },
+ "testusername": {
+ "password": "testpass"
+ },
+ "testuser": {
+ "password": "password",
+ "email": "testuser@test.com",
+ "email_verified": true
+ },
+ "johndoe": {
+ "password": "password"
+ }
+ },
+ "refresh_tokens" : {
+ "test-refreshtoken": {
+ "refresh_token": "test-refreshtoken",
+ "client_id": "Test Client ID",
+ "user_id": "test-username",
+ "expires": 0,
+ "scope": null
+ },
+ "test-refreshtoken-with-scope": {
+ "refresh_token": "test-refreshtoken",
+ "client_id": "Test Client ID",
+ "user_id": "test-username",
+ "expires": 0,
+ "scope": "scope1 scope2"
+ }
+ },
+ "access_tokens" : {
+ "accesstoken-expired": {
+ "access_token": "accesstoken-expired",
+ "client_id": "Test Client ID",
+ "expires": 1234567,
+ "scope": null
+ },
+ "accesstoken-scope": {
+ "access_token": "accesstoken-scope",
+ "client_id": "Test Client ID",
+ "expires": 99999999900,
+ "scope": "testscope"
+ },
+ "accesstoken-openid-connect": {
+ "access_token": "accesstoken-openid-connect",
+ "client_id": "Test Client ID",
+ "user_id": "testuser",
+ "expires": 99999999900,
+ "scope": "openid email"
+ },
+ "accesstoken-malformed": {
+ "access_token": "accesstoken-mallformed",
+ "expires": 99999999900,
+ "scope": "testscope"
+ }
+ },
+ "jwt": {
+ "Test Client ID": {
+ "key": "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5/SxVlE8gnpFqCxgl2wjhzY7u\ncEi00s0kUg3xp7lVEvgLgYcAnHiWp+gtSjOFfH2zsvpiWm6Lz5f743j/FEzHIO1o\nwR0p4d9pOaJK07d01+RzoQLOIQAgXrr4T1CCWUesncwwPBVCyy2Mw3Nmhmr9MrF8\nUlvdRKBxriRnlP3qJQIDAQAB\n-----END PUBLIC KEY-----",
+ "subject": "testuser@ourdomain.com"
+ },
+ "Test Client ID PHP-5.2": {
+ "key": "mysecretkey",
+ "subject": "testuser@ourdomain.com"
+ },
+ "Missing Key Client": {
+ "key": null,
+ "subject": "testuser@ourdomain.com"
+ },
+ "Missing Key Client PHP-5.2": {
+ "key": null,
+ "subject": "testuser@ourdomain.com"
+ },
+ "oauth_test_client": {
+ "key": "-----BEGIN CERTIFICATE-----\nMIICiDCCAfGgAwIBAgIBADANBgkqhkiG9w0BAQQFADA9MQswCQYDVQQGEwJVUzEL\nMAkGA1UECBMCVVQxITAfBgNVBAoTGFZpZ25ldHRlIENvcnBvcmF0aW9uIFNCWDAe\nFw0xMTEwMTUwMzE4MjdaFw0zMTEwMTAwMzE4MjdaMD0xCzAJBgNVBAYTAlVTMQsw\nCQYDVQQIEwJVVDEhMB8GA1UEChMYVmlnbmV0dGUgQ29ycG9yYXRpb24gU0JYMIGf\nMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8fpi06NfVYHAOAnxNMVnTXr/ptsLs\nNjP+uAt2eO0cc5J9H5XV8lFVujOrRu/JWi1TDmAvOaf/6A3BphIA1Pwp0AAqlZdw\nizIum8j0KzpsGYH5qReNQDwF3oUSKMsQCCGCDHrDYifG/pRi9bN1ZVjEXPr35HJu\nBe+FQpZTs8DewwIDAQABo4GXMIGUMB0GA1UdDgQWBBRe8hrEXm+Yim4YlD5Nx+1K\nvCYs9DBlBgNVHSMEXjBcgBRe8hrEXm+Yim4YlD5Nx+1KvCYs9KFBpD8wPTELMAkG\nA1UEBhMCVVMxCzAJBgNVBAgTAlVUMSEwHwYDVQQKExhWaWduZXR0ZSBDb3Jwb3Jh\ndGlvbiBTQliCAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQBjhyRD\nlM7vnLn6drgQVftW5V9nDFAyPAuiGvMIKFSbiAf1PxXCRn5sfJquwWKsJUi4ZGNl\naViXdFmN6/F13PSM+yg63tpKy0fYqMbTM+Oe5WuSHkSW1VuYNHV+24adgNk/FRDL\nFRrlM1f6s9VTLWvwGItjfrof0Ba8Uq7ZDSb9Xg==\n-----END CERTIFICATE-----",
+ "subject": "test_subject"
+ }
+ },
+ "jti": [
+ {
+ "issuer": "Test Client ID",
+ "subject": "testuser@ourdomain.com",
+ "audience": "http://myapp.com/oauth/auth",
+ "expires": 99999999900,
+ "jti": "used_jti"
+ }
+ ],
+ "supported_scopes" : [
+ "scope1",
+ "scope2",
+ "scope3",
+ "clientscope1",
+ "clientscope2",
+ "clientscope3",
+ "supportedscope1",
+ "supportedscope2",
+ "supportedscope3",
+ "supportedscope4"
+ ],
+ "keys": {
+ "public_key": "-----BEGIN CERTIFICATE-----\nMIICiDCCAfGgAwIBAgIBADANBgkqhkiG9w0BAQQFADA9MQswCQYDVQQGEwJVUzEL\nMAkGA1UECBMCVVQxITAfBgNVBAoTGFZpZ25ldHRlIENvcnBvcmF0aW9uIFNCWDAe\nFw0xMTEwMTUwMzE4MjdaFw0zMTEwMTAwMzE4MjdaMD0xCzAJBgNVBAYTAlVTMQsw\nCQYDVQQIEwJVVDEhMB8GA1UEChMYVmlnbmV0dGUgQ29ycG9yYXRpb24gU0JYMIGf\nMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8fpi06NfVYHAOAnxNMVnTXr/ptsLs\nNjP+uAt2eO0cc5J9H5XV8lFVujOrRu/JWi1TDmAvOaf/6A3BphIA1Pwp0AAqlZdw\nizIum8j0KzpsGYH5qReNQDwF3oUSKMsQCCGCDHrDYifG/pRi9bN1ZVjEXPr35HJu\nBe+FQpZTs8DewwIDAQABo4GXMIGUMB0GA1UdDgQWBBRe8hrEXm+Yim4YlD5Nx+1K\nvCYs9DBlBgNVHSMEXjBcgBRe8hrEXm+Yim4YlD5Nx+1KvCYs9KFBpD8wPTELMAkG\nA1UEBhMCVVMxCzAJBgNVBAgTAlVUMSEwHwYDVQQKExhWaWduZXR0ZSBDb3Jwb3Jh\ndGlvbiBTQliCAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQBjhyRD\nlM7vnLn6drgQVftW5V9nDFAyPAuiGvMIKFSbiAf1PxXCRn5sfJquwWKsJUi4ZGNl\naViXdFmN6/F13PSM+yg63tpKy0fYqMbTM+Oe5WuSHkSW1VuYNHV+24adgNk/FRDL\nFRrlM1f6s9VTLWvwGItjfrof0Ba8Uq7ZDSb9Xg==\n-----END CERTIFICATE-----",
+ "private_key": "-----BEGIN RSA PRIVATE KEY-----\nMIICXQIBAAKBgQC8fpi06NfVYHAOAnxNMVnTXr/ptsLsNjP+uAt2eO0cc5J9H5XV\n8lFVujOrRu/JWi1TDmAvOaf/6A3BphIA1Pwp0AAqlZdwizIum8j0KzpsGYH5qReN\nQDwF3oUSKMsQCCGCDHrDYifG/pRi9bN1ZVjEXPr35HJuBe+FQpZTs8DewwIDAQAB\nAoGARfNxNknmtx/n1bskZ/01iZRzAge6BLEE0LV6Q4gS7mkRZu/Oyiv39Sl5vUlA\n+WdGxLjkBwKNjxGN8Vxw9/ASd8rSsqeAUYIwAeifXrHhj5DBPQT/pDPkeFnp9B1w\nC6jo+3AbBQ4/b0ONSIEnCL2xGGglSIAxO17T1ViXp7lzXPECQQDe63nkRdWM0OCb\noaHQPT3E26224maIstrGFUdt9yw3yJf4bOF7TtiPLlLuHsTTge3z+fG6ntC0xG56\n1cl37C3ZAkEA2HdVcRGugNp/qmVz4LJTpD+WZKi73PLAO47wDOrYh9Pn2I6fcEH0\nCPnggt1ko4ujvGzFTvRH64HXa6aPCv1j+wJBAMQMah3VQPNf/DlDVFEUmw9XeBZg\nVHaifX851aEjgXLp6qVj9IYCmLiLsAmVa9rr6P7p8asD418nZlaHUHE0eDkCQQCr\nuxis6GMx1Ka971jcJX2X696LoxXPd0KsvXySMupv79yagKPa8mgBiwPjrnK+EPVo\ncj6iochA/bSCshP/mwFrAkBHEKPi6V6gb94JinCT7x3weahbdp6bJ6/nzBH/p9VA\nHoT1JtwNFhGv9BCjmDydshQHfSWpY9NxlccBKL7ITm8R\n-----END RSA PRIVATE KEY-----"
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Request/TestRequest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Request/TestRequest.php
new file mode 100644
index 0000000..a916ff2
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Request/TestRequest.php
@@ -0,0 +1,66 @@
+<?php
+
+namespace OAuth2\Request;
+
+use OAuth2\Request;
+use OAuth2\RequestInterface;
+
+/**
+*
+*/
+class TestRequest extends Request implements RequestInterface
+{
+ public $query, $request, $server, $headers;
+
+ public function __construct()
+ {
+ $this->query = $_GET;
+ $this->request = $_POST;
+ $this->server = $_SERVER;
+ $this->headers = array();
+ }
+
+ public function query($name, $default = null)
+ {
+ return isset($this->query[$name]) ? $this->query[$name] : $default;
+ }
+
+ public function request($name, $default = null)
+ {
+ return isset($this->request[$name]) ? $this->request[$name] : $default;
+ }
+
+ public function server($name, $default = null)
+ {
+ return isset($this->server[$name]) ? $this->server[$name] : $default;
+ }
+
+ public function getAllQueryParameters()
+ {
+ return $this->query;
+ }
+
+ public function setQuery(array $query)
+ {
+ $this->query = $query;
+ }
+
+ public function setMethod($method)
+ {
+ $this->server['REQUEST_METHOD'] = $method;
+ }
+
+ public function setPost(array $params)
+ {
+ $this->setMethod('POST');
+ $this->request = $params;
+ }
+
+ public static function createPost(array $params = array())
+ {
+ $request = new self();
+ $request->setPost($params);
+
+ return $request;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Storage/BaseTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Storage/BaseTest.php
new file mode 100755
index 0000000..e841d3a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Storage/BaseTest.php
@@ -0,0 +1,38 @@
+<?php
+
+namespace OAuth2\Storage;
+
+use PHPUnit\Framework\TestCase;
+
+abstract class BaseTest extends TestCase
+{
+ public function provideStorage()
+ {
+ $memory = Bootstrap::getInstance()->getMemoryStorage();
+ $sqlite = Bootstrap::getInstance()->getSqlitePdo();
+ $mysql = Bootstrap::getInstance()->getMysqlPdo();
+ $postgres = Bootstrap::getInstance()->getPostgresPdo();
+ $mongo = Bootstrap::getInstance()->getMongo();
+ $mongoDb = Bootstrap::getInstance()->getMongoDB();
+ $redis = Bootstrap::getInstance()->getRedisStorage();
+ $cassandra = Bootstrap::getInstance()->getCassandraStorage();
+ $dynamodb = Bootstrap::getInstance()->getDynamoDbStorage();
+ $couchbase = Bootstrap::getInstance()->getCouchbase();
+
+ /* hack until we can fix "default_scope" dependencies in other tests */
+ $memory->defaultScope = 'defaultscope1 defaultscope2';
+
+ return array(
+ array($memory),
+ array($sqlite),
+ array($mysql),
+ array($postgres),
+ array($mongo),
+ array($mongoDb),
+ array($redis),
+ array($cassandra),
+ array($dynamodb),
+ array($couchbase),
+ );
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Storage/Bootstrap.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Storage/Bootstrap.php
new file mode 100755
index 0000000..8e428f9
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Storage/Bootstrap.php
@@ -0,0 +1,967 @@
+<?php
+
+namespace OAuth2\Storage;
+
+class Bootstrap
+{
+ const DYNAMODB_PHP_VERSION = 'none';
+
+ protected static $instance;
+ private $mysql;
+ private $sqlite;
+ private $postgres;
+ private $mongo;
+ private $mongoDb;
+ private $redis;
+ private $cassandra;
+ private $configDir;
+ private $dynamodb;
+ private $couchbase;
+
+ public function __construct()
+ {
+ $this->configDir = __DIR__.'/../../../config';
+ }
+
+ public static function getInstance()
+ {
+ if (!self::$instance) {
+ self::$instance = new self();
+ }
+
+ return self::$instance;
+ }
+
+ public function getSqlitePdo()
+ {
+ if (!$this->sqlite) {
+ $this->removeSqliteDb();
+ $pdo = new \PDO(sprintf('sqlite:%s', $this->getSqliteDir()));
+ $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
+ $this->createSqliteDb($pdo);
+
+ $this->sqlite = new Pdo($pdo);
+ }
+
+ return $this->sqlite;
+ }
+
+ public function getPostgresPdo()
+ {
+ if (!$this->postgres) {
+ if (in_array('pgsql', \PDO::getAvailableDrivers())) {
+ $this->removePostgresDb();
+ $this->createPostgresDb();
+ if ($pdo = $this->getPostgresDriver()) {
+ $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
+ $this->populatePostgresDb($pdo);
+ $this->postgres = new Pdo($pdo);
+ }
+ } else {
+ $this->postgres = new NullStorage('Postgres', 'Missing postgres PDO extension.');
+ }
+ }
+
+ return $this->postgres;
+ }
+
+ public function getPostgresDriver()
+ {
+ try {
+ $pdo = new \PDO('pgsql:host=localhost;dbname=oauth2_server_php', 'postgres');
+
+ return $pdo;
+ } catch (\PDOException $e) {
+ $this->postgres = new NullStorage('Postgres', $e->getMessage());
+ }
+ }
+
+ public function getMemoryStorage()
+ {
+ return new Memory(json_decode(file_get_contents($this->configDir. '/storage.json'), true));
+ }
+
+ public function getRedisStorage()
+ {
+ if (!$this->redis) {
+ if (class_exists('Predis\Client')) {
+ $redis = new \Predis\Client();
+ if ($this->testRedisConnection($redis)) {
+ $redis->flushdb();
+ $this->redis = new Redis($redis);
+ $this->createRedisDb($this->redis);
+ } else {
+ $this->redis = new NullStorage('Redis', 'Unable to connect to redis server on port 6379');
+ }
+ } else {
+ $this->redis = new NullStorage('Redis', 'Missing redis library. Please run "composer.phar require predis/predis:dev-master"');
+ }
+ }
+
+ return $this->redis;
+ }
+
+ private function testRedisConnection(\Predis\Client $redis)
+ {
+ try {
+ $redis->connect();
+ } catch (\Predis\CommunicationException $exception) {
+ // we were unable to connect to the redis server
+ return false;
+ }
+
+ return true;
+ }
+
+ public function getMysqlPdo()
+ {
+ if (!$this->mysql) {
+ $pdo = null;
+ try {
+ $pdo = new \PDO('mysql:host=localhost;', 'root');
+ } catch (\PDOException $e) {
+ $this->mysql = new NullStorage('MySQL', 'Unable to connect to MySQL on root@localhost');
+ }
+
+ if ($pdo) {
+ $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
+ $this->removeMysqlDb($pdo);
+ $this->createMysqlDb($pdo);
+
+ $this->mysql = new Pdo($pdo);
+ }
+ }
+
+ return $this->mysql;
+ }
+
+ public function getMongo()
+ {
+ if (!$this->mongo) {
+ if (class_exists('MongoClient')) {
+ $mongo = new \MongoClient('mongodb://localhost:27017', array('connect' => false));
+ if ($this->testMongoConnection($mongo)) {
+ $db = $mongo->oauth2_server_php_legacy;
+ $this->removeMongo($db);
+ $this->createMongo($db);
+
+ $this->mongo = new Mongo($db);
+ } else {
+ $this->mongo = new NullStorage('Mongo', 'Unable to connect to mongo server on "localhost:27017"');
+ }
+ } else {
+ $this->mongo = new NullStorage('Mongo', 'Missing mongo php extension. Please install mongo.so');
+ }
+ }
+
+ return $this->mongo;
+ }
+
+ public function getMongoDb()
+ {
+ if (!$this->mongoDb) {
+ if (class_exists('MongoDB\Client')) {
+ $mongoDb = new \MongoDB\Client('mongodb://localhost:27017');
+ if ($this->testMongoDBConnection($mongoDb)) {
+ $db = $mongoDb->oauth2_server_php;
+ $this->removeMongoDb($db);
+ $this->createMongoDb($db);
+
+ $this->mongoDb = new MongoDB($db);
+ } else {
+ $this->mongoDb = new NullStorage('MongoDB', 'Unable to connect to mongo server on "localhost:27017"');
+ }
+ } else {
+ $this->mongoDb = new NullStorage('MongoDB', 'Missing MongoDB php extension. Please install mongodb.so');
+ }
+ }
+
+ return $this->mongoDb;
+ }
+
+ private function testMongoConnection(\MongoClient $mongo)
+ {
+ try {
+ $mongo->connect();
+ } catch (\MongoConnectionException $e) {
+ return false;
+ }
+
+ return true;
+ }
+
+ private function testMongoDBConnection(\MongoDB\Client $mongo)
+ {
+ return true;
+ }
+
+ public function getCouchbase()
+ {
+ if (!$this->couchbase) {
+ if ($this->getEnvVar('SKIP_COUCHBASE_TESTS')) {
+ $this->couchbase = new NullStorage('Couchbase', 'Skipping Couchbase tests');
+ } elseif (!class_exists('Couchbase')) {
+ $this->couchbase = new NullStorage('Couchbase', 'Missing Couchbase php extension. Please install couchbase.so');
+ } else {
+ // round-about way to make sure couchbase is working
+ // this is required because it throws a "floating point exception" otherwise
+ $code = "new \Couchbase(array('localhost:8091'), '', '', 'auth', false);";
+ $exec = sprintf('php -r "%s"', $code);
+ $ret = exec($exec, $test, $var);
+ if ($ret != 0) {
+ $couchbase = new \Couchbase(array('localhost:8091'), '', '', 'auth', false);
+ if ($this->testCouchbaseConnection($couchbase)) {
+ $this->clearCouchbase($couchbase);
+ $this->createCouchbaseDB($couchbase);
+
+ $this->couchbase = new CouchbaseDB($couchbase);
+ } else {
+ $this->couchbase = new NullStorage('Couchbase', 'Unable to connect to Couchbase server on "localhost:8091"');
+ }
+ } else {
+ $this->couchbase = new NullStorage('Couchbase', 'Error while trying to connect to Couchbase');
+ }
+ }
+ }
+
+ return $this->couchbase;
+ }
+
+ private function testCouchbaseConnection(\Couchbase $couchbase)
+ {
+ try {
+ if (count($couchbase->getServers()) > 0) {
+ return true;
+ }
+ } catch (\CouchbaseException $e) {
+ return false;
+ }
+
+ return true;
+ }
+
+ public function getCassandraStorage()
+ {
+ if (!$this->cassandra) {
+ if (class_exists('phpcassa\ColumnFamily')) {
+ $cassandra = new \phpcassa\Connection\ConnectionPool('oauth2_test', array('127.0.0.1:9160'));
+ if ($this->testCassandraConnection($cassandra)) {
+ $this->removeCassandraDb();
+ $this->cassandra = new Cassandra($cassandra);
+ $this->createCassandraDb($this->cassandra);
+ } else {
+ $this->cassandra = new NullStorage('Cassandra', 'Unable to connect to cassandra server on "127.0.0.1:9160"');
+ }
+ } else {
+ $this->cassandra = new NullStorage('Cassandra', 'Missing cassandra library. Please run "composer.phar require thobbs/phpcassa:dev-master"');
+ }
+ }
+
+ return $this->cassandra;
+ }
+
+ private function testCassandraConnection(\phpcassa\Connection\ConnectionPool $cassandra)
+ {
+ try {
+ new \phpcassa\SystemManager('localhost:9160');
+ } catch (\Exception $e) {
+ return false;
+ }
+
+ return true;
+ }
+
+ private function removeCassandraDb()
+ {
+ $sys = new \phpcassa\SystemManager('localhost:9160');
+
+ try {
+ $sys->drop_keyspace('oauth2_test');
+ } catch (\cassandra\InvalidRequestException $e) {
+
+ }
+ }
+
+ private function createCassandraDb(Cassandra $storage)
+ {
+ // create the cassandra keyspace and column family
+ $sys = new \phpcassa\SystemManager('localhost:9160');
+
+ $sys->create_keyspace('oauth2_test', array(
+ "strategy_class" => \phpcassa\Schema\StrategyClass::SIMPLE_STRATEGY,
+ "strategy_options" => array('replication_factor' => '1')
+ ));
+
+ $sys->create_column_family('oauth2_test', 'auth');
+ $cassandra = new \phpcassa\Connection\ConnectionPool('oauth2_test', array('127.0.0.1:9160'));
+ $cf = new \phpcassa\ColumnFamily($cassandra, 'auth');
+
+ // populate the data
+ $storage->setClientDetails("oauth_test_client", "testpass", "http://example.com", 'implicit password');
+ $storage->setAccessToken("testtoken", "Some Client", '', time() + 1000);
+ $storage->setAuthorizationCode("testcode", "Some Client", '', '', time() + 1000);
+
+ $storage->setScope('supportedscope1 supportedscope2 supportedscope3 supportedscope4');
+ $storage->setScope('defaultscope1 defaultscope2', null, 'default');
+
+ $storage->setScope('clientscope1 clientscope2', 'Test Client ID');
+ $storage->setScope('clientscope1 clientscope2', 'Test Client ID', 'default');
+
+ $storage->setScope('clientscope1 clientscope2 clientscope3', 'Test Client ID 2');
+ $storage->setScope('clientscope1 clientscope2', 'Test Client ID 2', 'default');
+
+ $storage->setScope('clientscope1 clientscope2', 'Test Default Scope Client ID');
+ $storage->setScope('clientscope1 clientscope2', 'Test Default Scope Client ID', 'default');
+
+ $storage->setScope('clientscope1 clientscope2 clientscope3', 'Test Default Scope Client ID 2');
+ $storage->setScope('clientscope3', 'Test Default Scope Client ID 2', 'default');
+
+ $storage->setClientKey('oauth_test_client', $this->getTestPublicKey(), 'test_subject');
+
+ $cf->insert("oauth_public_keys:ClientID_One", array('__data' => json_encode(array("public_key" => "client_1_public", "private_key" => "client_1_private", "encryption_algorithm" => "RS256"))));
+ $cf->insert("oauth_public_keys:ClientID_Two", array('__data' => json_encode(array("public_key" => "client_2_public", "private_key" => "client_2_private", "encryption_algorithm" => "RS256"))));
+ $cf->insert("oauth_public_keys:", array('__data' => json_encode(array("public_key" => $this->getTestPublicKey(), "private_key" => $this->getTestPrivateKey(), "encryption_algorithm" => "RS256"))));
+
+ $cf->insert("oauth_users:testuser", array('__data' =>json_encode(array("password" => "password", "email" => "testuser@test.com", "email_verified" => true))));
+
+ }
+
+ private function createSqliteDb(\PDO $pdo)
+ {
+ $this->runPdoSql($pdo);
+ }
+
+ private function removeSqliteDb()
+ {
+ if (file_exists($this->getSqliteDir())) {
+ unlink($this->getSqliteDir());
+ }
+ }
+
+ private function createMysqlDb(\PDO $pdo)
+ {
+ $pdo->exec('CREATE DATABASE oauth2_server_php');
+ $pdo->exec('USE oauth2_server_php');
+ $this->runPdoSql($pdo);
+ }
+
+ private function removeMysqlDb(\PDO $pdo)
+ {
+ $pdo->exec('DROP DATABASE IF EXISTS oauth2_server_php');
+ }
+
+ private function createPostgresDb()
+ {
+ if (!`psql postgres -tAc "SELECT 1 FROM pg_roles WHERE rolname='postgres'"`) {
+ `createuser -s -r postgres`;
+ }
+
+ `createdb -O postgres oauth2_server_php`;
+ }
+
+ private function populatePostgresDb(\PDO $pdo)
+ {
+ $this->runPdoSql($pdo);
+ }
+
+ private function removePostgresDb()
+ {
+ if (trim(`psql -l | grep oauth2_server_php | wc -l`)) {
+ `dropdb oauth2_server_php`;
+ }
+ }
+
+ public function runPdoSql(\PDO $pdo)
+ {
+ $storage = new Pdo($pdo);
+ foreach (explode(';', $storage->getBuildSql()) as $statement) {
+ $result = $pdo->exec($statement);
+ }
+
+ // set up scopes
+ $sql = 'INSERT INTO oauth_scopes (scope) VALUES (?)';
+ foreach (explode(' ', 'supportedscope1 supportedscope2 supportedscope3 supportedscope4 clientscope1 clientscope2 clientscope3') as $supportedScope) {
+ $pdo->prepare($sql)->execute(array($supportedScope));
+ }
+
+ $sql = 'INSERT INTO oauth_scopes (scope, is_default) VALUES (?, ?)';
+ foreach (array('defaultscope1', 'defaultscope2') as $defaultScope) {
+ $pdo->prepare($sql)->execute(array($defaultScope, true));
+ }
+
+ // set up clients
+ $sql = 'INSERT INTO oauth_clients (client_id, client_secret, scope, grant_types) VALUES (?, ?, ?, ?)';
+ $pdo->prepare($sql)->execute(array('Test Client ID', 'TestSecret', 'clientscope1 clientscope2', null));
+ $pdo->prepare($sql)->execute(array('Test Client ID 2', 'TestSecret', 'clientscope1 clientscope2 clientscope3', null));
+ $pdo->prepare($sql)->execute(array('Test Default Scope Client ID', 'TestSecret', 'clientscope1 clientscope2', null));
+ $pdo->prepare($sql)->execute(array('oauth_test_client', 'testpass', null, 'implicit password'));
+
+ // set up misc
+ $sql = 'INSERT INTO oauth_access_tokens (access_token, client_id, expires, user_id) VALUES (?, ?, ?, ?)';
+ $pdo->prepare($sql)->execute(array('testtoken', 'Some Client', date('Y-m-d H:i:s', strtotime('+1 hour')), null));
+ $pdo->prepare($sql)->execute(array('accesstoken-openid-connect', 'Some Client', date('Y-m-d H:i:s', strtotime('+1 hour')), 'testuser'));
+
+ $sql = 'INSERT INTO oauth_authorization_codes (authorization_code, client_id, expires) VALUES (?, ?, ?)';
+ $pdo->prepare($sql)->execute(array('testcode', 'Some Client', date('Y-m-d H:i:s', strtotime('+1 hour'))));
+
+ $sql = 'INSERT INTO oauth_users (username, password, email, email_verified) VALUES (?, ?, ?, ?)';
+ $pdo->prepare($sql)->execute(array('testuser', 'password', 'testuser@test.com', true));
+
+ $sql = 'INSERT INTO oauth_public_keys (client_id, public_key, private_key, encryption_algorithm) VALUES (?, ?, ?, ?)';
+ $pdo->prepare($sql)->execute(array('ClientID_One', 'client_1_public', 'client_1_private', 'RS256'));
+ $pdo->prepare($sql)->execute(array('ClientID_Two', 'client_2_public', 'client_2_private', 'RS256'));
+
+ $sql = 'INSERT INTO oauth_public_keys (client_id, public_key, private_key, encryption_algorithm) VALUES (?, ?, ?, ?)';
+ $pdo->prepare($sql)->execute(array(null, $this->getTestPublicKey(), $this->getTestPrivateKey(), 'RS256'));
+
+ $sql = 'INSERT INTO oauth_jwt (client_id, subject, public_key) VALUES (?, ?, ?)';
+ $pdo->prepare($sql)->execute(array('oauth_test_client', 'test_subject', $this->getTestPublicKey()));
+ }
+
+ public function getSqliteDir()
+ {
+ return $this->configDir. '/test.sqlite';
+ }
+
+ public function getConfigDir()
+ {
+ return $this->configDir;
+ }
+
+ private function createCouchbaseDB(\Couchbase $db)
+ {
+ $db->set('oauth_clients-oauth_test_client',json_encode(array(
+ 'client_id' => "oauth_test_client",
+ 'client_secret' => "testpass",
+ 'redirect_uri' => "http://example.com",
+ 'grant_types' => 'implicit password'
+ )));
+
+ $db->set('oauth_access_tokens-testtoken',json_encode(array(
+ 'access_token' => "testtoken",
+ 'client_id' => "Some Client"
+ )));
+
+ $db->set('oauth_authorization_codes-testcode',json_encode(array(
+ 'access_token' => "testcode",
+ 'client_id' => "Some Client"
+ )));
+
+ $db->set('oauth_users-testuser',json_encode(array(
+ 'username' => 'testuser',
+ 'password' => 'password',
+ 'email' => 'testuser@test.com',
+ 'email_verified' => true,
+ )));
+
+ $db->set('oauth_jwt-oauth_test_client',json_encode(array(
+ 'client_id' => 'oauth_test_client',
+ 'key' => $this->getTestPublicKey(),
+ 'subject' => 'test_subject',
+ )));
+ }
+
+ private function clearCouchbase(\Couchbase $cb)
+ {
+ $cb->delete('oauth_authorization_codes-new-openid-code');
+ $cb->delete('oauth_access_tokens-newtoken');
+ $cb->delete('oauth_authorization_codes-newcode');
+ $cb->delete('oauth_refresh_tokens-refreshtoken');
+ }
+
+ private function createMongo(\MongoDB $db)
+ {
+ $db->oauth_clients->insert(array(
+ 'client_id' => "oauth_test_client",
+ 'client_secret' => "testpass",
+ 'redirect_uri' => "http://example.com",
+ 'grant_types' => 'implicit password'
+ ));
+
+ $db->oauth_access_tokens->insert(array(
+ 'access_token' => "testtoken",
+ 'client_id' => "Some Client"
+ ));
+
+ $db->oauth_authorization_codes->insert(array(
+ 'authorization_code' => "testcode",
+ 'client_id' => "Some Client"
+ ));
+
+ $db->oauth_users->insert(array(
+ 'username' => 'testuser',
+ 'password' => 'password',
+ 'email' => 'testuser@test.com',
+ 'email_verified' => true,
+ ));
+
+ $db->oauth_keys->insert(array(
+ 'client_id' => null,
+ 'public_key' => $this->getTestPublicKey(),
+ 'private_key' => $this->getTestPrivateKey(),
+ 'encryption_algorithm' => 'RS256'
+ ));
+
+ $db->oauth_jwt->insert(array(
+ 'client_id' => 'oauth_test_client',
+ 'key' => $this->getTestPublicKey(),
+ 'subject' => 'test_subject',
+ ));
+ }
+
+ public function removeMongo(\MongoDB $db)
+ {
+ $db->drop();
+ }
+
+ private function createMongoDB(\MongoDB\Database $db)
+ {
+ $db->oauth_clients->insertOne(array(
+ 'client_id' => "oauth_test_client",
+ 'client_secret' => "testpass",
+ 'redirect_uri' => "http://example.com",
+ 'grant_types' => 'implicit password'
+ ));
+
+ $db->oauth_access_tokens->insertOne(array(
+ 'access_token' => "testtoken",
+ 'client_id' => "Some Client"
+ ));
+
+ $db->oauth_authorization_codes->insertOne(array(
+ 'authorization_code' => "testcode",
+ 'client_id' => "Some Client"
+ ));
+
+ $db->oauth_users->insertOne(array(
+ 'username' => 'testuser',
+ 'password' => 'password',
+ 'email' => 'testuser@test.com',
+ 'email_verified' => true,
+ ));
+
+ $db->oauth_keys->insertOne(array(
+ 'client_id' => null,
+ 'public_key' => $this->getTestPublicKey(),
+ 'private_key' => $this->getTestPrivateKey(),
+ 'encryption_algorithm' => 'RS256'
+ ));
+
+ $db->oauth_jwt->insertOne(array(
+ 'client_id' => 'oauth_test_client',
+ 'key' => $this->getTestPublicKey(),
+ 'subject' => 'test_subject',
+ ));
+ }
+
+ public function removeMongoDB(\MongoDB\Database $db)
+ {
+ $db->drop();
+ }
+
+ private function createRedisDb(Redis $storage)
+ {
+ $storage->setClientDetails("oauth_test_client", "testpass", "http://example.com", 'implicit password');
+ $storage->setAccessToken("testtoken", "Some Client", '', time() + 1000);
+ $storage->setAuthorizationCode("testcode", "Some Client", '', '', time() + 1000);
+ $storage->setUser("testuser", "password");
+
+ $storage->setScope('supportedscope1 supportedscope2 supportedscope3 supportedscope4');
+ $storage->setScope('defaultscope1 defaultscope2', null, 'default');
+
+ $storage->setScope('clientscope1 clientscope2', 'Test Client ID');
+ $storage->setScope('clientscope1 clientscope2', 'Test Client ID', 'default');
+
+ $storage->setScope('clientscope1 clientscope2 clientscope3', 'Test Client ID 2');
+ $storage->setScope('clientscope1 clientscope2', 'Test Client ID 2', 'default');
+
+ $storage->setScope('clientscope1 clientscope2', 'Test Default Scope Client ID');
+ $storage->setScope('clientscope1 clientscope2', 'Test Default Scope Client ID', 'default');
+
+ $storage->setScope('clientscope1 clientscope2 clientscope3', 'Test Default Scope Client ID 2');
+ $storage->setScope('clientscope3', 'Test Default Scope Client ID 2', 'default');
+
+ $storage->setClientKey('oauth_test_client', $this->getTestPublicKey(), 'test_subject');
+ }
+
+ public function getTestPublicKey()
+ {
+ return file_get_contents(__DIR__.'/../../../config/keys/id_rsa.pub');
+ }
+
+ private function getTestPrivateKey()
+ {
+ return file_get_contents(__DIR__.'/../../../config/keys/id_rsa');
+ }
+
+ public function getDynamoDbStorage()
+ {
+ if (!$this->dynamodb) {
+ // only run once per travis build
+ if (true == $this->getEnvVar('TRAVIS')) {
+ if (self::DYNAMODB_PHP_VERSION != $this->getEnvVar('TRAVIS_PHP_VERSION')) {
+ $this->dynamodb = new NullStorage('DynamoDb', 'Skipping for travis.ci - only run once per build');
+
+ return;
+ }
+ }
+ if (class_exists('\Aws\DynamoDb\DynamoDbClient')) {
+ if ($client = $this->getDynamoDbClient()) {
+ // travis runs a unique set of tables per build, to avoid conflict
+ $prefix = '';
+ if ($build_id = $this->getEnvVar('TRAVIS_JOB_NUMBER')) {
+ $prefix = sprintf('build_%s_', $build_id);
+ } else {
+ if (!$this->deleteDynamoDb($client, $prefix, true)) {
+ return $this->dynamodb = new NullStorage('DynamoDb', 'Timed out while waiting for DynamoDB deletion (30 seconds)');
+ }
+ }
+ $this->createDynamoDb($client, $prefix);
+ $this->populateDynamoDb($client, $prefix);
+ $config = array(
+ 'client_table' => $prefix.'oauth_clients',
+ 'access_token_table' => $prefix.'oauth_access_tokens',
+ 'refresh_token_table' => $prefix.'oauth_refresh_tokens',
+ 'code_table' => $prefix.'oauth_authorization_codes',
+ 'user_table' => $prefix.'oauth_users',
+ 'jwt_table' => $prefix.'oauth_jwt',
+ 'scope_table' => $prefix.'oauth_scopes',
+ 'public_key_table' => $prefix.'oauth_public_keys',
+ );
+ $this->dynamodb = new DynamoDB($client, $config);
+ } elseif (!$this->dynamodb) {
+ $this->dynamodb = new NullStorage('DynamoDb', 'unable to connect to DynamoDB');
+ }
+ } else {
+ $this->dynamodb = new NullStorage('DynamoDb', 'Missing DynamoDB library. Please run "composer.phar require aws/aws-sdk-php:dev-master');
+ }
+ }
+
+ return $this->dynamodb;
+ }
+
+ private function getDynamoDbClient()
+ {
+ $config = array();
+ // check for environment variables
+ if (($key = $this->getEnvVar('AWS_ACCESS_KEY_ID')) && ($secret = $this->getEnvVar('AWS_SECRET_KEY'))) {
+ $config['key'] = $key;
+ $config['secret'] = $secret;
+ } else {
+ // fall back on ~/.aws/credentials file
+ // @see http://docs.aws.amazon.com/aws-sdk-php/guide/latest/credentials.html#credential-profiles
+ if (!file_exists($this->getEnvVar('HOME') . '/.aws/credentials')) {
+ $this->dynamodb = new NullStorage('DynamoDb', 'No aws credentials file found, and no AWS_ACCESS_KEY_ID or AWS_SECRET_KEY environment variable set');
+
+ return;
+ }
+
+ // set profile in AWS_PROFILE environment variable, defaults to "default"
+ $config['profile'] = $this->getEnvVar('AWS_PROFILE', 'default');
+ }
+
+ // set region in AWS_REGION environment variable, defaults to "us-east-1"
+ $config['region'] = $this->getEnvVar('AWS_REGION', \Aws\Common\Enum\Region::US_EAST_1);
+
+ return \Aws\DynamoDb\DynamoDbClient::factory($config);
+ }
+
+ private function deleteDynamoDb(\Aws\DynamoDb\DynamoDbClient $client, $prefix = null, $waitForDeletion = false)
+ {
+ $tablesList = explode(' ', 'oauth_access_tokens oauth_authorization_codes oauth_clients oauth_jwt oauth_public_keys oauth_refresh_tokens oauth_scopes oauth_users');
+ $nbTables = count($tablesList);
+
+ // Delete all table.
+ foreach ($tablesList as $key => $table) {
+ try {
+ $client->deleteTable(array('TableName' => $prefix.$table));
+ } catch (\Aws\DynamoDb\Exception\DynamoDbException $e) {
+ // Table does not exist : nothing to do
+ }
+ }
+
+ // Wait for deleting
+ if ($waitForDeletion) {
+ $retries = 5;
+ $nbTableDeleted = 0;
+ while ($nbTableDeleted != $nbTables) {
+ $nbTableDeleted = 0;
+ foreach ($tablesList as $key => $table) {
+ try {
+ $result = $client->describeTable(array('TableName' => $prefix.$table));
+ } catch (\Aws\DynamoDb\Exception\DynamoDbException $e) {
+ // Table does not exist : nothing to do
+ $nbTableDeleted++;
+ }
+ }
+ if ($nbTableDeleted != $nbTables) {
+ if ($retries < 0) {
+ // we are tired of waiting
+ return false;
+ }
+ sleep(5);
+ echo "Sleeping 5 seconds for DynamoDB ($retries more retries)...\n";
+ $retries--;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ private function createDynamoDb(\Aws\DynamoDb\DynamoDbClient $client, $prefix = null)
+ {
+ $tablesList = explode(' ', 'oauth_access_tokens oauth_authorization_codes oauth_clients oauth_jwt oauth_public_keys oauth_refresh_tokens oauth_scopes oauth_users');
+ $nbTables = count($tablesList);
+ $client->createTable(array(
+ 'TableName' => $prefix.'oauth_access_tokens',
+ 'AttributeDefinitions' => array(
+ array('AttributeName' => 'access_token','AttributeType' => 'S')
+ ),
+ 'KeySchema' => array(array('AttributeName' => 'access_token','KeyType' => 'HASH')),
+ 'ProvisionedThroughput' => array('ReadCapacityUnits' => 1,'WriteCapacityUnits' => 1)
+ ));
+
+ $client->createTable(array(
+ 'TableName' => $prefix.'oauth_authorization_codes',
+ 'AttributeDefinitions' => array(
+ array('AttributeName' => 'authorization_code','AttributeType' => 'S')
+ ),
+ 'KeySchema' => array(array('AttributeName' => 'authorization_code','KeyType' => 'HASH')),
+ 'ProvisionedThroughput' => array('ReadCapacityUnits' => 1,'WriteCapacityUnits' => 1)
+ ));
+
+ $client->createTable(array(
+ 'TableName' => $prefix.'oauth_clients',
+ 'AttributeDefinitions' => array(
+ array('AttributeName' => 'client_id','AttributeType' => 'S')
+ ),
+ 'KeySchema' => array(array('AttributeName' => 'client_id','KeyType' => 'HASH')),
+ 'ProvisionedThroughput' => array('ReadCapacityUnits' => 1,'WriteCapacityUnits' => 1)
+ ));
+
+ $client->createTable(array(
+ 'TableName' => $prefix.'oauth_jwt',
+ 'AttributeDefinitions' => array(
+ array('AttributeName' => 'client_id','AttributeType' => 'S'),
+ array('AttributeName' => 'subject','AttributeType' => 'S')
+ ),
+ 'KeySchema' => array(
+ array('AttributeName' => 'client_id','KeyType' => 'HASH'),
+ array('AttributeName' => 'subject','KeyType' => 'RANGE')
+ ),
+ 'ProvisionedThroughput' => array('ReadCapacityUnits' => 1,'WriteCapacityUnits' => 1)
+ ));
+
+ $client->createTable(array(
+ 'TableName' => $prefix.'oauth_public_keys',
+ 'AttributeDefinitions' => array(
+ array('AttributeName' => 'client_id','AttributeType' => 'S')
+ ),
+ 'KeySchema' => array(array('AttributeName' => 'client_id','KeyType' => 'HASH')),
+ 'ProvisionedThroughput' => array('ReadCapacityUnits' => 1,'WriteCapacityUnits' => 1)
+ ));
+
+ $client->createTable(array(
+ 'TableName' => $prefix.'oauth_refresh_tokens',
+ 'AttributeDefinitions' => array(
+ array('AttributeName' => 'refresh_token','AttributeType' => 'S')
+ ),
+ 'KeySchema' => array(array('AttributeName' => 'refresh_token','KeyType' => 'HASH')),
+ 'ProvisionedThroughput' => array('ReadCapacityUnits' => 1,'WriteCapacityUnits' => 1)
+ ));
+
+ $client->createTable(array(
+ 'TableName' => $prefix.'oauth_scopes',
+ 'AttributeDefinitions' => array(
+ array('AttributeName' => 'scope','AttributeType' => 'S'),
+ array('AttributeName' => 'is_default','AttributeType' => 'S')
+ ),
+ 'KeySchema' => array(array('AttributeName' => 'scope','KeyType' => 'HASH')),
+ 'GlobalSecondaryIndexes' => array(
+ array(
+ 'IndexName' => 'is_default-index',
+ 'KeySchema' => array(array('AttributeName' => 'is_default', 'KeyType' => 'HASH')),
+ 'Projection' => array('ProjectionType' => 'ALL'),
+ 'ProvisionedThroughput' => array('ReadCapacityUnits' => 1,'WriteCapacityUnits' => 1)
+ ),
+ ),
+ 'ProvisionedThroughput' => array('ReadCapacityUnits' => 1,'WriteCapacityUnits' => 1)
+ ));
+
+ $client->createTable(array(
+ 'TableName' => $prefix.'oauth_users',
+ 'AttributeDefinitions' => array(array('AttributeName' => 'username','AttributeType' => 'S')),
+ 'KeySchema' => array(array('AttributeName' => 'username','KeyType' => 'HASH')),
+ 'ProvisionedThroughput' => array('ReadCapacityUnits' => 1,'WriteCapacityUnits' => 1)
+ ));
+
+ // Wait for creation
+ $nbTableCreated = 0;
+ while ($nbTableCreated != $nbTables) {
+ $nbTableCreated = 0;
+ foreach ($tablesList as $key => $table) {
+ try {
+ $result = $client->describeTable(array('TableName' => $prefix.$table));
+ if ($result['Table']['TableStatus'] == 'ACTIVE') {
+ $nbTableCreated++;
+ }
+ } catch (\Aws\DynamoDb\Exception\DynamoDbException $e) {
+ // Table does not exist : nothing to do
+ $nbTableCreated++;
+ }
+ }
+ if ($nbTableCreated != $nbTables) {
+ sleep(1);
+ }
+ }
+ }
+
+ private function populateDynamoDb($client, $prefix = null)
+ {
+ // set up scopes
+ foreach (explode(' ', 'supportedscope1 supportedscope2 supportedscope3 supportedscope4 clientscope1 clientscope2 clientscope3') as $supportedScope) {
+ $client->putItem(array(
+ 'TableName' => $prefix.'oauth_scopes',
+ 'Item' => array('scope' => array('S' => $supportedScope))
+ ));
+ }
+
+ foreach (array('defaultscope1', 'defaultscope2') as $defaultScope) {
+ $client->putItem(array(
+ 'TableName' => $prefix.'oauth_scopes',
+ 'Item' => array('scope' => array('S' => $defaultScope), 'is_default' => array('S' => "true"))
+ ));
+ }
+
+ $client->putItem(array(
+ 'TableName' => $prefix.'oauth_clients',
+ 'Item' => array(
+ 'client_id' => array('S' => 'Test Client ID'),
+ 'client_secret' => array('S' => 'TestSecret'),
+ 'scope' => array('S' => 'clientscope1 clientscope2')
+ )
+ ));
+
+ $client->putItem(array(
+ 'TableName' => $prefix.'oauth_clients',
+ 'Item' => array(
+ 'client_id' => array('S' => 'Test Client ID 2'),
+ 'client_secret' => array('S' => 'TestSecret'),
+ 'scope' => array('S' => 'clientscope1 clientscope2 clientscope3')
+ )
+ ));
+
+ $client->putItem(array(
+ 'TableName' => $prefix.'oauth_clients',
+ 'Item' => array(
+ 'client_id' => array('S' => 'Test Default Scope Client ID'),
+ 'client_secret' => array('S' => 'TestSecret'),
+ 'scope' => array('S' => 'clientscope1 clientscope2')
+ )
+ ));
+
+ $client->putItem(array(
+ 'TableName' => $prefix.'oauth_clients',
+ 'Item' => array(
+ 'client_id' => array('S' => 'oauth_test_client'),
+ 'client_secret' => array('S' => 'testpass'),
+ 'grant_types' => array('S' => 'implicit password')
+ )
+ ));
+
+ $client->putItem(array(
+ 'TableName' => $prefix.'oauth_access_tokens',
+ 'Item' => array(
+ 'access_token' => array('S' => 'testtoken'),
+ 'client_id' => array('S' => 'Some Client'),
+ )
+ ));
+
+ $client->putItem(array(
+ 'TableName' => $prefix.'oauth_access_tokens',
+ 'Item' => array(
+ 'access_token' => array('S' => 'accesstoken-openid-connect'),
+ 'client_id' => array('S' => 'Some Client'),
+ 'user_id' => array('S' => 'testuser'),
+ )
+ ));
+
+ $client->putItem(array(
+ 'TableName' => $prefix.'oauth_authorization_codes',
+ 'Item' => array(
+ 'authorization_code' => array('S' => 'testcode'),
+ 'client_id' => array('S' => 'Some Client'),
+ )
+ ));
+
+ $client->putItem(array(
+ 'TableName' => $prefix.'oauth_users',
+ 'Item' => array(
+ 'username' => array('S' => 'testuser'),
+ 'password' => array('S' => 'password'),
+ 'email' => array('S' => 'testuser@test.com'),
+ 'email_verified' => array('S' => 'true'),
+ )
+ ));
+
+ $client->putItem(array(
+ 'TableName' => $prefix.'oauth_public_keys',
+ 'Item' => array(
+ 'client_id' => array('S' => 'ClientID_One'),
+ 'public_key' => array('S' => 'client_1_public'),
+ 'private_key' => array('S' => 'client_1_private'),
+ 'encryption_algorithm' => array('S' => 'RS256'),
+ )
+ ));
+
+ $client->putItem(array(
+ 'TableName' => $prefix.'oauth_public_keys',
+ 'Item' => array(
+ 'client_id' => array('S' => 'ClientID_Two'),
+ 'public_key' => array('S' => 'client_2_public'),
+ 'private_key' => array('S' => 'client_2_private'),
+ 'encryption_algorithm' => array('S' => 'RS256'),
+ )
+ ));
+
+ $client->putItem(array(
+ 'TableName' => $prefix.'oauth_public_keys',
+ 'Item' => array(
+ 'client_id' => array('S' => '0'),
+ 'public_key' => array('S' => $this->getTestPublicKey()),
+ 'private_key' => array('S' => $this->getTestPrivateKey()),
+ 'encryption_algorithm' => array('S' => 'RS256'),
+ )
+ ));
+
+ $client->putItem(array(
+ 'TableName' => $prefix.'oauth_jwt',
+ 'Item' => array(
+ 'client_id' => array('S' => 'oauth_test_client'),
+ 'subject' => array('S' => 'test_subject'),
+ 'public_key' => array('S' => $this->getTestPublicKey()),
+ )
+ ));
+ }
+
+ public function cleanupTravisDynamoDb($prefix = null)
+ {
+ if (is_null($prefix)) {
+ // skip this when not applicable
+ if (!$this->getEnvVar('TRAVIS') || self::DYNAMODB_PHP_VERSION != $this->getEnvVar('TRAVIS_PHP_VERSION')) {
+ return;
+ }
+
+ $prefix = sprintf('build_%s_', $this->getEnvVar('TRAVIS_JOB_NUMBER'));
+ }
+
+ $client = $this->getDynamoDbClient();
+ $this->deleteDynamoDb($client, $prefix);
+ }
+
+ private function getEnvVar($var, $default = null)
+ {
+ return isset($_SERVER[$var]) ? $_SERVER[$var] : (getenv($var) ?: $default);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Storage/NullStorage.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Storage/NullStorage.php
new file mode 100644
index 0000000..6caa620
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Storage/NullStorage.php
@@ -0,0 +1,32 @@
+<?php
+
+namespace OAuth2\Storage;
+
+/**
+*
+*/
+class NullStorage extends Memory
+{
+ private $name;
+ private $description;
+
+ public function __construct($name, $description = null)
+ {
+ $this->name = $name;
+ $this->description = $description;
+ }
+
+ public function __toString()
+ {
+ return $this->name;
+ }
+
+ public function getMessage()
+ {
+ if ($this->description) {
+ return $this->description;
+ }
+
+ return $this->name;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/ClassLoader.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/ClassLoader.php
new file mode 100644
index 0000000..fce8549
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/ClassLoader.php
@@ -0,0 +1,445 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see http://www.php-fig.org/psr/psr-0/
+ * @see http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+ private $classMapAuthoritative = false;
+ private $missingClasses = array();
+ private $apcuPrefix;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath . '\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ if (file_exists($file = $dir . $pathEnd)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/LICENSE b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/LICENSE
new file mode 100644
index 0000000..f27399a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/autoload_classmap.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/autoload_classmap.php
new file mode 100644
index 0000000..4439306
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/autoload_classmap.php
@@ -0,0 +1,14 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+ 'u2flib_server\\Error' => $vendorDir . '/yubico/u2flib-server/src/u2flib_server/U2F.php',
+ 'u2flib_server\\RegisterRequest' => $vendorDir . '/yubico/u2flib-server/src/u2flib_server/U2F.php',
+ 'u2flib_server\\Registration' => $vendorDir . '/yubico/u2flib-server/src/u2flib_server/U2F.php',
+ 'u2flib_server\\SignRequest' => $vendorDir . '/yubico/u2flib-server/src/u2flib_server/U2F.php',
+ 'u2flib_server\\U2F' => $vendorDir . '/yubico/u2flib-server/src/u2flib_server/U2F.php',
+);
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/autoload_files.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/autoload_files.php
new file mode 100644
index 0000000..f2c5f70
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/autoload_files.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_files.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+ '04c6c5c2f7095ccf6c481d3e53e1776f' => $vendorDir . '/mustangostang/spyc/Spyc.php',
+);
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/autoload_namespaces.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/autoload_namespaces.php
new file mode 100644
index 0000000..39b50a1
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/autoload_namespaces.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+ 'OAuth2' => array($vendorDir . '/bshaffer/oauth2-server-php/src'),
+);
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/autoload_psr4.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/autoload_psr4.php
new file mode 100644
index 0000000..b1b7514
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/autoload_psr4.php
@@ -0,0 +1,16 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+ 'RobThree\\Auth\\' => array($vendorDir . '/robthree/twofactorauth/lib'),
+ 'PhpMimeMailParser\\' => array($vendorDir . '/php-mime-mail-parser/php-mime-mail-parser/src'),
+ 'PHPMailer\\PHPMailer\\' => array($vendorDir . '/phpmailer/phpmailer/src'),
+ 'MatthiasMullie\\PathConverter\\' => array($vendorDir . '/matthiasmullie/path-converter/src'),
+ 'MatthiasMullie\\Minify\\' => array($vendorDir . '/matthiasmullie/minify/src'),
+ 'Html2Text\\' => array($vendorDir . '/soundasleep/html2text/src'),
+ 'Ddeboer\\Imap\\' => array($vendorDir . '/ddeboer/imap/src'),
+);
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/autoload_real.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/autoload_real.php
new file mode 100644
index 0000000..b6274e8
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/autoload_real.php
@@ -0,0 +1,73 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInit873464e4bd965a3168f133248b1b218b
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ /**
+ * @return \Composer\Autoload\ClassLoader
+ */
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInit873464e4bd965a3168f133248b1b218b', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInit873464e4bd965a3168f133248b1b218b', 'loadClassLoader'));
+
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+ if ($useStaticLoader) {
+ require_once __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInit873464e4bd965a3168f133248b1b218b::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->register(true);
+
+ if ($useStaticLoader) {
+ $includeFiles = Composer\Autoload\ComposerStaticInit873464e4bd965a3168f133248b1b218b::$files;
+ } else {
+ $includeFiles = require __DIR__ . '/autoload_files.php';
+ }
+ foreach ($includeFiles as $fileIdentifier => $file) {
+ composerRequire873464e4bd965a3168f133248b1b218b($fileIdentifier, $file);
+ }
+
+ return $loader;
+ }
+}
+
+function composerRequire873464e4bd965a3168f133248b1b218b($fileIdentifier, $file)
+{
+ if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
+ require $file;
+
+ $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/autoload_static.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/autoload_static.php
new file mode 100644
index 0000000..5867eee
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/autoload_static.php
@@ -0,0 +1,97 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInit873464e4bd965a3168f133248b1b218b
+{
+ public static $files = array (
+ '04c6c5c2f7095ccf6c481d3e53e1776f' => __DIR__ . '/..' . '/mustangostang/spyc/Spyc.php',
+ );
+
+ public static $prefixLengthsPsr4 = array (
+ 'R' =>
+ array (
+ 'RobThree\\Auth\\' => 14,
+ ),
+ 'P' =>
+ array (
+ 'PhpMimeMailParser\\' => 18,
+ 'PHPMailer\\PHPMailer\\' => 20,
+ ),
+ 'M' =>
+ array (
+ 'MatthiasMullie\\PathConverter\\' => 29,
+ 'MatthiasMullie\\Minify\\' => 22,
+ ),
+ 'H' =>
+ array (
+ 'Html2Text\\' => 10,
+ ),
+ 'D' =>
+ array (
+ 'Ddeboer\\Imap\\' => 13,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'RobThree\\Auth\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/robthree/twofactorauth/lib',
+ ),
+ 'PhpMimeMailParser\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/php-mime-mail-parser/php-mime-mail-parser/src',
+ ),
+ 'PHPMailer\\PHPMailer\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/phpmailer/phpmailer/src',
+ ),
+ 'MatthiasMullie\\PathConverter\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/matthiasmullie/path-converter/src',
+ ),
+ 'MatthiasMullie\\Minify\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/matthiasmullie/minify/src',
+ ),
+ 'Html2Text\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/soundasleep/html2text/src',
+ ),
+ 'Ddeboer\\Imap\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/ddeboer/imap/src',
+ ),
+ );
+
+ public static $prefixesPsr0 = array (
+ 'O' =>
+ array (
+ 'OAuth2' =>
+ array (
+ 0 => __DIR__ . '/..' . '/bshaffer/oauth2-server-php/src',
+ ),
+ ),
+ );
+
+ public static $classMap = array (
+ 'u2flib_server\\Error' => __DIR__ . '/..' . '/yubico/u2flib-server/src/u2flib_server/U2F.php',
+ 'u2flib_server\\RegisterRequest' => __DIR__ . '/..' . '/yubico/u2flib-server/src/u2flib_server/U2F.php',
+ 'u2flib_server\\Registration' => __DIR__ . '/..' . '/yubico/u2flib-server/src/u2flib_server/U2F.php',
+ 'u2flib_server\\SignRequest' => __DIR__ . '/..' . '/yubico/u2flib-server/src/u2flib_server/U2F.php',
+ 'u2flib_server\\U2F' => __DIR__ . '/..' . '/yubico/u2flib-server/src/u2flib_server/U2F.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInit873464e4bd965a3168f133248b1b218b::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInit873464e4bd965a3168f133248b1b218b::$prefixDirsPsr4;
+ $loader->prefixesPsr0 = ComposerStaticInit873464e4bd965a3168f133248b1b218b::$prefixesPsr0;
+ $loader->classMap = ComposerStaticInit873464e4bd965a3168f133248b1b218b::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/installed.json b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/installed.json
new file mode 100644
index 0000000..e38fd63
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/composer/installed.json
@@ -0,0 +1,634 @@
+[
+ {
+ "name": "bshaffer/oauth2-server-php",
+ "version": "v1.11.1",
+ "version_normalized": "1.11.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/bshaffer/oauth2-server-php.git",
+ "reference": "5a0c8000d4763b276919e2106f54eddda6bc50fa"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/bshaffer/oauth2-server-php/zipball/5a0c8000d4763b276919e2106f54eddda6bc50fa",
+ "reference": "5a0c8000d4763b276919e2106f54eddda6bc50fa",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.9"
+ },
+ "require-dev": {
+ "aws/aws-sdk-php": "~2.8",
+ "firebase/php-jwt": "~2.2",
+ "mongodb/mongodb": "^1.1",
+ "phpunit/phpunit": "^4.0",
+ "predis/predis": "dev-master",
+ "thobbs/phpcassa": "dev-master"
+ },
+ "suggest": {
+ "aws/aws-sdk-php": "~2.8 is required to use DynamoDB storage",
+ "firebase/php-jwt": "~2.2 is required to use JWT features",
+ "mongodb/mongodb": "^1.1 is required to use MongoDB storage",
+ "predis/predis": "Required to use Redis storage",
+ "thobbs/phpcassa": "Required to use Cassandra storage"
+ },
+ "time": "2018-12-04T00:29:32+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-0": {
+ "OAuth2": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Brent Shaffer",
+ "email": "bshafs@gmail.com",
+ "homepage": "http://brentertainment.com"
+ }
+ ],
+ "description": "OAuth2 Server for PHP",
+ "homepage": "http://github.com/bshaffer/oauth2-server-php",
+ "keywords": [
+ "auth",
+ "oauth",
+ "oauth2"
+ ]
+ },
+ {
+ "name": "ddeboer/imap",
+ "version": "1.10.0",
+ "version_normalized": "1.10.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ddeboer/imap.git",
+ "reference": "fc09dbf6fb9ba7317a95c719e45893efc4fe6bde"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ddeboer/imap/zipball/fc09dbf6fb9ba7317a95c719e45893efc4fe6bde",
+ "reference": "fc09dbf6fb9ba7317a95c719e45893efc4fe6bde",
+ "shasum": ""
+ },
+ "require": {
+ "ext-iconv": "*",
+ "ext-imap": "*",
+ "ext-mbstring": "*",
+ "php": "^7.2"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^2.16",
+ "phpstan/phpstan": "^0.12",
+ "phpstan/phpstan-phpunit": "^0.12",
+ "phpstan/phpstan-strict-rules": "^0.12",
+ "phpunit/phpunit": "^8.5",
+ "zendframework/zend-mail": "^2.10"
+ },
+ "time": "2020-01-24T08:15:24+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "Ddeboer\\Imap\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "David de Boer",
+ "email": "david@ddeboer.nl"
+ },
+ {
+ "name": "Filippo Tessarotto",
+ "email": "zoeslam@gmail.com"
+ },
+ {
+ "name": "Community contributors",
+ "homepage": "https://github.com/ddeboer/imap/graphs/contributors"
+ }
+ ],
+ "description": "Object-oriented IMAP for PHP",
+ "keywords": [
+ "email",
+ "imap",
+ "mail"
+ ]
+ },
+ {
+ "name": "matthiasmullie/minify",
+ "version": "1.3.63",
+ "version_normalized": "1.3.63.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/matthiasmullie/minify.git",
+ "reference": "9ba1b459828adc13430f4dd6c49dae4950dc4117"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/matthiasmullie/minify/zipball/9ba1b459828adc13430f4dd6c49dae4950dc4117",
+ "reference": "9ba1b459828adc13430f4dd6c49dae4950dc4117",
+ "shasum": ""
+ },
+ "require": {
+ "ext-pcre": "*",
+ "matthiasmullie/path-converter": "~1.1",
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "~2.0",
+ "matthiasmullie/scrapbook": "~1.0",
+ "phpunit/phpunit": "~4.8"
+ },
+ "suggest": {
+ "psr/cache-implementation": "Cache implementation to use with Minify::cache"
+ },
+ "time": "2020-01-21T20:21:08+00:00",
+ "bin": [
+ "bin/minifycss",
+ "bin/minifyjs"
+ ],
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "MatthiasMullie\\Minify\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Matthias Mullie",
+ "email": "minify@mullie.eu",
+ "homepage": "http://www.mullie.eu",
+ "role": "Developer"
+ }
+ ],
+ "description": "CSS & JavaScript minifier, in PHP. Removes whitespace, strips comments, combines files (incl. @import statements and small assets in CSS files), and optimizes/shortens a few common programming patterns.",
+ "homepage": "http://www.minifier.org",
+ "keywords": [
+ "JS",
+ "css",
+ "javascript",
+ "minifier",
+ "minify"
+ ]
+ },
+ {
+ "name": "matthiasmullie/path-converter",
+ "version": "1.1.3",
+ "version_normalized": "1.1.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/matthiasmullie/path-converter.git",
+ "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/matthiasmullie/path-converter/zipball/e7d13b2c7e2f2268e1424aaed02085518afa02d9",
+ "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9",
+ "shasum": ""
+ },
+ "require": {
+ "ext-pcre": "*",
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.8"
+ },
+ "time": "2019-02-05T23:41:09+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "MatthiasMullie\\PathConverter\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Matthias Mullie",
+ "email": "pathconverter@mullie.eu",
+ "homepage": "http://www.mullie.eu",
+ "role": "Developer"
+ }
+ ],
+ "description": "Relative path converter",
+ "homepage": "http://github.com/matthiasmullie/path-converter",
+ "keywords": [
+ "converter",
+ "path",
+ "paths",
+ "relative"
+ ]
+ },
+ {
+ "name": "mustangostang/spyc",
+ "version": "0.6.3",
+ "version_normalized": "0.6.3.0",
+ "source": {
+ "type": "git",
+ "url": "git@github.com:mustangostang/spyc.git",
+ "reference": "4627c838b16550b666d15aeae1e5289dd5b77da0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/mustangostang/spyc/zipball/4627c838b16550b666d15aeae1e5289dd5b77da0",
+ "reference": "4627c838b16550b666d15aeae1e5289dd5b77da0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.3.*@dev"
+ },
+ "time": "2019-09-10T13:16:29+00:00",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "0.5.x-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "files": [
+ "Spyc.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "mustangostang",
+ "email": "vlad.andersen@gmail.com"
+ }
+ ],
+ "description": "A simple YAML loader/dumper class for PHP",
+ "homepage": "https://github.com/mustangostang/spyc/",
+ "keywords": [
+ "spyc",
+ "yaml",
+ "yml"
+ ]
+ },
+ {
+ "name": "paragonie/random_compat",
+ "version": "v9.99.99",
+ "version_normalized": "9.99.99.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/paragonie/random_compat.git",
+ "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
+ "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.*|5.*",
+ "vimeo/psalm": "^1"
+ },
+ "suggest": {
+ "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
+ },
+ "time": "2018-07-02T15:55:56+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Paragon Initiative Enterprises",
+ "email": "security@paragonie.com",
+ "homepage": "https://paragonie.com"
+ }
+ ],
+ "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
+ "keywords": [
+ "csprng",
+ "polyfill",
+ "pseudorandom",
+ "random"
+ ]
+ },
+ {
+ "name": "php-mime-mail-parser/php-mime-mail-parser",
+ "version": "5.0.5",
+ "version_normalized": "5.0.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-mime-mail-parser/php-mime-mail-parser.git",
+ "reference": "27983433aabeccee832573c3c56e6a4855e57745"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-mime-mail-parser/php-mime-mail-parser/zipball/27983433aabeccee832573c3c56e6a4855e57745",
+ "reference": "27983433aabeccee832573c3c56e6a4855e57745",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mailparse": "*",
+ "php": "^7.1"
+ },
+ "replace": {
+ "exorus/php-mime-mail-parser": "*",
+ "messaged/php-mime-mail-parser": "*"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.1",
+ "phpunit/php-token-stream": "^3.0",
+ "phpunit/phpunit": "^7.0",
+ "squizlabs/php_codesniffer": "^3.4"
+ },
+ "time": "2019-09-23T11:57:58+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "PhpMimeMailParser\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "eXorus",
+ "email": "exorus.spam@gmail.com",
+ "homepage": "https://github.com/eXorus/",
+ "role": "Developer"
+ },
+ {
+ "name": "M.Valinskis",
+ "email": "M.Valins@gmail.com",
+ "homepage": "https://code.google.com/p/php-mime-mail-parser",
+ "role": "Developer"
+ },
+ {
+ "name": "eugene.emmett.wood",
+ "email": "gene_w@cementhorizon.com",
+ "homepage": "https://code.google.com/p/php-mime-mail-parser",
+ "role": "Developer"
+ },
+ {
+ "name": "alknetso",
+ "email": "alkne@gmail.com",
+ "homepage": "https://code.google.com/p/php-mime-mail-parser",
+ "role": "Developer"
+ },
+ {
+ "name": "bucabay",
+ "email": "gabe@fijiwebdesign.com",
+ "homepage": "http://www.fijiwebdesign.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "A fully tested email parser for PHP 7.1+ (mailparse extension wrapper).",
+ "homepage": "https://github.com/php-mime-mail-parser/php-mime-mail-parser",
+ "keywords": [
+ "MimeMailParser",
+ "mail",
+ "mailparse",
+ "mime",
+ "parser",
+ "php"
+ ]
+ },
+ {
+ "name": "phpmailer/phpmailer",
+ "version": "v6.1.6",
+ "version_normalized": "6.1.6.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHPMailer/PHPMailer.git",
+ "reference": "c2796cb1cb99d7717290b48c4e6f32cb6c60b7b3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/c2796cb1cb99d7717290b48c4e6f32cb6c60b7b3",
+ "reference": "c2796cb1cb99d7717290b48c4e6f32cb6c60b7b3",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "ext-filter": "*",
+ "php": ">=5.5.0"
+ },
+ "require-dev": {
+ "doctrine/annotations": "^1.2",
+ "friendsofphp/php-cs-fixer": "^2.2",
+ "phpunit/phpunit": "^4.8 || ^5.7"
+ },
+ "suggest": {
+ "ext-mbstring": "Needed to send email in multibyte encoding charset",
+ "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
+ "league/oauth2-google": "Needed for Google XOAUTH2 authentication",
+ "psr/log": "For optional PSR-3 debug logging",
+ "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication",
+ "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
+ },
+ "time": "2020-05-27T12:24:03+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "PHPMailer\\PHPMailer\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-2.1-only"
+ ],
+ "authors": [
+ {
+ "name": "Marcus Bointon",
+ "email": "phpmailer@synchromedia.co.uk"
+ },
+ {
+ "name": "Jim Jagielski",
+ "email": "jimjag@gmail.com"
+ },
+ {
+ "name": "Andy Prevost",
+ "email": "codeworxtech@users.sourceforge.net"
+ },
+ {
+ "name": "Brent R. Matzelle"
+ }
+ ],
+ "description": "PHPMailer is a full-featured email creation and transfer class for PHP",
+ "funding": [
+ {
+ "url": "https://github.com/synchro",
+ "type": "github"
+ }
+ ]
+ },
+ {
+ "name": "robthree/twofactorauth",
+ "version": "1.7.0",
+ "version_normalized": "1.7.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/RobThree/TwoFactorAuth.git",
+ "reference": "37983bf675c5baca09d19d6705170489d0df0002"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/RobThree/TwoFactorAuth/zipball/37983bf675c5baca09d19d6705170489d0df0002",
+ "reference": "37983bf675c5baca09d19d6705170489d0df0002",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "@stable"
+ },
+ "time": "2020-01-02T19:56:46+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "RobThree\\Auth\\": "lib"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Rob Janssen",
+ "homepage": "http://robiii.me",
+ "role": "Developer"
+ }
+ ],
+ "description": "Two Factor Authentication",
+ "homepage": "https://github.com/RobThree/TwoFactorAuth",
+ "keywords": [
+ "Authentication",
+ "MFA",
+ "Multi Factor Authentication",
+ "Two Factor Authentication",
+ "authenticator",
+ "authy",
+ "php",
+ "tfa"
+ ]
+ },
+ {
+ "name": "soundasleep/html2text",
+ "version": "0.5.0",
+ "version_normalized": "0.5.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/soundasleep/html2text.git",
+ "reference": "cdb89f6ffa2c4cc78f8ed9ea6ee0594a9133ccad"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/soundasleep/html2text/zipball/cdb89f6ffa2c4cc78f8ed9ea6ee0594a9133ccad",
+ "reference": "cdb89f6ffa2c4cc78f8ed9ea6ee0594a9133ccad",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": ">=4.0",
+ "soundasleep/component-tests": "dev-master"
+ },
+ "time": "2017-04-19T22:01:50+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "Html2Text\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "EPL-1.0"
+ ],
+ "authors": [
+ {
+ "name": "Jevon Wright",
+ "homepage": "https://jevon.org",
+ "role": "Developer"
+ }
+ ],
+ "description": "A PHP script to convert HTML into a plain text format",
+ "homepage": "https://github.com/soundasleep/html2text",
+ "keywords": [
+ "email",
+ "html",
+ "php",
+ "text"
+ ]
+ },
+ {
+ "name": "yubico/u2flib-server",
+ "version": "1.0.2",
+ "version_normalized": "1.0.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Yubico/php-u2flib-server.git",
+ "reference": "55d813acf68212ad2cadecde07551600d6971939"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Yubico/php-u2flib-server/zipball/55d813acf68212ad2cadecde07551600d6971939",
+ "reference": "55d813acf68212ad2cadecde07551600d6971939",
+ "shasum": ""
+ },
+ "require": {
+ "ext-openssl": "*",
+ "paragonie/random_compat": ">= 1",
+ "php": ">=5.6"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~5.7",
+ "vimeo/psalm": "^0|^1|^2"
+ },
+ "time": "2018-09-07T08:16:44+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "description": "Library for U2F implementation",
+ "homepage": "https://developers.yubico.com/php-u2flib-server"
+ }
+]
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/CHANGELOG.md b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/CHANGELOG.md
new file mode 100644
index 0000000..62fffab
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/CHANGELOG.md
@@ -0,0 +1,637 @@
+# Changelog
+
+## [1.10.0](https://github.com/ddeboer/imap/tree/1.10.0) (2020-01-24)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.9.0...1.10.0)
+
+**Implemented enhancements:**
+
+- Handle comments \(CFWS\) in Date header + not-valid formats [\#439](https://github.com/ddeboer/imap/pull/439) ([pupaxxo](https://github.com/pupaxxo))
+- Support PHP 7.4, require PHP 7.2 [\#433](https://github.com/ddeboer/imap/pull/433) ([Slamdunk](https://github.com/Slamdunk))
+
+**Closed issues:**
+
+- Invalid Date header when trying to fetching date on not RFC compliant emails [\#438](https://github.com/ddeboer/imap/issues/438)
+
+**Merged pull requests:**
+
+- Clear the last used mailbox cache when closing a connection [\#447](https://github.com/ddeboer/imap/pull/447) ([dhzavann](https://github.com/dhzavann))
+- README: update PHP version to match composer.json [\#441](https://github.com/ddeboer/imap/pull/441) ([Slamdunk](https://github.com/Slamdunk))
+- Typo [\#440](https://github.com/ddeboer/imap/pull/440) ([OskarStark](https://github.com/OskarStark))
+
+## [1.9.0](https://github.com/ddeboer/imap/tree/1.9.0) (2019-11-25)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.8.0...1.9.0)
+
+**Implemented enhancements:**
+
+- Quota: let's also test the numbers [\#431](https://github.com/ddeboer/imap/pull/431) ([Slamdunk](https://github.com/Slamdunk))
+- Add getQuota method using imap\_get\_quotaroot to Connection class [\#430](https://github.com/ddeboer/imap/pull/430) ([arkadiusjonczek](https://github.com/arkadiusjonczek))
+
+**Closed issues:**
+
+- markAsSeen\(\) not work [\#415](https://github.com/ddeboer/imap/issues/415)
+
+**Merged pull requests:**
+
+- CS Fix: strip redundant php docs [\#428](https://github.com/ddeboer/imap/pull/428) ([Slamdunk](https://github.com/Slamdunk))
+- Fix: Variable name [\#412](https://github.com/ddeboer/imap/pull/412) ([localheinz](https://github.com/localheinz))
+
+## [1.8.0](https://github.com/ddeboer/imap/tree/1.8.0) (2019-04-15)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.7.2...1.8.0)
+
+**Implemented enhancements:**
+
+- Add phpstan-strict-rules, expose PartiInterface::getDescription\(\) [\#409](https://github.com/ddeboer/imap/pull/409) ([Slamdunk](https://github.com/Slamdunk))
+
+## [1.7.2](https://github.com/ddeboer/imap/tree/1.7.2) (2019-04-12)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.7.1...1.7.2)
+
+**Fixed bugs:**
+
+- Handle message/rfc822 when content-disposition is missing [\#410](https://github.com/ddeboer/imap/pull/410) ([Daredzik](https://github.com/Daredzik))
+
+## [1.7.1](https://github.com/ddeboer/imap/tree/1.7.1) (2019-03-18)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.7.0...1.7.1)
+
+**Fixed bugs:**
+
+- Encoding problem with 1.7 [\#405](https://github.com/ddeboer/imap/issues/405)
+- imap\_search/imap\_sort: default params must not be passed if unspecified [\#406](https://github.com/ddeboer/imap/pull/406) ([Slamdunk](https://github.com/Slamdunk))
+
+## [1.7.0](https://github.com/ddeboer/imap/tree/1.7.0) (2019-03-04)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.6.0...1.7.0)
+
+**Implemented enhancements:**
+
+- Docker and Travis differs in handling new message eols [\#404](https://github.com/ddeboer/imap/pull/404) ([Slamdunk](https://github.com/Slamdunk))
+- Update PHP-CS-Fixer rules [\#403](https://github.com/ddeboer/imap/pull/403) ([Slamdunk](https://github.com/Slamdunk))
+- Add charset for imap\_search or imap\_sort [\#402](https://github.com/ddeboer/imap/pull/402) ([Slamdunk](https://github.com/Slamdunk))
+- PHPStan clean ups [\#400](https://github.com/ddeboer/imap/pull/400) ([Slamdunk](https://github.com/Slamdunk))
+- Adding an undelete\(\) message method [\#386](https://github.com/ddeboer/imap/pull/386) ([C-Duv](https://github.com/C-Duv))
+
+**Closed issues:**
+
+- Convert from GBK \(X-GBK\) to UTF-8 Issue [\#395](https://github.com/ddeboer/imap/issues/395)
+
+**Merged pull requests:**
+
+- Add new ResourceCheckFailureException to handle imap\_check\(\) false [\#399](https://github.com/ddeboer/imap/pull/399) ([pyatnitsev](https://github.com/pyatnitsev))
+- Remove GBK -\> X-GBK Alias and add X-GBK -\> GBK [\#396](https://github.com/ddeboer/imap/pull/396) ([pyatnitsev](https://github.com/pyatnitsev))
+- Add Feature Requests to README.md [\#394](https://github.com/ddeboer/imap/pull/394) ([Slamdunk](https://github.com/Slamdunk))
+
+## [1.6.0](https://github.com/ddeboer/imap/tree/1.6.0) (2018-12-04)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.5.5...1.6.0)
+
+**Implemented enhancements:**
+
+- Require PHP ^7.1 [\#257](https://github.com/ddeboer/imap/issues/257)
+- Require PHP ^7.1 [\#383](https://github.com/ddeboer/imap/pull/383) ([Slamdunk](https://github.com/Slamdunk))
+- Add ability to pass options and retries to imap\_open [\#382](https://github.com/ddeboer/imap/pull/382) ([Slamdunk](https://github.com/Slamdunk))
+- Docker setup for running tests [\#374](https://github.com/ddeboer/imap/pull/374) ([LeadTechVisas](https://github.com/LeadTechVisas))
+- Get messages by UID sequence [\#373](https://github.com/ddeboer/imap/pull/373) ([LeadTechVisas](https://github.com/LeadTechVisas))
+
+**Fixed bugs:**
+
+- Undeliverable mail: attachment parsing error [\#334](https://github.com/ddeboer/imap/issues/334)
+- imap\_getmailboxes returns false; [\#134](https://github.com/ddeboer/imap/issues/134)
+- Fix mailbox name as only numbers [\#381](https://github.com/ddeboer/imap/pull/381) ([Slamdunk](https://github.com/Slamdunk))
+- Gracefully handle possible non-array return value of imap\_getmailboxes [\#372](https://github.com/ddeboer/imap/pull/372) ([Slamdunk](https://github.com/Slamdunk))
+
+**Closed issues:**
+
+- \[AUTHENTICATIONFAILED\] Authentication failed - Too many login failures [\#368](https://github.com/ddeboer/imap/issues/368)
+- last folder in list [\#353](https://github.com/ddeboer/imap/issues/353)
+- Caching IMAP server connections [\#88](https://github.com/ddeboer/imap/issues/88)
+
+## [1.5.5](https://github.com/ddeboer/imap/tree/1.5.5) (2018-08-21)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.5.4...1.5.5)
+
+**Fixed bugs:**
+
+- Plain text attachments are not identified as Attachment parts [\#341](https://github.com/ddeboer/imap/issues/341)
+- Handle plain/text attachments without Content-Type header [\#367](https://github.com/ddeboer/imap/pull/367) ([Slamdunk](https://github.com/Slamdunk))
+
+## [1.5.4](https://github.com/ddeboer/imap/tree/1.5.4) (2018-08-19)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.5.3...1.5.4)
+
+**Fixed bugs:**
+
+- Very long filename, result of getFilename\(\) = NULL? [\#365](https://github.com/ddeboer/imap/issues/365)
+- Support RFC2231 attachment filenames [\#366](https://github.com/ddeboer/imap/pull/366) ([Slamdunk](https://github.com/Slamdunk))
+
+## [1.5.3](https://github.com/ddeboer/imap/tree/1.5.3) (2018-07-20)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.5.2...1.5.3)
+
+**Fixed bugs:**
+
+- Dates: handle UT timezone [\#361](https://github.com/ddeboer/imap/pull/361) ([Slamdunk](https://github.com/Slamdunk))
+
+## [1.5.2](https://github.com/ddeboer/imap/tree/1.5.2) (2018-07-10)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.5.1...1.5.2)
+
+**Fixed bugs:**
+
+- Fails to load Message Headers [\#358](https://github.com/ddeboer/imap/issues/358)
+- Handle invalid headers [\#359](https://github.com/ddeboer/imap/pull/359) ([Slamdunk](https://github.com/Slamdunk))
+
+## [1.5.1](https://github.com/ddeboer/imap/tree/1.5.1) (2018-05-04)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.5.0...1.5.1)
+
+**Fixed bugs:**
+
+- getContent\(\) method returns wrong content part [\#342](https://github.com/ddeboer/imap/issues/342)
+- Fix handle of attachment messages with attachments [\#343](https://github.com/ddeboer/imap/pull/343) ([Slamdunk](https://github.com/Slamdunk))
+
+## [1.5.0](https://github.com/ddeboer/imap/tree/1.5.0) (2018-03-26)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.4.1...1.5.0)
+
+**Implemented enhancements:**
+
+- ImapResource: cache last opened mailbox [\#328](https://github.com/ddeboer/imap/pull/328) ([Slamdunk](https://github.com/Slamdunk))
+
+**Fixed bugs:**
+
+- AbstractPart::isAttachment\(\) handle unknown part type [\#302](https://github.com/ddeboer/imap/pull/302) ([Slamdunk](https://github.com/Slamdunk))
+
+## [1.4.1](https://github.com/ddeboer/imap/tree/1.4.1) (2018-03-22)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.4.0...1.4.1)
+
+**Fixed bugs:**
+
+- Return value of Ddeboer\\Imap\\Message\\AbstractPart::getDecodedContent\(\) must be of the type string, boolean returned [\#284](https://github.com/ddeboer/imap/issues/284)
+- base64\_decode may return false in PHP \< 7.1 [\#324](https://github.com/ddeboer/imap/pull/324) ([Slamdunk](https://github.com/Slamdunk))
+
+**Merged pull requests:**
+
+- Add entry in README about Mailbox::addMessage [\#325](https://github.com/ddeboer/imap/pull/325) ([soywod](https://github.com/soywod))
+
+## [1.4.0](https://github.com/ddeboer/imap/tree/1.4.0) (2018-03-19)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.3.1...1.4.0)
+
+**Implemented enhancements:**
+
+- Lazy load Message [\#320](https://github.com/ddeboer/imap/pull/320) ([Slamdunk](https://github.com/Slamdunk))
+
+**Fixed bugs:**
+
+- Invalid argument supplied for foreach\(\) in Parameters.php line 52 [\#317](https://github.com/ddeboer/imap/issues/317)
+- Message "11964" does not exist: imap\_fetchstructure\(\): Bad message number [\#310](https://github.com/ddeboer/imap/issues/310)
+- imap\_mime\_header\_decode may return false [\#322](https://github.com/ddeboer/imap/pull/322) ([Slamdunk](https://github.com/Slamdunk))
+
+## [1.3.1](https://github.com/ddeboer/imap/tree/1.3.1) (2018-03-09)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.3.0...1.3.1)
+
+**Implemented enhancements:**
+
+- Allow empty port [\#312](https://github.com/ddeboer/imap/pull/312) ([Slamdunk](https://github.com/Slamdunk))
+
+**Closed issues:**
+
+- getServerString\(\) with no port [\#311](https://github.com/ddeboer/imap/issues/311)
+
+## [1.3.0](https://github.com/ddeboer/imap/tree/1.3.0) (2018-02-28)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.2.3...1.3.0)
+
+**Implemented enhancements:**
+
+- Implement bulk-move [\#306](https://github.com/ddeboer/imap/pull/306) ([particleflux](https://github.com/particleflux))
+
+**Closed issues:**
+
+- feature: Bulk move [\#305](https://github.com/ddeboer/imap/issues/305)
+
+**Merged pull requests:**
+
+- README.md: add `Unknown search criterion: OR` note [\#304](https://github.com/ddeboer/imap/pull/304) ([Slamdunk](https://github.com/Slamdunk))
+
+## [1.2.3](https://github.com/ddeboer/imap/tree/1.2.3) (2018-02-09)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.2.2...1.2.3)
+
+**Fixed bugs:**
+
+- $part-\>type can be 9 [\#301](https://github.com/ddeboer/imap/issues/301)
+
+**Merged pull requests:**
+
+- README.md: code-coverage has higher priority than Scrutinizer [\#300](https://github.com/ddeboer/imap/pull/300) ([Slamdunk](https://github.com/Slamdunk))
+
+## [1.2.2](https://github.com/ddeboer/imap/tree/1.2.2) (2018-02-05)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.2.1...1.2.2)
+
+**Implemented enhancements:**
+
+- Allow PHPUnit ^7.0 [\#296](https://github.com/ddeboer/imap/pull/296) ([Slamdunk](https://github.com/Slamdunk))
+
+**Fixed bugs:**
+
+- Attachment-\>getFilename return null [\#297](https://github.com/ddeboer/imap/issues/297)
+- Don't handle multiplart as an attachment [\#298](https://github.com/ddeboer/imap/pull/298) ([Slamdunk](https://github.com/Slamdunk))
+
+## [1.2.1](https://github.com/ddeboer/imap/tree/1.2.1) (2018-01-29)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.2.0...1.2.1)
+
+**Implemented enhancements:**
+
+- Introduce strict comparison [\#289](https://github.com/ddeboer/imap/pull/289) ([Slamdunk](https://github.com/Slamdunk))
+
+**Fixed bugs:**
+
+- Invalid Date header found: "Thur, 04 Jan 2018 06:44:23 +0400" [\#293](https://github.com/ddeboer/imap/issues/293)
+- MessageIterator::current\(\) fails when there are no messages [\#288](https://github.com/ddeboer/imap/issues/288)
+- Remove weekday while parsing date header [\#294](https://github.com/ddeboer/imap/pull/294) ([Slamdunk](https://github.com/Slamdunk))
+- MessageIterator: forbid raw calls [\#290](https://github.com/ddeboer/imap/pull/290) ([Slamdunk](https://github.com/Slamdunk))
+
+## [1.2.0](https://github.com/ddeboer/imap/tree/1.2.0) (2018-01-15)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.1.2...1.2.0)
+
+**Implemented enhancements:**
+
+- Make imap\_append\(\) optional arguments reachable [\#280](https://github.com/ddeboer/imap/pull/280) ([Slamdunk](https://github.com/Slamdunk))
+- PHPStan: introduce static analysis [\#276](https://github.com/ddeboer/imap/pull/276) ([Slamdunk](https://github.com/Slamdunk))
+
+**Fixed bugs:**
+
+- getAttachments\(\) problem when mixin inline and attachment [\#281](https://github.com/ddeboer/imap/issues/281)
+- UnexpectedEncodingException: Cannot decode "5" [\#278](https://github.com/ddeboer/imap/issues/278)
+- Handle correctly multiple nested attachments [\#283](https://github.com/ddeboer/imap/pull/283) ([Slamdunk](https://github.com/Slamdunk))
+- Manageable UnexpectedEncodingException [\#282](https://github.com/ddeboer/imap/pull/282) ([Slamdunk](https://github.com/Slamdunk))
+
+**Closed issues:**
+
+- Appending mail with options [\#279](https://github.com/ddeboer/imap/issues/279)
+
+## [1.1.2](https://github.com/ddeboer/imap/tree/1.1.2) (2017-12-12)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.1.1...1.1.2)
+
+**Fixed bugs:**
+
+- Unsupported charset "134": mb\_convert\_encoding\(\): Illegal character encoding specified [\#270](https://github.com/ddeboer/imap/issues/270)
+- Support Microsoft charset values [\#271](https://github.com/ddeboer/imap/pull/271) ([Slamdunk](https://github.com/Slamdunk))
+
+## [1.1.1](https://github.com/ddeboer/imap/tree/1.1.1) (2017-11-10)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.1.0...1.1.1)
+
+**Implemented enhancements:**
+
+- Transcoder: expand charset aliases list [\#267](https://github.com/ddeboer/imap/pull/267) ([Slamdunk](https://github.com/Slamdunk))
+
+**Fixed bugs:**
+
+- Charset aliases: fix to lowercase search [\#266](https://github.com/ddeboer/imap/pull/266) ([Slamdunk](https://github.com/Slamdunk))
+
+**Merged pull requests:**
+
+- README.md: add timeout note [\#263](https://github.com/ddeboer/imap/pull/263) ([Slamdunk](https://github.com/Slamdunk))
+
+## [1.1.0](https://github.com/ddeboer/imap/tree/1.1.0) (2017-11-06)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.0.8...1.1.0)
+
+**Implemented enhancements:**
+
+- Deprecate MessageInterface::maskAsSeen\(\) in favour of MessageInterface::markAsSeen\(\) [\#255](https://github.com/ddeboer/imap/pull/255) ([Slamdunk](https://github.com/Slamdunk))
+- Lazy load structured Headers [\#250](https://github.com/ddeboer/imap/pull/250) ([Slamdunk](https://github.com/Slamdunk))
+- Implement imap\_thread [\#249](https://github.com/ddeboer/imap/pull/249) ([Slamdunk](https://github.com/Slamdunk))
+- Require ext-iconv [\#248](https://github.com/ddeboer/imap/pull/248) ([Slamdunk](https://github.com/Slamdunk))
+- Message Part: expose $partNumber [\#244](https://github.com/ddeboer/imap/pull/244) ([wujku](https://github.com/wujku))
+- Add Mockability helpers and documentation [\#236](https://github.com/ddeboer/imap/pull/236) ([Slamdunk](https://github.com/Slamdunk))
+- Add missing interface change for \#225 [\#233](https://github.com/ddeboer/imap/pull/233) ([Slamdunk](https://github.com/Slamdunk))
+- Connection: check if the connection is still active with `imap\_ping` [\#232](https://github.com/ddeboer/imap/pull/232) ([wujku](https://github.com/wujku))
+- Message: add `References` and `In-Reply-To` headers shortcuts [\#230](https://github.com/ddeboer/imap/pull/230) ([wujku](https://github.com/wujku))
+- Added bulk set / clear flags functionality for mailbox messages [\#225](https://github.com/ddeboer/imap/pull/225) ([wujku](https://github.com/wujku))
+
+**Merged pull requests:**
+
+- make docs more obvious [\#252](https://github.com/ddeboer/imap/pull/252) ([lgg](https://github.com/lgg))
+- README.md: add Table of Contents with Travis checker [\#234](https://github.com/ddeboer/imap/pull/234) ([Slamdunk](https://github.com/Slamdunk))
+
+## [1.0.8](https://github.com/ddeboer/imap/tree/1.0.8) (2017-10-27)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.0.7...1.0.8)
+
+**Implemented enhancements:**
+
+- Headers: no catchable exception [\#246](https://github.com/ddeboer/imap/issues/246)
+- imap\_thread [\#113](https://github.com/ddeboer/imap/issues/113)
+
+**Fixed bugs:**
+
+- \[TypeError\] Return value of Ddeboer\Imap\Message\AbstractMessage::getId\(\) must be of the type string, null returned [\#253](https://github.com/ddeboer/imap/issues/253)
+- BasicMessageInterface::getId\(\) can be null [\#254](https://github.com/ddeboer/imap/pull/254) ([Slamdunk](https://github.com/Slamdunk))
+
+## [1.0.7](https://github.com/ddeboer/imap/tree/1.0.7) (2017-10-16)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.0.6...1.0.7)
+
+**Fixed bugs:**
+
+- Problem with a IMAP resource stream [\#245](https://github.com/ddeboer/imap/issues/245)
+- IMAP resource must be checked at every call for mailbox context [\#247](https://github.com/ddeboer/imap/pull/247) ([Slamdunk](https://github.com/Slamdunk))
+
+## [1.0.6](https://github.com/ddeboer/imap/tree/1.0.6) (2017-10-12)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.0.5...1.0.6)
+
+**Fixed bugs:**
+
+- \[TypeError\] Return value of AbstractMessage::getFrom\(\) must be an instance of EmailAddress, null returned [\#241](https://github.com/ddeboer/imap/issues/241)
+- Message: Date header can be absent [\#243](https://github.com/ddeboer/imap/pull/243) ([Slamdunk](https://github.com/Slamdunk))
+- Message: From header can be absent [\#242](https://github.com/ddeboer/imap/pull/242) ([Slamdunk](https://github.com/Slamdunk))
+
+## [1.0.5](https://github.com/ddeboer/imap/tree/1.0.5) (2017-10-12)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.0.4...1.0.5)
+
+**Fixed bugs:**
+
+- Use set\_error\_handler with late exception [\#240](https://github.com/ddeboer/imap/pull/240) ([Slamdunk](https://github.com/Slamdunk))
+
+## [1.0.4](https://github.com/ddeboer/imap/tree/1.0.4) (2017-10-11)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.0.3...1.0.4)
+
+**Implemented enhancements:**
+
+- Avoid \(set|restor\)\_error\_handler [\#239](https://github.com/ddeboer/imap/pull/239) ([Slamdunk](https://github.com/Slamdunk))
+
+**Fixed bugs:**
+
+- Current Transcoder class does not support all charsets. [\#237](https://github.com/ddeboer/imap/issues/237)
+- Relay also iconv during decoding [\#238](https://github.com/ddeboer/imap/pull/238) ([Slamdunk](https://github.com/Slamdunk))
+
+## [1.0.3](https://github.com/ddeboer/imap/tree/1.0.3) (2017-10-11)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.0.2...1.0.3)
+
+**Fixed bugs:**
+
+- Attachment::getFilename\(\) may be null on inline-att, widen return type [\#235](https://github.com/ddeboer/imap/pull/235) ([wujku](https://github.com/wujku))
+
+## [1.0.2](https://github.com/ddeboer/imap/tree/1.0.2) (2017-10-06)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.0.1...1.0.2)
+
+**Fixed bugs:**
+
+- Issue with saving XML attachments [\#228](https://github.com/ddeboer/imap/issues/228)
+- Do not charset-decode attachments [\#231](https://github.com/ddeboer/imap/pull/231) ([Slamdunk](https://github.com/Slamdunk))
+
+## [1.0.1](https://github.com/ddeboer/imap/tree/1.0.1) (2017-10-05)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/1.0.0...1.0.1)
+
+**Fixed bugs:**
+
+- Error with attachment charset [\#226](https://github.com/ddeboer/imap/issues/226)
+- If charset is not specified defaults to "us-ascii" [\#227](https://github.com/ddeboer/imap/pull/227) ([Slamdunk](https://github.com/Slamdunk))
+
+## [1.0.0](https://github.com/ddeboer/imap/tree/1.0.0) (2017-10-04)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/0.5.2...1.0.0)
+
+**Implemented enhancements:**
+
+- Need getAll for headers [\#200](https://github.com/ddeboer/imap/issues/200)
+- Tests: implement @covers to avoid false positive on code-coverage [\#188](https://github.com/ddeboer/imap/issues/188)
+- Remove commented code [\#174](https://github.com/ddeboer/imap/issues/174)
+- Regex in SearchExpressions [\#157](https://github.com/ddeboer/imap/issues/157)
+- How do I get unread messages count? [\#98](https://github.com/ddeboer/imap/issues/98)
+- Add mocking ability through Interfaces [\#221](https://github.com/ddeboer/imap/pull/221) ([Slamdunk](https://github.com/Slamdunk))
+- Wrap imap resource to periodically check its status [\#220](https://github.com/ddeboer/imap/pull/220) ([Slamdunk](https://github.com/Slamdunk))
+- Add more coding-standard rules [\#218](https://github.com/ddeboer/imap/pull/218) ([Slamdunk](https://github.com/Slamdunk))
+- Always keep unseen: remove keepUnseen, add markAsSeen [\#217](https://github.com/ddeboer/imap/pull/217) ([Slamdunk](https://github.com/Slamdunk))
+- Embedded messages: refactor \#106 [\#216](https://github.com/ddeboer/imap/pull/216) ([Slamdunk](https://github.com/Slamdunk))
+- Headers now extends \ArrayIterator [\#215](https://github.com/ddeboer/imap/pull/215) ([Slamdunk](https://github.com/Slamdunk))
+- Implement imap\_mail\_copy [\#214](https://github.com/ddeboer/imap/pull/214) ([Slamdunk](https://github.com/Slamdunk))
+- Imap sort [\#213](https://github.com/ddeboer/imap/pull/213) ([Slamdunk](https://github.com/Slamdunk))
+- Increased code-coverage [\#211](https://github.com/ddeboer/imap/pull/211) ([Slamdunk](https://github.com/Slamdunk))
+- Update to PHPUnit ^6.2 [\#209](https://github.com/ddeboer/imap/pull/209) ([Slamdunk](https://github.com/Slamdunk))
+- Use specific exceptions to ease user catches [\#208](https://github.com/ddeboer/imap/pull/208) ([Slamdunk](https://github.com/Slamdunk))
+- Wrap Exception on invalid Date header [\#205](https://github.com/ddeboer/imap/pull/205) ([Slamdunk](https://github.com/Slamdunk))
+- Add tests for \#144 set flags functionalities [\#203](https://github.com/ddeboer/imap/pull/203) ([Slamdunk](https://github.com/Slamdunk))
+- Add imap\_fetchheader\(\) functionality to get raw headers [\#202](https://github.com/ddeboer/imap/pull/202) ([Slamdunk](https://github.com/Slamdunk))
+- Parse all email type headers [\#199](https://github.com/ddeboer/imap/pull/199) ([Slamdunk](https://github.com/Slamdunk))
+- Test search conditions [\#198](https://github.com/ddeboer/imap/pull/198) ([Slamdunk](https://github.com/Slamdunk))
+- Mailbox: get status [\#192](https://github.com/ddeboer/imap/pull/192) ([Slamdunk](https://github.com/Slamdunk))
+- SearchExpression is a Search\ConditionInterface [\#191](https://github.com/ddeboer/imap/pull/191) ([Slamdunk](https://github.com/Slamdunk))
+- SearchCondition: \_\_toString\(\) -\> toString\(\) [\#187](https://github.com/ddeboer/imap/pull/187) ([Slamdunk](https://github.com/Slamdunk))
+- Retain imap\_getmailboxes\(\) results [\#184](https://github.com/ddeboer/imap/pull/184) ([Slamdunk](https://github.com/Slamdunk))
+- Add type hints and return types [\#183](https://github.com/ddeboer/imap/pull/183) ([Slamdunk](https://github.com/Slamdunk))
+- Exception: increase verbosity with imap\_alerts\(\) and imap\_errors\(\) [\#182](https://github.com/ddeboer/imap/pull/182) ([Slamdunk](https://github.com/Slamdunk))
+- Add coding-standards [\#181](https://github.com/ddeboer/imap/pull/181) ([Slamdunk](https://github.com/Slamdunk))
+- Travis: re-enable code-coverage on scrutinizer [\#177](https://github.com/ddeboer/imap/pull/177) ([Slamdunk](https://github.com/Slamdunk))
+- Add .gitattributes to remove from releases unneded files [\#173](https://github.com/ddeboer/imap/pull/173) ([Slamdunk](https://github.com/Slamdunk))
+- Travis: use local Dovecot installation [\#170](https://github.com/ddeboer/imap/pull/170) ([Slamdunk](https://github.com/Slamdunk))
+- Need all Headers in string format [\#149](https://github.com/ddeboer/imap/pull/149) ([FlashWS](https://github.com/FlashWS))
+- Get raw mail [\#146](https://github.com/ddeboer/imap/pull/146) ([styxit](https://github.com/styxit))
+- add getBcc\(\), Set, Clear Flag\(\Seen, \Answered, \Flagged, \Deleted, and \Draft\), getHeadersRaw\(\) [\#144](https://github.com/ddeboer/imap/pull/144) ([trungpv93](https://github.com/trungpv93))
+
+**Fixed bugs:**
+
+- Search\Condition needs charset escaping/indication [\#190](https://github.com/ddeboer/imap/issues/190)
+- imap\_utf7\_\(encode|decode\) -\> mb\_convert\_encoding [\#185](https://github.com/ddeboer/imap/issues/185)
+- España [\#176](https://github.com/ddeboer/imap/issues/176)
+- getHeaders\(\) decode broke information [\#171](https://github.com/ddeboer/imap/issues/171)
+- Date format for date search condition [\#168](https://github.com/ddeboer/imap/issues/168)
+- Error when trying fetch messages from container [\#167](https://github.com/ddeboer/imap/issues/167)
+- Attachment encoding error [\#158](https://github.com/ddeboer/imap/issues/158)
+- getFilename\(\) is empty and no attachment, even when there is an attachment. [\#142](https://github.com/ddeboer/imap/issues/142)
+- Encoding issues [\#136](https://github.com/ddeboer/imap/issues/136)
+- URGENT: The timezone could not be found in the database [\#135](https://github.com/ddeboer/imap/issues/135)
+- Incorrect transcoding of text attachments [\#132](https://github.com/ddeboer/imap/issues/132)
+- Undefined offset [\#123](https://github.com/ddeboer/imap/issues/123)
+- ICS file not supported as attachment [\#120](https://github.com/ddeboer/imap/issues/120)
+- Should iconv be a requirement? [\#115](https://github.com/ddeboer/imap/issues/115)
+- KeepUnseen doen't work [\#92](https://github.com/ddeboer/imap/issues/92)
+- PHP Fatal error Failed to parse time string in ddeboer/imap/src/Message.php [\#89](https://github.com/ddeboer/imap/issues/89)
+- encoding issue [\#85](https://github.com/ddeboer/imap/issues/85)
+- keepUnseen not working correctly with Hotmail [\#84](https://github.com/ddeboer/imap/issues/84)
+- Iconv Exception [\#78](https://github.com/ddeboer/imap/issues/78)
+- $message-\>getAttachments\(\) doesn't recognize some attachments [\#74](https://github.com/ddeboer/imap/issues/74)
+- Message::move\(\) doesn't work. [\#73](https://github.com/ddeboer/imap/issues/73)
+- Message\Part: part number must distinguish original message [\#223](https://github.com/ddeboer/imap/pull/223) ([Slamdunk](https://github.com/Slamdunk))
+- Recursive Embedded email body bug [\#222](https://github.com/ddeboer/imap/pull/222) ([Slamdunk](https://github.com/Slamdunk))
+- Exclude HTML from allowed attachment subtype [\#212](https://github.com/ddeboer/imap/pull/212) ([Slamdunk](https://github.com/Slamdunk))
+- Fix imap\_mail\_move behaviour and test it [\#207](https://github.com/ddeboer/imap/pull/207) ([Slamdunk](https://github.com/Slamdunk))
+- Undefined encoding: throw exception [\#197](https://github.com/ddeboer/imap/pull/197) ([Slamdunk](https://github.com/Slamdunk))
+- Message charset: mb\_convert\_encoding + aliases [\#196](https://github.com/ddeboer/imap/pull/196) ([Slamdunk](https://github.com/Slamdunk))
+- Mailbox: only UTF-8 names [\#193](https://github.com/ddeboer/imap/pull/193) ([Slamdunk](https://github.com/Slamdunk))
+- Search\Date\AbstractDate: fix format to RFC-3501 [\#189](https://github.com/ddeboer/imap/pull/189) ([Slamdunk](https://github.com/Slamdunk))
+- Travis: fix failing tests [\#172](https://github.com/ddeboer/imap/pull/172) ([Slamdunk](https://github.com/Slamdunk))
+- Return body of single-part HTML message as HTML, not text [\#101](https://github.com/ddeboer/imap/pull/101) ([joker806](https://github.com/joker806))
+- Implement "undisclosed recipients" addresses [\#86](https://github.com/ddeboer/imap/pull/86) ([darit](https://github.com/darit))
+
+**Closed issues:**
+
+- Potential memory issue with attachments [\#195](https://github.com/ddeboer/imap/issues/195)
+- Explain Message::delete [\#175](https://github.com/ddeboer/imap/issues/175)
+- Get raw message [\#161](https://github.com/ddeboer/imap/issues/161)
+- Composer install problem [\#160](https://github.com/ddeboer/imap/issues/160)
+- Transcoder not exist [\#154](https://github.com/ddeboer/imap/issues/154)
+- The library doesn't support using sort by [\#151](https://github.com/ddeboer/imap/issues/151)
+- Office 365 - Array to string conversion error [\#131](https://github.com/ddeboer/imap/issues/131)
+- Is there a method to turn a seen message into an "unseen" one ? [\#130](https://github.com/ddeboer/imap/issues/130)
+- Create mailbox [\#126](https://github.com/ddeboer/imap/issues/126)
+- Move and Delete Message not working [\#112](https://github.com/ddeboer/imap/issues/112)
+- Problem on production server [\#111](https://github.com/ddeboer/imap/issues/111)
+- Authentication failed for a Gmail account [\#109](https://github.com/ddeboer/imap/issues/109)
+- A method to run IMAP commands? [\#83](https://github.com/ddeboer/imap/issues/83)
+
+**Merged pull requests:**
+
+- Update README.md to latest develop changes [\#224](https://github.com/ddeboer/imap/pull/224) ([Slamdunk](https://github.com/Slamdunk))
+- Add Filippo Tessarotto as an author of the package [\#219](https://github.com/ddeboer/imap/pull/219) ([Slamdunk](https://github.com/Slamdunk))
+- README.md: call Connection::expunge after move and delete [\#210](https://github.com/ddeboer/imap/pull/210) ([Slamdunk](https://github.com/Slamdunk))
+- Remove misleading Mailbox::expunge\(\) [\#206](https://github.com/ddeboer/imap/pull/206) ([Slamdunk](https://github.com/Slamdunk))
+- Add CHANGELOG.md [\#194](https://github.com/ddeboer/imap/pull/194) ([Slamdunk](https://github.com/Slamdunk))
+- README.md updates [\#178](https://github.com/ddeboer/imap/pull/178) ([Slamdunk](https://github.com/Slamdunk))
+
+## [0.5.2](https://github.com/ddeboer/imap/tree/0.5.2) (2015-12-03)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/0.5.1...0.5.2)
+
+**Closed issues:**
+
+- $message-\>getAttachments\(\) returns null if message has no attachments [\#80](https://github.com/ddeboer/imap/issues/80)
+- Email objects visibility [\#76](https://github.com/ddeboer/imap/issues/76)
+
+**Merged pull requests:**
+
+- Fixed the keepUnseen method [\#95](https://github.com/ddeboer/imap/pull/95) ([aeyoll](https://github.com/aeyoll))
+- Mark Mailbox as countable, fix doc comments [\#91](https://github.com/ddeboer/imap/pull/91) ([krzysiekpiasecki](https://github.com/krzysiekpiasecki))
+- Message::getAttachments confirm to signature [\#82](https://github.com/ddeboer/imap/pull/82) ([boekkooi](https://github.com/boekkooi))
+- Added hasMailbox to Connection [\#81](https://github.com/ddeboer/imap/pull/81) ([boekkooi](https://github.com/boekkooi))
+- Make sure imap connection are reopened [\#79](https://github.com/ddeboer/imap/pull/79) ([joserobleda](https://github.com/joserobleda))
+
+## [0.5.1](https://github.com/ddeboer/imap/tree/0.5.1) (2015-02-01)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/0.5.0...0.5.1)
+
+**Closed issues:**
+
+- imap\_open error [\#72](https://github.com/ddeboer/imap/issues/72)
+- $message-\>getAttachments\(\) does not return anything, even though a message has at least one attachment [\#71](https://github.com/ddeboer/imap/issues/71)
+- Prepare docs for 1.0 [\#69](https://github.com/ddeboer/imap/issues/69)
+- "date" header is not reliable [\#63](https://github.com/ddeboer/imap/issues/63)
+- File Attachments don't show up [\#55](https://github.com/ddeboer/imap/issues/55)
+
+**Merged pull requests:**
+
+- Add support for attachments without content disposition [\#70](https://github.com/ddeboer/imap/pull/70) ([ddeboer](https://github.com/ddeboer))
+
+## [0.5.0](https://github.com/ddeboer/imap/tree/0.5.0) (2015-01-24)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/0.4.0...0.5.0)
+
+**Closed issues:**
+
+- Use utf8\_encode\(\) function to encode content [\#66](https://github.com/ddeboer/imap/issues/66)
+- Please add function order by date [\#59](https://github.com/ddeboer/imap/issues/59)
+- mb\_convert\_encoding breaks code [\#57](https://github.com/ddeboer/imap/issues/57)
+- How get I getMessages but newest first ... [\#11](https://github.com/ddeboer/imap/issues/11)
+
+## [0.4.0](https://github.com/ddeboer/imap/tree/0.4.0) (2015-01-04)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/0.3.1...0.4.0)
+
+**Closed issues:**
+
+- Please add 6th parameter to imap\_open call [\#62](https://github.com/ddeboer/imap/issues/62)
+- Should Message::delete\(\) use the Message UID? [\#46](https://github.com/ddeboer/imap/issues/46)
+- mb\_convert\_encoding\(\): Illegal character encoding specified [\#35](https://github.com/ddeboer/imap/issues/35)
+- Deleting a message isn't working [\#30](https://github.com/ddeboer/imap/issues/30)
+- imap\_header doesn't work with message uid [\#26](https://github.com/ddeboer/imap/issues/26)
+
+**Merged pull requests:**
+
+- Added basic requirement [\#61](https://github.com/ddeboer/imap/pull/61) ([nikoskip](https://github.com/nikoskip))
+- FIX: PHP error: "Cannot declare class Ddeboer\Imap\Search\Text\Text ..." [\#58](https://github.com/ddeboer/imap/pull/58) ([racztiborzoltan](https://github.com/racztiborzoltan))
+- Message::delete sets the FT\_UID flag. Fixes \#30 Fixes \#46 [\#54](https://github.com/ddeboer/imap/pull/54) ([ctalbot](https://github.com/ctalbot))
+- Allow binary-encoded part content [\#48](https://github.com/ddeboer/imap/pull/48) ([joker806](https://github.com/joker806))
+- Fix CS [\#47](https://github.com/ddeboer/imap/pull/47) ([xelan](https://github.com/xelan))
+- fixed typo [\#45](https://github.com/ddeboer/imap/pull/45) ([xelan](https://github.com/xelan))
+
+## [0.3.1](https://github.com/ddeboer/imap/tree/0.3.1) (2014-08-11)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/0.3.0...0.3.1)
+
+**Merged pull requests:**
+
+- \imap\_header dosen't work with UID [\#44](https://github.com/ddeboer/imap/pull/44) ([ysramirez](https://github.com/ysramirez))
+
+## [0.3.0](https://github.com/ddeboer/imap/tree/0.3.0) (2014-08-10)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/0.2...0.3.0)
+
+**Closed issues:**
+
+- please remove useless wiki [\#42](https://github.com/ddeboer/imap/issues/42)
+- Travis tests allways fail? [\#40](https://github.com/ddeboer/imap/issues/40)
+- Garbled e-mail body encoding [\#27](https://github.com/ddeboer/imap/issues/27)
+- Improve docs [\#25](https://github.com/ddeboer/imap/issues/25)
+- "undisclosed-recipients" throws error [\#23](https://github.com/ddeboer/imap/issues/23)
+
+**Merged pull requests:**
+
+- correct minor typo [\#43](https://github.com/ddeboer/imap/pull/43) ([cordoval](https://github.com/cordoval))
+- Utf-8 encode body content. [\#39](https://github.com/ddeboer/imap/pull/39) ([cmoralesweb](https://github.com/cmoralesweb))
+- Fix regex parsing the date header \(allowing multiple brackets\) [\#38](https://github.com/ddeboer/imap/pull/38) ([joker806](https://github.com/joker806))
+- Allow empty connection flags [\#34](https://github.com/ddeboer/imap/pull/34) ([joker806](https://github.com/joker806))
+- Fixed typo [\#32](https://github.com/ddeboer/imap/pull/32) ([abhinavkumar940](https://github.com/abhinavkumar940))
+
+## [0.2](https://github.com/ddeboer/imap/tree/0.2) (2013-11-24)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/0.1...0.2)
+
+## [0.1](https://github.com/ddeboer/imap/tree/0.1) (2013-11-22)
+
+[Full Changelog](https://github.com/ddeboer/imap/compare/c02d49cdb9246901bb00d211a0f2aba208f6fab6...0.1)
+
+**Closed issues:**
+
+- Prevent setting SEEN flag [\#20](https://github.com/ddeboer/imap/issues/20)
+- Add tests [\#18](https://github.com/ddeboer/imap/issues/18)
+- delete messages [\#9](https://github.com/ddeboer/imap/issues/9)
+- README is missing basic usage [\#7](https://github.com/ddeboer/imap/issues/7)
+- Subject and other texts are decoded incorrectly [\#3](https://github.com/ddeboer/imap/issues/3)
+
+**Merged pull requests:**
+
+- also fetch inline attachments [\#24](https://github.com/ddeboer/imap/pull/24) ([kaiserlos](https://github.com/kaiserlos))
+- since leading slash is always needed [\#22](https://github.com/ddeboer/imap/pull/22) ([huglester](https://github.com/huglester))
+- Added missed createMailbox\($name\) function [\#19](https://github.com/ddeboer/imap/pull/19) ([burci](https://github.com/burci))
+- Added move and delete function to message + expunge function [\#17](https://github.com/ddeboer/imap/pull/17) ([burci](https://github.com/burci))
+- Clean up some unused variable [\#16](https://github.com/ddeboer/imap/pull/16) ([burci](https://github.com/burci))
+- Fixed mailbox encoding [\#15](https://github.com/ddeboer/imap/pull/15) ([burci](https://github.com/burci))
+- Create new mailbox [\#14](https://github.com/ddeboer/imap/pull/14) ([burci](https://github.com/burci))
+- Fixed bug in getDecodedContent with 'format=flowed' email [\#13](https://github.com/ddeboer/imap/pull/13) ([burci](https://github.com/burci))
+- Fixed date parsing for some imap servers [\#12](https://github.com/ddeboer/imap/pull/12) ([thelfensdrfer](https://github.com/thelfensdrfer))
+- Add support for more complex search expressions. [\#10](https://github.com/ddeboer/imap/pull/10) ([jamesiarmes](https://github.com/jamesiarmes))
+- Allow user to change server connection flags [\#6](https://github.com/ddeboer/imap/pull/6) ([mvar](https://github.com/mvar))
+- Improvements in EmailAddress class [\#4](https://github.com/ddeboer/imap/pull/4) ([mvar](https://github.com/mvar))
+
+
+
+\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/LICENSE b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/LICENSE
new file mode 100644
index 0000000..2c679e3
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/LICENSE
@@ -0,0 +1,19 @@
+Copyright (C) 2013 David de Boer <david@ddeboer.nl>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/README.md b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/README.md
new file mode 100644
index 0000000..59dc532
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/README.md
@@ -0,0 +1,361 @@
+# IMAP library
+
+[![Build Status](https://travis-ci.org/ddeboer/imap.svg?branch=master)](https://travis-ci.org/ddeboer/imap)
+[![Code Coverage](https://scrutinizer-ci.com/g/ddeboer/imap/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/ddeboer/imap/?branch=master)
+[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/ddeboer/imap/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/ddeboer/imap/?branch=master)
+[![Latest Stable Version](https://poser.pugx.org/ddeboer/imap/v/stable.svg)](https://packagist.org/packages/ddeboer/imap)
+[![Total Downloads](https://poser.pugx.org/ddeboer/imap/downloads.png)](https://packagist.org/packages/ddeboer/imap)
+
+A PHP 7.2+ library to read and process e-mails over IMAP.
+
+This library requires [IMAP](https://secure.php.net/manual/en/book.imap.php),
+[iconv](https://secure.php.net/manual/en/book.iconv.php) and
+[Multibyte String](https://secure.php.net/manual/en/book.mbstring.php) extensions installed.
+
+## Table of Contents
+
+1. [Feature Requests](#feature-requests)
+1. [Installation](#installation)
+1. [Usage](#usage)
+ 1. [Connect and Authenticate](#connect-and-authenticate)
+ 1. [Mailboxes](#mailboxes)
+ 1. [Messages](#messages)
+ 1. [Searching for Messages](#searching-for-messages)
+ 1. [Unknown search criterion: OR](#unknown-search-criterion-or)
+ 1. [Message Properties and Operations](#message-properties-and-operations)
+ 1. [Message Attachments](#message-attachments)
+ 1. [Embedded Messages](#embedded-messages)
+ 1. [Timeouts](#timeouts)
+1. [Mock the library](#mock-the-library)
+1. [Running the Tests](#running-the-tests)
+ 1. [Running Tests using Docker](#running-tests-using-docker)
+
+## Feature Requests
+
+[![Feature Requests](https://feathub.com/ddeboer/imap?format=svg)](https://feathub.com/ddeboer/imap)
+
+## Installation
+
+The recommended way to install the IMAP library is through [Composer](https://getcomposer.org):
+
+```bash
+$ composer require ddeboer/imap
+```
+
+This command requires you to have Composer installed globally, as explained
+in the [installation chapter](https://getcomposer.org/doc/00-intro.md)
+of the Composer documentation.
+
+## Usage
+
+### Connect and Authenticate
+
+```php
+use Ddeboer\Imap\Server;
+
+$server = new Server('imap.gmail.com');
+
+// $connection is instance of \Ddeboer\Imap\Connection
+$connection = $server->authenticate('my_username', 'my_password');
+```
+
+You can specify port, [flags and parameters](https://secure.php.net/manual/en/function.imap-open.php)
+to the server:
+
+```php
+$server = new Server(
+ $hostname, // required
+ $port, // defaults to '993'
+ $flags, // defaults to '/imap/ssl/validate-cert'
+ $parameters
+);
+```
+
+### Mailboxes
+
+Retrieve mailboxes (also known as mail folders) from the mail server and iterate
+over them:
+
+```php
+$mailboxes = $connection->getMailboxes();
+
+foreach ($mailboxes as $mailbox) {
+ // Skip container-only mailboxes
+ // @see https://secure.php.net/manual/en/function.imap-getmailboxes.php
+ if ($mailbox->getAttributes() & \LATT_NOSELECT) {
+ continue;
+ }
+
+ // $mailbox is instance of \Ddeboer\Imap\Mailbox
+ printf('Mailbox "%s" has %s messages', $mailbox->getName(), $mailbox->count());
+}
+```
+
+Or retrieve a specific mailbox:
+
+```php
+$mailbox = $connection->getMailbox('INBOX');
+```
+
+Delete a mailbox:
+
+```php
+$connection->deleteMailbox($mailbox);
+```
+
+You can bulk set, or clear, any [flag](https://secure.php.net/manual/en/function.imap-setflag-full.php) of mailbox messages (by UIDs):
+
+```php
+$mailbox->setFlag('\\Seen \\Flagged', ['1:5', '7', '9']);
+$mailbox->setFlag('\\Seen', '1,3,5,6:8');
+
+$mailbox->clearFlag('\\Flagged', '1,3');
+```
+
+**WARNING** You must retrieve new Message instances in case of bulk modify flags to refresh the single Messages flags.
+
+### Messages
+
+Retrieve messages (e-mails) from a mailbox and iterate over them:
+
+```php
+$messages = $mailbox->getMessages();
+
+foreach ($messages as $message) {
+ // $message is instance of \Ddeboer\Imap\Message
+}
+```
+
+To insert a new message (that just has been sent) into the Sent mailbox and flag it as seen:
+
+```php
+$mailbox = $connection->getMailbox('Sent');
+$mailbox->addMessage($messageMIME, '\\Seen');
+```
+
+Note that the message should be a string at MIME format (as described in the [RFC2045](https://tools.ietf.org/html/rfc2045)).
+
+#### Searching for Messages
+
+```php
+use Ddeboer\Imap\SearchExpression;
+use Ddeboer\Imap\Search\Email\To;
+use Ddeboer\Imap\Search\Text\Body;
+
+$search = new SearchExpression();
+$search->addCondition(new To('me@here.com'));
+$search->addCondition(new Body('contents'));
+
+$messages = $mailbox->getMessages($search);
+```
+
+**WARNING** We are currently unable to have both spaces _and_ double-quotes
+escaped together. Only spaces are currently escaped correctly.
+You can use `Ddeboer\Imap\Search\RawExpression` to write the complete search
+condition by yourself.
+
+Messages can also be retrieved sorted as per [imap_sort](https://secure.php.net/manual/en/function.imap-sort.php)
+function:
+
+```php
+$today = new DateTimeImmutable();
+$thirtyDaysAgo = $today->sub(new DateInterval('P30D'));
+
+$messages = $mailbox->getMessages(
+ new Ddeboer\Imap\Search\Date\Since($thirtyDaysAgo),
+ \SORTDATE, // Sort criteria
+ true // Descending order
+);
+```
+
+#### Unknown search criterion: OR
+
+Note that PHP imap library relies on the `c-client` library available at https://www.washington.edu/imap/
+which doesn't fully support some IMAP4 search criteria like `OR`. If you want those unsupported criteria,
+you need to manually patch the latest version (`imap-2007f` of 23-Jul-2011 at the time of this commit)
+and recompile PHP onto your patched `c-client` library.
+
+By the way most of the common search criteria are available and functioning, browse them in `./src/Search`.
+
+References:
+
+1. https://stackoverflow.com/questions/36356715/imap-search-unknown-search-criterion-or
+1. imap-2007f.tar.gz: `./src/c-client/mail.c` and `./docs/internal.txt`
+
+#### Message Properties and Operations
+
+Get message number and unique [message id](https://en.wikipedia.org/wiki/Message-ID)
+in the form <...>:
+
+```php
+$message->getNumber();
+$message->getId();
+```
+
+Get other message properties:
+
+```php
+$message->getSubject();
+$message->getFrom(); // Message\EmailAddress
+$message->getTo(); // array of Message\EmailAddress
+$message->getDate(); // DateTimeImmutable
+$message->isAnswered();
+$message->isDeleted();
+$message->isDraft();
+$message->isSeen();
+```
+
+Get message headers as a [\Ddeboer\Imap\Message\Headers](/src/Ddeboer/Imap/Message/Headers.php) object:
+
+```php
+$message->getHeaders();
+```
+
+Get message body as HTML or plain text:
+
+```php
+$message->getBodyHtml(); // Content of text/html part, if present
+$message->getBodyText(); // Content of text/plain part, if present
+```
+
+Reading the message body keeps the message as unseen.
+If you want to mark the message as seen:
+
+```php
+$message->markAsSeen();
+```
+
+Or you can set, or clear, any [flag](https://secure.php.net/manual/en/function.imap-setflag-full.php):
+
+```php
+$message->setFlag('\\Seen \\Flagged');
+$message->clearFlag('\\Flagged');
+```
+
+Move a message to another mailbox:
+
+```php
+$mailbox = $connection->getMailbox('another-mailbox');
+$message->move($mailbox);
+$connection->expunge();
+```
+
+Deleting messages:
+
+```php
+$mailbox->getMessage(1)->delete();
+$mailbox->getMessage(2)->delete();
+$connection->expunge();
+```
+
+### Message Attachments
+
+Get message attachments (both inline and attached) and iterate over them:
+
+```php
+$attachments = $message->getAttachments();
+
+foreach ($attachments as $attachment) {
+ // $attachment is instance of \Ddeboer\Imap\Message\Attachment
+}
+```
+
+Download a message attachment to a local file:
+
+```php
+// getDecodedContent() decodes the attachment’s contents automatically:
+file_put_contents(
+ '/my/local/dir/' . $attachment->getFilename(),
+ $attachment->getDecodedContent()
+);
+```
+
+### Embedded Messages
+
+Check if attachment is embedded message and get it:
+
+```php
+$attachments = $message->getAttachments();
+
+foreach ($attachments as $attachment) {
+ if ($attachment->isEmbeddedMessage()) {
+ $embeddedMessage = $attachment->getEmbeddedMessage();
+ // $embeddedMessage is instance of \Ddeboer\Imap\Message\EmbeddedMessage
+ }
+}
+```
+
+An EmbeddedMessage has the same API as a normal Message, apart from flags
+and operations like copy, move or delete.
+
+### Timeouts
+
+The IMAP extension provides the [imap_timeout](https://secure.php.net/manual/en/function.imap-timeout.php)
+function to adjust the timeout seconds for various operations.
+
+However the extension's implementation doesn't link the functionality to a
+specific context or connection, instead they are global. So in order to not
+affect functionalities outside this library, we had to choose whether wrap
+every `imap_*` call around an optional user-provided timeout or leave this
+task to the user.
+
+Because of the heterogeneous world of IMAP servers and the high complexity
+burden cost for such a little gain of the former, we chose the latter.
+
+## Mock the library
+
+Mockability is granted by interfaces present for each API.
+Dig into [MockabilityTest](tests/MockabilityTest.php) for an example of a
+mocked workflow.
+
+## Running the Tests
+
+This library is functionally tested on [Travis CI](https://travis-ci.org/ddeboer/imap)
+against a local Dovecot server.
+
+If you have your own IMAP (test) account, you can run the tests locally by
+providing your IMAP credentials:
+
+```bash
+$ composer install
+$ IMAP_SERVER_NAME="my.imap.server.com" IMAP_SERVER_PORT="60993" IMAP_USERNAME="johndoe" IMAP_PASSWORD="p4ssword" vendor/bin/phpunit
+```
+
+You can also copy `phpunit.xml.dist` file to a custom `phpunit.xml` and put
+these environment variables in it:
+
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit
+ bootstrap="./vendor/autoload.php"
+ colors="true"
+ verbose="true"
+>
+ <testsuites>
+ <testsuite name="ddeboer/imap">
+ <directory>./tests/</directory>
+ </testsuite>
+ </testsuites>
+ <filter>
+ <whitelist>
+ <directory suffix=".php">./src</directory>
+ </whitelist>
+ </filter>
+ <php>
+ <env name="IMAP_SERVER_NAME" value="my.imap.server.com" />
+ <env name="IMAP_SERVER_PORT" value="60993" />
+ <env name="IMAP_USERNAME" value="johndoe" />
+ <env name="IMAP_PASSWORD" value="p4ssword" />
+ </php>
+</phpunit>
+```
+
+**WARNING** Tests create new mailboxes without removing them.
+
+### Running Tests using Docker
+
+If you have Docker installed you can run the tests locally with the following command:
+
+```
+$ docker-compose run tests
+```
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/composer.json b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/composer.json
new file mode 100644
index 0000000..d48ac0d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/composer.json
@@ -0,0 +1,48 @@
+{
+ "name": "ddeboer/imap",
+ "description": "Object-oriented IMAP for PHP",
+ "keywords": [
+ "email",
+ "mail",
+ "imap"
+ ],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "David de Boer",
+ "email": "david@ddeboer.nl"
+ },
+ {
+ "name": "Filippo Tessarotto",
+ "email": "zoeslam@gmail.com"
+ },
+ {
+ "name": "Community contributors",
+ "homepage": "https://github.com/ddeboer/imap/graphs/contributors"
+ }
+ ],
+ "require": {
+ "php": "^7.2",
+ "ext-iconv": "*",
+ "ext-imap": "*",
+ "ext-mbstring": "*"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^2.16",
+ "phpstan/phpstan": "^0.12",
+ "phpstan/phpstan-phpunit": "^0.12",
+ "phpstan/phpstan-strict-rules": "^0.12",
+ "phpunit/phpunit": "^8.5",
+ "zendframework/zend-mail": "^2.10"
+ },
+ "autoload": {
+ "psr-4": {
+ "Ddeboer\\Imap\\": "src/"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "Ddeboer\\Imap\\Tests\\": "tests/"
+ }
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Connection.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Connection.php
new file mode 100644
index 0000000..902c7ce
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Connection.php
@@ -0,0 +1,234 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap;
+
+use Ddeboer\Imap\Exception\CreateMailboxException;
+use Ddeboer\Imap\Exception\DeleteMailboxException;
+use Ddeboer\Imap\Exception\ImapGetmailboxesException;
+use Ddeboer\Imap\Exception\ImapNumMsgException;
+use Ddeboer\Imap\Exception\ImapQuotaException;
+use Ddeboer\Imap\Exception\InvalidResourceException;
+use Ddeboer\Imap\Exception\MailboxDoesNotExistException;
+
+/**
+ * A connection to an IMAP server that is authenticated for a user.
+ */
+final class Connection implements ConnectionInterface
+{
+ /**
+ * @var ImapResourceInterface
+ */
+ private $resource;
+
+ /**
+ * @var string
+ */
+ private $server;
+
+ /**
+ * @var null|array
+ */
+ private $mailboxes;
+
+ /**
+ * @var null|array
+ */
+ private $mailboxNames;
+
+ /**
+ * Constructor.
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function __construct(ImapResourceInterface $resource, string $server)
+ {
+ $this->resource = $resource;
+ $this->server = $server;
+ }
+
+ /**
+ * Get IMAP resource.
+ */
+ public function getResource(): ImapResourceInterface
+ {
+ return $this->resource;
+ }
+
+ /**
+ * Delete all messages marked for deletion.
+ */
+ public function expunge(): bool
+ {
+ return \imap_expunge($this->resource->getStream());
+ }
+
+ /**
+ * Close connection.
+ */
+ public function close(int $flag = 0): bool
+ {
+ $this->resource->clearLastMailboxUsedCache();
+
+ return \imap_close($this->resource->getStream(), $flag);
+ }
+
+ /**
+ * Get Mailbox quota.
+ */
+ public function getQuota(string $root = 'INBOX'): array
+ {
+ $errorMessage = null;
+ $errorNumber = 0;
+ \set_error_handler(static function ($nr, $message) use (&$errorMessage, &$errorNumber): bool {
+ $errorMessage = $message;
+ $errorNumber = $nr;
+
+ return true;
+ });
+
+ $return = \imap_get_quotaroot($this->resource->getStream(), $root);
+
+ \restore_error_handler();
+
+ if (false === $return || null !== $errorMessage) {
+ throw new ImapQuotaException(
+ \sprintf(
+ 'IMAP Quota request failed for "%s"%s',
+ $root,
+ null !== $errorMessage ? ': ' . $errorMessage : ''
+ ),
+ $errorNumber
+ );
+ }
+
+ return $return;
+ }
+
+ /**
+ * Get a list of mailboxes (also known as folders).
+ *
+ * @return MailboxInterface[]
+ */
+ public function getMailboxes(): array
+ {
+ $this->initMailboxNames();
+
+ if (null === $this->mailboxes) {
+ $this->mailboxes = [];
+ foreach ($this->mailboxNames as $mailboxName => $mailboxInfo) {
+ $this->mailboxes[(string) $mailboxName] = $this->getMailbox((string) $mailboxName);
+ }
+ }
+
+ return $this->mailboxes;
+ }
+
+ /**
+ * Check that a mailbox with the given name exists.
+ *
+ * @param string $name Mailbox name
+ */
+ public function hasMailbox(string $name): bool
+ {
+ $this->initMailboxNames();
+
+ return isset($this->mailboxNames[$name]);
+ }
+
+ /**
+ * Get a mailbox by its name.
+ *
+ * @param string $name Mailbox name
+ *
+ * @throws MailboxDoesNotExistException If mailbox does not exist
+ */
+ public function getMailbox(string $name): MailboxInterface
+ {
+ if (false === $this->hasMailbox($name)) {
+ throw new MailboxDoesNotExistException(\sprintf('Mailbox name "%s" does not exist', $name));
+ }
+
+ return new Mailbox($this->resource, $name, $this->mailboxNames[$name]);
+ }
+
+ /**
+ * Count number of messages not in any mailbox.
+ *
+ * @return int
+ */
+ public function count()
+ {
+ $return = \imap_num_msg($this->resource->getStream());
+
+ if (false === $return) {
+ throw new ImapNumMsgException('imap_num_msg failed');
+ }
+
+ return $return;
+ }
+
+ /**
+ * Check if the connection is still active.
+ *
+ * @throws InvalidResourceException If connection was closed
+ */
+ public function ping(): bool
+ {
+ return \imap_ping($this->resource->getStream());
+ }
+
+ /**
+ * Create mailbox.
+ *
+ * @throws CreateMailboxException
+ */
+ public function createMailbox(string $name): MailboxInterface
+ {
+ if (false === \imap_createmailbox($this->resource->getStream(), $this->server . \mb_convert_encoding($name, 'UTF7-IMAP', 'UTF-8'))) {
+ throw new CreateMailboxException(\sprintf('Can not create "%s" mailbox at "%s"', $name, $this->server));
+ }
+
+ $this->mailboxNames = $this->mailboxes = null;
+ $this->resource->clearLastMailboxUsedCache();
+
+ return $this->getMailbox($name);
+ }
+
+ /**
+ * Create mailbox.
+ *
+ * @throws DeleteMailboxException
+ */
+ public function deleteMailbox(MailboxInterface $mailbox): void
+ {
+ if (false === \imap_deletemailbox($this->resource->getStream(), $mailbox->getFullEncodedName())) {
+ throw new DeleteMailboxException(\sprintf('Mailbox "%s" could not be deleted', $mailbox->getName()));
+ }
+
+ $this->mailboxes = $this->mailboxNames = null;
+ $this->resource->clearLastMailboxUsedCache();
+ }
+
+ /**
+ * Get mailbox names.
+ */
+ private function initMailboxNames(): void
+ {
+ if (null !== $this->mailboxNames) {
+ return;
+ }
+
+ $this->mailboxNames = [];
+ $mailboxesInfo = \imap_getmailboxes($this->resource->getStream(), $this->server, '*');
+ if (!\is_array($mailboxesInfo)) {
+ throw new ImapGetmailboxesException('imap_getmailboxes failed');
+ }
+
+ foreach ($mailboxesInfo as $mailboxInfo) {
+ $name = \mb_convert_encoding(\str_replace($this->server, '', $mailboxInfo->name), 'UTF-8', 'UTF7-IMAP');
+ $this->mailboxNames[$name] = $mailboxInfo;
+ }
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/ConnectionInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/ConnectionInterface.php
new file mode 100644
index 0000000..e76077f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/ConnectionInterface.php
@@ -0,0 +1,67 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap;
+
+/**
+ * A connection to an IMAP server that is authenticated for a user.
+ */
+interface ConnectionInterface extends \Countable
+{
+ /**
+ * Get IMAP resource.
+ */
+ public function getResource(): ImapResourceInterface;
+
+ /**
+ * Delete all messages marked for deletion.
+ */
+ public function expunge(): bool;
+
+ /**
+ * Close connection.
+ */
+ public function close(int $flag = 0): bool;
+
+ /**
+ * Check if the connection is still active.
+ */
+ public function ping(): bool;
+
+ /**
+ * Get Mailbox quota.
+ */
+ public function getQuota(string $root = 'INBOX'): array;
+
+ /**
+ * Get a list of mailboxes (also known as folders).
+ *
+ * @return MailboxInterface[]
+ */
+ public function getMailboxes(): array;
+
+ /**
+ * Check that a mailbox with the given name exists.
+ *
+ * @param string $name Mailbox name
+ */
+ public function hasMailbox(string $name): bool;
+
+ /**
+ * Get a mailbox by its name.
+ *
+ * @param string $name Mailbox name
+ */
+ public function getMailbox(string $name): MailboxInterface;
+
+ /**
+ * Create mailbox.
+ */
+ public function createMailbox(string $name): MailboxInterface;
+
+ /**
+ * Delete mailbox.
+ */
+ public function deleteMailbox(MailboxInterface $mailbox): void;
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/AbstractException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/AbstractException.php
new file mode 100644
index 0000000..26c1e58
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/AbstractException.php
@@ -0,0 +1,57 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+abstract class AbstractException extends \RuntimeException
+{
+ /**
+ * @var array
+ */
+ private static $errorLabels = [
+ \E_ERROR => 'E_ERROR',
+ \E_WARNING => 'E_WARNING',
+ \E_PARSE => 'E_PARSE',
+ \E_NOTICE => 'E_NOTICE',
+ \E_CORE_ERROR => 'E_CORE_ERROR',
+ \E_CORE_WARNING => 'E_CORE_WARNING',
+ \E_COMPILE_ERROR => 'E_COMPILE_ERROR',
+ \E_COMPILE_WARNING => 'E_COMPILE_WARNING',
+ \E_USER_ERROR => 'E_USER_ERROR',
+ \E_USER_WARNING => 'E_USER_WARNING',
+ \E_USER_NOTICE => 'E_USER_NOTICE',
+ \E_STRICT => 'E_STRICT',
+ \E_RECOVERABLE_ERROR => 'E_RECOVERABLE_ERROR',
+ \E_DEPRECATED => 'E_DEPRECATED',
+ \E_USER_DEPRECATED => 'E_USER_DEPRECATED',
+ ];
+
+ /**
+ * @param string $message The exception message
+ * @param int $code The exception code
+ * @param \Throwable $previous The previous exception
+ */
+ final public function __construct(string $message, int $code = 0, \Throwable $previous = null)
+ {
+ $errorType = '';
+ if (isset(self::$errorLabels[$code])) {
+ $errorType = \sprintf('[%s] ', self::$errorLabels[$code]);
+ }
+
+ $joinString = "\n- ";
+ $alerts = \imap_alerts();
+ $errors = \imap_errors();
+ $completeMessage = \sprintf(
+ "%s%s\nimap_alerts (%s):%s\nimap_errors (%s):%s",
+ $errorType,
+ $message,
+ false !== $alerts ? \count($alerts) : 0,
+ false !== $alerts ? $joinString . \implode($joinString, $alerts) : '',
+ false !== $errors ? \count($errors) : 0,
+ false !== $errors ? $joinString . \implode($joinString, $errors) : ''
+ );
+
+ parent::__construct($completeMessage, $code, $previous);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/AuthenticationFailedException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/AuthenticationFailedException.php
new file mode 100644
index 0000000..c0e93d0
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/AuthenticationFailedException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class AuthenticationFailedException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/CreateMailboxException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/CreateMailboxException.php
new file mode 100644
index 0000000..55bb3a9
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/CreateMailboxException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class CreateMailboxException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/DeleteMailboxException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/DeleteMailboxException.php
new file mode 100644
index 0000000..694c3a6
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/DeleteMailboxException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class DeleteMailboxException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapFetchbodyException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapFetchbodyException.php
new file mode 100644
index 0000000..0e2f30f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapFetchbodyException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class ImapFetchbodyException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapFetchheaderException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapFetchheaderException.php
new file mode 100644
index 0000000..8a8387f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapFetchheaderException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class ImapFetchheaderException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapGetmailboxesException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapGetmailboxesException.php
new file mode 100644
index 0000000..7e68326
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapGetmailboxesException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class ImapGetmailboxesException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapMsgnoException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapMsgnoException.php
new file mode 100644
index 0000000..c9de4e4
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapMsgnoException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class ImapMsgnoException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapNumMsgException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapNumMsgException.php
new file mode 100644
index 0000000..37a55ee
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapNumMsgException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class ImapNumMsgException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapQuotaException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapQuotaException.php
new file mode 100644
index 0000000..5a73e67
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapQuotaException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class ImapQuotaException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapStatusException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapStatusException.php
new file mode 100644
index 0000000..ca808cd
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapStatusException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class ImapStatusException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/InvalidDateHeaderException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/InvalidDateHeaderException.php
new file mode 100644
index 0000000..05401e2
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/InvalidDateHeaderException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class InvalidDateHeaderException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/InvalidHeadersException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/InvalidHeadersException.php
new file mode 100644
index 0000000..9554527
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/InvalidHeadersException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class InvalidHeadersException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/InvalidResourceException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/InvalidResourceException.php
new file mode 100644
index 0000000..f3cbf5b
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/InvalidResourceException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class InvalidResourceException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/InvalidSearchCriteriaException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/InvalidSearchCriteriaException.php
new file mode 100644
index 0000000..783c6ba
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/InvalidSearchCriteriaException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class InvalidSearchCriteriaException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MailboxDoesNotExistException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MailboxDoesNotExistException.php
new file mode 100644
index 0000000..0cdf28a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MailboxDoesNotExistException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class MailboxDoesNotExistException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MessageCopyException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MessageCopyException.php
new file mode 100644
index 0000000..aa1ab68
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MessageCopyException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class MessageCopyException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MessageDeleteException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MessageDeleteException.php
new file mode 100644
index 0000000..38d88ff
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MessageDeleteException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class MessageDeleteException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MessageDoesNotExistException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MessageDoesNotExistException.php
new file mode 100644
index 0000000..1485a63
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MessageDoesNotExistException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class MessageDoesNotExistException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MessageMoveException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MessageMoveException.php
new file mode 100644
index 0000000..2f0cd0c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MessageMoveException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class MessageMoveException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MessageStructureException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MessageStructureException.php
new file mode 100644
index 0000000..a0dd436
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MessageStructureException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class MessageStructureException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MessageUndeleteException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MessageUndeleteException.php
new file mode 100644
index 0000000..a25f45c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MessageUndeleteException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class MessageUndeleteException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/NotEmbeddedMessageException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/NotEmbeddedMessageException.php
new file mode 100644
index 0000000..12afdec
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/NotEmbeddedMessageException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class NotEmbeddedMessageException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/OutOfBoundsException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/OutOfBoundsException.php
new file mode 100644
index 0000000..55528c1
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/OutOfBoundsException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class OutOfBoundsException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ReopenMailboxException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ReopenMailboxException.php
new file mode 100644
index 0000000..945c654
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ReopenMailboxException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class ReopenMailboxException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ResourceCheckFailureException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ResourceCheckFailureException.php
new file mode 100644
index 0000000..2751c71
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ResourceCheckFailureException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class ResourceCheckFailureException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/UnexpectedEncodingException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/UnexpectedEncodingException.php
new file mode 100644
index 0000000..7ec3943
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/UnexpectedEncodingException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class UnexpectedEncodingException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/UnsupportedCharsetException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/UnsupportedCharsetException.php
new file mode 100644
index 0000000..5743679
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Exception/UnsupportedCharsetException.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Exception;
+
+final class UnsupportedCharsetException extends AbstractException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/ImapResource.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/ImapResource.php
new file mode 100644
index 0000000..60c1617
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/ImapResource.php
@@ -0,0 +1,107 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap;
+
+use Ddeboer\Imap\Exception\InvalidResourceException;
+use Ddeboer\Imap\Exception\ReopenMailboxException;
+
+/**
+ * An imap resource stream.
+ */
+final class ImapResource implements ImapResourceInterface
+{
+ /**
+ * @var mixed
+ */
+ private $resource;
+
+ /**
+ * @var null|MailboxInterface
+ */
+ private $mailbox;
+
+ /**
+ * @var null|string
+ */
+ private static $lastMailboxUsedCache;
+
+ /**
+ * Constructor.
+ *
+ * @param resource $resource
+ */
+ public function __construct($resource, MailboxInterface $mailbox = null)
+ {
+ $this->resource = $resource;
+ $this->mailbox = $mailbox;
+ }
+
+ /**
+ * Get IMAP resource stream.
+ *
+ * @throws InvalidResourceException
+ *
+ * @return resource
+ */
+ public function getStream()
+ {
+ if (false === \is_resource($this->resource) || 'imap' !== \get_resource_type($this->resource)) {
+ throw new InvalidResourceException('Supplied resource is not a valid imap resource');
+ }
+
+ $this->initMailbox();
+
+ return $this->resource;
+ }
+
+ /**
+ * Clear last mailbox used cache.
+ */
+ public function clearLastMailboxUsedCache(): void
+ {
+ self::$lastMailboxUsedCache = null;
+ }
+
+ /**
+ * If connection is not currently in this mailbox, switch it to this mailbox.
+ */
+ private function initMailbox(): void
+ {
+ if (null === $this->mailbox || self::isMailboxOpen($this->mailbox, $this->resource)) {
+ return;
+ }
+
+ \imap_reopen($this->resource, $this->mailbox->getFullEncodedName());
+
+ if (self::isMailboxOpen($this->mailbox, $this->resource)) {
+ return;
+ }
+
+ throw new ReopenMailboxException(\sprintf('Cannot reopen mailbox "%s"', $this->mailbox->getName()));
+ }
+
+ /**
+ * Check whether the current mailbox is open.
+ *
+ * @param mixed $resource
+ */
+ private static function isMailboxOpen(MailboxInterface $mailbox, $resource): bool
+ {
+ $currentMailboxName = $mailbox->getFullEncodedName();
+ if ($currentMailboxName === self::$lastMailboxUsedCache) {
+ return true;
+ }
+
+ self::$lastMailboxUsedCache = null;
+ $check = \imap_check($resource);
+ $return = false !== $check && $check->Mailbox === $currentMailboxName;
+
+ if (true === $return) {
+ self::$lastMailboxUsedCache = $currentMailboxName;
+ }
+
+ return $return;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/ImapResourceInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/ImapResourceInterface.php
new file mode 100644
index 0000000..03c16f7
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/ImapResourceInterface.php
@@ -0,0 +1,20 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap;
+
+interface ImapResourceInterface
+{
+ /**
+ * Get IMAP resource stream.
+ *
+ * @return resource
+ */
+ public function getStream();
+
+ /**
+ * Clear last mailbox used cache.
+ */
+ public function clearLastMailboxUsedCache(): void;
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Mailbox.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Mailbox.php
new file mode 100644
index 0000000..d4e1bf4
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Mailbox.php
@@ -0,0 +1,321 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap;
+
+use DateTimeInterface;
+use Ddeboer\Imap\Exception\ImapNumMsgException;
+use Ddeboer\Imap\Exception\ImapStatusException;
+use Ddeboer\Imap\Exception\InvalidSearchCriteriaException;
+use Ddeboer\Imap\Exception\MessageCopyException;
+use Ddeboer\Imap\Exception\MessageMoveException;
+use Ddeboer\Imap\Search\ConditionInterface;
+use Ddeboer\Imap\Search\LogicalOperator\All;
+
+/**
+ * An IMAP mailbox (commonly referred to as a 'folder').
+ */
+final class Mailbox implements MailboxInterface
+{
+ /**
+ * @var ImapResourceInterface
+ */
+ private $resource;
+
+ /**
+ * @var string
+ */
+ private $name;
+
+ /**
+ * @var \stdClass
+ */
+ private $info;
+
+ /**
+ * Constructor.
+ *
+ * @param ImapResourceInterface $resource IMAP resource
+ * @param string $name Mailbox decoded name
+ * @param \stdClass $info Mailbox info
+ */
+ public function __construct(ImapResourceInterface $resource, string $name, \stdClass $info)
+ {
+ $this->resource = new ImapResource($resource->getStream(), $this);
+ $this->name = $name;
+ $this->info = $info;
+ }
+
+ /**
+ * Get mailbox decoded name.
+ */
+ public function getName(): string
+ {
+ return $this->name;
+ }
+
+ /**
+ * Get mailbox encoded path.
+ */
+ public function getEncodedName(): string
+ {
+ /** @var string $name */
+ $name = $this->info->name;
+
+ return (string) \preg_replace('/^{.+}/', '', $name);
+ }
+
+ /**
+ * Get mailbox encoded full name.
+ */
+ public function getFullEncodedName(): string
+ {
+ return $this->info->name;
+ }
+
+ /**
+ * Get mailbox attributes.
+ */
+ public function getAttributes(): int
+ {
+ return $this->info->attributes;
+ }
+
+ /**
+ * Get mailbox delimiter.
+ */
+ public function getDelimiter(): string
+ {
+ return $this->info->delimiter;
+ }
+
+ /**
+ * Get number of messages in this mailbox.
+ *
+ * @return int
+ */
+ public function count()
+ {
+ $return = \imap_num_msg($this->resource->getStream());
+
+ if (false === $return) {
+ throw new ImapNumMsgException('imap_num_msg failed');
+ }
+
+ return $return;
+ }
+
+ /**
+ * Get Mailbox status.
+ */
+ public function getStatus(int $flags = null): \stdClass
+ {
+ $return = \imap_status($this->resource->getStream(), $this->getFullEncodedName(), $flags ?? \SA_ALL);
+
+ if (false === $return) {
+ throw new ImapStatusException('imap_status failed');
+ }
+
+ return $return;
+ }
+
+ /**
+ * Bulk Set Flag for Messages.
+ *
+ * @param string $flag \Seen, \Answered, \Flagged, \Deleted, and \Draft
+ * @param array|MessageIterator|string $numbers Message numbers
+ */
+ public function setFlag(string $flag, $numbers): bool
+ {
+ return \imap_setflag_full($this->resource->getStream(), $this->prepareMessageIds($numbers), $flag, \ST_UID);
+ }
+
+ /**
+ * Bulk Clear Flag for Messages.
+ *
+ * @param string $flag \Seen, \Answered, \Flagged, \Deleted, and \Draft
+ * @param array|MessageIterator|string $numbers Message numbers
+ */
+ public function clearFlag(string $flag, $numbers): bool
+ {
+ return \imap_clearflag_full($this->resource->getStream(), $this->prepareMessageIds($numbers), $flag, \ST_UID);
+ }
+
+ /**
+ * Get message ids.
+ *
+ * @param ConditionInterface $search Search expression (optional)
+ */
+ public function getMessages(ConditionInterface $search = null, int $sortCriteria = null, bool $descending = false, string $charset = null): MessageIteratorInterface
+ {
+ if (null === $search) {
+ $search = new All();
+ }
+ $query = $search->toString();
+
+ // We need to clear the stack to know whether imap_last_error()
+ // is related to this imap_search
+ \imap_errors();
+
+ if (null !== $sortCriteria) {
+ $params = [
+ $this->resource->getStream(),
+ $sortCriteria,
+ $descending ? 1 : 0,
+ \SE_UID,
+ $query,
+ ];
+ if (null !== $charset) {
+ $params[] = $charset;
+ }
+ $messageNumbers = \imap_sort(...$params);
+ } else {
+ $params = [
+ $this->resource->getStream(),
+ $query,
+ \SE_UID,
+ ];
+ if (null !== $charset) {
+ $params[] = $charset;
+ }
+ $messageNumbers = \imap_search(...$params);
+ }
+ if (false === $messageNumbers) {
+ if (false !== \imap_last_error()) {
+ throw new InvalidSearchCriteriaException(\sprintf('Invalid search criteria [%s]', $query));
+ }
+
+ // imap_search can also return false
+ $messageNumbers = [];
+ }
+
+ return new MessageIterator($this->resource, $messageNumbers);
+ }
+
+ /**
+ * Get message iterator for a sequence.
+ *
+ * @param string $sequence Message numbers
+ */
+ public function getMessageSequence(string $sequence): MessageIteratorInterface
+ {
+ \imap_errors();
+
+ $overview = \imap_fetch_overview($this->resource->getStream(), $sequence, \FT_UID);
+ if (\is_array($overview) && [] !== $overview) {
+ $messageNumbers = \array_column($overview, 'uid');
+ } else {
+ if (false !== \imap_last_error()) {
+ throw new InvalidSearchCriteriaException(\sprintf('Invalid sequence [%s]', $sequence));
+ }
+
+ $messageNumbers = [];
+ }
+
+ return new MessageIterator($this->resource, $messageNumbers);
+ }
+
+ /**
+ * Get a message by message number.
+ *
+ * @param int $number Message number
+ */
+ public function getMessage(int $number): MessageInterface
+ {
+ return new Message($this->resource, $number);
+ }
+
+ /**
+ * Get messages in this mailbox.
+ */
+ public function getIterator(): MessageIteratorInterface
+ {
+ return $this->getMessages();
+ }
+
+ /**
+ * Add a message to the mailbox.
+ */
+ public function addMessage(string $message, string $options = null, DateTimeInterface $internalDate = null): bool
+ {
+ $arguments = [
+ $this->resource->getStream(),
+ $this->getFullEncodedName(),
+ $message,
+ ];
+ if (null !== $options) {
+ $arguments[] = $options;
+ if (null !== $internalDate) {
+ $arguments[] = $internalDate->format('d-M-Y H:i:s O');
+ }
+ }
+
+ return \imap_append(...$arguments);
+ }
+
+ /**
+ * Returns a tree of threaded message for the current Mailbox.
+ */
+ public function getThread(): array
+ {
+ \set_error_handler(static function (): bool {
+ return true;
+ });
+
+ /** @var array|false $tree */
+ $tree = \imap_thread($this->resource->getStream());
+
+ \restore_error_handler();
+
+ return false !== $tree ? $tree : [];
+ }
+
+ /**
+ * Bulk move messages.
+ *
+ * @param array|MessageIterator|string $numbers Message numbers
+ * @param MailboxInterface $mailbox Destination Mailbox to move the messages to
+ *
+ * @throws \Ddeboer\Imap\Exception\MessageMoveException
+ */
+ public function move($numbers, MailboxInterface $mailbox): void
+ {
+ if (!\imap_mail_move($this->resource->getStream(), $this->prepareMessageIds($numbers), $mailbox->getEncodedName(), \CP_UID)) {
+ throw new MessageMoveException(\sprintf('Messages cannot be moved to "%s"', $mailbox->getName()));
+ }
+ }
+
+ /**
+ * Bulk copy messages.
+ *
+ * @param array|MessageIterator|string $numbers Message numbers
+ * @param MailboxInterface $mailbox Destination Mailbox to copy the messages to
+ *
+ * @throws \Ddeboer\Imap\Exception\MessageCopyException
+ */
+ public function copy($numbers, MailboxInterface $mailbox): void
+ {
+ if (!\imap_mail_copy($this->resource->getStream(), $this->prepareMessageIds($numbers), $mailbox->getEncodedName(), \CP_UID)) {
+ throw new MessageCopyException(\sprintf('Messages cannot be copied to "%s"', $mailbox->getName()));
+ }
+ }
+
+ /**
+ * Prepare message ids for the use with bulk functions.
+ *
+ * @param array|MessageIterator|string $messageIds Message numbers
+ */
+ private function prepareMessageIds($messageIds): string
+ {
+ if ($messageIds instanceof MessageIterator) {
+ $messageIds = $messageIds->getArrayCopy();
+ }
+
+ if (\is_array($messageIds)) {
+ $messageIds = \implode(',', $messageIds);
+ }
+
+ return $messageIds;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MailboxInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MailboxInterface.php
new file mode 100644
index 0000000..efe432d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MailboxInterface.php
@@ -0,0 +1,116 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap;
+
+use DateTimeInterface;
+use Ddeboer\Imap\Search\ConditionInterface;
+
+/**
+ * An IMAP mailbox (commonly referred to as a 'folder').
+ */
+interface MailboxInterface extends \Countable, \IteratorAggregate
+{
+ /**
+ * Get mailbox decoded name.
+ */
+ public function getName(): string;
+
+ /**
+ * Get mailbox encoded path.
+ */
+ public function getEncodedName(): string;
+
+ /**
+ * Get mailbox encoded full name.
+ */
+ public function getFullEncodedName(): string;
+
+ /**
+ * Get mailbox attributes.
+ */
+ public function getAttributes(): int;
+
+ /**
+ * Get mailbox delimiter.
+ */
+ public function getDelimiter(): string;
+
+ /**
+ * Get Mailbox status.
+ */
+ public function getStatus(int $flags = null): \stdClass;
+
+ /**
+ * Bulk Set Flag for Messages.
+ *
+ * @param string $flag \Seen, \Answered, \Flagged, \Deleted, and \Draft
+ * @param array|MessageIterator|string $numbers Message numbers
+ */
+ public function setFlag(string $flag, $numbers): bool;
+
+ /**
+ * Bulk Clear Flag for Messages.
+ *
+ * @param string $flag \Seen, \Answered, \Flagged, \Deleted, and \Draft
+ * @param array|MessageIterator|string $numbers Message numbers
+ */
+ public function clearFlag(string $flag, $numbers): bool;
+
+ /**
+ * Get message ids.
+ *
+ * @param ConditionInterface $search Search expression (optional)
+ */
+ public function getMessages(ConditionInterface $search = null, int $sortCriteria = null, bool $descending = false, string $charset = null): MessageIteratorInterface;
+
+ /**
+ * Get message iterator for a sequence.
+ *
+ * @param string $sequence Message numbers
+ */
+ public function getMessageSequence(string $sequence): MessageIteratorInterface;
+
+ /**
+ * Get a message by message number.
+ *
+ * @param int $number Message number
+ */
+ public function getMessage(int $number): MessageInterface;
+
+ /**
+ * Get messages in this mailbox.
+ */
+ public function getIterator(): MessageIteratorInterface;
+
+ /**
+ * Add a message to the mailbox.
+ */
+ public function addMessage(string $message, string $options = null, DateTimeInterface $internalDate = null): bool;
+
+ /**
+ * Returns a tree of threaded message for the current Mailbox.
+ */
+ public function getThread(): array;
+
+ /**
+ * Bulk move messages.
+ *
+ * @param array|MessageIterator|string $numbers Message numbers
+ * @param MailboxInterface $mailbox Destination Mailbox to move the messages to
+ *
+ * @throws \Ddeboer\Imap\Exception\MessageMoveException
+ */
+ public function move($numbers, self $mailbox): void;
+
+ /**
+ * Bulk copy messages.
+ *
+ * @param array|MessageIterator|string $numbers Message numbers
+ * @param MailboxInterface $mailbox Destination Mailbox to copy the messages to
+ *
+ * @throws \Ddeboer\Imap\Exception\MessageCopyException
+ */
+ public function copy($numbers, self $mailbox): void;
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message.php
new file mode 100644
index 0000000..7b50777
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message.php
@@ -0,0 +1,355 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap;
+
+use Ddeboer\Imap\Exception\ImapFetchheaderException;
+use Ddeboer\Imap\Exception\InvalidHeadersException;
+use Ddeboer\Imap\Exception\MessageCopyException;
+use Ddeboer\Imap\Exception\MessageDeleteException;
+use Ddeboer\Imap\Exception\MessageDoesNotExistException;
+use Ddeboer\Imap\Exception\MessageMoveException;
+use Ddeboer\Imap\Exception\MessageStructureException;
+use Ddeboer\Imap\Exception\MessageUndeleteException;
+
+/**
+ * An IMAP message (e-mail).
+ */
+final class Message extends Message\AbstractMessage implements MessageInterface
+{
+ /**
+ * @var bool
+ */
+ private $messageNumberVerified = false;
+
+ /**
+ * @var int
+ */
+ private $imapMsgNo = 0;
+
+ /**
+ * @var bool
+ */
+ private $structureLoaded = false;
+
+ /**
+ * @var null|Message\Headers
+ */
+ private $headers;
+
+ /**
+ * @var null|string
+ */
+ private $rawHeaders;
+
+ /**
+ * @var null|string
+ */
+ private $rawMessage;
+
+ /**
+ * Constructor.
+ *
+ * @param ImapResourceInterface $resource IMAP resource
+ * @param int $messageNumber Message number
+ */
+ public function __construct(ImapResourceInterface $resource, int $messageNumber)
+ {
+ parent::__construct($resource, $messageNumber, '1', new \stdClass());
+ }
+
+ /**
+ * Lazy load structure.
+ */
+ protected function lazyLoadStructure(): void
+ {
+ if (true === $this->structureLoaded) {
+ return;
+ }
+ $this->structureLoaded = true;
+
+ $messageNumber = $this->getNumber();
+
+ $errorMessage = null;
+ $errorNumber = 0;
+ \set_error_handler(static function ($nr, $message) use (&$errorMessage, &$errorNumber): bool {
+ $errorMessage = $message;
+ $errorNumber = $nr;
+
+ return true;
+ });
+
+ $structure = \imap_fetchstructure(
+ $this->resource->getStream(),
+ $messageNumber,
+ \FT_UID
+ );
+
+ \restore_error_handler();
+
+ if (!$structure instanceof \stdClass) {
+ throw new MessageStructureException(\sprintf(
+ 'Message "%s" structure is empty: %s',
+ $messageNumber,
+ $errorMessage
+ ), $errorNumber);
+ }
+
+ $this->setStructure($structure);
+ }
+
+ /**
+ * Ensure message exists.
+ */
+ protected function assertMessageExists(int $messageNumber): void
+ {
+ if (true === $this->messageNumberVerified) {
+ return;
+ }
+ $this->messageNumberVerified = true;
+
+ $msgno = \imap_msgno($this->resource->getStream(), $messageNumber);
+ if (\is_numeric($msgno) && $msgno > 0) {
+ $this->imapMsgNo = $msgno;
+
+ return;
+ }
+
+ throw new MessageDoesNotExistException(\sprintf(
+ 'Message "%s" does not exist',
+ $messageNumber
+ ));
+ }
+
+ private function getMsgNo(): int
+ {
+ // Triggers assertMessageExists()
+ $this->getNumber();
+
+ return $this->imapMsgNo;
+ }
+
+ /**
+ * Get raw message headers.
+ */
+ public function getRawHeaders(): string
+ {
+ if (null === $this->rawHeaders) {
+ $rawHeaders = \imap_fetchheader($this->resource->getStream(), $this->getNumber(), \FT_UID);
+
+ if (false === $rawHeaders) {
+ throw new ImapFetchheaderException('imap_fetchheader failed');
+ }
+
+ $this->rawHeaders = $rawHeaders;
+ }
+
+ return $this->rawHeaders;
+ }
+
+ /**
+ * Get the raw message, including all headers, parts, etc. unencoded and unparsed.
+ *
+ * @return string the raw message
+ */
+ public function getRawMessage(): string
+ {
+ if (null === $this->rawMessage) {
+ $this->rawMessage = $this->doGetContent('');
+ }
+
+ return $this->rawMessage;
+ }
+
+ /**
+ * Get message headers.
+ */
+ public function getHeaders(): Message\Headers
+ {
+ if (null === $this->headers) {
+ // imap_headerinfo is much faster than imap_fetchheader
+ // imap_headerinfo returns only a subset of all mail headers,
+ // but it does include the message flags.
+ $headers = \imap_headerinfo($this->resource->getStream(), $this->getMsgNo());
+ if (false === $headers) {
+ // @see https://github.com/ddeboer/imap/issues/358
+ throw new InvalidHeadersException(\sprintf('Message "%s" has invalid headers', $this->getNumber()));
+ }
+ $this->headers = new Message\Headers($headers);
+ }
+
+ return $this->headers;
+ }
+
+ /**
+ * Clearmessage headers.
+ */
+ private function clearHeaders(): void
+ {
+ $this->headers = null;
+ }
+
+ /**
+ * Get message recent flag value (from headers).
+ */
+ public function isRecent(): ?string
+ {
+ return $this->getHeaders()->get('recent');
+ }
+
+ /**
+ * Get message unseen flag value (from headers).
+ */
+ public function isUnseen(): bool
+ {
+ return 'U' === $this->getHeaders()->get('unseen');
+ }
+
+ /**
+ * Get message flagged flag value (from headers).
+ */
+ public function isFlagged(): bool
+ {
+ return 'F' === $this->getHeaders()->get('flagged');
+ }
+
+ /**
+ * Get message answered flag value (from headers).
+ */
+ public function isAnswered(): bool
+ {
+ return 'A' === $this->getHeaders()->get('answered');
+ }
+
+ /**
+ * Get message deleted flag value (from headers).
+ */
+ public function isDeleted(): bool
+ {
+ return 'D' === $this->getHeaders()->get('deleted');
+ }
+
+ /**
+ * Get message draft flag value (from headers).
+ */
+ public function isDraft(): bool
+ {
+ return 'X' === $this->getHeaders()->get('draft');
+ }
+
+ /**
+ * Has the message been marked as read?
+ */
+ public function isSeen(): bool
+ {
+ return 'N' !== $this->getHeaders()->get('recent') && 'U' !== $this->getHeaders()->get('unseen');
+ }
+
+ /**
+ * Mark message as seen.
+ *
+ * @deprecated since version 1.1, to be removed in 2.0
+ */
+ public function maskAsSeen(): bool
+ {
+ \trigger_error(\sprintf('%s is deprecated and will be removed in 2.0. Use %s::markAsSeen instead.', __METHOD__, __CLASS__), \E_USER_DEPRECATED);
+
+ return $this->markAsSeen();
+ }
+
+ /**
+ * Mark message as seen.
+ */
+ public function markAsSeen(): bool
+ {
+ return $this->setFlag('\\Seen');
+ }
+
+ /**
+ * Move message to another mailbox.
+ *
+ * @throws MessageCopyException
+ */
+ public function copy(MailboxInterface $mailbox): void
+ {
+ // 'deleted' header changed, force to reload headers, would be better to set deleted flag to true on header
+ $this->clearHeaders();
+
+ if (!\imap_mail_copy($this->resource->getStream(), (string) $this->getNumber(), $mailbox->getEncodedName(), \CP_UID)) {
+ throw new MessageCopyException(\sprintf('Message "%s" cannot be copied to "%s"', $this->getNumber(), $mailbox->getName()));
+ }
+ }
+
+ /**
+ * Move message to another mailbox.
+ *
+ * @throws MessageMoveException
+ */
+ public function move(MailboxInterface $mailbox): void
+ {
+ // 'deleted' header changed, force to reload headers, would be better to set deleted flag to true on header
+ $this->clearHeaders();
+
+ if (!\imap_mail_move($this->resource->getStream(), (string) $this->getNumber(), $mailbox->getEncodedName(), \CP_UID)) {
+ throw new MessageMoveException(\sprintf('Message "%s" cannot be moved to "%s"', $this->getNumber(), $mailbox->getName()));
+ }
+ }
+
+ /**
+ * Delete message.
+ *
+ * @throws MessageDeleteException
+ */
+ public function delete(): void
+ {
+ // 'deleted' header changed, force to reload headers, would be better to set deleted flag to true on header
+ $this->clearHeaders();
+
+ if (!\imap_delete($this->resource->getStream(), $this->getNumber(), \FT_UID)) {
+ throw new MessageDeleteException(\sprintf('Message "%s" cannot be deleted', $this->getNumber()));
+ }
+ }
+
+ /**
+ * Undelete message.
+ *
+ * @throws MessageUndeleteException
+ */
+ public function undelete(): void
+ {
+ // 'deleted' header changed, force to reload headers, would be better to set deleted flag to false on header
+ $this->clearHeaders();
+ if (!\imap_undelete($this->resource->getStream(), $this->getNumber(), \FT_UID)) {
+ throw new MessageUndeleteException(\sprintf('Message "%s" cannot be undeleted', $this->getNumber()));
+ }
+ }
+
+ /**
+ * Set Flag Message.
+ *
+ * @param string $flag \Seen, \Answered, \Flagged, \Deleted, and \Draft
+ */
+ public function setFlag(string $flag): bool
+ {
+ $result = \imap_setflag_full($this->resource->getStream(), (string) $this->getNumber(), $flag, \ST_UID);
+
+ $this->clearHeaders();
+
+ return $result;
+ }
+
+ /**
+ * Clear Flag Message.
+ *
+ * @param string $flag \Seen, \Answered, \Flagged, \Deleted, and \Draft
+ */
+ public function clearFlag(string $flag): bool
+ {
+ $result = \imap_clearflag_full($this->resource->getStream(), (string) $this->getNumber(), $flag, \ST_UID);
+
+ $this->clearHeaders();
+
+ return $result;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/AbstractMessage.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/AbstractMessage.php
new file mode 100644
index 0000000..9187c38
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/AbstractMessage.php
@@ -0,0 +1,266 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Message;
+
+use Ddeboer\Imap\Exception\InvalidDateHeaderException;
+
+abstract class AbstractMessage extends AbstractPart
+{
+ /**
+ * @var null|array
+ */
+ private $attachments;
+
+ /**
+ * Get message headers.
+ */
+ abstract public function getHeaders(): Headers;
+
+ /**
+ * Get message id.
+ *
+ * A unique message id in the form <...>
+ */
+ final public function getId(): ?string
+ {
+ return $this->getHeaders()->get('message_id');
+ }
+
+ /**
+ * Get message sender (from headers).
+ */
+ final public function getFrom(): ?EmailAddress
+ {
+ $from = $this->getHeaders()->get('from');
+
+ return null !== $from ? $this->decodeEmailAddress($from[0]) : null;
+ }
+
+ /**
+ * Get To recipients.
+ *
+ * @return EmailAddress[] Empty array in case message has no To: recipients
+ */
+ final public function getTo(): array
+ {
+ return $this->decodeEmailAddresses($this->getHeaders()->get('to') ?: []);
+ }
+
+ /**
+ * Get Cc recipients.
+ *
+ * @return EmailAddress[] Empty array in case message has no CC: recipients
+ */
+ final public function getCc(): array
+ {
+ return $this->decodeEmailAddresses($this->getHeaders()->get('cc') ?: []);
+ }
+
+ /**
+ * Get Bcc recipients.
+ *
+ * @return EmailAddress[] Empty array in case message has no BCC: recipients
+ */
+ final public function getBcc(): array
+ {
+ return $this->decodeEmailAddresses($this->getHeaders()->get('bcc') ?: []);
+ }
+
+ /**
+ * Get Reply-To recipients.
+ *
+ * @return EmailAddress[] Empty array in case message has no Reply-To: recipients
+ */
+ final public function getReplyTo(): array
+ {
+ return $this->decodeEmailAddresses($this->getHeaders()->get('reply_to') ?: []);
+ }
+
+ /**
+ * Get Sender.
+ *
+ * @return EmailAddress[] Empty array in case message has no Sender: recipients
+ */
+ final public function getSender(): array
+ {
+ return $this->decodeEmailAddresses($this->getHeaders()->get('sender') ?: []);
+ }
+
+ /**
+ * Get Return-Path.
+ *
+ * @return EmailAddress[] Empty array in case message has no Return-Path: recipients
+ */
+ final public function getReturnPath(): array
+ {
+ return $this->decodeEmailAddresses($this->getHeaders()->get('return_path') ?: []);
+ }
+
+ /**
+ * Get date (from headers).
+ */
+ final public function getDate(): ?\DateTimeImmutable
+ {
+ /** @var null|string $dateHeader */
+ $dateHeader = $this->getHeaders()->get('date');
+ if (null === $dateHeader) {
+ return null;
+ }
+
+ $alteredValue = $dateHeader;
+ $alteredValue = \str_replace(',', '', $alteredValue);
+ $alteredValue = (string) \preg_replace('/^[a-zA-Z]+ ?/', '', $alteredValue);
+ $alteredValue = (string) \preg_replace('/\(.*\)/', '', $alteredValue);
+ $alteredValue = (string) \preg_replace('/\bUT\b/', 'UTC', $alteredValue);
+ if (0 === \preg_match('/\d\d:\d\d:\d\d.* [\+\-]\d\d:?\d\d/', $alteredValue)) {
+ $alteredValue .= ' +0000';
+ }
+ // Handle numeric months
+ $alteredValue = (string) \preg_replace('/^(\d\d) (\d\d) (\d\d(?:\d\d)?) /', '$3-$2-$1 ', $alteredValue);
+
+ try {
+ $date = new \DateTimeImmutable($alteredValue);
+ } catch (\Throwable $ex) {
+ throw new InvalidDateHeaderException(\sprintf('Invalid Date header found: "%s"', $dateHeader), 0, $ex);
+ }
+
+ return $date;
+ }
+
+ /**
+ * Get message size (from headers).
+ *
+ * @return null|int|string
+ */
+ final public function getSize()
+ {
+ return $this->getHeaders()->get('size');
+ }
+
+ /**
+ * Get message subject (from headers).
+ */
+ final public function getSubject(): ?string
+ {
+ return $this->getHeaders()->get('subject');
+ }
+
+ /**
+ * Get message In-Reply-To (from headers).
+ */
+ final public function getInReplyTo(): array
+ {
+ $inReplyTo = $this->getHeaders()->get('in_reply_to');
+
+ return null !== $inReplyTo ? \explode(' ', $inReplyTo) : [];
+ }
+
+ /**
+ * Get message References (from headers).
+ */
+ final public function getReferences(): array
+ {
+ $references = $this->getHeaders()->get('references');
+
+ return null !== $references ? \explode(' ', $references) : [];
+ }
+
+ /**
+ * Get body HTML.
+ */
+ final public function getBodyHtml(): ?string
+ {
+ $iterator = new \RecursiveIteratorIterator($this, \RecursiveIteratorIterator::SELF_FIRST);
+ foreach ($iterator as $part) {
+ if (self::SUBTYPE_HTML === $part->getSubtype()) {
+ return $part->getDecodedContent();
+ }
+ }
+
+ // If message has no parts and is HTML, return content of message itself.
+ if (self::SUBTYPE_HTML === $this->getSubtype()) {
+ return $this->getDecodedContent();
+ }
+
+ return null;
+ }
+
+ /**
+ * Get body text.
+ */
+ final public function getBodyText(): ?string
+ {
+ $iterator = new \RecursiveIteratorIterator($this, \RecursiveIteratorIterator::SELF_FIRST);
+ foreach ($iterator as $part) {
+ if (self::SUBTYPE_PLAIN === $part->getSubtype()) {
+ return $part->getDecodedContent();
+ }
+ }
+
+ // If message has no parts, return content of message itself.
+ if (self::SUBTYPE_PLAIN === $this->getSubtype()) {
+ return $this->getDecodedContent();
+ }
+
+ return null;
+ }
+
+ /**
+ * Get attachments (if any) linked to this e-mail.
+ *
+ * @return AttachmentInterface[]
+ */
+ final public function getAttachments(): array
+ {
+ if (null === $this->attachments) {
+ $this->attachments = self::gatherAttachments($this);
+ }
+
+ return $this->attachments;
+ }
+
+ private static function gatherAttachments(PartInterface $part): array
+ {
+ $attachments = [];
+ foreach ($part->getParts() as $childPart) {
+ if ($childPart instanceof Attachment) {
+ $attachments[] = $childPart;
+ }
+ if ($childPart->hasChildren()) {
+ $attachments = \array_merge($attachments, self::gatherAttachments($childPart));
+ }
+ }
+
+ return $attachments;
+ }
+
+ /**
+ * Does this message have attachments?
+ */
+ final public function hasAttachments(): bool
+ {
+ return \count($this->getAttachments()) > 0;
+ }
+
+ /**
+ * @param \stdClass[] $addresses
+ */
+ private function decodeEmailAddresses(array $addresses): array
+ {
+ $return = [];
+ foreach ($addresses as $address) {
+ if (isset($address->mailbox)) {
+ $return[] = $this->decodeEmailAddress($address);
+ }
+ }
+
+ return $return;
+ }
+
+ private function decodeEmailAddress(\stdClass $value): EmailAddress
+ {
+ return new EmailAddress($value->mailbox, $value->host, $value->personal);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/AbstractPart.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/AbstractPart.php
new file mode 100644
index 0000000..923f300
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/AbstractPart.php
@@ -0,0 +1,572 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Message;
+
+use Ddeboer\Imap\Exception\ImapFetchbodyException;
+use Ddeboer\Imap\Exception\UnexpectedEncodingException;
+use Ddeboer\Imap\ImapResourceInterface;
+use Ddeboer\Imap\Message;
+
+/**
+ * A message part.
+ */
+abstract class AbstractPart implements PartInterface
+{
+ /**
+ * @var ImapResourceInterface
+ */
+ protected $resource;
+
+ /**
+ * @var bool
+ */
+ private $structureParsed = false;
+
+ /**
+ * @var array
+ */
+ private $parts = [];
+
+ /**
+ * @var string
+ */
+ private $partNumber;
+
+ /**
+ * @var int
+ */
+ private $messageNumber;
+
+ /**
+ * @var \stdClass
+ */
+ private $structure;
+
+ /**
+ * @var Parameters
+ */
+ private $parameters;
+
+ /**
+ * @var null|string
+ */
+ private $type;
+
+ /**
+ * @var null|string
+ */
+ private $subtype;
+
+ /**
+ * @var null|string
+ */
+ private $encoding;
+
+ /**
+ * @var null|string
+ */
+ private $disposition;
+
+ /**
+ * @var null|string
+ */
+ private $description;
+
+ /**
+ * @var null|string
+ */
+ private $bytes;
+
+ /**
+ * @var null|string
+ */
+ private $lines;
+
+ /**
+ * @var null|string
+ */
+ private $content;
+
+ /**
+ * @var null|string
+ */
+ private $decodedContent;
+
+ /**
+ * @var int
+ */
+ private $key = 0;
+
+ /**
+ * @var array
+ */
+ private static $typesMap = [
+ \TYPETEXT => self::TYPE_TEXT,
+ \TYPEMULTIPART => self::TYPE_MULTIPART,
+ \TYPEMESSAGE => self::TYPE_MESSAGE,
+ \TYPEAPPLICATION => self::TYPE_APPLICATION,
+ \TYPEAUDIO => self::TYPE_AUDIO,
+ \TYPEIMAGE => self::TYPE_IMAGE,
+ \TYPEVIDEO => self::TYPE_VIDEO,
+ \TYPEMODEL => self::TYPE_MODEL,
+ \TYPEOTHER => self::TYPE_OTHER,
+ ];
+
+ /**
+ * @var array
+ */
+ private static $encodingsMap = [
+ \ENC7BIT => self::ENCODING_7BIT,
+ \ENC8BIT => self::ENCODING_8BIT,
+ \ENCBINARY => self::ENCODING_BINARY,
+ \ENCBASE64 => self::ENCODING_BASE64,
+ \ENCQUOTEDPRINTABLE => self::ENCODING_QUOTED_PRINTABLE,
+ ];
+
+ /**
+ * @var array
+ */
+ private static $attachmentKeys = [
+ 'name' => true,
+ 'filename' => true,
+ 'name*' => true,
+ 'filename*' => true,
+ ];
+
+ /**
+ * Constructor.
+ *
+ * @param ImapResourceInterface $resource IMAP resource
+ * @param int $messageNumber Message number
+ * @param string $partNumber Part number
+ * @param \stdClass $structure Part structure
+ */
+ public function __construct(
+ ImapResourceInterface $resource,
+ int $messageNumber,
+ string $partNumber,
+ \stdClass $structure
+ ) {
+ $this->resource = $resource;
+ $this->messageNumber = $messageNumber;
+ $this->partNumber = $partNumber;
+ $this->setStructure($structure);
+ }
+
+ /**
+ * Get message number (from headers).
+ */
+ final public function getNumber(): int
+ {
+ $this->assertMessageExists($this->messageNumber);
+
+ return $this->messageNumber;
+ }
+
+ /**
+ * Ensure message exists.
+ */
+ protected function assertMessageExists(int $messageNumber): void
+ {
+ }
+
+ /**
+ * @param \stdClass $structure Part structure
+ */
+ final protected function setStructure(\stdClass $structure): void
+ {
+ $this->structure = $structure;
+ }
+
+ /**
+ * Part structure.
+ */
+ final public function getStructure(): \stdClass
+ {
+ $this->lazyLoadStructure();
+
+ return $this->structure;
+ }
+
+ /**
+ * Lazy load structure.
+ */
+ protected function lazyLoadStructure(): void
+ {
+ }
+
+ /**
+ * Part parameters.
+ */
+ final public function getParameters(): Parameters
+ {
+ $this->lazyParseStructure();
+
+ return $this->parameters;
+ }
+
+ /**
+ * Part charset.
+ */
+ final public function getCharset(): ?string
+ {
+ $this->lazyParseStructure();
+
+ return $this->parameters->get('charset') ?: null;
+ }
+
+ /**
+ * Part type.
+ */
+ final public function getType(): ?string
+ {
+ $this->lazyParseStructure();
+
+ return $this->type;
+ }
+
+ /**
+ * Part subtype.
+ */
+ final public function getSubtype(): ?string
+ {
+ $this->lazyParseStructure();
+
+ return $this->subtype;
+ }
+
+ /**
+ * Part encoding.
+ */
+ final public function getEncoding(): ?string
+ {
+ $this->lazyParseStructure();
+
+ return $this->encoding;
+ }
+
+ /**
+ * Part disposition.
+ */
+ final public function getDisposition(): ?string
+ {
+ $this->lazyParseStructure();
+
+ return $this->disposition;
+ }
+
+ /**
+ * Part description.
+ */
+ final public function getDescription(): ?string
+ {
+ $this->lazyParseStructure();
+
+ return $this->description;
+ }
+
+ /**
+ * Part bytes.
+ *
+ * @return null|int|string
+ */
+ final public function getBytes()
+ {
+ $this->lazyParseStructure();
+
+ return $this->bytes;
+ }
+
+ /**
+ * Part lines.
+ */
+ final public function getLines(): ?string
+ {
+ $this->lazyParseStructure();
+
+ return $this->lines;
+ }
+
+ /**
+ * Get raw part content.
+ */
+ final public function getContent(): string
+ {
+ if (null === $this->content) {
+ $this->content = $this->doGetContent($this->getContentPartNumber());
+ }
+
+ return $this->content;
+ }
+
+ /**
+ * Get content part number.
+ */
+ protected function getContentPartNumber(): string
+ {
+ return $this->partNumber;
+ }
+
+ /**
+ * Get part number.
+ */
+ final public function getPartNumber(): string
+ {
+ return $this->partNumber;
+ }
+
+ /**
+ * Get decoded part content.
+ */
+ final public function getDecodedContent(): string
+ {
+ if (null === $this->decodedContent) {
+ if (self::ENCODING_UNKNOWN === $this->getEncoding()) {
+ throw new UnexpectedEncodingException('Cannot decode a content with an uknown encoding');
+ }
+
+ $content = $this->getContent();
+ if (self::ENCODING_BASE64 === $this->getEncoding()) {
+ $content = \base64_decode($content, false);
+ } elseif (self::ENCODING_QUOTED_PRINTABLE === $this->getEncoding()) {
+ $content = \quoted_printable_decode($content);
+ }
+
+ if (false === $content) {
+ throw new UnexpectedEncodingException('Cannot decode content');
+ }
+
+ // If this part is a text part, convert its charset to UTF-8.
+ // We don't want to decode an attachment's charset.
+ if (!$this instanceof Attachment && null !== $this->getCharset() && self::TYPE_TEXT === $this->getType()) {
+ $content = Transcoder::decode($content, $this->getCharset());
+ }
+
+ $this->decodedContent = $content;
+ }
+
+ return $this->decodedContent;
+ }
+
+ /**
+ * Get raw message content.
+ */
+ final protected function doGetContent(string $partNumber): string
+ {
+ $return = \imap_fetchbody(
+ $this->resource->getStream(),
+ $this->getNumber(),
+ $partNumber,
+ \FT_UID | \FT_PEEK
+ );
+
+ if (false === $return) {
+ throw new ImapFetchbodyException('imap_fetchbody failed');
+ }
+
+ return $return;
+ }
+
+ /**
+ * Get an array of all parts for this message.
+ *
+ * @return PartInterface[]
+ */
+ final public function getParts(): array
+ {
+ $this->lazyParseStructure();
+
+ return $this->parts;
+ }
+
+ /**
+ * Get current child part.
+ *
+ * @return mixed
+ */
+ final public function current()
+ {
+ $this->lazyParseStructure();
+
+ return $this->parts[$this->key];
+ }
+
+ /**
+ * Get current child part.
+ *
+ * @return \RecursiveIterator
+ */
+ final public function getChildren()
+ {
+ return $this->current();
+ }
+
+ /**
+ * Get current child part.
+ *
+ * @return bool
+ */
+ final public function hasChildren()
+ {
+ $this->lazyParseStructure();
+
+ return \count($this->parts) > 0;
+ }
+
+ /**
+ * Get current part key.
+ *
+ * @return int
+ */
+ final public function key()
+ {
+ return $this->key;
+ }
+
+ /**
+ * Move to next part.
+ *
+ * @return void
+ */
+ final public function next()
+ {
+ ++$this->key;
+ }
+
+ /**
+ * Reset part key.
+ *
+ * @return void
+ */
+ final public function rewind()
+ {
+ $this->key = 0;
+ }
+
+ /**
+ * Check if current part is a valid one.
+ *
+ * @return bool
+ */
+ final public function valid()
+ {
+ $this->lazyParseStructure();
+
+ return isset($this->parts[$this->key]);
+ }
+
+ /**
+ * Parse part structure.
+ */
+ private function lazyParseStructure(): void
+ {
+ if (true === $this->structureParsed) {
+ return;
+ }
+ $this->structureParsed = true;
+
+ $this->lazyLoadStructure();
+
+ $this->type = self::$typesMap[$this->structure->type] ?? self::TYPE_UNKNOWN;
+
+ // In our context, \ENCOTHER is as useful as an uknown encoding
+ $this->encoding = self::$encodingsMap[$this->structure->encoding] ?? self::ENCODING_UNKNOWN;
+ $this->subtype = $this->structure->subtype;
+
+ if (isset($this->structure->bytes)) {
+ $this->bytes = $this->structure->bytes;
+ }
+ if ($this->structure->ifdisposition) {
+ $this->disposition = $this->structure->disposition;
+ }
+ if ($this->structure->ifdescription) {
+ $this->description = $this->structure->description;
+ }
+
+ $this->parameters = new Parameters();
+ if ($this->structure->ifparameters) {
+ $this->parameters->add($this->structure->parameters);
+ }
+
+ if ($this->structure->ifdparameters) {
+ $this->parameters->add($this->structure->dparameters);
+ }
+
+ // When the message is not multipart and the body is the attachment content
+ // Prevents infinite recursion
+ if (self::isAttachment($this->structure) && !$this instanceof Attachment) {
+ $this->parts[] = new Attachment($this->resource, $this->getNumber(), '1', $this->structure);
+ }
+
+ if (isset($this->structure->parts)) {
+ $parts = $this->structure->parts;
+ // https://secure.php.net/manual/en/function.imap-fetchbody.php#89002
+ if ($this instanceof Attachment && $this->isEmbeddedMessage() && 1 === \count($parts) && \TYPEMULTIPART === $parts[0]->type) {
+ $parts = $parts[0]->parts;
+ }
+ foreach ($parts as $key => $partStructure) {
+ $partNumber = (!$this instanceof Message) ? $this->partNumber . '.' : '';
+ $partNumber .= (string) ($key + 1);
+
+ $newPartClass = self::isAttachment($partStructure)
+ ? Attachment::class
+ : SimplePart::class
+ ;
+
+ $this->parts[] = new $newPartClass($this->resource, $this->getNumber(), $partNumber, $partStructure);
+ }
+ }
+ }
+
+ /**
+ * Check if the given part is an attachment.
+ */
+ private static function isAttachment(\stdClass $part): bool
+ {
+ if (isset(self::$typesMap[$part->type]) && self::TYPE_MULTIPART === self::$typesMap[$part->type]) {
+ return false;
+ }
+
+ // Attachment with correct Content-Disposition header
+ if ($part->ifdisposition) {
+ if ('attachment' === \strtolower($part->disposition)) {
+ return true;
+ }
+
+ if (
+ 'inline' === \strtolower($part->disposition)
+ && self::SUBTYPE_PLAIN !== \strtoupper($part->subtype)
+ && self::SUBTYPE_HTML !== \strtoupper($part->subtype)
+ ) {
+ return true;
+ }
+ }
+
+ // Attachment without Content-Disposition header
+ if ($part->ifparameters) {
+ foreach ($part->parameters as $parameter) {
+ if (isset(self::$attachmentKeys[\strtolower($parameter->attribute)])) {
+ return true;
+ }
+ }
+ }
+
+ /*
+ if ($part->ifdparameters) {
+ foreach ($part->dparameters as $parameter) {
+ if (isset(self::$attachmentKeys[\strtolower($parameter->attribute)])) {
+ return true;
+ }
+ }
+ }
+ */
+
+ if (self::SUBTYPE_RFC822 === \strtoupper($part->subtype)) {
+ return true;
+ }
+
+ return false;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Attachment.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Attachment.php
new file mode 100644
index 0000000..bd76769
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Attachment.php
@@ -0,0 +1,63 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Message;
+
+use Ddeboer\Imap\Exception\NotEmbeddedMessageException;
+
+/**
+ * An e-mail attachment.
+ */
+final class Attachment extends AbstractPart implements AttachmentInterface
+{
+ /**
+ * Get attachment filename.
+ */
+ public function getFilename(): ?string
+ {
+ return $this->getParameters()->get('filename')
+ ?: $this->getParameters()->get('name');
+ }
+
+ /**
+ * Get attachment file size.
+ *
+ * @return null|int Number of bytes
+ */
+ public function getSize()
+ {
+ $size = $this->getParameters()->get('size');
+ if (\is_numeric($size)) {
+ $size = (int) $size;
+ }
+
+ return $size;
+ }
+
+ /**
+ * Is this attachment also an Embedded Message?
+ */
+ public function isEmbeddedMessage(): bool
+ {
+ return self::TYPE_MESSAGE === $this->getType();
+ }
+
+ /**
+ * Return embedded message.
+ *
+ * @throws NotEmbeddedMessageException
+ */
+ public function getEmbeddedMessage(): EmbeddedMessageInterface
+ {
+ if (!$this->isEmbeddedMessage()) {
+ throw new NotEmbeddedMessageException(\sprintf(
+ 'Attachment "%s" in message "%s" is not embedded message',
+ $this->getPartNumber(),
+ $this->getNumber()
+ ));
+ }
+
+ return new EmbeddedMessage($this->resource, $this->getNumber(), $this->getPartNumber(), $this->getStructure()->parts[0]);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/AttachmentInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/AttachmentInterface.php
new file mode 100644
index 0000000..0d20f44
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/AttachmentInterface.php
@@ -0,0 +1,33 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Message;
+
+/**
+ * An e-mail attachment.
+ */
+interface AttachmentInterface extends PartInterface
+{
+ /**
+ * Get attachment filename.
+ */
+ public function getFilename(): ?string;
+
+ /**
+ * Get attachment file size.
+ *
+ * @return null|int Number of bytes
+ */
+ public function getSize();
+
+ /**
+ * Is this attachment also an Embedded Message?
+ */
+ public function isEmbeddedMessage(): bool;
+
+ /**
+ * Return embedded message.
+ */
+ public function getEmbeddedMessage(): EmbeddedMessageInterface;
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/BasicMessageInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/BasicMessageInterface.php
new file mode 100644
index 0000000..20e6b1a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/BasicMessageInterface.php
@@ -0,0 +1,130 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Message;
+
+interface BasicMessageInterface extends PartInterface
+{
+ /**
+ * Get raw message headers.
+ */
+ public function getRawHeaders(): string;
+
+ /**
+ * Get the raw message, including all headers, parts, etc. unencoded and unparsed.
+ *
+ * @return string the raw message
+ */
+ public function getRawMessage(): string;
+
+ /**
+ * Get message headers.
+ */
+ public function getHeaders(): Headers;
+
+ /**
+ * Get message id.
+ *
+ * A unique message id in the form <...>
+ */
+ public function getId(): ?string;
+
+ /**
+ * Get message sender (from headers).
+ */
+ public function getFrom(): ?EmailAddress;
+
+ /**
+ * Get To recipients.
+ *
+ * @return EmailAddress[] Empty array in case message has no To: recipients
+ */
+ public function getTo(): array;
+
+ /**
+ * Get Cc recipients.
+ *
+ * @return EmailAddress[] Empty array in case message has no CC: recipients
+ */
+ public function getCc(): array;
+
+ /**
+ * Get Bcc recipients.
+ *
+ * @return EmailAddress[] Empty array in case message has no BCC: recipients
+ */
+ public function getBcc(): array;
+
+ /**
+ * Get Reply-To recipients.
+ *
+ * @return EmailAddress[] Empty array in case message has no Reply-To: recipients
+ */
+ public function getReplyTo(): array;
+
+ /**
+ * Get Sender.
+ *
+ * @return EmailAddress[] Empty array in case message has no Sender: recipients
+ */
+ public function getSender(): array;
+
+ /**
+ * Get Return-Path.
+ *
+ * @return EmailAddress[] Empty array in case message has no Return-Path: recipients
+ */
+ public function getReturnPath(): array;
+
+ /**
+ * Get date (from headers).
+ */
+ public function getDate(): ?\DateTimeImmutable;
+
+ /**
+ * Get message size (from headers).
+ *
+ * @return null|int|string
+ */
+ public function getSize();
+
+ /**
+ * Get message subject (from headers).
+ */
+ public function getSubject(): ?string;
+
+ /**
+ * Get message In-Reply-To (from headers).
+ */
+ public function getInReplyTo(): array;
+
+ /**
+ * Get message References (from headers).
+ */
+ public function getReferences(): array;
+
+ /**
+ * Get body HTML.
+ *
+ * @return null|string Null if message has no HTML message part
+ */
+ public function getBodyHtml(): ?string;
+
+ /**
+ * Get body text.
+ */
+ public function getBodyText(): ?string;
+
+ /**
+ * Get attachments (if any) linked to this e-mail.
+ *
+ * @return AttachmentInterface[]
+ */
+ public function getAttachments(): array;
+
+ /**
+ * Does this message have attachments?
+ */
+ public function hasAttachments(): bool;
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/EmailAddress.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/EmailAddress.php
new file mode 100644
index 0000000..b88e0f9
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/EmailAddress.php
@@ -0,0 +1,84 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Message;
+
+/**
+ * An e-mail address.
+ */
+final class EmailAddress
+{
+ /**
+ * @var string
+ */
+ private $mailbox;
+
+ /**
+ * @var null|string
+ */
+ private $hostname;
+
+ /**
+ * @var null|string
+ */
+ private $name;
+
+ /**
+ * @var null|string
+ */
+ private $address;
+
+ public function __construct(string $mailbox, string $hostname = null, string $name = null)
+ {
+ $this->mailbox = $mailbox;
+ $this->hostname = $hostname;
+ $this->name = $name;
+
+ if (null !== $hostname) {
+ $this->address = $mailbox . '@' . $hostname;
+ }
+ }
+
+ /**
+ * @return null|string
+ */
+ public function getAddress()
+ {
+ return $this->address;
+ }
+
+ /**
+ * Returns address with person name.
+ */
+ public function getFullAddress(): string
+ {
+ $address = \sprintf('%s@%s', $this->mailbox, $this->hostname);
+ if (null !== $this->name) {
+ $address = \sprintf('"%s" <%s>', \addcslashes($this->name, '"'), $address);
+ }
+
+ return $address;
+ }
+
+ public function getMailbox(): string
+ {
+ return $this->mailbox;
+ }
+
+ /**
+ * @return null|string
+ */
+ public function getHostname()
+ {
+ return $this->hostname;
+ }
+
+ /**
+ * @return null|string
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/EmbeddedMessage.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/EmbeddedMessage.php
new file mode 100644
index 0000000..243cff6
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/EmbeddedMessage.php
@@ -0,0 +1,75 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Message;
+
+final class EmbeddedMessage extends AbstractMessage implements EmbeddedMessageInterface
+{
+ /**
+ * @var null|Headers
+ */
+ private $headers;
+
+ /**
+ * @var null|string
+ */
+ private $rawHeaders;
+
+ /**
+ * @var null|string
+ */
+ private $rawMessage;
+
+ /**
+ * Get message headers.
+ */
+ public function getHeaders(): Headers
+ {
+ if (null === $this->headers) {
+ $this->headers = new Headers(\imap_rfc822_parse_headers($this->getRawHeaders()));
+ }
+
+ return $this->headers;
+ }
+
+ /**
+ * Get raw message headers.
+ */
+ public function getRawHeaders(): string
+ {
+ if (null === $this->rawHeaders) {
+ $rawHeaders = \explode("\r\n\r\n", $this->getRawMessage(), 2);
+ $this->rawHeaders = \current($rawHeaders);
+ }
+
+ return $this->rawHeaders;
+ }
+
+ /**
+ * Get the raw message, including all headers, parts, etc. unencoded and unparsed.
+ *
+ * @return string the raw message
+ */
+ public function getRawMessage(): string
+ {
+ if (null === $this->rawMessage) {
+ $this->rawMessage = $this->doGetContent($this->getPartNumber());
+ }
+
+ return $this->rawMessage;
+ }
+
+ /**
+ * Get content part number.
+ */
+ protected function getContentPartNumber(): string
+ {
+ $partNumber = $this->getPartNumber();
+ if (0 === \count($this->getParts())) {
+ $partNumber .= '.1';
+ }
+
+ return $partNumber;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/EmbeddedMessageInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/EmbeddedMessageInterface.php
new file mode 100644
index 0000000..c685edf
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/EmbeddedMessageInterface.php
@@ -0,0 +1,9 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Message;
+
+interface EmbeddedMessageInterface extends BasicMessageInterface
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Headers.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Headers.php
new file mode 100644
index 0000000..f76fec3
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Headers.php
@@ -0,0 +1,72 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Message;
+
+/**
+ * Collection of message headers.
+ */
+final class Headers extends Parameters
+{
+ /**
+ * Constructor.
+ */
+ public function __construct(\stdClass $headers)
+ {
+ parent::__construct();
+
+ // Store all headers as lowercase
+ $headers = \array_change_key_case((array) $headers);
+
+ foreach ($headers as $key => $value) {
+ $this[$key] = $this->parseHeader($key, $value);
+ }
+ }
+
+ /**
+ * Get header.
+ *
+ * @return mixed
+ */
+ public function get(string $key)
+ {
+ return parent::get(\strtolower($key));
+ }
+
+ /**
+ * Parse header.
+ *
+ * @param mixed $value
+ *
+ * @return mixed
+ */
+ private function parseHeader(string $key, $value)
+ {
+ switch ($key) {
+ case 'msgno':
+ return (int) $value;
+ case 'from':
+ case 'to':
+ case 'cc':
+ case 'bcc':
+ case 'reply_to':
+ case 'sender':
+ case 'return_path':
+ /** @var \stdClass $address */
+ foreach ($value as $address) {
+ if (isset($address->mailbox)) {
+ $address->host = $address->host ?? null;
+ $address->personal = isset($address->personal) ? $this->decode($address->personal) : null;
+ }
+ }
+
+ return $value;
+ case 'date':
+ case 'subject':
+ return $this->decode($value);
+ }
+
+ return $value;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Parameters.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Parameters.php
new file mode 100644
index 0000000..2f7d8a1
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Parameters.php
@@ -0,0 +1,74 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Message;
+
+class Parameters extends \ArrayIterator
+{
+ /**
+ * @var array
+ */
+ private static $attachmentCustomKeys = [
+ 'name*' => 'name',
+ 'filename*' => 'filename',
+ ];
+
+ public function __construct(array $parameters = [])
+ {
+ parent::__construct();
+
+ $this->add($parameters);
+ }
+
+ public function add(array $parameters = []): void
+ {
+ foreach ($parameters as $parameter) {
+ $key = \strtolower($parameter->attribute);
+ if (isset(self::$attachmentCustomKeys[$key])) {
+ $key = self::$attachmentCustomKeys[$key];
+ }
+ $value = $this->decode($parameter->value);
+ $this[$key] = $value;
+ }
+ }
+
+ /**
+ * @return mixed
+ */
+ public function get(string $key)
+ {
+ return $this[$key] ?? null;
+ }
+
+ /**
+ * Decode value.
+ */
+ final protected function decode(string $value): string
+ {
+ $parts = \imap_mime_header_decode($value);
+ if (!\is_array($parts)) {
+ return $value;
+ }
+
+ $decoded = '';
+ foreach ($parts as $part) {
+ $text = $part->text;
+ if ('default' !== $part->charset) {
+ $text = Transcoder::decode($text, $part->charset);
+ }
+ // RFC2231
+ if (1 === \preg_match('/^(?<encoding>[^\']+)\'[^\']*?\'(?<urltext>.+)$/', $text, $matches)) {
+ $hasInvalidChars = 1 === \preg_match('#[^%a-zA-Z0-9\-_\.\+]#', $matches['urltext']);
+ $hasEscapedChars = 1 === \preg_match('#%[a-zA-Z0-9]{2}#', $matches['urltext']);
+ if (!$hasInvalidChars && $hasEscapedChars) {
+ $text = Transcoder::decode(\urldecode($matches['urltext']), $matches['encoding']);
+ }
+ }
+
+ $decoded .= $text;
+ }
+
+ return $decoded;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/PartInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/PartInterface.php
new file mode 100644
index 0000000..70a83f2
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/PartInterface.php
@@ -0,0 +1,112 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Message;
+
+/**
+ * A message part.
+ */
+interface PartInterface extends \RecursiveIterator
+{
+ public const TYPE_TEXT = 'text';
+ public const TYPE_MULTIPART = 'multipart';
+ public const TYPE_MESSAGE = 'message';
+ public const TYPE_APPLICATION = 'application';
+ public const TYPE_AUDIO = 'audio';
+ public const TYPE_IMAGE = 'image';
+ public const TYPE_VIDEO = 'video';
+ public const TYPE_MODEL = 'model';
+ public const TYPE_OTHER = 'other';
+ public const TYPE_UNKNOWN = 'unknown';
+
+ public const ENCODING_7BIT = '7bit';
+ public const ENCODING_8BIT = '8bit';
+ public const ENCODING_BINARY = 'binary';
+ public const ENCODING_BASE64 = 'base64';
+ public const ENCODING_QUOTED_PRINTABLE = 'quoted-printable';
+ public const ENCODING_UNKNOWN = 'unknown';
+
+ public const SUBTYPE_PLAIN = 'PLAIN';
+ public const SUBTYPE_HTML = 'HTML';
+ public const SUBTYPE_RFC822 = 'RFC822';
+
+ /**
+ * Get message number (from headers).
+ */
+ public function getNumber(): int;
+
+ /**
+ * Part charset.
+ */
+ public function getCharset(): ?string;
+
+ /**
+ * Part type.
+ */
+ public function getType(): ?string;
+
+ /**
+ * Part subtype.
+ */
+ public function getSubtype(): ?string;
+
+ /**
+ * Part encoding.
+ */
+ public function getEncoding(): ?string;
+
+ /**
+ * Part disposition.
+ */
+ public function getDisposition(): ?string;
+
+ /**
+ * Part description.
+ */
+ public function getDescription(): ?string;
+
+ /**
+ * Part bytes.
+ *
+ * @return null|int|string
+ */
+ public function getBytes();
+
+ /**
+ * Part lines.
+ */
+ public function getLines(): ?string;
+
+ /**
+ * Part parameters.
+ */
+ public function getParameters(): Parameters;
+
+ /**
+ * Get raw part content.
+ */
+ public function getContent(): string;
+
+ /**
+ * Get decoded part content.
+ */
+ public function getDecodedContent(): string;
+
+ /**
+ * Part structure.
+ */
+ public function getStructure(): \stdClass;
+
+ /**
+ * Get part number.
+ */
+ public function getPartNumber(): string;
+
+ /**
+ * Get an array of all parts for this message.
+ *
+ * @return PartInterface[]
+ */
+ public function getParts(): array;
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/SimplePart.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/SimplePart.php
new file mode 100644
index 0000000..3c6188d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/SimplePart.php
@@ -0,0 +1,12 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Message;
+
+/**
+ * A message part.
+ */
+final class SimplePart extends AbstractPart
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Transcoder.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Transcoder.php
new file mode 100644
index 0000000..15dfb87
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Message/Transcoder.php
@@ -0,0 +1,328 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Message;
+
+use Ddeboer\Imap\Exception\UnsupportedCharsetException;
+
+final class Transcoder
+{
+ /**
+ * @var array
+ *
+ * @see https://encoding.spec.whatwg.org/#encodings
+ * @see https://dxr.mozilla.org/mozilla-central/source/dom/encoding/labelsencodings.properties
+ * @see https://dxr.mozilla.org/mozilla1.9.1/source/intl/uconv/src/charsetalias.properties
+ * @see https://msdn.microsoft.com/en-us/library/cc194829.aspx
+ */
+ private static $charsetAliases = [
+ '128' => 'Shift_JIS',
+ '129' => 'EUC-KR',
+ '134' => 'GB2312',
+ '136' => 'Big5',
+ '161' => 'windows-1253',
+ '162' => 'windows-1254',
+ '177' => 'windows-1255',
+ '178' => 'windows-1256',
+ '186' => 'windows-1257',
+ '204' => 'windows-1251',
+ '222' => 'windows-874',
+ '238' => 'windows-1250',
+ '5601' => 'EUC-KR',
+ '646' => 'us-ascii',
+ '850' => 'IBM850',
+ '852' => 'IBM852',
+ '855' => 'IBM855',
+ '857' => 'IBM857',
+ '862' => 'IBM862',
+ '864' => 'IBM864',
+ '864i' => 'IBM864i',
+ '866' => 'IBM866',
+ 'ansi-1251' => 'windows-1251',
+ 'ansi_x3.4-1968' => 'us-ascii',
+ 'arabic' => 'ISO-8859-6',
+ 'ascii' => 'us-ascii',
+ 'asmo-708' => 'ISO-8859-6',
+ 'big5-hkscs' => 'Big5',
+ 'chinese' => 'GB2312',
+ 'cn-big5' => 'Big5',
+ 'cns11643' => 'x-euc-tw',
+ 'cp-866' => 'IBM866',
+ 'cp1250' => 'windows-1250',
+ 'cp1251' => 'windows-1251',
+ 'cp1252' => 'windows-1252',
+ 'cp1253' => 'windows-1253',
+ 'cp1254' => 'windows-1254',
+ 'cp1255' => 'windows-1255',
+ 'cp1256' => 'windows-1256',
+ 'cp1257' => 'windows-1257',
+ 'cp1258' => 'windows-1258',
+ 'cp819' => 'ISO-8859-1',
+ 'cp850' => 'IBM850',
+ 'cp852' => 'IBM852',
+ 'cp855' => 'IBM855',
+ 'cp857' => 'IBM857',
+ 'cp862' => 'IBM862',
+ 'cp864' => 'IBM864',
+ 'cp864i' => 'IBM864i',
+ 'cp866' => 'IBM866',
+ 'cp932' => 'Shift_JIS',
+ 'csbig5' => 'Big5',
+ 'cseucjpkdfmtjapanese' => 'EUC-JP',
+ 'cseuckr' => 'EUC-KR',
+ 'cseucpkdfmtjapanese' => 'EUC-JP',
+ 'csgb2312' => 'GB2312',
+ 'csibm850' => 'IBM850',
+ 'csibm852' => 'IBM852',
+ 'csibm855' => 'IBM855',
+ 'csibm857' => 'IBM857',
+ 'csibm862' => 'IBM862',
+ 'csibm864' => 'IBM864',
+ 'csibm864i' => 'IBM864i',
+ 'csibm866' => 'IBM866',
+ 'csiso103t618bit' => 'T.61-8bit',
+ 'csiso111ecmacyrillic' => 'ISO-IR-111',
+ 'csiso2022jp' => 'ISO-2022-JP',
+ 'csiso2022jp2' => 'ISO-2022-JP',
+ 'csiso2022kr' => 'ISO-2022-KR',
+ 'csiso58gb231280' => 'GB2312',
+ 'csiso88596e' => 'ISO-8859-6-E',
+ 'csiso88596i' => 'ISO-8859-6-I',
+ 'csiso88598e' => 'ISO-8859-8-E',
+ 'csiso88598i' => 'ISO-8859-8-I',
+ 'csisolatin1' => 'ISO-8859-1',
+ 'csisolatin2' => 'ISO-8859-2',
+ 'csisolatin3' => 'ISO-8859-3',
+ 'csisolatin4' => 'ISO-8859-4',
+ 'csisolatin5' => 'ISO-8859-9',
+ 'csisolatin6' => 'ISO-8859-10',
+ 'csisolatin9' => 'ISO-8859-15',
+ 'csisolatinarabic' => 'ISO-8859-6',
+ 'csisolatincyrillic' => 'ISO-8859-5',
+ 'csisolatingreek' => 'ISO-8859-7',
+ 'csisolatinhebrew' => 'ISO-8859-8',
+ 'cskoi8r' => 'KOI8-R',
+ 'csksc56011987' => 'EUC-KR',
+ 'csmacintosh' => 'x-mac-roman',
+ 'csshiftjis' => 'Shift_JIS',
+ 'csueckr' => 'EUC-KR',
+ 'csunicode' => 'UTF-16BE',
+ 'csunicode11' => 'UTF-16BE',
+ 'csunicode11utf7' => 'UTF-7',
+ 'csunicodeascii' => 'UTF-16BE',
+ 'csunicodelatin1' => 'UTF-16BE',
+ 'csviqr' => 'VIQR',
+ 'csviscii' => 'VISCII',
+ 'cyrillic' => 'ISO-8859-5',
+ 'dos-874' => 'windows-874',
+ 'ecma-114' => 'ISO-8859-6',
+ 'ecma-118' => 'ISO-8859-7',
+ 'ecma-cyrillic' => 'ISO-IR-111',
+ 'elot_928' => 'ISO-8859-7',
+ 'gb_2312' => 'GB2312',
+ 'gb_2312-80' => 'GB2312',
+ 'greek' => 'ISO-8859-7',
+ 'greek8' => 'ISO-8859-7',
+ 'hebrew' => 'ISO-8859-8',
+ 'ibm-864' => 'IBM864',
+ 'ibm-864i' => 'IBM864i',
+ 'ibm819' => 'ISO-8859-1',
+ 'ibm874' => 'windows-874',
+ 'iso-10646' => 'UTF-16BE',
+ 'iso-10646-j-1' => 'UTF-16BE',
+ 'iso-10646-ucs-2' => 'UTF-16BE',
+ 'iso-10646-ucs-4' => 'UTF-32BE',
+ 'iso-10646-ucs-basic' => 'UTF-16BE',
+ 'iso-10646-unicode-latin1' => 'UTF-16BE',
+ 'iso-2022-cn-ext' => 'ISO-2022-CN',
+ 'iso-2022-jp-2' => 'ISO-2022-JP',
+ 'iso-8859-8i' => 'ISO-8859-8-I',
+ 'iso-ir-100' => 'ISO-8859-1',
+ 'iso-ir-101' => 'ISO-8859-2',
+ 'iso-ir-103' => 'T.61-8bit',
+ 'iso-ir-109' => 'ISO-8859-3',
+ 'iso-ir-110' => 'ISO-8859-4',
+ 'iso-ir-126' => 'ISO-8859-7',
+ 'iso-ir-127' => 'ISO-8859-6',
+ 'iso-ir-138' => 'ISO-8859-8',
+ 'iso-ir-144' => 'ISO-8859-5',
+ 'iso-ir-148' => 'ISO-8859-9',
+ 'iso-ir-149' => 'EUC-KR',
+ 'iso-ir-157' => 'ISO-8859-10',
+ 'iso-ir-58' => 'GB2312',
+ 'iso8859-1' => 'ISO-8859-1',
+ 'iso8859-10' => 'ISO-8859-10',
+ 'iso8859-11' => 'ISO-8859-11',
+ 'iso8859-13' => 'ISO-8859-13',
+ 'iso8859-14' => 'ISO-8859-14',
+ 'iso8859-15' => 'ISO-8859-15',
+ 'iso8859-2' => 'ISO-8859-2',
+ 'iso8859-3' => 'ISO-8859-3',
+ 'iso8859-4' => 'ISO-8859-4',
+ 'iso8859-5' => 'ISO-8859-5',
+ 'iso8859-6' => 'ISO-8859-6',
+ 'iso8859-7' => 'ISO-8859-7',
+ 'iso8859-8' => 'ISO-8859-8',
+ 'iso8859-9' => 'ISO-8859-9',
+ 'iso88591' => 'ISO-8859-1',
+ 'iso885910' => 'ISO-8859-10',
+ 'iso885911' => 'ISO-8859-11',
+ 'iso885912' => 'ISO-8859-12',
+ 'iso885913' => 'ISO-8859-13',
+ 'iso885914' => 'ISO-8859-14',
+ 'iso885915' => 'ISO-8859-15',
+ 'iso88592' => 'ISO-8859-2',
+ 'iso88593' => 'ISO-8859-3',
+ 'iso88594' => 'ISO-8859-4',
+ 'iso88595' => 'ISO-8859-5',
+ 'iso88596' => 'ISO-8859-6',
+ 'iso88597' => 'ISO-8859-7',
+ 'iso88598' => 'ISO-8859-8',
+ 'iso88599' => 'ISO-8859-9',
+ 'iso_8859-1' => 'ISO-8859-1',
+ 'iso_8859-15' => 'ISO-8859-15',
+ 'iso_8859-1:1987' => 'ISO-8859-1',
+ 'iso_8859-2' => 'ISO-8859-2',
+ 'iso_8859-2:1987' => 'ISO-8859-2',
+ 'iso_8859-3' => 'ISO-8859-3',
+ 'iso_8859-3:1988' => 'ISO-8859-3',
+ 'iso_8859-4' => 'ISO-8859-4',
+ 'iso_8859-4:1988' => 'ISO-8859-4',
+ 'iso_8859-5' => 'ISO-8859-5',
+ 'iso_8859-5:1988' => 'ISO-8859-5',
+ 'iso_8859-6' => 'ISO-8859-6',
+ 'iso_8859-6:1987' => 'ISO-8859-6',
+ 'iso_8859-7' => 'ISO-8859-7',
+ 'iso_8859-7:1987' => 'ISO-8859-7',
+ 'iso_8859-8' => 'ISO-8859-8',
+ 'iso_8859-8:1988' => 'ISO-8859-8',
+ 'iso_8859-9' => 'ISO-8859-9',
+ 'iso_8859-9:1989' => 'ISO-8859-9',
+ 'koi' => 'KOI8-R',
+ 'koi8' => 'KOI8-R',
+ 'koi8-ru' => 'KOI8-U',
+ 'koi8_r' => 'KOI8-R',
+ 'korean' => 'EUC-KR',
+ 'ks_c_5601-1987' => 'EUC-KR',
+ 'ks_c_5601-1989' => 'EUC-KR',
+ 'ksc5601' => 'EUC-KR',
+ 'ksc_5601' => 'EUC-KR',
+ 'l1' => 'ISO-8859-1',
+ 'l2' => 'ISO-8859-2',
+ 'l3' => 'ISO-8859-3',
+ 'l4' => 'ISO-8859-4',
+ 'l5' => 'ISO-8859-9',
+ 'l6' => 'ISO-8859-10',
+ 'l9' => 'ISO-8859-15',
+ 'latin1' => 'ISO-8859-1',
+ 'latin2' => 'ISO-8859-2',
+ 'latin3' => 'ISO-8859-3',
+ 'latin4' => 'ISO-8859-4',
+ 'latin5' => 'ISO-8859-9',
+ 'latin6' => 'ISO-8859-10',
+ 'logical' => 'ISO-8859-8-I',
+ 'mac' => 'x-mac-roman',
+ 'macintosh' => 'x-mac-roman',
+ 'ms932' => 'Shift_JIS',
+ 'ms_kanji' => 'Shift_JIS',
+ 'shift-jis' => 'Shift_JIS',
+ 'sjis' => 'Shift_JIS',
+ 'sun_eu_greek' => 'ISO-8859-7',
+ 't.61' => 'T.61-8bit',
+ 'tis620' => 'TIS-620',
+ 'unicode-1-1-utf-7' => 'UTF-7',
+ 'unicode-1-1-utf-8' => 'UTF-8',
+ 'unicode-2-0-utf-7' => 'UTF-7',
+ 'visual' => 'ISO-8859-8',
+ 'windows-31j' => 'Shift_JIS',
+ 'windows-949' => 'EUC-KR',
+ 'x-cp1250' => 'windows-1250',
+ 'x-cp1251' => 'windows-1251',
+ 'x-cp1252' => 'windows-1252',
+ 'x-cp1253' => 'windows-1253',
+ 'x-cp1254' => 'windows-1254',
+ 'x-cp1255' => 'windows-1255',
+ 'x-cp1256' => 'windows-1256',
+ 'x-cp1257' => 'windows-1257',
+ 'x-cp1258' => 'windows-1258',
+ 'x-euc-jp' => 'EUC-JP',
+ 'x-gbk' => 'gbk',
+ 'x-iso-10646-ucs-2-be' => 'UTF-16BE',
+ 'x-iso-10646-ucs-2-le' => 'UTF-16LE',
+ 'x-iso-10646-ucs-4-be' => 'UTF-32BE',
+ 'x-iso-10646-ucs-4-le' => 'UTF-32LE',
+ 'x-sjis' => 'Shift_JIS',
+ 'x-unicode-2-0-utf-7' => 'UTF-7',
+ 'x-x-big5' => 'Big5',
+ 'zh_cn.euc' => 'GB2312',
+ 'zh_tw-big5' => 'Big5',
+ 'zh_tw-euc' => 'x-euc-tw',
+ ];
+
+ /**
+ * Decode text to UTF-8.
+ *
+ * @param string $text Text to decode
+ * @param string $fromCharset Original charset
+ */
+ public static function decode(string $text, string $fromCharset): string
+ {
+ static $utf8Aliases = [
+ 'unicode-1-1-utf-8' => true,
+ 'utf8' => true,
+ 'utf-8' => true,
+ 'UTF8' => true,
+ 'UTF-8' => true,
+ ];
+
+ if (isset($utf8Aliases[$fromCharset])) {
+ return $text;
+ }
+
+ $originalFromCharset = $fromCharset;
+ $lowercaseFromCharset = \strtolower($fromCharset);
+ if (isset(self::$charsetAliases[$lowercaseFromCharset])) {
+ $fromCharset = self::$charsetAliases[$lowercaseFromCharset];
+ }
+
+ \set_error_handler(static function (): bool {
+ return true;
+ });
+
+ $iconvDecodedText = \iconv($fromCharset, 'UTF-8', $text);
+ if (false === $iconvDecodedText) {
+ $iconvDecodedText = \iconv($originalFromCharset, 'UTF-8', $text);
+ }
+
+ \restore_error_handler();
+
+ if (false !== $iconvDecodedText) {
+ return $iconvDecodedText;
+ }
+
+ $errorMessage = null;
+ $errorNumber = 0;
+ \set_error_handler(static function ($nr, $message) use (&$errorMessage, &$errorNumber): bool {
+ $errorMessage = $message;
+ $errorNumber = $nr;
+
+ return true;
+ });
+
+ $decodedText = \mb_convert_encoding($text, 'UTF-8', $fromCharset);
+
+ \restore_error_handler();
+
+ if (null !== $errorMessage) {
+ throw new UnsupportedCharsetException(\sprintf(
+ 'Unsupported charset "%s"%s: %s',
+ $originalFromCharset,
+ ($fromCharset !== $originalFromCharset) ? \sprintf(' (alias found: "%s")', $fromCharset) : '',
+ $errorMessage
+ ), $errorNumber);
+ }
+
+ return $decodedText;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MessageInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MessageInterface.php
new file mode 100644
index 0000000..eda8ab6
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MessageInterface.php
@@ -0,0 +1,97 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap;
+
+/**
+ * An IMAP message (e-mail).
+ */
+interface MessageInterface extends Message\BasicMessageInterface
+{
+ /**
+ * Get raw part content.
+ */
+ public function getContent(): string;
+
+ /**
+ * Get message recent flag value (from headers).
+ */
+ public function isRecent(): ?string;
+
+ /**
+ * Get message unseen flag value (from headers).
+ */
+ public function isUnseen(): bool;
+
+ /**
+ * Get message flagged flag value (from headers).
+ */
+ public function isFlagged(): bool;
+
+ /**
+ * Get message answered flag value (from headers).
+ */
+ public function isAnswered(): bool;
+
+ /**
+ * Get message deleted flag value (from headers).
+ */
+ public function isDeleted(): bool;
+
+ /**
+ * Get message draft flag value (from headers).
+ */
+ public function isDraft(): bool;
+
+ /**
+ * Has the message been marked as read?
+ */
+ public function isSeen(): bool;
+
+ /**
+ * Mark message as seen.
+ *
+ * @deprecated since version 1.1, to be removed in 2.0
+ */
+ public function maskAsSeen(): bool;
+
+ /**
+ * Mark message as seen.
+ */
+ public function markAsSeen(): bool;
+
+ /**
+ * Move message to another mailbox.
+ */
+ public function copy(MailboxInterface $mailbox): void;
+
+ /**
+ * Move message to another mailbox.
+ */
+ public function move(MailboxInterface $mailbox): void;
+
+ /**
+ * Delete message.
+ */
+ public function delete(): void;
+
+ /**
+ * Undelete message.
+ */
+ public function undelete(): void;
+
+ /**
+ * Set Flag Message.
+ *
+ * @param string $flag \Seen, \Answered, \Flagged, \Deleted, and \Draft
+ */
+ public function setFlag(string $flag): bool;
+
+ /**
+ * Clear Flag Message.
+ *
+ * @param string $flag \Seen, \Answered, \Flagged, \Deleted, and \Draft
+ */
+ public function clearFlag(string $flag): bool;
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MessageIterator.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MessageIterator.php
new file mode 100644
index 0000000..c617478
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MessageIterator.php
@@ -0,0 +1,45 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap;
+
+final class MessageIterator extends \ArrayIterator implements MessageIteratorInterface
+{
+ /**
+ * @var ImapResourceInterface
+ */
+ private $resource;
+
+ /**
+ * Constructor.
+ *
+ * @param ImapResourceInterface $resource IMAP resource
+ * @param array $messageNumbers Array of message numbers
+ */
+ public function __construct(ImapResourceInterface $resource, array $messageNumbers)
+ {
+ $this->resource = $resource;
+
+ parent::__construct($messageNumbers);
+ }
+
+ /**
+ * Get current message.
+ */
+ public function current(): MessageInterface
+ {
+ $current = parent::current();
+ if (!\is_int($current)) {
+ throw new Exception\OutOfBoundsException(\sprintf(
+ 'The current value "%s" isn\'t an integer and doesn\'t represent a message;'
+ . ' try to cycle this "%s" with a native php function like foreach or with the method getArrayCopy(),'
+ . ' or check it by calling the methods valid().',
+ \is_object($current) ? \get_class($current) : \gettype($current),
+ static::class
+ ));
+ }
+
+ return new Message($this->resource, $current);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MessageIteratorInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MessageIteratorInterface.php
new file mode 100644
index 0000000..a9d7988
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/MessageIteratorInterface.php
@@ -0,0 +1,13 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap;
+
+interface MessageIteratorInterface extends \Iterator
+{
+ /**
+ * Get current message.
+ */
+ public function current(): MessageInterface;
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/AbstractDate.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/AbstractDate.php
new file mode 100644
index 0000000..cdd7312
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/AbstractDate.php
@@ -0,0 +1,51 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search;
+
+use DateTimeInterface;
+
+/**
+ * Represents a date condition.
+ */
+abstract class AbstractDate implements ConditionInterface
+{
+ /**
+ * Format for dates to be sent to the IMAP server.
+ *
+ * @var string
+ */
+ private $dateFormat;
+
+ /**
+ * The date to be used for the condition.
+ *
+ * @var DateTimeInterface
+ */
+ private $date;
+
+ /**
+ * Constructor.
+ *
+ * @param DateTimeInterface $date optional date for the condition
+ */
+ public function __construct(DateTimeInterface $date, string $dateFormat = 'j-M-Y')
+ {
+ $this->date = $date;
+ $this->dateFormat = $dateFormat;
+ }
+
+ /**
+ * Converts the condition to a string that can be sent to the IMAP server.
+ */
+ final public function toString(): string
+ {
+ return \sprintf('%s "%s"', $this->getKeyword(), $this->date->format($this->dateFormat));
+ }
+
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ abstract protected function getKeyword(): string;
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/AbstractText.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/AbstractText.php
new file mode 100644
index 0000000..69b2516
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/AbstractText.php
@@ -0,0 +1,42 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search;
+
+/**
+ * Represents a text based condition. Text based conditions use a contains
+ * restriction.
+ */
+abstract class AbstractText implements ConditionInterface
+{
+ /**
+ * Text to be used for the condition.
+ *
+ * @var string
+ */
+ private $text;
+
+ /**
+ * Constructor.
+ *
+ * @param string $text optional text for the condition
+ */
+ public function __construct(string $text)
+ {
+ $this->text = $text;
+ }
+
+ /**
+ * Converts the condition to a string that can be sent to the IMAP server.
+ */
+ final public function toString(): string
+ {
+ return \sprintf('%s "%s"', $this->getKeyword(), $this->text);
+ }
+
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ abstract protected function getKeyword(): string;
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/ConditionInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/ConditionInterface.php
new file mode 100644
index 0000000..3aed28c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/ConditionInterface.php
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search;
+
+/**
+ * Represents a condition that can be used in a search expression.
+ */
+interface ConditionInterface
+{
+ /**
+ * Converts the condition to a string that can be sent to the IMAP server.
+ */
+ public function toString(): string;
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Date/Before.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Date/Before.php
new file mode 100644
index 0000000..561f3f2
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Date/Before.php
@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search\Date;
+
+use Ddeboer\Imap\Search\AbstractDate;
+
+/**
+ * Represents a date before condition. Messages must have a date before the
+ * specified date in order to match the condition.
+ */
+final class Before extends AbstractDate
+{
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ protected function getKeyword(): string
+ {
+ return 'BEFORE';
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Date/On.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Date/On.php
new file mode 100644
index 0000000..2f00dde
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Date/On.php
@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search\Date;
+
+use Ddeboer\Imap\Search\AbstractDate;
+
+/**
+ * Represents a date on condition. Messages must have a date matching the
+ * specified date in order to match the condition.
+ */
+final class On extends AbstractDate
+{
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ protected function getKeyword(): string
+ {
+ return 'ON';
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Date/Since.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Date/Since.php
new file mode 100644
index 0000000..31825f6
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Date/Since.php
@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search\Date;
+
+use Ddeboer\Imap\Search\AbstractDate;
+
+/**
+ * Represents a date after condition. Messages must have a date after the
+ * specified date in order to match the condition.
+ */
+final class Since extends AbstractDate
+{
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ protected function getKeyword(): string
+ {
+ return 'SINCE';
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Email/Bcc.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Email/Bcc.php
new file mode 100644
index 0000000..d450973
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Email/Bcc.php
@@ -0,0 +1,23 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search\Email;
+
+use Ddeboer\Imap\Search\AbstractText;
+
+/**
+ * Represents a "Bcc" email address condition. Messages must have been addressed
+ * to the specified recipient (along with any others) in order to match the
+ * condition.
+ */
+final class Bcc extends AbstractText
+{
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ protected function getKeyword(): string
+ {
+ return 'BCC';
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Email/Cc.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Email/Cc.php
new file mode 100644
index 0000000..72d0642
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Email/Cc.php
@@ -0,0 +1,23 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search\Email;
+
+use Ddeboer\Imap\Search\AbstractText;
+
+/**
+ * Represents a "Cc" email address condition. Messages must have been addressed
+ * to the specified recipient (along with any others) in order to match the
+ * condition.
+ */
+final class Cc extends AbstractText
+{
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ protected function getKeyword(): string
+ {
+ return 'CC';
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Email/From.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Email/From.php
new file mode 100644
index 0000000..f690121
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Email/From.php
@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search\Email;
+
+use Ddeboer\Imap\Search\AbstractText;
+
+/**
+ * Represents a "From" email address condition. Messages must have been sent
+ * from the specified email address in order to match the condition.
+ */
+final class From extends AbstractText
+{
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ protected function getKeyword(): string
+ {
+ return 'FROM';
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Email/To.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Email/To.php
new file mode 100644
index 0000000..5ff5c09
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Email/To.php
@@ -0,0 +1,23 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search\Email;
+
+use Ddeboer\Imap\Search\AbstractText;
+
+/**
+ * Represents a "To" email address condition. Messages must have been addressed
+ * to the specified recipient (along with any others) in order to match the
+ * condition.
+ */
+final class To extends AbstractText
+{
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ protected function getKeyword(): string
+ {
+ return 'TO';
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Answered.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Answered.php
new file mode 100644
index 0000000..fc671a3
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Answered.php
@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search\Flag;
+
+use Ddeboer\Imap\Search\ConditionInterface;
+
+/**
+ * Represents an ANSWERED flag condition. Messages must have the \\ANSWERED flag
+ * set in order to match the condition.
+ */
+final class Answered implements ConditionInterface
+{
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ public function toString(): string
+ {
+ return 'ANSWERED';
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Flagged.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Flagged.php
new file mode 100644
index 0000000..b1161cc
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Flagged.php
@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search\Flag;
+
+use Ddeboer\Imap\Search\ConditionInterface;
+
+/**
+ * Represents a FLAGGED flag condition. Messages must have the \\FLAGGED flag
+ * (i.e. urgent or important) set in order to match the condition.
+ */
+final class Flagged implements ConditionInterface
+{
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ public function toString(): string
+ {
+ return 'FLAGGED';
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Recent.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Recent.php
new file mode 100644
index 0000000..ba0ba73
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Recent.php
@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search\Flag;
+
+use Ddeboer\Imap\Search\ConditionInterface;
+
+/**
+ * Represents an RECENT flag condition. Messages must have the \\RECENT flag
+ * set in order to match the condition.
+ */
+final class Recent implements ConditionInterface
+{
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ public function toString(): string
+ {
+ return 'RECENT';
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Seen.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Seen.php
new file mode 100644
index 0000000..2a52a9d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Seen.php
@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search\Flag;
+
+use Ddeboer\Imap\Search\ConditionInterface;
+
+/**
+ * Represents an SEEN flag condition. Messages must have the \\SEEN flag
+ * set in order to match the condition.
+ */
+final class Seen implements ConditionInterface
+{
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ public function toString(): string
+ {
+ return 'SEEN';
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Unanswered.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Unanswered.php
new file mode 100644
index 0000000..e2c5717
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Unanswered.php
@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search\Flag;
+
+use Ddeboer\Imap\Search\ConditionInterface;
+
+/**
+ * Represents an UNANSWERED flag condition. Messages must not have the
+ * \\ANSWERED flag set in order to match the condition.
+ */
+final class Unanswered implements ConditionInterface
+{
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ public function toString(): string
+ {
+ return 'UNANSWERED';
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Unflagged.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Unflagged.php
new file mode 100644
index 0000000..ca53c6d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Unflagged.php
@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search\Flag;
+
+use Ddeboer\Imap\Search\ConditionInterface;
+
+/**
+ * Represents a UNFLAGGED flag condition. Messages must no have the \\FLAGGED
+ * flag (i.e. urgent or important) set in order to match the condition.
+ */
+final class Unflagged implements ConditionInterface
+{
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ public function toString(): string
+ {
+ return 'UNFLAGGED';
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Unseen.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Unseen.php
new file mode 100644
index 0000000..27db7d2
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Unseen.php
@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search\Flag;
+
+use Ddeboer\Imap\Search\ConditionInterface;
+
+/**
+ * Represents an UNSEEN flag condition. Messages must not have the \\SEEN flag
+ * set in order to match the condition.
+ */
+final class Unseen implements ConditionInterface
+{
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ public function toString(): string
+ {
+ return 'UNSEEN';
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/LogicalOperator/All.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/LogicalOperator/All.php
new file mode 100644
index 0000000..c867ec7
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/LogicalOperator/All.php
@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search\LogicalOperator;
+
+use Ddeboer\Imap\Search\ConditionInterface;
+
+/**
+ * Represents an ALL operator. Messages must match all conditions following this
+ * operator in order to match the expression.
+ */
+final class All implements ConditionInterface
+{
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ public function toString(): string
+ {
+ return 'ALL';
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/LogicalOperator/OrConditions.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/LogicalOperator/OrConditions.php
new file mode 100644
index 0000000..bfebddd
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/LogicalOperator/OrConditions.php
@@ -0,0 +1,50 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search\LogicalOperator;
+
+use Ddeboer\Imap\Search\ConditionInterface;
+
+/**
+ * Represents an OR operator. Messages only need to match one of the conditions
+ * after this operator to match the expression.
+ */
+final class OrConditions implements ConditionInterface
+{
+ /**
+ * The conditions that together represent the expression.
+ *
+ * @var array
+ */
+ private $conditions = [];
+
+ public function __construct(array $conditions)
+ {
+ foreach ($conditions as $condition) {
+ $this->addCondition($condition);
+ }
+ }
+
+ /**
+ * Adds a new condition to the expression.
+ *
+ * @param ConditionInterface $condition the condition to be added
+ */
+ private function addCondition(ConditionInterface $condition)
+ {
+ $this->conditions[] = $condition;
+ }
+
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ public function toString(): string
+ {
+ $conditions = \array_map(static function (ConditionInterface $condition): string {
+ return $condition->toString();
+ }, $this->conditions);
+
+ return \sprintf('( %s )', \implode(' OR ', $conditions));
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/RawExpression.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/RawExpression.php
new file mode 100644
index 0000000..cc6a465
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/RawExpression.php
@@ -0,0 +1,31 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search;
+
+/**
+ * Represents a raw expression.
+ */
+final class RawExpression implements ConditionInterface
+{
+ /**
+ * Text to be used for the condition.
+ *
+ * @var string
+ */
+ private $expression;
+
+ /**
+ * @param string $expression text for the condition
+ */
+ public function __construct(string $expression)
+ {
+ $this->expression = $expression;
+ }
+
+ public function toString(): string
+ {
+ return $this->expression;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/State/Deleted.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/State/Deleted.php
new file mode 100644
index 0000000..b74581e
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/State/Deleted.php
@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search\State;
+
+use Ddeboer\Imap\Search\ConditionInterface;
+
+/**
+ * Represents a DELETED condition. Messages must have been marked for deletion
+ * but not yet expunged in order to match the condition.
+ */
+final class Deleted implements ConditionInterface
+{
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ public function toString(): string
+ {
+ return 'DELETED';
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/State/NewMessage.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/State/NewMessage.php
new file mode 100644
index 0000000..98df4fb
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/State/NewMessage.php
@@ -0,0 +1,21 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search\State;
+
+use Ddeboer\Imap\Search\ConditionInterface;
+
+/**
+ * Represents a NEW condition. Only new messages will match this condition.
+ */
+final class NewMessage implements ConditionInterface
+{
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ public function toString(): string
+ {
+ return 'NEW';
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/State/Old.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/State/Old.php
new file mode 100644
index 0000000..396673f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/State/Old.php
@@ -0,0 +1,21 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search\State;
+
+use Ddeboer\Imap\Search\ConditionInterface;
+
+/**
+ * Represents an OLD condition. Only old messages will match this condition.
+ */
+final class Old implements ConditionInterface
+{
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ public function toString(): string
+ {
+ return 'OLD';
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/State/Undeleted.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/State/Undeleted.php
new file mode 100644
index 0000000..d6d2d36
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/State/Undeleted.php
@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search\State;
+
+use Ddeboer\Imap\Search\ConditionInterface;
+
+/**
+ * Represents a UNDELETED condition. Messages must not have been marked for
+ * deletion in order to match the condition.
+ */
+final class Undeleted implements ConditionInterface
+{
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ public function toString(): string
+ {
+ return 'UNDELETED';
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Text/Body.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Text/Body.php
new file mode 100644
index 0000000..6b6d531
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Text/Body.php
@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search\Text;
+
+use Ddeboer\Imap\Search\AbstractText;
+
+/**
+ * Represents a body text contains condition. Messages must have a body
+ * containing the specified text in order to match the condition.
+ */
+final class Body extends AbstractText
+{
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ protected function getKeyword(): string
+ {
+ return 'BODY';
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Text/Keyword.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Text/Keyword.php
new file mode 100644
index 0000000..6bf1e11
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Text/Keyword.php
@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search\Text;
+
+use Ddeboer\Imap\Search\AbstractText;
+
+/**
+ * Represents a keyword text contains condition. Messages must have a keyword
+ * matching the specified text in order to match the condition.
+ */
+final class Keyword extends AbstractText
+{
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ protected function getKeyword(): string
+ {
+ return 'KEYWORD';
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Text/Subject.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Text/Subject.php
new file mode 100644
index 0000000..6f5198f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Text/Subject.php
@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search\Text;
+
+use Ddeboer\Imap\Search\AbstractText;
+
+/**
+ * Represents a subject contains condition. Messages must have a subject
+ * containing the specified text in order to match the condition.
+ */
+final class Subject extends AbstractText
+{
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ protected function getKeyword(): string
+ {
+ return 'SUBJECT';
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Text/Text.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Text/Text.php
new file mode 100644
index 0000000..09c3017
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Text/Text.php
@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search\Text;
+
+use Ddeboer\Imap\Search\AbstractText;
+
+/**
+ * Represents a message text contains condition. Messages must contain the
+ * specified text in order to match the condition.
+ */
+final class Text extends AbstractText
+{
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ protected function getKeyword(): string
+ {
+ return 'TEXT';
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Text/Unkeyword.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Text/Unkeyword.php
new file mode 100644
index 0000000..64a706d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Search/Text/Unkeyword.php
@@ -0,0 +1,22 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Search\Text;
+
+use Ddeboer\Imap\Search\AbstractText;
+
+/**
+ * Represents a keyword text does not contain condition. Messages must not have
+ * a keyword matching the specified text in order to match the condition.
+ */
+final class Unkeyword extends AbstractText
+{
+ /**
+ * Returns the keyword that the condition represents.
+ */
+ protected function getKeyword(): string
+ {
+ return 'UNKEYWORD';
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/SearchExpression.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/SearchExpression.php
new file mode 100644
index 0000000..e89d49e
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/SearchExpression.php
@@ -0,0 +1,44 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap;
+
+use Ddeboer\Imap\Search\ConditionInterface;
+
+/**
+ * Defines a search expression that can be used to look up email messages.
+ */
+final class SearchExpression implements ConditionInterface
+{
+ /**
+ * The conditions that together represent the expression.
+ *
+ * @var array
+ */
+ private $conditions = [];
+
+ /**
+ * Adds a new condition to the expression.
+ *
+ * @param ConditionInterface $condition the condition to be added
+ */
+ public function addCondition(ConditionInterface $condition): self
+ {
+ $this->conditions[] = $condition;
+
+ return $this;
+ }
+
+ /**
+ * Converts the expression to a string that can be sent to the IMAP server.
+ */
+ public function toString(): string
+ {
+ $conditions = \array_map(static function (ConditionInterface $condition): string {
+ return $condition->toString();
+ }, $this->conditions);
+
+ return \implode(' ', $conditions);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Server.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Server.php
new file mode 100644
index 0000000..7412f00
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Server.php
@@ -0,0 +1,146 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap;
+
+use Ddeboer\Imap\Exception\AuthenticationFailedException;
+use Ddeboer\Imap\Exception\ResourceCheckFailureException;
+
+/**
+ * An IMAP server.
+ */
+final class Server implements ServerInterface
+{
+ /**
+ * @var string Internet domain name or bracketed IP address of server
+ */
+ private $hostname;
+
+ /**
+ * @var string TCP port number
+ */
+ private $port;
+
+ /**
+ * @var string Optional flags
+ */
+ private $flags;
+
+ /**
+ * @var array
+ */
+ private $parameters;
+
+ /**
+ * @var int Connection options
+ */
+ private $options;
+
+ /**
+ * @var int Retries number
+ */
+ private $retries;
+
+ /**
+ * Constructor.
+ *
+ * @param string $hostname Internet domain name or bracketed IP address
+ * of server
+ * @param string $port TCP port number
+ * @param string $flags Optional flags
+ * @param array $parameters Connection parameters
+ * @param int $options Connection options
+ * @param int $retries Retries number
+ */
+ public function __construct(
+ string $hostname,
+ string $port = '993',
+ string $flags = '/imap/ssl/validate-cert',
+ array $parameters = [],
+ int $options = 0,
+ int $retries = 1
+ ) {
+ if (!\function_exists('imap_open')) {
+ throw new \RuntimeException('IMAP extension must be enabled');
+ }
+
+ $this->hostname = $hostname;
+ $this->port = $port;
+ $this->flags = '' !== $flags ? '/' . \ltrim($flags, '/') : '';
+ $this->parameters = $parameters;
+ $this->options = $options;
+ $this->retries = $retries;
+ }
+
+ /**
+ * Authenticate connection.
+ *
+ * @param string $username Username
+ * @param string $password Password
+ *
+ * @throws AuthenticationFailedException
+ */
+ public function authenticate(string $username, string $password): ConnectionInterface
+ {
+ $errorMessage = null;
+ $errorNumber = 0;
+ \set_error_handler(static function ($nr, $message) use (&$errorMessage, &$errorNumber): bool {
+ $errorMessage = $message;
+ $errorNumber = $nr;
+
+ return true;
+ });
+
+ $resource = \imap_open(
+ $this->getServerString(),
+ $username,
+ $password,
+ $this->options,
+ $this->retries,
+ $this->parameters
+ );
+
+ \restore_error_handler();
+
+ if (false === $resource || null !== $errorMessage) {
+ throw new AuthenticationFailedException(\sprintf(
+ 'Authentication failed for user "%s"%s',
+ $username,
+ null !== $errorMessage ? ': ' . $errorMessage : ''
+ ), $errorNumber);
+ }
+
+ $check = \imap_check($resource);
+
+ if (false === $check) {
+ throw new ResourceCheckFailureException('Resource check failure');
+ }
+
+ $mailbox = $check->Mailbox;
+ $connection = $mailbox;
+ $curlyPosition = \strpos($mailbox, '}');
+ if (false !== $curlyPosition) {
+ $connection = \substr($mailbox, 0, $curlyPosition + 1);
+ }
+
+ // These are necessary to get rid of PHP throwing IMAP errors
+ \imap_errors();
+ \imap_alerts();
+
+ return new Connection(new ImapResource($resource), $connection);
+ }
+
+ /**
+ * Glues hostname, port and flags and returns result.
+ */
+ private function getServerString(): string
+ {
+ return \sprintf(
+ '{%s%s%s}',
+ $this->hostname,
+ '' !== $this->port ? ':' . $this->port : '',
+ $this->flags
+ );
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/ServerInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/ServerInterface.php
new file mode 100644
index 0000000..f7e95f9
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/ServerInterface.php
@@ -0,0 +1,19 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap;
+
+/**
+ * An IMAP server.
+ */
+interface ServerInterface
+{
+ /**
+ * Authenticate connection.
+ *
+ * @param string $username Username
+ * @param string $password Password
+ */
+ public function authenticate(string $username, string $password): ConnectionInterface;
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Test/RawMessageIterator.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Test/RawMessageIterator.php
new file mode 100644
index 0000000..08500b6
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/ddeboer/imap/src/Test/RawMessageIterator.php
@@ -0,0 +1,19 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Ddeboer\Imap\Test;
+
+use Ddeboer\Imap\MessageInterface;
+use Ddeboer\Imap\MessageIteratorInterface;
+
+/**
+ * A MessageIterator to be used in a mocked environment.
+ */
+final class RawMessageIterator extends \ArrayIterator implements MessageIteratorInterface
+{
+ public function current(): MessageInterface
+ {
+ return parent::current();
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/CONTRIBUTING.md b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/CONTRIBUTING.md
new file mode 100644
index 0000000..226cf97
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/CONTRIBUTING.md
@@ -0,0 +1,59 @@
+# How to contribute
+
+
+## Issues
+
+When [filing bugs](https://github.com/matthiasmullie/minify/issues/new),
+try to be as thorough as possible:
+* What version did you use?
+* What did you try to do? ***Please post the relevant parts of your code.***
+* What went wrong? ***Please include error messages, if any.***
+* What was the expected result?
+
+
+## Pull requests
+
+Bug fixes and general improvements to the existing codebase are always welcome.
+New features are also welcome, but will be judged on an individual basis. If
+you'd rather not risk wasting your time implementing a new feature only to see
+it turned down, please start the discussion by
+[opening an issue](https://github.com/matthiasmullie/minify/issues/new).
+
+Don't forget to add your changes to the [changelog](CHANGELOG.md).
+
+
+### Testing
+
+Please include tests for every change or addition to the code.
+To run the complete test suite:
+
+```sh
+vendor/bin/phpunit
+```
+
+When submitting a new pull request, please make sure that that the test suite
+passes (Travis CI will run it & report back on your pull request.)
+
+To run the tests on Windows, run `tests/convert_symlinks_to_windows_style.sh`
+from the command line in order to convert Linux-style test symlinks to
+Windows-style.
+
+
+### Coding standards
+
+All code must follow [PSR-2](http://www.php-fig.org/psr/psr-2/). Just make sure
+to run php-cs-fixer before submitting the code, it'll take care of the
+formatting for you:
+
+```sh
+vendor/bin/php-cs-fixer fix src
+vendor/bin/php-cs-fixer fix tests
+```
+
+Document the code thoroughly!
+
+
+## License
+
+Note that minify is MIT-licensed, which basically allows anyone to do
+anything they like with it, without restriction.
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/Dockerfile b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/Dockerfile
new file mode 100644
index 0000000..d17f9d7
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/Dockerfile
@@ -0,0 +1,13 @@
+ARG version=cli
+FROM php:$version
+
+COPY . /var/www
+WORKDIR /var/www
+
+RUN apt-get update
+RUN apt-get install -y zip unzip zlib1g-dev
+RUN docker-php-ext-install zip
+RUN docker-php-ext-install pcntl
+RUN curl -sS https://getcomposer.org/installer | php
+RUN mv composer.phar /usr/local/bin/composer
+RUN composer install
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/LICENSE b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/LICENSE
new file mode 100644
index 0000000..0c0d08a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/LICENSE
@@ -0,0 +1,18 @@
+Copyright (c) 2012 Matthias Mullie
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/bin/minifycss b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/bin/minifycss
new file mode 100755
index 0000000..6a681a8
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/bin/minifycss
@@ -0,0 +1,45 @@
+#!/usr/bin/env php
+<?php
+use MatthiasMullie\Minify;
+
+// command line utility to minify CSS
+if (file_exists(__DIR__ . '/../../../autoload.php')) {
+ // if composer install
+ require_once __DIR__ . '/../../../autoload.php';
+} else {
+ require_once __DIR__ . '/../src/Minify.php';
+ require_once __DIR__ . '/../src/CSS.php';
+ require_once __DIR__ . '/../src/Exception.php';
+}
+
+error_reporting(E_ALL);
+// check PHP setup for cli arguments
+if (!isset($_SERVER['argv']) && !isset($argv)) {
+ fwrite(STDERR, 'Please enable the "register_argc_argv" directive in your php.ini' . PHP_EOL);
+ exit(1);
+} elseif (!isset($argv)) {
+ $argv = $_SERVER['argv'];
+}
+// check if path to file given
+if (!isset($argv[1])) {
+ fwrite(STDERR, 'Argument expected: path to file' . PHP_EOL);
+ exit(1);
+}
+// check if script run in cli environment
+if ('cli' !== php_sapi_name()) {
+ fwrite(STDERR, $argv[1] . ' must be run in the command line' . PHP_EOL);
+ exit(1);
+}
+// check if source file exists
+if (!file_exists($argv[1])) {
+ fwrite(STDERR, 'Source file "' . $argv[1] . '" not found' . PHP_EOL);
+ exit(1);
+}
+
+try {
+ $minifier = new Minify\CSS($argv[1]);
+ echo $minifier->minify();
+} catch (Exception $e) {
+ fwrite(STDERR, $e->getMessage(), PHP_EOL);
+ exit(1);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/bin/minifyjs b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/bin/minifyjs
new file mode 100755
index 0000000..4cbe63f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/bin/minifyjs
@@ -0,0 +1,45 @@
+#!/usr/bin/env php
+<?php
+use MatthiasMullie\Minify;
+
+// command line utility to minify JS
+if (file_exists(__DIR__ . '/../../../autoload.php')) {
+ // if composer install
+ require_once __DIR__ . '/../../../autoload.php';
+} else {
+ require_once __DIR__ . '/../src/Minify.php';
+ require_once __DIR__ . '/../src/JS.php';
+ require_once __DIR__ . '/../src/Exception.php';
+}
+
+error_reporting(E_ALL);
+// check PHP setup for cli arguments
+if (!isset($_SERVER['argv']) && !isset($argv)) {
+ fwrite(STDERR, 'Please enable the "register_argc_argv" directive in your php.ini' . PHP_EOL);
+ exit(1);
+} elseif (!isset($argv)) {
+ $argv = $_SERVER['argv'];
+}
+// check if path to file given
+if (!isset($argv[1])) {
+ fwrite(STDERR, 'Argument expected: path to file' . PHP_EOL);
+ exit(1);
+}
+// check if script run in cli environment
+if ('cli' !== php_sapi_name()) {
+ fwrite(STDERR, $argv[1] . ' must be run in the command line' . PHP_EOL);
+ exit(1);
+}
+// check if source file exists
+if (!file_exists($argv[1])) {
+ fwrite(STDERR, 'Source file "' . $argv[1] . '" not found' . PHP_EOL);
+ exit(1);
+}
+
+try {
+ $minifier = new Minify\JS($argv[1]);
+ echo $minifier->minify();
+} catch (Exception $e) {
+ fwrite(STDERR, $e->getMessage(), PHP_EOL);
+ exit(1);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/composer.json b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/composer.json
new file mode 100644
index 0000000..6d81b4f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/composer.json
@@ -0,0 +1,38 @@
+{
+ "name": "matthiasmullie/minify",
+ "type": "library",
+ "description": "CSS & JavaScript minifier, in PHP. Removes whitespace, strips comments, combines files (incl. @import statements and small assets in CSS files), and optimizes/shortens a few common programming patterns.",
+ "keywords": ["minify", "minifier", "css", "js", "javascript"],
+ "homepage": "http://www.minifier.org",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Matthias Mullie",
+ "homepage": "http://www.mullie.eu",
+ "email": "minify@mullie.eu",
+ "role": "Developer"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.0",
+ "ext-pcre": "*",
+ "matthiasmullie/path-converter": "~1.1"
+ },
+ "require-dev": {
+ "matthiasmullie/scrapbook": "~1.0",
+ "phpunit/phpunit": "~4.8",
+ "friendsofphp/php-cs-fixer": "~2.0"
+ },
+ "suggest": {
+ "psr/cache-implementation": "Cache implementation to use with Minify::cache"
+ },
+ "autoload": {
+ "psr-4": {
+ "MatthiasMullie\\Minify\\": "src/"
+ }
+ },
+ "bin": [
+ "bin/minifycss",
+ "bin/minifyjs"
+ ]
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/data/js/keywords_after.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/data/js/keywords_after.txt
new file mode 100644
index 0000000..5c8cba7
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/data/js/keywords_after.txt
@@ -0,0 +1,7 @@
+in
+public
+extends
+private
+protected
+implements
+instanceof
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/data/js/keywords_before.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/data/js/keywords_before.txt
new file mode 100644
index 0000000..5abf357
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/data/js/keywords_before.txt
@@ -0,0 +1,26 @@
+do
+in
+let
+new
+var
+case
+else
+enum
+void
+with
+class
+const
+yield
+delete
+export
+import
+public
+static
+typeof
+extends
+package
+private
+function
+protected
+implements
+instanceof
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/data/js/keywords_reserved.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/data/js/keywords_reserved.txt
new file mode 100644
index 0000000..2a3ad3c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/data/js/keywords_reserved.txt
@@ -0,0 +1,63 @@
+do
+if
+in
+for
+let
+new
+try
+var
+case
+else
+enum
+eval
+null
+this
+true
+void
+with
+break
+catch
+class
+const
+false
+super
+throw
+while
+yield
+delete
+export
+import
+public
+return
+static
+switch
+typeof
+default
+extends
+finally
+package
+private
+continue
+debugger
+function
+arguments
+interface
+protected
+implements
+instanceof
+abstract
+boolean
+byte
+char
+double
+final
+float
+goto
+int
+long
+native
+short
+synchronized
+throws
+transient
+volatile
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/data/js/operators.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/data/js/operators.txt
new file mode 100644
index 0000000..e66229a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/data/js/operators.txt
@@ -0,0 +1,46 @@
++
+-
+*
+/
+%
+=
++=
+-=
+*=
+/=
+%=
+<<=
+>>=
+>>>=
+&=
+^=
+|=
+&
+|
+^
+~
+<<
+>>
+>>>
+==
+===
+!=
+!==
+>
+<
+>=
+<=
+&&
+||
+!
+.
+[
+]
+?
+:
+,
+;
+(
+)
+{
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/data/js/operators_after.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/data/js/operators_after.txt
new file mode 100644
index 0000000..71a9b70
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/data/js/operators_after.txt
@@ -0,0 +1,43 @@
++
+-
+*
+/
+%
+=
++=
+-=
+*=
+/=
+%=
+<<=
+>>=
+>>>=
+&=
+^=
+|=
+&
+|
+^
+<<
+>>
+>>>
+==
+===
+!=
+!==
+>
+<
+>=
+<=
+&&
+||
+.
+[
+]
+?
+:
+,
+;
+(
+)
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/data/js/operators_before.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/data/js/operators_before.txt
new file mode 100644
index 0000000..ff50d87
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/data/js/operators_before.txt
@@ -0,0 +1,43 @@
++
+-
+*
+/
+%
+=
++=
+-=
+*=
+/=
+%=
+<<=
+>>=
+>>>=
+&=
+^=
+|=
+&
+|
+^
+~
+<<
+>>
+>>>
+==
+===
+!=
+!==
+>
+<
+>=
+<=
+&&
+||
+!
+.
+[
+?
+:
+,
+;
+(
+{
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/docker-compose.yml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/docker-compose.yml
new file mode 100644
index 0000000..5413e24
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/docker-compose.yml
@@ -0,0 +1,31 @@
+version: '2.1'
+services:
+ php:
+ build:
+ context: .
+ dockerfile: Dockerfile
+ volumes:
+ - ./src:/var/www/src
+ - ./data:/var/www/data
+ - ./tests:/var/www/tests
+ - ./phpunit.xml.dist:/var/www/phpunit.xml.dist
+ '7.2':
+ extends: php
+ build:
+ args:
+ version: 7.2-cli
+ '7.1':
+ extends: php
+ build:
+ args:
+ version: 7.1-cli
+ '7.0':
+ extends: php
+ build:
+ args:
+ version: 7.0-cli
+ '5.6':
+ extends: php
+ build:
+ args:
+ version: 5.6-cli
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/src/CSS.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/src/CSS.php
new file mode 100644
index 0000000..89fcf1b
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/src/CSS.php
@@ -0,0 +1,752 @@
+<?php
+/**
+ * CSS Minifier
+ *
+ * Please report bugs on https://github.com/matthiasmullie/minify/issues
+ *
+ * @author Matthias Mullie <minify@mullie.eu>
+ * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
+ * @license MIT License
+ */
+
+namespace MatthiasMullie\Minify;
+
+use MatthiasMullie\Minify\Exceptions\FileImportException;
+use MatthiasMullie\PathConverter\ConverterInterface;
+use MatthiasMullie\PathConverter\Converter;
+
+/**
+ * CSS minifier
+ *
+ * Please report bugs on https://github.com/matthiasmullie/minify/issues
+ *
+ * @package Minify
+ * @author Matthias Mullie <minify@mullie.eu>
+ * @author Tijs Verkoyen <minify@verkoyen.eu>
+ * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
+ * @license MIT License
+ */
+class CSS extends Minify
+{
+ /**
+ * @var int maximum inport size in kB
+ */
+ protected $maxImportSize = 5;
+
+ /**
+ * @var string[] valid import extensions
+ */
+ protected $importExtensions = array(
+ 'gif' => 'data:image/gif',
+ 'png' => 'data:image/png',
+ 'jpe' => 'data:image/jpeg',
+ 'jpg' => 'data:image/jpeg',
+ 'jpeg' => 'data:image/jpeg',
+ 'svg' => 'data:image/svg+xml',
+ 'woff' => 'data:application/x-font-woff',
+ 'tif' => 'image/tiff',
+ 'tiff' => 'image/tiff',
+ 'xbm' => 'image/x-xbitmap',
+ );
+
+ /**
+ * Set the maximum size if files to be imported.
+ *
+ * Files larger than this size (in kB) will not be imported into the CSS.
+ * Importing files into the CSS as data-uri will save you some connections,
+ * but we should only import relatively small decorative images so that our
+ * CSS file doesn't get too bulky.
+ *
+ * @param int $size Size in kB
+ */
+ public function setMaxImportSize($size)
+ {
+ $this->maxImportSize = $size;
+ }
+
+ /**
+ * Set the type of extensions to be imported into the CSS (to save network
+ * connections).
+ * Keys of the array should be the file extensions & respective values
+ * should be the data type.
+ *
+ * @param string[] $extensions Array of file extensions
+ */
+ public function setImportExtensions(array $extensions)
+ {
+ $this->importExtensions = $extensions;
+ }
+
+ /**
+ * Move any import statements to the top.
+ *
+ * @param string $content Nearly finished CSS content
+ *
+ * @return string
+ */
+ protected function moveImportsToTop($content)
+ {
+ if (preg_match_all('/(;?)(@import (?<url>url\()?(?P<quotes>["\']?).+?(?P=quotes)(?(url)\)));?/', $content, $matches)) {
+ // remove from content
+ foreach ($matches[0] as $import) {
+ $content = str_replace($import, '', $content);
+ }
+
+ // add to top
+ $content = implode(';', $matches[2]).';'.trim($content, ';');
+ }
+
+ return $content;
+ }
+
+ /**
+ * Combine CSS from import statements.
+ *
+ * @import's will be loaded and their content merged into the original file,
+ * to save HTTP requests.
+ *
+ * @param string $source The file to combine imports for
+ * @param string $content The CSS content to combine imports for
+ * @param string[] $parents Parent paths, for circular reference checks
+ *
+ * @return string
+ *
+ * @throws FileImportException
+ */
+ protected function combineImports($source, $content, $parents)
+ {
+ $importRegexes = array(
+ // @import url(xxx)
+ '/
+ # import statement
+ @import
+
+ # whitespace
+ \s+
+
+ # open url()
+ url\(
+
+ # (optional) open path enclosure
+ (?P<quotes>["\']?)
+
+ # fetch path
+ (?P<path>.+?)
+
+ # (optional) close path enclosure
+ (?P=quotes)
+
+ # close url()
+ \)
+
+ # (optional) trailing whitespace
+ \s*
+
+ # (optional) media statement(s)
+ (?P<media>[^;]*)
+
+ # (optional) trailing whitespace
+ \s*
+
+ # (optional) closing semi-colon
+ ;?
+
+ /ix',
+
+ // @import 'xxx'
+ '/
+
+ # import statement
+ @import
+
+ # whitespace
+ \s+
+
+ # open path enclosure
+ (?P<quotes>["\'])
+
+ # fetch path
+ (?P<path>.+?)
+
+ # close path enclosure
+ (?P=quotes)
+
+ # (optional) trailing whitespace
+ \s*
+
+ # (optional) media statement(s)
+ (?P<media>[^;]*)
+
+ # (optional) trailing whitespace
+ \s*
+
+ # (optional) closing semi-colon
+ ;?
+
+ /ix',
+ );
+
+ // find all relative imports in css
+ $matches = array();
+ foreach ($importRegexes as $importRegex) {
+ if (preg_match_all($importRegex, $content, $regexMatches, PREG_SET_ORDER)) {
+ $matches = array_merge($matches, $regexMatches);
+ }
+ }
+
+ $search = array();
+ $replace = array();
+
+ // loop the matches
+ foreach ($matches as $match) {
+ // get the path for the file that will be imported
+ $importPath = dirname($source).'/'.$match['path'];
+
+ // only replace the import with the content if we can grab the
+ // content of the file
+ if (!$this->canImportByPath($match['path']) || !$this->canImportFile($importPath)) {
+ continue;
+ }
+
+ // check if current file was not imported previously in the same
+ // import chain.
+ if (in_array($importPath, $parents)) {
+ throw new FileImportException('Failed to import file "'.$importPath.'": circular reference detected.');
+ }
+
+ // grab referenced file & minify it (which may include importing
+ // yet other @import statements recursively)
+ $minifier = new static($importPath);
+ $minifier->setMaxImportSize($this->maxImportSize);
+ $minifier->setImportExtensions($this->importExtensions);
+ $importContent = $minifier->execute($source, $parents);
+
+ // check if this is only valid for certain media
+ if (!empty($match['media'])) {
+ $importContent = '@media '.$match['media'].'{'.$importContent.'}';
+ }
+
+ // add to replacement array
+ $search[] = $match[0];
+ $replace[] = $importContent;
+ }
+
+ // replace the import statements
+ return str_replace($search, $replace, $content);
+ }
+
+ /**
+ * Import files into the CSS, base64-ized.
+ *
+ * @url(image.jpg) images will be loaded and their content merged into the
+ * original file, to save HTTP requests.
+ *
+ * @param string $source The file to import files for
+ * @param string $content The CSS content to import files for
+ *
+ * @return string
+ */
+ protected function importFiles($source, $content)
+ {
+ $regex = '/url\((["\']?)(.+?)\\1\)/i';
+ if ($this->importExtensions && preg_match_all($regex, $content, $matches, PREG_SET_ORDER)) {
+ $search = array();
+ $replace = array();
+
+ // loop the matches
+ foreach ($matches as $match) {
+ $extension = substr(strrchr($match[2], '.'), 1);
+ if ($extension && !array_key_exists($extension, $this->importExtensions)) {
+ continue;
+ }
+
+ // get the path for the file that will be imported
+ $path = $match[2];
+ $path = dirname($source).'/'.$path;
+
+ // only replace the import with the content if we're able to get
+ // the content of the file, and it's relatively small
+ if ($this->canImportFile($path) && $this->canImportBySize($path)) {
+ // grab content && base64-ize
+ $importContent = $this->load($path);
+ $importContent = base64_encode($importContent);
+
+ // build replacement
+ $search[] = $match[0];
+ $replace[] = 'url('.$this->importExtensions[$extension].';base64,'.$importContent.')';
+ }
+ }
+
+ // replace the import statements
+ $content = str_replace($search, $replace, $content);
+ }
+
+ return $content;
+ }
+
+ /**
+ * Minify the data.
+ * Perform CSS optimizations.
+ *
+ * @param string[optional] $path Path to write the data to
+ * @param string[] $parents Parent paths, for circular reference checks
+ *
+ * @return string The minified data
+ */
+ public function execute($path = null, $parents = array())
+ {
+ $content = '';
+
+ // loop CSS data (raw data and files)
+ foreach ($this->data as $source => $css) {
+ /*
+ * Let's first take out strings & comments, since we can't just
+ * remove whitespace anywhere. If whitespace occurs inside a string,
+ * we should leave it alone. E.g.:
+ * p { content: "a test" }
+ */
+ $this->extractStrings();
+ $this->stripComments();
+ $this->extractCalcs();
+ $css = $this->replace($css);
+
+ $css = $this->stripWhitespace($css);
+ $css = $this->shortenColors($css);
+ $css = $this->shortenZeroes($css);
+ $css = $this->shortenFontWeights($css);
+ $css = $this->stripEmptyTags($css);
+
+ // restore the string we've extracted earlier
+ $css = $this->restoreExtractedData($css);
+
+ $source = is_int($source) ? '' : $source;
+ $parents = $source ? array_merge($parents, array($source)) : $parents;
+ $css = $this->combineImports($source, $css, $parents);
+ $css = $this->importFiles($source, $css);
+
+ /*
+ * If we'll save to a new path, we'll have to fix the relative paths
+ * to be relative no longer to the source file, but to the new path.
+ * If we don't write to a file, fall back to same path so no
+ * conversion happens (because we still want it to go through most
+ * of the move code, which also addresses url() & @import syntax...)
+ */
+ $converter = $this->getPathConverter($source, $path ?: $source);
+ $css = $this->move($converter, $css);
+
+ // combine css
+ $content .= $css;
+ }
+
+ $content = $this->moveImportsToTop($content);
+
+ return $content;
+ }
+
+ /**
+ * Moving a css file should update all relative urls.
+ * Relative references (e.g. ../images/image.gif) in a certain css file,
+ * will have to be updated when a file is being saved at another location
+ * (e.g. ../../images/image.gif, if the new CSS file is 1 folder deeper).
+ *
+ * @param ConverterInterface $converter Relative path converter
+ * @param string $content The CSS content to update relative urls for
+ *
+ * @return string
+ */
+ protected function move(ConverterInterface $converter, $content)
+ {
+ /*
+ * Relative path references will usually be enclosed by url(). @import
+ * is an exception, where url() is not necessary around the path (but is
+ * allowed).
+ * This *could* be 1 regular expression, where both regular expressions
+ * in this array are on different sides of a |. But we're using named
+ * patterns in both regexes, the same name on both regexes. This is only
+ * possible with a (?J) modifier, but that only works after a fairly
+ * recent PCRE version. That's why I'm doing 2 separate regular
+ * expressions & combining the matches after executing of both.
+ */
+ $relativeRegexes = array(
+ // url(xxx)
+ '/
+ # open url()
+ url\(
+
+ \s*
+
+ # open path enclosure
+ (?P<quotes>["\'])?
+
+ # fetch path
+ (?P<path>.+?)
+
+ # close path enclosure
+ (?(quotes)(?P=quotes))
+
+ \s*
+
+ # close url()
+ \)
+
+ /ix',
+
+ // @import "xxx"
+ '/
+ # import statement
+ @import
+
+ # whitespace
+ \s+
+
+ # we don\'t have to check for @import url(), because the
+ # condition above will already catch these
+
+ # open path enclosure
+ (?P<quotes>["\'])
+
+ # fetch path
+ (?P<path>.+?)
+
+ # close path enclosure
+ (?P=quotes)
+
+ /ix',
+ );
+
+ // find all relative urls in css
+ $matches = array();
+ foreach ($relativeRegexes as $relativeRegex) {
+ if (preg_match_all($relativeRegex, $content, $regexMatches, PREG_SET_ORDER)) {
+ $matches = array_merge($matches, $regexMatches);
+ }
+ }
+
+ $search = array();
+ $replace = array();
+
+ // loop all urls
+ foreach ($matches as $match) {
+ // determine if it's a url() or an @import match
+ $type = (strpos($match[0], '@import') === 0 ? 'import' : 'url');
+
+ $url = $match['path'];
+ if ($this->canImportByPath($url)) {
+ // attempting to interpret GET-params makes no sense, so let's discard them for awhile
+ $params = strrchr($url, '?');
+ $url = $params ? substr($url, 0, -strlen($params)) : $url;
+
+ // fix relative url
+ $url = $converter->convert($url);
+
+ // now that the path has been converted, re-apply GET-params
+ $url .= $params;
+ }
+
+ /*
+ * Urls with control characters above 0x7e should be quoted.
+ * According to Mozilla's parser, whitespace is only allowed at the
+ * end of unquoted urls.
+ * Urls with `)` (as could happen with data: uris) should also be
+ * quoted to avoid being confused for the url() closing parentheses.
+ * And urls with a # have also been reported to cause issues.
+ * Urls with quotes inside should also remain escaped.
+ *
+ * @see https://developer.mozilla.org/nl/docs/Web/CSS/url#The_url()_functional_notation
+ * @see https://hg.mozilla.org/mozilla-central/rev/14abca4e7378
+ * @see https://github.com/matthiasmullie/minify/issues/193
+ */
+ $url = trim($url);
+ if (preg_match('/[\s\)\'"#\x{7f}-\x{9f}]/u', $url)) {
+ $url = $match['quotes'] . $url . $match['quotes'];
+ }
+
+ // build replacement
+ $search[] = $match[0];
+ if ($type === 'url') {
+ $replace[] = 'url('.$url.')';
+ } elseif ($type === 'import') {
+ $replace[] = '@import "'.$url.'"';
+ }
+ }
+
+ // replace urls
+ return str_replace($search, $replace, $content);
+ }
+
+ /**
+ * Shorthand hex color codes.
+ * #FF0000 -> #F00.
+ *
+ * @param string $content The CSS content to shorten the hex color codes for
+ *
+ * @return string
+ */
+ protected function shortenColors($content)
+ {
+ $content = preg_replace('/(?<=[: ])#([0-9a-z])\\1([0-9a-z])\\2([0-9a-z])\\3(?:([0-9a-z])\\4)?(?=[; }])/i', '#$1$2$3$4', $content);
+
+ // remove alpha channel if it's pointless...
+ $content = preg_replace('/(?<=[: ])#([0-9a-z]{6})ff?(?=[; }])/i', '#$1', $content);
+ $content = preg_replace('/(?<=[: ])#([0-9a-z]{3})f?(?=[; }])/i', '#$1', $content);
+
+ $colors = array(
+ // we can shorten some even more by replacing them with their color name
+ '#F0FFFF' => 'azure',
+ '#F5F5DC' => 'beige',
+ '#A52A2A' => 'brown',
+ '#FF7F50' => 'coral',
+ '#FFD700' => 'gold',
+ '#808080' => 'gray',
+ '#008000' => 'green',
+ '#4B0082' => 'indigo',
+ '#FFFFF0' => 'ivory',
+ '#F0E68C' => 'khaki',
+ '#FAF0E6' => 'linen',
+ '#800000' => 'maroon',
+ '#000080' => 'navy',
+ '#808000' => 'olive',
+ '#CD853F' => 'peru',
+ '#FFC0CB' => 'pink',
+ '#DDA0DD' => 'plum',
+ '#800080' => 'purple',
+ '#F00' => 'red',
+ '#FA8072' => 'salmon',
+ '#A0522D' => 'sienna',
+ '#C0C0C0' => 'silver',
+ '#FFFAFA' => 'snow',
+ '#D2B48C' => 'tan',
+ '#FF6347' => 'tomato',
+ '#EE82EE' => 'violet',
+ '#F5DEB3' => 'wheat',
+ // or the other way around
+ 'WHITE' => '#fff',
+ 'BLACK' => '#000',
+ );
+
+ return preg_replace_callback(
+ '/(?<=[: ])('.implode('|', array_keys($colors)).')(?=[; }])/i',
+ function ($match) use ($colors) {
+ return $colors[strtoupper($match[0])];
+ },
+ $content
+ );
+ }
+
+ /**
+ * Shorten CSS font weights.
+ *
+ * @param string $content The CSS content to shorten the font weights for
+ *
+ * @return string
+ */
+ protected function shortenFontWeights($content)
+ {
+ $weights = array(
+ 'normal' => 400,
+ 'bold' => 700,
+ );
+
+ $callback = function ($match) use ($weights) {
+ return $match[1].$weights[$match[2]];
+ };
+
+ return preg_replace_callback('/(font-weight\s*:\s*)('.implode('|', array_keys($weights)).')(?=[;}])/', $callback, $content);
+ }
+
+ /**
+ * Shorthand 0 values to plain 0, instead of e.g. -0em.
+ *
+ * @param string $content The CSS content to shorten the zero values for
+ *
+ * @return string
+ */
+ protected function shortenZeroes($content)
+ {
+ // we don't want to strip units in `calc()` expressions:
+ // `5px - 0px` is valid, but `5px - 0` is not
+ // `10px * 0` is valid (equates to 0), and so is `10 * 0px`, but
+ // `10 * 0` is invalid
+ // we've extracted calcs earlier, so we don't need to worry about this
+
+ // reusable bits of code throughout these regexes:
+ // before & after are used to make sure we don't match lose unintended
+ // 0-like values (e.g. in #000, or in http://url/1.0)
+ // units can be stripped from 0 values, or used to recognize non 0
+ // values (where wa may be able to strip a .0 suffix)
+ $before = '(?<=[:(, ])';
+ $after = '(?=[ ,);}])';
+ $units = '(em|ex|%|px|cm|mm|in|pt|pc|ch|rem|vh|vw|vmin|vmax|vm)';
+
+ // strip units after zeroes (0px -> 0)
+ // NOTE: it should be safe to remove all units for a 0 value, but in
+ // practice, Webkit (especially Safari) seems to stumble over at least
+ // 0%, potentially other units as well. Only stripping 'px' for now.
+ // @see https://github.com/matthiasmullie/minify/issues/60
+ $content = preg_replace('/'.$before.'(-?0*(\.0+)?)(?<=0)px'.$after.'/', '\\1', $content);
+
+ // strip 0-digits (.0 -> 0)
+ $content = preg_replace('/'.$before.'\.0+'.$units.'?'.$after.'/', '0\\1', $content);
+ // strip trailing 0: 50.10 -> 50.1, 50.10px -> 50.1px
+ $content = preg_replace('/'.$before.'(-?[0-9]+\.[0-9]+)0+'.$units.'?'.$after.'/', '\\1\\2', $content);
+ // strip trailing 0: 50.00 -> 50, 50.00px -> 50px
+ $content = preg_replace('/'.$before.'(-?[0-9]+)\.0+'.$units.'?'.$after.'/', '\\1\\2', $content);
+ // strip leading 0: 0.1 -> .1, 01.1 -> 1.1
+ $content = preg_replace('/'.$before.'(-?)0+([0-9]*\.[0-9]+)'.$units.'?'.$after.'/', '\\1\\2\\3', $content);
+
+ // strip negative zeroes (-0 -> 0) & truncate zeroes (00 -> 0)
+ $content = preg_replace('/'.$before.'-?0+'.$units.'?'.$after.'/', '0\\1', $content);
+
+ // IE doesn't seem to understand a unitless flex-basis value (correct -
+ // it goes against the spec), so let's add it in again (make it `%`,
+ // which is only 1 char: 0%, 0px, 0 anything, it's all just the same)
+ // @see https://developer.mozilla.org/nl/docs/Web/CSS/flex
+ $content = preg_replace('/flex:([0-9]+\s[0-9]+\s)0([;\}])/', 'flex:${1}0%${2}', $content);
+ $content = preg_replace('/flex-basis:0([;\}])/', 'flex-basis:0%${1}', $content);
+
+ return $content;
+ }
+
+ /**
+ * Strip empty tags from source code.
+ *
+ * @param string $content
+ *
+ * @return string
+ */
+ protected function stripEmptyTags($content)
+ {
+ $content = preg_replace('/(?<=^)[^\{\};]+\{\s*\}/', '', $content);
+ $content = preg_replace('/(?<=(\}|;))[^\{\};]+\{\s*\}/', '', $content);
+
+ return $content;
+ }
+
+ /**
+ * Strip comments from source code.
+ */
+ protected function stripComments()
+ {
+ // PHP only supports $this inside anonymous functions since 5.4
+ $minifier = $this;
+ $callback = function ($match) use ($minifier) {
+ $count = count($minifier->extracted);
+ $placeholder = '/*'.$count.'*/';
+ $minifier->extracted[$placeholder] = $match[0];
+
+ return $placeholder;
+ };
+ $this->registerPattern('/\n?\/\*(!|.*?@license|.*?@preserve).*?\*\/\n?/s', $callback);
+
+ $this->registerPattern('/\/\*.*?\*\//s', '');
+ }
+
+ /**
+ * Strip whitespace.
+ *
+ * @param string $content The CSS content to strip the whitespace for
+ *
+ * @return string
+ */
+ protected function stripWhitespace($content)
+ {
+ // remove leading & trailing whitespace
+ $content = preg_replace('/^\s*/m', '', $content);
+ $content = preg_replace('/\s*$/m', '', $content);
+
+ // replace newlines with a single space
+ $content = preg_replace('/\s+/', ' ', $content);
+
+ // remove whitespace around meta characters
+ // inspired by stackoverflow.com/questions/15195750/minify-compress-css-with-regex
+ $content = preg_replace('/\s*([\*$~^|]?+=|[{};,>~]|!important\b)\s*/', '$1', $content);
+ $content = preg_replace('/([\[(:>\+])\s+/', '$1', $content);
+ $content = preg_replace('/\s+([\]\)>\+])/', '$1', $content);
+ $content = preg_replace('/\s+(:)(?![^\}]*\{)/', '$1', $content);
+
+ // whitespace around + and - can only be stripped inside some pseudo-
+ // classes, like `:nth-child(3+2n)`
+ // not in things like `calc(3px + 2px)`, shorthands like `3px -2px`, or
+ // selectors like `div.weird- p`
+ $pseudos = array('nth-child', 'nth-last-child', 'nth-last-of-type', 'nth-of-type');
+ $content = preg_replace('/:('.implode('|', $pseudos).')\(\s*([+-]?)\s*(.+?)\s*([+-]?)\s*(.*?)\s*\)/', ':$1($2$3$4$5)', $content);
+
+ // remove semicolon/whitespace followed by closing bracket
+ $content = str_replace(';}', '}', $content);
+
+ return trim($content);
+ }
+
+ /**
+ * Replace all `calc()` occurrences.
+ */
+ protected function extractCalcs()
+ {
+ // PHP only supports $this inside anonymous functions since 5.4
+ $minifier = $this;
+ $callback = function ($match) use ($minifier) {
+ $length = strlen($match[1]);
+ $expr = '';
+ $opened = 0;
+
+ for ($i = 0; $i < $length; $i++) {
+ $char = $match[1][$i];
+ $expr .= $char;
+ if ($char === '(') {
+ $opened++;
+ } elseif ($char === ')' && --$opened === 0) {
+ break;
+ }
+ }
+ $rest = str_replace($expr, '', $match[1]);
+ $expr = trim(substr($expr, 1, -1));
+
+ $count = count($minifier->extracted);
+ $placeholder = 'calc('.$count.')';
+ $minifier->extracted[$placeholder] = 'calc('.$expr.')';
+
+ return $placeholder.$rest;
+ };
+
+ $this->registerPattern('/calc(\(.+?)(?=$|;|}|calc\()/', $callback);
+ $this->registerPattern('/calc(\(.+?)(?=$|;|}|calc\()/m', $callback);
+ }
+
+ /**
+ * Check if file is small enough to be imported.
+ *
+ * @param string $path The path to the file
+ *
+ * @return bool
+ */
+ protected function canImportBySize($path)
+ {
+ return ($size = @filesize($path)) && $size <= $this->maxImportSize * 1024;
+ }
+
+ /**
+ * Check if file a file can be imported, going by the path.
+ *
+ * @param string $path
+ *
+ * @return bool
+ */
+ protected function canImportByPath($path)
+ {
+ return preg_match('/^(data:|https?:|\\/)/', $path) === 0;
+ }
+
+ /**
+ * Return a converter to update relative paths to be relative to the new
+ * destination.
+ *
+ * @param string $source
+ * @param string $target
+ *
+ * @return ConverterInterface
+ */
+ protected function getPathConverter($source, $target)
+ {
+ return new Converter($source, $target);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/src/Exception.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/src/Exception.php
new file mode 100644
index 0000000..d03898f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/src/Exception.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Base Exception
+ *
+ * @deprecated Use Exceptions\BasicException instead
+ *
+ * @author Matthias Mullie <minify@mullie.eu>
+ */
+namespace MatthiasMullie\Minify;
+
+/**
+ * Base Exception Class
+ * @deprecated Use Exceptions\BasicException instead
+ *
+ * @package Minify
+ * @author Matthias Mullie <minify@mullie.eu>
+ */
+abstract class Exception extends \Exception
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/src/Exceptions/BasicException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/src/Exceptions/BasicException.php
new file mode 100644
index 0000000..af5e81b
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/src/Exceptions/BasicException.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Basic exception
+ *
+ * Please report bugs on https://github.com/matthiasmullie/minify/issues
+ *
+ * @author Matthias Mullie <minify@mullie.eu>
+ * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
+ * @license MIT License
+ */
+namespace MatthiasMullie\Minify\Exceptions;
+
+use MatthiasMullie\Minify\Exception;
+
+/**
+ * Basic Exception Class
+ *
+ * @package Minify\Exception
+ * @author Matthias Mullie <minify@mullie.eu>
+ */
+abstract class BasicException extends Exception
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/src/Exceptions/FileImportException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/src/Exceptions/FileImportException.php
new file mode 100644
index 0000000..912a2c9
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/src/Exceptions/FileImportException.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * File Import Exception
+ *
+ * Please report bugs on https://github.com/matthiasmullie/minify/issues
+ *
+ * @author Matthias Mullie <minify@mullie.eu>
+ * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
+ * @license MIT License
+ */
+namespace MatthiasMullie\Minify\Exceptions;
+
+/**
+ * File Import Exception Class
+ *
+ * @package Minify\Exception
+ * @author Matthias Mullie <minify@mullie.eu>
+ */
+class FileImportException extends BasicException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/src/Exceptions/IOException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/src/Exceptions/IOException.php
new file mode 100644
index 0000000..b172eb4
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/src/Exceptions/IOException.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * IO Exception
+ *
+ * Please report bugs on https://github.com/matthiasmullie/minify/issues
+ *
+ * @author Matthias Mullie <minify@mullie.eu>
+ * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
+ * @license MIT License
+ */
+namespace MatthiasMullie\Minify\Exceptions;
+
+/**
+ * IO Exception Class
+ *
+ * @package Minify\Exception
+ * @author Matthias Mullie <minify@mullie.eu>
+ */
+class IOException extends BasicException
+{
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/src/JS.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/src/JS.php
new file mode 100644
index 0000000..92389cd
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/src/JS.php
@@ -0,0 +1,612 @@
+<?php
+/**
+ * JavaScript minifier
+ *
+ * Please report bugs on https://github.com/matthiasmullie/minify/issues
+ *
+ * @author Matthias Mullie <minify@mullie.eu>
+ * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
+ * @license MIT License
+ */
+namespace MatthiasMullie\Minify;
+
+/**
+ * JavaScript Minifier Class
+ *
+ * Please report bugs on https://github.com/matthiasmullie/minify/issues
+ *
+ * @package Minify
+ * @author Matthias Mullie <minify@mullie.eu>
+ * @author Tijs Verkoyen <minify@verkoyen.eu>
+ * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
+ * @license MIT License
+ */
+class JS extends Minify
+{
+ /**
+ * Var-matching regex based on http://stackoverflow.com/a/9337047/802993.
+ *
+ * Note that regular expressions using that bit must have the PCRE_UTF8
+ * pattern modifier (/u) set.
+ *
+ * @var string
+ */
+ const REGEX_VARIABLE = '\b[$A-Z\_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\x{02c1}\x{02c6}-\x{02d1}\x{02e0}-\x{02e4}\x{02ec}\x{02ee}\x{0370}-\x{0374}\x{0376}\x{0377}\x{037a}-\x{037d}\x{0386}\x{0388}-\x{038a}\x{038c}\x{038e}-\x{03a1}\x{03a3}-\x{03f5}\x{03f7}-\x{0481}\x{048a}-\x{0527}\x{0531}-\x{0556}\x{0559}\x{0561}-\x{0587}\x{05d0}-\x{05ea}\x{05f0}-\x{05f2}\x{0620}-\x{064a}\x{066e}\x{066f}\x{0671}-\x{06d3}\x{06d5}\x{06e5}\x{06e6}\x{06ee}\x{06ef}\x{06fa}-\x{06fc}\x{06ff}\x{0710}\x{0712}-\x{072f}\x{074d}-\x{07a5}\x{07b1}\x{07ca}-\x{07ea}\x{07f4}\x{07f5}\x{07fa}\x{0800}-\x{0815}\x{081a}\x{0824}\x{0828}\x{0840}-\x{0858}\x{08a0}\x{08a2}-\x{08ac}\x{0904}-\x{0939}\x{093d}\x{0950}\x{0958}-\x{0961}\x{0971}-\x{0977}\x{0979}-\x{097f}\x{0985}-\x{098c}\x{098f}\x{0990}\x{0993}-\x{09a8}\x{09aa}-\x{09b0}\x{09b2}\x{09b6}-\x{09b9}\x{09bd}\x{09ce}\x{09dc}\x{09dd}\x{09df}-\x{09e1}\x{09f0}\x{09f1}\x{0a05}-\x{0a0a}\x{0a0f}\x{0a10}\x{0a13}-\x{0a28}\x{0a2a}-\x{0a30}\x{0a32}\x{0a33}\x{0a35}\x{0a36}\x{0a38}\x{0a39}\x{0a59}-\x{0a5c}\x{0a5e}\x{0a72}-\x{0a74}\x{0a85}-\x{0a8d}\x{0a8f}-\x{0a91}\x{0a93}-\x{0aa8}\x{0aaa}-\x{0ab0}\x{0ab2}\x{0ab3}\x{0ab5}-\x{0ab9}\x{0abd}\x{0ad0}\x{0ae0}\x{0ae1}\x{0b05}-\x{0b0c}\x{0b0f}\x{0b10}\x{0b13}-\x{0b28}\x{0b2a}-\x{0b30}\x{0b32}\x{0b33}\x{0b35}-\x{0b39}\x{0b3d}\x{0b5c}\x{0b5d}\x{0b5f}-\x{0b61}\x{0b71}\x{0b83}\x{0b85}-\x{0b8a}\x{0b8e}-\x{0b90}\x{0b92}-\x{0b95}\x{0b99}\x{0b9a}\x{0b9c}\x{0b9e}\x{0b9f}\x{0ba3}\x{0ba4}\x{0ba8}-\x{0baa}\x{0bae}-\x{0bb9}\x{0bd0}\x{0c05}-\x{0c0c}\x{0c0e}-\x{0c10}\x{0c12}-\x{0c28}\x{0c2a}-\x{0c33}\x{0c35}-\x{0c39}\x{0c3d}\x{0c58}\x{0c59}\x{0c60}\x{0c61}\x{0c85}-\x{0c8c}\x{0c8e}-\x{0c90}\x{0c92}-\x{0ca8}\x{0caa}-\x{0cb3}\x{0cb5}-\x{0cb9}\x{0cbd}\x{0cde}\x{0ce0}\x{0ce1}\x{0cf1}\x{0cf2}\x{0d05}-\x{0d0c}\x{0d0e}-\x{0d10}\x{0d12}-\x{0d3a}\x{0d3d}\x{0d4e}\x{0d60}\x{0d61}\x{0d7a}-\x{0d7f}\x{0d85}-\x{0d96}\x{0d9a}-\x{0db1}\x{0db3}-\x{0dbb}\x{0dbd}\x{0dc0}-\x{0dc6}\x{0e01}-\x{0e30}\x{0e32}\x{0e33}\x{0e40}-\x{0e46}\x{0e81}\x{0e82}\x{0e84}\x{0e87}\x{0e88}\x{0e8a}\x{0e8d}\x{0e94}-\x{0e97}\x{0e99}-\x{0e9f}\x{0ea1}-\x{0ea3}\x{0ea5}\x{0ea7}\x{0eaa}\x{0eab}\x{0ead}-\x{0eb0}\x{0eb2}\x{0eb3}\x{0ebd}\x{0ec0}-\x{0ec4}\x{0ec6}\x{0edc}-\x{0edf}\x{0f00}\x{0f40}-\x{0f47}\x{0f49}-\x{0f6c}\x{0f88}-\x{0f8c}\x{1000}-\x{102a}\x{103f}\x{1050}-\x{1055}\x{105a}-\x{105d}\x{1061}\x{1065}\x{1066}\x{106e}-\x{1070}\x{1075}-\x{1081}\x{108e}\x{10a0}-\x{10c5}\x{10c7}\x{10cd}\x{10d0}-\x{10fa}\x{10fc}-\x{1248}\x{124a}-\x{124d}\x{1250}-\x{1256}\x{1258}\x{125a}-\x{125d}\x{1260}-\x{1288}\x{128a}-\x{128d}\x{1290}-\x{12b0}\x{12b2}-\x{12b5}\x{12b8}-\x{12be}\x{12c0}\x{12c2}-\x{12c5}\x{12c8}-\x{12d6}\x{12d8}-\x{1310}\x{1312}-\x{1315}\x{1318}-\x{135a}\x{1380}-\x{138f}\x{13a0}-\x{13f4}\x{1401}-\x{166c}\x{166f}-\x{167f}\x{1681}-\x{169a}\x{16a0}-\x{16ea}\x{16ee}-\x{16f0}\x{1700}-\x{170c}\x{170e}-\x{1711}\x{1720}-\x{1731}\x{1740}-\x{1751}\x{1760}-\x{176c}\x{176e}-\x{1770}\x{1780}-\x{17b3}\x{17d7}\x{17dc}\x{1820}-\x{1877}\x{1880}-\x{18a8}\x{18aa}\x{18b0}-\x{18f5}\x{1900}-\x{191c}\x{1950}-\x{196d}\x{1970}-\x{1974}\x{1980}-\x{19ab}\x{19c1}-\x{19c7}\x{1a00}-\x{1a16}\x{1a20}-\x{1a54}\x{1aa7}\x{1b05}-\x{1b33}\x{1b45}-\x{1b4b}\x{1b83}-\x{1ba0}\x{1bae}\x{1baf}\x{1bba}-\x{1be5}\x{1c00}-\x{1c23}\x{1c4d}-\x{1c4f}\x{1c5a}-\x{1c7d}\x{1ce9}-\x{1cec}\x{1cee}-\x{1cf1}\x{1cf5}\x{1cf6}\x{1d00}-\x{1dbf}\x{1e00}-\x{1f15}\x{1f18}-\x{1f1d}\x{1f20}-\x{1f45}\x{1f48}-\x{1f4d}\x{1f50}-\x{1f57}\x{1f59}\x{1f5b}\x{1f5d}\x{1f5f}-\x{1f7d}\x{1f80}-\x{1fb4}\x{1fb6}-\x{1fbc}\x{1fbe}\x{1fc2}-\x{1fc4}\x{1fc6}-\x{1fcc}\x{1fd0}-\x{1fd3}\x{1fd6}-\x{1fdb}\x{1fe0}-\x{1fec}\x{1ff2}-\x{1ff4}\x{1ff6}-\x{1ffc}\x{2071}\x{207f}\x{2090}-\x{209c}\x{2102}\x{2107}\x{210a}-\x{2113}\x{2115}\x{2119}-\x{211d}\x{2124}\x{2126}\x{2128}\x{212a}-\x{212d}\x{212f}-\x{2139}\x{213c}-\x{213f}\x{2145}-\x{2149}\x{214e}\x{2160}-\x{2188}\x{2c00}-\x{2c2e}\x{2c30}-\x{2c5e}\x{2c60}-\x{2ce4}\x{2ceb}-\x{2cee}\x{2cf2}\x{2cf3}\x{2d00}-\x{2d25}\x{2d27}\x{2d2d}\x{2d30}-\x{2d67}\x{2d6f}\x{2d80}-\x{2d96}\x{2da0}-\x{2da6}\x{2da8}-\x{2dae}\x{2db0}-\x{2db6}\x{2db8}-\x{2dbe}\x{2dc0}-\x{2dc6}\x{2dc8}-\x{2dce}\x{2dd0}-\x{2dd6}\x{2dd8}-\x{2dde}\x{2e2f}\x{3005}-\x{3007}\x{3021}-\x{3029}\x{3031}-\x{3035}\x{3038}-\x{303c}\x{3041}-\x{3096}\x{309d}-\x{309f}\x{30a1}-\x{30fa}\x{30fc}-\x{30ff}\x{3105}-\x{312d}\x{3131}-\x{318e}\x{31a0}-\x{31ba}\x{31f0}-\x{31ff}\x{3400}-\x{4db5}\x{4e00}-\x{9fcc}\x{a000}-\x{a48c}\x{a4d0}-\x{a4fd}\x{a500}-\x{a60c}\x{a610}-\x{a61f}\x{a62a}\x{a62b}\x{a640}-\x{a66e}\x{a67f}-\x{a697}\x{a6a0}-\x{a6ef}\x{a717}-\x{a71f}\x{a722}-\x{a788}\x{a78b}-\x{a78e}\x{a790}-\x{a793}\x{a7a0}-\x{a7aa}\x{a7f8}-\x{a801}\x{a803}-\x{a805}\x{a807}-\x{a80a}\x{a80c}-\x{a822}\x{a840}-\x{a873}\x{a882}-\x{a8b3}\x{a8f2}-\x{a8f7}\x{a8fb}\x{a90a}-\x{a925}\x{a930}-\x{a946}\x{a960}-\x{a97c}\x{a984}-\x{a9b2}\x{a9cf}\x{aa00}-\x{aa28}\x{aa40}-\x{aa42}\x{aa44}-\x{aa4b}\x{aa60}-\x{aa76}\x{aa7a}\x{aa80}-\x{aaaf}\x{aab1}\x{aab5}\x{aab6}\x{aab9}-\x{aabd}\x{aac0}\x{aac2}\x{aadb}-\x{aadd}\x{aae0}-\x{aaea}\x{aaf2}-\x{aaf4}\x{ab01}-\x{ab06}\x{ab09}-\x{ab0e}\x{ab11}-\x{ab16}\x{ab20}-\x{ab26}\x{ab28}-\x{ab2e}\x{abc0}-\x{abe2}\x{ac00}-\x{d7a3}\x{d7b0}-\x{d7c6}\x{d7cb}-\x{d7fb}\x{f900}-\x{fa6d}\x{fa70}-\x{fad9}\x{fb00}-\x{fb06}\x{fb13}-\x{fb17}\x{fb1d}\x{fb1f}-\x{fb28}\x{fb2a}-\x{fb36}\x{fb38}-\x{fb3c}\x{fb3e}\x{fb40}\x{fb41}\x{fb43}\x{fb44}\x{fb46}-\x{fbb1}\x{fbd3}-\x{fd3d}\x{fd50}-\x{fd8f}\x{fd92}-\x{fdc7}\x{fdf0}-\x{fdfb}\x{fe70}-\x{fe74}\x{fe76}-\x{fefc}\x{ff21}-\x{ff3a}\x{ff41}-\x{ff5a}\x{ff66}-\x{ffbe}\x{ffc2}-\x{ffc7}\x{ffca}-\x{ffcf}\x{ffd2}-\x{ffd7}\x{ffda}-\x{ffdc}][$A-Z\_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\x{02c1}\x{02c6}-\x{02d1}\x{02e0}-\x{02e4}\x{02ec}\x{02ee}\x{0370}-\x{0374}\x{0376}\x{0377}\x{037a}-\x{037d}\x{0386}\x{0388}-\x{038a}\x{038c}\x{038e}-\x{03a1}\x{03a3}-\x{03f5}\x{03f7}-\x{0481}\x{048a}-\x{0527}\x{0531}-\x{0556}\x{0559}\x{0561}-\x{0587}\x{05d0}-\x{05ea}\x{05f0}-\x{05f2}\x{0620}-\x{064a}\x{066e}\x{066f}\x{0671}-\x{06d3}\x{06d5}\x{06e5}\x{06e6}\x{06ee}\x{06ef}\x{06fa}-\x{06fc}\x{06ff}\x{0710}\x{0712}-\x{072f}\x{074d}-\x{07a5}\x{07b1}\x{07ca}-\x{07ea}\x{07f4}\x{07f5}\x{07fa}\x{0800}-\x{0815}\x{081a}\x{0824}\x{0828}\x{0840}-\x{0858}\x{08a0}\x{08a2}-\x{08ac}\x{0904}-\x{0939}\x{093d}\x{0950}\x{0958}-\x{0961}\x{0971}-\x{0977}\x{0979}-\x{097f}\x{0985}-\x{098c}\x{098f}\x{0990}\x{0993}-\x{09a8}\x{09aa}-\x{09b0}\x{09b2}\x{09b6}-\x{09b9}\x{09bd}\x{09ce}\x{09dc}\x{09dd}\x{09df}-\x{09e1}\x{09f0}\x{09f1}\x{0a05}-\x{0a0a}\x{0a0f}\x{0a10}\x{0a13}-\x{0a28}\x{0a2a}-\x{0a30}\x{0a32}\x{0a33}\x{0a35}\x{0a36}\x{0a38}\x{0a39}\x{0a59}-\x{0a5c}\x{0a5e}\x{0a72}-\x{0a74}\x{0a85}-\x{0a8d}\x{0a8f}-\x{0a91}\x{0a93}-\x{0aa8}\x{0aaa}-\x{0ab0}\x{0ab2}\x{0ab3}\x{0ab5}-\x{0ab9}\x{0abd}\x{0ad0}\x{0ae0}\x{0ae1}\x{0b05}-\x{0b0c}\x{0b0f}\x{0b10}\x{0b13}-\x{0b28}\x{0b2a}-\x{0b30}\x{0b32}\x{0b33}\x{0b35}-\x{0b39}\x{0b3d}\x{0b5c}\x{0b5d}\x{0b5f}-\x{0b61}\x{0b71}\x{0b83}\x{0b85}-\x{0b8a}\x{0b8e}-\x{0b90}\x{0b92}-\x{0b95}\x{0b99}\x{0b9a}\x{0b9c}\x{0b9e}\x{0b9f}\x{0ba3}\x{0ba4}\x{0ba8}-\x{0baa}\x{0bae}-\x{0bb9}\x{0bd0}\x{0c05}-\x{0c0c}\x{0c0e}-\x{0c10}\x{0c12}-\x{0c28}\x{0c2a}-\x{0c33}\x{0c35}-\x{0c39}\x{0c3d}\x{0c58}\x{0c59}\x{0c60}\x{0c61}\x{0c85}-\x{0c8c}\x{0c8e}-\x{0c90}\x{0c92}-\x{0ca8}\x{0caa}-\x{0cb3}\x{0cb5}-\x{0cb9}\x{0cbd}\x{0cde}\x{0ce0}\x{0ce1}\x{0cf1}\x{0cf2}\x{0d05}-\x{0d0c}\x{0d0e}-\x{0d10}\x{0d12}-\x{0d3a}\x{0d3d}\x{0d4e}\x{0d60}\x{0d61}\x{0d7a}-\x{0d7f}\x{0d85}-\x{0d96}\x{0d9a}-\x{0db1}\x{0db3}-\x{0dbb}\x{0dbd}\x{0dc0}-\x{0dc6}\x{0e01}-\x{0e30}\x{0e32}\x{0e33}\x{0e40}-\x{0e46}\x{0e81}\x{0e82}\x{0e84}\x{0e87}\x{0e88}\x{0e8a}\x{0e8d}\x{0e94}-\x{0e97}\x{0e99}-\x{0e9f}\x{0ea1}-\x{0ea3}\x{0ea5}\x{0ea7}\x{0eaa}\x{0eab}\x{0ead}-\x{0eb0}\x{0eb2}\x{0eb3}\x{0ebd}\x{0ec0}-\x{0ec4}\x{0ec6}\x{0edc}-\x{0edf}\x{0f00}\x{0f40}-\x{0f47}\x{0f49}-\x{0f6c}\x{0f88}-\x{0f8c}\x{1000}-\x{102a}\x{103f}\x{1050}-\x{1055}\x{105a}-\x{105d}\x{1061}\x{1065}\x{1066}\x{106e}-\x{1070}\x{1075}-\x{1081}\x{108e}\x{10a0}-\x{10c5}\x{10c7}\x{10cd}\x{10d0}-\x{10fa}\x{10fc}-\x{1248}\x{124a}-\x{124d}\x{1250}-\x{1256}\x{1258}\x{125a}-\x{125d}\x{1260}-\x{1288}\x{128a}-\x{128d}\x{1290}-\x{12b0}\x{12b2}-\x{12b5}\x{12b8}-\x{12be}\x{12c0}\x{12c2}-\x{12c5}\x{12c8}-\x{12d6}\x{12d8}-\x{1310}\x{1312}-\x{1315}\x{1318}-\x{135a}\x{1380}-\x{138f}\x{13a0}-\x{13f4}\x{1401}-\x{166c}\x{166f}-\x{167f}\x{1681}-\x{169a}\x{16a0}-\x{16ea}\x{16ee}-\x{16f0}\x{1700}-\x{170c}\x{170e}-\x{1711}\x{1720}-\x{1731}\x{1740}-\x{1751}\x{1760}-\x{176c}\x{176e}-\x{1770}\x{1780}-\x{17b3}\x{17d7}\x{17dc}\x{1820}-\x{1877}\x{1880}-\x{18a8}\x{18aa}\x{18b0}-\x{18f5}\x{1900}-\x{191c}\x{1950}-\x{196d}\x{1970}-\x{1974}\x{1980}-\x{19ab}\x{19c1}-\x{19c7}\x{1a00}-\x{1a16}\x{1a20}-\x{1a54}\x{1aa7}\x{1b05}-\x{1b33}\x{1b45}-\x{1b4b}\x{1b83}-\x{1ba0}\x{1bae}\x{1baf}\x{1bba}-\x{1be5}\x{1c00}-\x{1c23}\x{1c4d}-\x{1c4f}\x{1c5a}-\x{1c7d}\x{1ce9}-\x{1cec}\x{1cee}-\x{1cf1}\x{1cf5}\x{1cf6}\x{1d00}-\x{1dbf}\x{1e00}-\x{1f15}\x{1f18}-\x{1f1d}\x{1f20}-\x{1f45}\x{1f48}-\x{1f4d}\x{1f50}-\x{1f57}\x{1f59}\x{1f5b}\x{1f5d}\x{1f5f}-\x{1f7d}\x{1f80}-\x{1fb4}\x{1fb6}-\x{1fbc}\x{1fbe}\x{1fc2}-\x{1fc4}\x{1fc6}-\x{1fcc}\x{1fd0}-\x{1fd3}\x{1fd6}-\x{1fdb}\x{1fe0}-\x{1fec}\x{1ff2}-\x{1ff4}\x{1ff6}-\x{1ffc}\x{2071}\x{207f}\x{2090}-\x{209c}\x{2102}\x{2107}\x{210a}-\x{2113}\x{2115}\x{2119}-\x{211d}\x{2124}\x{2126}\x{2128}\x{212a}-\x{212d}\x{212f}-\x{2139}\x{213c}-\x{213f}\x{2145}-\x{2149}\x{214e}\x{2160}-\x{2188}\x{2c00}-\x{2c2e}\x{2c30}-\x{2c5e}\x{2c60}-\x{2ce4}\x{2ceb}-\x{2cee}\x{2cf2}\x{2cf3}\x{2d00}-\x{2d25}\x{2d27}\x{2d2d}\x{2d30}-\x{2d67}\x{2d6f}\x{2d80}-\x{2d96}\x{2da0}-\x{2da6}\x{2da8}-\x{2dae}\x{2db0}-\x{2db6}\x{2db8}-\x{2dbe}\x{2dc0}-\x{2dc6}\x{2dc8}-\x{2dce}\x{2dd0}-\x{2dd6}\x{2dd8}-\x{2dde}\x{2e2f}\x{3005}-\x{3007}\x{3021}-\x{3029}\x{3031}-\x{3035}\x{3038}-\x{303c}\x{3041}-\x{3096}\x{309d}-\x{309f}\x{30a1}-\x{30fa}\x{30fc}-\x{30ff}\x{3105}-\x{312d}\x{3131}-\x{318e}\x{31a0}-\x{31ba}\x{31f0}-\x{31ff}\x{3400}-\x{4db5}\x{4e00}-\x{9fcc}\x{a000}-\x{a48c}\x{a4d0}-\x{a4fd}\x{a500}-\x{a60c}\x{a610}-\x{a61f}\x{a62a}\x{a62b}\x{a640}-\x{a66e}\x{a67f}-\x{a697}\x{a6a0}-\x{a6ef}\x{a717}-\x{a71f}\x{a722}-\x{a788}\x{a78b}-\x{a78e}\x{a790}-\x{a793}\x{a7a0}-\x{a7aa}\x{a7f8}-\x{a801}\x{a803}-\x{a805}\x{a807}-\x{a80a}\x{a80c}-\x{a822}\x{a840}-\x{a873}\x{a882}-\x{a8b3}\x{a8f2}-\x{a8f7}\x{a8fb}\x{a90a}-\x{a925}\x{a930}-\x{a946}\x{a960}-\x{a97c}\x{a984}-\x{a9b2}\x{a9cf}\x{aa00}-\x{aa28}\x{aa40}-\x{aa42}\x{aa44}-\x{aa4b}\x{aa60}-\x{aa76}\x{aa7a}\x{aa80}-\x{aaaf}\x{aab1}\x{aab5}\x{aab6}\x{aab9}-\x{aabd}\x{aac0}\x{aac2}\x{aadb}-\x{aadd}\x{aae0}-\x{aaea}\x{aaf2}-\x{aaf4}\x{ab01}-\x{ab06}\x{ab09}-\x{ab0e}\x{ab11}-\x{ab16}\x{ab20}-\x{ab26}\x{ab28}-\x{ab2e}\x{abc0}-\x{abe2}\x{ac00}-\x{d7a3}\x{d7b0}-\x{d7c6}\x{d7cb}-\x{d7fb}\x{f900}-\x{fa6d}\x{fa70}-\x{fad9}\x{fb00}-\x{fb06}\x{fb13}-\x{fb17}\x{fb1d}\x{fb1f}-\x{fb28}\x{fb2a}-\x{fb36}\x{fb38}-\x{fb3c}\x{fb3e}\x{fb40}\x{fb41}\x{fb43}\x{fb44}\x{fb46}-\x{fbb1}\x{fbd3}-\x{fd3d}\x{fd50}-\x{fd8f}\x{fd92}-\x{fdc7}\x{fdf0}-\x{fdfb}\x{fe70}-\x{fe74}\x{fe76}-\x{fefc}\x{ff21}-\x{ff3a}\x{ff41}-\x{ff5a}\x{ff66}-\x{ffbe}\x{ffc2}-\x{ffc7}\x{ffca}-\x{ffcf}\x{ffd2}-\x{ffd7}\x{ffda}-\x{ffdc}0-9\x{0300}-\x{036f}\x{0483}-\x{0487}\x{0591}-\x{05bd}\x{05bf}\x{05c1}\x{05c2}\x{05c4}\x{05c5}\x{05c7}\x{0610}-\x{061a}\x{064b}-\x{0669}\x{0670}\x{06d6}-\x{06dc}\x{06df}-\x{06e4}\x{06e7}\x{06e8}\x{06ea}-\x{06ed}\x{06f0}-\x{06f9}\x{0711}\x{0730}-\x{074a}\x{07a6}-\x{07b0}\x{07c0}-\x{07c9}\x{07eb}-\x{07f3}\x{0816}-\x{0819}\x{081b}-\x{0823}\x{0825}-\x{0827}\x{0829}-\x{082d}\x{0859}-\x{085b}\x{08e4}-\x{08fe}\x{0900}-\x{0903}\x{093a}-\x{093c}\x{093e}-\x{094f}\x{0951}-\x{0957}\x{0962}\x{0963}\x{0966}-\x{096f}\x{0981}-\x{0983}\x{09bc}\x{09be}-\x{09c4}\x{09c7}\x{09c8}\x{09cb}-\x{09cd}\x{09d7}\x{09e2}\x{09e3}\x{09e6}-\x{09ef}\x{0a01}-\x{0a03}\x{0a3c}\x{0a3e}-\x{0a42}\x{0a47}\x{0a48}\x{0a4b}-\x{0a4d}\x{0a51}\x{0a66}-\x{0a71}\x{0a75}\x{0a81}-\x{0a83}\x{0abc}\x{0abe}-\x{0ac5}\x{0ac7}-\x{0ac9}\x{0acb}-\x{0acd}\x{0ae2}\x{0ae3}\x{0ae6}-\x{0aef}\x{0b01}-\x{0b03}\x{0b3c}\x{0b3e}-\x{0b44}\x{0b47}\x{0b48}\x{0b4b}-\x{0b4d}\x{0b56}\x{0b57}\x{0b62}\x{0b63}\x{0b66}-\x{0b6f}\x{0b82}\x{0bbe}-\x{0bc2}\x{0bc6}-\x{0bc8}\x{0bca}-\x{0bcd}\x{0bd7}\x{0be6}-\x{0bef}\x{0c01}-\x{0c03}\x{0c3e}-\x{0c44}\x{0c46}-\x{0c48}\x{0c4a}-\x{0c4d}\x{0c55}\x{0c56}\x{0c62}\x{0c63}\x{0c66}-\x{0c6f}\x{0c82}\x{0c83}\x{0cbc}\x{0cbe}-\x{0cc4}\x{0cc6}-\x{0cc8}\x{0cca}-\x{0ccd}\x{0cd5}\x{0cd6}\x{0ce2}\x{0ce3}\x{0ce6}-\x{0cef}\x{0d02}\x{0d03}\x{0d3e}-\x{0d44}\x{0d46}-\x{0d48}\x{0d4a}-\x{0d4d}\x{0d57}\x{0d62}\x{0d63}\x{0d66}-\x{0d6f}\x{0d82}\x{0d83}\x{0dca}\x{0dcf}-\x{0dd4}\x{0dd6}\x{0dd8}-\x{0ddf}\x{0df2}\x{0df3}\x{0e31}\x{0e34}-\x{0e3a}\x{0e47}-\x{0e4e}\x{0e50}-\x{0e59}\x{0eb1}\x{0eb4}-\x{0eb9}\x{0ebb}\x{0ebc}\x{0ec8}-\x{0ecd}\x{0ed0}-\x{0ed9}\x{0f18}\x{0f19}\x{0f20}-\x{0f29}\x{0f35}\x{0f37}\x{0f39}\x{0f3e}\x{0f3f}\x{0f71}-\x{0f84}\x{0f86}\x{0f87}\x{0f8d}-\x{0f97}\x{0f99}-\x{0fbc}\x{0fc6}\x{102b}-\x{103e}\x{1040}-\x{1049}\x{1056}-\x{1059}\x{105e}-\x{1060}\x{1062}-\x{1064}\x{1067}-\x{106d}\x{1071}-\x{1074}\x{1082}-\x{108d}\x{108f}-\x{109d}\x{135d}-\x{135f}\x{1712}-\x{1714}\x{1732}-\x{1734}\x{1752}\x{1753}\x{1772}\x{1773}\x{17b4}-\x{17d3}\x{17dd}\x{17e0}-\x{17e9}\x{180b}-\x{180d}\x{1810}-\x{1819}\x{18a9}\x{1920}-\x{192b}\x{1930}-\x{193b}\x{1946}-\x{194f}\x{19b0}-\x{19c0}\x{19c8}\x{19c9}\x{19d0}-\x{19d9}\x{1a17}-\x{1a1b}\x{1a55}-\x{1a5e}\x{1a60}-\x{1a7c}\x{1a7f}-\x{1a89}\x{1a90}-\x{1a99}\x{1b00}-\x{1b04}\x{1b34}-\x{1b44}\x{1b50}-\x{1b59}\x{1b6b}-\x{1b73}\x{1b80}-\x{1b82}\x{1ba1}-\x{1bad}\x{1bb0}-\x{1bb9}\x{1be6}-\x{1bf3}\x{1c24}-\x{1c37}\x{1c40}-\x{1c49}\x{1c50}-\x{1c59}\x{1cd0}-\x{1cd2}\x{1cd4}-\x{1ce8}\x{1ced}\x{1cf2}-\x{1cf4}\x{1dc0}-\x{1de6}\x{1dfc}-\x{1dff}\x{200c}\x{200d}\x{203f}\x{2040}\x{2054}\x{20d0}-\x{20dc}\x{20e1}\x{20e5}-\x{20f0}\x{2cef}-\x{2cf1}\x{2d7f}\x{2de0}-\x{2dff}\x{302a}-\x{302f}\x{3099}\x{309a}\x{a620}-\x{a629}\x{a66f}\x{a674}-\x{a67d}\x{a69f}\x{a6f0}\x{a6f1}\x{a802}\x{a806}\x{a80b}\x{a823}-\x{a827}\x{a880}\x{a881}\x{a8b4}-\x{a8c4}\x{a8d0}-\x{a8d9}\x{a8e0}-\x{a8f1}\x{a900}-\x{a909}\x{a926}-\x{a92d}\x{a947}-\x{a953}\x{a980}-\x{a983}\x{a9b3}-\x{a9c0}\x{a9d0}-\x{a9d9}\x{aa29}-\x{aa36}\x{aa43}\x{aa4c}\x{aa4d}\x{aa50}-\x{aa59}\x{aa7b}\x{aab0}\x{aab2}-\x{aab4}\x{aab7}\x{aab8}\x{aabe}\x{aabf}\x{aac1}\x{aaeb}-\x{aaef}\x{aaf5}\x{aaf6}\x{abe3}-\x{abea}\x{abec}\x{abed}\x{abf0}-\x{abf9}\x{fb1e}\x{fe00}-\x{fe0f}\x{fe20}-\x{fe26}\x{fe33}\x{fe34}\x{fe4d}-\x{fe4f}\x{ff10}-\x{ff19}\x{ff3f}]*\b';
+
+ /**
+ * Full list of JavaScript reserved words.
+ * Will be loaded from /data/js/keywords_reserved.txt.
+ *
+ * @see https://mathiasbynens.be/notes/reserved-keywords
+ *
+ * @var string[]
+ */
+ protected $keywordsReserved = array();
+
+ /**
+ * List of JavaScript reserved words that accept a <variable, value, ...>
+ * after them. Some end of lines are not the end of a statement, like with
+ * these keywords.
+ *
+ * E.g.: we shouldn't insert a ; after this else
+ * else
+ * console.log('this is quite fine')
+ *
+ * Will be loaded from /data/js/keywords_before.txt
+ *
+ * @var string[]
+ */
+ protected $keywordsBefore = array();
+
+ /**
+ * List of JavaScript reserved words that accept a <variable, value, ...>
+ * before them. Some end of lines are not the end of a statement, like when
+ * continued by one of these keywords on the newline.
+ *
+ * E.g.: we shouldn't insert a ; before this instanceof
+ * variable
+ * instanceof String
+ *
+ * Will be loaded from /data/js/keywords_after.txt
+ *
+ * @var string[]
+ */
+ protected $keywordsAfter = array();
+
+ /**
+ * List of all JavaScript operators.
+ *
+ * Will be loaded from /data/js/operators.txt
+ *
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators
+ *
+ * @var string[]
+ */
+ protected $operators = array();
+
+ /**
+ * List of JavaScript operators that accept a <variable, value, ...> after
+ * them. Some end of lines are not the end of a statement, like with these
+ * operators.
+ *
+ * Note: Most operators are fine, we've only removed ++ and --.
+ * ++ & -- have to be joined with the value they're in-/decrementing.
+ *
+ * Will be loaded from /data/js/operators_before.txt
+ *
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators
+ *
+ * @var string[]
+ */
+ protected $operatorsBefore = array();
+
+ /**
+ * List of JavaScript operators that accept a <variable, value, ...> before
+ * them. Some end of lines are not the end of a statement, like when
+ * continued by one of these operators on the newline.
+ *
+ * Note: Most operators are fine, we've only removed ), ], ++, --, ! and ~.
+ * There can't be a newline separating ! or ~ and whatever it is negating.
+ * ++ & -- have to be joined with the value they're in-/decrementing.
+ * ) & ] are "special" in that they have lots or usecases. () for example
+ * is used for function calls, for grouping, in if () and for (), ...
+ *
+ * Will be loaded from /data/js/operators_after.txt
+ *
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators
+ *
+ * @var string[]
+ */
+ protected $operatorsAfter = array();
+
+ /**
+ * {@inheritdoc}
+ */
+ public function __construct()
+ {
+ call_user_func_array(array('parent', '__construct'), func_get_args());
+
+ $dataDir = __DIR__.'/../data/js/';
+ $options = FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES;
+ $this->keywordsReserved = file($dataDir.'keywords_reserved.txt', $options);
+ $this->keywordsBefore = file($dataDir.'keywords_before.txt', $options);
+ $this->keywordsAfter = file($dataDir.'keywords_after.txt', $options);
+ $this->operators = file($dataDir.'operators.txt', $options);
+ $this->operatorsBefore = file($dataDir.'operators_before.txt', $options);
+ $this->operatorsAfter = file($dataDir.'operators_after.txt', $options);
+ }
+
+ /**
+ * Minify the data.
+ * Perform JS optimizations.
+ *
+ * @param string[optional] $path Path to write the data to
+ *
+ * @return string The minified data
+ */
+ public function execute($path = null)
+ {
+ $content = '';
+
+ /*
+ * Let's first take out strings, comments and regular expressions.
+ * All of these can contain JS code-like characters, and we should make
+ * sure any further magic ignores anything inside of these.
+ *
+ * Consider this example, where we should not strip any whitespace:
+ * var str = "a test";
+ *
+ * Comments will be removed altogether, strings and regular expressions
+ * will be replaced by placeholder text, which we'll restore later.
+ */
+ $this->extractStrings('\'"`');
+ $this->stripComments();
+ $this->extractRegex();
+
+ // loop files
+ foreach ($this->data as $source => $js) {
+ // take out strings, comments & regex (for which we've registered
+ // the regexes just a few lines earlier)
+ $js = $this->replace($js);
+
+ $js = $this->propertyNotation($js);
+ $js = $this->shortenBools($js);
+ $js = $this->stripWhitespace($js);
+
+ // combine js: separating the scripts by a ;
+ $content .= $js.";";
+ }
+
+ // clean up leftover `;`s from the combination of multiple scripts
+ $content = ltrim($content, ';');
+ $content = (string) substr($content, 0, -1);
+
+ /*
+ * Earlier, we extracted strings & regular expressions and replaced them
+ * with placeholder text. This will restore them.
+ */
+ $content = $this->restoreExtractedData($content);
+
+ return $content;
+ }
+
+ /**
+ * Strip comments from source code.
+ */
+ protected function stripComments()
+ {
+ // PHP only supports $this inside anonymous functions since 5.4
+ $minifier = $this;
+ $callback = function ($match) use ($minifier) {
+ $count = count($minifier->extracted);
+ $placeholder = '/*'.$count.'*/';
+ $minifier->extracted[$placeholder] = $match[0];
+
+ return $placeholder;
+ };
+ // multi-line comments
+ $this->registerPattern('/\n?\/\*(!|.*?@license|.*?@preserve).*?\*\/\n?/s', $callback);
+ $this->registerPattern('/\/\*.*?\*\//s', '');
+
+ // single-line comments
+ $this->registerPattern('/\/\/.*$/m', '');
+ }
+
+ /**
+ * JS can have /-delimited regular expressions, like: /ab+c/.match(string).
+ *
+ * The content inside the regex can contain characters that may be confused
+ * for JS code: e.g. it could contain whitespace it needs to match & we
+ * don't want to strip whitespace in there.
+ *
+ * The regex can be pretty simple: we don't have to care about comments,
+ * (which also use slashes) because stripComments() will have stripped those
+ * already.
+ *
+ * This method will replace all string content with simple REGEX#
+ * placeholder text, so we've rid all regular expressions from characters
+ * that may be misinterpreted. Original regex content will be saved in
+ * $this->extracted and after doing all other minifying, we can restore the
+ * original content via restoreRegex()
+ */
+ protected function extractRegex()
+ {
+ // PHP only supports $this inside anonymous functions since 5.4
+ $minifier = $this;
+ $callback = function ($match) use ($minifier) {
+ $count = count($minifier->extracted);
+ $placeholder = '"'.$count.'"';
+ $minifier->extracted[$placeholder] = $match[0];
+
+ return $placeholder;
+ };
+
+ // match all chars except `/` and `\`
+ // `\` is allowed though, along with whatever char follows (which is the
+ // one being escaped)
+ // this should allow all chars, except for an unescaped `/` (= the one
+ // closing the regex)
+ // then also ignore bare `/` inside `[]`, where they don't need to be
+ // escaped: anything inside `[]` can be ignored safely
+ $pattern = '\\/(?!\*)(?:[^\\[\\/\\\\\n\r]++|(?:\\\\.)++|(?:\\[(?:[^\\]\\\\\n\r]++|(?:\\\\.)++)++\\])++)++\\/[gimuy]*';
+
+ // a regular expression can only be followed by a few operators or some
+ // of the RegExp methods (a `\` followed by a variable or value is
+ // likely part of a division, not a regex)
+ $keywords = array('do', 'in', 'new', 'else', 'throw', 'yield', 'delete', 'return', 'typeof');
+ $before = '([=:,;\+\-\*\/\}\(\{\[&\|!]|^|'.implode('|', $keywords).')\s*';
+ $propertiesAndMethods = array(
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#Properties_2
+ 'constructor',
+ 'flags',
+ 'global',
+ 'ignoreCase',
+ 'multiline',
+ 'source',
+ 'sticky',
+ 'unicode',
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#Methods_2
+ 'compile(',
+ 'exec(',
+ 'test(',
+ 'toSource(',
+ 'toString(',
+ );
+ $delimiters = array_fill(0, count($propertiesAndMethods), '/');
+ $propertiesAndMethods = array_map('preg_quote', $propertiesAndMethods, $delimiters);
+ $after = '(?=\s*([\.,;\)\}&\|+]|\/\/|$|\.('.implode('|', $propertiesAndMethods).')))';
+ $this->registerPattern('/'.$before.'\K'.$pattern.$after.'/', $callback);
+
+ // regular expressions following a `)` are rather annoying to detect...
+ // quite often, `/` after `)` is a division operator & if it happens to
+ // be followed by another one (or a comment), it is likely to be
+ // confused for a regular expression
+ // however, it's perfectly possible for a regex to follow a `)`: after
+ // a single-line `if()`, `while()`, ... statement, for example
+ // since, when they occur like that, they're always the start of a
+ // statement, there's only a limited amount of ways they can be useful:
+ // by calling the regex methods directly
+ // if a regex following `)` is not followed by `.<property or method>`,
+ // it's quite likely not a regex
+ $before = '\)\s*';
+ $after = '(?=\s*\.('.implode('|', $propertiesAndMethods).'))';
+ $this->registerPattern('/'.$before.'\K'.$pattern.$after.'/', $callback);
+
+ // 1 more edge case: a regex can be followed by a lot more operators or
+ // keywords if there's a newline (ASI) in between, where the operator
+ // actually starts a new statement
+ // (https://github.com/matthiasmullie/minify/issues/56)
+ $operators = $this->getOperatorsForRegex($this->operatorsBefore, '/');
+ $operators += $this->getOperatorsForRegex($this->keywordsReserved, '/');
+ $after = '(?=\s*\n\s*('.implode('|', $operators).'))';
+ $this->registerPattern('/'.$pattern.$after.'/', $callback);
+ }
+
+ /**
+ * Strip whitespace.
+ *
+ * We won't strip *all* whitespace, but as much as possible. The thing that
+ * we'll preserve are newlines we're unsure about.
+ * JavaScript doesn't require statements to be terminated with a semicolon.
+ * It will automatically fix missing semicolons with ASI (automatic semi-
+ * colon insertion) at the end of line causing errors (without semicolon.)
+ *
+ * Because it's sometimes hard to tell if a newline is part of a statement
+ * that should be terminated or not, we'll just leave some of them alone.
+ *
+ * @param string $content The content to strip the whitespace for
+ *
+ * @return string
+ */
+ protected function stripWhitespace($content)
+ {
+ // uniform line endings, make them all line feed
+ $content = str_replace(array("\r\n", "\r"), "\n", $content);
+
+ // collapse all non-line feed whitespace into a single space
+ $content = preg_replace('/[^\S\n]+/', ' ', $content);
+
+ // strip leading & trailing whitespace
+ $content = str_replace(array(" \n", "\n "), "\n", $content);
+
+ // collapse consecutive line feeds into just 1
+ $content = preg_replace('/\n+/', "\n", $content);
+
+ $operatorsBefore = $this->getOperatorsForRegex($this->operatorsBefore, '/');
+ $operatorsAfter = $this->getOperatorsForRegex($this->operatorsAfter, '/');
+ $operators = $this->getOperatorsForRegex($this->operators, '/');
+ $keywordsBefore = $this->getKeywordsForRegex($this->keywordsBefore, '/');
+ $keywordsAfter = $this->getKeywordsForRegex($this->keywordsAfter, '/');
+
+ // strip whitespace that ends in (or next line begin with) an operator
+ // that allows statements to be broken up over multiple lines
+ unset($operatorsBefore['+'], $operatorsBefore['-'], $operatorsAfter['+'], $operatorsAfter['-']);
+ $content = preg_replace(
+ array(
+ '/('.implode('|', $operatorsBefore).')\s+/',
+ '/\s+('.implode('|', $operatorsAfter).')/',
+ ),
+ '\\1',
+ $content
+ );
+
+ // make sure + and - can't be mistaken for, or joined into ++ and --
+ $content = preg_replace(
+ array(
+ '/(?<![\+\-])\s*([\+\-])(?![\+\-])/',
+ '/(?<![\+\-])([\+\-])\s*(?![\+\-])/',
+ ),
+ '\\1',
+ $content
+ );
+
+ // collapse whitespace around reserved words into single space
+ $content = preg_replace('/(^|[;\}\s])\K('.implode('|', $keywordsBefore).')\s+/', '\\2 ', $content);
+ $content = preg_replace('/\s+('.implode('|', $keywordsAfter).')(?=([;\{\s]|$))/', ' \\1', $content);
+
+ /*
+ * We didn't strip whitespace after a couple of operators because they
+ * could be used in different contexts and we can't be sure it's ok to
+ * strip the newlines. However, we can safely strip any non-line feed
+ * whitespace that follows them.
+ */
+ $operatorsDiffBefore = array_diff($operators, $operatorsBefore);
+ $operatorsDiffAfter = array_diff($operators, $operatorsAfter);
+ $content = preg_replace('/('.implode('|', $operatorsDiffBefore).')[^\S\n]+/', '\\1', $content);
+ $content = preg_replace('/[^\S\n]+('.implode('|', $operatorsDiffAfter).')/', '\\1', $content);
+
+ /*
+ * Whitespace after `return` can be omitted in a few occasions
+ * (such as when followed by a string or regex)
+ * Same for whitespace in between `)` and `{`, or between `{` and some
+ * keywords.
+ */
+ $content = preg_replace('/\breturn\s+(["\'\/\+\-])/', 'return$1', $content);
+ $content = preg_replace('/\)\s+\{/', '){', $content);
+ $content = preg_replace('/}\n(else|catch|finally)\b/', '}$1', $content);
+
+ /*
+ * Get rid of double semicolons, except where they can be used like:
+ * "for(v=1,_=b;;)", "for(v=1;;v++)" or "for(;;ja||(ja=true))".
+ * I'll safeguard these double semicolons inside for-loops by
+ * temporarily replacing them with an invalid condition: they won't have
+ * a double semicolon and will be easy to spot to restore afterwards.
+ */
+ $content = preg_replace('/\bfor\(([^;]*);;([^;]*)\)/', 'for(\\1;-;\\2)', $content);
+ $content = preg_replace('/;+/', ';', $content);
+ $content = preg_replace('/\bfor\(([^;]*);-;([^;]*)\)/', 'for(\\1;;\\2)', $content);
+
+ /*
+ * Next, we'll be removing all semicolons where ASI kicks in.
+ * for-loops however, can have an empty body (ending in only a
+ * semicolon), like: `for(i=1;i<3;i++);`, of `for(i in list);`
+ * Here, nothing happens during the loop; it's just used to keep
+ * increasing `i`. With that ; omitted, the next line would be expected
+ * to be the for-loop's body... Same goes for while loops.
+ * I'm going to double that semicolon (if any) so after the next line,
+ * which strips semicolons here & there, we're still left with this one.
+ */
+ $content = preg_replace('/(for\([^;\{]*;[^;\{]*;[^;\{]*\));(\}|$)/s', '\\1;;\\2', $content);
+ $content = preg_replace('/(for\([^;\{]+\s+in\s+[^;\{]+\));(\}|$)/s', '\\1;;\\2', $content);
+ /*
+ * Below will also keep `;` after a `do{}while();` along with `while();`
+ * While these could be stripped after do-while, detecting this
+ * distinction is cumbersome, so I'll play it safe and make sure `;`
+ * after any kind of `while` is kept.
+ */
+ $content = preg_replace('/(while\([^;\{]+\));(\}|$)/s', '\\1;;\\2', $content);
+
+ /*
+ * We also can't strip empty else-statements. Even though they're
+ * useless and probably shouldn't be in the code in the first place, we
+ * shouldn't be stripping the `;` that follows it as it breaks the code.
+ * We can just remove those useless else-statements completely.
+ *
+ * @see https://github.com/matthiasmullie/minify/issues/91
+ */
+ $content = preg_replace('/else;/s', '', $content);
+
+ /*
+ * We also don't really want to terminate statements followed by closing
+ * curly braces (which we've ignored completely up until now) or end-of-
+ * script: ASI will kick in here & we're all about minifying.
+ * Semicolons at beginning of the file don't make any sense either.
+ */
+ $content = preg_replace('/;(\}|$)/s', '\\1', $content);
+ $content = ltrim($content, ';');
+
+ // get rid of remaining whitespace af beginning/end
+ return trim($content);
+ }
+
+ /**
+ * We'll strip whitespace around certain operators with regular expressions.
+ * This will prepare the given array by escaping all characters.
+ *
+ * @param string[] $operators
+ * @param string $delimiter
+ *
+ * @return string[]
+ */
+ protected function getOperatorsForRegex(array $operators, $delimiter = '/')
+ {
+ // escape operators for use in regex
+ $delimiters = array_fill(0, count($operators), $delimiter);
+ $escaped = array_map('preg_quote', $operators, $delimiters);
+
+ $operators = array_combine($operators, $escaped);
+
+ // ignore + & - for now, they'll get special treatment
+ unset($operators['+'], $operators['-']);
+
+ // dot can not just immediately follow a number; it can be confused for
+ // decimal point, or calling a method on it, e.g. 42 .toString()
+ $operators['.'] = '(?<![0-9]\s)\.';
+
+ // don't confuse = with other assignment shortcuts (e.g. +=)
+ $chars = preg_quote('+-*\=<>%&|', $delimiter);
+ $operators['='] = '(?<!['.$chars.'])\=';
+
+ return $operators;
+ }
+
+ /**
+ * We'll strip whitespace around certain keywords with regular expressions.
+ * This will prepare the given array by escaping all characters.
+ *
+ * @param string[] $keywords
+ * @param string $delimiter
+ *
+ * @return string[]
+ */
+ protected function getKeywordsForRegex(array $keywords, $delimiter = '/')
+ {
+ // escape keywords for use in regex
+ $delimiter = array_fill(0, count($keywords), $delimiter);
+ $escaped = array_map('preg_quote', $keywords, $delimiter);
+
+ // add word boundaries
+ array_walk($keywords, function ($value) {
+ return '\b'.$value.'\b';
+ });
+
+ $keywords = array_combine($keywords, $escaped);
+
+ return $keywords;
+ }
+
+ /**
+ * Replaces all occurrences of array['key'] by array.key.
+ *
+ * @param string $content
+ *
+ * @return string
+ */
+ protected function propertyNotation($content)
+ {
+ // PHP only supports $this inside anonymous functions since 5.4
+ $minifier = $this;
+ $keywords = $this->keywordsReserved;
+ $callback = function ($match) use ($minifier, $keywords) {
+ $property = trim($minifier->extracted[$match[1]], '\'"');
+
+ /*
+ * Check if the property is a reserved keyword. In this context (as
+ * property of an object literal/array) it shouldn't matter, but IE8
+ * freaks out with "Expected identifier".
+ */
+ if (in_array($property, $keywords)) {
+ return $match[0];
+ }
+
+ /*
+ * See if the property is in a variable-like format (e.g.
+ * array['key-here'] can't be replaced by array.key-here since '-'
+ * is not a valid character there.
+ */
+ if (!preg_match('/^'.$minifier::REGEX_VARIABLE.'$/u', $property)) {
+ return $match[0];
+ }
+
+ return '.'.$property;
+ };
+
+ /*
+ * Figure out if previous character is a variable name (of the array
+ * we want to use property notation on) - this is to make sure
+ * standalone ['value'] arrays aren't confused for keys-of-an-array.
+ * We can (and only have to) check the last character, because PHP's
+ * regex implementation doesn't allow unfixed-length look-behind
+ * assertions.
+ */
+ preg_match('/(\[[^\]]+\])[^\]]*$/', static::REGEX_VARIABLE, $previousChar);
+ $previousChar = $previousChar[1];
+
+ /*
+ * Make sure word preceding the ['value'] is not a keyword, e.g.
+ * return['x']. Because -again- PHP's regex implementation doesn't allow
+ * unfixed-length look-behind assertions, I'm just going to do a lot of
+ * separate look-behind assertions, one for each keyword.
+ */
+ $keywords = $this->getKeywordsForRegex($keywords);
+ $keywords = '(?<!'.implode(')(?<!', $keywords).')';
+
+ return preg_replace_callback('/(?<='.$previousChar.'|\])'.$keywords.'\[\s*(([\'"])[0-9]+\\2)\s*\]/u', $callback, $content);
+ }
+
+ /**
+ * Replaces true & false by !0 and !1.
+ *
+ * @param string $content
+ *
+ * @return string
+ */
+ protected function shortenBools($content)
+ {
+ /*
+ * 'true' or 'false' could be used as property names (which may be
+ * followed by whitespace) - we must not replace those!
+ * Since PHP doesn't allow variable-length (to account for the
+ * whitespace) lookbehind assertions, I need to capture the leading
+ * character and check if it's a `.`
+ */
+ $callback = function ($match) {
+ if (trim($match[1]) === '.') {
+ return $match[0];
+ }
+
+ return $match[1].($match[2] === 'true' ? '!0' : '!1');
+ };
+ $content = preg_replace_callback('/(^|.\s*)\b(true|false)\b(?!:)/', $callback, $content);
+
+ // for(;;) is exactly the same as while(true), but shorter :)
+ $content = preg_replace('/\bwhile\(!0\){/', 'for(;;){', $content);
+
+ // now make sure we didn't turn any do ... while(true) into do ... for(;;)
+ preg_match_all('/\bdo\b/', $content, $dos, PREG_OFFSET_CAPTURE | PREG_SET_ORDER);
+
+ // go backward to make sure positional offsets aren't altered when $content changes
+ $dos = array_reverse($dos);
+ foreach ($dos as $do) {
+ $offsetDo = $do[0][1];
+
+ // find all `while` (now `for`) following `do`: one of those must be
+ // associated with the `do` and be turned back into `while`
+ preg_match_all('/\bfor\(;;\)/', $content, $whiles, PREG_OFFSET_CAPTURE | PREG_SET_ORDER, $offsetDo);
+ foreach ($whiles as $while) {
+ $offsetWhile = $while[0][1];
+
+ $open = substr_count($content, '{', $offsetDo, $offsetWhile - $offsetDo);
+ $close = substr_count($content, '}', $offsetDo, $offsetWhile - $offsetDo);
+ if ($open === $close) {
+ // only restore `while` if amount of `{` and `}` are the same;
+ // otherwise, that `for` isn't associated with this `do`
+ $content = substr_replace($content, 'while(!0)', $offsetWhile, strlen('for(;;)'));
+ break;
+ }
+ }
+ }
+
+ return $content;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/src/Minify.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/src/Minify.php
new file mode 100644
index 0000000..3f40bc1
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/minify/src/Minify.php
@@ -0,0 +1,497 @@
+<?php
+/**
+ * Abstract minifier class
+ *
+ * Please report bugs on https://github.com/matthiasmullie/minify/issues
+ *
+ * @author Matthias Mullie <minify@mullie.eu>
+ * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
+ * @license MIT License
+ */
+namespace MatthiasMullie\Minify;
+
+use MatthiasMullie\Minify\Exceptions\IOException;
+use Psr\Cache\CacheItemInterface;
+
+/**
+ * Abstract minifier class.
+ *
+ * Please report bugs on https://github.com/matthiasmullie/minify/issues
+ *
+ * @package Minify
+ * @author Matthias Mullie <minify@mullie.eu>
+ * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved
+ * @license MIT License
+ */
+abstract class Minify
+{
+ /**
+ * The data to be minified.
+ *
+ * @var string[]
+ */
+ protected $data = array();
+
+ /**
+ * Array of patterns to match.
+ *
+ * @var string[]
+ */
+ protected $patterns = array();
+
+ /**
+ * This array will hold content of strings and regular expressions that have
+ * been extracted from the JS source code, so we can reliably match "code",
+ * without having to worry about potential "code-like" characters inside.
+ *
+ * @var string[]
+ */
+ public $extracted = array();
+
+ /**
+ * Init the minify class - optionally, code may be passed along already.
+ */
+ public function __construct(/* $data = null, ... */)
+ {
+ // it's possible to add the source through the constructor as well ;)
+ if (func_num_args()) {
+ call_user_func_array(array($this, 'add'), func_get_args());
+ }
+ }
+
+ /**
+ * Add a file or straight-up code to be minified.
+ *
+ * @param string|string[] $data
+ *
+ * @return static
+ */
+ public function add($data /* $data = null, ... */)
+ {
+ // bogus "usage" of parameter $data: scrutinizer warns this variable is
+ // not used (we're using func_get_args instead to support overloading),
+ // but it still needs to be defined because it makes no sense to have
+ // this function without argument :)
+ $args = array($data) + func_get_args();
+
+ // this method can be overloaded
+ foreach ($args as $data) {
+ if (is_array($data)) {
+ call_user_func_array(array($this, 'add'), $data);
+ continue;
+ }
+
+ // redefine var
+ $data = (string) $data;
+
+ // load data
+ $value = $this->load($data);
+ $key = ($data != $value) ? $data : count($this->data);
+
+ // replace CR linefeeds etc.
+ // @see https://github.com/matthiasmullie/minify/pull/139
+ $value = str_replace(array("\r\n", "\r"), "\n", $value);
+
+ // store data
+ $this->data[$key] = $value;
+ }
+
+ return $this;
+ }
+
+ /**
+ * Add a file to be minified.
+ *
+ * @param string|string[] $data
+ *
+ * @return static
+ *
+ * @throws IOException
+ */
+ public function addFile($data /* $data = null, ... */)
+ {
+ // bogus "usage" of parameter $data: scrutinizer warns this variable is
+ // not used (we're using func_get_args instead to support overloading),
+ // but it still needs to be defined because it makes no sense to have
+ // this function without argument :)
+ $args = array($data) + func_get_args();
+
+ // this method can be overloaded
+ foreach ($args as $path) {
+ if (is_array($path)) {
+ call_user_func_array(array($this, 'addFile'), $path);
+ continue;
+ }
+
+ // redefine var
+ $path = (string) $path;
+
+ // check if we can read the file
+ if (!$this->canImportFile($path)) {
+ throw new IOException('The file "'.$path.'" could not be opened for reading. Check if PHP has enough permissions.');
+ }
+
+ $this->add($path);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Minify the data & (optionally) saves it to a file.
+ *
+ * @param string[optional] $path Path to write the data to
+ *
+ * @return string The minified data
+ */
+ public function minify($path = null)
+ {
+ $content = $this->execute($path);
+
+ // save to path
+ if ($path !== null) {
+ $this->save($content, $path);
+ }
+
+ return $content;
+ }
+
+ /**
+ * Minify & gzip the data & (optionally) saves it to a file.
+ *
+ * @param string[optional] $path Path to write the data to
+ * @param int[optional] $level Compression level, from 0 to 9
+ *
+ * @return string The minified & gzipped data
+ */
+ public function gzip($path = null, $level = 9)
+ {
+ $content = $this->execute($path);
+ $content = gzencode($content, $level, FORCE_GZIP);
+
+ // save to path
+ if ($path !== null) {
+ $this->save($content, $path);
+ }
+
+ return $content;
+ }
+
+ /**
+ * Minify the data & write it to a CacheItemInterface object.
+ *
+ * @param CacheItemInterface $item Cache item to write the data to
+ *
+ * @return CacheItemInterface Cache item with the minifier data
+ */
+ public function cache(CacheItemInterface $item)
+ {
+ $content = $this->execute();
+ $item->set($content);
+
+ return $item;
+ }
+
+ /**
+ * Minify the data.
+ *
+ * @param string[optional] $path Path to write the data to
+ *
+ * @return string The minified data
+ */
+ abstract public function execute($path = null);
+
+ /**
+ * Load data.
+ *
+ * @param string $data Either a path to a file or the content itself
+ *
+ * @return string
+ */
+ protected function load($data)
+ {
+ // check if the data is a file
+ if ($this->canImportFile($data)) {
+ $data = file_get_contents($data);
+
+ // strip BOM, if any
+ if (substr($data, 0, 3) == "\xef\xbb\xbf") {
+ $data = substr($data, 3);
+ }
+ }
+
+ return $data;
+ }
+
+ /**
+ * Save to file.
+ *
+ * @param string $content The minified data
+ * @param string $path The path to save the minified data to
+ *
+ * @throws IOException
+ */
+ protected function save($content, $path)
+ {
+ $handler = $this->openFileForWriting($path);
+
+ $this->writeToFile($handler, $content);
+
+ @fclose($handler);
+ }
+
+ /**
+ * Register a pattern to execute against the source content.
+ *
+ * @param string $pattern PCRE pattern
+ * @param string|callable $replacement Replacement value for matched pattern
+ */
+ protected function registerPattern($pattern, $replacement = '')
+ {
+ // study the pattern, we'll execute it more than once
+ $pattern .= 'S';
+
+ $this->patterns[] = array($pattern, $replacement);
+ }
+
+ /**
+ * We can't "just" run some regular expressions against JavaScript: it's a
+ * complex language. E.g. having an occurrence of // xyz would be a comment,
+ * unless it's used within a string. Of you could have something that looks
+ * like a 'string', but inside a comment.
+ * The only way to accurately replace these pieces is to traverse the JS one
+ * character at a time and try to find whatever starts first.
+ *
+ * @param string $content The content to replace patterns in
+ *
+ * @return string The (manipulated) content
+ */
+ protected function replace($content)
+ {
+ $processed = '';
+ $positions = array_fill(0, count($this->patterns), -1);
+ $matches = array();
+
+ while ($content) {
+ // find first match for all patterns
+ foreach ($this->patterns as $i => $pattern) {
+ list($pattern, $replacement) = $pattern;
+
+ // we can safely ignore patterns for positions we've unset earlier,
+ // because we know these won't show up anymore
+ if (array_key_exists($i, $positions) == false) {
+ continue;
+ }
+
+ // no need to re-run matches that are still in the part of the
+ // content that hasn't been processed
+ if ($positions[$i] >= 0) {
+ continue;
+ }
+
+ $match = null;
+ if (preg_match($pattern, $content, $match, PREG_OFFSET_CAPTURE)) {
+ $matches[$i] = $match;
+
+ // we'll store the match position as well; that way, we
+ // don't have to redo all preg_matches after changing only
+ // the first (we'll still know where those others are)
+ $positions[$i] = $match[0][1];
+ } else {
+ // if the pattern couldn't be matched, there's no point in
+ // executing it again in later runs on this same content;
+ // ignore this one until we reach end of content
+ unset($matches[$i], $positions[$i]);
+ }
+ }
+
+ // no more matches to find: everything's been processed, break out
+ if (!$matches) {
+ $processed .= $content;
+ break;
+ }
+
+ // see which of the patterns actually found the first thing (we'll
+ // only want to execute that one, since we're unsure if what the
+ // other found was not inside what the first found)
+ $discardLength = min($positions);
+ $firstPattern = array_search($discardLength, $positions);
+ $match = $matches[$firstPattern][0][0];
+
+ // execute the pattern that matches earliest in the content string
+ list($pattern, $replacement) = $this->patterns[$firstPattern];
+ $replacement = $this->replacePattern($pattern, $replacement, $content);
+
+ // figure out which part of the string was unmatched; that's the
+ // part we'll execute the patterns on again next
+ $content = (string) substr($content, $discardLength);
+ $unmatched = (string) substr($content, strpos($content, $match) + strlen($match));
+
+ // move the replaced part to $processed and prepare $content to
+ // again match batch of patterns against
+ $processed .= substr($replacement, 0, strlen($replacement) - strlen($unmatched));
+ $content = $unmatched;
+
+ // first match has been replaced & that content is to be left alone,
+ // the next matches will start after this replacement, so we should
+ // fix their offsets
+ foreach ($positions as $i => $position) {
+ $positions[$i] -= $discardLength + strlen($match);
+ }
+ }
+
+ return $processed;
+ }
+
+ /**
+ * This is where a pattern is matched against $content and the matches
+ * are replaced by their respective value.
+ * This function will be called plenty of times, where $content will always
+ * move up 1 character.
+ *
+ * @param string $pattern Pattern to match
+ * @param string|callable $replacement Replacement value
+ * @param string $content Content to match pattern against
+ *
+ * @return string
+ */
+ protected function replacePattern($pattern, $replacement, $content)
+ {
+ if (is_callable($replacement)) {
+ return preg_replace_callback($pattern, $replacement, $content, 1, $count);
+ } else {
+ return preg_replace($pattern, $replacement, $content, 1, $count);
+ }
+ }
+
+ /**
+ * Strings are a pattern we need to match, in order to ignore potential
+ * code-like content inside them, but we just want all of the string
+ * content to remain untouched.
+ *
+ * This method will replace all string content with simple STRING#
+ * placeholder text, so we've rid all strings from characters that may be
+ * misinterpreted. Original string content will be saved in $this->extracted
+ * and after doing all other minifying, we can restore the original content
+ * via restoreStrings().
+ *
+ * @param string[optional] $chars
+ * @param string[optional] $placeholderPrefix
+ */
+ protected function extractStrings($chars = '\'"', $placeholderPrefix = '')
+ {
+ // PHP only supports $this inside anonymous functions since 5.4
+ $minifier = $this;
+ $callback = function ($match) use ($minifier, $placeholderPrefix) {
+ // check the second index here, because the first always contains a quote
+ if ($match[2] === '') {
+ /*
+ * Empty strings need no placeholder; they can't be confused for
+ * anything else anyway.
+ * But we still needed to match them, for the extraction routine
+ * to skip over this particular string.
+ */
+ return $match[0];
+ }
+
+ $count = count($minifier->extracted);
+ $placeholder = $match[1].$placeholderPrefix.$count.$match[1];
+ $minifier->extracted[$placeholder] = $match[1].$match[2].$match[1];
+
+ return $placeholder;
+ };
+
+ /*
+ * The \\ messiness explained:
+ * * Don't count ' or " as end-of-string if it's escaped (has backslash
+ * in front of it)
+ * * Unless... that backslash itself is escaped (another leading slash),
+ * in which case it's no longer escaping the ' or "
+ * * So there can be either no backslash, or an even number
+ * * multiply all of that times 4, to account for the escaping that has
+ * to be done to pass the backslash into the PHP string without it being
+ * considered as escape-char (times 2) and to get it in the regex,
+ * escaped (times 2)
+ */
+ $this->registerPattern('/(['.$chars.'])(.*?(?<!\\\\)(\\\\\\\\)*+)\\1/s', $callback);
+ }
+
+ /**
+ * This method will restore all extracted data (strings, regexes) that were
+ * replaced with placeholder text in extract*(). The original content was
+ * saved in $this->extracted.
+ *
+ * @param string $content
+ *
+ * @return string
+ */
+ protected function restoreExtractedData($content)
+ {
+ if (!$this->extracted) {
+ // nothing was extracted, nothing to restore
+ return $content;
+ }
+
+ $content = strtr($content, $this->extracted);
+
+ $this->extracted = array();
+
+ return $content;
+ }
+
+ /**
+ * Check if the path is a regular file and can be read.
+ *
+ * @param string $path
+ *
+ * @return bool
+ */
+ protected function canImportFile($path)
+ {
+ $parsed = parse_url($path);
+ if (
+ // file is elsewhere
+ isset($parsed['host']) ||
+ // file responds to queries (may change, or need to bypass cache)
+ isset($parsed['query'])
+ ) {
+ return false;
+ }
+
+ return strlen($path) < PHP_MAXPATHLEN && @is_file($path) && is_readable($path);
+ }
+
+ /**
+ * Attempts to open file specified by $path for writing.
+ *
+ * @param string $path The path to the file
+ *
+ * @return resource Specifier for the target file
+ *
+ * @throws IOException
+ */
+ protected function openFileForWriting($path)
+ {
+ if (($handler = @fopen($path, 'w')) === false) {
+ throw new IOException('The file "'.$path.'" could not be opened for writing. Check if PHP has enough permissions.');
+ }
+
+ return $handler;
+ }
+
+ /**
+ * Attempts to write $content to the file specified by $handler. $path is used for printing exceptions.
+ *
+ * @param resource $handler The resource to write to
+ * @param string $content The content to write
+ * @param string $path The path to the file (for exception printing only)
+ *
+ * @throws IOException
+ */
+ protected function writeToFile($handler, $content, $path = '')
+ {
+ if (($result = @fwrite($handler, $content)) === false || ($result < strlen($content))) {
+ throw new IOException('The file "'.$path.'" could not be written to. Check your disk space and file permissions.');
+ }
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/path-converter/LICENSE b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/path-converter/LICENSE
new file mode 100644
index 0000000..491295a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/path-converter/LICENSE
@@ -0,0 +1,18 @@
+Copyright (c) 2015 Matthias Mullie
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/path-converter/composer.json b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/path-converter/composer.json
new file mode 100644
index 0000000..1cb6a4c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/path-converter/composer.json
@@ -0,0 +1,28 @@
+{
+ "name": "matthiasmullie/path-converter",
+ "type": "library",
+ "description": "Relative path converter",
+ "keywords": ["relative", "path", "converter", "paths"],
+ "homepage": "http://github.com/matthiasmullie/path-converter",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Matthias Mullie",
+ "homepage": "http://www.mullie.eu",
+ "email": "pathconverter@mullie.eu",
+ "role": "Developer"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.0",
+ "ext-pcre": "*"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.8"
+ },
+ "autoload": {
+ "psr-4": {
+ "MatthiasMullie\\PathConverter\\": "src/"
+ }
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/path-converter/src/Converter.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/path-converter/src/Converter.php
new file mode 100644
index 0000000..80cf269
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/path-converter/src/Converter.php
@@ -0,0 +1,204 @@
+<?php
+
+namespace MatthiasMullie\PathConverter;
+
+/**
+ * Convert paths relative from 1 file to another.
+ *
+ * E.g.
+ * ../../images/icon.jpg relative to /css/imports/icons.css
+ * becomes
+ * ../images/icon.jpg relative to /css/minified.css
+ *
+ * Please report bugs on https://github.com/matthiasmullie/path-converter/issues
+ *
+ * @author Matthias Mullie <pathconverter@mullie.eu>
+ * @copyright Copyright (c) 2015, Matthias Mullie. All rights reserved
+ * @license MIT License
+ */
+class Converter implements ConverterInterface
+{
+ /**
+ * @var string
+ */
+ protected $from;
+
+ /**
+ * @var string
+ */
+ protected $to;
+
+ /**
+ * @param string $from The original base path (directory, not file!)
+ * @param string $to The new base path (directory, not file!)
+ * @param string $root Root directory (defaults to `getcwd`)
+ */
+ public function __construct($from, $to, $root = '')
+ {
+ $shared = $this->shared($from, $to);
+ if ($shared === '') {
+ // when both paths have nothing in common, one of them is probably
+ // absolute while the other is relative
+ $root = $root ?: getcwd();
+ $from = strpos($from, $root) === 0 ? $from : preg_replace('/\/+/', '/', $root.'/'.$from);
+ $to = strpos($to, $root) === 0 ? $to : preg_replace('/\/+/', '/', $root.'/'.$to);
+
+ // or traveling the tree via `..`
+ // attempt to resolve path, or assume it's fine if it doesn't exist
+ $from = @realpath($from) ?: $from;
+ $to = @realpath($to) ?: $to;
+ }
+
+ $from = $this->dirname($from);
+ $to = $this->dirname($to);
+
+ $from = $this->normalize($from);
+ $to = $this->normalize($to);
+
+ $this->from = $from;
+ $this->to = $to;
+ }
+
+ /**
+ * Normalize path.
+ *
+ * @param string $path
+ *
+ * @return string
+ */
+ protected function normalize($path)
+ {
+ // deal with different operating systems' directory structure
+ $path = rtrim(str_replace(DIRECTORY_SEPARATOR, '/', $path), '/');
+
+ // remove leading current directory.
+ if (substr($path, 0, 2) === './') {
+ $path = substr($path, 2);
+ }
+
+ // remove references to current directory in the path.
+ $path = str_replace('/./', '/', $path);
+
+ /*
+ * Example:
+ * /home/forkcms/frontend/cache/compiled_templates/../../core/layout/css/../images/img.gif
+ * to
+ * /home/forkcms/frontend/core/layout/images/img.gif
+ */
+ do {
+ $path = preg_replace('/[^\/]+(?<!\.\.)\/\.\.\//', '', $path, -1, $count);
+ } while ($count);
+
+ return $path;
+ }
+
+ /**
+ * Figure out the shared path of 2 locations.
+ *
+ * Example:
+ * /home/forkcms/frontend/core/layout/images/img.gif
+ * and
+ * /home/forkcms/frontend/cache/minified_css
+ * share
+ * /home/forkcms/frontend
+ *
+ * @param string $path1
+ * @param string $path2
+ *
+ * @return string
+ */
+ protected function shared($path1, $path2)
+ {
+ // $path could theoretically be empty (e.g. no path is given), in which
+ // case it shouldn't expand to array(''), which would compare to one's
+ // root /
+ $path1 = $path1 ? explode('/', $path1) : array();
+ $path2 = $path2 ? explode('/', $path2) : array();
+
+ $shared = array();
+
+ // compare paths & strip identical ancestors
+ foreach ($path1 as $i => $chunk) {
+ if (isset($path2[$i]) && $path1[$i] == $path2[$i]) {
+ $shared[] = $chunk;
+ } else {
+ break;
+ }
+ }
+
+ return implode('/', $shared);
+ }
+
+ /**
+ * Convert paths relative from 1 file to another.
+ *
+ * E.g.
+ * ../images/img.gif relative to /home/forkcms/frontend/core/layout/css
+ * should become:
+ * ../../core/layout/images/img.gif relative to
+ * /home/forkcms/frontend/cache/minified_css
+ *
+ * @param string $path The relative path that needs to be converted
+ *
+ * @return string The new relative path
+ */
+ public function convert($path)
+ {
+ // quit early if conversion makes no sense
+ if ($this->from === $this->to) {
+ return $path;
+ }
+
+ $path = $this->normalize($path);
+ // if we're not dealing with a relative path, just return absolute
+ if (strpos($path, '/') === 0) {
+ return $path;
+ }
+
+ // normalize paths
+ $path = $this->normalize($this->from.'/'.$path);
+
+ // strip shared ancestor paths
+ $shared = $this->shared($path, $this->to);
+ $path = mb_substr($path, mb_strlen($shared));
+ $to = mb_substr($this->to, mb_strlen($shared));
+
+ // add .. for every directory that needs to be traversed to new path
+ $to = str_repeat('../', count(array_filter(explode('/', $to))));
+
+ return $to.ltrim($path, '/');
+ }
+
+ /**
+ * Attempt to get the directory name from a path.
+ *
+ * @param string $path
+ *
+ * @return string
+ */
+ protected function dirname($path)
+ {
+ if (@is_file($path)) {
+ return dirname($path);
+ }
+
+ if (@is_dir($path)) {
+ return rtrim($path, '/');
+ }
+
+ // no known file/dir, start making assumptions
+
+ // ends in / = dir
+ if (mb_substr($path, -1) === '/') {
+ return rtrim($path, '/');
+ }
+
+ // has a dot in the name, likely a file
+ if (preg_match('/.*\..*$/', basename($path)) !== 0) {
+ return dirname($path);
+ }
+
+ // you're on your own here!
+ return $path;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/path-converter/src/ConverterInterface.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/path-converter/src/ConverterInterface.php
new file mode 100644
index 0000000..dc1b765
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/path-converter/src/ConverterInterface.php
@@ -0,0 +1,24 @@
+<?php
+
+namespace MatthiasMullie\PathConverter;
+
+/**
+ * Convert file paths.
+ *
+ * Please report bugs on https://github.com/matthiasmullie/path-converter/issues
+ *
+ * @author Matthias Mullie <pathconverter@mullie.eu>
+ * @copyright Copyright (c) 2015, Matthias Mullie. All rights reserved
+ * @license MIT License
+ */
+interface ConverterInterface
+{
+ /**
+ * Convert file paths.
+ *
+ * @param string $path The path to be converted
+ *
+ * @return string The new path
+ */
+ public function convert($path);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/path-converter/src/NoConverter.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/path-converter/src/NoConverter.php
new file mode 100644
index 0000000..2fcfd0f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/matthiasmullie/path-converter/src/NoConverter.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace MatthiasMullie\PathConverter;
+
+/**
+ * Don't convert paths.
+ *
+ * Please report bugs on https://github.com/matthiasmullie/path-converter/issues
+ *
+ * @author Matthias Mullie <pathconverter@mullie.eu>
+ * @copyright Copyright (c) 2015, Matthias Mullie. All rights reserved
+ * @license MIT License
+ */
+class NoConverter implements ConverterInterface
+{
+ /**
+ * {@inheritdoc}
+ */
+ public function convert($path)
+ {
+ return $path;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/.gitignore b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/.gitignore
new file mode 100644
index 0000000..e5294f4
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/.gitignore
@@ -0,0 +1,3 @@
+vendor
+composer.lock
+.DS_Store
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/COPYING b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/COPYING
new file mode 100644
index 0000000..8e7ddbc
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/COPYING
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2011 Vladimir Andersen
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/README.md b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/README.md
new file mode 100644
index 0000000..1ebbdc5
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/README.md
@@ -0,0 +1,30 @@
+**Spyc** is a YAML loader/dumper written in pure PHP. Given a YAML document, Spyc will return an array that
+you can use however you see fit. Given an array, Spyc will return a string which contains a YAML document
+built from your data.
+
+**YAML** is an amazingly human friendly and strikingly versatile data serialization language which can be used
+for log files, config files, custom protocols, the works. For more information, see http://www.yaml.org.
+
+Spyc supports YAML 1.0 specification.
+
+## Using Spyc
+
+Using Spyc is trivial:
+
+```php
+<?php
+require_once "spyc.php";
+$Data = Spyc::YAMLLoad('spyc.yaml');
+```
+
+or (if you prefer functional syntax)
+
+```php
+<?php
+require_once "spyc.php";
+$Data = spyc_load_file('spyc.yaml');
+```
+
+## Donations, anyone?
+
+If you find Spyc useful, I'm accepting Bitcoin donations (who doesn't these days?) at 193bEkLP7zMrNLZm9UdUet4puGD5mQiLai
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/Spyc.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/Spyc.php
new file mode 100644
index 0000000..3fe0f62
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/Spyc.php
@@ -0,0 +1,1186 @@
+<?php
+/**
+ * Spyc -- A Simple PHP YAML Class
+ * @version 0.6.2
+ * @author Vlad Andersen <vlad.andersen@gmail.com>
+ * @author Chris Wanstrath <chris@ozmm.org>
+ * @link https://github.com/mustangostang/spyc/
+ * @copyright Copyright 2005-2006 Chris Wanstrath, 2006-2011 Vlad Andersen
+ * @license http://www.opensource.org/licenses/mit-license.php MIT License
+ * @package Spyc
+ */
+
+if (!function_exists('spyc_load')) {
+ /**
+ * Parses YAML to array.
+ * @param string $string YAML string.
+ * @return array
+ */
+ function spyc_load ($string) {
+ return Spyc::YAMLLoadString($string);
+ }
+}
+
+if (!function_exists('spyc_load_file')) {
+ /**
+ * Parses YAML to array.
+ * @param string $file Path to YAML file.
+ * @return array
+ */
+ function spyc_load_file ($file) {
+ return Spyc::YAMLLoad($file);
+ }
+}
+
+if (!function_exists('spyc_dump')) {
+ /**
+ * Dumps array to YAML.
+ * @param array $data Array.
+ * @return string
+ */
+ function spyc_dump ($data) {
+ return Spyc::YAMLDump($data, false, false, true);
+ }
+}
+
+if (!class_exists('Spyc')) {
+
+/**
+ * The Simple PHP YAML Class.
+ *
+ * This class can be used to read a YAML file and convert its contents
+ * into a PHP array. It currently supports a very limited subsection of
+ * the YAML spec.
+ *
+ * Usage:
+ * <code>
+ * $Spyc = new Spyc;
+ * $array = $Spyc->load($file);
+ * </code>
+ * or:
+ * <code>
+ * $array = Spyc::YAMLLoad($file);
+ * </code>
+ * or:
+ * <code>
+ * $array = spyc_load_file($file);
+ * </code>
+ * @package Spyc
+ */
+class Spyc {
+
+ // SETTINGS
+
+ const REMPTY = "\0\0\0\0\0";
+
+ /**
+ * Setting this to true will force YAMLDump to enclose any string value in
+ * quotes. False by default.
+ *
+ * @var bool
+ */
+ public $setting_dump_force_quotes = false;
+
+ /**
+ * Setting this to true will forse YAMLLoad to use syck_load function when
+ * possible. False by default.
+ * @var bool
+ */
+ public $setting_use_syck_is_possible = false;
+
+ /**
+ * Setting this to true will forse YAMLLoad to use syck_load function when
+ * possible. False by default.
+ * @var bool
+ */
+ public $setting_empty_hash_as_object = false;
+
+
+ /**#@+
+ * @access private
+ * @var mixed
+ */
+ private $_dumpIndent;
+ private $_dumpWordWrap;
+ private $_containsGroupAnchor = false;
+ private $_containsGroupAlias = false;
+ private $path;
+ private $result;
+ private $LiteralPlaceHolder = '___YAML_Literal_Block___';
+ private $SavedGroups = array();
+ private $indent;
+ /**
+ * Path modifier that should be applied after adding current element.
+ * @var array
+ */
+ private $delayedPath = array();
+
+ /**#@+
+ * @access public
+ * @var mixed
+ */
+ public $_nodeId;
+
+/**
+ * Load a valid YAML string to Spyc.
+ * @param string $input
+ * @return array
+ */
+ public function load ($input) {
+ return $this->_loadString($input);
+ }
+
+ /**
+ * Load a valid YAML file to Spyc.
+ * @param string $file
+ * @return array
+ */
+ public function loadFile ($file) {
+ return $this->_load($file);
+ }
+
+ /**
+ * Load YAML into a PHP array statically
+ *
+ * The load method, when supplied with a YAML stream (string or file),
+ * will do its best to convert YAML in a file into a PHP array. Pretty
+ * simple.
+ * Usage:
+ * <code>
+ * $array = Spyc::YAMLLoad('lucky.yaml');
+ * print_r($array);
+ * </code>
+ * @access public
+ * @return array
+ * @param string $input Path of YAML file or string containing YAML
+ * @param array set options
+ */
+ public static function YAMLLoad($input, $options = []) {
+ $Spyc = new Spyc;
+ foreach ($options as $key => $value) {
+ if (property_exists($Spyc, $key)) {
+ $Spyc->$key = $value;
+ }
+ }
+ return $Spyc->_load($input);
+ }
+
+ /**
+ * Load a string of YAML into a PHP array statically
+ *
+ * The load method, when supplied with a YAML string, will do its best
+ * to convert YAML in a string into a PHP array. Pretty simple.
+ *
+ * Note: use this function if you don't want files from the file system
+ * loaded and processed as YAML. This is of interest to people concerned
+ * about security whose input is from a string.
+ *
+ * Usage:
+ * <code>
+ * $array = Spyc::YAMLLoadString("---\n0: hello world\n");
+ * print_r($array);
+ * </code>
+ * @access public
+ * @return array
+ * @param string $input String containing YAML
+ * @param array set options
+ */
+ public static function YAMLLoadString($input, $options = []) {
+ $Spyc = new Spyc;
+ foreach ($options as $key => $value) {
+ if (property_exists($Spyc, $key)) {
+ $Spyc->$key = $value;
+ }
+ }
+ return $Spyc->_loadString($input);
+ }
+
+ /**
+ * Dump YAML from PHP array statically
+ *
+ * The dump method, when supplied with an array, will do its best
+ * to convert the array into friendly YAML. Pretty simple. Feel free to
+ * save the returned string as nothing.yaml and pass it around.
+ *
+ * Oh, and you can decide how big the indent is and what the wordwrap
+ * for folding is. Pretty cool -- just pass in 'false' for either if
+ * you want to use the default.
+ *
+ * Indent's default is 2 spaces, wordwrap's default is 40 characters. And
+ * you can turn off wordwrap by passing in 0.
+ *
+ * @access public
+ * @return string
+ * @param array|\stdClass $array PHP array
+ * @param int $indent Pass in false to use the default, which is 2
+ * @param int $wordwrap Pass in 0 for no wordwrap, false for default (40)
+ * @param bool $no_opening_dashes Do not start YAML file with "---\n"
+ */
+ public static function YAMLDump($array, $indent = false, $wordwrap = false, $no_opening_dashes = false) {
+ $spyc = new Spyc;
+ return $spyc->dump($array, $indent, $wordwrap, $no_opening_dashes);
+ }
+
+
+ /**
+ * Dump PHP array to YAML
+ *
+ * The dump method, when supplied with an array, will do its best
+ * to convert the array into friendly YAML. Pretty simple. Feel free to
+ * save the returned string as tasteful.yaml and pass it around.
+ *
+ * Oh, and you can decide how big the indent is and what the wordwrap
+ * for folding is. Pretty cool -- just pass in 'false' for either if
+ * you want to use the default.
+ *
+ * Indent's default is 2 spaces, wordwrap's default is 40 characters. And
+ * you can turn off wordwrap by passing in 0.
+ *
+ * @access public
+ * @return string
+ * @param array $array PHP array
+ * @param int $indent Pass in false to use the default, which is 2
+ * @param int $wordwrap Pass in 0 for no wordwrap, false for default (40)
+ */
+ public function dump($array,$indent = false,$wordwrap = false, $no_opening_dashes = false) {
+ // Dumps to some very clean YAML. We'll have to add some more features
+ // and options soon. And better support for folding.
+
+ // New features and options.
+ if ($indent === false or !is_numeric($indent)) {
+ $this->_dumpIndent = 2;
+ } else {
+ $this->_dumpIndent = $indent;
+ }
+
+ if ($wordwrap === false or !is_numeric($wordwrap)) {
+ $this->_dumpWordWrap = 40;
+ } else {
+ $this->_dumpWordWrap = $wordwrap;
+ }
+
+ // New YAML document
+ $string = "";
+ if (!$no_opening_dashes) $string = "---\n";
+
+ // Start at the base of the array and move through it.
+ if ($array) {
+ $array = (array)$array;
+ $previous_key = -1;
+ foreach ($array as $key => $value) {
+ if (!isset($first_key)) $first_key = $key;
+ $string .= $this->_yamlize($key,$value,0,$previous_key, $first_key, $array);
+ $previous_key = $key;
+ }
+ }
+ return $string;
+ }
+
+ /**
+ * Attempts to convert a key / value array item to YAML
+ * @access private
+ * @return string
+ * @param $key The name of the key
+ * @param $value The value of the item
+ * @param $indent The indent of the current node
+ */
+ private function _yamlize($key,$value,$indent, $previous_key = -1, $first_key = 0, $source_array = null) {
+ if(is_object($value)) $value = (array)$value;
+ if (is_array($value)) {
+ if (empty ($value))
+ return $this->_dumpNode($key, array(), $indent, $previous_key, $first_key, $source_array);
+ // It has children. What to do?
+ // Make it the right kind of item
+ $string = $this->_dumpNode($key, self::REMPTY, $indent, $previous_key, $first_key, $source_array);
+ // Add the indent
+ $indent += $this->_dumpIndent;
+ // Yamlize the array
+ $string .= $this->_yamlizeArray($value,$indent);
+ } elseif (!is_array($value)) {
+ // It doesn't have children. Yip.
+ $string = $this->_dumpNode($key, $value, $indent, $previous_key, $first_key, $source_array);
+ }
+ return $string;
+ }
+
+ /**
+ * Attempts to convert an array to YAML
+ * @access private
+ * @return string
+ * @param $array The array you want to convert
+ * @param $indent The indent of the current level
+ */
+ private function _yamlizeArray($array,$indent) {
+ if (is_array($array)) {
+ $string = '';
+ $previous_key = -1;
+ foreach ($array as $key => $value) {
+ if (!isset($first_key)) $first_key = $key;
+ $string .= $this->_yamlize($key, $value, $indent, $previous_key, $first_key, $array);
+ $previous_key = $key;
+ }
+ return $string;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Returns YAML from a key and a value
+ * @access private
+ * @return string
+ * @param $key The name of the key
+ * @param $value The value of the item
+ * @param $indent The indent of the current node
+ */
+ private function _dumpNode($key, $value, $indent, $previous_key = -1, $first_key = 0, $source_array = null) {
+ // do some folding here, for blocks
+ if (is_string ($value) && ((strpos($value,"\n") !== false || strpos($value,": ") !== false || strpos($value,"- ") !== false ||
+ strpos($value,"*") !== false || strpos($value,"#") !== false || strpos($value,"<") !== false || strpos($value,">") !== false || strpos ($value, '%') !== false || strpos ($value, ' ') !== false ||
+ strpos($value,"[") !== false || strpos($value,"]") !== false || strpos($value,"{") !== false || strpos($value,"}") !== false) || strpos($value,"&") !== false || strpos($value, "'") !== false || strpos($value, "!") === 0 ||
+ substr ($value, -1, 1) == ':')
+ ) {
+ $value = $this->_doLiteralBlock($value,$indent);
+ } else {
+ $value = $this->_doFolding($value,$indent);
+ }
+
+ if ($value === array()) $value = '[ ]';
+ if ($value === "") $value = '""';
+ if (self::isTranslationWord($value)) {
+ $value = $this->_doLiteralBlock($value, $indent);
+ }
+ if (trim ($value) != $value)
+ $value = $this->_doLiteralBlock($value,$indent);
+
+ if (is_bool($value)) {
+ $value = $value ? "true" : "false";
+ }
+
+ if ($value === null) $value = 'null';
+ if ($value === "'" . self::REMPTY . "'") $value = null;
+
+ $spaces = str_repeat(' ',$indent);
+
+ //if (is_int($key) && $key - 1 == $previous_key && $first_key===0) {
+ if (is_array ($source_array) && array_keys($source_array) === range(0, count($source_array) - 1)) {
+ // It's a sequence
+ $string = $spaces.'- '.$value."\n";
+ } else {
+ // if ($first_key===0) throw new Exception('Keys are all screwy. The first one was zero, now it\'s "'. $key .'"');
+ // It's mapped
+ if (strpos($key, ":") !== false || strpos($key, "#") !== false) { $key = '"' . $key . '"'; }
+ $string = rtrim ($spaces.$key.': '.$value)."\n";
+ }
+ return $string;
+ }
+
+ /**
+ * Creates a literal block for dumping
+ * @access private
+ * @return string
+ * @param $value
+ * @param $indent int The value of the indent
+ */
+ private function _doLiteralBlock($value,$indent) {
+ if ($value === "\n") return '\n';
+ if (strpos($value, "\n") === false && strpos($value, "'") === false) {
+ return sprintf ("'%s'", $value);
+ }
+ if (strpos($value, "\n") === false && strpos($value, '"') === false) {
+ return sprintf ('"%s"', $value);
+ }
+ $exploded = explode("\n",$value);
+ $newValue = '|';
+ if (isset($exploded[0]) && ($exploded[0] == "|" || $exploded[0] == "|-" || $exploded[0] == ">")) {
+ $newValue = $exploded[0];
+ unset($exploded[0]);
+ }
+ $indent += $this->_dumpIndent;
+ $spaces = str_repeat(' ',$indent);
+ foreach ($exploded as $line) {
+ $line = trim($line);
+ if (strpos($line, '"') === 0 && strrpos($line, '"') == (strlen($line)-1) || strpos($line, "'") === 0 && strrpos($line, "'") == (strlen($line)-1)) {
+ $line = substr($line, 1, -1);
+ }
+ $newValue .= "\n" . $spaces . ($line);
+ }
+ return $newValue;
+ }
+
+ /**
+ * Folds a string of text, if necessary
+ * @access private
+ * @return string
+ * @param $value The string you wish to fold
+ */
+ private function _doFolding($value,$indent) {
+ // Don't do anything if wordwrap is set to 0
+
+ if ($this->_dumpWordWrap !== 0 && is_string ($value) && strlen($value) > $this->_dumpWordWrap) {
+ $indent += $this->_dumpIndent;
+ $indent = str_repeat(' ',$indent);
+ $wrapped = wordwrap($value,$this->_dumpWordWrap,"\n$indent");
+ $value = ">\n".$indent.$wrapped;
+ } else {
+ if ($this->setting_dump_force_quotes && is_string ($value) && $value !== self::REMPTY)
+ $value = '"' . $value . '"';
+ if (is_numeric($value) && is_string($value))
+ $value = '"' . $value . '"';
+ }
+
+
+ return $value;
+ }
+
+ private function isTrueWord($value) {
+ $words = self::getTranslations(array('true', 'on', 'yes', 'y'));
+ return in_array($value, $words, true);
+ }
+
+ private function isFalseWord($value) {
+ $words = self::getTranslations(array('false', 'off', 'no', 'n'));
+ return in_array($value, $words, true);
+ }
+
+ private function isNullWord($value) {
+ $words = self::getTranslations(array('null', '~'));
+ return in_array($value, $words, true);
+ }
+
+ private function isTranslationWord($value) {
+ return (
+ self::isTrueWord($value) ||
+ self::isFalseWord($value) ||
+ self::isNullWord($value)
+ );
+ }
+
+ /**
+ * Coerce a string into a native type
+ * Reference: http://yaml.org/type/bool.html
+ * TODO: Use only words from the YAML spec.
+ * @access private
+ * @param $value The value to coerce
+ */
+ private function coerceValue(&$value) {
+ if (self::isTrueWord($value)) {
+ $value = true;
+ } else if (self::isFalseWord($value)) {
+ $value = false;
+ } else if (self::isNullWord($value)) {
+ $value = null;
+ }
+ }
+
+ /**
+ * Given a set of words, perform the appropriate translations on them to
+ * match the YAML 1.1 specification for type coercing.
+ * @param $words The words to translate
+ * @access private
+ */
+ private static function getTranslations(array $words) {
+ $result = array();
+ foreach ($words as $i) {
+ $result = array_merge($result, array(ucfirst($i), strtoupper($i), strtolower($i)));
+ }
+ return $result;
+ }
+
+// LOADING FUNCTIONS
+
+ private function _load($input) {
+ $Source = $this->loadFromSource($input);
+ return $this->loadWithSource($Source);
+ }
+
+ private function _loadString($input) {
+ $Source = $this->loadFromString($input);
+ return $this->loadWithSource($Source);
+ }
+
+ private function loadWithSource($Source) {
+ if (empty ($Source)) return array();
+ if ($this->setting_use_syck_is_possible && function_exists ('syck_load')) {
+ $array = syck_load (implode ("\n", $Source));
+ return is_array($array) ? $array : array();
+ }
+
+ $this->path = array();
+ $this->result = array();
+
+ $cnt = count($Source);
+ for ($i = 0; $i < $cnt; $i++) {
+ $line = $Source[$i];
+
+ $this->indent = strlen($line) - strlen(ltrim($line));
+ $tempPath = $this->getParentPathByIndent($this->indent);
+ $line = self::stripIndent($line, $this->indent);
+ if (self::isComment($line)) continue;
+ if (self::isEmpty($line)) continue;
+ $this->path = $tempPath;
+
+ $literalBlockStyle = self::startsLiteralBlock($line);
+ if ($literalBlockStyle) {
+ $line = rtrim ($line, $literalBlockStyle . " \n");
+ $literalBlock = '';
+ $line .= ' '.$this->LiteralPlaceHolder;
+ $literal_block_indent = strlen($Source[$i+1]) - strlen(ltrim($Source[$i+1]));
+ while (++$i < $cnt && $this->literalBlockContinues($Source[$i], $this->indent)) {
+ $literalBlock = $this->addLiteralLine($literalBlock, $Source[$i], $literalBlockStyle, $literal_block_indent);
+ }
+ $i--;
+ }
+
+ // Strip out comments
+ if (strpos ($line, '#')) {
+ $line = preg_replace('/\s*#([^"\']+)$/','',$line);
+ }
+
+ while (++$i < $cnt && self::greedilyNeedNextLine($line)) {
+ $line = rtrim ($line, " \n\t\r") . ' ' . ltrim ($Source[$i], " \t");
+ }
+ $i--;
+
+ $lineArray = $this->_parseLine($line);
+
+ if ($literalBlockStyle)
+ $lineArray = $this->revertLiteralPlaceHolder ($lineArray, $literalBlock);
+
+ $this->addArray($lineArray, $this->indent);
+
+ foreach ($this->delayedPath as $indent => $delayedPath)
+ $this->path[$indent] = $delayedPath;
+
+ $this->delayedPath = array();
+
+ }
+ return $this->result;
+ }
+
+ private function loadFromSource ($input) {
+ if (!empty($input) && strpos($input, "\n") === false && file_exists($input))
+ $input = file_get_contents($input);
+
+ return $this->loadFromString($input);
+ }
+
+ private function loadFromString ($input) {
+ $lines = explode("\n",$input);
+ foreach ($lines as $k => $_) {
+ $lines[$k] = rtrim ($_, "\r");
+ }
+ return $lines;
+ }
+
+ /**
+ * Parses YAML code and returns an array for a node
+ * @access private
+ * @return array
+ * @param string $line A line from the YAML file
+ */
+ private function _parseLine($line) {
+ if (!$line) return array();
+ $line = trim($line);
+ if (!$line) return array();
+
+ $array = array();
+
+ $group = $this->nodeContainsGroup($line);
+ if ($group) {
+ $this->addGroup($line, $group);
+ $line = $this->stripGroup ($line, $group);
+ }
+
+ if ($this->startsMappedSequence($line)) {
+ return $this->returnMappedSequence($line);
+ }
+
+ if ($this->startsMappedValue($line)) {
+ return $this->returnMappedValue($line);
+ }
+
+ if ($this->isArrayElement($line))
+ return $this->returnArrayElement($line);
+
+ if ($this->isPlainArray($line))
+ return $this->returnPlainArray($line);
+
+ return $this->returnKeyValuePair($line);
+
+ }
+
+ /**
+ * Finds the type of the passed value, returns the value as the new type.
+ * @access private
+ * @param string $value
+ * @return mixed
+ */
+ private function _toType($value) {
+ if ($value === '') return "";
+
+ if ($this->setting_empty_hash_as_object && $value === '{}') {
+ return new stdClass();
+ }
+
+ $first_character = $value[0];
+ $last_character = substr($value, -1, 1);
+
+ $is_quoted = false;
+ do {
+ if (!$value) break;
+ if ($first_character != '"' && $first_character != "'") break;
+ if ($last_character != '"' && $last_character != "'") break;
+ $is_quoted = true;
+ } while (0);
+
+ if ($is_quoted) {
+ $value = str_replace('\n', "\n", $value);
+ if ($first_character == "'")
+ return strtr(substr ($value, 1, -1), array ('\'\'' => '\'', '\\\''=> '\''));
+ return strtr(substr ($value, 1, -1), array ('\\"' => '"', '\\\''=> '\''));
+ }
+
+ if (strpos($value, ' #') !== false && !$is_quoted)
+ $value = preg_replace('/\s+#(.+)$/','',$value);
+
+ if ($first_character == '[' && $last_character == ']') {
+ // Take out strings sequences and mappings
+ $innerValue = trim(substr ($value, 1, -1));
+ if ($innerValue === '') return array();
+ $explode = $this->_inlineEscape($innerValue);
+ // Propagate value array
+ $value = array();
+ foreach ($explode as $v) {
+ $value[] = $this->_toType($v);
+ }
+ return $value;
+ }
+
+ if (strpos($value,': ')!==false && $first_character != '{') {
+ $array = explode(': ',$value);
+ $key = trim($array[0]);
+ array_shift($array);
+ $value = trim(implode(': ',$array));
+ $value = $this->_toType($value);
+ return array($key => $value);
+ }
+
+ if ($first_character == '{' && $last_character == '}') {
+ $innerValue = trim(substr ($value, 1, -1));
+ if ($innerValue === '') return array();
+ // Inline Mapping
+ // Take out strings sequences and mappings
+ $explode = $this->_inlineEscape($innerValue);
+ // Propagate value array
+ $array = array();
+ foreach ($explode as $v) {
+ $SubArr = $this->_toType($v);
+ if (empty($SubArr)) continue;
+ if (is_array ($SubArr)) {
+ $array[key($SubArr)] = $SubArr[key($SubArr)]; continue;
+ }
+ $array[] = $SubArr;
+ }
+ return $array;
+ }
+
+ if ($value == 'null' || $value == 'NULL' || $value == 'Null' || $value == '' || $value == '~') {
+ return null;
+ }
+
+ if ( is_numeric($value) && preg_match ('/^(-|)[1-9]+[0-9]*$/', $value) ){
+ $intvalue = (int)$value;
+ if ($intvalue != PHP_INT_MAX && $intvalue != ~PHP_INT_MAX)
+ $value = $intvalue;
+ return $value;
+ }
+
+ if ( is_string($value) && preg_match('/^0[xX][0-9a-fA-F]+$/', $value)) {
+ // Hexadecimal value.
+ return hexdec($value);
+ }
+
+ $this->coerceValue($value);
+
+ if (is_numeric($value)) {
+ if ($value === '0') return 0;
+ if (rtrim ($value, 0) === $value)
+ $value = (float)$value;
+ return $value;
+ }
+
+ return $value;
+ }
+
+ /**
+ * Used in inlines to check for more inlines or quoted strings
+ * @access private
+ * @return array
+ */
+ private function _inlineEscape($inline) {
+ // There's gotta be a cleaner way to do this...
+ // While pure sequences seem to be nesting just fine,
+ // pure mappings and mappings with sequences inside can't go very
+ // deep. This needs to be fixed.
+
+ $seqs = array();
+ $maps = array();
+ $saved_strings = array();
+ $saved_empties = array();
+
+ // Check for empty strings
+ $regex = '/("")|(\'\')/';
+ if (preg_match_all($regex,$inline,$strings)) {
+ $saved_empties = $strings[0];
+ $inline = preg_replace($regex,'YAMLEmpty',$inline);
+ }
+ unset($regex);
+
+ // Check for strings
+ $regex = '/(?:(")|(?:\'))((?(1)[^"]+|[^\']+))(?(1)"|\')/';
+ if (preg_match_all($regex,$inline,$strings)) {
+ $saved_strings = $strings[0];
+ $inline = preg_replace($regex,'YAMLString',$inline);
+ }
+ unset($regex);
+
+ // echo $inline;
+
+ $i = 0;
+ do {
+
+ // Check for sequences
+ while (preg_match('/\[([^{}\[\]]+)\]/U',$inline,$matchseqs)) {
+ $seqs[] = $matchseqs[0];
+ $inline = preg_replace('/\[([^{}\[\]]+)\]/U', ('YAMLSeq' . (count($seqs) - 1) . 's'), $inline, 1);
+ }
+
+ // Check for mappings
+ while (preg_match('/{([^\[\]{}]+)}/U',$inline,$matchmaps)) {
+ $maps[] = $matchmaps[0];
+ $inline = preg_replace('/{([^\[\]{}]+)}/U', ('YAMLMap' . (count($maps) - 1) . 's'), $inline, 1);
+ }
+
+ if ($i++ >= 10) break;
+
+ } while (strpos ($inline, '[') !== false || strpos ($inline, '{') !== false);
+
+ $explode = explode(',',$inline);
+ $explode = array_map('trim', $explode);
+ $stringi = 0; $i = 0;
+
+ while (1) {
+
+ // Re-add the sequences
+ if (!empty($seqs)) {
+ foreach ($explode as $key => $value) {
+ if (strpos($value,'YAMLSeq') !== false) {
+ foreach ($seqs as $seqk => $seq) {
+ $explode[$key] = str_replace(('YAMLSeq'.$seqk.'s'),$seq,$value);
+ $value = $explode[$key];
+ }
+ }
+ }
+ }
+
+ // Re-add the mappings
+ if (!empty($maps)) {
+ foreach ($explode as $key => $value) {
+ if (strpos($value,'YAMLMap') !== false) {
+ foreach ($maps as $mapk => $map) {
+ $explode[$key] = str_replace(('YAMLMap'.$mapk.'s'), $map, $value);
+ $value = $explode[$key];
+ }
+ }
+ }
+ }
+
+
+ // Re-add the strings
+ if (!empty($saved_strings)) {
+ foreach ($explode as $key => $value) {
+ while (strpos($value,'YAMLString') !== false) {
+ $explode[$key] = preg_replace('/YAMLString/',$saved_strings[$stringi],$value, 1);
+ unset($saved_strings[$stringi]);
+ ++$stringi;
+ $value = $explode[$key];
+ }
+ }
+ }
+
+
+ // Re-add the empties
+ if (!empty($saved_empties)) {
+ foreach ($explode as $key => $value) {
+ while (strpos($value,'YAMLEmpty') !== false) {
+ $explode[$key] = preg_replace('/YAMLEmpty/', '', $value, 1);
+ $value = $explode[$key];
+ }
+ }
+ }
+
+ $finished = true;
+ foreach ($explode as $key => $value) {
+ if (strpos($value,'YAMLSeq') !== false) {
+ $finished = false; break;
+ }
+ if (strpos($value,'YAMLMap') !== false) {
+ $finished = false; break;
+ }
+ if (strpos($value,'YAMLString') !== false) {
+ $finished = false; break;
+ }
+ if (strpos($value,'YAMLEmpty') !== false) {
+ $finished = false; break;
+ }
+ }
+ if ($finished) break;
+
+ $i++;
+ if ($i > 10)
+ break; // Prevent infinite loops.
+ }
+
+
+ return $explode;
+ }
+
+ private function literalBlockContinues ($line, $lineIndent) {
+ if (!trim($line)) return true;
+ if (strlen($line) - strlen(ltrim($line)) > $lineIndent) return true;
+ return false;
+ }
+
+ private function referenceContentsByAlias ($alias) {
+ do {
+ if (!isset($this->SavedGroups[$alias])) { echo "Bad group name: $alias."; break; }
+ $groupPath = $this->SavedGroups[$alias];
+ $value = $this->result;
+ foreach ($groupPath as $k) {
+ $value = $value[$k];
+ }
+ } while (false);
+ return $value;
+ }
+
+ private function addArrayInline ($array, $indent) {
+ $CommonGroupPath = $this->path;
+ if (empty ($array)) return false;
+
+ foreach ($array as $k => $_) {
+ $this->addArray(array($k => $_), $indent);
+ $this->path = $CommonGroupPath;
+ }
+ return true;
+ }
+
+ private function addArray ($incoming_data, $incoming_indent) {
+
+ // print_r ($incoming_data);
+
+ if (count ($incoming_data) > 1)
+ return $this->addArrayInline ($incoming_data, $incoming_indent);
+
+ $key = key ($incoming_data);
+ $value = isset($incoming_data[$key]) ? $incoming_data[$key] : null;
+ if ($key === '__!YAMLZero') $key = '0';
+
+ if ($incoming_indent == 0 && !$this->_containsGroupAlias && !$this->_containsGroupAnchor) { // Shortcut for root-level values.
+ if ($key || $key === '' || $key === '0') {
+ $this->result[$key] = $value;
+ } else {
+ $this->result[] = $value; end ($this->result); $key = key ($this->result);
+ }
+ $this->path[$incoming_indent] = $key;
+ return;
+ }
+
+
+
+ $history = array();
+ // Unfolding inner array tree.
+ $history[] = $_arr = $this->result;
+ foreach ($this->path as $k) {
+ $history[] = $_arr = $_arr[$k];
+ }
+
+ if ($this->_containsGroupAlias) {
+ $value = $this->referenceContentsByAlias($this->_containsGroupAlias);
+ $this->_containsGroupAlias = false;
+ }
+
+
+ // Adding string or numeric key to the innermost level or $this->arr.
+ if (is_string($key) && $key == '<<') {
+ if (!is_array ($_arr)) { $_arr = array (); }
+
+ $_arr = array_merge ($_arr, $value);
+ } else if ($key || $key === '' || $key === '0') {
+ if (!is_array ($_arr))
+ $_arr = array ($key=>$value);
+ else
+ $_arr[$key] = $value;
+ } else {
+ if (!is_array ($_arr)) { $_arr = array ($value); $key = 0; }
+ else { $_arr[] = $value; end ($_arr); $key = key ($_arr); }
+ }
+
+ $reverse_path = array_reverse($this->path);
+ $reverse_history = array_reverse ($history);
+ $reverse_history[0] = $_arr;
+ $cnt = count($reverse_history) - 1;
+ for ($i = 0; $i < $cnt; $i++) {
+ $reverse_history[$i+1][$reverse_path[$i]] = $reverse_history[$i];
+ }
+ $this->result = $reverse_history[$cnt];
+
+ $this->path[$incoming_indent] = $key;
+
+ if ($this->_containsGroupAnchor) {
+ $this->SavedGroups[$this->_containsGroupAnchor] = $this->path;
+ if (is_array ($value)) {
+ $k = key ($value);
+ if (!is_int ($k)) {
+ $this->SavedGroups[$this->_containsGroupAnchor][$incoming_indent + 2] = $k;
+ }
+ }
+ $this->_containsGroupAnchor = false;
+ }
+
+ }
+
+ private static function startsLiteralBlock ($line) {
+ $lastChar = substr (trim($line), -1);
+ if ($lastChar != '>' && $lastChar != '|') return false;
+ if ($lastChar == '|') return $lastChar;
+ // HTML tags should not be counted as literal blocks.
+ if (preg_match ('#<.*?>$#', $line)) return false;
+ return $lastChar;
+ }
+
+ private static function greedilyNeedNextLine($line) {
+ $line = trim ($line);
+ if (!strlen($line)) return false;
+ if (substr ($line, -1, 1) == ']') return false;
+ if ($line[0] == '[') return true;
+ if (preg_match ('#^[^:]+?:\s*\[#', $line)) return true;
+ return false;
+ }
+
+ private function addLiteralLine ($literalBlock, $line, $literalBlockStyle, $indent = -1) {
+ $line = self::stripIndent($line, $indent);
+ if ($literalBlockStyle !== '|') {
+ $line = self::stripIndent($line);
+ }
+ $line = rtrim ($line, "\r\n\t ") . "\n";
+ if ($literalBlockStyle == '|') {
+ return $literalBlock . $line;
+ }
+ if (strlen($line) == 0)
+ return rtrim($literalBlock, ' ') . "\n";
+ if ($line == "\n" && $literalBlockStyle == '>') {
+ return rtrim ($literalBlock, " \t") . "\n";
+ }
+ if ($line != "\n")
+ $line = trim ($line, "\r\n ") . " ";
+ return $literalBlock . $line;
+ }
+
+ function revertLiteralPlaceHolder ($lineArray, $literalBlock) {
+ foreach ($lineArray as $k => $_) {
+ if (is_array($_))
+ $lineArray[$k] = $this->revertLiteralPlaceHolder ($_, $literalBlock);
+ else if (substr($_, -1 * strlen ($this->LiteralPlaceHolder)) == $this->LiteralPlaceHolder)
+ $lineArray[$k] = rtrim ($literalBlock, " \r\n");
+ }
+ return $lineArray;
+ }
+
+ private static function stripIndent ($line, $indent = -1) {
+ if ($indent == -1) $indent = strlen($line) - strlen(ltrim($line));
+ return substr ($line, $indent);
+ }
+
+ private function getParentPathByIndent ($indent) {
+ if ($indent == 0) return array();
+ $linePath = $this->path;
+ do {
+ end($linePath); $lastIndentInParentPath = key($linePath);
+ if ($indent <= $lastIndentInParentPath) array_pop ($linePath);
+ } while ($indent <= $lastIndentInParentPath);
+ return $linePath;
+ }
+
+
+ private function clearBiggerPathValues ($indent) {
+
+
+ if ($indent == 0) $this->path = array();
+ if (empty ($this->path)) return true;
+
+ foreach ($this->path as $k => $_) {
+ if ($k > $indent) unset ($this->path[$k]);
+ }
+
+ return true;
+ }
+
+
+ private static function isComment ($line) {
+ if (!$line) return false;
+ if ($line[0] == '#') return true;
+ if (trim($line, " \r\n\t") == '---') return true;
+ return false;
+ }
+
+ private static function isEmpty ($line) {
+ return (trim ($line) === '');
+ }
+
+
+ private function isArrayElement ($line) {
+ if (!$line || !is_scalar($line)) return false;
+ if (substr($line, 0, 2) != '- ') return false;
+ if (strlen ($line) > 3)
+ if (substr($line,0,3) == '---') return false;
+
+ return true;
+ }
+
+ private function isHashElement ($line) {
+ return strpos($line, ':');
+ }
+
+ private function isLiteral ($line) {
+ if ($this->isArrayElement($line)) return false;
+ if ($this->isHashElement($line)) return false;
+ return true;
+ }
+
+
+ private static function unquote ($value) {
+ if (!$value) return $value;
+ if (!is_string($value)) return $value;
+ if ($value[0] == '\'') return trim ($value, '\'');
+ if ($value[0] == '"') return trim ($value, '"');
+ return $value;
+ }
+
+ private function startsMappedSequence ($line) {
+ return (substr($line, 0, 2) == '- ' && substr ($line, -1, 1) == ':');
+ }
+
+ private function returnMappedSequence ($line) {
+ $array = array();
+ $key = self::unquote(trim(substr($line,1,-1)));
+ $array[$key] = array();
+ $this->delayedPath = array(strpos ($line, $key) + $this->indent => $key);
+ return array($array);
+ }
+
+ private function checkKeysInValue($value) {
+ if (strchr('[{"\'', $value[0]) === false) {
+ if (strchr($value, ': ') !== false) {
+ throw new Exception('Too many keys: '.$value);
+ }
+ }
+ }
+
+ private function returnMappedValue ($line) {
+ $this->checkKeysInValue($line);
+ $array = array();
+ $key = self::unquote (trim(substr($line,0,-1)));
+ $array[$key] = '';
+ return $array;
+ }
+
+ private function startsMappedValue ($line) {
+ return (substr ($line, -1, 1) == ':');
+ }
+
+ private function isPlainArray ($line) {
+ return ($line[0] == '[' && substr ($line, -1, 1) == ']');
+ }
+
+ private function returnPlainArray ($line) {
+ return $this->_toType($line);
+ }
+
+ private function returnKeyValuePair ($line) {
+ $array = array();
+ $key = '';
+ if (strpos ($line, ': ')) {
+ // It's a key/value pair most likely
+ // If the key is in double quotes pull it out
+ if (($line[0] == '"' || $line[0] == "'") && preg_match('/^(["\'](.*)["\'](\s)*:)/',$line,$matches)) {
+ $value = trim(str_replace($matches[1],'',$line));
+ $key = $matches[2];
+ } else {
+ // Do some guesswork as to the key and the value
+ $explode = explode(': ', $line);
+ $key = trim(array_shift($explode));
+ $value = trim(implode(': ', $explode));
+ $this->checkKeysInValue($value);
+ }
+ // Set the type of the value. Int, string, etc
+ $value = $this->_toType($value);
+
+ if ($key === '0') $key = '__!YAMLZero';
+ $array[$key] = $value;
+ } else {
+ $array = array ($line);
+ }
+ return $array;
+
+ }
+
+
+ private function returnArrayElement ($line) {
+ if (strlen($line) <= 1) return array(array()); // Weird %)
+ $array = array();
+ $value = trim(substr($line,1));
+ $value = $this->_toType($value);
+ if ($this->isArrayElement($value)) {
+ $value = $this->returnArrayElement($value);
+ }
+ $array[] = $value;
+ return $array;
+ }
+
+
+ private function nodeContainsGroup ($line) {
+ $symbolsForReference = 'A-z0-9_\-';
+ if (strpos($line, '&') === false && strpos($line, '*') === false) return false; // Please die fast ;-)
+ if ($line[0] == '&' && preg_match('/^(&['.$symbolsForReference.']+)/', $line, $matches)) return $matches[1];
+ if ($line[0] == '*' && preg_match('/^(\*['.$symbolsForReference.']+)/', $line, $matches)) return $matches[1];
+ if (preg_match('/(&['.$symbolsForReference.']+)$/', $line, $matches)) return $matches[1];
+ if (preg_match('/(\*['.$symbolsForReference.']+$)/', $line, $matches)) return $matches[1];
+ if (preg_match ('#^\s*<<\s*:\s*(\*[^\s]+).*$#', $line, $matches)) return $matches[1];
+ return false;
+
+ }
+
+ private function addGroup ($line, $group) {
+ if ($group[0] == '&') $this->_containsGroupAnchor = substr ($group, 1);
+ if ($group[0] == '*') $this->_containsGroupAlias = substr ($group, 1);
+ //print_r ($this->path);
+ }
+
+ private function stripGroup ($line, $group) {
+ $line = trim(str_replace($group, '', $line));
+ return $line;
+ }
+}
+}
+
+// Enable use of Spyc from command line
+// The syntax is the following: php Spyc.php spyc.yaml
+
+do {
+ if (PHP_SAPI != 'cli') break;
+ if (empty ($_SERVER['argc']) || $_SERVER['argc'] < 2) break;
+ if (empty ($_SERVER['PHP_SELF']) || FALSE === strpos ($_SERVER['PHP_SELF'], 'Spyc.php') ) break;
+ $file = $argv[1];
+ echo json_encode (spyc_load_file ($file));
+} while (0);
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/composer.json b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/composer.json
new file mode 100644
index 0000000..e5ab776
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/composer.json
@@ -0,0 +1,30 @@
+{
+ "name": "mustangostang/spyc",
+ "description": "A simple YAML loader/dumper class for PHP",
+ "type": "library",
+ "keywords": [
+ "spyc",
+ "yaml",
+ "yml"
+ ],
+ "homepage": "https://github.com/mustangostang/spyc/",
+ "authors" : [{
+ "name": "mustangostang",
+ "email": "vlad.andersen@gmail.com"
+ }],
+ "license": "MIT",
+ "require": {
+ "php": ">=5.3.1"
+ },
+ "autoload": {
+ "files": [ "Spyc.php" ]
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.3.*@dev"
+ },
+ "extra": {
+ "branch-alias": {
+ "dev-master": "0.5.x-dev"
+ }
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/examples/yaml-dump.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/examples/yaml-dump.php
new file mode 100644
index 0000000..9d2160a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/examples/yaml-dump.php
@@ -0,0 +1,25 @@
+<?php
+
+#
+# S P Y C
+# a simple php yaml class
+#
+# Feel free to dump an array to YAML, and then to load that YAML back into an
+# array. This is a good way to test the limitations of the parser and maybe
+# learn some basic YAML.
+#
+
+include('../Spyc.php');
+
+$array[] = 'Sequence item';
+$array['The Key'] = 'Mapped value';
+$array[] = array('A sequence','of a sequence');
+$array[] = array('first' => 'A sequence','second' => 'of mapped values');
+$array['Mapped'] = array('A sequence','which is mapped');
+$array['A Note'] = 'What if your text is too long?';
+$array['Another Note'] = 'If that is the case, the dumper will probably fold your text by using a block. Kinda like this.';
+$array['The trick?'] = 'The trick is that we overrode the default indent, 2, to 4 and the default wordwrap, 40, to 60.';
+$array['Old Dog'] = "And if you want\n to preserve line breaks, \ngo ahead!";
+$array['key:withcolon'] = "Should support this to";
+
+$yaml = Spyc::YAMLDump($array,4,60);
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/examples/yaml-load.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/examples/yaml-load.php
new file mode 100644
index 0000000..9e457e1
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/examples/yaml-load.php
@@ -0,0 +1,21 @@
+<?php
+
+#
+# S P Y C
+# a simple php yaml class
+#
+# license: [MIT License, http://www.opensource.org/licenses/mit-license.php]
+#
+
+include('../Spyc.php');
+
+$array = Spyc::YAMLLoad('../spyc.yaml');
+
+echo '<pre><a href="spyc.yaml">spyc.yaml</a> loaded into PHP:<br/>';
+print_r($array);
+echo '</pre>';
+
+
+echo '<pre>YAML Data dumped back:<br/>';
+echo Spyc::YAMLDump($array);
+echo '</pre>';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/php4/5to4.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/php4/5to4.php
new file mode 100644
index 0000000..5a48694
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/php4/5to4.php
@@ -0,0 +1,17 @@
+<?php
+
+php5to4 ("../spyc.php", 'spyc-latest.php4');
+
+function php5to4 ($src, $dest) {
+ $code = file_get_contents ($src);
+ $code = preg_replace ('#(public|private|protected)\s+\$#i', 'var \$', $code);
+ $code = preg_replace ('#(public|private|protected)\s+static\s+\$#i', 'var \$', $code);
+ $code = preg_replace ('#(public|private|protected)\s+function#i', 'function', $code);
+ $code = preg_replace ('#(public|private|protected)\s+static\s+function#i', 'function', $code);
+ $code = preg_replace ('#throw new Exception\\(([^)]*)\\)#i', 'trigger_error($1,E_USER_ERROR)', $code);
+ $code = str_replace ('self::', '$this->', $code);
+ $f = fopen ($dest, 'w');
+ fwrite($f, $code);
+ fclose ($f);
+ print "Written to $dest.\n";
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/php4/spyc.php4 b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/php4/spyc.php4
new file mode 100644
index 0000000..73f08cc
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/php4/spyc.php4
@@ -0,0 +1,1023 @@
+<?php
+/**
+ * Spyc -- A Simple PHP YAML Class
+ * @version 0.4.5
+ * @author Vlad Andersen <vlad.andersen@gmail.com>
+ * @author Chris Wanstrath <chris@ozmm.org>
+ * @link http://code.google.com/p/spyc/
+ * @copyright Copyright 2005-2006 Chris Wanstrath, 2006-2009 Vlad Andersen
+ * @license http://www.opensource.org/licenses/mit-license.php MIT License
+ * @package Spyc
+ */
+
+if (!function_exists('spyc_load')) {
+ /**
+ * Parses YAML to array.
+ * @param string $string YAML string.
+ * @return array
+ */
+ function spyc_load ($string) {
+ return Spyc::YAMLLoadString($string);
+ }
+}
+
+if (!function_exists('spyc_load_file')) {
+ /**
+ * Parses YAML to array.
+ * @param string $file Path to YAML file.
+ * @return array
+ */
+ function spyc_load_file ($file) {
+ return Spyc::YAMLLoad($file);
+ }
+}
+
+/**
+ * The Simple PHP YAML Class.
+ *
+ * This class can be used to read a YAML file and convert its contents
+ * into a PHP array. It currently supports a very limited subsection of
+ * the YAML spec.
+ *
+ * Usage:
+ * <code>
+ * $Spyc = new Spyc;
+ * $array = $Spyc->load($file);
+ * </code>
+ * or:
+ * <code>
+ * $array = Spyc::YAMLLoad($file);
+ * </code>
+ * or:
+ * <code>
+ * $array = spyc_load_file($file);
+ * </code>
+ * @package Spyc
+ */
+class Spyc {
+
+ // SETTINGS
+
+ /**
+ * Setting this to true will force YAMLDump to enclose any string value in
+ * quotes. False by default.
+ *
+ * @var bool
+ */
+ var $setting_dump_force_quotes = false;
+
+ /**
+ * Setting this to true will forse YAMLLoad to use syck_load function when
+ * possible. False by default.
+ * @var bool
+ */
+ var $setting_use_syck_is_possible = false;
+
+
+
+ /**#@+
+ * @access private
+ * @var mixed
+ */
+ var $_dumpIndent;
+ var $_dumpWordWrap;
+ var $_containsGroupAnchor = false;
+ var $_containsGroupAlias = false;
+ var $path;
+ var $result;
+ var $LiteralPlaceHolder = '___YAML_Literal_Block___';
+ var $SavedGroups = array();
+ var $indent;
+ /**
+ * Path modifier that should be applied after adding current element.
+ * @var array
+ */
+ var $delayedPath = array();
+
+ /**#@+
+ * @access public
+ * @var mixed
+ */
+ var $_nodeId;
+
+/**
+ * Load a valid YAML string to Spyc.
+ * @param string $input
+ * @return array
+ */
+ function load ($input) {
+ return $this->__loadString($input);
+ }
+
+ /**
+ * Load a valid YAML file to Spyc.
+ * @param string $file
+ * @return array
+ */
+ function loadFile ($file) {
+ return $this->__load($file);
+ }
+
+ /**
+ * Load YAML into a PHP array statically
+ *
+ * The load method, when supplied with a YAML stream (string or file),
+ * will do its best to convert YAML in a file into a PHP array. Pretty
+ * simple.
+ * Usage:
+ * <code>
+ * $array = Spyc::YAMLLoad('lucky.yaml');
+ * print_r($array);
+ * </code>
+ * @access public
+ * @return array
+ * @param string $input Path of YAML file or string containing YAML
+ */
+ function YAMLLoad($input) {
+ $Spyc = new Spyc;
+ return $Spyc->__load($input);
+ }
+
+ /**
+ * Load a string of YAML into a PHP array statically
+ *
+ * The load method, when supplied with a YAML string, will do its best
+ * to convert YAML in a string into a PHP array. Pretty simple.
+ *
+ * Note: use this function if you don't want files from the file system
+ * loaded and processed as YAML. This is of interest to people concerned
+ * about security whose input is from a string.
+ *
+ * Usage:
+ * <code>
+ * $array = Spyc::YAMLLoadString("---\n0: hello world\n");
+ * print_r($array);
+ * </code>
+ * @access public
+ * @return array
+ * @param string $input String containing YAML
+ */
+ function YAMLLoadString($input) {
+ $Spyc = new Spyc;
+ return $Spyc->__loadString($input);
+ }
+
+ /**
+ * Dump YAML from PHP array statically
+ *
+ * The dump method, when supplied with an array, will do its best
+ * to convert the array into friendly YAML. Pretty simple. Feel free to
+ * save the returned string as nothing.yaml and pass it around.
+ *
+ * Oh, and you can decide how big the indent is and what the wordwrap
+ * for folding is. Pretty cool -- just pass in 'false' for either if
+ * you want to use the default.
+ *
+ * Indent's default is 2 spaces, wordwrap's default is 40 characters. And
+ * you can turn off wordwrap by passing in 0.
+ *
+ * @access public
+ * @return string
+ * @param array $array PHP array
+ * @param int $indent Pass in false to use the default, which is 2
+ * @param int $wordwrap Pass in 0 for no wordwrap, false for default (40)
+ */
+ function YAMLDump($array,$indent = false,$wordwrap = false) {
+ $spyc = new Spyc;
+ return $spyc->dump($array,$indent,$wordwrap);
+ }
+
+
+ /**
+ * Dump PHP array to YAML
+ *
+ * The dump method, when supplied with an array, will do its best
+ * to convert the array into friendly YAML. Pretty simple. Feel free to
+ * save the returned string as tasteful.yaml and pass it around.
+ *
+ * Oh, and you can decide how big the indent is and what the wordwrap
+ * for folding is. Pretty cool -- just pass in 'false' for either if
+ * you want to use the default.
+ *
+ * Indent's default is 2 spaces, wordwrap's default is 40 characters. And
+ * you can turn off wordwrap by passing in 0.
+ *
+ * @access public
+ * @return string
+ * @param array $array PHP array
+ * @param int $indent Pass in false to use the default, which is 2
+ * @param int $wordwrap Pass in 0 for no wordwrap, false for default (40)
+ */
+ function dump($array,$indent = false,$wordwrap = false) {
+ // Dumps to some very clean YAML. We'll have to add some more features
+ // and options soon. And better support for folding.
+
+ // New features and options.
+ if ($indent === false or !is_numeric($indent)) {
+ $this->_dumpIndent = 2;
+ } else {
+ $this->_dumpIndent = $indent;
+ }
+
+ if ($wordwrap === false or !is_numeric($wordwrap)) {
+ $this->_dumpWordWrap = 40;
+ } else {
+ $this->_dumpWordWrap = $wordwrap;
+ }
+
+ // New YAML document
+ $string = "---\n";
+
+ // Start at the base of the array and move through it.
+ if ($array) {
+ $array = (array)$array;
+ $first_key = key($array);
+
+ $previous_key = -1;
+ foreach ($array as $key => $value) {
+ $string .= $this->_yamlize($key,$value,0,$previous_key, $first_key);
+ $previous_key = $key;
+ }
+ }
+ return $string;
+ }
+
+ /**
+ * Attempts to convert a key / value array item to YAML
+ * @access private
+ * @return string
+ * @param $key The name of the key
+ * @param $value The value of the item
+ * @param $indent The indent of the current node
+ */
+ function _yamlize($key,$value,$indent, $previous_key = -1, $first_key = 0) {
+ if (is_array($value)) {
+ if (empty ($value))
+ return $this->_dumpNode($key, array(), $indent, $previous_key, $first_key);
+ // It has children. What to do?
+ // Make it the right kind of item
+ $string = $this->_dumpNode($key, NULL, $indent, $previous_key, $first_key);
+ // Add the indent
+ $indent += $this->_dumpIndent;
+ // Yamlize the array
+ $string .= $this->_yamlizeArray($value,$indent);
+ } elseif (!is_array($value)) {
+ // It doesn't have children. Yip.
+ $string = $this->_dumpNode($key, $value, $indent, $previous_key, $first_key);
+ }
+ return $string;
+ }
+
+ /**
+ * Attempts to convert an array to YAML
+ * @access private
+ * @return string
+ * @param $array The array you want to convert
+ * @param $indent The indent of the current level
+ */
+ function _yamlizeArray($array,$indent) {
+ if (is_array($array)) {
+ $string = '';
+ $previous_key = -1;
+ $first_key = key($array);
+ foreach ($array as $key => $value) {
+ $string .= $this->_yamlize($key, $value, $indent, $previous_key, $first_key);
+ $previous_key = $key;
+ }
+ return $string;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Returns YAML from a key and a value
+ * @access private
+ * @return string
+ * @param $key The name of the key
+ * @param $value The value of the item
+ * @param $indent The indent of the current node
+ */
+ function _dumpNode($key, $value, $indent, $previous_key = -1, $first_key = 0) {
+ // do some folding here, for blocks
+ if (is_string ($value) && ((strpos($value,"\n") !== false || strpos($value,": ") !== false || strpos($value,"- ") !== false ||
+ strpos($value,"*") !== false || strpos($value,"#") !== false || strpos($value,"<") !== false || strpos($value,">") !== false ||
+ strpos($value,"[") !== false || strpos($value,"]") !== false || strpos($value,"{") !== false || strpos($value,"}") !== false) || substr ($value, -1, 1) == ':')) {
+ $value = $this->_doLiteralBlock($value,$indent);
+ } else {
+ $value = $this->_doFolding($value,$indent);
+ if (is_bool($value)) {
+ $value = ($value) ? "true" : "false";
+ }
+ }
+
+ if ($value === array()) $value = '[ ]';
+
+ $spaces = str_repeat(' ',$indent);
+
+ if (is_int($key) && $key - 1 == $previous_key && $first_key===0) {
+ // It's a sequence
+ $string = $spaces.'- '.$value."\n";
+ } else {
+ if ($first_key===0) throw new Exception('Keys are all screwy. The first one was zero, now it\'s "'. $key .'"');
+ // It's mapped
+ if (strpos($key, ":") !== false) { $key = '"' . $key . '"'; }
+ $string = $spaces.$key.': '.$value."\n";
+ }
+ return $string;
+ }
+
+ /**
+ * Creates a literal block for dumping
+ * @access private
+ * @return string
+ * @param $value
+ * @param $indent int The value of the indent
+ */
+ function _doLiteralBlock($value,$indent) {
+ if (strpos($value, "\n") === false && strpos($value, "'") === false) {
+ return sprintf ("'%s'", $value);
+ }
+ if (strpos($value, "\n") === false && strpos($value, '"') === false) {
+ return sprintf ('"%s"', $value);
+ }
+ $exploded = explode("\n",$value);
+ $newValue = '|';
+ $indent += $this->_dumpIndent;
+ $spaces = str_repeat(' ',$indent);
+ foreach ($exploded as $line) {
+ $newValue .= "\n" . $spaces . trim($line);
+ }
+ return $newValue;
+ }
+
+ /**
+ * Folds a string of text, if necessary
+ * @access private
+ * @return string
+ * @param $value The string you wish to fold
+ */
+ function _doFolding($value,$indent) {
+ // Don't do anything if wordwrap is set to 0
+
+ if ($this->_dumpWordWrap !== 0 && is_string ($value) && strlen($value) > $this->_dumpWordWrap) {
+ $indent += $this->_dumpIndent;
+ $indent = str_repeat(' ',$indent);
+ $wrapped = wordwrap($value,$this->_dumpWordWrap,"\n$indent");
+ $value = ">\n".$indent.$wrapped;
+ } else {
+ if ($this->setting_dump_force_quotes && is_string ($value))
+ $value = '"' . $value . '"';
+ }
+
+
+ return $value;
+ }
+
+// LOADING FUNCTIONS
+
+ function __load($input) {
+ $Source = $this->loadFromSource($input);
+ return $this->loadWithSource($Source);
+ }
+
+ function __loadString($input) {
+ $Source = $this->loadFromString($input);
+ return $this->loadWithSource($Source);
+ }
+
+ function loadWithSource($Source) {
+ if (empty ($Source)) return array();
+ if ($this->setting_use_syck_is_possible && function_exists ('syck_load')) {
+ $array = syck_load (implode ('', $Source));
+ return is_array($array) ? $array : array();
+ }
+
+ $this->path = array();
+ $this->result = array();
+
+ $cnt = count($Source);
+ for ($i = 0; $i < $cnt; $i++) {
+ $line = $Source[$i];
+
+ $this->indent = strlen($line) - strlen(ltrim($line));
+ $tempPath = $this->getParentPathByIndent($this->indent);
+ $line = $this->stripIndent($line, $this->indent);
+ if ($this->isComment($line)) continue;
+ if ($this->isEmpty($line)) continue;
+ $this->path = $tempPath;
+
+ $literalBlockStyle = $this->startsLiteralBlock($line);
+ if ($literalBlockStyle) {
+ $line = rtrim ($line, $literalBlockStyle . " \n");
+ $literalBlock = '';
+ $line .= $this->LiteralPlaceHolder;
+
+ while (++$i < $cnt && $this->literalBlockContinues($Source[$i], $this->indent)) {
+ $literalBlock = $this->addLiteralLine($literalBlock, $Source[$i], $literalBlockStyle);
+ }
+ $i--;
+ }
+
+ while (++$i < $cnt && $this->greedilyNeedNextLine($line)) {
+ $line = rtrim ($line, " \n\t\r") . ' ' . ltrim ($Source[$i], " \t");
+ }
+ $i--;
+
+
+
+ if (strpos ($line, '#')) {
+ if (strpos ($line, '"') === false && strpos ($line, "'") === false)
+ $line = preg_replace('/\s+#(.+)$/','',$line);
+ }
+
+ $lineArray = $this->_parseLine($line);
+
+ if ($literalBlockStyle)
+ $lineArray = $this->revertLiteralPlaceHolder ($lineArray, $literalBlock);
+
+ $this->addArray($lineArray, $this->indent);
+
+ foreach ($this->delayedPath as $indent => $delayedPath)
+ $this->path[$indent] = $delayedPath;
+
+ $this->delayedPath = array();
+
+ }
+ return $this->result;
+ }
+
+ function loadFromSource ($input) {
+ if (!empty($input) && strpos($input, "\n") === false && file_exists($input))
+ return file($input);
+
+ return $this->loadFromString($input);
+ }
+
+ function loadFromString ($input) {
+ $lines = explode("\n",$input);
+ foreach ($lines as $k => $_) {
+ $lines[$k] = rtrim ($_, "\r");
+ }
+ return $lines;
+ }
+
+ /**
+ * Parses YAML code and returns an array for a node
+ * @access private
+ * @return array
+ * @param string $line A line from the YAML file
+ */
+ function _parseLine($line) {
+ if (!$line) return array();
+ $line = trim($line);
+
+ if (!$line) return array();
+ $array = array();
+
+ $group = $this->nodeContainsGroup($line);
+ if ($group) {
+ $this->addGroup($line, $group);
+ $line = $this->stripGroup ($line, $group);
+ }
+
+ if ($this->startsMappedSequence($line))
+ return $this->returnMappedSequence($line);
+
+ if ($this->startsMappedValue($line))
+ return $this->returnMappedValue($line);
+
+ if ($this->isArrayElement($line))
+ return $this->returnArrayElement($line);
+
+ if ($this->isPlainArray($line))
+ return $this->returnPlainArray($line);
+
+
+ return $this->returnKeyValuePair($line);
+
+ }
+
+ /**
+ * Finds the type of the passed value, returns the value as the new type.
+ * @access private
+ * @param string $value
+ * @return mixed
+ */
+ function _toType($value) {
+ if ($value === '') return null;
+ $first_character = $value[0];
+ $last_character = substr($value, -1, 1);
+
+ $is_quoted = false;
+ do {
+ if (!$value) break;
+ if ($first_character != '"' && $first_character != "'") break;
+ if ($last_character != '"' && $last_character != "'") break;
+ $is_quoted = true;
+ } while (0);
+
+ if ($is_quoted)
+ return strtr(substr ($value, 1, -1), array ('\\"' => '"', '\'\'' => '\'', '\\\'' => '\''));
+
+ if (strpos($value, ' #') !== false)
+ $value = preg_replace('/\s+#(.+)$/','',$value);
+
+ if ($first_character == '[' && $last_character == ']') {
+ // Take out strings sequences and mappings
+ $innerValue = trim(substr ($value, 1, -1));
+ if ($innerValue === '') return array();
+ $explode = $this->_inlineEscape($innerValue);
+ // Propagate value array
+ $value = array();
+ foreach ($explode as $v) {
+ $value[] = $this->_toType($v);
+ }
+ return $value;
+ }
+
+ if (strpos($value,': ')!==false && $first_character != '{') {
+ $array = explode(': ',$value);
+ $key = trim($array[0]);
+ array_shift($array);
+ $value = trim(implode(': ',$array));
+ $value = $this->_toType($value);
+ return array($key => $value);
+ }
+
+ if ($first_character == '{' && $last_character == '}') {
+ $innerValue = trim(substr ($value, 1, -1));
+ if ($innerValue === '') return array();
+ // Inline Mapping
+ // Take out strings sequences and mappings
+ $explode = $this->_inlineEscape($innerValue);
+ // Propagate value array
+ $array = array();
+ foreach ($explode as $v) {
+ $SubArr = $this->_toType($v);
+ if (empty($SubArr)) continue;
+ if (is_array ($SubArr)) {
+ $array[key($SubArr)] = $SubArr[key($SubArr)]; continue;
+ }
+ $array[] = $SubArr;
+ }
+ return $array;
+ }
+
+ if ($value == 'null' || $value == 'NULL' || $value == 'Null' || $value == '' || $value == '~') {
+ return null;
+ }
+
+ if (intval($first_character) > 0 && preg_match ('/^[1-9]+[0-9]*$/', $value)) {
+ $intvalue = (int)$value;
+ if ($intvalue != PHP_INT_MAX)
+ $value = $intvalue;
+ return $value;
+ }
+
+ if (in_array($value,
+ array('true', 'on', '+', 'yes', 'y', 'True', 'TRUE', 'On', 'ON', 'YES', 'Yes', 'Y'))) {
+ return true;
+ }
+
+ if (in_array(strtolower($value),
+ array('false', 'off', '-', 'no', 'n'))) {
+ return false;
+ }
+
+ if (is_numeric($value)) {
+ if ($value === '0') return 0;
+ if (trim ($value, 0) === $value)
+ $value = (float)$value;
+ return $value;
+ }
+
+ return $value;
+ }
+
+ /**
+ * Used in inlines to check for more inlines or quoted strings
+ * @access private
+ * @return array
+ */
+ function _inlineEscape($inline) {
+ // There's gotta be a cleaner way to do this...
+ // While pure sequences seem to be nesting just fine,
+ // pure mappings and mappings with sequences inside can't go very
+ // deep. This needs to be fixed.
+
+ $seqs = array();
+ $maps = array();
+ $saved_strings = array();
+
+ // Check for strings
+ $regex = '/(?:(")|(?:\'))((?(1)[^"]+|[^\']+))(?(1)"|\')/';
+ if (preg_match_all($regex,$inline,$strings)) {
+ $saved_strings = $strings[0];
+ $inline = preg_replace($regex,'YAMLString',$inline);
+ }
+ unset($regex);
+
+ $i = 0;
+ do {
+
+ // Check for sequences
+ while (preg_match('/\[([^{}\[\]]+)\]/U',$inline,$matchseqs)) {
+ $seqs[] = $matchseqs[0];
+ $inline = preg_replace('/\[([^{}\[\]]+)\]/U', ('YAMLSeq' . (count($seqs) - 1) . 's'), $inline, 1);
+ }
+
+ // Check for mappings
+ while (preg_match('/{([^\[\]{}]+)}/U',$inline,$matchmaps)) {
+ $maps[] = $matchmaps[0];
+ $inline = preg_replace('/{([^\[\]{}]+)}/U', ('YAMLMap' . (count($maps) - 1) . 's'), $inline, 1);
+ }
+
+ if ($i++ >= 10) break;
+
+ } while (strpos ($inline, '[') !== false || strpos ($inline, '{') !== false);
+
+ $explode = explode(', ',$inline);
+ $stringi = 0; $i = 0;
+
+ while (1) {
+
+ // Re-add the sequences
+ if (!empty($seqs)) {
+ foreach ($explode as $key => $value) {
+ if (strpos($value,'YAMLSeq') !== false) {
+ foreach ($seqs as $seqk => $seq) {
+ $explode[$key] = str_replace(('YAMLSeq'.$seqk.'s'),$seq,$value);
+ $value = $explode[$key];
+ }
+ }
+ }
+ }
+
+ // Re-add the mappings
+ if (!empty($maps)) {
+ foreach ($explode as $key => $value) {
+ if (strpos($value,'YAMLMap') !== false) {
+ foreach ($maps as $mapk => $map) {
+ $explode[$key] = str_replace(('YAMLMap'.$mapk.'s'), $map, $value);
+ $value = $explode[$key];
+ }
+ }
+ }
+ }
+
+
+ // Re-add the strings
+ if (!empty($saved_strings)) {
+ foreach ($explode as $key => $value) {
+ while (strpos($value,'YAMLString') !== false) {
+ $explode[$key] = preg_replace('/YAMLString/',$saved_strings[$stringi],$value, 1);
+ unset($saved_strings[$stringi]);
+ ++$stringi;
+ $value = $explode[$key];
+ }
+ }
+ }
+
+ $finished = true;
+ foreach ($explode as $key => $value) {
+ if (strpos($value,'YAMLSeq') !== false) {
+ $finished = false; break;
+ }
+ if (strpos($value,'YAMLMap') !== false) {
+ $finished = false; break;
+ }
+ if (strpos($value,'YAMLString') !== false) {
+ $finished = false; break;
+ }
+ }
+ if ($finished) break;
+
+ $i++;
+ if ($i > 10)
+ break; // Prevent infinite loops.
+ }
+
+ return $explode;
+ }
+
+ function literalBlockContinues ($line, $lineIndent) {
+ if (!trim($line)) return true;
+ if (strlen($line) - strlen(ltrim($line)) > $lineIndent) return true;
+ return false;
+ }
+
+ function referenceContentsByAlias ($alias) {
+ do {
+ if (!isset($this->SavedGroups[$alias])) { echo "Bad group name: $alias."; break; }
+ $groupPath = $this->SavedGroups[$alias];
+ $value = $this->result;
+ foreach ($groupPath as $k) {
+ $value = $value[$k];
+ }
+ } while (false);
+ return $value;
+ }
+
+ function addArrayInline ($array, $indent) {
+ $CommonGroupPath = $this->path;
+ if (empty ($array)) return false;
+
+ foreach ($array as $k => $_) {
+ $this->addArray(array($k => $_), $indent);
+ $this->path = $CommonGroupPath;
+ }
+ return true;
+ }
+
+ function addArray ($incoming_data, $incoming_indent) {
+
+ // print_r ($incoming_data);
+
+ if (count ($incoming_data) > 1)
+ return $this->addArrayInline ($incoming_data, $incoming_indent);
+
+ $key = key ($incoming_data);
+ $value = isset($incoming_data[$key]) ? $incoming_data[$key] : null;
+ if ($key === '__!YAMLZero') $key = '0';
+
+ if ($incoming_indent == 0 && !$this->_containsGroupAlias && !$this->_containsGroupAnchor) { // Shortcut for root-level values.
+ if ($key || $key === '' || $key === '0') {
+ $this->result[$key] = $value;
+ } else {
+ $this->result[] = $value; end ($this->result); $key = key ($this->result);
+ }
+ $this->path[$incoming_indent] = $key;
+ return;
+ }
+
+
+
+ $history = array();
+ // Unfolding inner array tree.
+ $history[] = $_arr = $this->result;
+ foreach ($this->path as $k) {
+ $history[] = $_arr = $_arr[$k];
+ }
+
+ if ($this->_containsGroupAlias) {
+ $value = $this->referenceContentsByAlias($this->_containsGroupAlias);
+ $this->_containsGroupAlias = false;
+ }
+
+
+ // Adding string or numeric key to the innermost level or $this->arr.
+ if (is_string($key) && $key == '<<') {
+ if (!is_array ($_arr)) { $_arr = array (); }
+ $_arr = array_merge ($_arr, $value);
+ } else if ($key || $key === '' || $key === '0') {
+ $_arr[$key] = $value;
+ } else {
+ if (!is_array ($_arr)) { $_arr = array ($value); $key = 0; }
+ else { $_arr[] = $value; end ($_arr); $key = key ($_arr); }
+ }
+
+ $reverse_path = array_reverse($this->path);
+ $reverse_history = array_reverse ($history);
+ $reverse_history[0] = $_arr;
+ $cnt = count($reverse_history) - 1;
+ for ($i = 0; $i < $cnt; $i++) {
+ $reverse_history[$i+1][$reverse_path[$i]] = $reverse_history[$i];
+ }
+ $this->result = $reverse_history[$cnt];
+
+ $this->path[$incoming_indent] = $key;
+
+ if ($this->_containsGroupAnchor) {
+ $this->SavedGroups[$this->_containsGroupAnchor] = $this->path;
+ if (is_array ($value)) {
+ $k = key ($value);
+ if (!is_int ($k)) {
+ $this->SavedGroups[$this->_containsGroupAnchor][$incoming_indent + 2] = $k;
+ }
+ }
+ $this->_containsGroupAnchor = false;
+ }
+
+ }
+
+ function startsLiteralBlock ($line) {
+ $lastChar = substr (trim($line), -1);
+ if ($lastChar != '>' && $lastChar != '|') return false;
+ if ($lastChar == '|') return $lastChar;
+ // HTML tags should not be counted as literal blocks.
+ if (preg_match ('#<.*?>$#', $line)) return false;
+ return $lastChar;
+ }
+
+ function greedilyNeedNextLine($line) {
+ $line = trim ($line);
+ if (!strlen($line)) return false;
+ if (substr ($line, -1, 1) == ']') return false;
+ if ($line[0] == '[') return true;
+ if (preg_match ('#^[^:]+?:\s*\[#', $line)) return true;
+ return false;
+ }
+
+ function addLiteralLine ($literalBlock, $line, $literalBlockStyle) {
+ $line = $this->stripIndent($line);
+ $line = rtrim ($line, "\r\n\t ") . "\n";
+ if ($literalBlockStyle == '|') {
+ return $literalBlock . $line;
+ }
+ if (strlen($line) == 0)
+ return rtrim($literalBlock, ' ') . "\n";
+ if ($line == "\n" && $literalBlockStyle == '>') {
+ return rtrim ($literalBlock, " \t") . "\n";
+ }
+ if ($line != "\n")
+ $line = trim ($line, "\r\n ") . " ";
+ return $literalBlock . $line;
+ }
+
+ function revertLiteralPlaceHolder ($lineArray, $literalBlock) {
+ foreach ($lineArray as $k => $_) {
+ if (is_array($_))
+ $lineArray[$k] = $this->revertLiteralPlaceHolder ($_, $literalBlock);
+ else if (substr($_, -1 * strlen ($this->LiteralPlaceHolder)) == $this->LiteralPlaceHolder)
+ $lineArray[$k] = rtrim ($literalBlock, " \r\n");
+ }
+ return $lineArray;
+ }
+
+ function stripIndent ($line, $indent = -1) {
+ if ($indent == -1) $indent = strlen($line) - strlen(ltrim($line));
+ return substr ($line, $indent);
+ }
+
+ function getParentPathByIndent ($indent) {
+ if ($indent == 0) return array();
+ $linePath = $this->path;
+ do {
+ end($linePath); $lastIndentInParentPath = key($linePath);
+ if ($indent <= $lastIndentInParentPath) array_pop ($linePath);
+ } while ($indent <= $lastIndentInParentPath);
+ return $linePath;
+ }
+
+
+ function clearBiggerPathValues ($indent) {
+
+
+ if ($indent == 0) $this->path = array();
+ if (empty ($this->path)) return true;
+
+ foreach ($this->path as $k => $_) {
+ if ($k > $indent) unset ($this->path[$k]);
+ }
+
+ return true;
+ }
+
+
+ function isComment ($line) {
+ if (!$line) return false;
+ if ($line[0] == '#') return true;
+ if (trim($line, " \r\n\t") == '---') return true;
+ return false;
+ }
+
+ function isEmpty ($line) {
+ return (trim ($line) === '');
+ }
+
+
+ function isArrayElement ($line) {
+ if (!$line) return false;
+ if ($line[0] != '-') return false;
+ if (strlen ($line) > 3)
+ if (substr($line,0,3) == '---') return false;
+
+ return true;
+ }
+
+ function isHashElement ($line) {
+ return strpos($line, ':');
+ }
+
+ function isLiteral ($line) {
+ if ($this->isArrayElement($line)) return false;
+ if ($this->isHashElement($line)) return false;
+ return true;
+ }
+
+
+ function unquote ($value) {
+ if (!$value) return $value;
+ if (!is_string($value)) return $value;
+ if ($value[0] == '\'') return trim ($value, '\'');
+ if ($value[0] == '"') return trim ($value, '"');
+ return $value;
+ }
+
+ function startsMappedSequence ($line) {
+ return ($line[0] == '-' && substr ($line, -1, 1) == ':');
+ }
+
+ function returnMappedSequence ($line) {
+ $array = array();
+ $key = $this->unquote(trim(substr($line,1,-1)));
+ $array[$key] = array();
+ $this->delayedPath = array(strpos ($line, $key) + $this->indent => $key);
+ return array($array);
+ }
+
+ function returnMappedValue ($line) {
+ $array = array();
+ $key = $this->unquote (trim(substr($line,0,-1)));
+ $array[$key] = '';
+ return $array;
+ }
+
+ function startsMappedValue ($line) {
+ return (substr ($line, -1, 1) == ':');
+ }
+
+ function isPlainArray ($line) {
+ return ($line[0] == '[' && substr ($line, -1, 1) == ']');
+ }
+
+ function returnPlainArray ($line) {
+ return $this->_toType($line);
+ }
+
+ function returnKeyValuePair ($line) {
+ $array = array();
+ $key = '';
+ if (strpos ($line, ':')) {
+ // It's a key/value pair most likely
+ // If the key is in double quotes pull it out
+ if (($line[0] == '"' || $line[0] == "'") && preg_match('/^(["\'](.*)["\'](\s)*:)/',$line,$matches)) {
+ $value = trim(str_replace($matches[1],'',$line));
+ $key = $matches[2];
+ } else {
+ // Do some guesswork as to the key and the value
+ $explode = explode(':',$line);
+ $key = trim($explode[0]);
+ array_shift($explode);
+ $value = trim(implode(':',$explode));
+ }
+ // Set the type of the value. Int, string, etc
+ $value = $this->_toType($value);
+ if ($key === '0') $key = '__!YAMLZero';
+ $array[$key] = $value;
+ } else {
+ $array = array ($line);
+ }
+ return $array;
+
+ }
+
+
+ function returnArrayElement ($line) {
+ if (strlen($line) <= 1) return array(array()); // Weird %)
+ $array = array();
+ $value = trim(substr($line,1));
+ $value = $this->_toType($value);
+ $array[] = $value;
+ return $array;
+ }
+
+
+ function nodeContainsGroup ($line) {
+ $symbolsForReference = 'A-z0-9_\-';
+ if (strpos($line, '&') === false && strpos($line, '*') === false) return false; // Please die fast ;-)
+ if ($line[0] == '&' && preg_match('/^(&['.$symbolsForReference.']+)/', $line, $matches)) return $matches[1];
+ if ($line[0] == '*' && preg_match('/^(\*['.$symbolsForReference.']+)/', $line, $matches)) return $matches[1];
+ if (preg_match('/(&['.$symbolsForReference.']+)$/', $line, $matches)) return $matches[1];
+ if (preg_match('/(\*['.$symbolsForReference.']+$)/', $line, $matches)) return $matches[1];
+ if (preg_match ('#^\s*<<\s*:\s*(\*[^\s]+).*$#', $line, $matches)) return $matches[1];
+ return false;
+
+ }
+
+ function addGroup ($line, $group) {
+ if ($group[0] == '&') $this->_containsGroupAnchor = substr ($group, 1);
+ if ($group[0] == '*') $this->_containsGroupAlias = substr ($group, 1);
+ //print_r ($this->path);
+ }
+
+ function stripGroup ($line, $group) {
+ $line = trim(str_replace($group, '', $line));
+ return $line;
+ }
+}
+
+// Enable use of Spyc from command line
+// The syntax is the following: php spyc.php spyc.yaml
+
+define ('SPYC_FROM_COMMAND_LINE', false);
+
+do {
+ if (!SPYC_FROM_COMMAND_LINE) break;
+ if (empty ($_SERVER['argc']) || $_SERVER['argc'] < 2) break;
+ if (empty ($_SERVER['PHP_SELF']) || $_SERVER['PHP_SELF'] != 'spyc.php') break;
+ $file = $argv[1];
+ printf ("Spyc loading file: %s\n", $file);
+ print_r (spyc_load_file ($file));
+} while (0);
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/php4/test.php4 b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/php4/test.php4
new file mode 100644
index 0000000..315f501
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/php4/test.php4
@@ -0,0 +1,162 @@
+<?php
+#
+# S P Y C
+# a simple php yaml class
+# v0.3
+#
+# author: [chris wanstrath, chris@ozmm.org]
+# websites: [http://www.yaml.org, http://spyc.sourceforge.net/]
+# license: [MIT License, http://www.opensource.org/licenses/mit-license.php]
+# copyright: (c) 2005-2006 Chris Wanstrath
+#
+# We're gonna load a file into memory and see if we get what we expect.
+# If not, we're gonna complain.
+#
+# Pretty lo-fi. Let's see if we can't get some unit testing going in the next,
+# I dunno, 20 months? Alright. Go team.
+#
+
+error_reporting(E_ALL);
+
+include('spyc.php4');
+
+$yaml = Spyc::YAMLLoad('../spyc.yaml');
+
+// print_r ($yaml);
+
+# Added in .2
+if ($yaml[1040] != "Ooo, a numeric key!")
+ die('Key: 1040 failed');
+
+# Test mappings / types
+if ($yaml['String'] != "Anyone's name, really.")
+ die('Key: String failed');
+
+if ($yaml['Int'] !== 13)
+ die('Key: Int failed');
+
+if ($yaml['True'] !== true)
+ die('Key: True failed');
+
+if ($yaml['False'] !== false)
+ die('Key: False failed');
+
+if ($yaml['Zero'] !== 0)
+ die('Key: Zero failed');
+
+if (isset($yaml['Null']))
+ die('Key: Null failed');
+
+if ($yaml['Float'] !== 5.34)
+ die('Key: Float failed');
+
+
+# Test sequences
+if ($yaml[0] != "PHP Class")
+ die('Sequence 0 failed');
+
+if ($yaml[1] != "Basic YAML Loader")
+ die('Sequence 1 failed');
+
+if ($yaml[2] != "Very Basic YAML Dumper")
+ die('Sequence 2 failed');
+
+# A sequence of a sequence
+if ($yaml[3] != array("YAML is so easy to learn.",
+ "Your config files will never be the same."))
+ die('Sequence 3 failed');
+
+# Sequence of mappings
+if ($yaml[4] != array("cpu" => "1.5ghz", "ram" => "1 gig",
+ "os" => "os x 10.4.1"))
+ die('Sequence 4 failed');
+
+# Mapped sequence
+if ($yaml['domains'] != array("yaml.org", "php.net"))
+ die("Key: 'domains' failed");
+
+# A sequence like this.
+if ($yaml[5] != array("program" => "Adium", "platform" => "OS X",
+ "type" => "Chat Client"))
+ die('Sequence 5 failed');
+
+# A folded block as a mapped value
+if ($yaml['no time'] != "There isn't any time for your tricks!\nDo you understand?")
+ die("Key: 'no time' failed");
+
+# A literal block as a mapped value
+if ($yaml['some time'] != "There is nothing but time\nfor your tricks.")
+ die("Key: 'some time' failed");
+
+# Crazy combinations
+if ($yaml['databases'] != array( array("name" => "spartan", "notes" =>
+ array( "Needs to be backed up",
+ "Needs to be normalized" ),
+ "type" => "mysql" )))
+ die("Key: 'databases' failed");
+
+# You can be a bit tricky
+if ($yaml["if: you'd"] != "like")
+ die("Key: 'if: you\'d' failed");
+
+# Inline sequences
+if ($yaml[6] != array("One", "Two", "Three", "Four"))
+ die("Sequence 6 failed");
+
+# Nested Inline Sequences
+if ($yaml[7] != array("One", array("Two", "And", "Three"), "Four", "Five"))
+ die("Sequence 7 failed");
+
+# Nested Nested Inline Sequences
+if ($yaml[8] != array( "This", array("Is", "Getting", array("Ridiculous", "Guys")),
+ "Seriously", array("Show", "Mercy")))
+ die("Sequence 8 failed");
+
+# Inline mappings
+if ($yaml[9] != array("name" => "chris", "age" => "young", "brand" => "lucky strike"))
+ die("Sequence 9 failed");
+
+# Nested inline mappings
+if ($yaml[10] != array("name" => "mark", "age" => "older than chris",
+ "brand" => array("marlboro", "lucky strike")))
+ die("Sequence 10 failed");
+
+# References -- they're shaky, but functional
+if ($yaml['dynamic languages'] != array('Perl', 'Python', 'PHP', 'Ruby'))
+ die("Key: 'dynamic languages' failed");
+
+if ($yaml['compiled languages'] != array('C/C++', 'Java'))
+ die("Key: 'compiled languages' failed");
+
+if ($yaml['all languages'] != array(
+ array('Perl', 'Python', 'PHP', 'Ruby'),
+ array('C/C++', 'Java')
+ ))
+ die("Key: 'all languages' failed");
+
+# Added in .2.2: Escaped quotes
+if ($yaml[11] != "you know, this shouldn't work. but it does.")
+ die("Sequence 11 failed.");
+
+if ($yaml[12] != "that's my value.")
+ die("Sequence 12 failed.");
+
+if ($yaml[13] != "again, that's my value.")
+ die("Sequence 13 failed.");
+
+if ($yaml[14] != "here's to \"quotes\", boss.")
+ die("Sequence 14 failed.");
+
+if ($yaml[15] != array( 'name' => "Foo, Bar's", 'age' => 20))
+ die("Sequence 15 failed.");
+
+if ($yaml[16] != array( 0 => "a", 1 => array (0 => 1, 1 => 2), 2 => "b"))
+ die("Sequence 16 failed.");
+
+if ($yaml['endloop'] != "Does this line in the end indeed make Spyc go to an infinite loop?")
+ die("[endloop] failed.");
+
+
+print "spyc.yaml parsed correctly\n";
+
+?>
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/phpunit.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/phpunit.xml
new file mode 100644
index 0000000..a6151af
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/phpunit.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit colors="true" bootstrap="vendor/autoload.php">
+ <testsuites>
+ <testsuite name="all">
+ <directory suffix="Test.php">tests/</directory>
+ </testsuite>
+ </testsuites>
+</phpunit>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/spyc.yaml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/spyc.yaml
new file mode 100644
index 0000000..489f28c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/spyc.yaml
@@ -0,0 +1,219 @@
+#
+# S P Y C
+# a simple php yaml class
+#
+# authors: [vlad andersen (vlad.andersen@gmail.com), chris wanstrath (chris@ozmm.org)]
+# websites: [http://www.yaml.org, http://spyc.sourceforge.net/]
+# license: [MIT License, http://www.opensource.org/licenses/mit-license.php]
+# copyright: (c) 2005-2006 Chris Wanstrath, 2006-2014 Vlad Andersen
+#
+# spyc.yaml - A file containing the YAML that Spyc understands.
+
+---
+
+# Mappings - with proper types
+String: Anyone's name, really.
+Int: 13
+BadHex: f0xf3
+Hex: 0xf3
+True: true
+False: false
+Zero: 0
+Null: NULL
+NotNull: 'null'
+NotTrue: 'y'
+NotBoolTrue: 'true'
+NotInt: '5'
+Float: 5.34
+Negative: -90
+SmallFloat: 0.7
+NewLine: \n
+QuotedNewLine: "\n"
+
+# A sequence
+- PHP Class
+- Basic YAML Loader
+- Very Basic YAML Dumper
+
+# A sequence of a sequence
+-
+ - YAML is so easy to learn.
+ - Your config files will never be the same.
+
+# Sequence of mappings
+-
+ cpu: 1.5ghz
+ ram: 1 gig
+ os : os x 10.4.1
+
+# Mapped sequence
+domains:
+ - yaml.org
+ - php.net
+
+# A sequence like this.
+- program: Adium
+ platform: OS X
+ type: Chat Client
+
+# A folded block as a mapped value
+no time: >
+ There isn't any time
+ for your tricks!
+
+ Do you understand?
+
+# A literal block as a mapped value
+some time: |
+ There is nothing but time
+ for your tricks.
+
+# Crazy combinations
+databases:
+ - name: spartan
+ notes:
+ - Needs to be backed up
+ - Needs to be normalized
+ type: mysql
+
+# You can be a bit tricky
+"if: you'd": like
+
+# Inline sequences
+- [One, Two, Three, Four]
+
+# Nested Inline Sequences
+- [One, [Two, And, Three], Four, Five]
+
+# Nested Nested Inline Sequences
+- [This, [Is, Getting, [Ridiculous, Guys]], Seriously, [Show, Mercy]]
+
+# Inline mappings
+- {name: chris, age: young, brand: lucky strike}
+
+# Nested inline mappings
+- {name: mark, age: older than chris, brand: [marlboro, lucky strike]}
+
+# References -- they're shaky, but functional
+dynamic languages: &DLANGS
+ - Perl
+ - Python
+ - PHP
+ - Ruby
+compiled languages: &CLANGS
+ - C/C++
+ - Java
+all languages:
+ - *DLANGS
+ - *CLANGS
+
+# Added in .2.2: Escaped quotes
+- you know, this shouldn't work. but it does.
+- 'that''s my value.'
+- 'again, that\'s my value.'
+- "here's to \"quotes\", boss."
+
+# added in .2.3
+- {name: "Foo, Bar's", age: 20}
+
+# Added in .2.4: bug [ 1418193 ] Quote Values in Nested Arrays
+- [a, ['1', "2"], b]
+
+# Add in .5.2: Quoted new line values.
+- "First line\nSecond line\nThird line"
+
+# Added in .2.4: malformed YAML
+all
+ javascripts: [dom1.js, dom.js]
+
+# Added in .2
+1040: Ooo, a numeric key! # And working comments? Wow! Colons in comments: a menace (0.3).
+
+hash_1: Hash #and a comment
+hash_2: "Hash #and a comment"
+"hash#3": "Hash (#) can appear in key too"
+
+float_test: 1.0
+float_test_with_quotes: '1.0'
+float_inverse_test: 001
+
+a_really_large_number: 115792089237316195423570985008687907853269984665640564039457584007913129639936 # 2^256
+
+int array: [ 1, 2, 3 ]
+
+array on several lines:
+ [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 ]
+
+morelesskey: "<value>"
+
+array_of_zero: [0]
+sophisticated_array_of_zero: {rx: {tx: [0]} }
+
+switches:
+ - { row: 0, col: 0, func: {tx: [0, 1]} }
+
+empty_sequence: [ ]
+empty_hash: { }
+
+special_characters: "[{]]{{]]"
+
+asterisks: "*"
+
+empty_key:
+ :
+ key: value
+
+trailing_colon: "foo:"
+
+multiline_items:
+ - type: SomeItem
+ values: [blah, blah, blah,
+ blah]
+ ints: [2, 54, 12,
+ 2143]
+
+many_lines: |
+ A quick
+ fox
+
+
+ jumped
+ over
+
+
+
+
+
+ a lazy
+
+
+
+ dog
+
+
+werte:
+ 1: nummer 1
+ 0: Stunde 0
+
+noindent_records:
+- record1: value1
+- record2: value2
+
+"a:1": [1000]
+"a:2":
+ - 2000
+a:3: [3000]
+
+complex_unquoted_key:
+ a:b:''test': value
+
+array with commas:
+ ["0","1"]
+
+invoice: ["Something", "", '', "Something else"]
+quotes: ['Something', "Nothing", 'Anything', "Thing"]
+
+# [Endloop]
+endloop: |
+ Does this line in the end indeed make Spyc go to an infinite loop?
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/DumpTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/DumpTest.php
new file mode 100644
index 0000000..ceb5c8e
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/DumpTest.php
@@ -0,0 +1,194 @@
+<?php
+
+class DumpTest extends PHPUnit_Framework_TestCase {
+
+ private $files_to_test = array();
+
+ public function setUp() {
+ $this->files_to_test = array (__DIR__.'/../spyc.yaml', 'failing1.yaml', 'indent_1.yaml', 'quotes.yaml');
+ }
+
+ public function testShortSyntax() {
+ $dump = spyc_dump(array ('item1', 'item2', 'item3'));
+ $awaiting = "- item1\n- item2\n- item3\n";
+ $this->assertEquals ($awaiting, $dump);
+ }
+
+ public function testDump() {
+ foreach ($this->files_to_test as $file) {
+ $yaml = spyc_load(file_get_contents($file));
+ $dump = Spyc::YAMLDump ($yaml);
+ $yaml_after_dump = Spyc::YAMLLoad ($dump);
+ $this->assertEquals ($yaml, $yaml_after_dump);
+ }
+ }
+
+ public function testDumpWithQuotes() {
+ $Spyc = new Spyc();
+ $Spyc->setting_dump_force_quotes = true;
+ foreach ($this->files_to_test as $file) {
+ $yaml = $Spyc->load(file_get_contents($file));
+ $dump = $Spyc->dump ($yaml);
+ $yaml_after_dump = Spyc::YAMLLoad ($dump);
+ $this->assertEquals ($yaml, $yaml_after_dump);
+ }
+ }
+
+ public function testDumpArrays() {
+ $dump = Spyc::YAMLDump(array ('item1', 'item2', 'item3'));
+ $awaiting = "---\n- item1\n- item2\n- item3\n";
+ $this->assertEquals ($awaiting, $dump);
+ }
+
+ public function testNull() {
+ $dump = Spyc::YAMLDump(array('a' => 1, 'b' => null, 'c' => 3));
+ $awaiting = "---\na: 1\nb: null\nc: 3\n";
+ $this->assertEquals ($awaiting, $dump);
+ }
+
+ public function testNext() {
+ $array = array("aaa", "bbb", "ccc");
+ #set arrays internal pointer to next element
+ next($array);
+ $dump = Spyc::YAMLDump($array);
+ $awaiting = "---\n- aaa\n- bbb\n- ccc\n";
+ $this->assertEquals ($awaiting, $dump);
+ }
+
+ public function testDumpingMixedArrays() {
+ $array = array();
+ $array[] = 'Sequence item';
+ $array['The Key'] = 'Mapped value';
+ $array[] = array('A sequence','of a sequence');
+ $array[] = array('first' => 'A sequence','second' => 'of mapped values');
+ $array['Mapped'] = array('A sequence','which is mapped');
+ $array['A Note'] = 'What if your text is too long?';
+ $array['Another Note'] = 'If that is the case, the dumper will probably fold your text by using a block. Kinda like this.';
+ $array['The trick?'] = 'The trick is that we overrode the default indent, 2, to 4 and the default wordwrap, 40, to 60.';
+ $array['Old Dog'] = "And if you want\n to preserve line breaks, \ngo ahead!";
+ $array['key:withcolon'] = "Should support this to";
+
+ $yaml = Spyc::YAMLDump($array,4,60);
+ }
+
+ public function testMixed() {
+ $dump = Spyc::YAMLDump(array(0 => 1, 'b' => 2, 1 => 3));
+ $awaiting = "---\n0: 1\nb: 2\n1: 3\n";
+ $this->assertEquals ($awaiting, $dump);
+ }
+
+ public function testDumpNumerics() {
+ $dump = Spyc::YAMLDump(array ('404', '405', '500'));
+ $awaiting = "---\n- \"404\"\n- \"405\"\n- \"500\"\n";
+ $this->assertEquals ($awaiting, $dump);
+ }
+
+ public function testDumpAsterisks() {
+ $dump = Spyc::YAMLDump(array ('*'));
+ $awaiting = "---\n- '*'\n";
+ $this->assertEquals ($awaiting, $dump);
+ }
+
+ public function testDumpAmpersands() {
+ $dump = Spyc::YAMLDump(array ('some' => '&foo'));
+ $awaiting = "---\nsome: '&foo'\n";
+ $this->assertEquals ($awaiting, $dump);
+ }
+
+ public function testDumpExclamations() {
+ $dump = Spyc::YAMLDump(array ('some' => '!foo'));
+ $awaiting = "---\nsome: '!foo'\n";
+ $this->assertEquals ($awaiting, $dump);
+ }
+
+ public function testDumpExclamations2() {
+ $dump = Spyc::YAMLDump(array ('some' => 'foo!'));
+ $awaiting = "---\nsome: foo!\n";
+ $this->assertEquals ($awaiting, $dump);
+ }
+
+ public function testDumpApostrophes() {
+ $dump = Spyc::YAMLDump(array ('some' => "'Biz' pimpt bedrijventerreinen"));
+ $awaiting = "---\nsome: \"'Biz' pimpt bedrijventerreinen\"\n";
+ $this->assertEquals ($awaiting, $dump);
+ }
+
+ public function testDumpNumericHashes() {
+ $dump = Spyc::YAMLDump(array ("titel"=> array("0" => "", 1 => "Dr.", 5 => "Prof.", 6 => "Prof. Dr.")));
+ $awaiting = "---\ntitel:\n 0: \"\"\n 1: Dr.\n 5: Prof.\n 6: Prof. Dr.\n";
+ $this->assertEquals ($awaiting, $dump);
+ }
+
+ public function testEmpty() {
+ $dump = Spyc::YAMLDump(array("foo" => array()));
+ $awaiting = "---\nfoo: [ ]\n";
+ $this->assertEquals ($awaiting, $dump);
+ }
+
+ public function testHashesInKeys() {
+ $dump = Spyc::YAMLDump(array ('#color' => '#ffffff'));
+ $awaiting = "---\n\"#color\": '#ffffff'\n";
+ $this->assertEquals ($awaiting, $dump);
+ }
+
+ public function testParagraph() {
+ $dump = Spyc::YAMLDump(array ('key' => "|\n value"));
+ $awaiting = "---\nkey: |\n value\n";
+ $this->assertEquals ($awaiting, $dump);
+ }
+
+ public function testParagraphTwo() {
+ $dump = Spyc::YAMLDump(array ('key' => 'Congrats, pimpt bedrijventerreinen pimpt bedrijventerreinen pimpt bedrijventerreinen!'));
+ $awaiting = "---\nkey: >\n Congrats, pimpt bedrijventerreinen pimpt\n bedrijventerreinen pimpt\n bedrijventerreinen!\n";
+ $this->assertEquals ($awaiting, $dump);
+ }
+
+ public function testString() {
+ $dump = Spyc::YAMLDump(array ('key' => array('key_one' => 'Congrats, pimpt bedrijventerreinen!')));
+ $awaiting = "---\nkey:\n key_one: Congrats, pimpt bedrijventerreinen!\n";
+ $this->assertEquals ($awaiting, $dump);
+ }
+
+ public function testStringLong() {
+ $dump = Spyc::YAMLDump(array ('key' => array('key_one' => 'Congrats, pimpt bedrijventerreinen pimpt bedrijventerreinen pimpt bedrijventerreinen!')));
+ $awaiting = "---\nkey:\n key_one: >\n Congrats, pimpt bedrijventerreinen pimpt\n bedrijventerreinen pimpt\n bedrijventerreinen!\n";
+ $this->assertEquals ($awaiting, $dump);
+ }
+
+ public function testStringDoubleQuote() {
+ $dump = Spyc::YAMLDump(array ('key' => array('key_one' => array('key_two' => '"Système d\'e-réservation"'))));
+ $awaiting = "---\nkey:\n key_one:\n key_two: |\n Système d'e-réservation\n";
+ $this->assertEquals ($awaiting, $dump);
+ }
+
+ public function testLongStringDoubleQuote() {
+ $dump = Spyc::YAMLDump(array ('key' => array('key_one' => array('key_two' => '"Système d\'e-réservation bedrijventerreinen pimpt" bedrijventerreinen!'))));
+ $awaiting = "---\nkey:\n key_one:\n key_two: |\n \"Système d'e-réservation bedrijventerreinen pimpt\" bedrijventerreinen!\n";
+ $this->assertEquals ($awaiting, $dump);
+ }
+
+ public function testStringStartingWithSpace() {
+ $dump = Spyc::YAMLDump(array ('key' => array('key_one' => " Congrats, pimpt bedrijventerreinen \n pimpt bedrijventerreinen pimpt bedrijventerreinen!")));
+ $awaiting = "---\nkey:\n key_one: |\n Congrats, pimpt bedrijventerreinen\n pimpt bedrijventerreinen pimpt bedrijventerreinen!\n";
+ $this->assertEquals ($awaiting, $dump);
+ }
+
+ public function testPerCentOne() {
+ $dump = Spyc::YAMLDump(array ('key' => "%name%, pimpts bedrijventerreinen!"));
+ $awaiting = "---\nkey: '%name%, pimpts bedrijventerreinen!'\n";
+ $this->assertEquals ($awaiting, $dump);
+ }
+
+ public function testPerCentAndSimpleQuote() {
+ $dump = Spyc::YAMLDump(array ('key' => "%name%, pimpt's bedrijventerreinen!"));
+ $awaiting = "---\nkey: \"%name%, pimpt's bedrijventerreinen!\"\n";
+ $this->assertEquals ($awaiting, $dump);
+ }
+
+ public function testPerCentAndDoubleQuote() {
+ $dump = Spyc::YAMLDump(array ('key' => '%name%, pimpt\'s "bed"rijventerreinen!'));
+ $awaiting = "---\nkey: |\n %name%, pimpt's \"bed\"rijventerreinen!\n";
+ $this->assertEquals ($awaiting, $dump);
+ }
+
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/IndentTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/IndentTest.php
new file mode 100644
index 0000000..b7cdcab
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/IndentTest.php
@@ -0,0 +1,68 @@
+<?php
+
+class IndentTest extends PHPUnit_Framework_TestCase {
+
+ protected $Y;
+
+ protected function setUp() {
+ $this->Y = Spyc::YAMLLoad(__DIR__."/indent_1.yaml");
+ }
+
+ public function testIndent_1() {
+ $this->assertEquals (array ('child_1' => 2, 'child_2' => 0, 'child_3' => 1), $this->Y['root']);
+ }
+
+ public function testIndent_2() {
+ $this->assertEquals (array ('child_1' => 1, 'child_2' => 2), $this->Y['root2']);
+ }
+
+ public function testIndent_3() {
+ $this->assertEquals (array (array ('resolutions' => array (1024 => 768, 1920 => 1200), 'producer' => 'Nec')), $this->Y['display']);
+ }
+
+ public function testIndent_4() {
+ $this->assertEquals (array (
+ array ('resolutions' => array (1024 => 768)),
+ array ('resolutions' => array (1920 => 1200)),
+ ), $this->Y['displays']);
+ }
+
+ public function testIndent_5() {
+ $this->assertEquals (array (array (
+ 'row' => 0,
+ 'col' => 0,
+ 'headsets_affected' => array (
+ array (
+ 'ports' => array (0),
+ 'side' => 'left',
+ )
+ ),
+ 'switch_function' => array (
+ 'ics_ptt' => true
+ )
+ )), $this->Y['nested_hashes_and_seqs']);
+ }
+
+ public function testIndent_6() {
+ $this->assertEquals (array (
+ 'h' => array (
+ array ('a' => 'b', 'a1' => 'b1'),
+ array ('c' => 'd')
+ )
+ ), $this->Y['easier_nest']);
+ }
+
+ public function testIndent_space() {
+ $this->assertEquals ("By four\n spaces", $this->Y['one_space']);
+ }
+
+ public function testListAndComment() {
+ $this->assertEquals (array ('one', 'two', 'three'), $this->Y['list_and_comment']);
+ }
+
+ public function testAnchorAndAlias() {
+ $this->assertEquals (array ('database' => 'rails_dev', 'adapter' => 'mysql', 'host' => 'localhost'), $this->Y['development']);
+ $this->assertEquals (array (1 => 'abc'), $this->Y['zzz']);
+ }
+
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/LoadTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/LoadTest.php
new file mode 100644
index 0000000..a25d36f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/LoadTest.php
@@ -0,0 +1,17 @@
+<?php
+
+class LoadTest extends PHPUnit_Framework_TestCase {
+ public function testQuotes() {
+ $test_values = array(
+ "adjacent '''' \"\"\"\" quotes.",
+ "adjacent '''' quotes.",
+ "adjacent \"\"\"\" quotes.",
+ );
+ foreach($test_values as $value) {
+ $yaml = array($value);
+ $dump = Spyc::YAMLDump ($yaml);
+ $yaml_loaded = Spyc::YAMLLoad ($dump);
+ $this->assertEquals ($yaml, $yaml_loaded);
+ }
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/ParseTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/ParseTest.php
new file mode 100644
index 0000000..2ce77ca
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/ParseTest.php
@@ -0,0 +1,413 @@
+<?php
+
+class ParseTest extends PHPUnit_Framework_TestCase {
+
+ protected $yaml;
+
+ protected function setUp() {
+ $this->yaml = spyc_load_file(__DIR__.'/../spyc.yaml');
+ }
+
+ public function testMergeHashKeys() {
+ $Expected = array (
+ array ('step' => array('instrument' => 'Lasik 2000', 'pulseEnergy' => 5.4, 'pulseDuration' => 12, 'repetition' => 1000, 'spotSize' => '1mm')),
+ array ('step' => array('instrument' => 'Lasik 2000', 'pulseEnergy' => 5.4, 'pulseDuration' => 12, 'repetition' => 1000, 'spotSize' => '2mm')),
+ );
+ $Actual = spyc_load_file (__DIR__.'/indent_1.yaml');
+ $this->assertEquals ($Expected, $Actual['steps']);
+ }
+
+ public function testDeathMasks() {
+ $Expected = array ('sad' => 2, 'magnificent' => 4);
+ $Actual = spyc_load_file (__DIR__.'/indent_1.yaml');
+ $this->assertEquals ($Expected, $Actual['death masks are']);
+ }
+
+ public function testDevDb() {
+ $Expected = array ('adapter' => 'mysql', 'host' => 'localhost', 'database' => 'rails_dev');
+ $Actual = spyc_load_file (__DIR__.'/indent_1.yaml');
+ $this->assertEquals ($Expected, $Actual['development']);
+ }
+
+ public function testNumericKey() {
+ $this->assertEquals ("Ooo, a numeric key!", $this->yaml[1040]);
+ }
+
+ public function testMappingsString() {
+ $this->assertEquals ("Anyone's name, really.", $this->yaml['String']);
+ }
+
+ public function testMappingsInt() {
+ $this->assertSame (13, $this->yaml['Int']);
+ }
+
+ public function testMappingsHex() {
+ $this->assertSame (243, $this->yaml['Hex']);
+ $this->assertSame ('f0xf3', $this->yaml['BadHex']);
+ }
+
+ public function testMappingsBooleanTrue() {
+ $this->assertSame (true, $this->yaml['True']);
+ }
+
+ public function testMappingsBooleanFalse() {
+ $this->assertSame (false, $this->yaml['False']);
+ }
+
+ public function testMappingsZero() {
+ $this->assertSame (0, $this->yaml['Zero']);
+ }
+
+ public function testMappingsNull() {
+ $this->assertSame (null, $this->yaml['Null']);
+ }
+
+ public function testMappingsNotNull() {
+ $this->assertSame ('null', $this->yaml['NotNull']);
+ }
+
+ public function testMappingsFloat() {
+ $this->assertSame (5.34, $this->yaml['Float']);
+ }
+
+ public function testMappingsNegative() {
+ $this->assertSame (-90, $this->yaml['Negative']);
+ }
+
+ public function testMappingsSmallFloat() {
+ $this->assertSame (0.7, $this->yaml['SmallFloat']);
+ }
+
+ public function testNewline() {
+ $this->assertSame ('\n', $this->yaml['NewLine']);
+ }
+
+ public function testQuotedNewline() {
+ $this->assertSame ("\n", $this->yaml['QuotedNewLine']);
+ }
+
+ public function testSeq0() {
+ $this->assertEquals ("PHP Class", $this->yaml[0]);
+ }
+
+ public function testSeq1() {
+ $this->assertEquals ("Basic YAML Loader", $this->yaml[1]);
+ }
+
+ public function testSeq2() {
+ $this->assertEquals ("Very Basic YAML Dumper", $this->yaml[2]);
+ }
+
+ public function testSeq3() {
+ $this->assertEquals (array("YAML is so easy to learn.",
+ "Your config files will never be the same."), $this->yaml[3]);
+ }
+
+ public function testSeqMap() {
+ $this->assertEquals (array("cpu" => "1.5ghz", "ram" => "1 gig",
+ "os" => "os x 10.4.1"), $this->yaml[4]);
+ }
+
+ public function testMappedSequence() {
+ $this->assertEquals (array("yaml.org", "php.net"), $this->yaml['domains']);
+ }
+
+ public function testAnotherSequence() {
+ $this->assertEquals (array("program" => "Adium", "platform" => "OS X",
+ "type" => "Chat Client"), $this->yaml[5]);
+ }
+
+ public function testFoldedBlock() {
+ $this->assertEquals ("There isn't any time for your tricks!\nDo you understand?", $this->yaml['no time']);
+ }
+
+ public function testLiteralAsMapped() {
+ $this->assertEquals ("There is nothing but time\nfor your tricks.", $this->yaml['some time']);
+ }
+
+ public function testCrazy() {
+ $this->assertEquals (array( array("name" => "spartan", "notes" =>
+ array( "Needs to be backed up",
+ "Needs to be normalized" ),
+ "type" => "mysql" )), $this->yaml['databases']);
+ }
+
+ public function testColons() {
+ $this->assertEquals ("like", $this->yaml["if: you'd"]);
+ }
+
+ public function testInline() {
+ $this->assertEquals (array("One", "Two", "Three", "Four"), $this->yaml[6]);
+ }
+
+ public function testNestedInline() {
+ $this->assertEquals (array("One", array("Two", "And", "Three"), "Four", "Five"), $this->yaml[7]);
+ }
+
+ public function testNestedNestedInline() {
+ $this->assertEquals (array( "This", array("Is", "Getting", array("Ridiculous", "Guys")),
+ "Seriously", array("Show", "Mercy")), $this->yaml[8]);
+ }
+
+ public function testInlineMappings() {
+ $this->assertEquals (array("name" => "chris", "age" => "young", "brand" => "lucky strike"), $this->yaml[9]);
+ }
+
+ public function testNestedInlineMappings() {
+ $this->assertEquals (array("name" => "mark", "age" => "older than chris",
+ "brand" => array("marlboro", "lucky strike")), $this->yaml[10]);
+ }
+
+ public function testReferences() {
+ $this->assertEquals (array('Perl', 'Python', 'PHP', 'Ruby'), $this->yaml['dynamic languages']);
+ }
+
+ public function testReferences2() {
+ $this->assertEquals (array('C/C++', 'Java'), $this->yaml['compiled languages']);
+ }
+
+ public function testReferences3() {
+ $this->assertEquals (array(
+ array('Perl', 'Python', 'PHP', 'Ruby'),
+ array('C/C++', 'Java')
+ ), $this->yaml['all languages']);
+ }
+
+ public function testEscapedQuotes() {
+ $this->assertEquals ("you know, this shouldn't work. but it does.", $this->yaml[11]);
+ }
+
+ public function testEscapedQuotes_2() {
+ $this->assertEquals ( "that's my value.", $this->yaml[12]);
+ }
+
+ public function testEscapedQuotes_3() {
+ $this->assertEquals ("again, that's my value.", $this->yaml[13]);
+ }
+
+ public function testQuotes() {
+ $this->assertEquals ("here's to \"quotes\", boss.", $this->yaml[14]);
+ }
+
+ public function testQuoteSequence() {
+ $this->assertEquals ( array( 'name' => "Foo, Bar's", 'age' => 20), $this->yaml[15]);
+ }
+
+ public function testShortSequence() {
+ $this->assertEquals (array( 0 => "a", 1 => array (0 => 1, 1 => 2), 2 => "b"), $this->yaml[16]);
+ }
+
+ public function testQuotedNewlines() {
+ $this->assertEquals ("First line\nSecond line\nThird line", $this->yaml[17]);
+ }
+
+ public function testHash_1() {
+ $this->assertEquals ("Hash", $this->yaml['hash_1']);
+ }
+
+ public function testHash_2() {
+ $this->assertEquals ('Hash #and a comment', $this->yaml['hash_2']);
+ }
+
+ public function testHash_3() {
+ $this->assertEquals ('Hash (#) can appear in key too', $this->yaml['hash#3']);
+ }
+
+ public function testEndloop() {
+ $this->assertEquals ("Does this line in the end indeed make Spyc go to an infinite loop?", $this->yaml['endloop']);
+ }
+
+ public function testReallyLargeNumber() {
+ $this->assertEquals ('115792089237316195423570985008687907853269984665640564039457584007913129639936', $this->yaml['a_really_large_number']);
+ }
+
+ public function testFloatWithZeros() {
+ $this->assertSame ('1.0', $this->yaml['float_test']);
+ }
+
+ public function testFloatWithQuotes() {
+ $this->assertSame ('1.0', $this->yaml['float_test_with_quotes']);
+ }
+
+ public function testFloatInverse() {
+ $this->assertEquals ('001', $this->yaml['float_inverse_test']);
+ }
+
+ public function testIntArray() {
+ $this->assertEquals (array (1, 2, 3), $this->yaml['int array']);
+ }
+
+ public function testArrayOnSeveralLines() {
+ $this->assertEquals (array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19), $this->yaml['array on several lines']);
+ }
+
+ public function testArrayWithCommas() {
+ $this->assertEquals(array (0, 1), $this->yaml['array with commas']);
+ }
+
+ public function testmoreLessKey() {
+ $this->assertEquals ('<value>', $this->yaml['morelesskey']);
+ }
+
+ public function testArrayOfZero() {
+ $this->assertSame (array(0), $this->yaml['array_of_zero']);
+ }
+
+ public function testSophisticatedArrayOfZero() {
+ $this->assertSame (array('rx' => array ('tx' => array (0))), $this->yaml['sophisticated_array_of_zero']);
+ }
+
+ public function testSwitches() {
+ $this->assertEquals (array (array ('row' => 0, 'col' => 0, 'func' => array ('tx' => array(0, 1)))), $this->yaml['switches']);
+ }
+
+ public function testEmptySequence() {
+ $this->assertSame (array(), $this->yaml['empty_sequence']);
+ }
+
+ public function testEmptyHash() {
+ $this->assertSame (array(), $this->yaml['empty_hash']);
+ }
+
+ public function testEmptykey() {
+ $this->assertSame (array('' => array ('key' => 'value')), $this->yaml['empty_key']);
+ }
+
+ public function testMultilines() {
+ $this->assertSame (array(array('type' => 'SomeItem', 'values' => array ('blah', 'blah', 'blah', 'blah'), 'ints' => array(2, 54, 12, 2143))), $this->yaml['multiline_items']);
+ }
+
+ public function testManyNewlines() {
+ $this->assertSame ('A quick
+fox
+
+
+jumped
+over
+
+
+
+
+
+a lazy
+
+
+
+dog', $this->yaml['many_lines']);
+ }
+
+ public function testWerte() {
+ $this->assertSame (array ('1' => 'nummer 1', '0' => 'Stunde 0'), $this->yaml['werte']);
+ }
+
+ /* public function testNoIndent() {
+ $this->assertSame (array(
+ array ('record1'=>'value1'),
+ array ('record2'=>'value2')
+ )
+ , $this->yaml['noindent_records']);
+ } */
+
+ public function testColonsInKeys() {
+ $this->assertSame (array (1000), $this->yaml['a:1']);
+ }
+
+ public function testColonsInKeys2() {
+ $this->assertSame (array (2000), $this->yaml['a:2']);
+ }
+
+ public function testUnquotedColonsInKeys() {
+ $this->assertSame (array (3000), $this->yaml['a:3']);
+ }
+
+ public function testComplicatedKeyWithColon() {
+ $this->assertSame(array("a:b:''test'" => 'value'), $this->yaml['complex_unquoted_key']);
+ }
+
+ public function testKeysInMappedValueException() {
+ $this->setExpectedException('Exception');
+ Spyc::YAMLLoad('x: y: z:');
+ }
+
+ public function testKeysInValueException() {
+ $this->setExpectedException('Exception');
+ Spyc::YAMLLoad('x: y: z');
+ }
+
+ public function testSpecialCharacters() {
+ $this->assertSame ('[{]]{{]]', $this->yaml['special_characters']);
+ }
+
+ public function testAngleQuotes() {
+ $Quotes = Spyc::YAMLLoad(__DIR__.'/quotes.yaml');
+ $this->assertEquals (array ('html_tags' => array ('<br>', '<p>'), 'html_content' => array ('<p>hello world</p>', 'hello<br>world'), 'text_content' => array ('hello world')),
+ $Quotes);
+ }
+
+ public function testFailingColons() {
+ $Failing = Spyc::YAMLLoad(__DIR__.'/failing1.yaml');
+ $this->assertSame (array ('MyObject' => array ('Prop1' => array ('key1:val1'))),
+ $Failing);
+ }
+
+ public function testQuotesWithComments() {
+ $Expected = 'bar';
+ $Actual = spyc_load_file (__DIR__.'/comments.yaml');
+ $this->assertEquals ($Expected, $Actual['foo']);
+ }
+
+ public function testArrayWithComments() {
+ $Expected = array ('x', 'y', 'z');
+ $Actual = spyc_load_file (__DIR__.'/comments.yaml');
+ $this->assertEquals ($Expected, $Actual['arr']);
+ }
+
+ public function testAfterArrayWithKittens() {
+ $Expected = 'kittens';
+ $Actual = spyc_load_file (__DIR__.'/comments.yaml');
+ $this->assertEquals ($Expected, $Actual['bar']);
+ }
+
+ // Plain characters http://www.yaml.org/spec/1.2/spec.html#id2789510
+ public function testKai() {
+ $Expected = array('-example' => 'value');
+ $Actual = spyc_load_file (__DIR__.'/indent_1.yaml');
+ $this->assertEquals ($Expected, $Actual['kai']);
+ }
+
+ public function testKaiList() {
+ $Expected = array ('-item', '-item', '-item');
+ $Actual = spyc_load_file (__DIR__.'/indent_1.yaml');
+ $this->assertEquals ($Expected, $Actual['kai_list_of_items']);
+ }
+
+ public function testDifferentQuoteTypes() {
+ $expected = array ('Something', "", "", "Something else");
+ $this->assertSame ($expected, $this->yaml['invoice']);
+ }
+
+ public function testDifferentQuoteTypes2() {
+ $expected = array ('Something', "Nothing", "Anything", "Thing");
+ $this->assertSame ($expected, $this->yaml['quotes']);
+ }
+
+ // Separation spaces http://www.yaml.org/spec/1.2/spec.html#id2778394
+ public function testMultipleArrays() {
+ $expected = array(array(array('x')));
+ $this->assertSame($expected, Spyc::YAMLLoad("- - - x"));
+ }
+
+ public function testElementWithEmptyHash()
+ {
+ $element = "hash: {}\narray: []";
+ $yaml = Spyc::YAMLLoadString($element);
+ $this->assertEquals($yaml['hash'], []);
+ $this->assertEquals($yaml['array'], []);
+
+ $yaml = Spyc::YAMLLoadString($element, [
+ 'setting_empty_hash_as_object' => true
+ ]);
+ $this->assertInstanceOf(stdClass::class, $yaml['hash']);
+ $this->assertEquals($yaml['array'], []);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/RoundTripTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/RoundTripTest.php
new file mode 100644
index 0000000..3e707df
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/RoundTripTest.php
@@ -0,0 +1,76 @@
+<?php
+
+function roundTrip($a) { return Spyc::YAMLLoad(Spyc::YAMLDump(array('x' => $a))); }
+
+
+class RoundTripTest extends PHPUnit_Framework_TestCase {
+
+ protected function setUp() {
+ }
+
+ public function testNull() {
+ $this->assertEquals (array ('x' => null), roundTrip (null));
+ }
+
+ public function testY() {
+ $this->assertEquals (array ('x' => 'y'), roundTrip ('y'));
+ }
+
+ public function testExclam() {
+ $this->assertEquals (array ('x' => '!yeah'), roundTrip ('!yeah'));
+ }
+
+ public function test5() {
+ $this->assertEquals (array ('x' => '5'), roundTrip ('5'));
+ }
+
+ public function testSpaces() {
+ $this->assertEquals (array ('x' => 'x '), roundTrip ('x '));
+ }
+
+ public function testApostrophes() {
+ $this->assertEquals (array ('x' => "'biz'"), roundTrip ("'biz'"));
+ }
+
+ public function testNewLines() {
+ $this->assertEquals (array ('x' => "\n"), roundTrip ("\n"));
+ }
+
+ public function testHashes() {
+ $this->assertEquals (array ('x' => array ("#color" => '#fff')), roundTrip (array ("#color" => '#fff')));
+ }
+
+ public function testPreserveString() {
+ $result1 = roundTrip ('0');
+ $result2 = roundTrip ('true');
+ $this->assertTrue (is_string ($result1['x']));
+ $this->assertTrue (is_string ($result2['x']));
+ }
+
+ public function testPreserveBool() {
+ $result = roundTrip (true);
+ $this->assertTrue (is_bool ($result['x']));
+ }
+
+ public function testPreserveInteger() {
+ $result = roundTrip (0);
+ $this->assertTrue (is_int ($result['x']));
+ }
+
+ public function testWordWrap() {
+ $this->assertEquals (array ('x' => "aaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"), roundTrip ("aaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"));
+ }
+
+ public function testABCD() {
+ $this->assertEquals (array ('a', 'b', 'c', 'd'), Spyc::YAMLLoad(Spyc::YAMLDump(array('a', 'b', 'c', 'd'))));
+ }
+
+ public function testABCD2() {
+ $a = array('a', 'b', 'c', 'd'); // Create a simple list
+ $b = Spyc::YAMLDump($a); // Dump the list as YAML
+ $c = Spyc::YAMLLoad($b); // Load the dumped YAML
+ $d = Spyc::YAMLDump($c); // Re-dump the data
+ $this->assertSame($b, $d);
+ }
+
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/comments.yaml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/comments.yaml
new file mode 100644
index 0000000..c05012f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/comments.yaml
@@ -0,0 +1,3 @@
+foo: 'bar' #Comment
+arr: ['x', 'y', 'z'] # Comment here
+bar: kittens
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/failing1.yaml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/failing1.yaml
new file mode 100644
index 0000000..6906a51
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/failing1.yaml
@@ -0,0 +1,2 @@
+MyObject:
+ Prop1: {key1:val1}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/indent_1.yaml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/indent_1.yaml
new file mode 100644
index 0000000..62d6ece
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/indent_1.yaml
@@ -0,0 +1,70 @@
+root:
+ child_1: 2
+
+ child_2: 0
+ child_3: 1
+
+root2:
+ child_1: 1
+# A comment
+ child_2: 2
+
+displays:
+ - resolutions:
+ 1024: 768
+ - resolutions:
+ 1920: 1200
+
+display:
+ - resolutions:
+ 1024: 768
+ 1920: 1200
+ producer: "Nec"
+
+nested_hashes_and_seqs:
+ - { row: 0, col: 0, headsets_affected: [{ports: [0], side: left}], switch_function: {ics_ptt: true} }
+
+easier_nest: { h: [{a: b, a1: b1}, {c: d}] }
+
+one_space: |
+ By four
+ spaces
+
+steps:
+ - step: &id001
+ instrument: Lasik 2000
+ pulseEnergy: 5.4
+ pulseDuration: 12
+ repetition: 1000
+ spotSize: 1mm
+ - step:
+ <<: *id001
+ spotSize: 2mm
+
+death masks are:
+ sad: 2
+ <<: {magnificent: 4}
+
+login: &login
+ adapter: mysql
+ host: localhost
+
+development:
+ database: rails_dev
+ <<: *login
+
+"key": "value:"
+colon_only: ":"
+
+list_and_comment: [one, two, three] # comment
+kai:
+ -example: value
+kai_list_of_items:
+ - -item
+ - '-item'
+ -item
+
+&foo bar:
+ 1: "abc"
+
+zzz: *foo
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/quotes.yaml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/quotes.yaml
new file mode 100644
index 0000000..2ceea86
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/mustangostang/spyc/tests/quotes.yaml
@@ -0,0 +1,8 @@
+html_tags:
+ - <br>
+ - <p>
+html_content:
+ - <p>hello world</p>
+ - hello<br>world
+text_content:
+ - hello world
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/LICENSE b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/LICENSE
new file mode 100644
index 0000000..45c7017
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Paragon Initiative Enterprises
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/build-phar.sh b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/build-phar.sh
new file mode 100755
index 0000000..b4a5ba3
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/build-phar.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+
+basedir=$( dirname $( readlink -f ${BASH_SOURCE[0]} ) )
+
+php -dphar.readonly=0 "$basedir/other/build_phar.php" $*
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/composer.json b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/composer.json
new file mode 100644
index 0000000..1fa8de9
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/composer.json
@@ -0,0 +1,34 @@
+{
+ "name": "paragonie/random_compat",
+ "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
+ "keywords": [
+ "csprng",
+ "random",
+ "polyfill",
+ "pseudorandom"
+ ],
+ "license": "MIT",
+ "type": "library",
+ "authors": [
+ {
+ "name": "Paragon Initiative Enterprises",
+ "email": "security@paragonie.com",
+ "homepage": "https://paragonie.com"
+ }
+ ],
+ "support": {
+ "issues": "https://github.com/paragonie/random_compat/issues",
+ "email": "info@paragonie.com",
+ "source": "https://github.com/paragonie/random_compat"
+ },
+ "require": {
+ "php": "^7"
+ },
+ "require-dev": {
+ "vimeo/psalm": "^1",
+ "phpunit/phpunit": "4.*|5.*"
+ },
+ "suggest": {
+ "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey
new file mode 100644
index 0000000..eb50ebf
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey
@@ -0,0 +1,5 @@
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEEd+wCqJDrx5B4OldM0dQE0ZMX+lx1ZWm
+pui0SUqD4G29L3NGsz9UhJ/0HjBdbnkhIK5xviT0X5vtjacF6ajgcCArbTB+ds+p
++h7Q084NuSuIpNb6YPfoUFgC/CL9kAoc
+-----END PUBLIC KEY-----
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey.asc b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey.asc
new file mode 100644
index 0000000..6a1d7f3
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2.0.22 (MingW32)
+
+iQEcBAABAgAGBQJWtW1hAAoJEGuXocKCZATaJf0H+wbZGgskK1dcRTsuVJl9IWip
+QwGw/qIKI280SD6/ckoUMxKDCJiFuPR14zmqnS36k7N5UNPnpdTJTS8T11jttSpg
+1LCmgpbEIpgaTah+cELDqFCav99fS+bEiAL5lWDAHBTE/XPjGVCqeehyPYref4IW
+NDBIEsvnHPHPLsn6X5jq4+Yj5oUixgxaMPiR+bcO4Sh+RzOVB6i2D0upWfRXBFXA
+NNnsg9/zjvoC7ZW73y9uSH+dPJTt/Vgfeiv52/v41XliyzbUyLalf02GNPY+9goV
+JHG1ulEEBJOCiUD9cE1PUIJwHA/HqyhHIvV350YoEFiHl8iSwm7SiZu5kPjaq74=
+=B6+8
+-----END PGP SIGNATURE-----
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/lib/random.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/lib/random.php
new file mode 100644
index 0000000..c7731a5
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/lib/random.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Random_* Compatibility Library
+ * for using the new PHP 7 random_* API in PHP 5 projects
+ *
+ * @version 2.99.99
+ * @released 2018-06-06
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+// NOP
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/other/build_phar.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/other/build_phar.php
new file mode 100644
index 0000000..70ef4b2
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/other/build_phar.php
@@ -0,0 +1,57 @@
+<?php
+$dist = dirname(__DIR__).'/dist';
+if (!is_dir($dist)) {
+ mkdir($dist, 0755);
+}
+if (file_exists($dist.'/random_compat.phar')) {
+ unlink($dist.'/random_compat.phar');
+}
+$phar = new Phar(
+ $dist.'/random_compat.phar',
+ FilesystemIterator::CURRENT_AS_FILEINFO | \FilesystemIterator::KEY_AS_FILENAME,
+ 'random_compat.phar'
+);
+rename(
+ dirname(__DIR__).'/lib/random.php',
+ dirname(__DIR__).'/lib/index.php'
+);
+$phar->buildFromDirectory(dirname(__DIR__).'/lib');
+rename(
+ dirname(__DIR__).'/lib/index.php',
+ dirname(__DIR__).'/lib/random.php'
+);
+
+/**
+ * If we pass an (optional) path to a private key as a second argument, we will
+ * sign the Phar with OpenSSL.
+ *
+ * If you leave this out, it will produce an unsigned .phar!
+ */
+if ($argc > 1) {
+ if (!@is_readable($argv[1])) {
+ echo 'Could not read the private key file:', $argv[1], "\n";
+ exit(255);
+ }
+ $pkeyFile = file_get_contents($argv[1]);
+
+ $private = openssl_get_privatekey($pkeyFile);
+ if ($private !== false) {
+ $pkey = '';
+ openssl_pkey_export($private, $pkey);
+ $phar->setSignatureAlgorithm(Phar::OPENSSL, $pkey);
+
+ /**
+ * Save the corresponding public key to the file
+ */
+ if (!@is_readable($dist.'/random_compat.phar.pubkey')) {
+ $details = openssl_pkey_get_details($private);
+ file_put_contents(
+ $dist.'/random_compat.phar.pubkey',
+ $details['key']
+ );
+ }
+ } else {
+ echo 'An error occurred reading the private key from OpenSSL.', "\n";
+ exit(255);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/psalm-autoload.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/psalm-autoload.php
new file mode 100644
index 0000000..d71d1b8
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/psalm-autoload.php
@@ -0,0 +1,9 @@
+<?php
+
+require_once 'lib/byte_safe_strings.php';
+require_once 'lib/cast_to_int.php';
+require_once 'lib/error_polyfill.php';
+require_once 'other/ide_stubs/libsodium.php';
+require_once 'lib/random.php';
+
+$int = random_int(0, 65536);
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/psalm.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/psalm.xml
new file mode 100644
index 0000000..596d99d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/paragonie/random_compat/psalm.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<psalm
+ autoloader="psalm-autoload.php"
+ stopOnFirstError="false"
+ useDocblockTypes="true"
+>
+ <projectFiles>
+ <directory name="lib" />
+ </projectFiles>
+ <issueHandlers>
+ <RedundantConditionGivenDocblockType errorLevel="info" />
+ <UnresolvableInclude errorLevel="info" />
+ <DuplicateClass errorLevel="info" />
+ <InvalidOperand errorLevel="info" />
+ <UndefinedConstant errorLevel="info" />
+ <MissingReturnType errorLevel="info" />
+ <InvalidReturnType errorLevel="info" />
+ </issueHandlers>
+</psalm>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/LICENSE b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/LICENSE
new file mode 100644
index 0000000..ab85686
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Vincent Dauce
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/README.md b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/README.md
new file mode 100644
index 0000000..68f997a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/README.md
@@ -0,0 +1,254 @@
+# php-mime-mail-parser
+
+A fully tested email parser for PHP 7.1+ (mailparse extension wrapper).
+
+It's the most effective php email parser around in terms of performance, foreign character encoding, attachment handling, and ease of use.
+Internet Message Format RFC [822](https://tools.ietf.org/html/rfc822), [2822](https://tools.ietf.org/html/rfc2822), [5322](https://tools.ietf.org/html/rfc5322).
+
+[![Latest Version](https://img.shields.io/packagist/v/php-mime-mail-parser/php-mime-mail-parser.svg?style=flat-square)](https://github.com/php-mime-mail-parser/php-mime-mail-parser/releases)
+[![Total Downloads](https://img.shields.io/packagist/dt/php-mime-mail-parser/php-mime-mail-parser.svg?style=flat-square)](https://packagist.org/packages/php-mime-mail-parser/php-mime-mail-parser)
+[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE)
+
+## Why?
+
+This extension can be used to...
+ * Parse and read email from Postfix
+ * For reading messages (Filename extension: eml)
+ * Create webmail
+ * Store email information such a subject, HTML body, attachments, and etc. into a database
+
+## Is it reliable?
+
+Yes. All known issues have been reproduced, fixed and tested.
+
+We use GitHub Actions, Codecov, Codacy to help ensure code quality. You can see real-time statistics below:
+
+[![Actions Status](https://wdp9fww0r9.execute-api.us-west-2.amazonaws.com/production/badge/php-mime-mail-parser/php-mime-mail-parser?style=flat-square)](https://wdp9fww0r9.execute-api.us-west-2.amazonaws.com/production/results/php-mime-mail-parser/php-mime-mail-parser)
+[![Coverage](https://img.shields.io/codecov/c/gh/php-mime-mail-parser/php-mime-mail-parser?style=flat-square)](https://codecov.io/gh/php-mime-mail-parser/php-mime-mail-parser)
+[![Code Quality](https://img.shields.io/codacy/grade/4e0e44fee21147ddbdd18ff976251875?style=flat-square)](https://app.codacy.com/app/php-mime-mail-parser/php-mime-mail-parser)
+
+
+## How do I install it?
+
+The easiest way is via [Composer](https://getcomposer.org/).
+
+To install the latest version of PHP MIME Mail Parser, run the command below:
+
+ composer require php-mime-mail-parser/php-mime-mail-parser
+
+## Requirements
+
+The following versions of PHP are supported:
+
+* PHP 7.1
+* PHP 7.2
+* PHP 7.3
+
+Previous Versions:
+
+| PHP Compatibility | Version |
+| ------------- | ------------- |
+| HHVM | php-mime-mail-parser 2.11.1 |
+| PHP 5.4 | php-mime-mail-parser 2.11.1 |
+| PHP 5.5 | php-mime-mail-parser 2.11.1 |
+| PHP 5.6 | php-mime-mail-parser 3.0.4 |
+| PHP 7.0 | php-mime-mail-parser 3.0.4 |
+
+Make sure you have the mailparse extension (http://php.net/manual/en/book.mailparse.php) properly installed. The command line `php -m | grep mailparse` need to return "mailparse".
+
+
+### Install mailparse extension
+
+#### Ubuntu, Debian & derivatives
+```
+sudo apt install php-cli php-mailparse
+```
+
+#### Others platforms
+```
+sudo apt install php-cli php-pear php-dev php-mbstring
+pecl install mailparse
+```
+
+#### From source
+
+AAAAMMDD should be `php-config --extension-dir`
+```
+git clone https://github.com/php/pecl-mail-mailparse.git
+cd pecl-mail-mailparse
+phpize
+./configure
+sed -i 's/#if\s!HAVE_MBSTRING/#ifndef MBFL_MBFILTER_H/' ./mailparse.c
+make
+sudo mv modules/mailparse.so /usr/lib/php/AAAAMMDD/
+echo "extension=mailparse.so" | sudo tee /etc/php/7.1/mods-available/mailparse.ini
+sudo phpenmod mailparse
+```
+
+#### Windows
+You need to download mailparse DLL from http://pecl.php.net/package/mailparse and add the line "extension=php_mailparse.dll" to php.ini accordingly.
+
+## How do I use it?
+
+### Loading an email
+
+You can load an email with 4 differents ways. You only need to use one of the following four.
+
+```php
+require_once __DIR__.'/vendor/autoload.php';
+
+$path = 'path/to/email.eml';
+$parser = new PhpMimeMailParser\Parser();
+
+// 1. Specify a file path (string)
+$parser->setPath($path);
+
+// 2. Specify the raw mime mail text (string)
+$parser->setText(file_get_contents($path));
+
+// 3. Specify a php file resource (stream)
+$parser->setStream(fopen($path, "r"));
+
+// 4. Specify a stream to work with mail server (stream)
+$parser->setStream(fopen("php://stdin", "r"));
+```
+
+### Get the metadata of the message
+
+Get the sender and the receiver:
+
+```php
+$rawHeaderTo = $parser->getHeader('to');
+// return "test" <test@example.com>, "test2" <test2@example.com>
+
+$arrayHeaderTo = $parser->getAddresses('to');
+// return [["display"=>"test", "address"=>"test@example.com", false]]
+
+$rawHeaderFrom = $parser->getHeader('from');
+// return "test" <test@example.com>
+
+$arrayHeaderFrom = $parser->getAddresses('from');
+// return [["display"=>"test", "address"=>"test@example.com", "is_group"=>false]]
+```
+
+Get the subject:
+
+```php
+$subject = $parser->getHeader('subject');
+```
+
+Get other headers:
+
+```php
+$stringHeaders = $parser->getHeadersRaw();
+// return all headers as a string, no charset conversion
+
+$arrayHeaders = $parser->getHeaders();
+// return all headers as an array, with charset conversion
+```
+
+### Get the body of the message
+
+```php
+$text = $parser->getMessageBody('text');
+// return the text version
+
+$html = $parser->getMessageBody('html');
+// return the html version
+
+$htmlEmbedded = $parser->getMessageBody('htmlEmbedded');
+// return the html version with the embedded contents like images
+
+```
+
+### Get attachments
+
+Save all attachments in a directory
+
+```php
+$parser->saveAttachments('/path/to/save/attachments/');
+// return all attachments saved in the directory (include inline attachments)
+
+$parser->saveAttachments('/path/to/save/attachments/', false);
+// return all attachments saved in the directory (exclude inline attachments)
+
+// Save all attachments with the strategy ATTACHMENT_DUPLICATE_SUFFIX (default)
+$parser->saveAttachments('/path/to/save/attachments/', false, Parser::ATTACHMENT_DUPLICATE_SUFFIX);
+// return all attachments saved in the directory: logo.jpg, logo_1.jpg, ..., logo_100.jpg, YY34UFHBJ.jpg
+
+// Save all attachments with the strategy ATTACHMENT_RANDOM_FILENAME
+$parser->saveAttachments('/path/to/save/attachments/', false, Parser::ATTACHMENT_RANDOM_FILENAME);
+// return all attachments saved in the directory: YY34UFHBJ.jpg and F98DBZ9FZF.jpg
+
+// Save all attachments with the strategy ATTACHMENT_DUPLICATE_THROW
+$parser->saveAttachments('/path/to/save/attachments/', false, Parser::ATTACHMENT_DUPLICATE_THROW);
+// return an exception when there is attachments duplicate.
+
+```
+
+Get all attachments
+
+```php
+$attachments = $parser->getAttachments();
+// return an array of all attachments (include inline attachments)
+
+$attachments = $parser->getAttachments(false);
+// return an array of all attachments (exclude inline attachments)
+```
+
+
+Loop through all the Attachments
+```php
+foreach ($attachments as $attachment) {
+ echo 'Filename : '.$attachment->getFilename().'<br />';
+ // return logo.jpg
+
+ echo 'Filesize : '.filesize($attach_dir.$attachment->getFilename()).'<br />';
+ // return 1000
+
+ echo 'Filetype : '.$attachment->getContentType().'<br />';
+ // return image/jpeg
+
+ echo 'MIME part string : '.$attachment->getMimePartStr().'<br />';
+ // return the whole MIME part of the attachment
+
+ $attachment->save('/path/to/save/myattachment/', Parser::ATTACHMENT_DUPLICATE_SUFFIX);
+ // return the path and the filename saved (same strategy available than saveAttachments)
+}
+```
+
+## Postfix configuration to manage email from a mail server
+
+Next you need to forward emails to this script above. For that I'm using [Postfix](http://www.postfix.org/) like a mail server, you need to configure /etc/postfix/master.cf
+
+Add this line at the end of the file (specify myhook to send all emails to the script test.php)
+```
+myhook unix - n n - - pipe
+ flags=F user=www-data argv=php -c /etc/php5/apache2/php.ini -f /var/www/test.php ${sender} ${size} ${recipient}
+```
+
+Edit this line (register myhook)
+```
+smtp inet n - - - - smtpd
+ -o content_filter=myhook:dummy
+```
+
+The php script must use the fourth method to work with this configuration.
+
+And finally the easiest way is to use my SaaS https://mailcare.io
+
+
+## Can I contribute?
+
+Feel free to contribute!
+
+ git clone https://github.com/php-mime-mail-parser/php-mime-mail-parser
+ cd php-mime-mail-parser
+ composer install
+ ./vendor/bin/phpunit
+
+If you report an issue, please provide the raw email that triggered it. This helps us reproduce the issue and fix it more quickly.
+
+## License
+
+The php-mime-mail-parser/php-mime-mail-parser is open-sourced software licensed under the [MIT license](http://opensource.org/licenses/MIT)
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/compile_mailparse.sh b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/compile_mailparse.sh
new file mode 100755
index 0000000..8505077
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/compile_mailparse.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+git clone https://github.com/php/pecl-mail-mailparse.git
+cd pecl-mail-mailparse
+phpize
+./configure
+sed -i 's/#if\s!HAVE_MBSTRING/#ifndef MBFL_MBFILTER_H/' ./mailparse.c
+make
+sudo mv modules/mailparse.so /home/travis/.phpenv/versions/7.3.2/lib/php/extensions/no-debug-zts-20180731/
+echo 'extension=mailparse.so' >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/composer.json b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/composer.json
new file mode 100644
index 0000000..a797183
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/composer.json
@@ -0,0 +1,61 @@
+{
+ "name": "php-mime-mail-parser/php-mime-mail-parser",
+ "type": "library",
+ "description": "A fully tested email parser for PHP 7.1+ (mailparse extension wrapper).",
+ "keywords": ["mime", "mail", "mailparse", "MimeMailParser", "parser", "php"],
+ "homepage": "https://github.com/php-mime-mail-parser/php-mime-mail-parser",
+ "license": "MIT",
+ "authors": [
+ {
+ "name":"eXorus",
+ "email":"exorus.spam@gmail.com",
+ "homepage":"https://github.com/eXorus/",
+ "role":"Developer"
+ },
+ {
+ "name":"M.Valinskis",
+ "email":"M.Valins@gmail.com",
+ "homepage":"https://code.google.com/p/php-mime-mail-parser",
+ "role":"Developer"
+ },
+ {
+ "name":"eugene.emmett.wood",
+ "email":"gene_w@cementhorizon.com",
+ "homepage":"https://code.google.com/p/php-mime-mail-parser",
+ "role":"Developer"
+ },
+ {
+ "name":"alknetso",
+ "email":"alkne@gmail.com",
+ "homepage":"https://code.google.com/p/php-mime-mail-parser",
+ "role":"Developer"
+ },
+ {
+ "name":"bucabay",
+ "email":"gabe@fijiwebdesign.com",
+ "homepage":"http://www.fijiwebdesign.com",
+ "role":"Developer"
+ }
+ ],
+ "repository":{
+ "type":"git",
+ "url":"https://github.com/php-mime-mail-parser/php-mime-mail-parser.git"
+ },
+ "require": {
+ "php": "^7.1",
+ "ext-mailparse": "*"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.0",
+ "phpunit/php-token-stream": "^3.0",
+ "php-coveralls/php-coveralls": "^2.1",
+ "squizlabs/php_codesniffer": "^3.4"
+ },
+ "replace": {
+ "exorus/php-mime-mail-parser": "*",
+ "messaged/php-mime-mail-parser": "*"
+ },
+ "autoload": {
+ "psr-4": { "PhpMimeMailParser\\": "src/" }
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/mailparse-stubs.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/mailparse-stubs.php
new file mode 100644
index 0000000..e2b5e0e
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/mailparse-stubs.php
@@ -0,0 +1,303 @@
+<?php
+/**
+ * @link http://php.net/manual/en/mailparse.constants.php
+ */
+define('MAILPARSE_EXTRACT_OUTPUT', 0);
+
+/**
+ * @link http://php.net/manual/en/mailparse.constants.php
+ */
+define('MAILPARSE_EXTRACT_STREAM', 1);
+
+/**
+ * @link http://php.net/manual/en/mailparse.constants.php
+ */
+define('MAILPARSE_EXTRACT_RETURN', 2);
+
+/**
+ * Parses a file. This is the optimal way of parsing a mail file that you have on
+ * disk.
+ *
+ * @link http://php.net/manual/en/functions.mailparse-msg-parse-file.php
+ *
+ * @param string $filename Path to the file holding the message. The file is opened
+ * and streamed through the parser
+ *
+ * @return resource Returns a MIME resource representing the structure, or false on error
+ */
+function mailparse_msg_parse_file($filename)
+{
+}
+
+/**
+ * .
+ *
+ * @link http://php.net/manual/en/functions.mailparse-msg-get-part.php
+ *
+ * @param resource $mimemail A valid MIME resource
+ * @param string $mimesection
+ *
+ * @return resource
+ */
+function mailparse_msg_get_part($mimemail, $mimesection)
+{
+}
+
+/**
+ * .
+ *
+ * @link http://php.net/manual/en/functions.mailparse-msg-get-structure.php
+ *
+ * @param resource $mimemail A valid MIME resource
+ *
+ * @return array
+ */
+function mailparse_msg_get_structure($mimemail)
+{
+}
+
+/**
+ * .
+ *
+ * @link http://php.net/manual/en/functions.mailparse-msg-get-part-data.php
+ *
+ * @param resource $mimemail A valid MIME resource
+ *
+ * @return array
+ */
+function mailparse_msg_get_part_data($mimemail)
+{
+}
+
+/**
+ * .
+ *
+ * @link http://php.net/manual/en/functions.mailparse-msg-extract-part.php
+ *
+ * @param resource $mimemail A valid MIME resource
+ * @param string $msgbody
+ * @param callable $callbackfunc
+ *
+ * @return void
+ */
+function mailparse_msg_extract_part($mimemail, $msgbody, $callbackfunc)
+{
+}
+
+/**
+ * Extracts/decodes a message section from the supplied filename.
+ *
+ * @link http://php.net/manual/en/functions.mailparse-msg-extract-part-file.php
+ *
+ * @param resource $mimemail A valid MIME resource, created with
+ * mailparse_msg_create
+ * @param mixed $filename Can be a file name or a valid stream resource
+ * @param callable $callbackfunc If set, this must be either a valid callback that
+ * will be passed the extracted section, or null to make this function return the
+ * extracted section
+ *
+ * @return string If $callbackfunc is not null returns true on success
+ */
+function mailparse_msg_extract_part_file($mimemail, $filename, $callbackfunc = false)
+{
+}
+
+/**
+ * .
+ *
+ * @link http://php.net/manual/en/functions.mailparse-msg-extract-whole-part-file.php
+ *
+ * @param resource $mimemail A valid MIME resource
+ * @param string $filename
+ * @param callable $callbackfunc
+ *
+ * @return string
+ */
+function mailparse_msg_extract_whole_part_file($mimemail, $filename, $callbackfunc)
+{
+}
+
+/**
+ * Create a MIME mail resource.
+ *
+ * @link http://php.net/manual/en/functions.mailparse-msg-create.php
+ * @return resource Returns a handle that can be used to parse a message
+ */
+function mailparse_msg_create()
+{
+}
+
+/**
+ * Frees a MIME resource.
+ *
+ * @link http://php.net/manual/en/functions.mailparse-msg-free.php
+ *
+ * @param resource $mimemail A valid MIME resource allocated by
+ * mailparse_msg_create or mailparse_msg_parse_file
+ *
+ * @return boolean|null
+ */
+function mailparse_msg_free($mimemail)
+{
+}
+
+/**
+ * Incrementally parse data into the supplied mime mail resource.
+ *
+ * @link http://php.net/manual/en/functions.mailparse-msg-parse.php
+ *
+ * @param resource $mimemail A valid MIME resource
+ * @param string $data
+ *
+ * @return boolean|null
+ */
+function mailparse_msg_parse($mimemail, $data)
+{
+}
+
+/**
+ * Parses a RFC 822 compliant recipient list, such as that found in the To: header.
+ *
+ * @link http://php.net/manual/en/functions.mailparse-rfc822-parse-addresses.php
+ *
+ * @param string $addresses A string containing addresses, like in: Wez Furlong
+ * wez@example.com, doe@example.com
+ *
+ * @return array Returns an array of associative arrays with the following keys for each
+ * recipient: display The recipient name, for display purpose. If this part is not
+ * set for a recipient, this key will hold the same value as address. address The
+ * email address is_group true if the recipient is a newsgroup, false otherwise
+ */
+function mailparse_rfc822_parse_addresses($addresses)
+{
+}
+
+/**
+ * Figures out the best way of encoding the content read from the given file
+ * pointer.
+ *
+ * @link http://php.net/manual/en/functions.mailparse-determine-best-xfer-encoding.php
+ *
+ * @param resource $fp A valid file pointer, which must be seek-able
+ *
+ * @return string Returns one of the character encodings supported by the mbstring module
+ */
+function mailparse_determine_best_xfer_encoding($fp)
+{
+}
+
+/**
+ * Streams data from the source file pointer, apply $encoding and write to the
+ * destination file pointer.
+ *
+ * @link http://php.net/manual/en/functions.mailparse-stream-encode.php
+ *
+ * @param resource $sourcefp A valid file handle. The file is streamed through the
+ * parser
+ * @param resource $destfp The destination file handle in which the encoded data
+ * will be written
+ * @param string $encoding One of the character encodings supported by the mbstring
+ * module
+ *
+ * @return boolean|null
+ */
+function mailparse_stream_encode($sourcefp, $destfp, $encoding)
+{
+}
+
+/**
+ * Scans the data from the given file pointer and extract each embedded uuencoded
+ * file into a temporary file.
+ *
+ * @link http://php.net/manual/en/functions.mailparse-uudecode-all.php
+ *
+ * @param resource $fp A valid file pointer
+ *
+ * @return array Returns an array of associative arrays listing filename information.
+ * filename Path to the temporary file name created origfilename The original
+ * filename, for uuencoded parts only The first filename entry is the message body.
+ * The next entries are the decoded uuencoded files
+ */
+function mailparse_uudecode_all($fp)
+{
+}
+
+/**
+ * @return
+ */
+function mailparse_test()
+{
+}
+
+class mimemessage
+{
+ /**
+ * @return
+ */
+ public function mimemessage()
+ {
+ }
+
+ /**
+ * @return
+ */
+ public function get_child()
+ {
+ }
+
+ /**
+ * @return
+ */
+ public function get_child_count()
+ {
+ }
+
+ /**
+ * @return
+ */
+ public function get_parent()
+ {
+ }
+
+ /**
+ * @return
+ */
+ public function extract_headers()
+ {
+ }
+
+ /**
+ * @return
+ */
+ public function extract_body()
+ {
+ }
+
+ /**
+ * @return
+ */
+ public function enum_uue()
+ {
+ }
+
+ /**
+ * @return
+ */
+ public function extract_uue()
+ {
+ }
+
+ /**
+ * @return
+ */
+ public function remove()
+ {
+ }
+
+ /**
+ * @return
+ */
+ public function add_child()
+ {
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/phpunit.xml.dist b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/phpunit.xml.dist
new file mode 100644
index 0000000..32b1dbb
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/phpunit.xml.dist
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit colors="true" bootstrap="vendor/autoload.php">
+ <testsuite name="eXorus PhpMimeMailParser Test Suite">
+ <directory suffix="Test.php">tests</directory>
+ </testsuite>
+</phpunit>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Attachment.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Attachment.php
new file mode 100644
index 0000000..1a73163
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Attachment.php
@@ -0,0 +1,276 @@
+<?php
+
+namespace PhpMimeMailParser;
+
+use function var_dump;
+
+/**
+ * Attachment of php-mime-mail-parser
+ *
+ * Fully Tested Mailparse Extension Wrapper for PHP 5.4+
+ *
+ */
+class Attachment
+{
+ /**
+ * @var string $filename Filename
+ */
+ protected $filename;
+
+ /**
+ * @var string $contentType Mime Type
+ */
+ protected $contentType;
+
+ /**
+ * @var string $content File Content
+ */
+ protected $content;
+
+ /**
+ * @var string $contentDisposition Content-Disposition (attachment or inline)
+ */
+ protected $contentDisposition;
+
+ /**
+ * @var string $contentId Content-ID
+ */
+ protected $contentId;
+
+ /**
+ * @var array $headers An Array of the attachment headers
+ */
+ protected $headers;
+
+ /**
+ * @var resource $stream
+ */
+ protected $stream;
+
+ /**
+ * @var string $mimePartStr
+ */
+ protected $mimePartStr;
+
+ /**
+ * @var integer $maxDuplicateNumber
+ */
+ public $maxDuplicateNumber = 100;
+
+ /**
+ * Attachment constructor.
+ *
+ * @param string $filename
+ * @param string $contentType
+ * @param resource $stream
+ * @param string $contentDisposition
+ * @param string $contentId
+ * @param array $headers
+ * @param string $mimePartStr
+ */
+ public function __construct(
+ $filename,
+ $contentType,
+ $stream,
+ $contentDisposition = 'attachment',
+ $contentId = '',
+ $headers = [],
+ $mimePartStr = ''
+ ) {
+ $this->filename = $filename;
+ $this->contentType = $contentType;
+ $this->stream = $stream;
+ $this->content = null;
+ $this->contentDisposition = $contentDisposition;
+ $this->contentId = $contentId;
+ $this->headers = $headers;
+ $this->mimePartStr = $mimePartStr;
+ }
+
+ /**
+ * retrieve the attachment filename
+ *
+ * @return string
+ */
+ public function getFilename()
+ {
+ return $this->filename;
+ }
+
+ /**
+ * Retrieve the Attachment Content-Type
+ *
+ * @return string
+ */
+ public function getContentType()
+ {
+ return $this->contentType;
+ }
+
+ /**
+ * Retrieve the Attachment Content-Disposition
+ *
+ * @return string
+ */
+ public function getContentDisposition()
+ {
+ return $this->contentDisposition;
+ }
+
+ /**
+ * Retrieve the Attachment Content-ID
+ *
+ * @return string
+ */
+ public function getContentID()
+ {
+ return $this->contentId;
+ }
+
+ /**
+ * Retrieve the Attachment Headers
+ *
+ * @return array
+ */
+ public function getHeaders()
+ {
+ return $this->headers;
+ }
+
+ /**
+ * Get a handle to the stream
+ *
+ * @return resource
+ */
+ public function getStream()
+ {
+ return $this->stream;
+ }
+
+ /**
+ * Rename a file if it already exists at its destination.
+ * Renaming is done by adding a duplicate number to the file name. E.g. existingFileName_1.ext.
+ * After a max duplicate number, renaming the file will switch over to generating a random suffix.
+ *
+ * @param string $fileName Complete path to the file.
+ * @return string The suffixed file name.
+ */
+ protected function suffixFileName(string $fileName): string
+ {
+ $pathInfo = pathinfo($fileName);
+ $dirname = $pathInfo['dirname'].DIRECTORY_SEPARATOR;
+ $filename = $pathInfo['filename'];
+ $extension = empty($pathInfo['extension']) ? '' : '.'.$pathInfo['extension'];
+
+ $i = 0;
+ do {
+ $i++;
+
+ if ($i > $this->maxDuplicateNumber) {
+ $duplicateExtension = uniqid();
+ } else {
+ $duplicateExtension = $i;
+ }
+
+ $resultName = $dirname.$filename."_$duplicateExtension".$extension;
+ } while (file_exists($resultName));
+
+ return $resultName;
+ }
+
+ /**
+ * Read the contents a few bytes at a time until completed
+ * Once read to completion, it always returns false
+ *
+ * @param int $bytes (default: 2082)
+ *
+ * @return string|bool
+ */
+ public function read($bytes = 2082)
+ {
+ return feof($this->stream) ? false : fread($this->stream, $bytes);
+ }
+
+ /**
+ * Retrieve the file content in one go
+ * Once you retrieve the content you cannot use MimeMailParser_attachment::read()
+ *
+ * @return string
+ */
+ public function getContent()
+ {
+ if ($this->content === null) {
+ fseek($this->stream, 0);
+ while (($buf = $this->read()) !== false) {
+ $this->content .= $buf;
+ }
+ }
+
+ return $this->content;
+ }
+
+ /**
+ * Get mime part string for this attachment
+ *
+ * @return string
+ */
+ public function getMimePartStr()
+ {
+ return $this->mimePartStr;
+ }
+
+ /**
+ * Save the attachment individually
+ *
+ * @param string $attach_dir
+ * @param string $filenameStrategy
+ *
+ * @return string
+ */
+ public function save(
+ $attach_dir,
+ $filenameStrategy = Parser::ATTACHMENT_DUPLICATE_SUFFIX
+ ) {
+ $attach_dir = rtrim($attach_dir, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR;
+ if (!is_dir($attach_dir)) {
+ mkdir($attach_dir);
+ }
+
+ // Determine filename
+ switch ($filenameStrategy) {
+ case Parser::ATTACHMENT_RANDOM_FILENAME:
+ $fileInfo = pathinfo($this->getFilename());
+ $extension = empty($fileInfo['extension']) ? '' : '.'.$fileInfo['extension'];
+ $attachment_path = $attach_dir.uniqid().$extension;
+ break;
+ case Parser::ATTACHMENT_DUPLICATE_THROW:
+ case Parser::ATTACHMENT_DUPLICATE_SUFFIX:
+ $attachment_path = $attach_dir.$this->getFilename();
+ break;
+ default:
+ throw new Exception('Invalid filename strategy argument provided.');
+ }
+
+ // Handle duplicate filename
+ if (file_exists($attachment_path)) {
+ switch ($filenameStrategy) {
+ case Parser::ATTACHMENT_DUPLICATE_THROW:
+ throw new Exception('Could not create file for attachment: duplicate filename.');
+ case Parser::ATTACHMENT_DUPLICATE_SUFFIX:
+ $attachment_path = $this->suffixFileName($attachment_path);
+ break;
+ }
+ }
+
+ /** @var resource $fp */
+ if ($fp = fopen($attachment_path, 'w')) {
+ while ($bytes = $this->read()) {
+ fwrite($fp, $bytes);
+ }
+ fclose($fp);
+ return realpath($attachment_path);
+ } else {
+ throw new Exception('Could not write attachments. Your directory may be unwritable by PHP.');
+ }
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Charset.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Charset.php
new file mode 100644
index 0000000..cd219f2
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Charset.php
@@ -0,0 +1,370 @@
+<?php namespace PhpMimeMailParser;
+
+use PhpMimeMailParser\Contracts\CharsetManager;
+
+class Charset implements CharsetManager
+{
+ /**
+ * Charset Aliases
+ */
+ private $charsetAlias = [
+ 'ascii' => 'us-ascii',
+ 'us-ascii' => 'us-ascii',
+ 'ansi_x3.4-1968' => 'us-ascii',
+ '646' => 'us-ascii',
+ 'iso-8859-1' => 'iso-8859-1',
+ 'iso-8859-2' => 'iso-8859-2',
+ 'iso-8859-3' => 'iso-8859-3',
+ 'iso-8859-4' => 'iso-8859-4',
+ 'iso-8859-5' => 'iso-8859-5',
+ 'iso-8859-6' => 'iso-8859-6',
+ 'iso-8859-6-i' => 'iso-8859-6-i',
+ 'iso-8859-6-e' => 'iso-8859-6-e',
+ 'iso-8859-7' => 'iso-8859-7',
+ 'iso-8859-8' => 'iso-8859-8',
+ 'iso-8859-8-i' => 'iso-8859-8',
+ 'iso-8859-8-e' => 'iso-8859-8-e',
+ 'iso-8859-9' => 'iso-8859-9',
+ 'iso-8859-10' => 'iso-8859-10',
+ 'iso-8859-11' => 'iso-8859-11',
+ 'iso-8859-13' => 'iso-8859-13',
+ 'iso-8859-14' => 'iso-8859-14',
+ 'iso-8859-15' => 'iso-8859-15',
+ 'iso-8859-16' => 'iso-8859-16',
+ 'iso-ir-111' => 'iso-ir-111',
+ 'iso-2022-cn' => 'iso-2022-cn',
+ 'iso-2022-cn-ext' => 'iso-2022-cn',
+ 'iso-2022-kr' => 'iso-2022-kr',
+ 'iso-2022-jp' => 'iso-2022-jp',
+ 'utf-16be' => 'utf-16be',
+ 'utf-16le' => 'utf-16le',
+ 'utf-16' => 'utf-16',
+ 'windows-1250' => 'windows-1250',
+ 'windows-1251' => 'windows-1251',
+ 'windows-1252' => 'windows-1252',
+ 'windows-1253' => 'windows-1253',
+ 'windows-1254' => 'windows-1254',
+ 'windows-1255' => 'windows-1255',
+ 'windows-1256' => 'windows-1256',
+ 'windows-1257' => 'windows-1257',
+ 'windows-1258' => 'windows-1258',
+ 'ibm866' => 'ibm866',
+ 'ibm850' => 'ibm850',
+ 'ibm852' => 'ibm852',
+ 'ibm855' => 'ibm855',
+ 'ibm857' => 'ibm857',
+ 'ibm862' => 'ibm862',
+ 'ibm864' => 'ibm864',
+ 'utf-8' => 'utf-8',
+ 'utf-7' => 'utf-7',
+ 'shift_jis' => 'shift_jis',
+ 'big5' => 'big5',
+ 'euc-jp' => 'euc-jp',
+ 'euc-kr' => 'euc-kr',
+ 'gb2312' => 'gb2312',
+ 'gb18030' => 'gb18030',
+ 'viscii' => 'viscii',
+ 'koi8-r' => 'koi8-r',
+ 'koi8_r' => 'koi8-r',
+ 'cskoi8r' => 'koi8-r',
+ 'koi' => 'koi8-r',
+ 'koi8' => 'koi8-r',
+ 'koi8-u' => 'koi8-u',
+ 'tis-620' => 'tis-620',
+ 't.61-8bit' => 't.61-8bit',
+ 'hz-gb-2312' => 'hz-gb-2312',
+ 'big5-hkscs' => 'big5-hkscs',
+ 'gbk' => 'gbk',
+ 'cns11643' => 'x-euc-tw',
+ 'x-imap4-modified-utf7' => 'x-imap4-modified-utf7',
+ 'x-euc-tw' => 'x-euc-tw',
+ 'x-mac-ce' => 'macce',
+ 'x-mac-turkish' => 'macturkish',
+ 'x-mac-greek' => 'macgreek',
+ 'x-mac-icelandic' => 'macicelandic',
+ 'x-mac-croatian' => 'maccroatian',
+ 'x-mac-romanian' => 'macromanian',
+ 'x-mac-cyrillic' => 'maccyrillic',
+ 'x-mac-ukrainian' => 'macukrainian',
+ 'x-mac-hebrew' => 'machebrew',
+ 'x-mac-arabic' => 'macarabic',
+ 'x-mac-farsi' => 'macfarsi',
+ 'x-mac-devanagari' => 'macdevanagari',
+ 'x-mac-gujarati' => 'macgujarati',
+ 'x-mac-gurmukhi' => 'macgurmukhi',
+ 'armscii-8' => 'armscii-8',
+ 'x-viet-tcvn5712' => 'x-viet-tcvn5712',
+ 'x-viet-vps' => 'x-viet-vps',
+ 'iso-10646-ucs-2' => 'utf-16be',
+ 'x-iso-10646-ucs-2-be' => 'utf-16be',
+ 'x-iso-10646-ucs-2-le' => 'utf-16le',
+ 'x-user-defined' => 'x-user-defined',
+ 'x-johab' => 'x-johab',
+ 'latin1' => 'iso-8859-1',
+ 'iso_8859-1' => 'iso-8859-1',
+ 'iso8859-1' => 'iso-8859-1',
+ 'iso8859-2' => 'iso-8859-2',
+ 'iso8859-3' => 'iso-8859-3',
+ 'iso8859-4' => 'iso-8859-4',
+ 'iso8859-5' => 'iso-8859-5',
+ 'iso8859-6' => 'iso-8859-6',
+ 'iso8859-7' => 'iso-8859-7',
+ 'iso8859-8' => 'iso-8859-8',
+ 'iso8859-9' => 'iso-8859-9',
+ 'iso8859-10' => 'iso-8859-10',
+ 'iso8859-11' => 'iso-8859-11',
+ 'iso8859-13' => 'iso-8859-13',
+ 'iso8859-14' => 'iso-8859-14',
+ 'iso8859-15' => 'iso-8859-15',
+ 'iso_8859-1:1987' => 'iso-8859-1',
+ 'iso-ir-100' => 'iso-8859-1',
+ 'l1' => 'iso-8859-1',
+ 'ibm819' => 'iso-8859-1',
+ 'cp819' => 'iso-8859-1',
+ 'csisolatin1' => 'iso-8859-1',
+ 'latin2' => 'iso-8859-2',
+ 'iso_8859-2' => 'iso-8859-2',
+ 'iso_8859-2:1987' => 'iso-8859-2',
+ 'iso-ir-101' => 'iso-8859-2',
+ 'l2' => 'iso-8859-2',
+ 'csisolatin2' => 'iso-8859-2',
+ 'latin3' => 'iso-8859-3',
+ 'iso_8859-3' => 'iso-8859-3',
+ 'iso_8859-3:1988' => 'iso-8859-3',
+ 'iso-ir-109' => 'iso-8859-3',
+ 'l3' => 'iso-8859-3',
+ 'csisolatin3' => 'iso-8859-3',
+ 'latin4' => 'iso-8859-4',
+ 'iso_8859-4' => 'iso-8859-4',
+ 'iso_8859-4:1988' => 'iso-8859-4',
+ 'iso-ir-110' => 'iso-8859-4',
+ 'l4' => 'iso-8859-4',
+ 'csisolatin4' => 'iso-8859-4',
+ 'cyrillic' => 'iso-8859-5',
+ 'iso_8859-5' => 'iso-8859-5',
+ 'iso_8859-5:1988' => 'iso-8859-5',
+ 'iso-ir-144' => 'iso-8859-5',
+ 'csisolatincyrillic' => 'iso-8859-5',
+ 'arabic' => 'iso-8859-6',
+ 'iso_8859-6' => 'iso-8859-6',
+ 'iso_8859-6:1987' => 'iso-8859-6',
+ 'iso-ir-127' => 'iso-8859-6',
+ 'ecma-114' => 'iso-8859-6',
+ 'asmo-708' => 'iso-8859-6',
+ 'csisolatinarabic' => 'iso-8859-6',
+ 'csiso88596i' => 'iso-8859-6-i',
+ 'csiso88596e' => 'iso-8859-6-e',
+ 'greek' => 'iso-8859-7',
+ 'greek8' => 'iso-8859-7',
+ 'sun_eu_greek' => 'iso-8859-7',
+ 'iso_8859-7' => 'iso-8859-7',
+ 'iso_8859-7:1987' => 'iso-8859-7',
+ 'iso-ir-126' => 'iso-8859-7',
+ 'elot_928' => 'iso-8859-7',
+ 'ecma-118' => 'iso-8859-7',
+ 'csisolatingreek' => 'iso-8859-7',
+ 'hebrew' => 'iso-8859-8',
+ 'iso_8859-8' => 'iso-8859-8',
+ 'visual' => 'iso-8859-8',
+ 'iso_8859-8:1988' => 'iso-8859-8',
+ 'iso-ir-138' => 'iso-8859-8',
+ 'csisolatinhebrew' => 'iso-8859-8',
+ 'csiso88598i' => 'iso-8859-8',
+ 'iso-8859-8i' => 'iso-8859-8',
+ 'logical' => 'iso-8859-8',
+ 'csiso88598e' => 'iso-8859-8-e',
+ 'latin5' => 'iso-8859-9',
+ 'iso_8859-9' => 'iso-8859-9',
+ 'iso_8859-9:1989' => 'iso-8859-9',
+ 'iso-ir-148' => 'iso-8859-9',
+ 'l5' => 'iso-8859-9',
+ 'csisolatin5' => 'iso-8859-9',
+ 'unicode-1-1-utf-8' => 'utf-8',
+ 'utf8' => 'utf-8',
+ 'x-sjis' => 'shift_jis',
+ 'shift-jis' => 'shift_jis',
+ 'ms_kanji' => 'shift_jis',
+ 'csshiftjis' => 'shift_jis',
+ 'windows-31j' => 'shift_jis',
+ 'cp932' => 'shift_jis',
+ 'sjis' => 'shift_jis',
+ 'cseucpkdfmtjapanese' => 'euc-jp',
+ 'x-euc-jp' => 'euc-jp',
+ 'csiso2022jp' => 'iso-2022-jp',
+ 'iso-2022-jp-2' => 'iso-2022-jp',
+ 'csiso2022jp2' => 'iso-2022-jp',
+ 'csbig5' => 'big5',
+ 'cn-big5' => 'big5',
+ 'x-x-big5' => 'big5',
+ 'zh_tw-big5' => 'big5',
+ 'cseuckr' => 'euc-kr',
+ 'ks_c_5601-1987' => 'euc-kr',
+ 'iso-ir-149' => 'euc-kr',
+ 'ks_c_5601-1989' => 'euc-kr',
+ 'ksc_5601' => 'euc-kr',
+ 'ksc5601' => 'euc-kr',
+ 'korean' => 'euc-kr',
+ 'csksc56011987' => 'euc-kr',
+ '5601' => 'euc-kr',
+ 'windows-949' => 'euc-kr',
+ 'gb_2312-80' => 'gb2312',
+ 'iso-ir-58' => 'gb2312',
+ 'chinese' => 'gb2312',
+ 'csiso58gb231280' => 'gb2312',
+ 'csgb2312' => 'gb2312',
+ 'zh_cn.euc' => 'gb2312',
+ 'gb_2312' => 'gb2312',
+ 'x-cp1250' => 'windows-1250',
+ 'x-cp1251' => 'windows-1251',
+ 'x-cp1252' => 'windows-1252',
+ 'x-cp1253' => 'windows-1253',
+ 'x-cp1254' => 'windows-1254',
+ 'x-cp1255' => 'windows-1255',
+ 'x-cp1256' => 'windows-1256',
+ 'x-cp1257' => 'windows-1257',
+ 'x-cp1258' => 'windows-1258',
+ 'windows-874' => 'windows-874',
+ 'ibm874' => 'windows-874',
+ 'dos-874' => 'windows-874',
+ 'macintosh' => 'macintosh',
+ 'x-mac-roman' => 'macintosh',
+ 'mac' => 'macintosh',
+ 'csmacintosh' => 'macintosh',
+ 'cp866' => 'ibm866',
+ 'cp-866' => 'ibm866',
+ '866' => 'ibm866',
+ 'csibm866' => 'ibm866',
+ 'cp850' => 'ibm850',
+ '850' => 'ibm850',
+ 'csibm850' => 'ibm850',
+ 'cp852' => 'ibm852',
+ '852' => 'ibm852',
+ 'csibm852' => 'ibm852',
+ 'cp855' => 'ibm855',
+ '855' => 'ibm855',
+ 'csibm855' => 'ibm855',
+ 'cp857' => 'ibm857',
+ '857' => 'ibm857',
+ 'csibm857' => 'ibm857',
+ 'cp862' => 'ibm862',
+ '862' => 'ibm862',
+ 'csibm862' => 'ibm862',
+ 'cp864' => 'ibm864',
+ '864' => 'ibm864',
+ 'csibm864' => 'ibm864',
+ 'ibm-864' => 'ibm864',
+ 't.61' => 't.61-8bit',
+ 'iso-ir-103' => 't.61-8bit',
+ 'csiso103t618bit' => 't.61-8bit',
+ 'x-unicode-2-0-utf-7' => 'utf-7',
+ 'unicode-2-0-utf-7' => 'utf-7',
+ 'unicode-1-1-utf-7' => 'utf-7',
+ 'csunicode11utf7' => 'utf-7',
+ 'csunicode' => 'utf-16be',
+ 'csunicode11' => 'utf-16be',
+ 'iso-10646-ucs-basic' => 'utf-16be',
+ 'csunicodeascii' => 'utf-16be',
+ 'iso-10646-unicode-latin1' => 'utf-16be',
+ 'csunicodelatin1' => 'utf-16be',
+ 'iso-10646' => 'utf-16be',
+ 'iso-10646-j-1' => 'utf-16be',
+ 'latin6' => 'iso-8859-10',
+ 'iso-ir-157' => 'iso-8859-10',
+ 'l6' => 'iso-8859-10',
+ 'csisolatin6' => 'iso-8859-10',
+ 'iso_8859-15' => 'iso-8859-15',
+ 'csisolatin9' => 'iso-8859-15',
+ 'l9' => 'iso-8859-15',
+ 'ecma-cyrillic' => 'iso-ir-111',
+ 'csiso111ecmacyrillic' => 'iso-ir-111',
+ 'csiso2022kr' => 'iso-2022-kr',
+ 'csviscii' => 'viscii',
+ 'zh_tw-euc' => 'x-euc-tw',
+ 'iso88591' => 'iso-8859-1',
+ 'iso88592' => 'iso-8859-2',
+ 'iso88593' => 'iso-8859-3',
+ 'iso88594' => 'iso-8859-4',
+ 'iso88595' => 'iso-8859-5',
+ 'iso88596' => 'iso-8859-6',
+ 'iso88597' => 'iso-8859-7',
+ 'iso88598' => 'iso-8859-8',
+ 'iso88599' => 'iso-8859-9',
+ 'iso885910' => 'iso-8859-10',
+ 'iso885911' => 'iso-8859-11',
+ 'iso885912' => 'iso-8859-12',
+ 'iso885913' => 'iso-8859-13',
+ 'iso885914' => 'iso-8859-14',
+ 'iso885915' => 'iso-8859-15',
+ 'tis620' => 'tis-620',
+ 'cp1250' => 'windows-1250',
+ 'cp1251' => 'windows-1251',
+ 'cp1252' => 'windows-1252',
+ 'cp1253' => 'windows-1253',
+ 'cp1254' => 'windows-1254',
+ 'cp1255' => 'windows-1255',
+ 'cp1256' => 'windows-1256',
+ 'cp1257' => 'windows-1257',
+ 'cp1258' => 'windows-1258',
+ 'x-gbk' => 'gbk',
+ 'windows-936' => 'gbk',
+ 'ansi-1251' => 'windows-1251',
+ ];
+
+ /**
+ * {@inheritdoc}
+ */
+ public function decodeCharset($encodedString, $charset)
+ {
+ $charset = $this->getCharsetAlias($charset);
+
+ if ($charset == 'utf-8' || $charset == 'us-ascii') {
+ return $encodedString;
+ }
+
+ if (function_exists('mb_convert_encoding')) {
+ if ($charset == 'iso-2022-jp') {
+ return mb_convert_encoding($encodedString, 'utf-8', 'iso-2022-jp-ms');
+ }
+
+ if (array_search($charset, $this->getSupportedEncodings())) {
+ return mb_convert_encoding($encodedString, 'utf-8', $charset);
+ }
+ }
+
+ return iconv($charset, 'utf-8//translit//ignore', $encodedString);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getCharsetAlias($charset)
+ {
+ $charset = strtolower($charset);
+
+ if (array_key_exists($charset, $this->charsetAlias)) {
+ return $this->charsetAlias[$charset];
+ }
+
+ return 'us-ascii';
+ }
+
+ private function getSupportedEncodings()
+ {
+ return
+ array_map(
+ 'strtolower',
+ array_unique(
+ array_merge(
+ $enc = mb_list_encodings(),
+ call_user_func_array(
+ 'array_merge',
+ array_map(
+ "mb_encoding_aliases",
+ $enc
+ )
+ )
+ )
+ )
+ );
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Contracts/CharsetManager.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Contracts/CharsetManager.php
new file mode 100644
index 0000000..660ec00
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Contracts/CharsetManager.php
@@ -0,0 +1,24 @@
+<?php namespace PhpMimeMailParser\Contracts;
+
+interface CharsetManager
+{
+
+ /**
+ * Decode the string from Charset
+ *
+ * @param string $encodedString The string in its original encoded state
+ * @param string $charset The Charset header of the part.
+ *
+ * @return string The decoded string
+ */
+ public function decodeCharset($encodedString, $charset);
+
+ /**
+ * Get charset alias
+ *
+ * @param string $charset .
+ *
+ * @return string The charset alias
+ */
+ public function getCharsetAlias($charset);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Contracts/Middleware.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Contracts/Middleware.php
new file mode 100644
index 0000000..69aed4f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Contracts/Middleware.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace PhpMimeMailParser\Contracts;
+
+use PhpMimeMailParser\MimePart;
+use PhpMimeMailParser\MiddlewareStack;
+
+/**
+ * Process Mime parts by either:
+ * processing the part or calling the $next MiddlewareStack
+ */
+interface Middleware
+{
+ /**
+ * Process a mime part, optionally delegating parsing to the $next MiddlewareStack
+ *
+ * @param MimePart $part
+ * @param MiddlewareStack $next
+ *
+ * @return MimePart
+ */
+ public function parse(MimePart $part, MiddlewareStack $next);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Exception.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Exception.php
new file mode 100644
index 0000000..cc537e2
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Exception.php
@@ -0,0 +1,8 @@
+<?php
+
+namespace PhpMimeMailParser;
+
+class Exception extends \RuntimeException
+{
+
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Middleware.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Middleware.php
new file mode 100644
index 0000000..19eb90a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Middleware.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace PhpMimeMailParser;
+
+/**
+ * Wraps a callable as a Middleware
+ */
+class Middleware implements Contracts\Middleware
+{
+ protected $parser;
+
+ /**
+ * Create a middleware using a callable $fn
+ *
+ * @param callable $fn
+ */
+ public function __construct(callable $fn)
+ {
+ $this->parser = $fn;
+ }
+
+ /**
+ * Process a mime part, optionally delegating parsing to the $next MiddlewareStack
+ */
+ public function parse(MimePart $part, MiddlewareStack $next)
+ {
+ return call_user_func($this->parser, $part, $next);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/MiddlewareStack.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/MiddlewareStack.php
new file mode 100644
index 0000000..3ef6da9
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/MiddlewareStack.php
@@ -0,0 +1,89 @@
+<?php
+
+namespace PhpMimeMailParser;
+
+use PhpMimeMailParser\Contracts\MiddleWare as MiddleWareContracts;
+
+/**
+ * A stack of middleware chained together by (MiddlewareStack $next)
+ */
+class MiddlewareStack
+{
+ /**
+ * Next MiddlewareStack in chain
+ *
+ * @var MiddlewareStack
+ */
+ protected $next;
+
+ /**
+ * Middleware in this MiddlewareStack
+ *
+ * @var Middleware
+ */
+ protected $middleware;
+
+ /**
+ * Construct the first middleware in this MiddlewareStack
+ * The next middleware is chained through $MiddlewareStack->add($Middleware)
+ *
+ * @param Middleware $middleware
+ */
+ public function __construct(MiddleWareContracts $middleware = null)
+ {
+ $this->middleware = $middleware;
+ }
+
+ /**
+ * Creates a chained middleware in MiddlewareStack
+ *
+ * @param Middleware $middleware
+ * @return MiddlewareStack Immutable MiddlewareStack
+ */
+ public function add(MiddleWareContracts $middleware)
+ {
+ $stack = new static($middleware);
+ $stack->next = $this;
+ return $stack;
+ }
+
+ /**
+ * Parses the MimePart by passing it through the Middleware
+ * @param MimePart $part
+ * @return MimePart
+ */
+ public function parse(MimePart $part)
+ {
+ if (!$this->middleware) {
+ return $part;
+ }
+ $part = call_user_func(array($this->middleware, 'parse'), $part, $this->next);
+ return $part;
+ }
+
+ /**
+ * Creates a MiddlewareStack based on an array of middleware
+ *
+ * @param Middleware[] $middlewares
+ * @return MiddlewareStack
+ */
+ public static function factory(array $middlewares = array())
+ {
+ $stack = new static;
+ foreach ($middlewares as $middleware) {
+ $stack = $stack->add($middleware);
+ }
+ return $stack;
+ }
+
+ /**
+ * Allow calling MiddlewareStack instance directly to invoke parse()
+ *
+ * @param MimePart $part
+ * @return MimePart
+ */
+ public function __invoke(MimePart $part)
+ {
+ return $this->parse($part);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/MimePart.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/MimePart.php
new file mode 100644
index 0000000..a7b3cb0
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/MimePart.php
@@ -0,0 +1,115 @@
+<?php
+
+namespace PhpMimeMailParser;
+
+/**
+ * Mime Part
+ * Represents the results of mailparse_msg_get_part_data()
+ *
+ * Note ArrayAccess::offsetSet() cannot modify deeply nestated arrays.
+ * When modifying use getPart() and setPart() for deep nested data modification
+ *
+ * @example
+ *
+ * $MimePart['headers']['from'] = 'modified@example.com' // fails
+ *
+ * // correct
+ * $part = $MimePart->getPart();
+ * $part['headers']['from'] = 'modified@example.com';
+ * $MimePart->setPart($part);
+ */
+class MimePart implements \ArrayAccess
+{
+ /**
+ * Internal mime part
+ *
+ * @var array
+ */
+ protected $part = array();
+
+ /**
+ * Immutable Part Id
+ *
+ * @var string
+ */
+ private $id;
+
+ /**
+ * Create a mime part
+ *
+ * @param array $part
+ * @param string $id
+ */
+ public function __construct($id, array $part)
+ {
+ $this->part = $part;
+ $this->id = $id;
+ }
+
+ /**
+ * Retrieve the part Id
+ *
+ * @return string
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Retrieve the part data
+ *
+ * @return array
+ */
+ public function getPart()
+ {
+ return $this->part;
+ }
+
+ /**
+ * Set the mime part data
+ *
+ * @param array $part
+ * @return void
+ */
+ public function setPart(array $part)
+ {
+ $this->part = $part;
+ }
+
+ /**
+ * ArrayAccess
+ */
+ public function offsetSet($offset, $value)
+ {
+ if (is_null($offset)) {
+ $this->part[] = $value;
+ return;
+ }
+ $this->part[$offset] = $value;
+ }
+
+ /**
+ * ArrayAccess
+ */
+ public function offsetExists($offset)
+ {
+ return isset($this->part[$offset]);
+ }
+
+ /**
+ * ArrayAccess
+ */
+ public function offsetUnset($offset)
+ {
+ unset($this->part[$offset]);
+ }
+
+ /**
+ * ArrayAccess
+ */
+ public function offsetGet($offset)
+ {
+ return isset($this->part[$offset]) ? $this->part[$offset] : null;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Parser.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Parser.php
new file mode 100644
index 0000000..6502b57
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Parser.php
@@ -0,0 +1,923 @@
+<?php
+
+namespace PhpMimeMailParser;
+
+use PhpMimeMailParser\Contracts\CharsetManager;
+
+/**
+ * Parser of php-mime-mail-parser
+ *
+ * Fully Tested Mailparse Extension Wrapper for PHP 5.4+
+ *
+ */
+class Parser
+{
+ /**
+ * Attachment filename argument option for ->saveAttachments().
+ */
+ const ATTACHMENT_DUPLICATE_THROW = 'DuplicateThrow';
+ const ATTACHMENT_DUPLICATE_SUFFIX = 'DuplicateSuffix';
+ const ATTACHMENT_RANDOM_FILENAME = 'RandomFilename';
+
+ /**
+ * PHP MimeParser Resource ID
+ *
+ * @var resource $resource
+ */
+ protected $resource;
+
+ /**
+ * A file pointer to email
+ *
+ * @var resource $stream
+ */
+ protected $stream;
+
+ /**
+ * A text of an email
+ *
+ * @var string $data
+ */
+ protected $data;
+
+ /**
+ * Parts of an email
+ *
+ * @var array $parts
+ */
+ protected $parts;
+
+ /**
+ * @var CharsetManager object
+ */
+ protected $charset;
+
+ /**
+ * Valid stream modes for reading
+ *
+ * @var array
+ */
+ protected static $readableModes = [
+ 'r', 'r+', 'w+', 'a+', 'x+', 'c+', 'rb', 'r+b', 'w+b', 'a+b',
+ 'x+b', 'c+b', 'rt', 'r+t', 'w+t', 'a+t', 'x+t', 'c+t'
+ ];
+
+ /**
+ * Stack of middleware registered to process data
+ *
+ * @var MiddlewareStack
+ */
+ protected $middlewareStack;
+
+ /**
+ * Parser constructor.
+ *
+ * @param CharsetManager|null $charset
+ */
+ public function __construct(CharsetManager $charset = null)
+ {
+ if ($charset == null) {
+ $charset = new Charset();
+ }
+
+ $this->charset = $charset;
+ $this->middlewareStack = new MiddlewareStack();
+ }
+
+ /**
+ * Free the held resources
+ *
+ * @return void
+ */
+ public function __destruct()
+ {
+ // clear the email file resource
+ if (is_resource($this->stream)) {
+ fclose($this->stream);
+ }
+ // clear the MailParse resource
+ if (is_resource($this->resource)) {
+ mailparse_msg_free($this->resource);
+ }
+ }
+
+ /**
+ * Set the file path we use to get the email text
+ *
+ * @param string $path File path to the MIME mail
+ *
+ * @return Parser MimeMailParser Instance
+ */
+ public function setPath($path)
+ {
+ if (is_writable($path)) {
+ $file = fopen($path, 'a+');
+ fseek($file, -1, SEEK_END);
+ if (fread($file, 1) != "\n") {
+ fwrite($file, PHP_EOL);
+ }
+ fclose($file);
+ }
+
+ // should parse message incrementally from file
+ $this->resource = mailparse_msg_parse_file($path);
+ $this->stream = fopen($path, 'r');
+ $this->parse();
+
+ return $this;
+ }
+
+ /**
+ * Set the Stream resource we use to get the email text
+ *
+ * @param resource $stream
+ *
+ * @return Parser MimeMailParser Instance
+ * @throws Exception
+ */
+ public function setStream($stream)
+ {
+ // streams have to be cached to file first
+ $meta = @stream_get_meta_data($stream);
+ if (!$meta || !$meta['mode'] || !in_array($meta['mode'], self::$readableModes, true) || $meta['eof']) {
+ throw new Exception(
+ 'setStream() expects parameter stream to be readable stream resource.'
+ );
+ }
+
+ /** @var resource $tmp_fp */
+ $tmp_fp = tmpfile();
+ if ($tmp_fp) {
+ while (!feof($stream)) {
+ fwrite($tmp_fp, fread($stream, 2028));
+ }
+
+ if (fread($tmp_fp, 1) != "\n") {
+ fwrite($tmp_fp, PHP_EOL);
+ }
+
+ fseek($tmp_fp, 0);
+ $this->stream = &$tmp_fp;
+ } else {
+ throw new Exception(
+ 'Could not create temporary files for attachments. Your tmp directory may be unwritable by PHP.'
+ );
+ }
+ fclose($stream);
+
+ $this->resource = mailparse_msg_create();
+ // parses the message incrementally (low memory usage but slower)
+ while (!feof($this->stream)) {
+ mailparse_msg_parse($this->resource, fread($this->stream, 2082));
+ }
+ $this->parse();
+
+ return $this;
+ }
+
+ /**
+ * Set the email text
+ *
+ * @param string $data
+ *
+ * @return Parser MimeMailParser Instance
+ */
+ public function setText($data)
+ {
+ if (empty($data)) {
+ throw new Exception('You must not call MimeMailParser::setText with an empty string parameter');
+ }
+
+ if (substr($data, -1) != "\n") {
+ $data = $data.PHP_EOL;
+ }
+
+ $this->resource = mailparse_msg_create();
+ // does not parse incrementally, fast memory hog might explode
+ mailparse_msg_parse($this->resource, $data);
+ $this->data = $data;
+ $this->parse();
+
+ return $this;
+ }
+
+ /**
+ * Parse the Message into parts
+ *
+ * @return void
+ */
+ protected function parse()
+ {
+ $structure = mailparse_msg_get_structure($this->resource);
+ $this->parts = [];
+ foreach ($structure as $part_id) {
+ $part = mailparse_msg_get_part($this->resource, $part_id);
+ $part_data = mailparse_msg_get_part_data($part);
+ $mimePart = new MimePart($part_id, $part_data);
+ // let each middleware parse the part before saving
+ $this->parts[$part_id] = $this->middlewareStack->parse($mimePart)->getPart();
+ }
+ }
+
+ /**
+ * Retrieve a specific Email Header, without charset conversion.
+ *
+ * @param string $name Header name (case-insensitive)
+ *
+ * @return string|bool
+ * @throws Exception
+ */
+ public function getRawHeader($name)
+ {
+ $name = strtolower($name);
+ if (isset($this->parts[1])) {
+ $headers = $this->getPart('headers', $this->parts[1]);
+
+ return isset($headers[$name]) ? $headers[$name] : false;
+ } else {
+ throw new Exception(
+ 'setPath() or setText() or setStream() must be called before retrieving email headers.'
+ );
+ }
+ }
+
+ /**
+ * Retrieve a specific Email Header
+ *
+ * @param string $name Header name (case-insensitive)
+ *
+ * @return string|bool
+ */
+ public function getHeader($name)
+ {
+ $rawHeader = $this->getRawHeader($name);
+ if ($rawHeader === false) {
+ return false;
+ }
+
+ return $this->decodeHeader($rawHeader);
+ }
+
+ /**
+ * Retrieve all mail headers
+ *
+ * @return array
+ * @throws Exception
+ */
+ public function getHeaders()
+ {
+ if (isset($this->parts[1])) {
+ $headers = $this->getPart('headers', $this->parts[1]);
+ foreach ($headers as &$value) {
+ if (is_array($value)) {
+ foreach ($value as &$v) {
+ $v = $this->decodeSingleHeader($v);
+ }
+ } else {
+ $value = $this->decodeSingleHeader($value);
+ }
+ }
+
+ return $headers;
+ } else {
+ throw new Exception(
+ 'setPath() or setText() or setStream() must be called before retrieving email headers.'
+ );
+ }
+ }
+
+ /**
+ * Retrieve the raw mail headers as a string
+ *
+ * @return string
+ * @throws Exception
+ */
+ public function getHeadersRaw()
+ {
+ if (isset($this->parts[1])) {
+ return $this->getPartHeader($this->parts[1]);
+ } else {
+ throw new Exception(
+ 'setPath() or setText() or setStream() must be called before retrieving email headers.'
+ );
+ }
+ }
+
+ /**
+ * Retrieve the raw Header of a MIME part
+ *
+ * @return String
+ * @param $part Object
+ * @throws Exception
+ */
+ protected function getPartHeader(&$part)
+ {
+ $header = '';
+ if ($this->stream) {
+ $header = $this->getPartHeaderFromFile($part);
+ } elseif ($this->data) {
+ $header = $this->getPartHeaderFromText($part);
+ }
+ return $header;
+ }
+
+ /**
+ * Retrieve the Header from a MIME part from file
+ *
+ * @return String Mime Header Part
+ * @param $part Array
+ */
+ protected function getPartHeaderFromFile(&$part)
+ {
+ $start = $part['starting-pos'];
+ $end = $part['starting-pos-body'];
+ fseek($this->stream, $start, SEEK_SET);
+ $header = fread($this->stream, $end - $start);
+ return $header;
+ }
+
+ /**
+ * Retrieve the Header from a MIME part from text
+ *
+ * @return String Mime Header Part
+ * @param $part Array
+ */
+ protected function getPartHeaderFromText(&$part)
+ {
+ $start = $part['starting-pos'];
+ $end = $part['starting-pos-body'];
+ $header = substr($this->data, $start, $end - $start);
+ return $header;
+ }
+
+ /**
+ * Checks whether a given part ID is a child of another part
+ * eg. an RFC822 attachment may have one or more text parts
+ *
+ * @param string $partId
+ * @param string $parentPartId
+ * @return bool
+ */
+ protected function partIdIsChildOfPart($partId, $parentPartId)
+ {
+ $parentPartId = $parentPartId.'.';
+ return substr($partId, 0, strlen($parentPartId)) == $parentPartId;
+ }
+
+ /**
+ * Whether the given part ID is a child of any attachment part in the message.
+ *
+ * @param string $checkPartId
+ * @return bool
+ */
+ protected function partIdIsChildOfAnAttachment($checkPartId)
+ {
+ foreach ($this->parts as $partId => $part) {
+ if ($this->getPart('content-disposition', $part) == 'attachment') {
+ if ($this->partIdIsChildOfPart($checkPartId, $partId)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Returns the email message body in the specified format
+ *
+ * @param string $type text, html or htmlEmbedded
+ *
+ * @return string Body
+ * @throws Exception
+ */
+ public function getMessageBody($type = 'text')
+ {
+ $mime_types = [
+ 'text' => 'text/plain',
+ 'html' => 'text/html',
+ 'htmlEmbedded' => 'text/html',
+ ];
+
+ if (in_array($type, array_keys($mime_types))) {
+ $part_type = $type === 'htmlEmbedded' ? 'html' : $type;
+ $inline_parts = $this->getInlineParts($part_type);
+ $body = empty($inline_parts) ? '' : $inline_parts[0];
+ } else {
+ throw new Exception(
+ 'Invalid type specified for getMessageBody(). Expected: text, html or htmlEmbeded.'
+ );
+ }
+
+ if ($type == 'htmlEmbedded') {
+ $attachments = $this->getAttachments();
+ foreach ($attachments as $attachment) {
+ if ($attachment->getContentID() != '') {
+ $body = str_replace(
+ '"cid:'.$attachment->getContentID().'"',
+ '"'.$this->getEmbeddedData($attachment->getContentID()).'"',
+ $body
+ );
+ }
+ }
+ }
+
+ return $body;
+ }
+
+ /**
+ * Returns the embedded data structure
+ *
+ * @param string $contentId Content-Id
+ *
+ * @return string
+ */
+ protected function getEmbeddedData($contentId)
+ {
+ foreach ($this->parts as $part) {
+ if ($this->getPart('content-id', $part) == $contentId) {
+ $embeddedData = 'data:';
+ $embeddedData .= $this->getPart('content-type', $part);
+ $embeddedData .= ';'.$this->getPart('transfer-encoding', $part);
+ $embeddedData .= ','.$this->getPartBody($part);
+ return $embeddedData;
+ }
+ }
+ return '';
+ }
+
+ /**
+ * Return an array with the following keys display, address, is_group
+ *
+ * @param string $name Header name (case-insensitive)
+ *
+ * @return array
+ */
+ public function getAddresses($name)
+ {
+ $value = $this->getRawHeader($name);
+ $value = (is_array($value)) ? $value[0] : $value;
+ $addresses = mailparse_rfc822_parse_addresses($value);
+ foreach ($addresses as $i => $item) {
+ $addresses[$i]['display'] = $this->decodeHeader($item['display']);
+ }
+ return $addresses;
+ }
+
+ /**
+ * Returns the attachments contents in order of appearance
+ *
+ * @return Attachment[]
+ */
+ public function getInlineParts($type = 'text')
+ {
+ $inline_parts = [];
+ $mime_types = [
+ 'text' => 'text/plain',
+ 'html' => 'text/html',
+ ];
+
+ if (!in_array($type, array_keys($mime_types))) {
+ throw new Exception('Invalid type specified for getInlineParts(). "type" can either be text or html.');
+ }
+
+ foreach ($this->parts as $partId => $part) {
+ if ($this->getPart('content-type', $part) == $mime_types[$type]
+ && $this->getPart('content-disposition', $part) != 'attachment'
+ && !$this->partIdIsChildOfAnAttachment($partId)
+ ) {
+ $headers = $this->getPart('headers', $part);
+ $encodingType = array_key_exists('content-transfer-encoding', $headers) ?
+ $headers['content-transfer-encoding'] : '';
+ $undecoded_body = $this->decodeContentTransfer($this->getPartBody($part), $encodingType);
+ $inline_parts[] = $this->charset->decodeCharset($undecoded_body, $this->getPartCharset($part));
+ }
+ }
+
+ return $inline_parts;
+ }
+
+ /**
+ * Returns the attachments contents in order of appearance
+ *
+ * @return Attachment[]
+ */
+ public function getAttachments($include_inline = true)
+ {
+ $attachments = [];
+ $dispositions = $include_inline ? ['attachment', 'inline'] : ['attachment'];
+ $non_attachment_types = ['text/plain', 'text/html'];
+ $nonameIter = 0;
+
+ foreach ($this->parts as $part) {
+ $disposition = $this->getPart('content-disposition', $part);
+ $filename = 'noname';
+
+ if (isset($part['disposition-filename'])) {
+ $filename = $this->decodeHeader($part['disposition-filename']);
+ } elseif (isset($part['content-name'])) {
+ // if we have no disposition but we have a content-name, it's a valid attachment.
+ // we simulate the presence of an attachment disposition with a disposition filename
+ $filename = $this->decodeHeader($part['content-name']);
+ $disposition = 'attachment';
+ } elseif (in_array($part['content-type'], $non_attachment_types, true)
+ && $disposition !== 'attachment') {
+ // it is a message body, no attachment
+ continue;
+ } elseif (substr($part['content-type'], 0, 10) !== 'multipart/'
+ && $part['content-type'] !== 'text/plain; (error)') {
+ // if we cannot get it by getMessageBody(), we assume it is an attachment
+ $disposition = 'attachment';
+ }
+ if (in_array($disposition, ['attachment', 'inline']) === false && !empty($disposition)) {
+ $disposition = 'attachment';
+ }
+
+ if (in_array($disposition, $dispositions) === true) {
+ if ($filename == 'noname') {
+ $nonameIter++;
+ $filename = 'noname'.$nonameIter;
+ } else {
+ // Escape all potentially unsafe characters from the filename
+ $filename = preg_replace('((^\.)|\/|[\n|\r|\n\r]|(\.$))', '_', $filename);
+ }
+
+ $headersAttachments = $this->getPart('headers', $part);
+ $contentidAttachments = $this->getPart('content-id', $part);
+
+ $attachmentStream = $this->getAttachmentStream($part);
+ $mimePartStr = $this->getPartComplete($part);
+
+ $attachments[] = new Attachment(
+ $filename,
+ $this->getPart('content-type', $part),
+ $attachmentStream,
+ $disposition,
+ $contentidAttachments,
+ $headersAttachments,
+ $mimePartStr
+ );
+ }
+ }
+
+ return $attachments;
+ }
+
+ /**
+ * Save attachments in a folder
+ *
+ * @param string $attach_dir directory
+ * @param bool $include_inline
+ * @param string $filenameStrategy How to generate attachment filenames
+ *
+ * @return array Saved attachments paths
+ * @throws Exception
+ */
+ public function saveAttachments(
+ $attach_dir,
+ $include_inline = true,
+ $filenameStrategy = self::ATTACHMENT_DUPLICATE_SUFFIX
+ ) {
+ $attachments = $this->getAttachments($include_inline);
+
+ $attachments_paths = [];
+ foreach ($attachments as $attachment) {
+ $attachments_paths[] = $attachment->save($attach_dir, $filenameStrategy);
+ }
+
+ return $attachments_paths;
+ }
+
+ /**
+ * Read the attachment Body and save temporary file resource
+ *
+ * @param array $part
+ *
+ * @return resource Mime Body Part
+ * @throws Exception
+ */
+ protected function getAttachmentStream(&$part)
+ {
+ /** @var resource $temp_fp */
+ $temp_fp = tmpfile();
+
+ $headers = $this->getPart('headers', $part);
+ $encodingType = array_key_exists('content-transfer-encoding', $headers) ?
+ $headers['content-transfer-encoding'] : '';
+
+ if ($temp_fp) {
+ if ($this->stream) {
+ $start = $part['starting-pos-body'];
+ $end = $part['ending-pos-body'];
+ fseek($this->stream, $start, SEEK_SET);
+ $len = $end - $start;
+ $written = 0;
+ while ($written < $len) {
+ $write = $len;
+ $data = fread($this->stream, $write);
+ fwrite($temp_fp, $this->decodeContentTransfer($data, $encodingType));
+ $written += $write;
+ }
+ } elseif ($this->data) {
+ $attachment = $this->decodeContentTransfer($this->getPartBodyFromText($part), $encodingType);
+ fwrite($temp_fp, $attachment, strlen($attachment));
+ }
+ fseek($temp_fp, 0, SEEK_SET);
+ } else {
+ throw new Exception(
+ 'Could not create temporary files for attachments. Your tmp directory may be unwritable by PHP.'
+ );
+ }
+
+ return $temp_fp;
+ }
+
+ /**
+ * Decode the string from Content-Transfer-Encoding
+ *
+ * @param string $encodedString The string in its original encoded state
+ * @param string $encodingType The encoding type from the Content-Transfer-Encoding header of the part.
+ *
+ * @return string The decoded string
+ */
+ protected function decodeContentTransfer($encodedString, $encodingType)
+ {
+ if (is_array($encodingType)) {
+ $encodingType = $encodingType[0];
+ }
+
+ $encodingType = strtolower($encodingType);
+ if ($encodingType == 'base64') {
+ return base64_decode($encodedString);
+ } elseif ($encodingType == 'quoted-printable') {
+ return quoted_printable_decode($encodedString);
+ } else {
+ return $encodedString;
+ }
+ }
+
+ /**
+ * $input can be a string or array
+ *
+ * @param string|array $input
+ *
+ * @return string
+ */
+ protected function decodeHeader($input)
+ {
+ //Sometimes we have 2 label From so we take only the first
+ if (is_array($input)) {
+ return $this->decodeSingleHeader($input[0]);
+ }
+
+ return $this->decodeSingleHeader($input);
+ }
+
+ /**
+ * Decodes a single header (= string)
+ *
+ * @param string $input
+ *
+ * @return string
+ */
+ protected function decodeSingleHeader($input)
+ {
+ // For each encoded-word...
+ while (preg_match('/(=\?([^?]+)\?(q|b)\?([^?]*)\?=)((\s+)=\?)?/i', $input, $matches)) {
+ $encoded = $matches[1];
+ $charset = $matches[2];
+ $encoding = $matches[3];
+ $text = $matches[4];
+ $space = isset($matches[6]) ? $matches[6] : '';
+
+ switch (strtolower($encoding)) {
+ case 'b':
+ $text = $this->decodeContentTransfer($text, 'base64');
+ break;
+
+ case 'q':
+ $text = str_replace('_', ' ', $text);
+ preg_match_all('/=([a-f0-9]{2})/i', $text, $matches);
+ foreach ($matches[1] as $value) {
+ $text = str_replace('='.$value, chr(hexdec($value)), $text);
+ }
+ break;
+ }
+
+ $text = $this->charset->decodeCharset($text, $this->charset->getCharsetAlias($charset));
+ $input = str_replace($encoded.$space, $text, $input);
+ }
+
+ return $input;
+ }
+
+ /**
+ * Return the charset of the MIME part
+ *
+ * @param array $part
+ *
+ * @return string
+ */
+ protected function getPartCharset($part)
+ {
+ if (isset($part['charset'])) {
+ return $this->charset->getCharsetAlias($part['charset']);
+ } else {
+ return 'us-ascii';
+ }
+ }
+
+ /**
+ * Retrieve a specified MIME part
+ *
+ * @param string $type
+ * @param array $parts
+ *
+ * @return string|array
+ */
+ protected function getPart($type, $parts)
+ {
+ return (isset($parts[$type])) ? $parts[$type] : false;
+ }
+
+ /**
+ * Retrieve the Body of a MIME part
+ *
+ * @param array $part
+ *
+ * @return string
+ */
+ protected function getPartBody(&$part)
+ {
+ $body = '';
+ if ($this->stream) {
+ $body = $this->getPartBodyFromFile($part);
+ } elseif ($this->data) {
+ $body = $this->getPartBodyFromText($part);
+ }
+
+ return $body;
+ }
+
+ /**
+ * Retrieve the Body from a MIME part from file
+ *
+ * @param array $part
+ *
+ * @return string Mime Body Part
+ */
+ protected function getPartBodyFromFile(&$part)
+ {
+ $start = $part['starting-pos-body'];
+ $end = $part['ending-pos-body'];
+ $body = '';
+ if ($end - $start > 0) {
+ fseek($this->stream, $start, SEEK_SET);
+ $body = fread($this->stream, $end - $start);
+ }
+
+ return $body;
+ }
+
+ /**
+ * Retrieve the Body from a MIME part from text
+ *
+ * @param array $part
+ *
+ * @return string Mime Body Part
+ */
+ protected function getPartBodyFromText(&$part)
+ {
+ $start = $part['starting-pos-body'];
+ $end = $part['ending-pos-body'];
+
+ return substr($this->data, $start, $end - $start);
+ }
+
+ /**
+ * Retrieve the content of a MIME part
+ *
+ * @param array $part
+ *
+ * @return string
+ */
+ protected function getPartComplete(&$part)
+ {
+ $body = '';
+ if ($this->stream) {
+ $body = $this->getPartFromFile($part);
+ } elseif ($this->data) {
+ $body = $this->getPartFromText($part);
+ }
+
+ return $body;
+ }
+
+ /**
+ * Retrieve the content from a MIME part from file
+ *
+ * @param array $part
+ *
+ * @return string Mime Content
+ */
+ protected function getPartFromFile(&$part)
+ {
+ $start = $part['starting-pos'];
+ $end = $part['ending-pos'];
+ $body = '';
+ if ($end - $start > 0) {
+ fseek($this->stream, $start, SEEK_SET);
+ $body = fread($this->stream, $end - $start);
+ }
+
+ return $body;
+ }
+
+ /**
+ * Retrieve the content from a MIME part from text
+ *
+ * @param array $part
+ *
+ * @return string Mime Content
+ */
+ protected function getPartFromText(&$part)
+ {
+ $start = $part['starting-pos'];
+ $end = $part['ending-pos'];
+
+ return substr($this->data, $start, $end - $start);
+ }
+
+ /**
+ * Retrieve the resource
+ *
+ * @return resource resource
+ */
+ public function getResource()
+ {
+ return $this->resource;
+ }
+
+ /**
+ * Retrieve the file pointer to email
+ *
+ * @return resource stream
+ */
+ public function getStream()
+ {
+ return $this->stream;
+ }
+
+ /**
+ * Retrieve the text of an email
+ *
+ * @return string data
+ */
+ public function getData()
+ {
+ return $this->data;
+ }
+
+ /**
+ * Retrieve the parts of an email
+ *
+ * @return array parts
+ */
+ public function getParts()
+ {
+ return $this->parts;
+ }
+
+ /**
+ * Retrieve the charset manager object
+ *
+ * @return CharsetManager charset
+ */
+ public function getCharset()
+ {
+ return $this->charset;
+ }
+
+ /**
+ * Add a middleware to the parser MiddlewareStack
+ * Each middleware is invoked when:
+ * a MimePart is retrieved by mailparse_msg_get_part_data() during $this->parse()
+ * The middleware will receive MimePart $part and the next MiddlewareStack $next
+ *
+ * Eg:
+ *
+ * $Parser->addMiddleware(function(MimePart $part, MiddlewareStack $next) {
+ * // do something with the $part
+ * return $next($part);
+ * });
+ *
+ * @param callable $middleware Plain Function or Middleware Instance to execute
+ * @return void
+ */
+ public function addMiddleware(callable $middleware)
+ {
+ if (!$middleware instanceof Middleware) {
+ $middleware = new Middleware($middleware);
+ }
+ $this->middlewareStack = $this->middlewareStack->add($middleware);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/COMMITMENT b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/COMMITMENT
new file mode 100644
index 0000000..a687e0d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/COMMITMENT
@@ -0,0 +1,46 @@
+GPL Cooperation Commitment
+Version 1.0
+
+Before filing or continuing to prosecute any legal proceeding or claim
+(other than a Defensive Action) arising from termination of a Covered
+License, we commit to extend to the person or entity ('you') accused
+of violating the Covered License the following provisions regarding
+cure and reinstatement, taken from GPL version 3. As used here, the
+term 'this License' refers to the specific Covered License being
+enforced.
+
+ However, if you cease all violation of this License, then your
+ license from a particular copyright holder is reinstated (a)
+ provisionally, unless and until the copyright holder explicitly
+ and finally terminates your license, and (b) permanently, if the
+ copyright holder fails to notify you of the violation by some
+ reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+ reinstated permanently if the copyright holder notifies you of the
+ violation by some reasonable means, this is the first time you
+ have received notice of violation of this License (for any work)
+ from that copyright holder, and you cure the violation prior to 30
+ days after your receipt of the notice.
+
+We intend this Commitment to be irrevocable, and binding and
+enforceable against us and assignees of or successors to our
+copyrights.
+
+Definitions
+
+'Covered License' means the GNU General Public License, version 2
+(GPLv2), the GNU Lesser General Public License, version 2.1
+(LGPLv2.1), or the GNU Library General Public License, version 2
+(LGPLv2), all as published by the Free Software Foundation.
+
+'Defensive Action' means a legal proceeding or claim that We bring
+against you in response to a prior proceeding or claim initiated by
+you or your affiliate.
+
+'We' means each contributor to this repository as of the date of
+inclusion of this file, including subsidiaries of a corporate
+contributor.
+
+This work is available under a Creative Commons Attribution-ShareAlike
+4.0 International license (https://creativecommons.org/licenses/by-sa/4.0/).
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/LICENSE b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/LICENSE
new file mode 100644
index 0000000..f166cc5
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/LICENSE
@@ -0,0 +1,502 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/README.md b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/README.md
new file mode 100644
index 0000000..c287e30
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/README.md
@@ -0,0 +1,221 @@
+![PHPMailer](https://raw.github.com/PHPMailer/PHPMailer/master/examples/images/phpmailer.png)
+
+# PHPMailer - A full-featured email creation and transfer class for PHP
+
+Build status: [![Build Status](https://travis-ci.org/PHPMailer/PHPMailer.svg)](https://travis-ci.org/PHPMailer/PHPMailer)
+[![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/PHPMailer/PHPMailer/badges/quality-score.png?s=3758e21d279becdf847a557a56a3ed16dfec9d5d)](https://scrutinizer-ci.com/g/PHPMailer/PHPMailer/)
+[![Code Coverage](https://scrutinizer-ci.com/g/PHPMailer/PHPMailer/badges/coverage.png?s=3fe6ca5fe8cd2cdf96285756e42932f7ca256962)](https://scrutinizer-ci.com/g/PHPMailer/PHPMailer/)
+
+[![Latest Stable Version](https://poser.pugx.org/phpmailer/phpmailer/v/stable.svg)](https://packagist.org/packages/phpmailer/phpmailer) [![Total Downloads](https://poser.pugx.org/phpmailer/phpmailer/downloads)](https://packagist.org/packages/phpmailer/phpmailer) [![Latest Unstable Version](https://poser.pugx.org/phpmailer/phpmailer/v/unstable.svg)](https://packagist.org/packages/phpmailer/phpmailer) [![License](https://poser.pugx.org/phpmailer/phpmailer/license.svg)](https://packagist.org/packages/phpmailer/phpmailer) [![API Docs](https://github.com/phpmailer/phpmailer/workflows/Docs/badge.svg)](http://phpmailer.github.io/PHPMailer/)
+
+## Class Features
+- Probably the world's most popular code for sending email from PHP!
+- Used by many open-source projects: WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla! and many more
+- Integrated SMTP support - send without a local mail server
+- Send emails with multiple To, CC, BCC and Reply-to addresses
+- Multipart/alternative emails for mail clients that do not read HTML email
+- Add attachments, including inline
+- Support for UTF-8 content and 8bit, base64, binary, and quoted-printable encodings
+- SMTP authentication with LOGIN, PLAIN, CRAM-MD5, and XOAUTH2 mechanisms over SSL and SMTP+STARTTLS transports
+- Validates email addresses automatically
+- Protect against header injection attacks
+- Error messages in over 50 languages!
+- DKIM and S/MIME signing support
+- Compatible with PHP 5.5 and later
+- Namespaced to prevent name clashes
+- Much more!
+
+## Why you might need it
+Many PHP developers need to send email from their code. The only PHP function that supports this is [`mail()`](https://www.php.net/manual/en/function.mail.php). However, it does not provide any assistance for making use of popular features such as encryption, authentication, HTML messages, and attachments.
+
+Formatting email correctly is surprisingly difficult. There are myriad overlapping RFCs, requiring tight adherence to horribly complicated formatting and encoding rules – the vast majority of code that you'll find online that uses the `mail()` function directly is just plain wrong!
+*Please* don't be tempted to do it yourself – if you don't use PHPMailer, there are many other excellent libraries that you should look at before rolling your own. Try [SwiftMailer](https://swiftmailer.symfony.com/), [Zend/Mail](https://zendframework.github.io/zend-mail/), [ZetaComponents](https://github.com/zetacomponents/Mail) etc.
+
+The PHP `mail()` function usually sends via a local mail server, typically fronted by a `sendmail` binary on Linux, BSD, and macOS platforms, however, Windows usually doesn't include a local mail server; PHPMailer's integrated SMTP implementation allows email sending on Windows platforms without a local mail server.
+
+## License
+This software is distributed under the [LGPL 2.1](http://www.gnu.org/licenses/lgpl-2.1.html) license, along with the [GPL Cooperation Commitment](https://gplcc.github.io/gplcc/). Please read LICENSE for information on the software availability and distribution.
+
+## Installation & loading
+PHPMailer is available on [Packagist](https://packagist.org/packages/phpmailer/phpmailer) (using semantic versioning), and installation via [Composer](https://getcomposer.org) is the recommended way to install PHPMailer. Just add this line to your `composer.json` file:
+
+```json
+"phpmailer/phpmailer": "~6.1"
+```
+
+or run
+
+```sh
+composer require phpmailer/phpmailer
+```
+
+Note that the `vendor` folder and the `vendor/autoload.php` script are generated by Composer; they are not part of PHPMailer.
+
+If you want to use the Gmail XOAUTH2 authentication class, you will also need to add a dependency on the `league/oauth2-client` package in your `composer.json`.
+
+Alternatively, if you're not using Composer, copy the contents of the PHPMailer folder into one of the `include_path` directories specified in your PHP configuration and load each class file manually:
+
+```php
+<?php
+use PHPMailer\PHPMailer\PHPMailer;
+use PHPMailer\PHPMailer\Exception;
+
+require 'path/to/PHPMailer/src/Exception.php';
+require 'path/to/PHPMailer/src/PHPMailer.php';
+require 'path/to/PHPMailer/src/SMTP.php';
+```
+
+If you're not using the `SMTP` class explicitly (you're probably not), you don't need a `use` line for the SMTP class.
+
+If you don't speak git or just want a tarball, click the 'zip' button on the right of the project page in GitHub, though note that docs and examples are not included in the tarball.
+
+## Legacy versions
+PHPMailer 5.2 (which is compatible with PHP 5.0 - 7.0) is no longer being supported, even for security updates. You will find the latest version of 5.2 in the [5.2-stable branch](https://github.com/PHPMailer/PHPMailer/tree/5.2-stable). If you're using PHP 5.5 or later (which you should be), switch to the 6.x releases.
+
+### Upgrading from 5.2
+The biggest changes are that source files are now in the `src/` folder, and PHPMailer now declares the namespace `PHPMailer\PHPMailer`. This has several important effects – [read the upgrade guide](https://github.com/PHPMailer/PHPMailer/tree/master/UPGRADING.md) for more details.
+
+### Minimal installation
+While installing the entire package manually or with Composer is simple, convenient, and reliable, you may want to include only vital files in your project. At the very least you will need [src/PHPMailer.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/PHPMailer.php). If you're using SMTP, you'll need [src/SMTP.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/SMTP.php), and if you're using POP-before SMTP, you'll need [src/POP3.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/POP3.php). You can skip the [language](https://github.com/PHPMailer/PHPMailer/tree/master/language/) folder if you're not showing errors to users and can make do with English-only errors. If you're using XOAUTH2 you will need [src/OAuth.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/OAuth.php) as well as the Composer dependencies for the services you wish to authenticate with. Really, it's much easier to use Composer!
+
+## A Simple Example
+
+```php
+<?php
+// Import PHPMailer classes into the global namespace
+// These must be at the top of your script, not inside a function
+use PHPMailer\PHPMailer\PHPMailer;
+use PHPMailer\PHPMailer\SMTP;
+use PHPMailer\PHPMailer\Exception;
+
+// Load Composer's autoloader
+require 'vendor/autoload.php';
+
+// Instantiation and passing `true` enables exceptions
+$mail = new PHPMailer(true);
+
+try {
+ //Server settings
+ $mail->SMTPDebug = SMTP::DEBUG_SERVER; // Enable verbose debug output
+ $mail->isSMTP(); // Send using SMTP
+ $mail->Host = 'smtp1.example.com'; // Set the SMTP server to send through
+ $mail->SMTPAuth = true; // Enable SMTP authentication
+ $mail->Username = 'user@example.com'; // SMTP username
+ $mail->Password = 'secret'; // SMTP password
+ $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged
+ $mail->Port = 587; // TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above
+
+ //Recipients
+ $mail->setFrom('from@example.com', 'Mailer');
+ $mail->addAddress('joe@example.net', 'Joe User'); // Add a recipient
+ $mail->addAddress('ellen@example.com'); // Name is optional
+ $mail->addReplyTo('info@example.com', 'Information');
+ $mail->addCC('cc@example.com');
+ $mail->addBCC('bcc@example.com');
+
+ // Attachments
+ $mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
+ $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name
+
+ // Content
+ $mail->isHTML(true); // Set email format to HTML
+ $mail->Subject = 'Here is the subject';
+ $mail->Body = 'This is the HTML message body <b>in bold!</b>';
+ $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
+
+ $mail->send();
+ echo 'Message has been sent';
+} catch (Exception $e) {
+ echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
+}
+```
+
+You'll find plenty more to play with in the [examples](https://github.com/PHPMailer/PHPMailer/tree/master/examples) folder.
+
+If you are re-using the instance (e.g. when sending to a mailing list), you may need to clear the recipient list to avoid sending duplicate messages. See [the mailing list example](https://github.com/PHPMailer/PHPMailer/blob/master/examples/mailing_list.phps) for further guidance.
+
+That's it. You should now be ready to use PHPMailer!
+
+## Localization
+PHPMailer defaults to English, but in the [language](https://github.com/PHPMailer/PHPMailer/tree/master/language/) folder you'll find many translations for PHPMailer error messages that you may encounter. Their filenames contain [ISO 639-1](http://en.wikipedia.org/wiki/ISO_639-1) language code for the translations, for example `fr` for French. To specify a language, you need to tell PHPMailer which one to use, like this:
+
+```php
+// To load the French version
+$mail->setLanguage('fr', '/optional/path/to/language/directory/');
+```
+
+We welcome corrections and new languages - if you're looking for corrections to do, run the [PHPMailerLangTest.php](https://github.com/PHPMailer/PHPMailer/tree/master/test/PHPMailerLangTest.php) script in the tests folder and it will show any missing translations.
+
+## Documentation
+Start reading at the [GitHub wiki](https://github.com/PHPMailer/PHPMailer/wiki). If you're having trouble, this should be the first place you look as it's the most frequently updated.
+
+Examples of how to use PHPMailer for common scenarios can be found in the [examples](https://github.com/PHPMailer/PHPMailer/tree/master/examples) folder. If you're looking for a good starting point, we recommend you start with [the Gmail example](https://github.com/PHPMailer/PHPMailer/tree/master/examples/gmail.phps).
+
+Note that in order to reduce PHPMailer's deployed code footprint, the examples are no longer included if you load PHPMailer via Composer or via [GitHub's zip file download](https://github.com/PHPMailer/PHPMailer/archive/master.zip), so you'll need to either clone the git repository or use the above links to get to the examples directly.
+
+Complete generated API documentation is [available online](http://phpmailer.github.io/PHPMailer/).
+
+You can generate complete API-level documentation by running `phpdoc` in the top-level folder, and documentation will appear in the `docs` folder, though you'll need to have [PHPDocumentor](http://www.phpdoc.org) installed. You may find [the unit tests](https://github.com/PHPMailer/PHPMailer/blob/master/test/PHPMailerTest.php) a good source of how to do various operations such as encryption.
+
+If the documentation doesn't cover what you need, search the [many questions on Stack Overflow](http://stackoverflow.com/questions/tagged/phpmailer), and before you ask a question about "SMTP Error: Could not connect to SMTP host.", [read the troubleshooting guide](https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting).
+
+## Tests
+There is a PHPUnit test script in the [test](https://github.com/PHPMailer/PHPMailer/tree/master/test/) folder. PHPMailer uses PHPUnit 4.8 - we would use 5.x but we need to run on PHP 5.5.
+
+Build status: [![Build Status](https://travis-ci.org/PHPMailer/PHPMailer.svg)](https://travis-ci.org/PHPMailer/PHPMailer)
+
+If this isn't passing, is there something you can do to help?
+
+## Security
+Please disclose any vulnerabilities found responsibly - report any security problems found to the maintainers privately.
+
+PHPMailer versions prior to 5.2.22 (released January 9th 2017) have a local file disclosure vulnerability, [CVE-2017-5223](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2017-5223). If content passed into `msgHTML()` is sourced from unfiltered user input, relative paths can map to absolute local file paths and added as attachments. Also note that `addAttachment` (just like `file_get_contents`, `passthru`, `unlink`, etc) should not be passed user-sourced params either! Reported by Yongxiang Li of Asiasecurity.
+
+PHPMailer versions prior to 5.2.20 (released December 28th 2016) are vulnerable to [CVE-2016-10045](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-10045) a remote code execution vulnerability, responsibly reported by [Dawid Golunski](https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10045-Vuln-Patch-Bypass.html), and patched by Paul Buonopane (@Zenexer).
+
+PHPMailer versions prior to 5.2.18 (released December 2016) are vulnerable to [CVE-2016-10033](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-10033) a critical remote code execution vulnerability, responsibly reported by [Dawid Golunski](http://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10033-Vuln.html).
+
+See [SECURITY](https://github.com/PHPMailer/PHPMailer/tree/master/SECURITY.md) for more detail on security issues.
+
+## Contributing
+Please submit bug reports, suggestions and pull requests to the [GitHub issue tracker](https://github.com/PHPMailer/PHPMailer/issues).
+
+We're particularly interested in fixing edge-cases, expanding test coverage and updating translations.
+
+If you found a mistake in the docs, or want to add something, go ahead and amend the wiki - anyone can edit it.
+
+If you have git clones from prior to the move to the PHPMailer GitHub organisation, you'll need to update any remote URLs referencing the old GitHub location with a command like this from within your clone:
+
+```sh
+git remote set-url upstream https://github.com/PHPMailer/PHPMailer.git
+```
+
+Please *don't* use the SourceForge or Google Code projects any more; they are obsolete and no longer maintained.
+
+## Sponsorship
+Development time and resources for PHPMailer are provided by [Smartmessages.net](https://info.smartmessages.net/), a powerful email marketing system.
+
+<a href="https://info.smartmessages.net/"><img src="https://www.smartmessages.net/img/smartmessages-logo.svg" width="250" height="28" alt="Smartmessages email marketing"></a>
+
+Other contributions are gladly received, whether in beer 🍺, T-shirts 👕, Amazon wishlist raids, or cold, hard cash 💰. If you'd like to donate to say "thank you" to maintainers or contributors, please contact them through individual profile pages via [the contributors page](https://github.com/PHPMailer/PHPMailer/graphs/contributors).
+
+## Changelog
+See [changelog](changelog.md).
+
+## History
+- PHPMailer was originally written in 2001 by Brent R. Matzelle as a [SourceForge project](http://sourceforge.net/projects/phpmailer/).
+- Marcus Bointon (coolbru on SF) and Andy Prevost (codeworxtech) took over the project in 2004.
+- Became an Apache incubator project on Google Code in 2010, managed by Jim Jagielski.
+- Marcus created his fork on [GitHub](https://github.com/Synchro/PHPMailer) in 2008.
+- Jim and Marcus decide to join forces and use GitHub as the canonical and official repo for PHPMailer in 2013.
+- PHPMailer moves to the [PHPMailer organisation](https://github.com/PHPMailer) on GitHub in 2013.
+
+### What's changed since moving from SourceForge?
+- Official successor to the SourceForge and Google Code projects.
+- Test suite.
+- Continuous integration with Travis-CI.
+- Composer support.
+- Public development.
+- Additional languages and language strings.
+- CRAM-MD5 authentication support.
+- Preserves full repo history of authors, commits and branches from the original SourceForge project.
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/SECURITY.md b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/SECURITY.md
new file mode 100644
index 0000000..fc3e61c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/SECURITY.md
@@ -0,0 +1,30 @@
+# Security notices relating to PHPMailer
+
+Please disclose any vulnerabilities found responsibly - report any security problems found to the maintainers privately.
+
+PHPMailer versions 6.1.5 and earlier contain an output escaping bug that occurs in `Content-Type` and `Content-Disposition` when filenames passed into `addAttachment` and other methods that accept attachment names contain double quote characters, in contravention of RFC822 3.4.1. No specific vulnerability has been found relating to this, but it could allow file attachments to bypass attachment filters that are based on matching filename extensions. Recorded as [CVE-2020-13625](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2020-13625). Reported by Elar Lang of Clarified Security.
+
+PHPMailer versions prior to 6.0.6 and 5.2.27 are vulnerable to an object injection attack by passing `phar://` paths into `addAttachment()` and other functions that may receive unfiltered local paths, possibly leading to RCE. Recorded as [CVE-2018-19296](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2018-19296). See [this article](https://knasmueller.net/5-answers-about-php-phar-exploitation) for more info on this type of vulnerability. Mitigated by blocking the use of paths containing URL-protocol style prefixes such as `phar://`. Reported by Sehun Oh of cyberone.kr.
+
+PHPMailer versions prior to 5.2.24 (released July 26th 2017) have an XSS vulnerability in one of the code examples, [CVE-2017-11503](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2017-11503). The `code_generator.phps` example did not filter user input prior to output. This file is distributed with a `.phps` extension, so it it not normally executable unless it is explicitly renamed, and the file is not included when PHPMailer is loaded through composer, so it is safe by default. There was also an undisclosed potential XSS vulnerability in the default exception handler (unused by default). Patches for both issues kindly provided by Patrick Monnerat of the Fedora Project.
+
+PHPMailer versions prior to 5.2.22 (released January 9th 2017) have a local file disclosure vulnerability, [CVE-2017-5223](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2017-5223). If content passed into `msgHTML()` is sourced from unfiltered user input, relative paths can map to absolute local file paths and added as attachments. Also note that `addAttachment` (just like `file_get_contents`, `passthru`, `unlink`, etc) should not be passed user-sourced params either! Reported by Yongxiang Li of Asiasecurity.
+
+PHPMailer versions prior to 5.2.20 (released December 28th 2016) are vulnerable to [CVE-2016-10045](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-10045) a remote code execution vulnerability, responsibly reported by [Dawid Golunski](https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10045-Vuln-Patch-Bypass.html), and patched by Paul Buonopane (@Zenexer).
+
+PHPMailer versions prior to 5.2.18 (released December 2016) are vulnerable to [CVE-2016-10033](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-10033) a remote code execution vulnerability, responsibly reported by [Dawid Golunski](http://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10033-Vuln.html).
+
+PHPMailer versions prior to 5.2.14 (released November 2015) are vulnerable to [CVE-2015-8476](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-8476) an SMTP CRLF injection bug permitting arbitrary message sending.
+
+PHPMailer versions prior to 5.2.10 (released May 2015) are vulnerable to [CVE-2008-5619](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2008-5619), a remote code execution vulnerability in the bundled html2text library. This file was removed in 5.2.10, so if you are using a version prior to that and make use of the html2text function, it's vitally important that you upgrade and remove this file.
+
+PHPMailer versions prior to 2.0.7 and 2.2.1 are vulnerable to [CVE-2012-0796](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2012-0796), an email header injection attack.
+
+Joomla 1.6.0 uses PHPMailer in an unsafe way, allowing it to reveal local file paths, reported in [CVE-2011-3747](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2011-3747).
+
+PHPMailer didn't sanitise the `$lang_path` parameter in `SetLanguage`. This wasn't a problem in itself, but some apps (PHPClassifieds, ATutor) also failed to sanitise user-provided parameters passed to it, permitting semi-arbitrary local file inclusion, reported in [CVE-2010-4914](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2010-4914), [CVE-2007-2021](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2007-2021) and [CVE-2006-5734](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2006-5734).
+
+PHPMailer 1.7.2 and earlier contained a possible DDoS vulnerability reported in [CVE-2005-1807](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2005-1807).
+
+PHPMailer 1.7 and earlier (June 2003) have a possible vulnerability in the `SendmailSend` method where shell commands may not be sanitised. Reported in [CVE-2007-3215](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2007-3215).
+
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/VERSION b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/VERSION
new file mode 100644
index 0000000..3af67b5
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/VERSION
@@ -0,0 +1 @@
+6.1.6
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/composer.json b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/composer.json
new file mode 100644
index 0000000..90d2576
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/composer.json
@@ -0,0 +1,57 @@
+{
+ "name": "phpmailer/phpmailer",
+ "type": "library",
+ "description": "PHPMailer is a full-featured email creation and transfer class for PHP",
+ "authors": [
+ {
+ "name": "Marcus Bointon",
+ "email": "phpmailer@synchromedia.co.uk"
+ },
+ {
+ "name": "Jim Jagielski",
+ "email": "jimjag@gmail.com"
+ },
+ {
+ "name": "Andy Prevost",
+ "email": "codeworxtech@users.sourceforge.net"
+ },
+ {
+ "name": "Brent R. Matzelle"
+ }
+ ],
+ "funding": [
+ {
+ "url": "https://github.com/synchro",
+ "type": "github"
+ }
+ ],
+ "require": {
+ "php": ">=5.5.0",
+ "ext-ctype": "*",
+ "ext-filter": "*"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^2.2",
+ "phpunit/phpunit": "^4.8 || ^5.7",
+ "doctrine/annotations": "^1.2"
+ },
+ "suggest": {
+ "psr/log": "For optional PSR-3 debug logging",
+ "league/oauth2-google": "Needed for Google XOAUTH2 authentication",
+ "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
+ "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication",
+ "ext-mbstring": "Needed to send email in multibyte encoding charset",
+ "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
+ },
+ "autoload": {
+ "psr-4": {
+ "PHPMailer\\PHPMailer\\": "src/"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "PHPMailer\\Test\\": "test/"
+ }
+ },
+ "license": "LGPL-2.1-only"
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/get_oauth_token.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/get_oauth_token.php
new file mode 100644
index 0000000..1237b57
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/get_oauth_token.php
@@ -0,0 +1,144 @@
+<?php
+/**
+ * PHPMailer - PHP email creation and transport class.
+ * PHP Version 5.5
+ * @package PHPMailer
+ * @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
+ * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
+ * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
+ * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
+ * @author Brent R. Matzelle (original founder)
+ * @copyright 2012 - 2017 Marcus Bointon
+ * @copyright 2010 - 2012 Jim Jagielski
+ * @copyright 2004 - 2009 Andy Prevost
+ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
+ * @note This program is distributed in the hope that it will be useful - WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.
+ */
+/**
+ * Get an OAuth2 token from an OAuth2 provider.
+ * * Install this script on your server so that it's accessible
+ * as [https/http]://<yourdomain>/<folder>/get_oauth_token.php
+ * e.g.: http://localhost/phpmailer/get_oauth_token.php
+ * * Ensure dependencies are installed with 'composer install'
+ * * Set up an app in your Google/Yahoo/Microsoft account
+ * * Set the script address as the app's redirect URL
+ * If no refresh token is obtained when running this file,
+ * revoke access to your app and run the script again.
+ */
+
+namespace PHPMailer\PHPMailer;
+
+/**
+ * Aliases for League Provider Classes
+ * Make sure you have added these to your composer.json and run `composer install`
+ * Plenty to choose from here:
+ * @see http://oauth2-client.thephpleague.com/providers/thirdparty/
+ */
+// @see https://github.com/thephpleague/oauth2-google
+use League\OAuth2\Client\Provider\Google;
+// @see https://packagist.org/packages/hayageek/oauth2-yahoo
+use Hayageek\OAuth2\Client\Provider\Yahoo;
+// @see https://github.com/stevenmaguire/oauth2-microsoft
+use Stevenmaguire\OAuth2\Client\Provider\Microsoft;
+
+if (!isset($_GET['code']) && !isset($_GET['provider'])) {
+?>
+<html>
+<body>Select Provider:<br/>
+<a href='?provider=Google'>Google</a><br/>
+<a href='?provider=Yahoo'>Yahoo</a><br/>
+<a href='?provider=Microsoft'>Microsoft/Outlook/Hotmail/Live/Office365</a><br/>
+</body>
+</html>
+<?php
+exit;
+}
+
+require 'vendor/autoload.php';
+
+session_start();
+
+$providerName = '';
+
+if (array_key_exists('provider', $_GET)) {
+ $providerName = $_GET['provider'];
+ $_SESSION['provider'] = $providerName;
+} elseif (array_key_exists('provider', $_SESSION)) {
+ $providerName = $_SESSION['provider'];
+}
+if (!in_array($providerName, ['Google', 'Microsoft', 'Yahoo'])) {
+ exit('Only Google, Microsoft and Yahoo OAuth2 providers are currently supported in this script.');
+}
+
+//These details are obtained by setting up an app in the Google developer console,
+//or whichever provider you're using.
+$clientId = 'RANDOMCHARS-----duv1n2.apps.googleusercontent.com';
+$clientSecret = 'RANDOMCHARS-----lGyjPcRtvP';
+
+//If this automatic URL doesn't work, set it yourself manually to the URL of this script
+$redirectUri = (isset($_SERVER['HTTPS']) ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
+//$redirectUri = 'http://localhost/PHPMailer/redirect';
+
+$params = [
+ 'clientId' => $clientId,
+ 'clientSecret' => $clientSecret,
+ 'redirectUri' => $redirectUri,
+ 'accessType' => 'offline'
+];
+
+$options = [];
+$provider = null;
+
+switch ($providerName) {
+ case 'Google':
+ $provider = new Google($params);
+ $options = [
+ 'scope' => [
+ 'https://mail.google.com/'
+ ]
+ ];
+ break;
+ case 'Yahoo':
+ $provider = new Yahoo($params);
+ break;
+ case 'Microsoft':
+ $provider = new Microsoft($params);
+ $options = [
+ 'scope' => [
+ 'wl.imap',
+ 'wl.offline_access'
+ ]
+ ];
+ break;
+}
+
+if (null === $provider) {
+ exit('Provider missing');
+}
+
+if (!isset($_GET['code'])) {
+ // If we don't have an authorization code then get one
+ $authUrl = $provider->getAuthorizationUrl($options);
+ $_SESSION['oauth2state'] = $provider->getState();
+ header('Location: ' . $authUrl);
+ exit;
+// Check given state against previously stored one to mitigate CSRF attack
+} elseif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) {
+ unset($_SESSION['oauth2state']);
+ unset($_SESSION['provider']);
+ exit('Invalid state');
+} else {
+ unset($_SESSION['provider']);
+ // Try to get an access token (using the authorization code grant)
+ $token = $provider->getAccessToken(
+ 'authorization_code',
+ [
+ 'code' => $_GET['code']
+ ]
+ );
+ // Use this to interact with an API on the users behalf
+ // Use this to get a new access token if the old one expires
+ echo 'Refresh Token: ', $token->getRefreshToken();
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-af.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-af.php
new file mode 100644
index 0000000..3c42d78
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-af.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Afrikaans PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP-fout: kon nie geverifieer word nie.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP-fout: kon nie aan SMTP-verbind nie.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP-fout: data nie aanvaar nie.';
+$PHPMAILER_LANG['empty_message'] = 'Boodskapliggaam leeg.';
+$PHPMAILER_LANG['encoding'] = 'Onbekende kodering: ';
+$PHPMAILER_LANG['execute'] = 'Kon nie uitvoer nie: ';
+$PHPMAILER_LANG['file_access'] = 'Kon nie lêer oopmaak nie: ';
+$PHPMAILER_LANG['file_open'] = 'Lêerfout: Kon nie lêer oopmaak nie: ';
+$PHPMAILER_LANG['from_failed'] = 'Die volgende Van adres misluk: ';
+$PHPMAILER_LANG['instantiate'] = 'Kon nie posfunksie instansieer nie.';
+$PHPMAILER_LANG['invalid_address'] = 'Ongeldige adres: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer word nie ondersteun nie.';
+$PHPMAILER_LANG['provide_address'] = 'U moet ten minste een ontvanger e-pos adres verskaf.';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP-fout: Die volgende ontvangers het misluk: ';
+$PHPMAILER_LANG['signing'] = 'Ondertekening Fout: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP-verbinding () misluk.';
+$PHPMAILER_LANG['smtp_error'] = 'SMTP-bediener fout: ';
+$PHPMAILER_LANG['variable_set'] = 'Kan nie veranderlike instel of herstel nie: ';
+$PHPMAILER_LANG['extension_missing'] = 'Uitbreiding ontbreek: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ar.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ar.php
new file mode 100644
index 0000000..865d0b7
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ar.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Arabic PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author bahjat al mostafa <bahjat983@hotmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'خطأ SMTP : لا يمكن تأكيد الهوية.';
+$PHPMAILER_LANG['connect_host'] = 'خطأ SMTP: لا يمكن الاتصال بالخادم SMTP.';
+$PHPMAILER_LANG['data_not_accepted'] = 'خطأ SMTP: لم يتم قبول المعلومات .';
+$PHPMAILER_LANG['empty_message'] = 'نص الرسالة فارغ';
+$PHPMAILER_LANG['encoding'] = 'ترميز غير معروف: ';
+$PHPMAILER_LANG['execute'] = 'لا يمكن تنفيذ : ';
+$PHPMAILER_LANG['file_access'] = 'لا يمكن الوصول للملف: ';
+$PHPMAILER_LANG['file_open'] = 'خطأ في الملف: لا يمكن فتحه: ';
+$PHPMAILER_LANG['from_failed'] = 'خطأ على مستوى عنوان المرسل : ';
+$PHPMAILER_LANG['instantiate'] = 'لا يمكن توفير خدمة البريد.';
+$PHPMAILER_LANG['invalid_address'] = 'الإرسال غير ممكن لأن عنوان البريد الإلكتروني غير صالح: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' برنامج الإرسال غير مدعوم.';
+$PHPMAILER_LANG['provide_address'] = 'يجب توفير عنوان البريد الإلكتروني لمستلم واحد على الأقل.';
+$PHPMAILER_LANG['recipients_failed'] = 'خطأ SMTP: الأخطاء التالية ' .
+ 'فشل في الارسال لكل من : ';
+$PHPMAILER_LANG['signing'] = 'خطأ في التوقيع: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() غير ممكن.';
+$PHPMAILER_LANG['smtp_error'] = 'خطأ على مستوى الخادم SMTP: ';
+$PHPMAILER_LANG['variable_set'] = 'لا يمكن تعيين أو إعادة تعيين متغير: ';
+$PHPMAILER_LANG['extension_missing'] = 'الإضافة غير موجودة: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-az.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-az.php
new file mode 100644
index 0000000..3749d83
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-az.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Azerbaijani PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author @mirjalal
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP xətası: Giriş uğursuz oldu.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP xətası: SMTP serverinə qoşulma uğursuz oldu.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP xətası: Verilənlər qəbul edilməyib.';
+$PHPMAILER_LANG['empty_message'] = 'Boş mesaj göndərilə bilməz.';
+$PHPMAILER_LANG['encoding'] = 'Qeyri-müəyyən kodlaşdırma: ';
+$PHPMAILER_LANG['execute'] = 'Əmr yerinə yetirilmədi: ';
+$PHPMAILER_LANG['file_access'] = 'Fayla giriş yoxdur: ';
+$PHPMAILER_LANG['file_open'] = 'Fayl xətası: Fayl açıla bilmədi: ';
+$PHPMAILER_LANG['from_failed'] = 'Göstərilən poçtlara göndərmə uğursuz oldu: ';
+$PHPMAILER_LANG['instantiate'] = 'Mail funksiyası işə salına bilmədi.';
+$PHPMAILER_LANG['invalid_address'] = 'Düzgün olmayan e-mail adresi: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' - e-mail kitabxanası dəstəklənmir.';
+$PHPMAILER_LANG['provide_address'] = 'Ən azı bir e-mail adresi daxil edilməlidir.';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP xətası: Aşağıdakı ünvanlar üzrə alıcılara göndərmə uğursuzdur: ';
+$PHPMAILER_LANG['signing'] = 'İmzalama xətası: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP serverinə qoşulma uğursuz oldu.';
+$PHPMAILER_LANG['smtp_error'] = 'SMTP serveri xətası: ';
+$PHPMAILER_LANG['variable_set'] = 'Dəyişənin quraşdırılması uğursuz oldu: ';
+//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ba.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ba.php
new file mode 100644
index 0000000..576c4bb
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ba.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Bosnian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Ermin Islamagić <ermin@islamagic.com>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP Greška: Neuspjela prijava.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP Greška: Nije moguće spojiti se sa SMTP serverom.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Greška: Podatci nisu prihvaćeni.';
+$PHPMAILER_LANG['empty_message'] = 'Sadržaj poruke je prazan.';
+$PHPMAILER_LANG['encoding'] = 'Nepoznata kriptografija: ';
+$PHPMAILER_LANG['execute'] = 'Nije moguće izvršiti naredbu: ';
+$PHPMAILER_LANG['file_access'] = 'Nije moguće pristupiti datoteci: ';
+$PHPMAILER_LANG['file_open'] = 'Nije moguće otvoriti datoteku: ';
+$PHPMAILER_LANG['from_failed'] = 'SMTP Greška: Slanje sa navedenih e-mail adresa nije uspjelo: ';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP Greška: Slanje na navedene e-mail adrese nije uspjelo: ';
+$PHPMAILER_LANG['instantiate'] = 'Ne mogu pokrenuti mail funkcionalnost.';
+$PHPMAILER_LANG['invalid_address'] = 'E-mail nije poslan. Neispravna e-mail adresa: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer nije podržan.';
+$PHPMAILER_LANG['provide_address'] = 'Definišite barem jednu adresu primaoca.';
+$PHPMAILER_LANG['signing'] = 'Greška prilikom prijave: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'Spajanje na SMTP server nije uspjelo.';
+$PHPMAILER_LANG['smtp_error'] = 'SMTP greška: ';
+$PHPMAILER_LANG['variable_set'] = 'Nije moguće postaviti varijablu ili je vratiti nazad: ';
+$PHPMAILER_LANG['extension_missing'] = 'Nedostaje ekstenzija: ';
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-be.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-be.php
new file mode 100644
index 0000000..e2f98f0
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-be.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Belarusian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Aleksander Maksymiuk <info@setpro.pl>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'Памылка SMTP: памылка ідэнтыфікацыі.';
+$PHPMAILER_LANG['connect_host'] = 'Памылка SMTP: нельга ўстанавіць сувязь з SMTP-серверам.';
+$PHPMAILER_LANG['data_not_accepted'] = 'Памылка SMTP: звесткі непрынятыя.';
+$PHPMAILER_LANG['empty_message'] = 'Пустое паведамленне.';
+$PHPMAILER_LANG['encoding'] = 'Невядомая кадыроўка тэксту: ';
+$PHPMAILER_LANG['execute'] = 'Нельга выканаць каманду: ';
+$PHPMAILER_LANG['file_access'] = 'Няма доступу да файла: ';
+$PHPMAILER_LANG['file_open'] = 'Нельга адкрыць файл: ';
+$PHPMAILER_LANG['from_failed'] = 'Няправільны адрас адпраўніка: ';
+$PHPMAILER_LANG['instantiate'] = 'Нельга прымяніць функцыю mail().';
+$PHPMAILER_LANG['invalid_address'] = 'Нельга даслаць паведамленне, няправільны email атрымальніка: ';
+$PHPMAILER_LANG['provide_address'] = 'Запоўніце, калі ласка, правільны email атрымальніка.';
+$PHPMAILER_LANG['mailer_not_supported'] = ' - паштовы сервер не падтрымліваецца.';
+$PHPMAILER_LANG['recipients_failed'] = 'Памылка SMTP: няправільныя атрымальнікі: ';
+$PHPMAILER_LANG['signing'] = 'Памылка подпісу паведамлення: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'Памылка сувязі з SMTP-серверам.';
+$PHPMAILER_LANG['smtp_error'] = 'Памылка SMTP: ';
+$PHPMAILER_LANG['variable_set'] = 'Нельга ўстанавіць або перамяніць значэнне пераменнай: ';
+//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-bg.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-bg.php
new file mode 100644
index 0000000..b22941f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-bg.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Bulgarian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Mikhail Kyosev <mialygk@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP грешка: Не може да се удостовери пред сървъра.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP грешка: Не може да се свърже с SMTP хоста.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP грешка: данните не са приети.';
+$PHPMAILER_LANG['empty_message'] = 'Съдържанието на съобщението е празно';
+$PHPMAILER_LANG['encoding'] = 'Неизвестно кодиране: ';
+$PHPMAILER_LANG['execute'] = 'Не може да се изпълни: ';
+$PHPMAILER_LANG['file_access'] = 'Няма достъп до файл: ';
+$PHPMAILER_LANG['file_open'] = 'Файлова грешка: Не може да се отвори файл: ';
+$PHPMAILER_LANG['from_failed'] = 'Следните адреси за подател са невалидни: ';
+$PHPMAILER_LANG['instantiate'] = 'Не може да се инстанцира функцията mail.';
+$PHPMAILER_LANG['invalid_address'] = 'Невалиден адрес: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' - пощенски сървър не се поддържа.';
+$PHPMAILER_LANG['provide_address'] = 'Трябва да предоставите поне един email адрес за получател.';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP грешка: Следните адреси за Получател са невалидни: ';
+$PHPMAILER_LANG['signing'] = 'Грешка при подписване: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP провален connect().';
+$PHPMAILER_LANG['smtp_error'] = 'SMTP сървърна грешка: ';
+$PHPMAILER_LANG['variable_set'] = 'Не може да се установи или възстанови променлива: ';
+$PHPMAILER_LANG['extension_missing'] = 'Липсва разширение: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ca.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ca.php
new file mode 100644
index 0000000..4117596
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ca.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Catalan PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Ivan <web AT microstudi DOT com>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'Error SMTP: No s’ha pogut autenticar.';
+$PHPMAILER_LANG['connect_host'] = 'Error SMTP: No es pot connectar al servidor SMTP.';
+$PHPMAILER_LANG['data_not_accepted'] = 'Error SMTP: Dades no acceptades.';
+$PHPMAILER_LANG['empty_message'] = 'El cos del missatge està buit.';
+$PHPMAILER_LANG['encoding'] = 'Codificació desconeguda: ';
+$PHPMAILER_LANG['execute'] = 'No es pot executar: ';
+$PHPMAILER_LANG['file_access'] = 'No es pot accedir a l’arxiu: ';
+$PHPMAILER_LANG['file_open'] = 'Error d’Arxiu: No es pot obrir l’arxiu: ';
+$PHPMAILER_LANG['from_failed'] = 'La(s) següent(s) adreces de remitent han fallat: ';
+$PHPMAILER_LANG['instantiate'] = 'No s’ha pogut crear una instància de la funció Mail.';
+$PHPMAILER_LANG['invalid_address'] = 'Adreça d’email invalida: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer no està suportat';
+$PHPMAILER_LANG['provide_address'] = 'S’ha de proveir almenys una adreça d’email com a destinatari.';
+$PHPMAILER_LANG['recipients_failed'] = 'Error SMTP: Els següents destinataris han fallat: ';
+$PHPMAILER_LANG['signing'] = 'Error al signar: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'Ha fallat el SMTP Connect().';
+$PHPMAILER_LANG['smtp_error'] = 'Error del servidor SMTP: ';
+$PHPMAILER_LANG['variable_set'] = 'No s’ha pogut establir o restablir la variable: ';
+//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ch.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ch.php
new file mode 100644
index 0000000..4fda6b8
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ch.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Chinese PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author LiuXin <http://www.80x86.cn/blog/>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP 错误:身份验证失败。';
+$PHPMAILER_LANG['connect_host'] = 'SMTP 错误: 不能连接SMTP主机。';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP 错误: 数据不可接受。';
+//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
+$PHPMAILER_LANG['encoding'] = '未知编码:';
+$PHPMAILER_LANG['execute'] = '不能执行: ';
+$PHPMAILER_LANG['file_access'] = '不能访问文件:';
+$PHPMAILER_LANG['file_open'] = '文件错误:不能打开文件:';
+$PHPMAILER_LANG['from_failed'] = '下面的发送地址邮件发送失败了: ';
+$PHPMAILER_LANG['instantiate'] = '不能实现mail方法。';
+//$PHPMAILER_LANG['invalid_address'] = 'Invalid address: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' 您所选择的发送邮件的方法并不支持。';
+$PHPMAILER_LANG['provide_address'] = '您必须提供至少一个 收信人的email地址。';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP 错误: 下面的 收件人失败了: ';
+//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
+//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
+//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
+//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
+//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-cs.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-cs.php
new file mode 100644
index 0000000..1160cf0
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-cs.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Czech PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'Chyba SMTP: Autentizace selhala.';
+$PHPMAILER_LANG['connect_host'] = 'Chyba SMTP: Nelze navázat spojení se SMTP serverem.';
+$PHPMAILER_LANG['data_not_accepted'] = 'Chyba SMTP: Data nebyla přijata.';
+$PHPMAILER_LANG['empty_message'] = 'Prázdné tělo zprávy';
+$PHPMAILER_LANG['encoding'] = 'Neznámé kódování: ';
+$PHPMAILER_LANG['execute'] = 'Nelze provést: ';
+$PHPMAILER_LANG['file_access'] = 'Nelze získat přístup k souboru: ';
+$PHPMAILER_LANG['file_open'] = 'Chyba souboru: Nelze otevřít soubor pro čtení: ';
+$PHPMAILER_LANG['from_failed'] = 'Následující adresa odesílatele je nesprávná: ';
+$PHPMAILER_LANG['instantiate'] = 'Nelze vytvořit instanci emailové funkce.';
+$PHPMAILER_LANG['invalid_address'] = 'Neplatná adresa: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer není podporován.';
+$PHPMAILER_LANG['provide_address'] = 'Musíte zadat alespoň jednu emailovou adresu příjemce.';
+$PHPMAILER_LANG['recipients_failed'] = 'Chyba SMTP: Následující adresy příjemců nejsou správně: ';
+$PHPMAILER_LANG['signing'] = 'Chyba přihlašování: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() selhal.';
+$PHPMAILER_LANG['smtp_error'] = 'Chyba SMTP serveru: ';
+$PHPMAILER_LANG['variable_set'] = 'Nelze nastavit nebo změnit proměnnou: ';
+$PHPMAILER_LANG['extension_missing'] = 'Chybí rozšíření: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-da.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-da.php
new file mode 100644
index 0000000..5febb51
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-da.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Danish PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author John Sebastian <jms@iwb.dk>
+ * Rewrite and extension of the work by Mikael Stokkebro <info@stokkebro.dk>
+ *
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP fejl: Login mislykkedes.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP fejl: Forbindelse til SMTP serveren kunne ikke oprettes.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP fejl: Data blev ikke accepteret.';
+$PHPMAILER_LANG['empty_message'] = 'Meddelelsen er uden indhold';
+$PHPMAILER_LANG['encoding'] = 'Ukendt encode-format: ';
+$PHPMAILER_LANG['execute'] = 'Kunne ikke afvikle: ';
+$PHPMAILER_LANG['file_access'] = 'Kunne ikke tilgå filen: ';
+$PHPMAILER_LANG['file_open'] = 'Fil fejl: Kunne ikke åbne filen: ';
+$PHPMAILER_LANG['from_failed'] = 'Følgende afsenderadresse er forkert: ';
+$PHPMAILER_LANG['instantiate'] = 'Email funktionen kunne ikke initialiseres.';
+$PHPMAILER_LANG['invalid_address'] = 'Udgyldig adresse: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer understøttes ikke.';
+$PHPMAILER_LANG['provide_address'] = 'Indtast mindst en modtagers email adresse.';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP fejl: Følgende modtagere er forkerte: ';
+$PHPMAILER_LANG['signing'] = 'Signeringsfejl: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() fejlede.';
+$PHPMAILER_LANG['smtp_error'] = 'SMTP server fejl: ';
+$PHPMAILER_LANG['variable_set'] = 'Kunne ikke definere eller nulstille variablen: ';
+$PHPMAILER_LANG['extension_missing'] = 'Udvidelse mangler: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-de.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-de.php
new file mode 100644
index 0000000..aa987a9
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-de.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * German PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP-Fehler: Authentifizierung fehlgeschlagen.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP-Fehler: Konnte keine Verbindung zum SMTP-Host herstellen.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP-Fehler: Daten werden nicht akzeptiert.';
+$PHPMAILER_LANG['empty_message'] = 'E-Mail-Inhalt ist leer.';
+$PHPMAILER_LANG['encoding'] = 'Unbekannte Kodierung: ';
+$PHPMAILER_LANG['execute'] = 'Konnte folgenden Befehl nicht ausführen: ';
+$PHPMAILER_LANG['file_access'] = 'Zugriff auf folgende Datei fehlgeschlagen: ';
+$PHPMAILER_LANG['file_open'] = 'Dateifehler: Konnte folgende Datei nicht öffnen: ';
+$PHPMAILER_LANG['from_failed'] = 'Die folgende Absenderadresse ist nicht korrekt: ';
+$PHPMAILER_LANG['instantiate'] = 'Mail-Funktion konnte nicht initialisiert werden.';
+$PHPMAILER_LANG['invalid_address'] = 'Die Adresse ist ungültig: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer wird nicht unterstützt.';
+$PHPMAILER_LANG['provide_address'] = 'Bitte geben Sie mindestens eine Empfängeradresse an.';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP-Fehler: Die folgenden Empfänger sind nicht korrekt: ';
+$PHPMAILER_LANG['signing'] = 'Fehler beim Signieren: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'Verbindung zum SMTP-Server fehlgeschlagen.';
+$PHPMAILER_LANG['smtp_error'] = 'Fehler vom SMTP-Server: ';
+$PHPMAILER_LANG['variable_set'] = 'Kann Variable nicht setzen oder zurücksetzen: ';
+$PHPMAILER_LANG['extension_missing'] = 'Fehlende Erweiterung: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-el.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-el.php
new file mode 100644
index 0000000..7109641
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-el.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Greek PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP Σφάλμα: Αδυναμία πιστοποίησης (authentication).';
+$PHPMAILER_LANG['connect_host'] = 'SMTP Σφάλμα: Αδυναμία σύνδεσης στον SMTP-Host.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Σφάλμα: Τα δεδομένα δεν έγιναν αποδεκτά.';
+$PHPMAILER_LANG['empty_message'] = 'Το E-Mail δεν έχει περιεχόμενο .';
+$PHPMAILER_LANG['encoding'] = 'Αγνωστο Encoding-Format: ';
+$PHPMAILER_LANG['execute'] = 'Αδυναμία εκτέλεσης ακόλουθης εντολής: ';
+$PHPMAILER_LANG['file_access'] = 'Αδυναμία προσπέλασης του αρχείου: ';
+$PHPMAILER_LANG['file_open'] = 'Σφάλμα Αρχείου: Δεν είναι δυνατό το άνοιγμα του ακόλουθου αρχείου: ';
+$PHPMAILER_LANG['from_failed'] = 'Η παρακάτω διεύθυνση αποστολέα δεν είναι σωστή: ';
+$PHPMAILER_LANG['instantiate'] = 'Αδυναμία εκκίνησης Mail function.';
+$PHPMAILER_LANG['invalid_address'] = 'Το μήνυμα δεν εστάλη, η διεύθυνση δεν είναι έγκυρη: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer δεν υποστηρίζεται.';
+$PHPMAILER_LANG['provide_address'] = 'Παρακαλούμε δώστε τουλάχιστον μια e-mail διεύθυνση παραλήπτη.';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP Σφάλμα: Οι παρακάτω διευθύνσεις παραλήπτη δεν είναι έγκυρες: ';
+$PHPMAILER_LANG['signing'] = 'Σφάλμα υπογραφής: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'Αποτυχία σύνδεσης στον SMTP Server.';
+$PHPMAILER_LANG['smtp_error'] = 'Σφάλμα από τον SMTP Server: ';
+$PHPMAILER_LANG['variable_set'] = 'Αδυναμία ορισμού ή αρχικοποίησης μεταβλητής: ';
+//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-eo.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-eo.php
new file mode 100644
index 0000000..5ca6cb7
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-eo.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Esperanto PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'Eraro de servilo SMTP : aŭtentigo malsukcesis.';
+$PHPMAILER_LANG['connect_host'] = 'Eraro de servilo SMTP : konektado al servilo malsukcesis.';
+$PHPMAILER_LANG['data_not_accepted'] = 'Eraro de servilo SMTP : neĝustaj datumoj.';
+$PHPMAILER_LANG['empty_message'] = 'Teksto de mesaĝo mankas.';
+$PHPMAILER_LANG['encoding'] = 'Nekonata kodoprezento: ';
+$PHPMAILER_LANG['execute'] = 'Lanĉi rulumadon ne eblis: ';
+$PHPMAILER_LANG['file_access'] = 'Aliro al dosiero ne sukcesis: ';
+$PHPMAILER_LANG['file_open'] = 'Eraro de dosiero: malfermo neeblas: ';
+$PHPMAILER_LANG['from_failed'] = 'Jena adreso de sendinto malsukcesis: ';
+$PHPMAILER_LANG['instantiate'] = 'Genero de retmesaĝa funkcio neeblis.';
+$PHPMAILER_LANG['invalid_address'] = 'Retadreso ne validas: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mesaĝilo ne subtenata.';
+$PHPMAILER_LANG['provide_address'] = 'Vi devas tajpi almenaŭ unu recevontan retadreson.';
+$PHPMAILER_LANG['recipients_failed'] = 'Eraro de servilo SMTP : la jenaj poŝtrecivuloj kaŭzis eraron: ';
+$PHPMAILER_LANG['signing'] = 'Eraro de subskribo: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP konektado malsukcesis.';
+$PHPMAILER_LANG['smtp_error'] = 'Eraro de servilo SMTP : ';
+$PHPMAILER_LANG['variable_set'] = 'Variablo ne pravalorizeblas aŭ ne repravalorizeblas: ';
+$PHPMAILER_LANG['extension_missing'] = 'Mankas etendo: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-es.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-es.php
new file mode 100644
index 0000000..f2c4e83
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-es.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Spanish PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Matt Sturdy <matt.sturdy@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'Error SMTP: Imposible autentificar.';
+$PHPMAILER_LANG['connect_host'] = 'Error SMTP: Imposible conectar al servidor SMTP.';
+$PHPMAILER_LANG['data_not_accepted'] = 'Error SMTP: Datos no aceptados.';
+$PHPMAILER_LANG['empty_message'] = 'El cuerpo del mensaje está vacío.';
+$PHPMAILER_LANG['encoding'] = 'Codificación desconocida: ';
+$PHPMAILER_LANG['execute'] = 'Imposible ejecutar: ';
+$PHPMAILER_LANG['file_access'] = 'Imposible acceder al archivo: ';
+$PHPMAILER_LANG['file_open'] = 'Error de Archivo: Imposible abrir el archivo: ';
+$PHPMAILER_LANG['from_failed'] = 'La(s) siguiente(s) direcciones de remitente fallaron: ';
+$PHPMAILER_LANG['instantiate'] = 'Imposible crear una instancia de la función Mail.';
+$PHPMAILER_LANG['invalid_address'] = 'Imposible enviar: dirección de email inválido: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer no está soportado.';
+$PHPMAILER_LANG['provide_address'] = 'Debe proporcionar al menos una dirección de email de destino.';
+$PHPMAILER_LANG['recipients_failed'] = 'Error SMTP: Los siguientes destinos fallaron: ';
+$PHPMAILER_LANG['signing'] = 'Error al firmar: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() falló.';
+$PHPMAILER_LANG['smtp_error'] = 'Error del servidor SMTP: ';
+$PHPMAILER_LANG['variable_set'] = 'No se pudo configurar la variable: ';
+$PHPMAILER_LANG['extension_missing'] = 'Extensión faltante: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-et.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-et.php
new file mode 100644
index 0000000..7e06da1
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-et.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Estonian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Indrek Päri
+ * @author Elan Ruusamäe <glen@delfi.ee>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP Viga: Autoriseerimise viga.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP Viga: Ei õnnestunud luua ühendust SMTP serveriga.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Viga: Vigased andmed.';
+$PHPMAILER_LANG['empty_message'] = 'Tühi kirja sisu';
+$PHPMAILER_LANG["encoding"] = 'Tundmatu kodeering: ';
+$PHPMAILER_LANG['execute'] = 'Tegevus ebaõnnestus: ';
+$PHPMAILER_LANG['file_access'] = 'Pole piisavalt õiguseid järgneva faili avamiseks: ';
+$PHPMAILER_LANG['file_open'] = 'Faili Viga: Faili avamine ebaõnnestus: ';
+$PHPMAILER_LANG['from_failed'] = 'Järgnev saatja e-posti aadress on vigane: ';
+$PHPMAILER_LANG['instantiate'] = 'mail funktiooni käivitamine ebaõnnestus.';
+$PHPMAILER_LANG['invalid_address'] = 'Saatmine peatatud, e-posti address vigane: ';
+$PHPMAILER_LANG['provide_address'] = 'Te peate määrama vähemalt ühe saaja e-posti aadressi.';
+$PHPMAILER_LANG['mailer_not_supported'] = ' maileri tugi puudub.';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP Viga: Järgnevate saajate e-posti aadressid on vigased: ';
+$PHPMAILER_LANG["signing"] = 'Viga allkirjastamisel: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() ebaõnnestus.';
+$PHPMAILER_LANG['smtp_error'] = 'SMTP serveri viga: ';
+$PHPMAILER_LANG['variable_set'] = 'Ei õnnestunud määrata või lähtestada muutujat: ';
+$PHPMAILER_LANG['extension_missing'] = 'Nõutud laiendus on puudu: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fa.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fa.php
new file mode 100644
index 0000000..8aa0ad2
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fa.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Persian/Farsi PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Ali Jazayeri <jaza.ali@gmail.com>
+ * @author Mohammad Hossein Mojtahedi <mhm5000@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'خطای SMTP: احراز هویت با شکست مواجه شد.';
+$PHPMAILER_LANG['connect_host'] = 'خطای SMTP: اتصال به سرور SMTP برقرار نشد.';
+$PHPMAILER_LANG['data_not_accepted'] = 'خطای SMTP: دادهها نادرست هستند.';
+$PHPMAILER_LANG['empty_message'] = 'بخش متن پیام خالی است.';
+$PHPMAILER_LANG['encoding'] = 'کدگذاری ناشناخته: ';
+$PHPMAILER_LANG['execute'] = 'امکان اجرا وجود ندارد: ';
+$PHPMAILER_LANG['file_access'] = 'امکان دسترسی به فایل وجود ندارد: ';
+$PHPMAILER_LANG['file_open'] = 'خطای File: امکان بازکردن فایل وجود ندارد: ';
+$PHPMAILER_LANG['from_failed'] = 'آدرس فرستنده اشتباه است: ';
+$PHPMAILER_LANG['instantiate'] = 'امکان معرفی تابع ایمیل وجود ندارد.';
+$PHPMAILER_LANG['invalid_address'] = 'آدرس ایمیل معتبر نیست: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer پشتیبانی نمیشود.';
+$PHPMAILER_LANG['provide_address'] = 'باید حداقل یک آدرس گیرنده وارد کنید.';
+$PHPMAILER_LANG['recipients_failed'] = 'خطای SMTP: ارسال به آدرس گیرنده با خطا مواجه شد: ';
+$PHPMAILER_LANG['signing'] = 'خطا در امضا: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'خطا در اتصال به SMTP.';
+$PHPMAILER_LANG['smtp_error'] = 'خطا در SMTP Server: ';
+$PHPMAILER_LANG['variable_set'] = 'امکان ارسال یا ارسال مجدد متغیرها وجود ندارد: ';
+$PHPMAILER_LANG['extension_missing'] = 'افزونه موجود نیست: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fi.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fi.php
new file mode 100644
index 0000000..ec4e752
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fi.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Finnish PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Jyry Kuukanen
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP-virhe: käyttäjätunnistus epäonnistui.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP-virhe: yhteys palvelimeen ei onnistu.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP-virhe: data on virheellinen.';
+//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
+$PHPMAILER_LANG['encoding'] = 'Tuntematon koodaustyyppi: ';
+$PHPMAILER_LANG['execute'] = 'Suoritus epäonnistui: ';
+$PHPMAILER_LANG['file_access'] = 'Seuraavaan tiedostoon ei ole oikeuksia: ';
+$PHPMAILER_LANG['file_open'] = 'Tiedostovirhe: Ei voida avata tiedostoa: ';
+$PHPMAILER_LANG['from_failed'] = 'Seuraava lähettäjän osoite on virheellinen: ';
+$PHPMAILER_LANG['instantiate'] = 'mail-funktion luonti epäonnistui.';
+//$PHPMAILER_LANG['invalid_address'] = 'Invalid address: ';
+$PHPMAILER_LANG['mailer_not_supported'] = 'postivälitintyyppiä ei tueta.';
+$PHPMAILER_LANG['provide_address'] = 'Aseta vähintään yksi vastaanottajan sähköpostiosoite.';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP-virhe: seuraava vastaanottaja osoite on virheellinen.';
+$PHPMAILER_LANG['encoding'] = 'Tuntematon koodaustyyppi: ';
+//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
+//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
+//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
+//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
+//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fo.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fo.php
new file mode 100644
index 0000000..68cdef1
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fo.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Faroese PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Dávur Sørensen <http://www.profo-webdesign.dk>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP feilur: Kundi ikki góðkenna.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP feilur: Kundi ikki knýta samband við SMTP vert.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP feilur: Data ikki góðkent.';
+//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
+$PHPMAILER_LANG['encoding'] = 'Ókend encoding: ';
+$PHPMAILER_LANG['execute'] = 'Kundi ikki útføra: ';
+$PHPMAILER_LANG['file_access'] = 'Kundi ikki tilganga fílu: ';
+$PHPMAILER_LANG['file_open'] = 'Fílu feilur: Kundi ikki opna fílu: ';
+$PHPMAILER_LANG['from_failed'] = 'fylgjandi Frá/From adressa miseydnaðist: ';
+$PHPMAILER_LANG['instantiate'] = 'Kuni ikki instantiera mail funktión.';
+//$PHPMAILER_LANG['invalid_address'] = 'Invalid address: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' er ikki supporterað.';
+$PHPMAILER_LANG['provide_address'] = 'Tú skal uppgeva minst móttakara-emailadressu(r).';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP Feilur: Fylgjandi móttakarar miseydnaðust: ';
+//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
+//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
+//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
+//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
+//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fr.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fr.php
new file mode 100644
index 0000000..af68c92
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fr.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * French PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * Some French punctuation requires a thin non-breaking space (U+202F) character before it,
+ * for example before a colon or exclamation mark.
+ * There is one of these characters between these quotes: " "
+ * @see http://unicode.org/udhr/n/notes_fra.html
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'Erreur SMTP : échec de l\'authentification.';
+$PHPMAILER_LANG['connect_host'] = 'Erreur SMTP : impossible de se connecter au serveur SMTP.';
+$PHPMAILER_LANG['data_not_accepted'] = 'Erreur SMTP : données incorrectes.';
+$PHPMAILER_LANG['empty_message'] = 'Corps du message vide.';
+$PHPMAILER_LANG['encoding'] = 'Encodage inconnu : ';
+$PHPMAILER_LANG['execute'] = 'Impossible de lancer l\'exécution : ';
+$PHPMAILER_LANG['file_access'] = 'Impossible d\'accéder au fichier : ';
+$PHPMAILER_LANG['file_open'] = 'Ouverture du fichier impossible : ';
+$PHPMAILER_LANG['from_failed'] = 'L\'adresse d\'expéditeur suivante a échoué : ';
+$PHPMAILER_LANG['instantiate'] = 'Impossible d\'instancier la fonction mail.';
+$PHPMAILER_LANG['invalid_address'] = 'L\'adresse courriel n\'est pas valide : ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' client de messagerie non supporté.';
+$PHPMAILER_LANG['provide_address'] = 'Vous devez fournir au moins une adresse de destinataire.';
+$PHPMAILER_LANG['recipients_failed'] = 'Erreur SMTP : les destinataires suivants sont en erreur : ';
+$PHPMAILER_LANG['signing'] = 'Erreur de signature : ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'Échec de la connexion SMTP.';
+$PHPMAILER_LANG['smtp_error'] = 'Erreur du serveur SMTP : ';
+$PHPMAILER_LANG['variable_set'] = 'Impossible d\'initialiser ou de réinitialiser une variable : ';
+$PHPMAILER_LANG['extension_missing'] = 'Extension manquante : ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-gl.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-gl.php
new file mode 100644
index 0000000..9b4ce4d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-gl.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Galician PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author by Donato Rouco <donatorouco@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'Erro SMTP: Non puido ser autentificado.';
+$PHPMAILER_LANG['connect_host'] = 'Erro SMTP: Non puido conectar co servidor SMTP.';
+$PHPMAILER_LANG['data_not_accepted'] = 'Erro SMTP: Datos non aceptados.';
+$PHPMAILER_LANG['empty_message'] = 'Corpo da mensaxe vacía';
+$PHPMAILER_LANG['encoding'] = 'Codificación descoñecida: ';
+$PHPMAILER_LANG['execute'] = 'Non puido ser executado: ';
+$PHPMAILER_LANG['file_access'] = 'Nob puido acceder ó arquivo: ';
+$PHPMAILER_LANG['file_open'] = 'Erro de Arquivo: No puido abrir o arquivo: ';
+$PHPMAILER_LANG['from_failed'] = 'A(s) seguinte(s) dirección(s) de remitente(s) deron erro: ';
+$PHPMAILER_LANG['instantiate'] = 'Non puido crear unha instancia da función Mail.';
+$PHPMAILER_LANG['invalid_address'] = 'Non puido envia-lo correo: dirección de email inválida: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer non está soportado.';
+$PHPMAILER_LANG['provide_address'] = 'Debe engadir polo menos unha dirección de email coma destino.';
+$PHPMAILER_LANG['recipients_failed'] = 'Erro SMTP: Os seguintes destinos fallaron: ';
+$PHPMAILER_LANG['signing'] = 'Erro ó firmar: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() fallou.';
+$PHPMAILER_LANG['smtp_error'] = 'Erro do servidor SMTP: ';
+$PHPMAILER_LANG['variable_set'] = 'Non puidemos axustar ou reaxustar a variábel: ';
+//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-he.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-he.php
new file mode 100644
index 0000000..70eb717
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-he.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Hebrew PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Ronny Sherer <ronny@hoojima.com>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'שגיאת SMTP: פעולת האימות נכשלה.';
+$PHPMAILER_LANG['connect_host'] = 'שגיאת SMTP: לא הצלחתי להתחבר לשרת SMTP.';
+$PHPMAILER_LANG['data_not_accepted'] = 'שגיאת SMTP: מידע לא התקבל.';
+$PHPMAILER_LANG['empty_message'] = 'גוף ההודעה ריק';
+$PHPMAILER_LANG['invalid_address'] = 'כתובת שגויה: ';
+$PHPMAILER_LANG['encoding'] = 'קידוד לא מוכר: ';
+$PHPMAILER_LANG['execute'] = 'לא הצלחתי להפעיל את: ';
+$PHPMAILER_LANG['file_access'] = 'לא ניתן לגשת לקובץ: ';
+$PHPMAILER_LANG['file_open'] = 'שגיאת קובץ: לא ניתן לגשת לקובץ: ';
+$PHPMAILER_LANG['from_failed'] = 'כתובות הנמענים הבאות נכשלו: ';
+$PHPMAILER_LANG['instantiate'] = 'לא הצלחתי להפעיל את פונקציית המייל.';
+$PHPMAILER_LANG['mailer_not_supported'] = ' אינה נתמכת.';
+$PHPMAILER_LANG['provide_address'] = 'חובה לספק לפחות כתובת אחת של מקבל המייל.';
+$PHPMAILER_LANG['recipients_failed'] = 'שגיאת SMTP: הנמענים הבאים נכשלו: ';
+$PHPMAILER_LANG['signing'] = 'שגיאת חתימה: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
+$PHPMAILER_LANG['smtp_error'] = 'שגיאת שרת SMTP: ';
+$PHPMAILER_LANG['variable_set'] = 'לא ניתן לקבוע או לשנות את המשתנה: ';
+//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hi.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hi.php
new file mode 100644
index 0000000..607a5ee
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hi.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Hindi PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Yash Karanke <mr.karanke@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP त्रुटि: प्रामाणिकता की जांच नहीं हो सका। ';
+$PHPMAILER_LANG['connect_host'] = 'SMTP त्रुटि: SMTP सर्वर से कनेक्ट नहीं हो सका। ';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP त्रुटि: डेटा स्वीकार नहीं किया जाता है। ';
+$PHPMAILER_LANG['empty_message'] = 'संदेश खाली है। ';
+$PHPMAILER_LANG['encoding'] = 'अज्ञात एन्कोडिंग प्रकार। ';
+$PHPMAILER_LANG['execute'] = 'आदेश को निष्पादित करने में विफल। ';
+$PHPMAILER_LANG['file_access'] = 'फ़ाइल उपलब्ध नहीं है। ';
+$PHPMAILER_LANG['file_open'] = 'फ़ाइल त्रुटि: फाइल को खोला नहीं जा सका। ';
+$PHPMAILER_LANG['from_failed'] = 'प्रेषक का पता गलत है। ';
+$PHPMAILER_LANG['instantiate'] = 'मेल फ़ंक्शन कॉल नहीं कर सकता है।';
+$PHPMAILER_LANG['invalid_address'] = 'पता गलत है। ';
+$PHPMAILER_LANG['mailer_not_supported'] = 'मेल सर्वर के साथ काम नहीं करता है। ';
+$PHPMAILER_LANG['provide_address'] = 'आपको कम से कम एक प्राप्तकर्ता का ई-मेल पता प्रदान करना होगा।';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP त्रुटि: निम्न प्राप्तकर्ताओं को पते भेजने में विफल। ';
+$PHPMAILER_LANG['signing'] = 'साइनअप त्रुटि:। ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP का connect () फ़ंक्शन विफल हुआ। ';
+$PHPMAILER_LANG['smtp_error'] = 'SMTP सर्वर त्रुटि। ';
+$PHPMAILER_LANG['variable_set'] = 'चर को बना या संशोधित नहीं किया जा सकता। ';
+$PHPMAILER_LANG['extension_missing'] = 'एक्सटेन्षन गायब है: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hr.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hr.php
new file mode 100644
index 0000000..3822920
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hr.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Croatian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Hrvoj3e <hrvoj3e@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP Greška: Neuspjela autentikacija.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP Greška: Ne mogu se spojiti na SMTP poslužitelj.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Greška: Podatci nisu prihvaćeni.';
+$PHPMAILER_LANG['empty_message'] = 'Sadržaj poruke je prazan.';
+$PHPMAILER_LANG['encoding'] = 'Nepoznati encoding: ';
+$PHPMAILER_LANG['execute'] = 'Nije moguće izvršiti naredbu: ';
+$PHPMAILER_LANG['file_access'] = 'Nije moguće pristupiti datoteci: ';
+$PHPMAILER_LANG['file_open'] = 'Nije moguće otvoriti datoteku: ';
+$PHPMAILER_LANG['from_failed'] = 'SMTP Greška: Slanje s navedenih e-mail adresa nije uspjelo: ';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP Greška: Slanje na navedenih e-mail adresa nije uspjelo: ';
+$PHPMAILER_LANG['instantiate'] = 'Ne mogu pokrenuti mail funkcionalnost.';
+$PHPMAILER_LANG['invalid_address'] = 'E-mail nije poslan. Neispravna e-mail adresa: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer nije podržan.';
+$PHPMAILER_LANG['provide_address'] = 'Definirajte barem jednu adresu primatelja.';
+$PHPMAILER_LANG['signing'] = 'Greška prilikom prijave: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'Spajanje na SMTP poslužitelj nije uspjelo.';
+$PHPMAILER_LANG['smtp_error'] = 'Greška SMTP poslužitelja: ';
+$PHPMAILER_LANG['variable_set'] = 'Ne mogu postaviti varijablu niti ju vratiti nazad: ';
+$PHPMAILER_LANG['extension_missing'] = 'Nedostaje proširenje: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hu.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hu.php
new file mode 100644
index 0000000..196cddc
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hu.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Hungarian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author @dominicus-75
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP hiba: az azonosítás sikertelen.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP hiba: nem lehet kapcsolódni az SMTP-szerverhez.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP hiba: adatok visszautasítva.';
+$PHPMAILER_LANG['empty_message'] = 'Üres az üzenettörzs.';
+$PHPMAILER_LANG['encoding'] = 'Ismeretlen kódolás: ';
+$PHPMAILER_LANG['execute'] = 'Nem lehet végrehajtani: ';
+$PHPMAILER_LANG['file_access'] = 'A következő fájl nem elérhető: ';
+$PHPMAILER_LANG['file_open'] = 'Fájl hiba: a következő fájlt nem lehet megnyitni: ';
+$PHPMAILER_LANG['from_failed'] = 'A feladóként megadott következő cím hibás: ';
+$PHPMAILER_LANG['instantiate'] = 'A PHP mail() függvényt nem sikerült végrehajtani.';
+$PHPMAILER_LANG['invalid_address'] = 'Érvénytelen cím: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' a mailer-osztály nem támogatott.';
+$PHPMAILER_LANG['provide_address'] = 'Legalább egy címzettet fel kell tüntetni.';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP hiba: a címzettként megadott következő címek hibásak: ';
+$PHPMAILER_LANG['signing'] = 'Hibás aláírás: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'Hiba az SMTP-kapcsolatban.';
+$PHPMAILER_LANG['smtp_error'] = 'SMTP-szerver hiba: ';
+$PHPMAILER_LANG['variable_set'] = 'A következő változók beállítása nem sikerült: ';
+$PHPMAILER_LANG['extension_missing'] = 'Bővítmény hiányzik: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hy.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hy.php
new file mode 100644
index 0000000..ff2a969
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hy.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Armenian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Hrayr Grigoryan <hrayr@bits.am>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP -ի սխալ: չհաջողվեց ստուգել իսկությունը.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP -ի սխալ: չհաջողվեց կապ հաստատել SMTP սերվերի հետ.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP -ի սխալ: տվյալները ընդունված չեն.';
+$PHPMAILER_LANG['empty_message'] = 'Հաղորդագրությունը դատարկ է';
+$PHPMAILER_LANG['encoding'] = 'Կոդավորման անհայտ տեսակ: ';
+$PHPMAILER_LANG['execute'] = 'Չհաջողվեց իրականացնել հրամանը: ';
+$PHPMAILER_LANG['file_access'] = 'Ֆայլը հասանելի չէ: ';
+$PHPMAILER_LANG['file_open'] = 'Ֆայլի սխալ: ֆայլը չհաջողվեց բացել: ';
+$PHPMAILER_LANG['from_failed'] = 'Ուղարկողի հետևյալ հասցեն սխալ է: ';
+$PHPMAILER_LANG['instantiate'] = 'Հնարավոր չէ կանչել mail ֆունկցիան.';
+$PHPMAILER_LANG['invalid_address'] = 'Հասցեն սխալ է: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' փոստային սերվերի հետ չի աշխատում.';
+$PHPMAILER_LANG['provide_address'] = 'Անհրաժեշտ է տրամադրել գոնե մեկ ստացողի e-mail հասցե.';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP -ի սխալ: չի հաջողվել ուղարկել հետևյալ ստացողների հասցեներին: ';
+$PHPMAILER_LANG['signing'] = 'Ստորագրման սխալ: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP -ի connect() ֆունկցիան չի հաջողվել';
+$PHPMAILER_LANG['smtp_error'] = 'SMTP սերվերի սխալ: ';
+$PHPMAILER_LANG['variable_set'] = 'Չի հաջողվում ստեղծել կամ վերափոխել փոփոխականը: ';
+$PHPMAILER_LANG['extension_missing'] = 'Հավելվածը բացակայում է: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-id.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-id.php
new file mode 100644
index 0000000..ba6ca5f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-id.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Indonesian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Cecep Prawiro <cecep.prawiro@gmail.com>
+ * @author @januridp
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'Kesalahan SMTP: Tidak dapat mengotentikasi.';
+$PHPMAILER_LANG['connect_host'] = 'Kesalahan SMTP: Tidak dapat terhubung ke host SMTP.';
+$PHPMAILER_LANG['data_not_accepted'] = 'Kesalahan SMTP: Data tidak diterima.';
+$PHPMAILER_LANG['empty_message'] = 'Isi pesan kosong';
+$PHPMAILER_LANG['encoding'] = 'Pengkodean karakter tidak dikenali: ';
+$PHPMAILER_LANG['execute'] = 'Tidak dapat menjalankan proses : ';
+$PHPMAILER_LANG['file_access'] = 'Tidak dapat mengakses berkas : ';
+$PHPMAILER_LANG['file_open'] = 'Kesalahan File: Berkas tidak dapat dibuka : ';
+$PHPMAILER_LANG['from_failed'] = 'Alamat pengirim berikut mengakibatkan kesalahan : ';
+$PHPMAILER_LANG['instantiate'] = 'Tidak dapat menginisialisasi fungsi surel';
+$PHPMAILER_LANG['invalid_address'] = 'Gagal terkirim, alamat surel tidak benar : ';
+$PHPMAILER_LANG['provide_address'] = 'Harus disediakan minimal satu alamat tujuan';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer tidak didukung';
+$PHPMAILER_LANG['recipients_failed'] = 'Kesalahan SMTP: Alamat tujuan berikut menghasilkan kesalahan : ';
+$PHPMAILER_LANG['signing'] = 'Kesalahan dalam tanda tangan : ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() gagal.';
+$PHPMAILER_LANG['smtp_error'] = 'Kesalahan pada pelayan SMTP : ';
+$PHPMAILER_LANG['variable_set'] = 'Tidak dapat mengatur atau mengatur ulang variable : ';
+$PHPMAILER_LANG['extension_missing'] = 'Ekstensi hilang: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-it.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-it.php
new file mode 100644
index 0000000..e67b6f7
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-it.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Italian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Ilias Bartolini <brain79@inwind.it>
+ * @author Stefano Sabatini <sabas88@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP Error: Impossibile autenticarsi.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP Error: Impossibile connettersi all\'host SMTP.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Error: Dati non accettati dal server.';
+$PHPMAILER_LANG['empty_message'] = 'Il corpo del messaggio è vuoto';
+$PHPMAILER_LANG['encoding'] = 'Codifica dei caratteri sconosciuta: ';
+$PHPMAILER_LANG['execute'] = 'Impossibile eseguire l\'operazione: ';
+$PHPMAILER_LANG['file_access'] = 'Impossibile accedere al file: ';
+$PHPMAILER_LANG['file_open'] = 'File Error: Impossibile aprire il file: ';
+$PHPMAILER_LANG['from_failed'] = 'I seguenti indirizzi mittenti hanno generato errore: ';
+$PHPMAILER_LANG['instantiate'] = 'Impossibile istanziare la funzione mail';
+$PHPMAILER_LANG['invalid_address'] = 'Impossibile inviare, l\'indirizzo email non è valido: ';
+$PHPMAILER_LANG['provide_address'] = 'Deve essere fornito almeno un indirizzo ricevente';
+$PHPMAILER_LANG['mailer_not_supported'] = 'Mailer non supportato';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP Error: I seguenti indirizzi destinatari hanno generato un errore: ';
+$PHPMAILER_LANG['signing'] = 'Errore nella firma: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() fallita.';
+$PHPMAILER_LANG['smtp_error'] = 'Errore del server SMTP: ';
+$PHPMAILER_LANG['variable_set'] = 'Impossibile impostare o resettare la variabile: ';
+$PHPMAILER_LANG['extension_missing'] = 'Estensione mancante: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ja.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ja.php
new file mode 100644
index 0000000..2d77872
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ja.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Japanese PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Mitsuhiro Yoshida <http://mitstek.com/>
+ * @author Yoshi Sakai <http://bluemooninc.jp/>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTPエラー: 認証できませんでした。';
+$PHPMAILER_LANG['connect_host'] = 'SMTPエラー: SMTPホストに接続できませんでした。';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTPエラー: データが受け付けられませんでした。';
+//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
+$PHPMAILER_LANG['encoding'] = '不明なエンコーディング: ';
+$PHPMAILER_LANG['execute'] = '実行できませんでした: ';
+$PHPMAILER_LANG['file_access'] = 'ファイルにアクセスできません: ';
+$PHPMAILER_LANG['file_open'] = 'ファイルエラー: ファイルを開けません: ';
+$PHPMAILER_LANG['from_failed'] = 'Fromアドレスを登録する際にエラーが発生しました: ';
+$PHPMAILER_LANG['instantiate'] = 'メール関数が正常に動作しませんでした。';
+//$PHPMAILER_LANG['invalid_address'] = 'Invalid address: ';
+$PHPMAILER_LANG['provide_address'] = '少なくとも1つメールアドレスを 指定する必要があります。';
+$PHPMAILER_LANG['mailer_not_supported'] = ' メーラーがサポートされていません。';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTPエラー: 次の受信者アドレスに 間違いがあります: ';
+//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
+//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
+//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
+//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
+//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ka.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ka.php
new file mode 100644
index 0000000..dd1af8a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ka.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Georgian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Avtandil Kikabidze aka LONGMAN <akalongman@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP შეცდომა: ავტორიზაცია შეუძლებელია.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP შეცდომა: SMTP სერვერთან დაკავშირება შეუძლებელია.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP შეცდომა: მონაცემები არ იქნა მიღებული.';
+$PHPMAILER_LANG['encoding'] = 'კოდირების უცნობი ტიპი: ';
+$PHPMAILER_LANG['execute'] = 'შეუძლებელია შემდეგი ბრძანების შესრულება: ';
+$PHPMAILER_LANG['file_access'] = 'შეუძლებელია წვდომა ფაილთან: ';
+$PHPMAILER_LANG['file_open'] = 'ფაილური სისტემის შეცდომა: არ იხსნება ფაილი: ';
+$PHPMAILER_LANG['from_failed'] = 'გამგზავნის არასწორი მისამართი: ';
+$PHPMAILER_LANG['instantiate'] = 'mail ფუნქციის გაშვება ვერ ხერხდება.';
+$PHPMAILER_LANG['provide_address'] = 'გთხოვთ მიუთითოთ ერთი ადრესატის e-mail მისამართი მაინც.';
+$PHPMAILER_LANG['mailer_not_supported'] = ' - საფოსტო სერვერის მხარდაჭერა არ არის.';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP შეცდომა: შემდეგ მისამართებზე გაგზავნა ვერ მოხერხდა: ';
+$PHPMAILER_LANG['empty_message'] = 'შეტყობინება ცარიელია';
+$PHPMAILER_LANG['invalid_address'] = 'არ გაიგზავნა, e-mail მისამართის არასწორი ფორმატი: ';
+$PHPMAILER_LANG['signing'] = 'ხელმოწერის შეცდომა: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'შეცდომა SMTP სერვერთან დაკავშირებისას';
+$PHPMAILER_LANG['smtp_error'] = 'SMTP სერვერის შეცდომა: ';
+$PHPMAILER_LANG['variable_set'] = 'შეუძლებელია შემდეგი ცვლადის შექმნა ან შეცვლა: ';
+$PHPMAILER_LANG['extension_missing'] = 'ბიბლიოთეკა არ არსებობს: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ko.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ko.php
new file mode 100644
index 0000000..9599fa6
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ko.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Korean PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author ChalkPE <amato0617@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP 오류: 인증할 수 없습니다.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP 오류: SMTP 호스트에 접속할 수 없습니다.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP 오류: 데이터가 받아들여지지 않았습니다.';
+$PHPMAILER_LANG['empty_message'] = '메세지 내용이 없습니다';
+$PHPMAILER_LANG['encoding'] = '알 수 없는 인코딩: ';
+$PHPMAILER_LANG['execute'] = '실행 불가: ';
+$PHPMAILER_LANG['file_access'] = '파일 접근 불가: ';
+$PHPMAILER_LANG['file_open'] = '파일 오류: 파일을 열 수 없습니다: ';
+$PHPMAILER_LANG['from_failed'] = '다음 From 주소에서 오류가 발생했습니다: ';
+$PHPMAILER_LANG['instantiate'] = 'mail 함수를 인스턴스화할 수 없습니다';
+$PHPMAILER_LANG['invalid_address'] = '잘못된 주소: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' 메일러는 지원되지 않습니다.';
+$PHPMAILER_LANG['provide_address'] = '적어도 한 개 이상의 수신자 메일 주소를 제공해야 합니다.';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP 오류: 다음 수신자에서 오류가 발생했습니다: ';
+$PHPMAILER_LANG['signing'] = '서명 오류: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP 연결을 실패하였습니다.';
+$PHPMAILER_LANG['smtp_error'] = 'SMTP 서버 오류: ';
+$PHPMAILER_LANG['variable_set'] = '변수 설정 및 초기화 불가: ';
+$PHPMAILER_LANG['extension_missing'] = '확장자 없음: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-lt.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-lt.php
new file mode 100644
index 0000000..1253a4f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-lt.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Lithuanian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Dainius Kaupaitis <dk@sum.lt>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP klaida: autentifikacija nepavyko.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP klaida: nepavyksta prisijungti prie SMTP stoties.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP klaida: duomenys nepriimti.';
+$PHPMAILER_LANG['empty_message'] = 'Laiško turinys tuščias';
+$PHPMAILER_LANG['encoding'] = 'Neatpažinta koduotė: ';
+$PHPMAILER_LANG['execute'] = 'Nepavyko įvykdyti komandos: ';
+$PHPMAILER_LANG['file_access'] = 'Byla nepasiekiama: ';
+$PHPMAILER_LANG['file_open'] = 'Bylos klaida: Nepavyksta atidaryti: ';
+$PHPMAILER_LANG['from_failed'] = 'Neteisingas siuntėjo adresas: ';
+$PHPMAILER_LANG['instantiate'] = 'Nepavyko paleisti mail funkcijos.';
+$PHPMAILER_LANG['invalid_address'] = 'Neteisingas adresas: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' pašto stotis nepalaikoma.';
+$PHPMAILER_LANG['provide_address'] = 'Nurodykite bent vieną gavėjo adresą.';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP klaida: nepavyko išsiųsti šiems gavėjams: ';
+$PHPMAILER_LANG['signing'] = 'Prisijungimo klaida: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP susijungimo klaida';
+$PHPMAILER_LANG['smtp_error'] = 'SMTP stoties klaida: ';
+$PHPMAILER_LANG['variable_set'] = 'Nepavyko priskirti reikšmės kintamajam: ';
+//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-lv.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-lv.php
new file mode 100644
index 0000000..39bf9a1
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-lv.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Latvian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Eduards M. <e@npd.lv>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP kļūda: Autorizācija neizdevās.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP Kļūda: Nevar izveidot savienojumu ar SMTP serveri.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Kļūda: Nepieņem informāciju.';
+$PHPMAILER_LANG['empty_message'] = 'Ziņojuma teksts ir tukšs';
+$PHPMAILER_LANG['encoding'] = 'Neatpazīts kodējums: ';
+$PHPMAILER_LANG['execute'] = 'Neizdevās izpildīt komandu: ';
+$PHPMAILER_LANG['file_access'] = 'Fails nav pieejams: ';
+$PHPMAILER_LANG['file_open'] = 'Faila kļūda: Nevar atvērt failu: ';
+$PHPMAILER_LANG['from_failed'] = 'Nepareiza sūtītāja adrese: ';
+$PHPMAILER_LANG['instantiate'] = 'Nevar palaist sūtīšanas funkciju.';
+$PHPMAILER_LANG['invalid_address'] = 'Nepareiza adrese: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' sūtītājs netiek atbalstīts.';
+$PHPMAILER_LANG['provide_address'] = 'Lūdzu, norādiet vismaz vienu adresātu.';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP kļūda: neizdevās nosūtīt šādiem saņēmējiem: ';
+$PHPMAILER_LANG['signing'] = 'Autorizācijas kļūda: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP savienojuma kļūda';
+$PHPMAILER_LANG['smtp_error'] = 'SMTP servera kļūda: ';
+$PHPMAILER_LANG['variable_set'] = 'Nevar piešķirt mainīgā vērtību: ';
+//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-mg.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-mg.php
new file mode 100644
index 0000000..f4c7563
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-mg.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Malagasy PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Hackinet <piyushjha8164@gmail.com>
+ */
+$PHPMAILER_LANG['authenticate'] = 'Hadisoana SMTP: Tsy nahomby ny fanamarinana.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP Error: Tsy afaka mampifandray amin\'ny mpampiantrano SMTP.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP diso: tsy voarakitra ny angona.';
+$PHPMAILER_LANG['empty_message'] = 'Tsy misy ny votoaty mailaka.';
+$PHPMAILER_LANG['encoding'] = 'Tsy fantatra encoding: ';
+$PHPMAILER_LANG['execute'] = 'Tsy afaka manatanteraka ity baiko manaraka ity: ';
+$PHPMAILER_LANG['file_access'] = 'Tsy nahomby ny fidirana amin\'ity rakitra ity: ';
+$PHPMAILER_LANG['file_open'] = 'Hadisoana diso: Tsy afaka nanokatra ity file manaraka ity: ';
+$PHPMAILER_LANG['from_failed'] = 'Ny adiresy iraka manaraka dia diso: ';
+$PHPMAILER_LANG['instantiate'] = 'Tsy afaka nanomboka ny hetsika mail.';
+$PHPMAILER_LANG['invalid_address'] = 'Tsy mety ny adiresy: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer tsy manohana.';
+$PHPMAILER_LANG['provide_address'] = 'Alefaso azafady iray adiresy iray farafahakeliny.';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP Error: Tsy mety ireo mpanaraka ireto: ';
+$PHPMAILER_LANG['signing'] = 'Error nandritra ny sonia:';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'Tsy nahomby ny fifandraisana tamin\'ny server SMTP.';
+$PHPMAILER_LANG['smtp_error'] = 'Fahadisoana tamin\'ny server SMTP: ';
+$PHPMAILER_LANG['variable_set'] = 'Tsy azo atao ny mametraka na mamerina ny variable: ';
+$PHPMAILER_LANG['extension_missing'] = 'Tsy hita ny ampahany: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ms.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ms.php
new file mode 100644
index 0000000..f12a6ad
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ms.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Malaysian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Nawawi Jamili <nawawi@rutweb.com>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'Ralat SMTP: Tidak dapat pengesahan.';
+$PHPMAILER_LANG['connect_host'] = 'Ralat SMTP: Tidak dapat menghubungi hos pelayan SMTP.';
+$PHPMAILER_LANG['data_not_accepted'] = 'Ralat SMTP: Data tidak diterima oleh pelayan.';
+$PHPMAILER_LANG['empty_message'] = 'Tiada isi untuk mesej';
+$PHPMAILER_LANG['encoding'] = 'Pengekodan tidak diketahui: ';
+$PHPMAILER_LANG['execute'] = 'Tidak dapat melaksanakan: ';
+$PHPMAILER_LANG['file_access'] = 'Tidak dapat mengakses fail: ';
+$PHPMAILER_LANG['file_open'] = 'Ralat Fail: Tidak dapat membuka fail: ';
+$PHPMAILER_LANG['from_failed'] = 'Berikut merupakan ralat dari alamat e-mel: ';
+$PHPMAILER_LANG['instantiate'] = 'Tidak dapat memberi contoh fungsi e-mel.';
+$PHPMAILER_LANG['invalid_address'] = 'Alamat emel tidak sah: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' jenis penghantar emel tidak disokong.';
+$PHPMAILER_LANG['provide_address'] = 'Anda perlu menyediakan sekurang-kurangnya satu alamat e-mel penerima.';
+$PHPMAILER_LANG['recipients_failed'] = 'Ralat SMTP: Penerima e-mel berikut telah gagal: ';
+$PHPMAILER_LANG['signing'] = 'Ralat pada tanda tangan: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() telah gagal.';
+$PHPMAILER_LANG['smtp_error'] = 'Ralat pada pelayan SMTP: ';
+$PHPMAILER_LANG['variable_set'] = 'Tidak boleh menetapkan atau menetapkan semula pembolehubah: ';
+$PHPMAILER_LANG['extension_missing'] = 'Sambungan hilang: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-nb.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-nb.php
new file mode 100644
index 0000000..97403e7
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-nb.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Norwegian Bokmål PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP Feil: Kunne ikke autentisere.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP Feil: Kunne ikke koble til SMTP tjener.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Feil: Datainnhold ikke akseptert.';
+$PHPMAILER_LANG['empty_message'] = 'Meldingsinnhold mangler';
+$PHPMAILER_LANG['encoding'] = 'Ukjent koding: ';
+$PHPMAILER_LANG['execute'] = 'Kunne ikke utføre: ';
+$PHPMAILER_LANG['file_access'] = 'Får ikke tilgang til filen: ';
+$PHPMAILER_LANG['file_open'] = 'Fil Feil: Kunne ikke åpne filen: ';
+$PHPMAILER_LANG['from_failed'] = 'Følgende Frå adresse feilet: ';
+$PHPMAILER_LANG['instantiate'] = 'Kunne ikke initialisere post funksjon.';
+$PHPMAILER_LANG['invalid_address'] = 'Ugyldig adresse: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' sender er ikke støttet.';
+$PHPMAILER_LANG['provide_address'] = 'Du må opppgi minst en mottakeradresse.';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP Feil: Følgende mottakeradresse feilet: ';
+$PHPMAILER_LANG['signing'] = 'Signering Feil: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP connect() feilet.';
+$PHPMAILER_LANG['smtp_error'] = 'SMTP server feil: ';
+$PHPMAILER_LANG['variable_set'] = 'Kan ikke skrive eller omskrive variabel: ';
+$PHPMAILER_LANG['extension_missing'] = 'Utvidelse mangler: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-nl.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-nl.php
new file mode 100644
index 0000000..f4d0e7c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-nl.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Dutch PHPMailer language file: refer to PHPMailer.php for definitive list.
+ * @package PHPMailer
+ * @author Tuxion <team@tuxion.nl>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP-fout: authenticatie mislukt.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP-fout: kon niet verbinden met SMTP-host.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP-fout: data niet geaccepteerd.';
+$PHPMAILER_LANG['empty_message'] = 'Berichttekst is leeg';
+$PHPMAILER_LANG['encoding'] = 'Onbekende codering: ';
+$PHPMAILER_LANG['execute'] = 'Kon niet uitvoeren: ';
+$PHPMAILER_LANG['file_access'] = 'Kreeg geen toegang tot bestand: ';
+$PHPMAILER_LANG['file_open'] = 'Bestandsfout: kon bestand niet openen: ';
+$PHPMAILER_LANG['from_failed'] = 'Het volgende afzendersadres is mislukt: ';
+$PHPMAILER_LANG['instantiate'] = 'Kon mailfunctie niet initialiseren.';
+$PHPMAILER_LANG['invalid_address'] = 'Ongeldig adres: ';
+$PHPMAILER_LANG['invalid_hostentry'] = 'Ongeldige hostentry: ';
+$PHPMAILER_LANG['invalid_host'] = 'Ongeldige host: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer wordt niet ondersteund.';
+$PHPMAILER_LANG['provide_address'] = 'Er moet minstens één ontvanger worden opgegeven.';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP-fout: de volgende ontvangers zijn mislukt: ';
+$PHPMAILER_LANG['signing'] = 'Signeerfout: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Verbinding mislukt.';
+$PHPMAILER_LANG['smtp_error'] = 'SMTP-serverfout: ';
+$PHPMAILER_LANG['variable_set'] = 'Kan de volgende variabele niet instellen of resetten: ';
+$PHPMAILER_LANG['extension_missing'] = 'Extensie afwezig: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-pl.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-pl.php
new file mode 100644
index 0000000..3da0dee
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-pl.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Polish PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'Błąd SMTP: Nie można przeprowadzić uwierzytelnienia.';
+$PHPMAILER_LANG['connect_host'] = 'Błąd SMTP: Nie można połączyć się z wybranym hostem.';
+$PHPMAILER_LANG['data_not_accepted'] = 'Błąd SMTP: Dane nie zostały przyjęte.';
+$PHPMAILER_LANG['empty_message'] = 'Wiadomość jest pusta.';
+$PHPMAILER_LANG['encoding'] = 'Nieznany sposób kodowania znaków: ';
+$PHPMAILER_LANG['execute'] = 'Nie można uruchomić: ';
+$PHPMAILER_LANG['file_access'] = 'Brak dostępu do pliku: ';
+$PHPMAILER_LANG['file_open'] = 'Nie można otworzyć pliku: ';
+$PHPMAILER_LANG['from_failed'] = 'Następujący adres Nadawcy jest nieprawidłowy: ';
+$PHPMAILER_LANG['instantiate'] = 'Nie można wywołać funkcji mail(). Sprawdź konfigurację serwera.';
+$PHPMAILER_LANG['invalid_address'] = 'Nie można wysłać wiadomości, '.
+ 'następujący adres Odbiorcy jest nieprawidłowy: ';
+$PHPMAILER_LANG['provide_address'] = 'Należy podać prawidłowy adres email Odbiorcy.';
+$PHPMAILER_LANG['mailer_not_supported'] = 'Wybrana metoda wysyłki wiadomości nie jest obsługiwana.';
+$PHPMAILER_LANG['recipients_failed'] = 'Błąd SMTP: Następujący odbiorcy są nieprawidłowi: ';
+$PHPMAILER_LANG['signing'] = 'Błąd podpisywania wiadomości: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() zakończone niepowodzeniem.';
+$PHPMAILER_LANG['smtp_error'] = 'Błąd SMTP: ';
+$PHPMAILER_LANG['variable_set'] = 'Nie można ustawić lub zmodyfikować zmiennej: ';
+$PHPMAILER_LANG['extension_missing'] = 'Brakujące rozszerzenie: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-pt.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-pt.php
new file mode 100644
index 0000000..f365d5d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-pt.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Portuguese (European) PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Jonadabe <jonadabe@hotmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'Erro do SMTP: Não foi possível realizar a autenticação.';
+$PHPMAILER_LANG['connect_host'] = 'Erro do SMTP: Não foi possível realizar ligação com o servidor SMTP.';
+$PHPMAILER_LANG['data_not_accepted'] = 'Erro do SMTP: Os dados foram rejeitados.';
+$PHPMAILER_LANG['empty_message'] = 'A mensagem no e-mail está vazia.';
+$PHPMAILER_LANG['encoding'] = 'Codificação desconhecida: ';
+$PHPMAILER_LANG['execute'] = 'Não foi possível executar: ';
+$PHPMAILER_LANG['file_access'] = 'Não foi possível aceder o ficheiro: ';
+$PHPMAILER_LANG['file_open'] = 'Abertura do ficheiro: Não foi possível abrir o ficheiro: ';
+$PHPMAILER_LANG['from_failed'] = 'Ocorreram falhas nos endereços dos seguintes remententes: ';
+$PHPMAILER_LANG['instantiate'] = 'Não foi possível iniciar uma instância da função mail.';
+$PHPMAILER_LANG['invalid_address'] = 'Não foi enviado nenhum e-mail para o endereço de e-mail inválido: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer não é suportado.';
+$PHPMAILER_LANG['provide_address'] = 'Tem de fornecer pelo menos um endereço como destinatário do e-mail.';
+$PHPMAILER_LANG['recipients_failed'] = 'Erro do SMTP: O endereço do seguinte destinatário falhou: ';
+$PHPMAILER_LANG['signing'] = 'Erro ao assinar: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() falhou.';
+$PHPMAILER_LANG['smtp_error'] = 'Erro de servidor SMTP: ';
+$PHPMAILER_LANG['variable_set'] = 'Não foi possível definir ou redefinir a variável: ';
+$PHPMAILER_LANG['extension_missing'] = 'Extensão em falta: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-pt_br.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-pt_br.php
new file mode 100644
index 0000000..62d692d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-pt_br.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Brazilian Portuguese PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Paulo Henrique Garcia <paulo@controllerweb.com.br>
+ * @author Lucas Guimarães <lucas@lucasguimaraes.com>
+ * @author Phelipe Alves <phelipealvesdesouza@gmail.com>
+ * @author Fabio Beneditto <fabiobeneditto@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'Erro de SMTP: Não foi possível autenticar.';
+$PHPMAILER_LANG['connect_host'] = 'Erro de SMTP: Não foi possível conectar ao servidor SMTP.';
+$PHPMAILER_LANG['data_not_accepted'] = 'Erro de SMTP: Dados rejeitados.';
+$PHPMAILER_LANG['empty_message'] = 'Mensagem vazia';
+$PHPMAILER_LANG['encoding'] = 'Codificação desconhecida: ';
+$PHPMAILER_LANG['execute'] = 'Não foi possível executar: ';
+$PHPMAILER_LANG['file_access'] = 'Não foi possível acessar o arquivo: ';
+$PHPMAILER_LANG['file_open'] = 'Erro de Arquivo: Não foi possível abrir o arquivo: ';
+$PHPMAILER_LANG['from_failed'] = 'Os seguintes remetentes falharam: ';
+$PHPMAILER_LANG['instantiate'] = 'Não foi possível instanciar a função mail.';
+$PHPMAILER_LANG['invalid_address'] = 'Endereço de e-mail inválido: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer não é suportado.';
+$PHPMAILER_LANG['provide_address'] = 'Você deve informar pelo menos um destinatário.';
+$PHPMAILER_LANG['recipients_failed'] = 'Erro de SMTP: Os seguintes destinatários falharam: ';
+$PHPMAILER_LANG['signing'] = 'Erro de Assinatura: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() falhou.';
+$PHPMAILER_LANG['smtp_error'] = 'Erro de servidor SMTP: ';
+$PHPMAILER_LANG['variable_set'] = 'Não foi possível definir ou redefinir a variável: ';
+$PHPMAILER_LANG['extension_missing'] = 'Extensão não existe: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ro.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ro.php
new file mode 100644
index 0000000..fa100ea
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ro.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Romanian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Alex Florea <alecz.fia@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'Eroare SMTP: Autentificarea a eșuat.';
+$PHPMAILER_LANG['connect_host'] = 'Eroare SMTP: Conectarea la serverul SMTP a eșuat.';
+$PHPMAILER_LANG['data_not_accepted'] = 'Eroare SMTP: Datele nu au fost acceptate.';
+$PHPMAILER_LANG['empty_message'] = 'Mesajul este gol.';
+$PHPMAILER_LANG['encoding'] = 'Encodare necunoscută: ';
+$PHPMAILER_LANG['execute'] = 'Nu se poate executa următoarea comandă: ';
+$PHPMAILER_LANG['file_access'] = 'Nu se poate accesa următorul fișier: ';
+$PHPMAILER_LANG['file_open'] = 'Eroare fișier: Nu se poate deschide următorul fișier: ';
+$PHPMAILER_LANG['from_failed'] = 'Următoarele adrese From au dat eroare: ';
+$PHPMAILER_LANG['instantiate'] = 'Funcția mail nu a putut fi inițializată.';
+$PHPMAILER_LANG['invalid_address'] = 'Adresa de email nu este validă: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer nu este suportat.';
+$PHPMAILER_LANG['provide_address'] = 'Trebuie să adăugați cel puțin o adresă de email.';
+$PHPMAILER_LANG['recipients_failed'] = 'Eroare SMTP: Următoarele adrese de email au eșuat: ';
+$PHPMAILER_LANG['signing'] = 'A aparut o problemă la semnarea emailului. ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'Conectarea la serverul SMTP a eșuat.';
+$PHPMAILER_LANG['smtp_error'] = 'Eroare server SMTP: ';
+$PHPMAILER_LANG['variable_set'] = 'Nu se poate seta/reseta variabila. ';
+$PHPMAILER_LANG['extension_missing'] = 'Lipsește extensia: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ru.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ru.php
new file mode 100644
index 0000000..720e9a1
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ru.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Russian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Alexey Chumakov <alex@chumakov.ru>
+ * @author Foster Snowhill <i18n@forstwoof.ru>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'Ошибка SMTP: ошибка авторизации.';
+$PHPMAILER_LANG['connect_host'] = 'Ошибка SMTP: не удается подключиться к SMTP-серверу.';
+$PHPMAILER_LANG['data_not_accepted'] = 'Ошибка SMTP: данные не приняты.';
+$PHPMAILER_LANG['encoding'] = 'Неизвестная кодировка: ';
+$PHPMAILER_LANG['execute'] = 'Невозможно выполнить команду: ';
+$PHPMAILER_LANG['file_access'] = 'Нет доступа к файлу: ';
+$PHPMAILER_LANG['file_open'] = 'Файловая ошибка: не удаётся открыть файл: ';
+$PHPMAILER_LANG['from_failed'] = 'Неверный адрес отправителя: ';
+$PHPMAILER_LANG['instantiate'] = 'Невозможно запустить функцию mail().';
+$PHPMAILER_LANG['provide_address'] = 'Пожалуйста, введите хотя бы один email-адрес получателя.';
+$PHPMAILER_LANG['mailer_not_supported'] = ' — почтовый сервер не поддерживается.';
+$PHPMAILER_LANG['recipients_failed'] = 'Ошибка SMTP: не удалась отправка таким адресатам: ';
+$PHPMAILER_LANG['empty_message'] = 'Пустое сообщение';
+$PHPMAILER_LANG['invalid_address'] = 'Не отправлено из-за неправильного формата email-адреса: ';
+$PHPMAILER_LANG['signing'] = 'Ошибка подписи: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'Ошибка соединения с SMTP-сервером';
+$PHPMAILER_LANG['smtp_error'] = 'Ошибка SMTP-сервера: ';
+$PHPMAILER_LANG['variable_set'] = 'Невозможно установить или сбросить переменную: ';
+$PHPMAILER_LANG['extension_missing'] = 'Расширение отсутствует: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sk.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sk.php
new file mode 100644
index 0000000..69cfb0f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sk.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Slovak PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Michal Tinka <michaltinka@gmail.com>
+ * @author Peter Orlický <pcmanik91@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP Error: Chyba autentifikácie.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP Error: Nebolo možné nadviazať spojenie so SMTP serverom.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Error: Dáta neboli prijaté';
+$PHPMAILER_LANG['empty_message'] = 'Prázdne telo správy.';
+$PHPMAILER_LANG['encoding'] = 'Neznáme kódovanie: ';
+$PHPMAILER_LANG['execute'] = 'Nedá sa vykonať: ';
+$PHPMAILER_LANG['file_access'] = 'Súbor nebol nájdený: ';
+$PHPMAILER_LANG['file_open'] = 'File Error: Súbor sa otvoriť pre čítanie: ';
+$PHPMAILER_LANG['from_failed'] = 'Následujúca adresa From je nesprávna: ';
+$PHPMAILER_LANG['instantiate'] = 'Nedá sa vytvoriť inštancia emailovej funkcie.';
+$PHPMAILER_LANG['invalid_address'] = 'Neodoslané, emailová adresa je nesprávna: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' emailový klient nieje podporovaný.';
+$PHPMAILER_LANG['provide_address'] = 'Musíte zadať aspoň jednu emailovú adresu príjemcu.';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP Error: Adresy príjemcov niesu správne ';
+$PHPMAILER_LANG['signing'] = 'Chyba prihlasovania: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() zlyhalo.';
+$PHPMAILER_LANG['smtp_error'] = 'SMTP chyba serveru: ';
+$PHPMAILER_LANG['variable_set'] = 'Nemožno nastaviť alebo resetovať premennú: ';
+$PHPMAILER_LANG['extension_missing'] = 'Chýba rozšírenie: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sl.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sl.php
new file mode 100644
index 0000000..1e3cb7f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sl.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Slovene PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Klemen Tušar <techouse@gmail.com>
+ * @author Filip Š <projects@filips.si>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP napaka: Avtentikacija ni uspela.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP napaka: Vzpostavljanje povezave s SMTP gostiteljem ni uspelo.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP napaka: Strežnik zavrača podatke.';
+$PHPMAILER_LANG['empty_message'] = 'E-poštno sporočilo nima vsebine.';
+$PHPMAILER_LANG['encoding'] = 'Nepoznan tip kodiranja: ';
+$PHPMAILER_LANG['execute'] = 'Operacija ni uspela: ';
+$PHPMAILER_LANG['file_access'] = 'Nimam dostopa do datoteke: ';
+$PHPMAILER_LANG['file_open'] = 'Ne morem odpreti datoteke: ';
+$PHPMAILER_LANG['from_failed'] = 'Neveljaven e-naslov pošiljatelja: ';
+$PHPMAILER_LANG['instantiate'] = 'Ne morem inicializirati mail funkcije.';
+$PHPMAILER_LANG['invalid_address'] = 'E-poštno sporočilo ni bilo poslano. E-naslov je neveljaven: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer ni podprt.';
+$PHPMAILER_LANG['provide_address'] = 'Prosim vnesite vsaj enega naslovnika.';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP napaka: Sledeči naslovniki so neveljavni: ';
+$PHPMAILER_LANG['signing'] = 'Napaka pri podpisovanju: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'Ne morem vzpostaviti povezave s SMTP strežnikom.';
+$PHPMAILER_LANG['smtp_error'] = 'Napaka SMTP strežnika: ';
+$PHPMAILER_LANG['variable_set'] = 'Ne morem nastaviti oz. ponastaviti spremenljivke: ';
+$PHPMAILER_LANG['extension_missing'] = 'Manjkajoča razširitev: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sr.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sr.php
new file mode 100644
index 0000000..34c1e18
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sr.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Serbian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Александар Јевремовић <ajevremovic@gmail.com>
+ * @author Miloš Milanović <mmilanovic016@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP грешка: аутентификација није успела.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP грешка: повезивање са SMTP сервером није успело.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP грешка: подаци нису прихваћени.';
+$PHPMAILER_LANG['empty_message'] = 'Садржај поруке је празан.';
+$PHPMAILER_LANG['encoding'] = 'Непознато кодирање: ';
+$PHPMAILER_LANG['execute'] = 'Није могуће извршити наредбу: ';
+$PHPMAILER_LANG['file_access'] = 'Није могуће приступити датотеци: ';
+$PHPMAILER_LANG['file_open'] = 'Није могуће отворити датотеку: ';
+$PHPMAILER_LANG['from_failed'] = 'SMTP грешка: слање са следећих адреса није успело: ';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP грешка: слање на следеће адресе није успело: ';
+$PHPMAILER_LANG['instantiate'] = 'Није могуће покренути mail функцију.';
+$PHPMAILER_LANG['invalid_address'] = 'Порука није послата. Неисправна адреса: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' мејлер није подржан.';
+$PHPMAILER_LANG['provide_address'] = 'Дефинишите бар једну адресу примаоца.';
+$PHPMAILER_LANG['signing'] = 'Грешка приликом пријаве: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'Повезивање са SMTP сервером није успело.';
+$PHPMAILER_LANG['smtp_error'] = 'Грешка SMTP сервера: ';
+$PHPMAILER_LANG['variable_set'] = 'Није могуће задати нити ресетовати променљиву: ';
+$PHPMAILER_LANG['extension_missing'] = 'Недостаје проширење: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sv.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sv.php
new file mode 100644
index 0000000..4408e63
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sv.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Swedish PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Johan Linnér <johan@linner.biz>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP fel: Kunde inte autentisera.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP fel: Kunde inte ansluta till SMTP-server.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP fel: Data accepterades inte.';
+//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
+$PHPMAILER_LANG['encoding'] = 'Okänt encode-format: ';
+$PHPMAILER_LANG['execute'] = 'Kunde inte köra: ';
+$PHPMAILER_LANG['file_access'] = 'Ingen åtkomst till fil: ';
+$PHPMAILER_LANG['file_open'] = 'Fil fel: Kunde inte öppna fil: ';
+$PHPMAILER_LANG['from_failed'] = 'Följande avsändaradress är felaktig: ';
+$PHPMAILER_LANG['instantiate'] = 'Kunde inte initiera e-postfunktion.';
+$PHPMAILER_LANG['invalid_address'] = 'Felaktig adress: ';
+$PHPMAILER_LANG['provide_address'] = 'Du måste ange minst en mottagares e-postadress.';
+$PHPMAILER_LANG['mailer_not_supported'] = ' mailer stöds inte.';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP fel: Följande mottagare är felaktig: ';
+$PHPMAILER_LANG['signing'] = 'Signerings fel: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() misslyckades.';
+$PHPMAILER_LANG['smtp_error'] = 'SMTP server fel: ';
+$PHPMAILER_LANG['variable_set'] = 'Kunde inte definiera eller återställa variabel: ';
+$PHPMAILER_LANG['extension_missing'] = 'Tillägg ej tillgängligt: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-tl.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-tl.php
new file mode 100644
index 0000000..ed51d4c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-tl.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Tagalog PHPMailer language file: refer to English translation for definitive list
+ *
+ * @package PHPMailer
+ * @author Adriane Justine Tan <adrianetan12@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP Error: Hindi mapatotohanan.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP Error: Hindi makakonekta sa SMTP host.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Error: Ang datos ay hindi maaaring matatanggap.';
+$PHPMAILER_LANG['empty_message'] = 'Walang laman ang mensahe';
+$PHPMAILER_LANG['encoding'] = 'Hindi alam ang encoding: ';
+$PHPMAILER_LANG['execute'] = 'Hindi maisasagawa: ';
+$PHPMAILER_LANG['file_access'] = 'Hindi ma-access ang file: ';
+$PHPMAILER_LANG['file_open'] = 'Hindi mabuksan ang file: ';
+$PHPMAILER_LANG['from_failed'] = 'Ang sumusunod na address ay nabigo: ';
+$PHPMAILER_LANG['instantiate'] = 'Hindi maaaring magbigay ng institusyon ang mail';
+$PHPMAILER_LANG['invalid_address'] = 'Hindi wasto ang address na naibigay: ';
+$PHPMAILER_LANG['mailer_not_supported'] = 'Ang mailer ay hindi suportado';
+$PHPMAILER_LANG['provide_address'] = 'Kailangan mong magbigay ng kahit isang email address na tatanggap';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP Error: Ang mga sumusunod na tatanggap ay nabigo: ';
+$PHPMAILER_LANG['signing'] = 'Hindi ma-sign';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'Ang SMTP connect() ay nabigo';
+$PHPMAILER_LANG['smtp_error'] = 'Ang server ng SMTP ay nabigo';
+$PHPMAILER_LANG['variable_set'] = 'Hindi matatakda ang mga variables: ';
+$PHPMAILER_LANG['extension_missing'] = 'Nawawala ang extension';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-tr.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-tr.php
new file mode 100644
index 0000000..cfe8eaa
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-tr.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * Turkish PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Elçin Özel
+ * @author Can Yılmaz
+ * @author Mehmet Benlioğlu
+ * @author @yasinaydin
+ * @author Ogün Karakuş
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP Hatası: Oturum açılamadı.';
+$PHPMAILER_LANG['connect_host'] = 'SMTP Hatası: SMTP sunucusuna bağlanılamadı.';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Hatası: Veri kabul edilmedi.';
+$PHPMAILER_LANG['empty_message'] = 'Mesajın içeriği boş';
+$PHPMAILER_LANG['encoding'] = 'Bilinmeyen karakter kodlama: ';
+$PHPMAILER_LANG['execute'] = 'Çalıştırılamadı: ';
+$PHPMAILER_LANG['file_access'] = 'Dosyaya erişilemedi: ';
+$PHPMAILER_LANG['file_open'] = 'Dosya Hatası: Dosya açılamadı: ';
+$PHPMAILER_LANG['from_failed'] = 'Belirtilen adreslere gönderme başarısız: ';
+$PHPMAILER_LANG['instantiate'] = 'Örnek e-posta fonksiyonu oluşturulamadı.';
+$PHPMAILER_LANG['invalid_address'] = 'Geçersiz e-posta adresi: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' e-posta kütüphanesi desteklenmiyor.';
+$PHPMAILER_LANG['provide_address'] = 'En az bir alıcı e-posta adresi belirtmelisiniz.';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP Hatası: Belirtilen alıcılara ulaşılamadı: ';
+$PHPMAILER_LANG['signing'] = 'İmzalama hatası: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP connect() fonksiyonu başarısız.';
+$PHPMAILER_LANG['smtp_error'] = 'SMTP sunucu hatası: ';
+$PHPMAILER_LANG['variable_set'] = 'Değişken ayarlanamadı ya da sıfırlanamadı: ';
+$PHPMAILER_LANG['extension_missing'] = 'Eklenti bulunamadı: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-uk.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-uk.php
new file mode 100644
index 0000000..fcd77ad
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-uk.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Ukrainian PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author Yuriy Rudyy <yrudyy@prs.net.ua>
+ * @fixed by Boris Yurchenko <boris@yurchenko.pp.ua>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'Помилка SMTP: помилка авторизації.';
+$PHPMAILER_LANG['connect_host'] = 'Помилка SMTP: не вдається під\'єднатися до SMTP-серверу.';
+$PHPMAILER_LANG['data_not_accepted'] = 'Помилка SMTP: дані не прийнято.';
+$PHPMAILER_LANG['encoding'] = 'Невідоме кодування: ';
+$PHPMAILER_LANG['execute'] = 'Неможливо виконати команду: ';
+$PHPMAILER_LANG['file_access'] = 'Немає доступу до файлу: ';
+$PHPMAILER_LANG['file_open'] = 'Помилка файлової системи: не вдається відкрити файл: ';
+$PHPMAILER_LANG['from_failed'] = 'Невірна адреса відправника: ';
+$PHPMAILER_LANG['instantiate'] = 'Неможливо запустити функцію mail().';
+$PHPMAILER_LANG['provide_address'] = 'Будь-ласка, введіть хоча б одну email-адресу отримувача.';
+$PHPMAILER_LANG['mailer_not_supported'] = ' - поштовий сервер не підтримується.';
+$PHPMAILER_LANG['recipients_failed'] = 'Помилка SMTP: не вдалося відправлення для таких отримувачів: ';
+$PHPMAILER_LANG['empty_message'] = 'Пусте повідомлення';
+$PHPMAILER_LANG['invalid_address'] = 'Не відправлено через невірний формат email-адреси: ';
+$PHPMAILER_LANG['signing'] = 'Помилка підпису: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'Помилка з\'єднання з SMTP-сервером';
+$PHPMAILER_LANG['smtp_error'] = 'Помилка SMTP-сервера: ';
+$PHPMAILER_LANG['variable_set'] = 'Неможливо встановити або скинути змінну: ';
+$PHPMAILER_LANG['extension_missing'] = 'Розширення відсутнє: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-vi.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-vi.php
new file mode 100644
index 0000000..c60dade
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-vi.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Vietnamese (Tiếng Việt) PHPMailer language file: refer to English translation for definitive list.
+ * @package PHPMailer
+ * @author VINADES.,JSC <contact@vinades.vn>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'Lỗi SMTP: Không thể xác thực.';
+$PHPMAILER_LANG['connect_host'] = 'Lỗi SMTP: Không thể kết nối máy chủ SMTP.';
+$PHPMAILER_LANG['data_not_accepted'] = 'Lỗi SMTP: Dữ liệu không được chấp nhận.';
+$PHPMAILER_LANG['empty_message'] = 'Không có nội dung';
+$PHPMAILER_LANG['encoding'] = 'Mã hóa không xác định: ';
+$PHPMAILER_LANG['execute'] = 'Không thực hiện được: ';
+$PHPMAILER_LANG['file_access'] = 'Không thể truy cập tệp tin ';
+$PHPMAILER_LANG['file_open'] = 'Lỗi Tập tin: Không thể mở tệp tin: ';
+$PHPMAILER_LANG['from_failed'] = 'Lỗi địa chỉ gửi đi: ';
+$PHPMAILER_LANG['instantiate'] = 'Không dùng được các hàm gửi thư.';
+$PHPMAILER_LANG['invalid_address'] = 'Đại chỉ emai không đúng: ';
+$PHPMAILER_LANG['mailer_not_supported'] = ' trình gửi thư không được hỗ trợ.';
+$PHPMAILER_LANG['provide_address'] = 'Bạn phải cung cấp ít nhất một địa chỉ người nhận.';
+$PHPMAILER_LANG['recipients_failed'] = 'Lỗi SMTP: lỗi địa chỉ người nhận: ';
+$PHPMAILER_LANG['signing'] = 'Lỗi đăng nhập: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'Lỗi kết nối với SMTP';
+$PHPMAILER_LANG['smtp_error'] = 'Lỗi máy chủ smtp ';
+$PHPMAILER_LANG['variable_set'] = 'Không thể thiết lập hoặc thiết lập lại biến: ';
+//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh.php
new file mode 100644
index 0000000..3e9e358
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Traditional Chinese PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author liqwei <liqwei@liqwei.com>
+ * @author Peter Dave Hello <@PeterDaveHello/>
+ * @author Jason Chiang <xcojad@gmail.com>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP 錯誤:登入失敗。';
+$PHPMAILER_LANG['connect_host'] = 'SMTP 錯誤:無法連線到 SMTP 主機。';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP 錯誤:無法接受的資料。';
+$PHPMAILER_LANG['empty_message'] = '郵件內容為空';
+$PHPMAILER_LANG['encoding'] = '未知編碼: ';
+$PHPMAILER_LANG['execute'] = '無法執行:';
+$PHPMAILER_LANG['file_access'] = '無法存取檔案:';
+$PHPMAILER_LANG['file_open'] = '檔案錯誤:無法開啟檔案:';
+$PHPMAILER_LANG['from_failed'] = '發送地址錯誤:';
+$PHPMAILER_LANG['instantiate'] = '未知函數呼叫。';
+$PHPMAILER_LANG['invalid_address'] = '因為電子郵件地址無效,無法傳送: ';
+$PHPMAILER_LANG['mailer_not_supported'] = '不支援的發信客戶端。';
+$PHPMAILER_LANG['provide_address'] = '必須提供至少一個收件人地址。';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP 錯誤:以下收件人地址錯誤:';
+$PHPMAILER_LANG['signing'] = '電子簽章錯誤: ';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP 連線失敗';
+$PHPMAILER_LANG['smtp_error'] = 'SMTP 伺服器錯誤: ';
+$PHPMAILER_LANG['variable_set'] = '無法設定或重設變數: ';
+$PHPMAILER_LANG['extension_missing'] = '遺失模組 Extension: ';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh_cn.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh_cn.php
new file mode 100644
index 0000000..3753780
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh_cn.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Simplified Chinese PHPMailer language file: refer to English translation for definitive list
+ * @package PHPMailer
+ * @author liqwei <liqwei@liqwei.com>
+ * @author young <masxy@foxmail.com>
+ * @author Teddysun <i@teddysun.com>
+ */
+
+$PHPMAILER_LANG['authenticate'] = 'SMTP 错误:登录失败。';
+$PHPMAILER_LANG['connect_host'] = 'SMTP 错误:无法连接到 SMTP 主机。';
+$PHPMAILER_LANG['data_not_accepted'] = 'SMTP 错误:数据不被接受。';
+$PHPMAILER_LANG['empty_message'] = '邮件正文为空。';
+$PHPMAILER_LANG['encoding'] = '未知编码:';
+$PHPMAILER_LANG['execute'] = '无法执行:';
+$PHPMAILER_LANG['file_access'] = '无法访问文件:';
+$PHPMAILER_LANG['file_open'] = '文件错误:无法打开文件:';
+$PHPMAILER_LANG['from_failed'] = '发送地址错误:';
+$PHPMAILER_LANG['instantiate'] = '未知函数调用。';
+$PHPMAILER_LANG['invalid_address'] = '发送失败,电子邮箱地址是无效的:';
+$PHPMAILER_LANG['mailer_not_supported'] = '发信客户端不被支持。';
+$PHPMAILER_LANG['provide_address'] = '必须提供至少一个收件人地址。';
+$PHPMAILER_LANG['recipients_failed'] = 'SMTP 错误:收件人地址错误:';
+$PHPMAILER_LANG['signing'] = '登录失败:';
+$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP服务器连接失败。';
+$PHPMAILER_LANG['smtp_error'] = 'SMTP服务器出错:';
+$PHPMAILER_LANG['variable_set'] = '无法设置或重置变量:';
+$PHPMAILER_LANG['extension_missing'] = '丢失模块 Extension:';
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/src/Exception.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/src/Exception.php
new file mode 100644
index 0000000..b1e552f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/src/Exception.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * PHPMailer Exception class.
+ * PHP Version 5.5.
+ *
+ * @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
+ *
+ * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
+ * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
+ * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
+ * @author Brent R. Matzelle (original founder)
+ * @copyright 2012 - 2017 Marcus Bointon
+ * @copyright 2010 - 2012 Jim Jagielski
+ * @copyright 2004 - 2009 Andy Prevost
+ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
+ * @note This program is distributed in the hope that it will be useful - WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+namespace PHPMailer\PHPMailer;
+
+/**
+ * PHPMailer exception handler.
+ *
+ * @author Marcus Bointon <phpmailer@synchromedia.co.uk>
+ */
+class Exception extends \Exception
+{
+ /**
+ * Prettify error message output.
+ *
+ * @return string
+ */
+ public function errorMessage()
+ {
+ return '<strong>' . htmlspecialchars($this->getMessage()) . "</strong><br />\n";
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/src/OAuth.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/src/OAuth.php
new file mode 100644
index 0000000..0271963
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/src/OAuth.php
@@ -0,0 +1,138 @@
+<?php
+/**
+ * PHPMailer - PHP email creation and transport class.
+ * PHP Version 5.5.
+ *
+ * @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
+ *
+ * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
+ * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
+ * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
+ * @author Brent R. Matzelle (original founder)
+ * @copyright 2012 - 2015 Marcus Bointon
+ * @copyright 2010 - 2012 Jim Jagielski
+ * @copyright 2004 - 2009 Andy Prevost
+ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
+ * @note This program is distributed in the hope that it will be useful - WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+namespace PHPMailer\PHPMailer;
+
+use League\OAuth2\Client\Grant\RefreshToken;
+use League\OAuth2\Client\Provider\AbstractProvider;
+use League\OAuth2\Client\Token\AccessToken;
+
+/**
+ * OAuth - OAuth2 authentication wrapper class.
+ * Uses the oauth2-client package from the League of Extraordinary Packages.
+ *
+ * @see http://oauth2-client.thephpleague.com
+ *
+ * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
+ */
+class OAuth
+{
+ /**
+ * An instance of the League OAuth Client Provider.
+ *
+ * @var AbstractProvider
+ */
+ protected $provider;
+
+ /**
+ * The current OAuth access token.
+ *
+ * @var AccessToken
+ */
+ protected $oauthToken;
+
+ /**
+ * The user's email address, usually used as the login ID
+ * and also the from address when sending email.
+ *
+ * @var string
+ */
+ protected $oauthUserEmail = '';
+
+ /**
+ * The client secret, generated in the app definition of the service you're connecting to.
+ *
+ * @var string
+ */
+ protected $oauthClientSecret = '';
+
+ /**
+ * The client ID, generated in the app definition of the service you're connecting to.
+ *
+ * @var string
+ */
+ protected $oauthClientId = '';
+
+ /**
+ * The refresh token, used to obtain new AccessTokens.
+ *
+ * @var string
+ */
+ protected $oauthRefreshToken = '';
+
+ /**
+ * OAuth constructor.
+ *
+ * @param array $options Associative array containing
+ * `provider`, `userName`, `clientSecret`, `clientId` and `refreshToken` elements
+ */
+ public function __construct($options)
+ {
+ $this->provider = $options['provider'];
+ $this->oauthUserEmail = $options['userName'];
+ $this->oauthClientSecret = $options['clientSecret'];
+ $this->oauthClientId = $options['clientId'];
+ $this->oauthRefreshToken = $options['refreshToken'];
+ }
+
+ /**
+ * Get a new RefreshToken.
+ *
+ * @return RefreshToken
+ */
+ protected function getGrant()
+ {
+ return new RefreshToken();
+ }
+
+ /**
+ * Get a new AccessToken.
+ *
+ * @return AccessToken
+ */
+ protected function getToken()
+ {
+ return $this->provider->getAccessToken(
+ $this->getGrant(),
+ ['refresh_token' => $this->oauthRefreshToken]
+ );
+ }
+
+ /**
+ * Generate a base64-encoded OAuth token.
+ *
+ * @return string
+ */
+ public function getOauth64()
+ {
+ // Get a new token if it's not available or has expired
+ if (null === $this->oauthToken || $this->oauthToken->hasExpired()) {
+ $this->oauthToken = $this->getToken();
+ }
+
+ return base64_encode(
+ 'user=' .
+ $this->oauthUserEmail .
+ "\001auth=Bearer " .
+ $this->oauthToken .
+ "\001\001"
+ );
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/src/PHPMailer.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/src/PHPMailer.php
new file mode 100644
index 0000000..ed14d7c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/src/PHPMailer.php
@@ -0,0 +1,4834 @@
+<?php
+/**
+ * PHPMailer - PHP email creation and transport class.
+ * PHP Version 5.5.
+ *
+ * @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
+ *
+ * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
+ * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
+ * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
+ * @author Brent R. Matzelle (original founder)
+ * @copyright 2012 - 2019 Marcus Bointon
+ * @copyright 2010 - 2012 Jim Jagielski
+ * @copyright 2004 - 2009 Andy Prevost
+ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
+ * @note This program is distributed in the hope that it will be useful - WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+namespace PHPMailer\PHPMailer;
+
+/**
+ * PHPMailer - PHP email creation and transport class.
+ *
+ * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
+ * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
+ * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
+ * @author Brent R. Matzelle (original founder)
+ */
+class PHPMailer
+{
+ const CHARSET_ASCII = 'us-ascii';
+ const CHARSET_ISO88591 = 'iso-8859-1';
+ const CHARSET_UTF8 = 'utf-8';
+
+ const CONTENT_TYPE_PLAINTEXT = 'text/plain';
+ const CONTENT_TYPE_TEXT_CALENDAR = 'text/calendar';
+ const CONTENT_TYPE_TEXT_HTML = 'text/html';
+ const CONTENT_TYPE_MULTIPART_ALTERNATIVE = 'multipart/alternative';
+ const CONTENT_TYPE_MULTIPART_MIXED = 'multipart/mixed';
+ const CONTENT_TYPE_MULTIPART_RELATED = 'multipart/related';
+
+ const ENCODING_7BIT = '7bit';
+ const ENCODING_8BIT = '8bit';
+ const ENCODING_BASE64 = 'base64';
+ const ENCODING_BINARY = 'binary';
+ const ENCODING_QUOTED_PRINTABLE = 'quoted-printable';
+
+ const ENCRYPTION_STARTTLS = 'tls';
+ const ENCRYPTION_SMTPS = 'ssl';
+
+ const ICAL_METHOD_REQUEST = 'REQUEST';
+ const ICAL_METHOD_PUBLISH = 'PUBLISH';
+ const ICAL_METHOD_REPLY = 'REPLY';
+ const ICAL_METHOD_ADD = 'ADD';
+ const ICAL_METHOD_CANCEL = 'CANCEL';
+ const ICAL_METHOD_REFRESH = 'REFRESH';
+ const ICAL_METHOD_COUNTER = 'COUNTER';
+ const ICAL_METHOD_DECLINECOUNTER = 'DECLINECOUNTER';
+
+ /**
+ * Email priority.
+ * Options: null (default), 1 = High, 3 = Normal, 5 = low.
+ * When null, the header is not set at all.
+ *
+ * @var int|null
+ */
+ public $Priority;
+
+ /**
+ * The character set of the message.
+ *
+ * @var string
+ */
+ public $CharSet = self::CHARSET_ISO88591;
+
+ /**
+ * The MIME Content-type of the message.
+ *
+ * @var string
+ */
+ public $ContentType = self::CONTENT_TYPE_PLAINTEXT;
+
+ /**
+ * The message encoding.
+ * Options: "8bit", "7bit", "binary", "base64", and "quoted-printable".
+ *
+ * @var string
+ */
+ public $Encoding = self::ENCODING_8BIT;
+
+ /**
+ * Holds the most recent mailer error message.
+ *
+ * @var string
+ */
+ public $ErrorInfo = '';
+
+ /**
+ * The From email address for the message.
+ *
+ * @var string
+ */
+ public $From = 'root@localhost';
+
+ /**
+ * The From name of the message.
+ *
+ * @var string
+ */
+ public $FromName = 'Root User';
+
+ /**
+ * The envelope sender of the message.
+ * This will usually be turned into a Return-Path header by the receiver,
+ * and is the address that bounces will be sent to.
+ * If not empty, will be passed via `-f` to sendmail or as the 'MAIL FROM' value over SMTP.
+ *
+ * @var string
+ */
+ public $Sender = '';
+
+ /**
+ * The Subject of the message.
+ *
+ * @var string
+ */
+ public $Subject = '';
+
+ /**
+ * An HTML or plain text message body.
+ * If HTML then call isHTML(true).
+ *
+ * @var string
+ */
+ public $Body = '';
+
+ /**
+ * The plain-text message body.
+ * This body can be read by mail clients that do not have HTML email
+ * capability such as mutt & Eudora.
+ * Clients that can read HTML will view the normal Body.
+ *
+ * @var string
+ */
+ public $AltBody = '';
+
+ /**
+ * An iCal message part body.
+ * Only supported in simple alt or alt_inline message types
+ * To generate iCal event structures, use classes like EasyPeasyICS or iCalcreator.
+ *
+ * @see http://sprain.ch/blog/downloads/php-class-easypeasyics-create-ical-files-with-php/
+ * @see http://kigkonsult.se/iCalcreator/
+ *
+ * @var string
+ */
+ public $Ical = '';
+
+ /**
+ * Value-array of "method" in Contenttype header "text/calendar"
+ *
+ * @var string[]
+ */
+ protected static $IcalMethods = [
+ self::ICAL_METHOD_REQUEST,
+ self::ICAL_METHOD_PUBLISH,
+ self::ICAL_METHOD_REPLY,
+ self::ICAL_METHOD_ADD,
+ self::ICAL_METHOD_CANCEL,
+ self::ICAL_METHOD_REFRESH,
+ self::ICAL_METHOD_COUNTER,
+ self::ICAL_METHOD_DECLINECOUNTER,
+ ];
+
+ /**
+ * The complete compiled MIME message body.
+ *
+ * @var string
+ */
+ protected $MIMEBody = '';
+
+ /**
+ * The complete compiled MIME message headers.
+ *
+ * @var string
+ */
+ protected $MIMEHeader = '';
+
+ /**
+ * Extra headers that createHeader() doesn't fold in.
+ *
+ * @var string
+ */
+ protected $mailHeader = '';
+
+ /**
+ * Word-wrap the message body to this number of chars.
+ * Set to 0 to not wrap. A useful value here is 78, for RFC2822 section 2.1.1 compliance.
+ *
+ * @see static::STD_LINE_LENGTH
+ *
+ * @var int
+ */
+ public $WordWrap = 0;
+
+ /**
+ * Which method to use to send mail.
+ * Options: "mail", "sendmail", or "smtp".
+ *
+ * @var string
+ */
+ public $Mailer = 'mail';
+
+ /**
+ * The path to the sendmail program.
+ *
+ * @var string
+ */
+ public $Sendmail = '/usr/sbin/sendmail';
+
+ /**
+ * Whether mail() uses a fully sendmail-compatible MTA.
+ * One which supports sendmail's "-oi -f" options.
+ *
+ * @var bool
+ */
+ public $UseSendmailOptions = true;
+
+ /**
+ * The email address that a reading confirmation should be sent to, also known as read receipt.
+ *
+ * @var string
+ */
+ public $ConfirmReadingTo = '';
+
+ /**
+ * The hostname to use in the Message-ID header and as default HELO string.
+ * If empty, PHPMailer attempts to find one with, in order,
+ * $_SERVER['SERVER_NAME'], gethostname(), php_uname('n'), or the value
+ * 'localhost.localdomain'.
+ *
+ * @see PHPMailer::$Helo
+ *
+ * @var string
+ */
+ public $Hostname = '';
+
+ /**
+ * An ID to be used in the Message-ID header.
+ * If empty, a unique id will be generated.
+ * You can set your own, but it must be in the format "<id@domain>",
+ * as defined in RFC5322 section 3.6.4 or it will be ignored.
+ *
+ * @see https://tools.ietf.org/html/rfc5322#section-3.6.4
+ *
+ * @var string
+ */
+ public $MessageID = '';
+
+ /**
+ * The message Date to be used in the Date header.
+ * If empty, the current date will be added.
+ *
+ * @var string
+ */
+ public $MessageDate = '';
+
+ /**
+ * SMTP hosts.
+ * Either a single hostname or multiple semicolon-delimited hostnames.
+ * You can also specify a different port
+ * for each host by using this format: [hostname:port]
+ * (e.g. "smtp1.example.com:25;smtp2.example.com").
+ * You can also specify encryption type, for example:
+ * (e.g. "tls://smtp1.example.com:587;ssl://smtp2.example.com:465").
+ * Hosts will be tried in order.
+ *
+ * @var string
+ */
+ public $Host = 'localhost';
+
+ /**
+ * The default SMTP server port.
+ *
+ * @var int
+ */
+ public $Port = 25;
+
+ /**
+ * The SMTP HELO/EHLO name used for the SMTP connection.
+ * Default is $Hostname. If $Hostname is empty, PHPMailer attempts to find
+ * one with the same method described above for $Hostname.
+ *
+ * @see PHPMailer::$Hostname
+ *
+ * @var string
+ */
+ public $Helo = '';
+
+ /**
+ * What kind of encryption to use on the SMTP connection.
+ * Options: '', static::ENCRYPTION_STARTTLS, or static::ENCRYPTION_SMTPS.
+ *
+ * @var string
+ */
+ public $SMTPSecure = '';
+
+ /**
+ * Whether to enable TLS encryption automatically if a server supports it,
+ * even if `SMTPSecure` is not set to 'tls'.
+ * Be aware that in PHP >= 5.6 this requires that the server's certificates are valid.
+ *
+ * @var bool
+ */
+ public $SMTPAutoTLS = true;
+
+ /**
+ * Whether to use SMTP authentication.
+ * Uses the Username and Password properties.
+ *
+ * @see PHPMailer::$Username
+ * @see PHPMailer::$Password
+ *
+ * @var bool
+ */
+ public $SMTPAuth = false;
+
+ /**
+ * Options array passed to stream_context_create when connecting via SMTP.
+ *
+ * @var array
+ */
+ public $SMTPOptions = [];
+
+ /**
+ * SMTP username.
+ *
+ * @var string
+ */
+ public $Username = '';
+
+ /**
+ * SMTP password.
+ *
+ * @var string
+ */
+ public $Password = '';
+
+ /**
+ * SMTP auth type.
+ * Options are CRAM-MD5, LOGIN, PLAIN, XOAUTH2, attempted in that order if not specified.
+ *
+ * @var string
+ */
+ public $AuthType = '';
+
+ /**
+ * An instance of the PHPMailer OAuth class.
+ *
+ * @var OAuth
+ */
+ protected $oauth;
+
+ /**
+ * The SMTP server timeout in seconds.
+ * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2.
+ *
+ * @var int
+ */
+ public $Timeout = 300;
+
+ /**
+ * Comma separated list of DSN notifications
+ * 'NEVER' under no circumstances a DSN must be returned to the sender.
+ * If you use NEVER all other notifications will be ignored.
+ * 'SUCCESS' will notify you when your mail has arrived at its destination.
+ * 'FAILURE' will arrive if an error occurred during delivery.
+ * 'DELAY' will notify you if there is an unusual delay in delivery, but the actual
+ * delivery's outcome (success or failure) is not yet decided.
+ *
+ * @see https://tools.ietf.org/html/rfc3461 See section 4.1 for more information about NOTIFY
+ */
+ public $dsn = '';
+
+ /**
+ * SMTP class debug output mode.
+ * Debug output level.
+ * Options:
+ * * SMTP::DEBUG_OFF: No output
+ * * SMTP::DEBUG_CLIENT: Client messages
+ * * SMTP::DEBUG_SERVER: Client and server messages
+ * * SMTP::DEBUG_CONNECTION: As SERVER plus connection status
+ * * SMTP::DEBUG_LOWLEVEL: Noisy, low-level data output, rarely needed
+ *
+ * @see SMTP::$do_debug
+ *
+ * @var int
+ */
+ public $SMTPDebug = 0;
+
+ /**
+ * How to handle debug output.
+ * Options:
+ * * `echo` Output plain-text as-is, appropriate for CLI
+ * * `html` Output escaped, line breaks converted to `<br>`, appropriate for browser output
+ * * `error_log` Output to error log as configured in php.ini
+ * By default PHPMailer will use `echo` if run from a `cli` or `cli-server` SAPI, `html` otherwise.
+ * Alternatively, you can provide a callable expecting two params: a message string and the debug level:
+ *
+ * ```php
+ * $mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";};
+ * ```
+ *
+ * Alternatively, you can pass in an instance of a PSR-3 compatible logger, though only `debug`
+ * level output is used:
+ *
+ * ```php
+ * $mail->Debugoutput = new myPsr3Logger;
+ * ```
+ *
+ * @see SMTP::$Debugoutput
+ *
+ * @var string|callable|\Psr\Log\LoggerInterface
+ */
+ public $Debugoutput = 'echo';
+
+ /**
+ * Whether to keep SMTP connection open after each message.
+ * If this is set to true then to close the connection
+ * requires an explicit call to smtpClose().
+ *
+ * @var bool
+ */
+ public $SMTPKeepAlive = false;
+
+ /**
+ * Whether to split multiple to addresses into multiple messages
+ * or send them all in one message.
+ * Only supported in `mail` and `sendmail` transports, not in SMTP.
+ *
+ * @var bool
+ */
+ public $SingleTo = false;
+
+ /**
+ * Storage for addresses when SingleTo is enabled.
+ *
+ * @var array
+ */
+ protected $SingleToArray = [];
+
+ /**
+ * Whether to generate VERP addresses on send.
+ * Only applicable when sending via SMTP.
+ *
+ * @see https://en.wikipedia.org/wiki/Variable_envelope_return_path
+ * @see http://www.postfix.org/VERP_README.html Postfix VERP info
+ *
+ * @var bool
+ */
+ public $do_verp = false;
+
+ /**
+ * Whether to allow sending messages with an empty body.
+ *
+ * @var bool
+ */
+ public $AllowEmpty = false;
+
+ /**
+ * DKIM selector.
+ *
+ * @var string
+ */
+ public $DKIM_selector = '';
+
+ /**
+ * DKIM Identity.
+ * Usually the email address used as the source of the email.
+ *
+ * @var string
+ */
+ public $DKIM_identity = '';
+
+ /**
+ * DKIM passphrase.
+ * Used if your key is encrypted.
+ *
+ * @var string
+ */
+ public $DKIM_passphrase = '';
+
+ /**
+ * DKIM signing domain name.
+ *
+ * @example 'example.com'
+ *
+ * @var string
+ */
+ public $DKIM_domain = '';
+
+ /**
+ * DKIM Copy header field values for diagnostic use.
+ *
+ * @var bool
+ */
+ public $DKIM_copyHeaderFields = true;
+
+ /**
+ * DKIM Extra signing headers.
+ *
+ * @example ['List-Unsubscribe', 'List-Help']
+ *
+ * @var array
+ */
+ public $DKIM_extraHeaders = [];
+
+ /**
+ * DKIM private key file path.
+ *
+ * @var string
+ */
+ public $DKIM_private = '';
+
+ /**
+ * DKIM private key string.
+ *
+ * If set, takes precedence over `$DKIM_private`.
+ *
+ * @var string
+ */
+ public $DKIM_private_string = '';
+
+ /**
+ * Callback Action function name.
+ *
+ * The function that handles the result of the send email action.
+ * It is called out by send() for each email sent.
+ *
+ * Value can be any php callable: http://www.php.net/is_callable
+ *
+ * Parameters:
+ * bool $result result of the send action
+ * array $to email addresses of the recipients
+ * array $cc cc email addresses
+ * array $bcc bcc email addresses
+ * string $subject the subject
+ * string $body the email body
+ * string $from email address of sender
+ * string $extra extra information of possible use
+ * "smtp_transaction_id' => last smtp transaction id
+ *
+ * @var string
+ */
+ public $action_function = '';
+
+ /**
+ * What to put in the X-Mailer header.
+ * Options: An empty string for PHPMailer default, whitespace/null for none, or a string to use.
+ *
+ * @var string|null
+ */
+ public $XMailer = '';
+
+ /**
+ * Which validator to use by default when validating email addresses.
+ * May be a callable to inject your own validator, but there are several built-in validators.
+ * The default validator uses PHP's FILTER_VALIDATE_EMAIL filter_var option.
+ *
+ * @see PHPMailer::validateAddress()
+ *
+ * @var string|callable
+ */
+ public static $validator = 'php';
+
+ /**
+ * An instance of the SMTP sender class.
+ *
+ * @var SMTP
+ */
+ protected $smtp;
+
+ /**
+ * The array of 'to' names and addresses.
+ *
+ * @var array
+ */
+ protected $to = [];
+
+ /**
+ * The array of 'cc' names and addresses.
+ *
+ * @var array
+ */
+ protected $cc = [];
+
+ /**
+ * The array of 'bcc' names and addresses.
+ *
+ * @var array
+ */
+ protected $bcc = [];
+
+ /**
+ * The array of reply-to names and addresses.
+ *
+ * @var array
+ */
+ protected $ReplyTo = [];
+
+ /**
+ * An array of all kinds of addresses.
+ * Includes all of $to, $cc, $bcc.
+ *
+ * @see PHPMailer::$to
+ * @see PHPMailer::$cc
+ * @see PHPMailer::$bcc
+ *
+ * @var array
+ */
+ protected $all_recipients = [];
+
+ /**
+ * An array of names and addresses queued for validation.
+ * In send(), valid and non duplicate entries are moved to $all_recipients
+ * and one of $to, $cc, or $bcc.
+ * This array is used only for addresses with IDN.
+ *
+ * @see PHPMailer::$to
+ * @see PHPMailer::$cc
+ * @see PHPMailer::$bcc
+ * @see PHPMailer::$all_recipients
+ *
+ * @var array
+ */
+ protected $RecipientsQueue = [];
+
+ /**
+ * An array of reply-to names and addresses queued for validation.
+ * In send(), valid and non duplicate entries are moved to $ReplyTo.
+ * This array is used only for addresses with IDN.
+ *
+ * @see PHPMailer::$ReplyTo
+ *
+ * @var array
+ */
+ protected $ReplyToQueue = [];
+
+ /**
+ * The array of attachments.
+ *
+ * @var array
+ */
+ protected $attachment = [];
+
+ /**
+ * The array of custom headers.
+ *
+ * @var array
+ */
+ protected $CustomHeader = [];
+
+ /**
+ * The most recent Message-ID (including angular brackets).
+ *
+ * @var string
+ */
+ protected $lastMessageID = '';
+
+ /**
+ * The message's MIME type.
+ *
+ * @var string
+ */
+ protected $message_type = '';
+
+ /**
+ * The array of MIME boundary strings.
+ *
+ * @var array
+ */
+ protected $boundary = [];
+
+ /**
+ * The array of available languages.
+ *
+ * @var array
+ */
+ protected $language = [];
+
+ /**
+ * The number of errors encountered.
+ *
+ * @var int
+ */
+ protected $error_count = 0;
+
+ /**
+ * The S/MIME certificate file path.
+ *
+ * @var string
+ */
+ protected $sign_cert_file = '';
+
+ /**
+ * The S/MIME key file path.
+ *
+ * @var string
+ */
+ protected $sign_key_file = '';
+
+ /**
+ * The optional S/MIME extra certificates ("CA Chain") file path.
+ *
+ * @var string
+ */
+ protected $sign_extracerts_file = '';
+
+ /**
+ * The S/MIME password for the key.
+ * Used only if the key is encrypted.
+ *
+ * @var string
+ */
+ protected $sign_key_pass = '';
+
+ /**
+ * Whether to throw exceptions for errors.
+ *
+ * @var bool
+ */
+ protected $exceptions = false;
+
+ /**
+ * Unique ID used for message ID and boundaries.
+ *
+ * @var string
+ */
+ protected $uniqueid = '';
+
+ /**
+ * The PHPMailer Version number.
+ *
+ * @var string
+ */
+ const VERSION = '6.1.6';
+
+ /**
+ * Error severity: message only, continue processing.
+ *
+ * @var int
+ */
+ const STOP_MESSAGE = 0;
+
+ /**
+ * Error severity: message, likely ok to continue processing.
+ *
+ * @var int
+ */
+ const STOP_CONTINUE = 1;
+
+ /**
+ * Error severity: message, plus full stop, critical error reached.
+ *
+ * @var int
+ */
+ const STOP_CRITICAL = 2;
+
+ /**
+ * The SMTP standard CRLF line break.
+ * If you want to change line break format, change static::$LE, not this.
+ */
+ const CRLF = "\r\n";
+
+ /**
+ * "Folding White Space" a white space string used for line folding.
+ */
+ const FWS = ' ';
+
+ /**
+ * SMTP RFC standard line ending; Carriage Return, Line Feed.
+ *
+ * @var string
+ */
+ protected static $LE = self::CRLF;
+
+ /**
+ * The maximum line length supported by mail().
+ *
+ * Background: mail() will sometimes corrupt messages
+ * with headers headers longer than 65 chars, see #818.
+ *
+ * @var int
+ */
+ const MAIL_MAX_LINE_LENGTH = 63;
+
+ /**
+ * The maximum line length allowed by RFC 2822 section 2.1.1.
+ *
+ * @var int
+ */
+ const MAX_LINE_LENGTH = 998;
+
+ /**
+ * The lower maximum line length allowed by RFC 2822 section 2.1.1.
+ * This length does NOT include the line break
+ * 76 means that lines will be 77 or 78 chars depending on whether
+ * the line break format is LF or CRLF; both are valid.
+ *
+ * @var int
+ */
+ const STD_LINE_LENGTH = 76;
+
+ /**
+ * Constructor.
+ *
+ * @param bool $exceptions Should we throw external exceptions?
+ */
+ public function __construct($exceptions = null)
+ {
+ if (null !== $exceptions) {
+ $this->exceptions = (bool) $exceptions;
+ }
+ //Pick an appropriate debug output format automatically
+ $this->Debugoutput = (strpos(PHP_SAPI, 'cli') !== false ? 'echo' : 'html');
+ }
+
+ /**
+ * Destructor.
+ */
+ public function __destruct()
+ {
+ //Close any open SMTP connection nicely
+ $this->smtpClose();
+ }
+
+ /**
+ * Call mail() in a safe_mode-aware fashion.
+ * Also, unless sendmail_path points to sendmail (or something that
+ * claims to be sendmail), don't pass params (not a perfect fix,
+ * but it will do).
+ *
+ * @param string $to To
+ * @param string $subject Subject
+ * @param string $body Message Body
+ * @param string $header Additional Header(s)
+ * @param string|null $params Params
+ *
+ * @return bool
+ */
+ private function mailPassthru($to, $subject, $body, $header, $params)
+ {
+ //Check overloading of mail function to avoid double-encoding
+ if (ini_get('mbstring.func_overload') & 1) {
+ $subject = $this->secureHeader($subject);
+ } else {
+ $subject = $this->encodeHeader($this->secureHeader($subject));
+ }
+ //Calling mail() with null params breaks
+ if (!$this->UseSendmailOptions || null === $params) {
+ $result = @mail($to, $subject, $body, $header);
+ } else {
+ $result = @mail($to, $subject, $body, $header, $params);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Output debugging info via user-defined method.
+ * Only generates output if SMTP debug output is enabled (@see SMTP::$do_debug).
+ *
+ * @see PHPMailer::$Debugoutput
+ * @see PHPMailer::$SMTPDebug
+ *
+ * @param string $str
+ */
+ protected function edebug($str)
+ {
+ if ($this->SMTPDebug <= 0) {
+ return;
+ }
+ //Is this a PSR-3 logger?
+ if ($this->Debugoutput instanceof \Psr\Log\LoggerInterface) {
+ $this->Debugoutput->debug($str);
+
+ return;
+ }
+ //Avoid clash with built-in function names
+ if (is_callable($this->Debugoutput) && !in_array($this->Debugoutput, ['error_log', 'html', 'echo'])) {
+ call_user_func($this->Debugoutput, $str, $this->SMTPDebug);
+
+ return;
+ }
+ switch ($this->Debugoutput) {
+ case 'error_log':
+ //Don't output, just log
+ error_log($str);
+ break;
+ case 'html':
+ //Cleans up output a bit for a better looking, HTML-safe output
+ echo htmlentities(
+ preg_replace('/[\r\n]+/', '', $str),
+ ENT_QUOTES,
+ 'UTF-8'
+ ), "<br>\n";
+ break;
+ case 'echo':
+ default:
+ //Normalize line breaks
+ $str = preg_replace('/\r\n|\r/m', "\n", $str);
+ echo gmdate('Y-m-d H:i:s'),
+ "\t",
+ //Trim trailing space
+ trim(
+ //Indent for readability, except for trailing break
+ str_replace(
+ "\n",
+ "\n \t ",
+ trim($str)
+ )
+ ),
+ "\n";
+ }
+ }
+
+ /**
+ * Sets message type to HTML or plain.
+ *
+ * @param bool $isHtml True for HTML mode
+ */
+ public function isHTML($isHtml = true)
+ {
+ if ($isHtml) {
+ $this->ContentType = static::CONTENT_TYPE_TEXT_HTML;
+ } else {
+ $this->ContentType = static::CONTENT_TYPE_PLAINTEXT;
+ }
+ }
+
+ /**
+ * Send messages using SMTP.
+ */
+ public function isSMTP()
+ {
+ $this->Mailer = 'smtp';
+ }
+
+ /**
+ * Send messages using PHP's mail() function.
+ */
+ public function isMail()
+ {
+ $this->Mailer = 'mail';
+ }
+
+ /**
+ * Send messages using $Sendmail.
+ */
+ public function isSendmail()
+ {
+ $ini_sendmail_path = ini_get('sendmail_path');
+
+ if (false === stripos($ini_sendmail_path, 'sendmail')) {
+ $this->Sendmail = '/usr/sbin/sendmail';
+ } else {
+ $this->Sendmail = $ini_sendmail_path;
+ }
+ $this->Mailer = 'sendmail';
+ }
+
+ /**
+ * Send messages using qmail.
+ */
+ public function isQmail()
+ {
+ $ini_sendmail_path = ini_get('sendmail_path');
+
+ if (false === stripos($ini_sendmail_path, 'qmail')) {
+ $this->Sendmail = '/var/qmail/bin/qmail-inject';
+ } else {
+ $this->Sendmail = $ini_sendmail_path;
+ }
+ $this->Mailer = 'qmail';
+ }
+
+ /**
+ * Add a "To" address.
+ *
+ * @param string $address The email address to send to
+ * @param string $name
+ *
+ * @throws Exception
+ *
+ * @return bool true on success, false if address already used or invalid in some way
+ */
+ public function addAddress($address, $name = '')
+ {
+ return $this->addOrEnqueueAnAddress('to', $address, $name);
+ }
+
+ /**
+ * Add a "CC" address.
+ *
+ * @param string $address The email address to send to
+ * @param string $name
+ *
+ * @throws Exception
+ *
+ * @return bool true on success, false if address already used or invalid in some way
+ */
+ public function addCC($address, $name = '')
+ {
+ return $this->addOrEnqueueAnAddress('cc', $address, $name);
+ }
+
+ /**
+ * Add a "BCC" address.
+ *
+ * @param string $address The email address to send to
+ * @param string $name
+ *
+ * @throws Exception
+ *
+ * @return bool true on success, false if address already used or invalid in some way
+ */
+ public function addBCC($address, $name = '')
+ {
+ return $this->addOrEnqueueAnAddress('bcc', $address, $name);
+ }
+
+ /**
+ * Add a "Reply-To" address.
+ *
+ * @param string $address The email address to reply to
+ * @param string $name
+ *
+ * @throws Exception
+ *
+ * @return bool true on success, false if address already used or invalid in some way
+ */
+ public function addReplyTo($address, $name = '')
+ {
+ return $this->addOrEnqueueAnAddress('Reply-To', $address, $name);
+ }
+
+ /**
+ * Add an address to one of the recipient arrays or to the ReplyTo array. Because PHPMailer
+ * can't validate addresses with an IDN without knowing the PHPMailer::$CharSet (that can still
+ * be modified after calling this function), addition of such addresses is delayed until send().
+ * Addresses that have been added already return false, but do not throw exceptions.
+ *
+ * @param string $kind One of 'to', 'cc', 'bcc', or 'ReplyTo'
+ * @param string $address The email address to send, resp. to reply to
+ * @param string $name
+ *
+ * @throws Exception
+ *
+ * @return bool true on success, false if address already used or invalid in some way
+ */
+ protected function addOrEnqueueAnAddress($kind, $address, $name)
+ {
+ $address = trim($address);
+ $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim
+ $pos = strrpos($address, '@');
+ if (false === $pos) {
+ // At-sign is missing.
+ $error_message = sprintf(
+ '%s (%s): %s',
+ $this->lang('invalid_address'),
+ $kind,
+ $address
+ );
+ $this->setError($error_message);
+ $this->edebug($error_message);
+ if ($this->exceptions) {
+ throw new Exception($error_message);
+ }
+
+ return false;
+ }
+ $params = [$kind, $address, $name];
+ // Enqueue addresses with IDN until we know the PHPMailer::$CharSet.
+ if (static::idnSupported() && $this->has8bitChars(substr($address, ++$pos))) {
+ if ('Reply-To' !== $kind) {
+ if (!array_key_exists($address, $this->RecipientsQueue)) {
+ $this->RecipientsQueue[$address] = $params;
+
+ return true;
+ }
+ } elseif (!array_key_exists($address, $this->ReplyToQueue)) {
+ $this->ReplyToQueue[$address] = $params;
+
+ return true;
+ }
+
+ return false;
+ }
+
+ // Immediately add standard addresses without IDN.
+ return call_user_func_array([$this, 'addAnAddress'], $params);
+ }
+
+ /**
+ * Add an address to one of the recipient arrays or to the ReplyTo array.
+ * Addresses that have been added already return false, but do not throw exceptions.
+ *
+ * @param string $kind One of 'to', 'cc', 'bcc', or 'ReplyTo'
+ * @param string $address The email address to send, resp. to reply to
+ * @param string $name
+ *
+ * @throws Exception
+ *
+ * @return bool true on success, false if address already used or invalid in some way
+ */
+ protected function addAnAddress($kind, $address, $name = '')
+ {
+ if (!in_array($kind, ['to', 'cc', 'bcc', 'Reply-To'])) {
+ $error_message = sprintf(
+ '%s: %s',
+ $this->lang('Invalid recipient kind'),
+ $kind
+ );
+ $this->setError($error_message);
+ $this->edebug($error_message);
+ if ($this->exceptions) {
+ throw new Exception($error_message);
+ }
+
+ return false;
+ }
+ if (!static::validateAddress($address)) {
+ $error_message = sprintf(
+ '%s (%s): %s',
+ $this->lang('invalid_address'),
+ $kind,
+ $address
+ );
+ $this->setError($error_message);
+ $this->edebug($error_message);
+ if ($this->exceptions) {
+ throw new Exception($error_message);
+ }
+
+ return false;
+ }
+ if ('Reply-To' !== $kind) {
+ if (!array_key_exists(strtolower($address), $this->all_recipients)) {
+ $this->{$kind}[] = [$address, $name];
+ $this->all_recipients[strtolower($address)] = true;
+
+ return true;
+ }
+ } elseif (!array_key_exists(strtolower($address), $this->ReplyTo)) {
+ $this->ReplyTo[strtolower($address)] = [$address, $name];
+
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Parse and validate a string containing one or more RFC822-style comma-separated email addresses
+ * of the form "display name <address>" into an array of name/address pairs.
+ * Uses the imap_rfc822_parse_adrlist function if the IMAP extension is available.
+ * Note that quotes in the name part are removed.
+ *
+ * @see http://www.andrew.cmu.edu/user/agreen1/testing/mrbs/web/Mail/RFC822.php A more careful implementation
+ *
+ * @param string $addrstr The address list string
+ * @param bool $useimap Whether to use the IMAP extension to parse the list
+ *
+ * @return array
+ */
+ public static function parseAddresses($addrstr, $useimap = true)
+ {
+ $addresses = [];
+ if ($useimap && function_exists('imap_rfc822_parse_adrlist')) {
+ //Use this built-in parser if it's available
+ $list = imap_rfc822_parse_adrlist($addrstr, '');
+ foreach ($list as $address) {
+ if (('.SYNTAX-ERROR.' !== $address->host) && static::validateAddress(
+ $address->mailbox . '@' . $address->host
+ )) {
+ $addresses[] = [
+ 'name' => (property_exists($address, 'personal') ? $address->personal : ''),
+ 'address' => $address->mailbox . '@' . $address->host,
+ ];
+ }
+ }
+ } else {
+ //Use this simpler parser
+ $list = explode(',', $addrstr);
+ foreach ($list as $address) {
+ $address = trim($address);
+ //Is there a separate name part?
+ if (strpos($address, '<') === false) {
+ //No separate name, just use the whole thing
+ if (static::validateAddress($address)) {
+ $addresses[] = [
+ 'name' => '',
+ 'address' => $address,
+ ];
+ }
+ } else {
+ list($name, $email) = explode('<', $address);
+ $email = trim(str_replace('>', '', $email));
+ if (static::validateAddress($email)) {
+ $addresses[] = [
+ 'name' => trim(str_replace(['"', "'"], '', $name)),
+ 'address' => $email,
+ ];
+ }
+ }
+ }
+ }
+
+ return $addresses;
+ }
+
+ /**
+ * Set the From and FromName properties.
+ *
+ * @param string $address
+ * @param string $name
+ * @param bool $auto Whether to also set the Sender address, defaults to true
+ *
+ * @throws Exception
+ *
+ * @return bool
+ */
+ public function setFrom($address, $name = '', $auto = true)
+ {
+ $address = trim($address);
+ $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim
+ // Don't validate now addresses with IDN. Will be done in send().
+ $pos = strrpos($address, '@');
+ if ((false === $pos)
+ || ((!$this->has8bitChars(substr($address, ++$pos)) || !static::idnSupported())
+ && !static::validateAddress($address))
+ ) {
+ $error_message = sprintf(
+ '%s (From): %s',
+ $this->lang('invalid_address'),
+ $address
+ );
+ $this->setError($error_message);
+ $this->edebug($error_message);
+ if ($this->exceptions) {
+ throw new Exception($error_message);
+ }
+
+ return false;
+ }
+ $this->From = $address;
+ $this->FromName = $name;
+ if ($auto && empty($this->Sender)) {
+ $this->Sender = $address;
+ }
+
+ return true;
+ }
+
+ /**
+ * Return the Message-ID header of the last email.
+ * Technically this is the value from the last time the headers were created,
+ * but it's also the message ID of the last sent message except in
+ * pathological cases.
+ *
+ * @return string
+ */
+ public function getLastMessageID()
+ {
+ return $this->lastMessageID;
+ }
+
+ /**
+ * Check that a string looks like an email address.
+ * Validation patterns supported:
+ * * `auto` Pick best pattern automatically;
+ * * `pcre8` Use the squiloople.com pattern, requires PCRE > 8.0;
+ * * `pcre` Use old PCRE implementation;
+ * * `php` Use PHP built-in FILTER_VALIDATE_EMAIL;
+ * * `html5` Use the pattern given by the HTML5 spec for 'email' type form input elements.
+ * * `noregex` Don't use a regex: super fast, really dumb.
+ * Alternatively you may pass in a callable to inject your own validator, for example:
+ *
+ * ```php
+ * PHPMailer::validateAddress('user@example.com', function($address) {
+ * return (strpos($address, '@') !== false);
+ * });
+ * ```
+ *
+ * You can also set the PHPMailer::$validator static to a callable, allowing built-in methods to use your validator.
+ *
+ * @param string $address The email address to check
+ * @param string|callable $patternselect Which pattern to use
+ *
+ * @return bool
+ */
+ public static function validateAddress($address, $patternselect = null)
+ {
+ if (null === $patternselect) {
+ $patternselect = static::$validator;
+ }
+ if (is_callable($patternselect)) {
+ return $patternselect($address);
+ }
+ //Reject line breaks in addresses; it's valid RFC5322, but not RFC5321
+ if (strpos($address, "\n") !== false || strpos($address, "\r") !== false) {
+ return false;
+ }
+ switch ($patternselect) {
+ case 'pcre': //Kept for BC
+ case 'pcre8':
+ /*
+ * A more complex and more permissive version of the RFC5322 regex on which FILTER_VALIDATE_EMAIL
+ * is based.
+ * In addition to the addresses allowed by filter_var, also permits:
+ * * dotless domains: `a@b`
+ * * comments: `1234 @ local(blah) .machine .example`
+ * * quoted elements: `'"test blah"@example.org'`
+ * * numeric TLDs: `a@b.123`
+ * * unbracketed IPv4 literals: `a@192.168.0.1`
+ * * IPv6 literals: 'first.last@[IPv6:a1::]'
+ * Not all of these will necessarily work for sending!
+ *
+ * @see http://squiloople.com/2009/12/20/email-address-validation/
+ * @copyright 2009-2010 Michael Rushton
+ * Feel free to use and redistribute this code. But please keep this copyright notice.
+ */
+ return (bool) preg_match(
+ '/^(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){255,})(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){65,}@)' .
+ '((?>(?>(?>((?>(?>(?>\x0D\x0A)?[\t ])+|(?>[\t ]*\x0D\x0A)?[\t ]+)?)(\((?>(?2)' .
+ '(?>[\x01-\x08\x0B\x0C\x0E-\'*-\[\]-\x7F]|\\\[\x00-\x7F]|(?3)))*(?2)\)))+(?2))|(?2))?)' .
+ '([!#-\'*+\/-9=?^-~-]+|"(?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\x7F]))*' .
+ '(?2)")(?>(?1)\.(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?>([a-z0-9](?>[a-z0-9-]*[a-z0-9])?)' .
+ '(?>(?1)\.(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|\[(?:(?>IPv6:(?>([a-f0-9]{1,4})(?>:(?6)){7}' .
+ '|(?!(?:.*[a-f0-9][:\]]){8,})((?6)(?>:(?6)){0,6})?::(?7)?))|(?>(?>IPv6:(?>(?6)(?>:(?6)){5}:' .
+ '|(?!(?:.*[a-f0-9]:){6,})(?8)?::(?>((?6)(?>:(?6)){0,4}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}' .
+ '|[1-9]?[0-9])(?>\.(?9)){3}))\])(?1)$/isD',
+ $address
+ );
+ case 'html5':
+ /*
+ * This is the pattern used in the HTML5 spec for validation of 'email' type form input elements.
+ *
+ * @see http://www.whatwg.org/specs/web-apps/current-work/#e-mail-state-(type=email)
+ */
+ return (bool) preg_match(
+ '/^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}' .
+ '[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/sD',
+ $address
+ );
+ case 'php':
+ default:
+ return filter_var($address, FILTER_VALIDATE_EMAIL) !== false;
+ }
+ }
+
+ /**
+ * Tells whether IDNs (Internationalized Domain Names) are supported or not. This requires the
+ * `intl` and `mbstring` PHP extensions.
+ *
+ * @return bool `true` if required functions for IDN support are present
+ */
+ public static function idnSupported()
+ {
+ return function_exists('idn_to_ascii') && function_exists('mb_convert_encoding');
+ }
+
+ /**
+ * Converts IDN in given email address to its ASCII form, also known as punycode, if possible.
+ * Important: Address must be passed in same encoding as currently set in PHPMailer::$CharSet.
+ * This function silently returns unmodified address if:
+ * - No conversion is necessary (i.e. domain name is not an IDN, or is already in ASCII form)
+ * - Conversion to punycode is impossible (e.g. required PHP functions are not available)
+ * or fails for any reason (e.g. domain contains characters not allowed in an IDN).
+ *
+ * @see PHPMailer::$CharSet
+ *
+ * @param string $address The email address to convert
+ *
+ * @return string The encoded address in ASCII form
+ */
+ public function punyencodeAddress($address)
+ {
+ // Verify we have required functions, CharSet, and at-sign.
+ $pos = strrpos($address, '@');
+ if (!empty($this->CharSet) &&
+ false !== $pos &&
+ static::idnSupported()
+ ) {
+ $domain = substr($address, ++$pos);
+ // Verify CharSet string is a valid one, and domain properly encoded in this CharSet.
+ if ($this->has8bitChars($domain) && @mb_check_encoding($domain, $this->CharSet)) {
+ $domain = mb_convert_encoding($domain, 'UTF-8', $this->CharSet);
+ //Ignore IDE complaints about this line - method signature changed in PHP 5.4
+ $errorcode = 0;
+ if (defined('INTL_IDNA_VARIANT_UTS46')) {
+ $punycode = idn_to_ascii($domain, $errorcode, INTL_IDNA_VARIANT_UTS46);
+ } elseif (defined('INTL_IDNA_VARIANT_2003')) {
+ $punycode = idn_to_ascii($domain, $errorcode, INTL_IDNA_VARIANT_2003);
+ } else {
+ $punycode = idn_to_ascii($domain, $errorcode);
+ }
+ if (false !== $punycode) {
+ return substr($address, 0, $pos) . $punycode;
+ }
+ }
+ }
+
+ return $address;
+ }
+
+ /**
+ * Create a message and send it.
+ * Uses the sending method specified by $Mailer.
+ *
+ * @throws Exception
+ *
+ * @return bool false on error - See the ErrorInfo property for details of the error
+ */
+ public function send()
+ {
+ try {
+ if (!$this->preSend()) {
+ return false;
+ }
+
+ return $this->postSend();
+ } catch (Exception $exc) {
+ $this->mailHeader = '';
+ $this->setError($exc->getMessage());
+ if ($this->exceptions) {
+ throw $exc;
+ }
+
+ return false;
+ }
+ }
+
+ /**
+ * Prepare a message for sending.
+ *
+ * @throws Exception
+ *
+ * @return bool
+ */
+ public function preSend()
+ {
+ if ('smtp' === $this->Mailer
+ || ('mail' === $this->Mailer && stripos(PHP_OS, 'WIN') === 0)
+ ) {
+ //SMTP mandates RFC-compliant line endings
+ //and it's also used with mail() on Windows
+ static::setLE(self::CRLF);
+ } else {
+ //Maintain backward compatibility with legacy Linux command line mailers
+ static::setLE(PHP_EOL);
+ }
+ //Check for buggy PHP versions that add a header with an incorrect line break
+ if ('mail' === $this->Mailer
+ && ((PHP_VERSION_ID >= 70000 && PHP_VERSION_ID < 70017)
+ || (PHP_VERSION_ID >= 70100 && PHP_VERSION_ID < 70103))
+ && ini_get('mail.add_x_header') === '1'
+ && stripos(PHP_OS, 'WIN') === 0
+ ) {
+ trigger_error(
+ 'Your version of PHP is affected by a bug that may result in corrupted messages.' .
+ ' To fix it, switch to sending using SMTP, disable the mail.add_x_header option in' .
+ ' your php.ini, switch to MacOS or Linux, or upgrade your PHP to version 7.0.17+ or 7.1.3+.',
+ E_USER_WARNING
+ );
+ }
+
+ try {
+ $this->error_count = 0; // Reset errors
+ $this->mailHeader = '';
+
+ // Dequeue recipient and Reply-To addresses with IDN
+ foreach (array_merge($this->RecipientsQueue, $this->ReplyToQueue) as $params) {
+ $params[1] = $this->punyencodeAddress($params[1]);
+ call_user_func_array([$this, 'addAnAddress'], $params);
+ }
+ if (count($this->to) + count($this->cc) + count($this->bcc) < 1) {
+ throw new Exception($this->lang('provide_address'), self::STOP_CRITICAL);
+ }
+
+ // Validate From, Sender, and ConfirmReadingTo addresses
+ foreach (['From', 'Sender', 'ConfirmReadingTo'] as $address_kind) {
+ $this->$address_kind = trim($this->$address_kind);
+ if (empty($this->$address_kind)) {
+ continue;
+ }
+ $this->$address_kind = $this->punyencodeAddress($this->$address_kind);
+ if (!static::validateAddress($this->$address_kind)) {
+ $error_message = sprintf(
+ '%s (%s): %s',
+ $this->lang('invalid_address'),
+ $address_kind,
+ $this->$address_kind
+ );
+ $this->setError($error_message);
+ $this->edebug($error_message);
+ if ($this->exceptions) {
+ throw new Exception($error_message);
+ }
+
+ return false;
+ }
+ }
+
+ // Set whether the message is multipart/alternative
+ if ($this->alternativeExists()) {
+ $this->ContentType = static::CONTENT_TYPE_MULTIPART_ALTERNATIVE;
+ }
+
+ $this->setMessageType();
+ // Refuse to send an empty message unless we are specifically allowing it
+ if (!$this->AllowEmpty && empty($this->Body)) {
+ throw new Exception($this->lang('empty_message'), self::STOP_CRITICAL);
+ }
+
+ //Trim subject consistently
+ $this->Subject = trim($this->Subject);
+ // Create body before headers in case body makes changes to headers (e.g. altering transfer encoding)
+ $this->MIMEHeader = '';
+ $this->MIMEBody = $this->createBody();
+ // createBody may have added some headers, so retain them
+ $tempheaders = $this->MIMEHeader;
+ $this->MIMEHeader = $this->createHeader();
+ $this->MIMEHeader .= $tempheaders;
+
+ // To capture the complete message when using mail(), create
+ // an extra header list which createHeader() doesn't fold in
+ if ('mail' === $this->Mailer) {
+ if (count($this->to) > 0) {
+ $this->mailHeader .= $this->addrAppend('To', $this->to);
+ } else {
+ $this->mailHeader .= $this->headerLine('To', 'undisclosed-recipients:;');
+ }
+ $this->mailHeader .= $this->headerLine(
+ 'Subject',
+ $this->encodeHeader($this->secureHeader($this->Subject))
+ );
+ }
+
+ // Sign with DKIM if enabled
+ if (!empty($this->DKIM_domain)
+ && !empty($this->DKIM_selector)
+ && (!empty($this->DKIM_private_string)
+ || (!empty($this->DKIM_private)
+ && static::isPermittedPath($this->DKIM_private)
+ && file_exists($this->DKIM_private)
+ )
+ )
+ ) {
+ $header_dkim = $this->DKIM_Add(
+ $this->MIMEHeader . $this->mailHeader,
+ $this->encodeHeader($this->secureHeader($this->Subject)),
+ $this->MIMEBody
+ );
+ $this->MIMEHeader = static::stripTrailingWSP($this->MIMEHeader) . static::$LE .
+ static::normalizeBreaks($header_dkim) . static::$LE;
+ }
+
+ return true;
+ } catch (Exception $exc) {
+ $this->setError($exc->getMessage());
+ if ($this->exceptions) {
+ throw $exc;
+ }
+
+ return false;
+ }
+ }
+
+ /**
+ * Actually send a message via the selected mechanism.
+ *
+ * @throws Exception
+ *
+ * @return bool
+ */
+ public function postSend()
+ {
+ try {
+ // Choose the mailer and send through it
+ switch ($this->Mailer) {
+ case 'sendmail':
+ case 'qmail':
+ return $this->sendmailSend($this->MIMEHeader, $this->MIMEBody);
+ case 'smtp':
+ return $this->smtpSend($this->MIMEHeader, $this->MIMEBody);
+ case 'mail':
+ return $this->mailSend($this->MIMEHeader, $this->MIMEBody);
+ default:
+ $sendMethod = $this->Mailer . 'Send';
+ if (method_exists($this, $sendMethod)) {
+ return $this->$sendMethod($this->MIMEHeader, $this->MIMEBody);
+ }
+
+ return $this->mailSend($this->MIMEHeader, $this->MIMEBody);
+ }
+ } catch (Exception $exc) {
+ $this->setError($exc->getMessage());
+ $this->edebug($exc->getMessage());
+ if ($this->exceptions) {
+ throw $exc;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Send mail using the $Sendmail program.
+ *
+ * @see PHPMailer::$Sendmail
+ *
+ * @param string $header The message headers
+ * @param string $body The message body
+ *
+ * @throws Exception
+ *
+ * @return bool
+ */
+ protected function sendmailSend($header, $body)
+ {
+ $header = static::stripTrailingWSP($header) . static::$LE . static::$LE;
+
+ // CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped.
+ if (!empty($this->Sender) && self::isShellSafe($this->Sender)) {
+ if ('qmail' === $this->Mailer) {
+ $sendmailFmt = '%s -f%s';
+ } else {
+ $sendmailFmt = '%s -oi -f%s -t';
+ }
+ } elseif ('qmail' === $this->Mailer) {
+ $sendmailFmt = '%s';
+ } else {
+ $sendmailFmt = '%s -oi -t';
+ }
+
+ $sendmail = sprintf($sendmailFmt, escapeshellcmd($this->Sendmail), $this->Sender);
+
+ if ($this->SingleTo) {
+ foreach ($this->SingleToArray as $toAddr) {
+ $mail = @popen($sendmail, 'w');
+ if (!$mail) {
+ throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
+ }
+ fwrite($mail, 'To: ' . $toAddr . "\n");
+ fwrite($mail, $header);
+ fwrite($mail, $body);
+ $result = pclose($mail);
+ $this->doCallback(
+ ($result === 0),
+ [$toAddr],
+ $this->cc,
+ $this->bcc,
+ $this->Subject,
+ $body,
+ $this->From,
+ []
+ );
+ if (0 !== $result) {
+ throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
+ }
+ }
+ } else {
+ $mail = @popen($sendmail, 'w');
+ if (!$mail) {
+ throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
+ }
+ fwrite($mail, $header);
+ fwrite($mail, $body);
+ $result = pclose($mail);
+ $this->doCallback(
+ ($result === 0),
+ $this->to,
+ $this->cc,
+ $this->bcc,
+ $this->Subject,
+ $body,
+ $this->From,
+ []
+ );
+ if (0 !== $result) {
+ throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Fix CVE-2016-10033 and CVE-2016-10045 by disallowing potentially unsafe shell characters.
+ * Note that escapeshellarg and escapeshellcmd are inadequate for our purposes, especially on Windows.
+ *
+ * @see https://github.com/PHPMailer/PHPMailer/issues/924 CVE-2016-10045 bug report
+ *
+ * @param string $string The string to be validated
+ *
+ * @return bool
+ */
+ protected static function isShellSafe($string)
+ {
+ // Future-proof
+ if (escapeshellcmd($string) !== $string
+ || !in_array(escapeshellarg($string), ["'$string'", "\"$string\""])
+ ) {
+ return false;
+ }
+
+ $length = strlen($string);
+
+ for ($i = 0; $i < $length; ++$i) {
+ $c = $string[$i];
+
+ // All other characters have a special meaning in at least one common shell, including = and +.
+ // Full stop (.) has a special meaning in cmd.exe, but its impact should be negligible here.
+ // Note that this does permit non-Latin alphanumeric characters based on the current locale.
+ if (!ctype_alnum($c) && strpos('@_-.', $c) === false) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Check whether a file path is of a permitted type.
+ * Used to reject URLs and phar files from functions that access local file paths,
+ * such as addAttachment.
+ *
+ * @param string $path A relative or absolute path to a file
+ *
+ * @return bool
+ */
+ protected static function isPermittedPath($path)
+ {
+ return !preg_match('#^[a-z]+://#i', $path);
+ }
+
+ /**
+ * Send mail using the PHP mail() function.
+ *
+ * @see http://www.php.net/manual/en/book.mail.php
+ *
+ * @param string $header The message headers
+ * @param string $body The message body
+ *
+ * @throws Exception
+ *
+ * @return bool
+ */
+ protected function mailSend($header, $body)
+ {
+ $header = static::stripTrailingWSP($header) . static::$LE . static::$LE;
+
+ $toArr = [];
+ foreach ($this->to as $toaddr) {
+ $toArr[] = $this->addrFormat($toaddr);
+ }
+ $to = implode(', ', $toArr);
+
+ $params = null;
+ //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver
+ //A space after `-f` is optional, but there is a long history of its presence
+ //causing problems, so we don't use one
+ //Exim docs: http://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html
+ //Sendmail docs: http://www.sendmail.org/~ca/email/man/sendmail.html
+ //Qmail docs: http://www.qmail.org/man/man8/qmail-inject.html
+ //Example problem: https://www.drupal.org/node/1057954
+ // CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped.
+ if (!empty($this->Sender) && static::validateAddress($this->Sender) && self::isShellSafe($this->Sender)) {
+ $params = sprintf('-f%s', $this->Sender);
+ }
+ if (!empty($this->Sender) && static::validateAddress($this->Sender)) {
+ $old_from = ini_get('sendmail_from');
+ ini_set('sendmail_from', $this->Sender);
+ }
+ $result = false;
+ if ($this->SingleTo && count($toArr) > 1) {
+ foreach ($toArr as $toAddr) {
+ $result = $this->mailPassthru($toAddr, $this->Subject, $body, $header, $params);
+ $this->doCallback($result, [$toAddr], $this->cc, $this->bcc, $this->Subject, $body, $this->From, []);
+ }
+ } else {
+ $result = $this->mailPassthru($to, $this->Subject, $body, $header, $params);
+ $this->doCallback($result, $this->to, $this->cc, $this->bcc, $this->Subject, $body, $this->From, []);
+ }
+ if (isset($old_from)) {
+ ini_set('sendmail_from', $old_from);
+ }
+ if (!$result) {
+ throw new Exception($this->lang('instantiate'), self::STOP_CRITICAL);
+ }
+
+ return true;
+ }
+
+ /**
+ * Get an instance to use for SMTP operations.
+ * Override this function to load your own SMTP implementation,
+ * or set one with setSMTPInstance.
+ *
+ * @return SMTP
+ */
+ public function getSMTPInstance()
+ {
+ if (!is_object($this->smtp)) {
+ $this->smtp = new SMTP();
+ }
+
+ return $this->smtp;
+ }
+
+ /**
+ * Provide an instance to use for SMTP operations.
+ *
+ * @return SMTP
+ */
+ public function setSMTPInstance(SMTP $smtp)
+ {
+ $this->smtp = $smtp;
+
+ return $this->smtp;
+ }
+
+ /**
+ * Send mail via SMTP.
+ * Returns false if there is a bad MAIL FROM, RCPT, or DATA input.
+ *
+ * @see PHPMailer::setSMTPInstance() to use a different class.
+ *
+ * @uses \PHPMailer\PHPMailer\SMTP
+ *
+ * @param string $header The message headers
+ * @param string $body The message body
+ *
+ * @throws Exception
+ *
+ * @return bool
+ */
+ protected function smtpSend($header, $body)
+ {
+ $header = static::stripTrailingWSP($header) . static::$LE . static::$LE;
+ $bad_rcpt = [];
+ if (!$this->smtpConnect($this->SMTPOptions)) {
+ throw new Exception($this->lang('smtp_connect_failed'), self::STOP_CRITICAL);
+ }
+ //Sender already validated in preSend()
+ if ('' === $this->Sender) {
+ $smtp_from = $this->From;
+ } else {
+ $smtp_from = $this->Sender;
+ }
+ if (!$this->smtp->mail($smtp_from)) {
+ $this->setError($this->lang('from_failed') . $smtp_from . ' : ' . implode(',', $this->smtp->getError()));
+ throw new Exception($this->ErrorInfo, self::STOP_CRITICAL);
+ }
+
+ $callbacks = [];
+ // Attempt to send to all recipients
+ foreach ([$this->to, $this->cc, $this->bcc] as $togroup) {
+ foreach ($togroup as $to) {
+ if (!$this->smtp->recipient($to[0], $this->dsn)) {
+ $error = $this->smtp->getError();
+ $bad_rcpt[] = ['to' => $to[0], 'error' => $error['detail']];
+ $isSent = false;
+ } else {
+ $isSent = true;
+ }
+
+ $callbacks[] = ['issent'=>$isSent, 'to'=>$to[0]];
+ }
+ }
+
+ // Only send the DATA command if we have viable recipients
+ if ((count($this->all_recipients) > count($bad_rcpt)) && !$this->smtp->data($header . $body)) {
+ throw new Exception($this->lang('data_not_accepted'), self::STOP_CRITICAL);
+ }
+
+ $smtp_transaction_id = $this->smtp->getLastTransactionID();
+
+ if ($this->SMTPKeepAlive) {
+ $this->smtp->reset();
+ } else {
+ $this->smtp->quit();
+ $this->smtp->close();
+ }
+
+ foreach ($callbacks as $cb) {
+ $this->doCallback(
+ $cb['issent'],
+ [$cb['to']],
+ [],
+ [],
+ $this->Subject,
+ $body,
+ $this->From,
+ ['smtp_transaction_id' => $smtp_transaction_id]
+ );
+ }
+
+ //Create error message for any bad addresses
+ if (count($bad_rcpt) > 0) {
+ $errstr = '';
+ foreach ($bad_rcpt as $bad) {
+ $errstr .= $bad['to'] . ': ' . $bad['error'];
+ }
+ throw new Exception($this->lang('recipients_failed') . $errstr, self::STOP_CONTINUE);
+ }
+
+ return true;
+ }
+
+ /**
+ * Initiate a connection to an SMTP server.
+ * Returns false if the operation failed.
+ *
+ * @param array $options An array of options compatible with stream_context_create()
+ *
+ * @throws Exception
+ *
+ * @uses \PHPMailer\PHPMailer\SMTP
+ *
+ * @return bool
+ */
+ public function smtpConnect($options = null)
+ {
+ if (null === $this->smtp) {
+ $this->smtp = $this->getSMTPInstance();
+ }
+
+ //If no options are provided, use whatever is set in the instance
+ if (null === $options) {
+ $options = $this->SMTPOptions;
+ }
+
+ // Already connected?
+ if ($this->smtp->connected()) {
+ return true;
+ }
+
+ $this->smtp->setTimeout($this->Timeout);
+ $this->smtp->setDebugLevel($this->SMTPDebug);
+ $this->smtp->setDebugOutput($this->Debugoutput);
+ $this->smtp->setVerp($this->do_verp);
+ $hosts = explode(';', $this->Host);
+ $lastexception = null;
+
+ foreach ($hosts as $hostentry) {
+ $hostinfo = [];
+ if (!preg_match(
+ '/^(?:(ssl|tls):\/\/)?(.+?)(?::(\d+))?$/',
+ trim($hostentry),
+ $hostinfo
+ )) {
+ $this->edebug($this->lang('invalid_hostentry') . ' ' . trim($hostentry));
+ // Not a valid host entry
+ continue;
+ }
+ // $hostinfo[1]: optional ssl or tls prefix
+ // $hostinfo[2]: the hostname
+ // $hostinfo[3]: optional port number
+ // The host string prefix can temporarily override the current setting for SMTPSecure
+ // If it's not specified, the default value is used
+
+ //Check the host name is a valid name or IP address before trying to use it
+ if (!static::isValidHost($hostinfo[2])) {
+ $this->edebug($this->lang('invalid_host') . ' ' . $hostinfo[2]);
+ continue;
+ }
+ $prefix = '';
+ $secure = $this->SMTPSecure;
+ $tls = (static::ENCRYPTION_STARTTLS === $this->SMTPSecure);
+ if ('ssl' === $hostinfo[1] || ('' === $hostinfo[1] && static::ENCRYPTION_SMTPS === $this->SMTPSecure)) {
+ $prefix = 'ssl://';
+ $tls = false; // Can't have SSL and TLS at the same time
+ $secure = static::ENCRYPTION_SMTPS;
+ } elseif ('tls' === $hostinfo[1]) {
+ $tls = true;
+ // tls doesn't use a prefix
+ $secure = static::ENCRYPTION_STARTTLS;
+ }
+ //Do we need the OpenSSL extension?
+ $sslext = defined('OPENSSL_ALGO_SHA256');
+ if (static::ENCRYPTION_STARTTLS === $secure || static::ENCRYPTION_SMTPS === $secure) {
+ //Check for an OpenSSL constant rather than using extension_loaded, which is sometimes disabled
+ if (!$sslext) {
+ throw new Exception($this->lang('extension_missing') . 'openssl', self::STOP_CRITICAL);
+ }
+ }
+ $host = $hostinfo[2];
+ $port = $this->Port;
+ if (array_key_exists(3, $hostinfo) && is_numeric($hostinfo[3]) && $hostinfo[3] > 0 && $hostinfo[3] < 65536) {
+ $port = (int) $hostinfo[3];
+ }
+ if ($this->smtp->connect($prefix . $host, $port, $this->Timeout, $options)) {
+ try {
+ if ($this->Helo) {
+ $hello = $this->Helo;
+ } else {
+ $hello = $this->serverHostname();
+ }
+ $this->smtp->hello($hello);
+ //Automatically enable TLS encryption if:
+ // * it's not disabled
+ // * we have openssl extension
+ // * we are not already using SSL
+ // * the server offers STARTTLS
+ if ($this->SMTPAutoTLS && $sslext && 'ssl' !== $secure && $this->smtp->getServerExt('STARTTLS')) {
+ $tls = true;
+ }
+ if ($tls) {
+ if (!$this->smtp->startTLS()) {
+ throw new Exception($this->lang('connect_host'));
+ }
+ // We must resend EHLO after TLS negotiation
+ $this->smtp->hello($hello);
+ }
+ if ($this->SMTPAuth && !$this->smtp->authenticate(
+ $this->Username,
+ $this->Password,
+ $this->AuthType,
+ $this->oauth
+ )) {
+ throw new Exception($this->lang('authenticate'));
+ }
+
+ return true;
+ } catch (Exception $exc) {
+ $lastexception = $exc;
+ $this->edebug($exc->getMessage());
+ // We must have connected, but then failed TLS or Auth, so close connection nicely
+ $this->smtp->quit();
+ }
+ }
+ }
+ // If we get here, all connection attempts have failed, so close connection hard
+ $this->smtp->close();
+ // As we've caught all exceptions, just report whatever the last one was
+ if ($this->exceptions && null !== $lastexception) {
+ throw $lastexception;
+ }
+
+ return false;
+ }
+
+ /**
+ * Close the active SMTP session if one exists.
+ */
+ public function smtpClose()
+ {
+ if ((null !== $this->smtp) && $this->smtp->connected()) {
+ $this->smtp->quit();
+ $this->smtp->close();
+ }
+ }
+
+ /**
+ * Set the language for error messages.
+ * Returns false if it cannot load the language file.
+ * The default language is English.
+ *
+ * @param string $langcode ISO 639-1 2-character language code (e.g. French is "fr")
+ * @param string $lang_path Path to the language file directory, with trailing separator (slash)
+ *
+ * @return bool
+ */
+ public function setLanguage($langcode = 'en', $lang_path = '')
+ {
+ // Backwards compatibility for renamed language codes
+ $renamed_langcodes = [
+ 'br' => 'pt_br',
+ 'cz' => 'cs',
+ 'dk' => 'da',
+ 'no' => 'nb',
+ 'se' => 'sv',
+ 'rs' => 'sr',
+ 'tg' => 'tl',
+ 'am' => 'hy',
+ ];
+
+ if (isset($renamed_langcodes[$langcode])) {
+ $langcode = $renamed_langcodes[$langcode];
+ }
+
+ // Define full set of translatable strings in English
+ $PHPMAILER_LANG = [
+ 'authenticate' => 'SMTP Error: Could not authenticate.',
+ 'connect_host' => 'SMTP Error: Could not connect to SMTP host.',
+ 'data_not_accepted' => 'SMTP Error: data not accepted.',
+ 'empty_message' => 'Message body empty',
+ 'encoding' => 'Unknown encoding: ',
+ 'execute' => 'Could not execute: ',
+ 'file_access' => 'Could not access file: ',
+ 'file_open' => 'File Error: Could not open file: ',
+ 'from_failed' => 'The following From address failed: ',
+ 'instantiate' => 'Could not instantiate mail function.',
+ 'invalid_address' => 'Invalid address: ',
+ 'invalid_hostentry' => 'Invalid hostentry: ',
+ 'invalid_host' => 'Invalid host: ',
+ 'mailer_not_supported' => ' mailer is not supported.',
+ 'provide_address' => 'You must provide at least one recipient email address.',
+ 'recipients_failed' => 'SMTP Error: The following recipients failed: ',
+ 'signing' => 'Signing Error: ',
+ 'smtp_connect_failed' => 'SMTP connect() failed.',
+ 'smtp_error' => 'SMTP server error: ',
+ 'variable_set' => 'Cannot set or reset variable: ',
+ 'extension_missing' => 'Extension missing: ',
+ ];
+ if (empty($lang_path)) {
+ // Calculate an absolute path so it can work if CWD is not here
+ $lang_path = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR;
+ }
+ //Validate $langcode
+ if (!preg_match('/^[a-z]{2}(?:_[a-zA-Z]{2})?$/', $langcode)) {
+ $langcode = 'en';
+ }
+ $foundlang = true;
+ $lang_file = $lang_path . 'phpmailer.lang-' . $langcode . '.php';
+ // There is no English translation file
+ if ('en' !== $langcode) {
+ // Make sure language file path is readable
+ if (!static::isPermittedPath($lang_file) || !file_exists($lang_file)) {
+ $foundlang = false;
+ } else {
+ // Overwrite language-specific strings.
+ // This way we'll never have missing translation keys.
+ $foundlang = include $lang_file;
+ }
+ }
+ $this->language = $PHPMAILER_LANG;
+
+ return (bool) $foundlang; // Returns false if language not found
+ }
+
+ /**
+ * Get the array of strings for the current language.
+ *
+ * @return array
+ */
+ public function getTranslations()
+ {
+ return $this->language;
+ }
+
+ /**
+ * Create recipient headers.
+ *
+ * @param string $type
+ * @param array $addr An array of recipients,
+ * where each recipient is a 2-element indexed array with element 0 containing an address
+ * and element 1 containing a name, like:
+ * [['joe@example.com', 'Joe User'], ['zoe@example.com', 'Zoe User']]
+ *
+ * @return string
+ */
+ public function addrAppend($type, $addr)
+ {
+ $addresses = [];
+ foreach ($addr as $address) {
+ $addresses[] = $this->addrFormat($address);
+ }
+
+ return $type . ': ' . implode(', ', $addresses) . static::$LE;
+ }
+
+ /**
+ * Format an address for use in a message header.
+ *
+ * @param array $addr A 2-element indexed array, element 0 containing an address, element 1 containing a name like
+ * ['joe@example.com', 'Joe User']
+ *
+ * @return string
+ */
+ public function addrFormat($addr)
+ {
+ if (empty($addr[1])) { // No name provided
+ return $this->secureHeader($addr[0]);
+ }
+
+ return $this->encodeHeader($this->secureHeader($addr[1]), 'phrase') .
+ ' <' . $this->secureHeader($addr[0]) . '>';
+ }
+
+ /**
+ * Word-wrap message.
+ * For use with mailers that do not automatically perform wrapping
+ * and for quoted-printable encoded messages.
+ * Original written by philippe.
+ *
+ * @param string $message The message to wrap
+ * @param int $length The line length to wrap to
+ * @param bool $qp_mode Whether to run in Quoted-Printable mode
+ *
+ * @return string
+ */
+ public function wrapText($message, $length, $qp_mode = false)
+ {
+ if ($qp_mode) {
+ $soft_break = sprintf(' =%s', static::$LE);
+ } else {
+ $soft_break = static::$LE;
+ }
+ // If utf-8 encoding is used, we will need to make sure we don't
+ // split multibyte characters when we wrap
+ $is_utf8 = static::CHARSET_UTF8 === strtolower($this->CharSet);
+ $lelen = strlen(static::$LE);
+ $crlflen = strlen(static::$LE);
+
+ $message = static::normalizeBreaks($message);
+ //Remove a trailing line break
+ if (substr($message, -$lelen) === static::$LE) {
+ $message = substr($message, 0, -$lelen);
+ }
+
+ //Split message into lines
+ $lines = explode(static::$LE, $message);
+ //Message will be rebuilt in here
+ $message = '';
+ foreach ($lines as $line) {
+ $words = explode(' ', $line);
+ $buf = '';
+ $firstword = true;
+ foreach ($words as $word) {
+ if ($qp_mode && (strlen($word) > $length)) {
+ $space_left = $length - strlen($buf) - $crlflen;
+ if (!$firstword) {
+ if ($space_left > 20) {
+ $len = $space_left;
+ if ($is_utf8) {
+ $len = $this->utf8CharBoundary($word, $len);
+ } elseif ('=' === substr($word, $len - 1, 1)) {
+ --$len;
+ } elseif ('=' === substr($word, $len - 2, 1)) {
+ $len -= 2;
+ }
+ $part = substr($word, 0, $len);
+ $word = substr($word, $len);
+ $buf .= ' ' . $part;
+ $message .= $buf . sprintf('=%s', static::$LE);
+ } else {
+ $message .= $buf . $soft_break;
+ }
+ $buf = '';
+ }
+ while ($word !== '') {
+ if ($length <= 0) {
+ break;
+ }
+ $len = $length;
+ if ($is_utf8) {
+ $len = $this->utf8CharBoundary($word, $len);
+ } elseif ('=' === substr($word, $len - 1, 1)) {
+ --$len;
+ } elseif ('=' === substr($word, $len - 2, 1)) {
+ $len -= 2;
+ }
+ $part = substr($word, 0, $len);
+ $word = (string) substr($word, $len);
+
+ if ($word !== '') {
+ $message .= $part . sprintf('=%s', static::$LE);
+ } else {
+ $buf = $part;
+ }
+ }
+ } else {
+ $buf_o = $buf;
+ if (!$firstword) {
+ $buf .= ' ';
+ }
+ $buf .= $word;
+
+ if ('' !== $buf_o && strlen($buf) > $length) {
+ $message .= $buf_o . $soft_break;
+ $buf = $word;
+ }
+ }
+ $firstword = false;
+ }
+ $message .= $buf . static::$LE;
+ }
+
+ return $message;
+ }
+
+ /**
+ * Find the last character boundary prior to $maxLength in a utf-8
+ * quoted-printable encoded string.
+ * Original written by Colin Brown.
+ *
+ * @param string $encodedText utf-8 QP text
+ * @param int $maxLength Find the last character boundary prior to this length
+ *
+ * @return int
+ */
+ public function utf8CharBoundary($encodedText, $maxLength)
+ {
+ $foundSplitPos = false;
+ $lookBack = 3;
+ while (!$foundSplitPos) {
+ $lastChunk = substr($encodedText, $maxLength - $lookBack, $lookBack);
+ $encodedCharPos = strpos($lastChunk, '=');
+ if (false !== $encodedCharPos) {
+ // Found start of encoded character byte within $lookBack block.
+ // Check the encoded byte value (the 2 chars after the '=')
+ $hex = substr($encodedText, $maxLength - $lookBack + $encodedCharPos + 1, 2);
+ $dec = hexdec($hex);
+ if ($dec < 128) {
+ // Single byte character.
+ // If the encoded char was found at pos 0, it will fit
+ // otherwise reduce maxLength to start of the encoded char
+ if ($encodedCharPos > 0) {
+ $maxLength -= $lookBack - $encodedCharPos;
+ }
+ $foundSplitPos = true;
+ } elseif ($dec >= 192) {
+ // First byte of a multi byte character
+ // Reduce maxLength to split at start of character
+ $maxLength -= $lookBack - $encodedCharPos;
+ $foundSplitPos = true;
+ } elseif ($dec < 192) {
+ // Middle byte of a multi byte character, look further back
+ $lookBack += 3;
+ }
+ } else {
+ // No encoded character found
+ $foundSplitPos = true;
+ }
+ }
+
+ return $maxLength;
+ }
+
+ /**
+ * Apply word wrapping to the message body.
+ * Wraps the message body to the number of chars set in the WordWrap property.
+ * You should only do this to plain-text bodies as wrapping HTML tags may break them.
+ * This is called automatically by createBody(), so you don't need to call it yourself.
+ */
+ public function setWordWrap()
+ {
+ if ($this->WordWrap < 1) {
+ return;
+ }
+
+ switch ($this->message_type) {
+ case 'alt':
+ case 'alt_inline':
+ case 'alt_attach':
+ case 'alt_inline_attach':
+ $this->AltBody = $this->wrapText($this->AltBody, $this->WordWrap);
+ break;
+ default:
+ $this->Body = $this->wrapText($this->Body, $this->WordWrap);
+ break;
+ }
+ }
+
+ /**
+ * Assemble message headers.
+ *
+ * @return string The assembled headers
+ */
+ public function createHeader()
+ {
+ $result = '';
+
+ $result .= $this->headerLine('Date', '' === $this->MessageDate ? self::rfcDate() : $this->MessageDate);
+
+ // To be created automatically by mail()
+ if ($this->SingleTo) {
+ if ('mail' !== $this->Mailer) {
+ foreach ($this->to as $toaddr) {
+ $this->SingleToArray[] = $this->addrFormat($toaddr);
+ }
+ }
+ } elseif (count($this->to) > 0) {
+ if ('mail' !== $this->Mailer) {
+ $result .= $this->addrAppend('To', $this->to);
+ }
+ } elseif (count($this->cc) === 0) {
+ $result .= $this->headerLine('To', 'undisclosed-recipients:;');
+ }
+
+ $result .= $this->addrAppend('From', [[trim($this->From), $this->FromName]]);
+
+ // sendmail and mail() extract Cc from the header before sending
+ if (count($this->cc) > 0) {
+ $result .= $this->addrAppend('Cc', $this->cc);
+ }
+
+ // sendmail and mail() extract Bcc from the header before sending
+ if ((
+ 'sendmail' === $this->Mailer || 'qmail' === $this->Mailer || 'mail' === $this->Mailer
+ )
+ && count($this->bcc) > 0
+ ) {
+ $result .= $this->addrAppend('Bcc', $this->bcc);
+ }
+
+ if (count($this->ReplyTo) > 0) {
+ $result .= $this->addrAppend('Reply-To', $this->ReplyTo);
+ }
+
+ // mail() sets the subject itself
+ if ('mail' !== $this->Mailer) {
+ $result .= $this->headerLine('Subject', $this->encodeHeader($this->secureHeader($this->Subject)));
+ }
+
+ // Only allow a custom message ID if it conforms to RFC 5322 section 3.6.4
+ // https://tools.ietf.org/html/rfc5322#section-3.6.4
+ if ('' !== $this->MessageID && preg_match('/^<.*@.*>$/', $this->MessageID)) {
+ $this->lastMessageID = $this->MessageID;
+ } else {
+ $this->lastMessageID = sprintf('<%s@%s>', $this->uniqueid, $this->serverHostname());
+ }
+ $result .= $this->headerLine('Message-ID', $this->lastMessageID);
+ if (null !== $this->Priority) {
+ $result .= $this->headerLine('X-Priority', $this->Priority);
+ }
+ if ('' === $this->XMailer) {
+ $result .= $this->headerLine(
+ 'X-Mailer',
+ 'PHPMailer ' . self::VERSION . ' (https://github.com/PHPMailer/PHPMailer)'
+ );
+ } else {
+ $myXmailer = trim($this->XMailer);
+ if ($myXmailer) {
+ $result .= $this->headerLine('X-Mailer', $myXmailer);
+ }
+ }
+
+ if ('' !== $this->ConfirmReadingTo) {
+ $result .= $this->headerLine('Disposition-Notification-To', '<' . $this->ConfirmReadingTo . '>');
+ }
+
+ // Add custom headers
+ foreach ($this->CustomHeader as $header) {
+ $result .= $this->headerLine(
+ trim($header[0]),
+ $this->encodeHeader(trim($header[1]))
+ );
+ }
+ if (!$this->sign_key_file) {
+ $result .= $this->headerLine('MIME-Version', '1.0');
+ $result .= $this->getMailMIME();
+ }
+
+ return $result;
+ }
+
+ /**
+ * Get the message MIME type headers.
+ *
+ * @return string
+ */
+ public function getMailMIME()
+ {
+ $result = '';
+ $ismultipart = true;
+ switch ($this->message_type) {
+ case 'inline':
+ $result .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_RELATED . ';');
+ $result .= $this->textLine(' boundary="' . $this->boundary[1] . '"');
+ break;
+ case 'attach':
+ case 'inline_attach':
+ case 'alt_attach':
+ case 'alt_inline_attach':
+ $result .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_MIXED . ';');
+ $result .= $this->textLine(' boundary="' . $this->boundary[1] . '"');
+ break;
+ case 'alt':
+ case 'alt_inline':
+ $result .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_ALTERNATIVE . ';');
+ $result .= $this->textLine(' boundary="' . $this->boundary[1] . '"');
+ break;
+ default:
+ // Catches case 'plain': and case '':
+ $result .= $this->textLine('Content-Type: ' . $this->ContentType . '; charset=' . $this->CharSet);
+ $ismultipart = false;
+ break;
+ }
+ // RFC1341 part 5 says 7bit is assumed if not specified
+ if (static::ENCODING_7BIT !== $this->Encoding) {
+ // RFC 2045 section 6.4 says multipart MIME parts may only use 7bit, 8bit or binary CTE
+ if ($ismultipart) {
+ if (static::ENCODING_8BIT === $this->Encoding) {
+ $result .= $this->headerLine('Content-Transfer-Encoding', static::ENCODING_8BIT);
+ }
+ // The only remaining alternatives are quoted-printable and base64, which are both 7bit compatible
+ } else {
+ $result .= $this->headerLine('Content-Transfer-Encoding', $this->Encoding);
+ }
+ }
+
+ if ('mail' !== $this->Mailer) {
+// $result .= static::$LE;
+ }
+
+ return $result;
+ }
+
+ /**
+ * Returns the whole MIME message.
+ * Includes complete headers and body.
+ * Only valid post preSend().
+ *
+ * @see PHPMailer::preSend()
+ *
+ * @return string
+ */
+ public function getSentMIMEMessage()
+ {
+ return static::stripTrailingWSP($this->MIMEHeader . $this->mailHeader) .
+ static::$LE . static::$LE . $this->MIMEBody;
+ }
+
+ /**
+ * Create a unique ID to use for boundaries.
+ *
+ * @return string
+ */
+ protected function generateId()
+ {
+ $len = 32; //32 bytes = 256 bits
+ $bytes = '';
+ if (function_exists('random_bytes')) {
+ try {
+ $bytes = random_bytes($len);
+ } catch (\Exception $e) {
+ //Do nothing
+ }
+ } elseif (function_exists('openssl_random_pseudo_bytes')) {
+ /** @noinspection CryptographicallySecureRandomnessInspection */
+ $bytes = openssl_random_pseudo_bytes($len);
+ }
+ if ($bytes === '') {
+ //We failed to produce a proper random string, so make do.
+ //Use a hash to force the length to the same as the other methods
+ $bytes = hash('sha256', uniqid((string) mt_rand(), true), true);
+ }
+
+ //We don't care about messing up base64 format here, just want a random string
+ return str_replace(['=', '+', '/'], '', base64_encode(hash('sha256', $bytes, true)));
+ }
+
+ /**
+ * Assemble the message body.
+ * Returns an empty string on failure.
+ *
+ * @throws Exception
+ *
+ * @return string The assembled message body
+ */
+ public function createBody()
+ {
+ $body = '';
+ //Create unique IDs and preset boundaries
+ $this->uniqueid = $this->generateId();
+ $this->boundary[1] = 'b1_' . $this->uniqueid;
+ $this->boundary[2] = 'b2_' . $this->uniqueid;
+ $this->boundary[3] = 'b3_' . $this->uniqueid;
+
+ if ($this->sign_key_file) {
+ $body .= $this->getMailMIME() . static::$LE;
+ }
+
+ $this->setWordWrap();
+
+ $bodyEncoding = $this->Encoding;
+ $bodyCharSet = $this->CharSet;
+ //Can we do a 7-bit downgrade?
+ if (static::ENCODING_8BIT === $bodyEncoding && !$this->has8bitChars($this->Body)) {
+ $bodyEncoding = static::ENCODING_7BIT;
+ //All ISO 8859, Windows codepage and UTF-8 charsets are ascii compatible up to 7-bit
+ $bodyCharSet = static::CHARSET_ASCII;
+ }
+ //If lines are too long, and we're not already using an encoding that will shorten them,
+ //change to quoted-printable transfer encoding for the body part only
+ if (static::ENCODING_BASE64 !== $this->Encoding && static::hasLineLongerThanMax($this->Body)) {
+ $bodyEncoding = static::ENCODING_QUOTED_PRINTABLE;
+ }
+
+ $altBodyEncoding = $this->Encoding;
+ $altBodyCharSet = $this->CharSet;
+ //Can we do a 7-bit downgrade?
+ if (static::ENCODING_8BIT === $altBodyEncoding && !$this->has8bitChars($this->AltBody)) {
+ $altBodyEncoding = static::ENCODING_7BIT;
+ //All ISO 8859, Windows codepage and UTF-8 charsets are ascii compatible up to 7-bit
+ $altBodyCharSet = static::CHARSET_ASCII;
+ }
+ //If lines are too long, and we're not already using an encoding that will shorten them,
+ //change to quoted-printable transfer encoding for the alt body part only
+ if (static::ENCODING_BASE64 !== $altBodyEncoding && static::hasLineLongerThanMax($this->AltBody)) {
+ $altBodyEncoding = static::ENCODING_QUOTED_PRINTABLE;
+ }
+ //Use this as a preamble in all multipart message types
+ $mimepre = 'This is a multi-part message in MIME format.' . static::$LE . static::$LE;
+ switch ($this->message_type) {
+ case 'inline':
+ $body .= $mimepre;
+ $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, '', $bodyEncoding);
+ $body .= $this->encodeString($this->Body, $bodyEncoding);
+ $body .= static::$LE;
+ $body .= $this->attachAll('inline', $this->boundary[1]);
+ break;
+ case 'attach':
+ $body .= $mimepre;
+ $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, '', $bodyEncoding);
+ $body .= $this->encodeString($this->Body, $bodyEncoding);
+ $body .= static::$LE;
+ $body .= $this->attachAll('attachment', $this->boundary[1]);
+ break;
+ case 'inline_attach':
+ $body .= $mimepre;
+ $body .= $this->textLine('--' . $this->boundary[1]);
+ $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_RELATED . ';');
+ $body .= $this->textLine(' boundary="' . $this->boundary[2] . '";');
+ $body .= $this->textLine(' type="' . static::CONTENT_TYPE_TEXT_HTML . '"');
+ $body .= static::$LE;
+ $body .= $this->getBoundary($this->boundary[2], $bodyCharSet, '', $bodyEncoding);
+ $body .= $this->encodeString($this->Body, $bodyEncoding);
+ $body .= static::$LE;
+ $body .= $this->attachAll('inline', $this->boundary[2]);
+ $body .= static::$LE;
+ $body .= $this->attachAll('attachment', $this->boundary[1]);
+ break;
+ case 'alt':
+ $body .= $mimepre;
+ $body .= $this->getBoundary(
+ $this->boundary[1],
+ $altBodyCharSet,
+ static::CONTENT_TYPE_PLAINTEXT,
+ $altBodyEncoding
+ );
+ $body .= $this->encodeString($this->AltBody, $altBodyEncoding);
+ $body .= static::$LE;
+ $body .= $this->getBoundary(
+ $this->boundary[1],
+ $bodyCharSet,
+ static::CONTENT_TYPE_TEXT_HTML,
+ $bodyEncoding
+ );
+ $body .= $this->encodeString($this->Body, $bodyEncoding);
+ $body .= static::$LE;
+ if (!empty($this->Ical)) {
+ $method = static::ICAL_METHOD_REQUEST;
+ foreach (static::$IcalMethods as $imethod) {
+ if (stripos($this->Ical, 'METHOD:' . $imethod) !== false) {
+ $method = $imethod;
+ break;
+ }
+ }
+ $body .= $this->getBoundary(
+ $this->boundary[1],
+ '',
+ static::CONTENT_TYPE_TEXT_CALENDAR . '; method=' . $method,
+ ''
+ );
+ $body .= $this->encodeString($this->Ical, $this->Encoding);
+ $body .= static::$LE;
+ }
+ $body .= $this->endBoundary($this->boundary[1]);
+ break;
+ case 'alt_inline':
+ $body .= $mimepre;
+ $body .= $this->getBoundary(
+ $this->boundary[1],
+ $altBodyCharSet,
+ static::CONTENT_TYPE_PLAINTEXT,
+ $altBodyEncoding
+ );
+ $body .= $this->encodeString($this->AltBody, $altBodyEncoding);
+ $body .= static::$LE;
+ $body .= $this->textLine('--' . $this->boundary[1]);
+ $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_RELATED . ';');
+ $body .= $this->textLine(' boundary="' . $this->boundary[2] . '";');
+ $body .= $this->textLine(' type="' . static::CONTENT_TYPE_TEXT_HTML . '"');
+ $body .= static::$LE;
+ $body .= $this->getBoundary(
+ $this->boundary[2],
+ $bodyCharSet,
+ static::CONTENT_TYPE_TEXT_HTML,
+ $bodyEncoding
+ );
+ $body .= $this->encodeString($this->Body, $bodyEncoding);
+ $body .= static::$LE;
+ $body .= $this->attachAll('inline', $this->boundary[2]);
+ $body .= static::$LE;
+ $body .= $this->endBoundary($this->boundary[1]);
+ break;
+ case 'alt_attach':
+ $body .= $mimepre;
+ $body .= $this->textLine('--' . $this->boundary[1]);
+ $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_ALTERNATIVE . ';');
+ $body .= $this->textLine(' boundary="' . $this->boundary[2] . '"');
+ $body .= static::$LE;
+ $body .= $this->getBoundary(
+ $this->boundary[2],
+ $altBodyCharSet,
+ static::CONTENT_TYPE_PLAINTEXT,
+ $altBodyEncoding
+ );
+ $body .= $this->encodeString($this->AltBody, $altBodyEncoding);
+ $body .= static::$LE;
+ $body .= $this->getBoundary(
+ $this->boundary[2],
+ $bodyCharSet,
+ static::CONTENT_TYPE_TEXT_HTML,
+ $bodyEncoding
+ );
+ $body .= $this->encodeString($this->Body, $bodyEncoding);
+ $body .= static::$LE;
+ if (!empty($this->Ical)) {
+ $method = static::ICAL_METHOD_REQUEST;
+ foreach (static::$IcalMethods as $imethod) {
+ if (stripos($this->Ical, 'METHOD:' . $imethod) !== false) {
+ $method = $imethod;
+ break;
+ }
+ }
+ $body .= $this->getBoundary(
+ $this->boundary[2],
+ '',
+ static::CONTENT_TYPE_TEXT_CALENDAR . '; method=' . $method,
+ ''
+ );
+ $body .= $this->encodeString($this->Ical, $this->Encoding);
+ }
+ $body .= $this->endBoundary($this->boundary[2]);
+ $body .= static::$LE;
+ $body .= $this->attachAll('attachment', $this->boundary[1]);
+ break;
+ case 'alt_inline_attach':
+ $body .= $mimepre;
+ $body .= $this->textLine('--' . $this->boundary[1]);
+ $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_ALTERNATIVE . ';');
+ $body .= $this->textLine(' boundary="' . $this->boundary[2] . '"');
+ $body .= static::$LE;
+ $body .= $this->getBoundary(
+ $this->boundary[2],
+ $altBodyCharSet,
+ static::CONTENT_TYPE_PLAINTEXT,
+ $altBodyEncoding
+ );
+ $body .= $this->encodeString($this->AltBody, $altBodyEncoding);
+ $body .= static::$LE;
+ $body .= $this->textLine('--' . $this->boundary[2]);
+ $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_RELATED . ';');
+ $body .= $this->textLine(' boundary="' . $this->boundary[3] . '";');
+ $body .= $this->textLine(' type="' . static::CONTENT_TYPE_TEXT_HTML . '"');
+ $body .= static::$LE;
+ $body .= $this->getBoundary(
+ $this->boundary[3],
+ $bodyCharSet,
+ static::CONTENT_TYPE_TEXT_HTML,
+ $bodyEncoding
+ );
+ $body .= $this->encodeString($this->Body, $bodyEncoding);
+ $body .= static::$LE;
+ $body .= $this->attachAll('inline', $this->boundary[3]);
+ $body .= static::$LE;
+ $body .= $this->endBoundary($this->boundary[2]);
+ $body .= static::$LE;
+ $body .= $this->attachAll('attachment', $this->boundary[1]);
+ break;
+ default:
+ // Catch case 'plain' and case '', applies to simple `text/plain` and `text/html` body content types
+ //Reset the `Encoding` property in case we changed it for line length reasons
+ $this->Encoding = $bodyEncoding;
+ $body .= $this->encodeString($this->Body, $this->Encoding);
+ break;
+ }
+
+ if ($this->isError()) {
+ $body = '';
+ if ($this->exceptions) {
+ throw new Exception($this->lang('empty_message'), self::STOP_CRITICAL);
+ }
+ } elseif ($this->sign_key_file) {
+ try {
+ if (!defined('PKCS7_TEXT')) {
+ throw new Exception($this->lang('extension_missing') . 'openssl');
+ }
+
+ $file = tempnam(sys_get_temp_dir(), 'srcsign');
+ $signed = tempnam(sys_get_temp_dir(), 'mailsign');
+ file_put_contents($file, $body);
+
+ //Workaround for PHP bug https://bugs.php.net/bug.php?id=69197
+ if (empty($this->sign_extracerts_file)) {
+ $sign = @openssl_pkcs7_sign(
+ $file,
+ $signed,
+ 'file://' . realpath($this->sign_cert_file),
+ ['file://' . realpath($this->sign_key_file), $this->sign_key_pass],
+ []
+ );
+ } else {
+ $sign = @openssl_pkcs7_sign(
+ $file,
+ $signed,
+ 'file://' . realpath($this->sign_cert_file),
+ ['file://' . realpath($this->sign_key_file), $this->sign_key_pass],
+ [],
+ PKCS7_DETACHED,
+ $this->sign_extracerts_file
+ );
+ }
+
+ @unlink($file);
+ if ($sign) {
+ $body = file_get_contents($signed);
+ @unlink($signed);
+ //The message returned by openssl contains both headers and body, so need to split them up
+ $parts = explode("\n\n", $body, 2);
+ $this->MIMEHeader .= $parts[0] . static::$LE . static::$LE;
+ $body = $parts[1];
+ } else {
+ @unlink($signed);
+ throw new Exception($this->lang('signing') . openssl_error_string());
+ }
+ } catch (Exception $exc) {
+ $body = '';
+ if ($this->exceptions) {
+ throw $exc;
+ }
+ }
+ }
+
+ return $body;
+ }
+
+ /**
+ * Return the start of a message boundary.
+ *
+ * @param string $boundary
+ * @param string $charSet
+ * @param string $contentType
+ * @param string $encoding
+ *
+ * @return string
+ */
+ protected function getBoundary($boundary, $charSet, $contentType, $encoding)
+ {
+ $result = '';
+ if ('' === $charSet) {
+ $charSet = $this->CharSet;
+ }
+ if ('' === $contentType) {
+ $contentType = $this->ContentType;
+ }
+ if ('' === $encoding) {
+ $encoding = $this->Encoding;
+ }
+ $result .= $this->textLine('--' . $boundary);
+ $result .= sprintf('Content-Type: %s; charset=%s', $contentType, $charSet);
+ $result .= static::$LE;
+ // RFC1341 part 5 says 7bit is assumed if not specified
+ if (static::ENCODING_7BIT !== $encoding) {
+ $result .= $this->headerLine('Content-Transfer-Encoding', $encoding);
+ }
+ $result .= static::$LE;
+
+ return $result;
+ }
+
+ /**
+ * Return the end of a message boundary.
+ *
+ * @param string $boundary
+ *
+ * @return string
+ */
+ protected function endBoundary($boundary)
+ {
+ return static::$LE . '--' . $boundary . '--' . static::$LE;
+ }
+
+ /**
+ * Set the message type.
+ * PHPMailer only supports some preset message types, not arbitrary MIME structures.
+ */
+ protected function setMessageType()
+ {
+ $type = [];
+ if ($this->alternativeExists()) {
+ $type[] = 'alt';
+ }
+ if ($this->inlineImageExists()) {
+ $type[] = 'inline';
+ }
+ if ($this->attachmentExists()) {
+ $type[] = 'attach';
+ }
+ $this->message_type = implode('_', $type);
+ if ('' === $this->message_type) {
+ //The 'plain' message_type refers to the message having a single body element, not that it is plain-text
+ $this->message_type = 'plain';
+ }
+ }
+
+ /**
+ * Format a header line.
+ *
+ * @param string $name
+ * @param string|int $value
+ *
+ * @return string
+ */
+ public function headerLine($name, $value)
+ {
+ return $name . ': ' . $value . static::$LE;
+ }
+
+ /**
+ * Return a formatted mail line.
+ *
+ * @param string $value
+ *
+ * @return string
+ */
+ public function textLine($value)
+ {
+ return $value . static::$LE;
+ }
+
+ /**
+ * Add an attachment from a path on the filesystem.
+ * Never use a user-supplied path to a file!
+ * Returns false if the file could not be found or read.
+ * Explicitly *does not* support passing URLs; PHPMailer is not an HTTP client.
+ * If you need to do that, fetch the resource yourself and pass it in via a local file or string.
+ *
+ * @param string $path Path to the attachment
+ * @param string $name Overrides the attachment name
+ * @param string $encoding File encoding (see $Encoding)
+ * @param string $type File extension (MIME) type
+ * @param string $disposition Disposition to use
+ *
+ * @throws Exception
+ *
+ * @return bool
+ */
+ public function addAttachment(
+ $path,
+ $name = '',
+ $encoding = self::ENCODING_BASE64,
+ $type = '',
+ $disposition = 'attachment'
+ ) {
+ try {
+ if (!static::isPermittedPath($path) || !@is_file($path) || !is_readable($path)) {
+ throw new Exception($this->lang('file_access') . $path, self::STOP_CONTINUE);
+ }
+
+ // If a MIME type is not specified, try to work it out from the file name
+ if ('' === $type) {
+ $type = static::filenameToType($path);
+ }
+
+ $filename = (string) static::mb_pathinfo($path, PATHINFO_BASENAME);
+ if ('' === $name) {
+ $name = $filename;
+ }
+
+ if (!$this->validateEncoding($encoding)) {
+ throw new Exception($this->lang('encoding') . $encoding);
+ }
+
+ $this->attachment[] = [
+ 0 => $path,
+ 1 => $filename,
+ 2 => $name,
+ 3 => $encoding,
+ 4 => $type,
+ 5 => false, // isStringAttachment
+ 6 => $disposition,
+ 7 => $name,
+ ];
+ } catch (Exception $exc) {
+ $this->setError($exc->getMessage());
+ $this->edebug($exc->getMessage());
+ if ($this->exceptions) {
+ throw $exc;
+ }
+
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Return the array of attachments.
+ *
+ * @return array
+ */
+ public function getAttachments()
+ {
+ return $this->attachment;
+ }
+
+ /**
+ * Attach all file, string, and binary attachments to the message.
+ * Returns an empty string on failure.
+ *
+ * @param string $disposition_type
+ * @param string $boundary
+ *
+ * @throws Exception
+ *
+ * @return string
+ */
+ protected function attachAll($disposition_type, $boundary)
+ {
+ // Return text of body
+ $mime = [];
+ $cidUniq = [];
+ $incl = [];
+
+ // Add all attachments
+ foreach ($this->attachment as $attachment) {
+ // Check if it is a valid disposition_filter
+ if ($attachment[6] === $disposition_type) {
+ // Check for string attachment
+ $string = '';
+ $path = '';
+ $bString = $attachment[5];
+ if ($bString) {
+ $string = $attachment[0];
+ } else {
+ $path = $attachment[0];
+ }
+
+ $inclhash = hash('sha256', serialize($attachment));
+ if (in_array($inclhash, $incl, true)) {
+ continue;
+ }
+ $incl[] = $inclhash;
+ $name = $attachment[2];
+ $encoding = $attachment[3];
+ $type = $attachment[4];
+ $disposition = $attachment[6];
+ $cid = $attachment[7];
+ if ('inline' === $disposition && array_key_exists($cid, $cidUniq)) {
+ continue;
+ }
+ $cidUniq[$cid] = true;
+
+ $mime[] = sprintf('--%s%s', $boundary, static::$LE);
+ //Only include a filename property if we have one
+ if (!empty($name)) {
+ $mime[] = sprintf(
+ 'Content-Type: %s; name=%s%s',
+ $type,
+ static::quotedString($this->encodeHeader($this->secureHeader($name))),
+ static::$LE
+ );
+ } else {
+ $mime[] = sprintf(
+ 'Content-Type: %s%s',
+ $type,
+ static::$LE
+ );
+ }
+ // RFC1341 part 5 says 7bit is assumed if not specified
+ if (static::ENCODING_7BIT !== $encoding) {
+ $mime[] = sprintf('Content-Transfer-Encoding: %s%s', $encoding, static::$LE);
+ }
+
+ //Only set Content-IDs on inline attachments
+ if ((string) $cid !== '' && $disposition === 'inline') {
+ $mime[] = 'Content-ID: <' . $this->encodeHeader($this->secureHeader($cid)) . '>' . static::$LE;
+ }
+
+ // Allow for bypassing the Content-Disposition header
+ if (!empty($disposition)) {
+ $encoded_name = $this->encodeHeader($this->secureHeader($name));
+ if (!empty($encoded_name)) {
+ $mime[] = sprintf(
+ 'Content-Disposition: %s; filename=%s%s',
+ $disposition,
+ static::quotedString($encoded_name),
+ static::$LE . static::$LE
+ );
+ } else {
+ $mime[] = sprintf(
+ 'Content-Disposition: %s%s',
+ $disposition,
+ static::$LE . static::$LE
+ );
+ }
+ } else {
+ $mime[] = static::$LE;
+ }
+
+ // Encode as string attachment
+ if ($bString) {
+ $mime[] = $this->encodeString($string, $encoding);
+ } else {
+ $mime[] = $this->encodeFile($path, $encoding);
+ }
+ if ($this->isError()) {
+ return '';
+ }
+ $mime[] = static::$LE;
+ }
+ }
+
+ $mime[] = sprintf('--%s--%s', $boundary, static::$LE);
+
+ return implode('', $mime);
+ }
+
+ /**
+ * Encode a file attachment in requested format.
+ * Returns an empty string on failure.
+ *
+ * @param string $path The full path to the file
+ * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable'
+ *
+ * @return string
+ */
+ protected function encodeFile($path, $encoding = self::ENCODING_BASE64)
+ {
+ try {
+ if (!static::isPermittedPath($path) || !file_exists($path) || !is_readable($path)) {
+ throw new Exception($this->lang('file_open') . $path, self::STOP_CONTINUE);
+ }
+ $file_buffer = file_get_contents($path);
+ if (false === $file_buffer) {
+ throw new Exception($this->lang('file_open') . $path, self::STOP_CONTINUE);
+ }
+ $file_buffer = $this->encodeString($file_buffer, $encoding);
+
+ return $file_buffer;
+ } catch (Exception $exc) {
+ $this->setError($exc->getMessage());
+ $this->edebug($exc->getMessage());
+ if ($this->exceptions) {
+ throw $exc;
+ }
+
+ return '';
+ }
+ }
+
+ /**
+ * Encode a string in requested format.
+ * Returns an empty string on failure.
+ *
+ * @param string $str The text to encode
+ * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable'
+ *
+ * @throws Exception
+ *
+ * @return string
+ */
+ public function encodeString($str, $encoding = self::ENCODING_BASE64)
+ {
+ $encoded = '';
+ switch (strtolower($encoding)) {
+ case static::ENCODING_BASE64:
+ $encoded = chunk_split(
+ base64_encode($str),
+ static::STD_LINE_LENGTH,
+ static::$LE
+ );
+ break;
+ case static::ENCODING_7BIT:
+ case static::ENCODING_8BIT:
+ $encoded = static::normalizeBreaks($str);
+ // Make sure it ends with a line break
+ if (substr($encoded, -(strlen(static::$LE))) !== static::$LE) {
+ $encoded .= static::$LE;
+ }
+ break;
+ case static::ENCODING_BINARY:
+ $encoded = $str;
+ break;
+ case static::ENCODING_QUOTED_PRINTABLE:
+ $encoded = $this->encodeQP($str);
+ break;
+ default:
+ $this->setError($this->lang('encoding') . $encoding);
+ if ($this->exceptions) {
+ throw new Exception($this->lang('encoding') . $encoding);
+ }
+ break;
+ }
+
+ return $encoded;
+ }
+
+ /**
+ * Encode a header value (not including its label) optimally.
+ * Picks shortest of Q, B, or none. Result includes folding if needed.
+ * See RFC822 definitions for phrase, comment and text positions.
+ *
+ * @param string $str The header value to encode
+ * @param string $position What context the string will be used in
+ *
+ * @return string
+ */
+ public function encodeHeader($str, $position = 'text')
+ {
+ $matchcount = 0;
+ switch (strtolower($position)) {
+ case 'phrase':
+ if (!preg_match('/[\200-\377]/', $str)) {
+ // Can't use addslashes as we don't know the value of magic_quotes_sybase
+ $encoded = addcslashes($str, "\0..\37\177\\\"");
+ if (($str === $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) {
+ return $encoded;
+ }
+
+ return "\"$encoded\"";
+ }
+ $matchcount = preg_match_all('/[^\040\041\043-\133\135-\176]/', $str, $matches);
+ break;
+ /* @noinspection PhpMissingBreakStatementInspection */
+ case 'comment':
+ $matchcount = preg_match_all('/[()"]/', $str, $matches);
+ //fallthrough
+ case 'text':
+ default:
+ $matchcount += preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches);
+ break;
+ }
+
+ if ($this->has8bitChars($str)) {
+ $charset = $this->CharSet;
+ } else {
+ $charset = static::CHARSET_ASCII;
+ }
+
+ // Q/B encoding adds 8 chars and the charset ("` =?<charset>?[QB]?<content>?=`").
+ $overhead = 8 + strlen($charset);
+
+ if ('mail' === $this->Mailer) {
+ $maxlen = static::MAIL_MAX_LINE_LENGTH - $overhead;
+ } else {
+ $maxlen = static::MAX_LINE_LENGTH - $overhead;
+ }
+
+ // Select the encoding that produces the shortest output and/or prevents corruption.
+ if ($matchcount > strlen($str) / 3) {
+ // More than 1/3 of the content needs encoding, use B-encode.
+ $encoding = 'B';
+ } elseif ($matchcount > 0) {
+ // Less than 1/3 of the content needs encoding, use Q-encode.
+ $encoding = 'Q';
+ } elseif (strlen($str) > $maxlen) {
+ // No encoding needed, but value exceeds max line length, use Q-encode to prevent corruption.
+ $encoding = 'Q';
+ } else {
+ // No reformatting needed
+ $encoding = false;
+ }
+
+ switch ($encoding) {
+ case 'B':
+ if ($this->hasMultiBytes($str)) {
+ // Use a custom function which correctly encodes and wraps long
+ // multibyte strings without breaking lines within a character
+ $encoded = $this->base64EncodeWrapMB($str, "\n");
+ } else {
+ $encoded = base64_encode($str);
+ $maxlen -= $maxlen % 4;
+ $encoded = trim(chunk_split($encoded, $maxlen, "\n"));
+ }
+ $encoded = preg_replace('/^(.*)$/m', ' =?' . $charset . "?$encoding?\\1?=", $encoded);
+ break;
+ case 'Q':
+ $encoded = $this->encodeQ($str, $position);
+ $encoded = $this->wrapText($encoded, $maxlen, true);
+ $encoded = str_replace('=' . static::$LE, "\n", trim($encoded));
+ $encoded = preg_replace('/^(.*)$/m', ' =?' . $charset . "?$encoding?\\1?=", $encoded);
+ break;
+ default:
+ return $str;
+ }
+
+ return trim(static::normalizeBreaks($encoded));
+ }
+
+ /**
+ * Check if a string contains multi-byte characters.
+ *
+ * @param string $str multi-byte text to wrap encode
+ *
+ * @return bool
+ */
+ public function hasMultiBytes($str)
+ {
+ if (function_exists('mb_strlen')) {
+ return strlen($str) > mb_strlen($str, $this->CharSet);
+ }
+
+ // Assume no multibytes (we can't handle without mbstring functions anyway)
+ return false;
+ }
+
+ /**
+ * Does a string contain any 8-bit chars (in any charset)?
+ *
+ * @param string $text
+ *
+ * @return bool
+ */
+ public function has8bitChars($text)
+ {
+ return (bool) preg_match('/[\x80-\xFF]/', $text);
+ }
+
+ /**
+ * Encode and wrap long multibyte strings for mail headers
+ * without breaking lines within a character.
+ * Adapted from a function by paravoid.
+ *
+ * @see http://www.php.net/manual/en/function.mb-encode-mimeheader.php#60283
+ *
+ * @param string $str multi-byte text to wrap encode
+ * @param string $linebreak string to use as linefeed/end-of-line
+ *
+ * @return string
+ */
+ public function base64EncodeWrapMB($str, $linebreak = null)
+ {
+ $start = '=?' . $this->CharSet . '?B?';
+ $end = '?=';
+ $encoded = '';
+ if (null === $linebreak) {
+ $linebreak = static::$LE;
+ }
+
+ $mb_length = mb_strlen($str, $this->CharSet);
+ // Each line must have length <= 75, including $start and $end
+ $length = 75 - strlen($start) - strlen($end);
+ // Average multi-byte ratio
+ $ratio = $mb_length / strlen($str);
+ // Base64 has a 4:3 ratio
+ $avgLength = floor($length * $ratio * .75);
+
+ $offset = 0;
+ for ($i = 0; $i < $mb_length; $i += $offset) {
+ $lookBack = 0;
+ do {
+ $offset = $avgLength - $lookBack;
+ $chunk = mb_substr($str, $i, $offset, $this->CharSet);
+ $chunk = base64_encode($chunk);
+ ++$lookBack;
+ } while (strlen($chunk) > $length);
+ $encoded .= $chunk . $linebreak;
+ }
+
+ // Chomp the last linefeed
+ return substr($encoded, 0, -strlen($linebreak));
+ }
+
+ /**
+ * Encode a string in quoted-printable format.
+ * According to RFC2045 section 6.7.
+ *
+ * @param string $string The text to encode
+ *
+ * @return string
+ */
+ public function encodeQP($string)
+ {
+ return static::normalizeBreaks(quoted_printable_encode($string));
+ }
+
+ /**
+ * Encode a string using Q encoding.
+ *
+ * @see http://tools.ietf.org/html/rfc2047#section-4.2
+ *
+ * @param string $str the text to encode
+ * @param string $position Where the text is going to be used, see the RFC for what that means
+ *
+ * @return string
+ */
+ public function encodeQ($str, $position = 'text')
+ {
+ // There should not be any EOL in the string
+ $pattern = '';
+ $encoded = str_replace(["\r", "\n"], '', $str);
+ switch (strtolower($position)) {
+ case 'phrase':
+ // RFC 2047 section 5.3
+ $pattern = '^A-Za-z0-9!*+\/ -';
+ break;
+ /*
+ * RFC 2047 section 5.2.
+ * Build $pattern without including delimiters and []
+ */
+ /* @noinspection PhpMissingBreakStatementInspection */
+ case 'comment':
+ $pattern = '\(\)"';
+ /* Intentional fall through */
+ case 'text':
+ default:
+ // RFC 2047 section 5.1
+ // Replace every high ascii, control, =, ? and _ characters
+ $pattern = '\000-\011\013\014\016-\037\075\077\137\177-\377' . $pattern;
+ break;
+ }
+ $matches = [];
+ if (preg_match_all("/[{$pattern}]/", $encoded, $matches)) {
+ // If the string contains an '=', make sure it's the first thing we replace
+ // so as to avoid double-encoding
+ $eqkey = array_search('=', $matches[0], true);
+ if (false !== $eqkey) {
+ unset($matches[0][$eqkey]);
+ array_unshift($matches[0], '=');
+ }
+ foreach (array_unique($matches[0]) as $char) {
+ $encoded = str_replace($char, '=' . sprintf('%02X', ord($char)), $encoded);
+ }
+ }
+ // Replace spaces with _ (more readable than =20)
+ // RFC 2047 section 4.2(2)
+ return str_replace(' ', '_', $encoded);
+ }
+
+ /**
+ * Add a string or binary attachment (non-filesystem).
+ * This method can be used to attach ascii or binary data,
+ * such as a BLOB record from a database.
+ *
+ * @param string $string String attachment data
+ * @param string $filename Name of the attachment
+ * @param string $encoding File encoding (see $Encoding)
+ * @param string $type File extension (MIME) type
+ * @param string $disposition Disposition to use
+ *
+ * @throws Exception
+ *
+ * @return bool True on successfully adding an attachment
+ */
+ public function addStringAttachment(
+ $string,
+ $filename,
+ $encoding = self::ENCODING_BASE64,
+ $type = '',
+ $disposition = 'attachment'
+ ) {
+ try {
+ // If a MIME type is not specified, try to work it out from the file name
+ if ('' === $type) {
+ $type = static::filenameToType($filename);
+ }
+
+ if (!$this->validateEncoding($encoding)) {
+ throw new Exception($this->lang('encoding') . $encoding);
+ }
+
+ // Append to $attachment array
+ $this->attachment[] = [
+ 0 => $string,
+ 1 => $filename,
+ 2 => static::mb_pathinfo($filename, PATHINFO_BASENAME),
+ 3 => $encoding,
+ 4 => $type,
+ 5 => true, // isStringAttachment
+ 6 => $disposition,
+ 7 => 0,
+ ];
+ } catch (Exception $exc) {
+ $this->setError($exc->getMessage());
+ $this->edebug($exc->getMessage());
+ if ($this->exceptions) {
+ throw $exc;
+ }
+
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Add an embedded (inline) attachment from a file.
+ * This can include images, sounds, and just about any other document type.
+ * These differ from 'regular' attachments in that they are intended to be
+ * displayed inline with the message, not just attached for download.
+ * This is used in HTML messages that embed the images
+ * the HTML refers to using the $cid value.
+ * Never use a user-supplied path to a file!
+ *
+ * @param string $path Path to the attachment
+ * @param string $cid Content ID of the attachment; Use this to reference
+ * the content when using an embedded image in HTML
+ * @param string $name Overrides the attachment name
+ * @param string $encoding File encoding (see $Encoding)
+ * @param string $type File MIME type
+ * @param string $disposition Disposition to use
+ *
+ * @throws Exception
+ *
+ * @return bool True on successfully adding an attachment
+ */
+ public function addEmbeddedImage(
+ $path,
+ $cid,
+ $name = '',
+ $encoding = self::ENCODING_BASE64,
+ $type = '',
+ $disposition = 'inline'
+ ) {
+ try {
+ if (!static::isPermittedPath($path) || !@is_file($path) || !is_readable($path)) {
+ throw new Exception($this->lang('file_access') . $path, self::STOP_CONTINUE);
+ }
+
+ // If a MIME type is not specified, try to work it out from the file name
+ if ('' === $type) {
+ $type = static::filenameToType($path);
+ }
+
+ if (!$this->validateEncoding($encoding)) {
+ throw new Exception($this->lang('encoding') . $encoding);
+ }
+
+ $filename = (string) static::mb_pathinfo($path, PATHINFO_BASENAME);
+ if ('' === $name) {
+ $name = $filename;
+ }
+
+ // Append to $attachment array
+ $this->attachment[] = [
+ 0 => $path,
+ 1 => $filename,
+ 2 => $name,
+ 3 => $encoding,
+ 4 => $type,
+ 5 => false, // isStringAttachment
+ 6 => $disposition,
+ 7 => $cid,
+ ];
+ } catch (Exception $exc) {
+ $this->setError($exc->getMessage());
+ $this->edebug($exc->getMessage());
+ if ($this->exceptions) {
+ throw $exc;
+ }
+
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Add an embedded stringified attachment.
+ * This can include images, sounds, and just about any other document type.
+ * If your filename doesn't contain an extension, be sure to set the $type to an appropriate MIME type.
+ *
+ * @param string $string The attachment binary data
+ * @param string $cid Content ID of the attachment; Use this to reference
+ * the content when using an embedded image in HTML
+ * @param string $name A filename for the attachment. If this contains an extension,
+ * PHPMailer will attempt to set a MIME type for the attachment.
+ * For example 'file.jpg' would get an 'image/jpeg' MIME type.
+ * @param string $encoding File encoding (see $Encoding), defaults to 'base64'
+ * @param string $type MIME type - will be used in preference to any automatically derived type
+ * @param string $disposition Disposition to use
+ *
+ * @throws Exception
+ *
+ * @return bool True on successfully adding an attachment
+ */
+ public function addStringEmbeddedImage(
+ $string,
+ $cid,
+ $name = '',
+ $encoding = self::ENCODING_BASE64,
+ $type = '',
+ $disposition = 'inline'
+ ) {
+ try {
+ // If a MIME type is not specified, try to work it out from the name
+ if ('' === $type && !empty($name)) {
+ $type = static::filenameToType($name);
+ }
+
+ if (!$this->validateEncoding($encoding)) {
+ throw new Exception($this->lang('encoding') . $encoding);
+ }
+
+ // Append to $attachment array
+ $this->attachment[] = [
+ 0 => $string,
+ 1 => $name,
+ 2 => $name,
+ 3 => $encoding,
+ 4 => $type,
+ 5 => true, // isStringAttachment
+ 6 => $disposition,
+ 7 => $cid,
+ ];
+ } catch (Exception $exc) {
+ $this->setError($exc->getMessage());
+ $this->edebug($exc->getMessage());
+ if ($this->exceptions) {
+ throw $exc;
+ }
+
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Validate encodings.
+ *
+ * @param string $encoding
+ *
+ * @return bool
+ */
+ protected function validateEncoding($encoding)
+ {
+ return in_array(
+ $encoding,
+ [
+ self::ENCODING_7BIT,
+ self::ENCODING_QUOTED_PRINTABLE,
+ self::ENCODING_BASE64,
+ self::ENCODING_8BIT,
+ self::ENCODING_BINARY,
+ ],
+ true
+ );
+ }
+
+ /**
+ * Check if an embedded attachment is present with this cid.
+ *
+ * @param string $cid
+ *
+ * @return bool
+ */
+ protected function cidExists($cid)
+ {
+ foreach ($this->attachment as $attachment) {
+ if ('inline' === $attachment[6] && $cid === $attachment[7]) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Check if an inline attachment is present.
+ *
+ * @return bool
+ */
+ public function inlineImageExists()
+ {
+ foreach ($this->attachment as $attachment) {
+ if ('inline' === $attachment[6]) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Check if an attachment (non-inline) is present.
+ *
+ * @return bool
+ */
+ public function attachmentExists()
+ {
+ foreach ($this->attachment as $attachment) {
+ if ('attachment' === $attachment[6]) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Check if this message has an alternative body set.
+ *
+ * @return bool
+ */
+ public function alternativeExists()
+ {
+ return !empty($this->AltBody);
+ }
+
+ /**
+ * Clear queued addresses of given kind.
+ *
+ * @param string $kind 'to', 'cc', or 'bcc'
+ */
+ public function clearQueuedAddresses($kind)
+ {
+ $this->RecipientsQueue = array_filter(
+ $this->RecipientsQueue,
+ static function ($params) use ($kind) {
+ return $params[0] !== $kind;
+ }
+ );
+ }
+
+ /**
+ * Clear all To recipients.
+ */
+ public function clearAddresses()
+ {
+ foreach ($this->to as $to) {
+ unset($this->all_recipients[strtolower($to[0])]);
+ }
+ $this->to = [];
+ $this->clearQueuedAddresses('to');
+ }
+
+ /**
+ * Clear all CC recipients.
+ */
+ public function clearCCs()
+ {
+ foreach ($this->cc as $cc) {
+ unset($this->all_recipients[strtolower($cc[0])]);
+ }
+ $this->cc = [];
+ $this->clearQueuedAddresses('cc');
+ }
+
+ /**
+ * Clear all BCC recipients.
+ */
+ public function clearBCCs()
+ {
+ foreach ($this->bcc as $bcc) {
+ unset($this->all_recipients[strtolower($bcc[0])]);
+ }
+ $this->bcc = [];
+ $this->clearQueuedAddresses('bcc');
+ }
+
+ /**
+ * Clear all ReplyTo recipients.
+ */
+ public function clearReplyTos()
+ {
+ $this->ReplyTo = [];
+ $this->ReplyToQueue = [];
+ }
+
+ /**
+ * Clear all recipient types.
+ */
+ public function clearAllRecipients()
+ {
+ $this->to = [];
+ $this->cc = [];
+ $this->bcc = [];
+ $this->all_recipients = [];
+ $this->RecipientsQueue = [];
+ }
+
+ /**
+ * Clear all filesystem, string, and binary attachments.
+ */
+ public function clearAttachments()
+ {
+ $this->attachment = [];
+ }
+
+ /**
+ * Clear all custom headers.
+ */
+ public function clearCustomHeaders()
+ {
+ $this->CustomHeader = [];
+ }
+
+ /**
+ * Add an error message to the error container.
+ *
+ * @param string $msg
+ */
+ protected function setError($msg)
+ {
+ ++$this->error_count;
+ if ('smtp' === $this->Mailer && null !== $this->smtp) {
+ $lasterror = $this->smtp->getError();
+ if (!empty($lasterror['error'])) {
+ $msg .= $this->lang('smtp_error') . $lasterror['error'];
+ if (!empty($lasterror['detail'])) {
+ $msg .= ' Detail: ' . $lasterror['detail'];
+ }
+ if (!empty($lasterror['smtp_code'])) {
+ $msg .= ' SMTP code: ' . $lasterror['smtp_code'];
+ }
+ if (!empty($lasterror['smtp_code_ex'])) {
+ $msg .= ' Additional SMTP info: ' . $lasterror['smtp_code_ex'];
+ }
+ }
+ }
+ $this->ErrorInfo = $msg;
+ }
+
+ /**
+ * Return an RFC 822 formatted date.
+ *
+ * @return string
+ */
+ public static function rfcDate()
+ {
+ // Set the time zone to whatever the default is to avoid 500 errors
+ // Will default to UTC if it's not set properly in php.ini
+ date_default_timezone_set(@date_default_timezone_get());
+
+ return date('D, j M Y H:i:s O');
+ }
+
+ /**
+ * Get the server hostname.
+ * Returns 'localhost.localdomain' if unknown.
+ *
+ * @return string
+ */
+ protected function serverHostname()
+ {
+ $result = '';
+ if (!empty($this->Hostname)) {
+ $result = $this->Hostname;
+ } elseif (isset($_SERVER) && array_key_exists('SERVER_NAME', $_SERVER)) {
+ $result = $_SERVER['SERVER_NAME'];
+ } elseif (function_exists('gethostname') && gethostname() !== false) {
+ $result = gethostname();
+ } elseif (php_uname('n') !== false) {
+ $result = php_uname('n');
+ }
+ if (!static::isValidHost($result)) {
+ return 'localhost.localdomain';
+ }
+
+ return $result;
+ }
+
+ /**
+ * Validate whether a string contains a valid value to use as a hostname or IP address.
+ * IPv6 addresses must include [], e.g. `[::1]`, not just `::1`.
+ *
+ * @param string $host The host name or IP address to check
+ *
+ * @return bool
+ */
+ public static function isValidHost($host)
+ {
+ //Simple syntax limits
+ if (empty($host)
+ || !is_string($host)
+ || strlen($host) > 256
+ || !preg_match('/^([a-zA-Z\d.-]*|\[[a-fA-F\d:]+])$/', $host)
+ ) {
+ return false;
+ }
+ //Looks like a bracketed IPv6 address
+ if (strlen($host) > 2 && substr($host, 0, 1) === '[' && substr($host, -1, 1) === ']') {
+ return filter_var(substr($host, 1, -1), FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) !== false;
+ }
+ //If removing all the dots results in a numeric string, it must be an IPv4 address.
+ //Need to check this first because otherwise things like `999.0.0.0` are considered valid host names
+ if (is_numeric(str_replace('.', '', $host))) {
+ //Is it a valid IPv4 address?
+ return filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false;
+ }
+ if (filter_var('http://' . $host, FILTER_VALIDATE_URL) !== false) {
+ //Is it a syntactically valid hostname?
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Get an error message in the current language.
+ *
+ * @param string $key
+ *
+ * @return string
+ */
+ protected function lang($key)
+ {
+ if (count($this->language) < 1) {
+ $this->setLanguage(); // set the default language
+ }
+
+ if (array_key_exists($key, $this->language)) {
+ if ('smtp_connect_failed' === $key) {
+ //Include a link to troubleshooting docs on SMTP connection failure
+ //this is by far the biggest cause of support questions
+ //but it's usually not PHPMailer's fault.
+ return $this->language[$key] . ' https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting';
+ }
+
+ return $this->language[$key];
+ }
+
+ //Return the key as a fallback
+ return $key;
+ }
+
+ /**
+ * Check if an error occurred.
+ *
+ * @return bool True if an error did occur
+ */
+ public function isError()
+ {
+ return $this->error_count > 0;
+ }
+
+ /**
+ * Add a custom header.
+ * $name value can be overloaded to contain
+ * both header name and value (name:value).
+ *
+ * @param string $name Custom header name
+ * @param string|null $value Header value
+ *
+ * @throws Exception
+ */
+ public function addCustomHeader($name, $value = null)
+ {
+ if (null === $value && strpos($name, ':') !== false) {
+ // Value passed in as name:value
+ list($name, $value) = explode(':', $name, 2);
+ }
+ $name = trim($name);
+ $value = trim($value);
+ //Ensure name is not empty, and that neither name nor value contain line breaks
+ if (empty($name) || strpbrk($name . $value, "\r\n") !== false) {
+ if ($this->exceptions) {
+ throw new Exception('Invalid header name or value');
+ }
+
+ return false;
+ }
+ $this->CustomHeader[] = [$name, $value];
+
+ return true;
+ }
+
+ /**
+ * Returns all custom headers.
+ *
+ * @return array
+ */
+ public function getCustomHeaders()
+ {
+ return $this->CustomHeader;
+ }
+
+ /**
+ * Create a message body from an HTML string.
+ * Automatically inlines images and creates a plain-text version by converting the HTML,
+ * overwriting any existing values in Body and AltBody.
+ * Do not source $message content from user input!
+ * $basedir is prepended when handling relative URLs, e.g. <img src="/images/a.png"> and must not be empty
+ * will look for an image file in $basedir/images/a.png and convert it to inline.
+ * If you don't provide a $basedir, relative paths will be left untouched (and thus probably break in email)
+ * Converts data-uri images into embedded attachments.
+ * If you don't want to apply these transformations to your HTML, just set Body and AltBody directly.
+ *
+ * @param string $message HTML message string
+ * @param string $basedir Absolute path to a base directory to prepend to relative paths to images
+ * @param bool|callable $advanced Whether to use the internal HTML to text converter
+ * or your own custom converter @return string $message The transformed message Body
+ *
+ * @throws Exception
+ *
+ * @see PHPMailer::html2text()
+ */
+ public function msgHTML($message, $basedir = '', $advanced = false)
+ {
+ preg_match_all('/(?<!-)(src|background)=["\'](.*)["\']/Ui', $message, $images);
+ if (array_key_exists(2, $images)) {
+ if (strlen($basedir) > 1 && '/' !== substr($basedir, -1)) {
+ // Ensure $basedir has a trailing /
+ $basedir .= '/';
+ }
+ foreach ($images[2] as $imgindex => $url) {
+ // Convert data URIs into embedded images
+ //e.g. "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="
+ $match = [];
+ if (preg_match('#^data:(image/(?:jpe?g|gif|png));?(base64)?,(.+)#', $url, $match)) {
+ if (count($match) === 4 && static::ENCODING_BASE64 === $match[2]) {
+ $data = base64_decode($match[3]);
+ } elseif ('' === $match[2]) {
+ $data = rawurldecode($match[3]);
+ } else {
+ //Not recognised so leave it alone
+ continue;
+ }
+ //Hash the decoded data, not the URL, so that the same data-URI image used in multiple places
+ //will only be embedded once, even if it used a different encoding
+ $cid = substr(hash('sha256', $data), 0, 32) . '@phpmailer.0'; // RFC2392 S 2
+
+ if (!$this->cidExists($cid)) {
+ $this->addStringEmbeddedImage(
+ $data,
+ $cid,
+ 'embed' . $imgindex,
+ static::ENCODING_BASE64,
+ $match[1]
+ );
+ }
+ $message = str_replace(
+ $images[0][$imgindex],
+ $images[1][$imgindex] . '="cid:' . $cid . '"',
+ $message
+ );
+ continue;
+ }
+ if (// Only process relative URLs if a basedir is provided (i.e. no absolute local paths)
+ !empty($basedir)
+ // Ignore URLs containing parent dir traversal (..)
+ && (strpos($url, '..') === false)
+ // Do not change urls that are already inline images
+ && 0 !== strpos($url, 'cid:')
+ // Do not change absolute URLs, including anonymous protocol
+ && !preg_match('#^[a-z][a-z0-9+.-]*:?//#i', $url)
+ ) {
+ $filename = static::mb_pathinfo($url, PATHINFO_BASENAME);
+ $directory = dirname($url);
+ if ('.' === $directory) {
+ $directory = '';
+ }
+ // RFC2392 S 2
+ $cid = substr(hash('sha256', $url), 0, 32) . '@phpmailer.0';
+ if (strlen($basedir) > 1 && '/' !== substr($basedir, -1)) {
+ $basedir .= '/';
+ }
+ if (strlen($directory) > 1 && '/' !== substr($directory, -1)) {
+ $directory .= '/';
+ }
+ if ($this->addEmbeddedImage(
+ $basedir . $directory . $filename,
+ $cid,
+ $filename,
+ static::ENCODING_BASE64,
+ static::_mime_types((string) static::mb_pathinfo($filename, PATHINFO_EXTENSION))
+ )
+ ) {
+ $message = preg_replace(
+ '/' . $images[1][$imgindex] . '=["\']' . preg_quote($url, '/') . '["\']/Ui',
+ $images[1][$imgindex] . '="cid:' . $cid . '"',
+ $message
+ );
+ }
+ }
+ }
+ }
+ $this->isHTML();
+ // Convert all message body line breaks to LE, makes quoted-printable encoding work much better
+ $this->Body = static::normalizeBreaks($message);
+ $this->AltBody = static::normalizeBreaks($this->html2text($message, $advanced));
+ if (!$this->alternativeExists()) {
+ $this->AltBody = 'This is an HTML-only message. To view it, activate HTML in your email application.'
+ . static::$LE;
+ }
+
+ return $this->Body;
+ }
+
+ /**
+ * Convert an HTML string into plain text.
+ * This is used by msgHTML().
+ * Note - older versions of this function used a bundled advanced converter
+ * which was removed for license reasons in #232.
+ * Example usage:
+ *
+ * ```php
+ * // Use default conversion
+ * $plain = $mail->html2text($html);
+ * // Use your own custom converter
+ * $plain = $mail->html2text($html, function($html) {
+ * $converter = new MyHtml2text($html);
+ * return $converter->get_text();
+ * });
+ * ```
+ *
+ * @param string $html The HTML text to convert
+ * @param bool|callable $advanced Any boolean value to use the internal converter,
+ * or provide your own callable for custom conversion
+ *
+ * @return string
+ */
+ public function html2text($html, $advanced = false)
+ {
+ if (is_callable($advanced)) {
+ return $advanced($html);
+ }
+
+ return html_entity_decode(
+ trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/si', '', $html))),
+ ENT_QUOTES,
+ $this->CharSet
+ );
+ }
+
+ /**
+ * Get the MIME type for a file extension.
+ *
+ * @param string $ext File extension
+ *
+ * @return string MIME type of file
+ */
+ public static function _mime_types($ext = '')
+ {
+ $mimes = [
+ 'xl' => 'application/excel',
+ 'js' => 'application/javascript',
+ 'hqx' => 'application/mac-binhex40',
+ 'cpt' => 'application/mac-compactpro',
+ 'bin' => 'application/macbinary',
+ 'doc' => 'application/msword',
+ 'word' => 'application/msword',
+ 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
+ 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',
+ 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
+ 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
+ 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide',
+ 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
+ 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
+ 'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12',
+ 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
+ 'class' => 'application/octet-stream',
+ 'dll' => 'application/octet-stream',
+ 'dms' => 'application/octet-stream',
+ 'exe' => 'application/octet-stream',
+ 'lha' => 'application/octet-stream',
+ 'lzh' => 'application/octet-stream',
+ 'psd' => 'application/octet-stream',
+ 'sea' => 'application/octet-stream',
+ 'so' => 'application/octet-stream',
+ 'oda' => 'application/oda',
+ 'pdf' => 'application/pdf',
+ 'ai' => 'application/postscript',
+ 'eps' => 'application/postscript',
+ 'ps' => 'application/postscript',
+ 'smi' => 'application/smil',
+ 'smil' => 'application/smil',
+ 'mif' => 'application/vnd.mif',
+ 'xls' => 'application/vnd.ms-excel',
+ 'ppt' => 'application/vnd.ms-powerpoint',
+ 'wbxml' => 'application/vnd.wap.wbxml',
+ 'wmlc' => 'application/vnd.wap.wmlc',
+ 'dcr' => 'application/x-director',
+ 'dir' => 'application/x-director',
+ 'dxr' => 'application/x-director',
+ 'dvi' => 'application/x-dvi',
+ 'gtar' => 'application/x-gtar',
+ 'php3' => 'application/x-httpd-php',
+ 'php4' => 'application/x-httpd-php',
+ 'php' => 'application/x-httpd-php',
+ 'phtml' => 'application/x-httpd-php',
+ 'phps' => 'application/x-httpd-php-source',
+ 'swf' => 'application/x-shockwave-flash',
+ 'sit' => 'application/x-stuffit',
+ 'tar' => 'application/x-tar',
+ 'tgz' => 'application/x-tar',
+ 'xht' => 'application/xhtml+xml',
+ 'xhtml' => 'application/xhtml+xml',
+ 'zip' => 'application/zip',
+ 'mid' => 'audio/midi',
+ 'midi' => 'audio/midi',
+ 'mp2' => 'audio/mpeg',
+ 'mp3' => 'audio/mpeg',
+ 'm4a' => 'audio/mp4',
+ 'mpga' => 'audio/mpeg',
+ 'aif' => 'audio/x-aiff',
+ 'aifc' => 'audio/x-aiff',
+ 'aiff' => 'audio/x-aiff',
+ 'ram' => 'audio/x-pn-realaudio',
+ 'rm' => 'audio/x-pn-realaudio',
+ 'rpm' => 'audio/x-pn-realaudio-plugin',
+ 'ra' => 'audio/x-realaudio',
+ 'wav' => 'audio/x-wav',
+ 'mka' => 'audio/x-matroska',
+ 'bmp' => 'image/bmp',
+ 'gif' => 'image/gif',
+ 'jpeg' => 'image/jpeg',
+ 'jpe' => 'image/jpeg',
+ 'jpg' => 'image/jpeg',
+ 'png' => 'image/png',
+ 'tiff' => 'image/tiff',
+ 'tif' => 'image/tiff',
+ 'webp' => 'image/webp',
+ 'heif' => 'image/heif',
+ 'heifs' => 'image/heif-sequence',
+ 'heic' => 'image/heic',
+ 'heics' => 'image/heic-sequence',
+ 'eml' => 'message/rfc822',
+ 'css' => 'text/css',
+ 'html' => 'text/html',
+ 'htm' => 'text/html',
+ 'shtml' => 'text/html',
+ 'log' => 'text/plain',
+ 'text' => 'text/plain',
+ 'txt' => 'text/plain',
+ 'rtx' => 'text/richtext',
+ 'rtf' => 'text/rtf',
+ 'vcf' => 'text/vcard',
+ 'vcard' => 'text/vcard',
+ 'ics' => 'text/calendar',
+ 'xml' => 'text/xml',
+ 'xsl' => 'text/xml',
+ 'wmv' => 'video/x-ms-wmv',
+ 'mpeg' => 'video/mpeg',
+ 'mpe' => 'video/mpeg',
+ 'mpg' => 'video/mpeg',
+ 'mp4' => 'video/mp4',
+ 'm4v' => 'video/mp4',
+ 'mov' => 'video/quicktime',
+ 'qt' => 'video/quicktime',
+ 'rv' => 'video/vnd.rn-realvideo',
+ 'avi' => 'video/x-msvideo',
+ 'movie' => 'video/x-sgi-movie',
+ 'webm' => 'video/webm',
+ 'mkv' => 'video/x-matroska',
+ ];
+ $ext = strtolower($ext);
+ if (array_key_exists($ext, $mimes)) {
+ return $mimes[$ext];
+ }
+
+ return 'application/octet-stream';
+ }
+
+ /**
+ * Map a file name to a MIME type.
+ * Defaults to 'application/octet-stream', i.e.. arbitrary binary data.
+ *
+ * @param string $filename A file name or full path, does not need to exist as a file
+ *
+ * @return string
+ */
+ public static function filenameToType($filename)
+ {
+ // In case the path is a URL, strip any query string before getting extension
+ $qpos = strpos($filename, '?');
+ if (false !== $qpos) {
+ $filename = substr($filename, 0, $qpos);
+ }
+ $ext = static::mb_pathinfo($filename, PATHINFO_EXTENSION);
+
+ return static::_mime_types($ext);
+ }
+
+ /**
+ * Multi-byte-safe pathinfo replacement.
+ * Drop-in replacement for pathinfo(), but multibyte- and cross-platform-safe.
+ *
+ * @see http://www.php.net/manual/en/function.pathinfo.php#107461
+ *
+ * @param string $path A filename or path, does not need to exist as a file
+ * @param int|string $options Either a PATHINFO_* constant,
+ * or a string name to return only the specified piece
+ *
+ * @return string|array
+ */
+ public static function mb_pathinfo($path, $options = null)
+ {
+ $ret = ['dirname' => '', 'basename' => '', 'extension' => '', 'filename' => ''];
+ $pathinfo = [];
+ if (preg_match('#^(.*?)[\\\\/]*(([^/\\\\]*?)(\.([^.\\\\/]+?)|))[\\\\/.]*$#m', $path, $pathinfo)) {
+ if (array_key_exists(1, $pathinfo)) {
+ $ret['dirname'] = $pathinfo[1];
+ }
+ if (array_key_exists(2, $pathinfo)) {
+ $ret['basename'] = $pathinfo[2];
+ }
+ if (array_key_exists(5, $pathinfo)) {
+ $ret['extension'] = $pathinfo[5];
+ }
+ if (array_key_exists(3, $pathinfo)) {
+ $ret['filename'] = $pathinfo[3];
+ }
+ }
+ switch ($options) {
+ case PATHINFO_DIRNAME:
+ case 'dirname':
+ return $ret['dirname'];
+ case PATHINFO_BASENAME:
+ case 'basename':
+ return $ret['basename'];
+ case PATHINFO_EXTENSION:
+ case 'extension':
+ return $ret['extension'];
+ case PATHINFO_FILENAME:
+ case 'filename':
+ return $ret['filename'];
+ default:
+ return $ret;
+ }
+ }
+
+ /**
+ * Set or reset instance properties.
+ * You should avoid this function - it's more verbose, less efficient, more error-prone and
+ * harder to debug than setting properties directly.
+ * Usage Example:
+ * `$mail->set('SMTPSecure', static::ENCRYPTION_STARTTLS);`
+ * is the same as:
+ * `$mail->SMTPSecure = static::ENCRYPTION_STARTTLS;`.
+ *
+ * @param string $name The property name to set
+ * @param mixed $value The value to set the property to
+ *
+ * @return bool
+ */
+ public function set($name, $value = '')
+ {
+ if (property_exists($this, $name)) {
+ $this->$name = $value;
+
+ return true;
+ }
+ $this->setError($this->lang('variable_set') . $name);
+
+ return false;
+ }
+
+ /**
+ * Strip newlines to prevent header injection.
+ *
+ * @param string $str
+ *
+ * @return string
+ */
+ public function secureHeader($str)
+ {
+ return trim(str_replace(["\r", "\n"], '', $str));
+ }
+
+ /**
+ * Normalize line breaks in a string.
+ * Converts UNIX LF, Mac CR and Windows CRLF line breaks into a single line break format.
+ * Defaults to CRLF (for message bodies) and preserves consecutive breaks.
+ *
+ * @param string $text
+ * @param string $breaktype What kind of line break to use; defaults to static::$LE
+ *
+ * @return string
+ */
+ public static function normalizeBreaks($text, $breaktype = null)
+ {
+ if (null === $breaktype) {
+ $breaktype = static::$LE;
+ }
+ // Normalise to \n
+ $text = str_replace([self::CRLF, "\r"], "\n", $text);
+ // Now convert LE as needed
+ if ("\n" !== $breaktype) {
+ $text = str_replace("\n", $breaktype, $text);
+ }
+
+ return $text;
+ }
+
+ /**
+ * Remove trailing breaks from a string.
+ *
+ * @param string $text
+ *
+ * @return string The text to remove breaks from
+ */
+ public static function stripTrailingWSP($text)
+ {
+ return rtrim($text, " \r\n\t");
+ }
+
+ /**
+ * Return the current line break format string.
+ *
+ * @return string
+ */
+ public static function getLE()
+ {
+ return static::$LE;
+ }
+
+ /**
+ * Set the line break format string, e.g. "\r\n".
+ *
+ * @param string $le
+ */
+ protected static function setLE($le)
+ {
+ static::$LE = $le;
+ }
+
+ /**
+ * Set the public and private key files and password for S/MIME signing.
+ *
+ * @param string $cert_filename
+ * @param string $key_filename
+ * @param string $key_pass Password for private key
+ * @param string $extracerts_filename Optional path to chain certificate
+ */
+ public function sign($cert_filename, $key_filename, $key_pass, $extracerts_filename = '')
+ {
+ $this->sign_cert_file = $cert_filename;
+ $this->sign_key_file = $key_filename;
+ $this->sign_key_pass = $key_pass;
+ $this->sign_extracerts_file = $extracerts_filename;
+ }
+
+ /**
+ * Quoted-Printable-encode a DKIM header.
+ *
+ * @param string $txt
+ *
+ * @return string
+ */
+ public function DKIM_QP($txt)
+ {
+ $line = '';
+ $len = strlen($txt);
+ for ($i = 0; $i < $len; ++$i) {
+ $ord = ord($txt[$i]);
+ if (((0x21 <= $ord) && ($ord <= 0x3A)) || $ord === 0x3C || ((0x3E <= $ord) && ($ord <= 0x7E))) {
+ $line .= $txt[$i];
+ } else {
+ $line .= '=' . sprintf('%02X', $ord);
+ }
+ }
+
+ return $line;
+ }
+
+ /**
+ * Generate a DKIM signature.
+ *
+ * @param string $signHeader
+ *
+ * @throws Exception
+ *
+ * @return string The DKIM signature value
+ */
+ public function DKIM_Sign($signHeader)
+ {
+ if (!defined('PKCS7_TEXT')) {
+ if ($this->exceptions) {
+ throw new Exception($this->lang('extension_missing') . 'openssl');
+ }
+
+ return '';
+ }
+ $privKeyStr = !empty($this->DKIM_private_string) ?
+ $this->DKIM_private_string :
+ file_get_contents($this->DKIM_private);
+ if ('' !== $this->DKIM_passphrase) {
+ $privKey = openssl_pkey_get_private($privKeyStr, $this->DKIM_passphrase);
+ } else {
+ $privKey = openssl_pkey_get_private($privKeyStr);
+ }
+ if (openssl_sign($signHeader, $signature, $privKey, 'sha256WithRSAEncryption')) {
+ openssl_pkey_free($privKey);
+
+ return base64_encode($signature);
+ }
+ openssl_pkey_free($privKey);
+
+ return '';
+ }
+
+ /**
+ * Generate a DKIM canonicalization header.
+ * Uses the 'relaxed' algorithm from RFC6376 section 3.4.2.
+ * Canonicalized headers should *always* use CRLF, regardless of mailer setting.
+ *
+ * @see https://tools.ietf.org/html/rfc6376#section-3.4.2
+ *
+ * @param string $signHeader Header
+ *
+ * @return string
+ */
+ public function DKIM_HeaderC($signHeader)
+ {
+ //Normalize breaks to CRLF (regardless of the mailer)
+ $signHeader = static::normalizeBreaks($signHeader, self::CRLF);
+ //Unfold header lines
+ //Note PCRE \s is too broad a definition of whitespace; RFC5322 defines it as `[ \t]`
+ //@see https://tools.ietf.org/html/rfc5322#section-2.2
+ //That means this may break if you do something daft like put vertical tabs in your headers.
+ $signHeader = preg_replace('/\r\n[ \t]+/', ' ', $signHeader);
+ //Break headers out into an array
+ $lines = explode(self::CRLF, $signHeader);
+ foreach ($lines as $key => $line) {
+ //If the header is missing a :, skip it as it's invalid
+ //This is likely to happen because the explode() above will also split
+ //on the trailing LE, leaving an empty line
+ if (strpos($line, ':') === false) {
+ continue;
+ }
+ list($heading, $value) = explode(':', $line, 2);
+ //Lower-case header name
+ $heading = strtolower($heading);
+ //Collapse white space within the value, also convert WSP to space
+ $value = preg_replace('/[ \t]+/', ' ', $value);
+ //RFC6376 is slightly unclear here - it says to delete space at the *end* of each value
+ //But then says to delete space before and after the colon.
+ //Net result is the same as trimming both ends of the value.
+ //By elimination, the same applies to the field name
+ $lines[$key] = trim($heading, " \t") . ':' . trim($value, " \t");
+ }
+
+ return implode(self::CRLF, $lines);
+ }
+
+ /**
+ * Generate a DKIM canonicalization body.
+ * Uses the 'simple' algorithm from RFC6376 section 3.4.3.
+ * Canonicalized bodies should *always* use CRLF, regardless of mailer setting.
+ *
+ * @see https://tools.ietf.org/html/rfc6376#section-3.4.3
+ *
+ * @param string $body Message Body
+ *
+ * @return string
+ */
+ public function DKIM_BodyC($body)
+ {
+ if (empty($body)) {
+ return self::CRLF;
+ }
+ // Normalize line endings to CRLF
+ $body = static::normalizeBreaks($body, self::CRLF);
+
+ //Reduce multiple trailing line breaks to a single one
+ return static::stripTrailingWSP($body) . self::CRLF;
+ }
+
+ /**
+ * Create the DKIM header and body in a new message header.
+ *
+ * @param string $headers_line Header lines
+ * @param string $subject Subject
+ * @param string $body Body
+ *
+ * @throws Exception
+ *
+ * @return string
+ */
+ public function DKIM_Add($headers_line, $subject, $body)
+ {
+ $DKIMsignatureType = 'rsa-sha256'; // Signature & hash algorithms
+ $DKIMcanonicalization = 'relaxed/simple'; // Canonicalization methods of header & body
+ $DKIMquery = 'dns/txt'; // Query method
+ $DKIMtime = time();
+ //Always sign these headers without being asked
+ //Recommended list from https://tools.ietf.org/html/rfc6376#section-5.4.1
+ $autoSignHeaders = [
+ 'from',
+ 'to',
+ 'cc',
+ 'date',
+ 'subject',
+ 'reply-to',
+ 'message-id',
+ 'content-type',
+ 'mime-version',
+ 'x-mailer',
+ ];
+ if (stripos($headers_line, 'Subject') === false) {
+ $headers_line .= 'Subject: ' . $subject . static::$LE;
+ }
+ $headerLines = explode(static::$LE, $headers_line);
+ $currentHeaderLabel = '';
+ $currentHeaderValue = '';
+ $parsedHeaders = [];
+ $headerLineIndex = 0;
+ $headerLineCount = count($headerLines);
+ foreach ($headerLines as $headerLine) {
+ $matches = [];
+ if (preg_match('/^([^ \t]*?)(?::[ \t]*)(.*)$/', $headerLine, $matches)) {
+ if ($currentHeaderLabel !== '') {
+ //We were previously in another header; This is the start of a new header, so save the previous one
+ $parsedHeaders[] = ['label' => $currentHeaderLabel, 'value' => $currentHeaderValue];
+ }
+ $currentHeaderLabel = $matches[1];
+ $currentHeaderValue = $matches[2];
+ } elseif (preg_match('/^[ \t]+(.*)$/', $headerLine, $matches)) {
+ //This is a folded continuation of the current header, so unfold it
+ $currentHeaderValue .= ' ' . $matches[1];
+ }
+ ++$headerLineIndex;
+ if ($headerLineIndex >= $headerLineCount) {
+ //This was the last line, so finish off this header
+ $parsedHeaders[] = ['label' => $currentHeaderLabel, 'value' => $currentHeaderValue];
+ }
+ }
+ $copiedHeaders = [];
+ $headersToSignKeys = [];
+ $headersToSign = [];
+ foreach ($parsedHeaders as $header) {
+ //Is this header one that must be included in the DKIM signature?
+ if (in_array(strtolower($header['label']), $autoSignHeaders, true)) {
+ $headersToSignKeys[] = $header['label'];
+ $headersToSign[] = $header['label'] . ': ' . $header['value'];
+ if ($this->DKIM_copyHeaderFields) {
+ $copiedHeaders[] = $header['label'] . ':' . //Note no space after this, as per RFC
+ str_replace('|', '=7C', $this->DKIM_QP($header['value']));
+ }
+ continue;
+ }
+ //Is this an extra custom header we've been asked to sign?
+ if (in_array($header['label'], $this->DKIM_extraHeaders, true)) {
+ //Find its value in custom headers
+ foreach ($this->CustomHeader as $customHeader) {
+ if ($customHeader[0] === $header['label']) {
+ $headersToSignKeys[] = $header['label'];
+ $headersToSign[] = $header['label'] . ': ' . $header['value'];
+ if ($this->DKIM_copyHeaderFields) {
+ $copiedHeaders[] = $header['label'] . ':' . //Note no space after this, as per RFC
+ str_replace('|', '=7C', $this->DKIM_QP($header['value']));
+ }
+ //Skip straight to the next header
+ continue 2;
+ }
+ }
+ }
+ }
+ $copiedHeaderFields = '';
+ if ($this->DKIM_copyHeaderFields && count($copiedHeaders) > 0) {
+ //Assemble a DKIM 'z' tag
+ $copiedHeaderFields = ' z=';
+ $first = true;
+ foreach ($copiedHeaders as $copiedHeader) {
+ if (!$first) {
+ $copiedHeaderFields .= static::$LE . ' |';
+ }
+ //Fold long values
+ if (strlen($copiedHeader) > self::STD_LINE_LENGTH - 3) {
+ $copiedHeaderFields .= substr(
+ chunk_split($copiedHeader, self::STD_LINE_LENGTH - 3, static::$LE . self::FWS),
+ 0,
+ -strlen(static::$LE . self::FWS)
+ );
+ } else {
+ $copiedHeaderFields .= $copiedHeader;
+ }
+ $first = false;
+ }
+ $copiedHeaderFields .= ';' . static::$LE;
+ }
+ $headerKeys = ' h=' . implode(':', $headersToSignKeys) . ';' . static::$LE;
+ $headerValues = implode(static::$LE, $headersToSign);
+ $body = $this->DKIM_BodyC($body);
+ $DKIMb64 = base64_encode(pack('H*', hash('sha256', $body))); // Base64 of packed binary SHA-256 hash of body
+ $ident = '';
+ if ('' !== $this->DKIM_identity) {
+ $ident = ' i=' . $this->DKIM_identity . ';' . static::$LE;
+ }
+ //The DKIM-Signature header is included in the signature *except for* the value of the `b` tag
+ //which is appended after calculating the signature
+ //https://tools.ietf.org/html/rfc6376#section-3.5
+ $dkimSignatureHeader = 'DKIM-Signature: v=1;' .
+ ' d=' . $this->DKIM_domain . ';' .
+ ' s=' . $this->DKIM_selector . ';' . static::$LE .
+ ' a=' . $DKIMsignatureType . ';' .
+ ' q=' . $DKIMquery . ';' .
+ ' t=' . $DKIMtime . ';' .
+ ' c=' . $DKIMcanonicalization . ';' . static::$LE .
+ $headerKeys .
+ $ident .
+ $copiedHeaderFields .
+ ' bh=' . $DKIMb64 . ';' . static::$LE .
+ ' b=';
+ //Canonicalize the set of headers
+ $canonicalizedHeaders = $this->DKIM_HeaderC(
+ $headerValues . static::$LE . $dkimSignatureHeader
+ );
+ $signature = $this->DKIM_Sign($canonicalizedHeaders);
+ $signature = trim(chunk_split($signature, self::STD_LINE_LENGTH - 3, static::$LE . self::FWS));
+
+ return static::normalizeBreaks($dkimSignatureHeader . $signature);
+ }
+
+ /**
+ * Detect if a string contains a line longer than the maximum line length
+ * allowed by RFC 2822 section 2.1.1.
+ *
+ * @param string $str
+ *
+ * @return bool
+ */
+ public static function hasLineLongerThanMax($str)
+ {
+ return (bool) preg_match('/^(.{' . (self::MAX_LINE_LENGTH + strlen(static::$LE)) . ',})/m', $str);
+ }
+
+ /**
+ * If a string contains any "special" characters, double-quote the name,
+ * and escape any double quotes with a backslash.
+ *
+ * @param string $str
+ *
+ * @return string
+ *
+ * @see RFC822 3.4.1
+ */
+ public static function quotedString($str)
+ {
+ if (preg_match('/[ ()<>@,;:"\/\[\]?=]/', $str)) {
+ //If the string contains any of these chars, it must be double-quoted
+ //and any double quotes must be escaped with a backslash
+ return '"' . str_replace('"', '\\"', $str) . '"';
+ }
+
+ //Return the string untouched, it doesn't need quoting
+ return $str;
+ }
+
+ /**
+ * Allows for public read access to 'to' property.
+ * Before the send() call, queued addresses (i.e. with IDN) are not yet included.
+ *
+ * @return array
+ */
+ public function getToAddresses()
+ {
+ return $this->to;
+ }
+
+ /**
+ * Allows for public read access to 'cc' property.
+ * Before the send() call, queued addresses (i.e. with IDN) are not yet included.
+ *
+ * @return array
+ */
+ public function getCcAddresses()
+ {
+ return $this->cc;
+ }
+
+ /**
+ * Allows for public read access to 'bcc' property.
+ * Before the send() call, queued addresses (i.e. with IDN) are not yet included.
+ *
+ * @return array
+ */
+ public function getBccAddresses()
+ {
+ return $this->bcc;
+ }
+
+ /**
+ * Allows for public read access to 'ReplyTo' property.
+ * Before the send() call, queued addresses (i.e. with IDN) are not yet included.
+ *
+ * @return array
+ */
+ public function getReplyToAddresses()
+ {
+ return $this->ReplyTo;
+ }
+
+ /**
+ * Allows for public read access to 'all_recipients' property.
+ * Before the send() call, queued addresses (i.e. with IDN) are not yet included.
+ *
+ * @return array
+ */
+ public function getAllRecipientAddresses()
+ {
+ return $this->all_recipients;
+ }
+
+ /**
+ * Perform a callback.
+ *
+ * @param bool $isSent
+ * @param array $to
+ * @param array $cc
+ * @param array $bcc
+ * @param string $subject
+ * @param string $body
+ * @param string $from
+ * @param array $extra
+ */
+ protected function doCallback($isSent, $to, $cc, $bcc, $subject, $body, $from, $extra)
+ {
+ if (!empty($this->action_function) && is_callable($this->action_function)) {
+ call_user_func($this->action_function, $isSent, $to, $cc, $bcc, $subject, $body, $from, $extra);
+ }
+ }
+
+ /**
+ * Get the OAuth instance.
+ *
+ * @return OAuth
+ */
+ public function getOAuth()
+ {
+ return $this->oauth;
+ }
+
+ /**
+ * Set an OAuth instance.
+ */
+ public function setOAuth(OAuth $oauth)
+ {
+ $this->oauth = $oauth;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/src/POP3.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/src/POP3.php
new file mode 100644
index 0000000..7d4c88f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/src/POP3.php
@@ -0,0 +1,421 @@
+<?php
+/**
+ * PHPMailer POP-Before-SMTP Authentication Class.
+ * PHP Version 5.5.
+ *
+ * @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
+ *
+ * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
+ * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
+ * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
+ * @author Brent R. Matzelle (original founder)
+ * @copyright 2012 - 2019 Marcus Bointon
+ * @copyright 2010 - 2012 Jim Jagielski
+ * @copyright 2004 - 2009 Andy Prevost
+ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
+ * @note This program is distributed in the hope that it will be useful - WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+namespace PHPMailer\PHPMailer;
+
+/**
+ * PHPMailer POP-Before-SMTP Authentication Class.
+ * Specifically for PHPMailer to use for RFC1939 POP-before-SMTP authentication.
+ * 1) This class does not support APOP authentication.
+ * 2) Opening and closing lots of POP3 connections can be quite slow. If you need
+ * to send a batch of emails then just perform the authentication once at the start,
+ * and then loop through your mail sending script. Providing this process doesn't
+ * take longer than the verification period lasts on your POP3 server, you should be fine.
+ * 3) This is really ancient technology; you should only need to use it to talk to very old systems.
+ * 4) This POP3 class is deliberately lightweight and incomplete, implementing just
+ * enough to do authentication.
+ * If you want a more complete class there are other POP3 classes for PHP available.
+ *
+ * @author Richard Davey (original author) <rich@corephp.co.uk>
+ * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
+ * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
+ * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
+ */
+class POP3
+{
+ /**
+ * The POP3 PHPMailer Version number.
+ *
+ * @var string
+ */
+ const VERSION = '6.1.6';
+
+ /**
+ * Default POP3 port number.
+ *
+ * @var int
+ */
+ const DEFAULT_PORT = 110;
+
+ /**
+ * Default timeout in seconds.
+ *
+ * @var int
+ */
+ const DEFAULT_TIMEOUT = 30;
+
+ /**
+ * Debug display level.
+ * Options: 0 = no, 1+ = yes.
+ *
+ * @var int
+ */
+ public $do_debug = 0;
+
+ /**
+ * POP3 mail server hostname.
+ *
+ * @var string
+ */
+ public $host;
+
+ /**
+ * POP3 port number.
+ *
+ * @var int
+ */
+ public $port;
+
+ /**
+ * POP3 Timeout Value in seconds.
+ *
+ * @var int
+ */
+ public $tval;
+
+ /**
+ * POP3 username.
+ *
+ * @var string
+ */
+ public $username;
+
+ /**
+ * POP3 password.
+ *
+ * @var string
+ */
+ public $password;
+
+ /**
+ * Resource handle for the POP3 connection socket.
+ *
+ * @var resource
+ */
+ protected $pop_conn;
+
+ /**
+ * Are we connected?
+ *
+ * @var bool
+ */
+ protected $connected = false;
+
+ /**
+ * Error container.
+ *
+ * @var array
+ */
+ protected $errors = [];
+
+ /**
+ * Line break constant.
+ */
+ const LE = "\r\n";
+
+ /**
+ * Simple static wrapper for all-in-one POP before SMTP.
+ *
+ * @param string $host The hostname to connect to
+ * @param int|bool $port The port number to connect to
+ * @param int|bool $timeout The timeout value
+ * @param string $username
+ * @param string $password
+ * @param int $debug_level
+ *
+ * @return bool
+ */
+ public static function popBeforeSmtp(
+ $host,
+ $port = false,
+ $timeout = false,
+ $username = '',
+ $password = '',
+ $debug_level = 0
+ ) {
+ $pop = new self();
+
+ return $pop->authorise($host, $port, $timeout, $username, $password, $debug_level);
+ }
+
+ /**
+ * Authenticate with a POP3 server.
+ * A connect, login, disconnect sequence
+ * appropriate for POP-before SMTP authorisation.
+ *
+ * @param string $host The hostname to connect to
+ * @param int|bool $port The port number to connect to
+ * @param int|bool $timeout The timeout value
+ * @param string $username
+ * @param string $password
+ * @param int $debug_level
+ *
+ * @return bool
+ */
+ public function authorise($host, $port = false, $timeout = false, $username = '', $password = '', $debug_level = 0)
+ {
+ $this->host = $host;
+ // If no port value provided, use default
+ if (false === $port) {
+ $this->port = static::DEFAULT_PORT;
+ } else {
+ $this->port = (int) $port;
+ }
+ // If no timeout value provided, use default
+ if (false === $timeout) {
+ $this->tval = static::DEFAULT_TIMEOUT;
+ } else {
+ $this->tval = (int) $timeout;
+ }
+ $this->do_debug = $debug_level;
+ $this->username = $username;
+ $this->password = $password;
+ // Reset the error log
+ $this->errors = [];
+ // connect
+ $result = $this->connect($this->host, $this->port, $this->tval);
+ if ($result) {
+ $login_result = $this->login($this->username, $this->password);
+ if ($login_result) {
+ $this->disconnect();
+
+ return true;
+ }
+ }
+ // We need to disconnect regardless of whether the login succeeded
+ $this->disconnect();
+
+ return false;
+ }
+
+ /**
+ * Connect to a POP3 server.
+ *
+ * @param string $host
+ * @param int|bool $port
+ * @param int $tval
+ *
+ * @return bool
+ */
+ public function connect($host, $port = false, $tval = 30)
+ {
+ // Are we already connected?
+ if ($this->connected) {
+ return true;
+ }
+
+ //On Windows this will raise a PHP Warning error if the hostname doesn't exist.
+ //Rather than suppress it with @fsockopen, capture it cleanly instead
+ set_error_handler([$this, 'catchWarning']);
+
+ if (false === $port) {
+ $port = static::DEFAULT_PORT;
+ }
+
+ // connect to the POP3 server
+ $errno = 0;
+ $errstr = '';
+ $this->pop_conn = fsockopen(
+ $host, // POP3 Host
+ $port, // Port #
+ $errno, // Error Number
+ $errstr, // Error Message
+ $tval
+ ); // Timeout (seconds)
+ // Restore the error handler
+ restore_error_handler();
+
+ // Did we connect?
+ if (false === $this->pop_conn) {
+ // It would appear not...
+ $this->setError(
+ "Failed to connect to server $host on port $port. errno: $errno; errstr: $errstr"
+ );
+
+ return false;
+ }
+
+ // Increase the stream time-out
+ stream_set_timeout($this->pop_conn, $tval, 0);
+
+ // Get the POP3 server response
+ $pop3_response = $this->getResponse();
+ // Check for the +OK
+ if ($this->checkResponse($pop3_response)) {
+ // The connection is established and the POP3 server is talking
+ $this->connected = true;
+
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Log in to the POP3 server.
+ * Does not support APOP (RFC 2828, 4949).
+ *
+ * @param string $username
+ * @param string $password
+ *
+ * @return bool
+ */
+ public function login($username = '', $password = '')
+ {
+ if (!$this->connected) {
+ $this->setError('Not connected to POP3 server');
+ }
+ if (empty($username)) {
+ $username = $this->username;
+ }
+ if (empty($password)) {
+ $password = $this->password;
+ }
+
+ // Send the Username
+ $this->sendString("USER $username" . static::LE);
+ $pop3_response = $this->getResponse();
+ if ($this->checkResponse($pop3_response)) {
+ // Send the Password
+ $this->sendString("PASS $password" . static::LE);
+ $pop3_response = $this->getResponse();
+ if ($this->checkResponse($pop3_response)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Disconnect from the POP3 server.
+ */
+ public function disconnect()
+ {
+ $this->sendString('QUIT');
+ //The QUIT command may cause the daemon to exit, which will kill our connection
+ //So ignore errors here
+ try {
+ @fclose($this->pop_conn);
+ } catch (Exception $e) {
+ //Do nothing
+ }
+ }
+
+ /**
+ * Get a response from the POP3 server.
+ *
+ * @param int $size The maximum number of bytes to retrieve
+ *
+ * @return string
+ */
+ protected function getResponse($size = 128)
+ {
+ $response = fgets($this->pop_conn, $size);
+ if ($this->do_debug >= 1) {
+ echo 'Server -> Client: ', $response;
+ }
+
+ return $response;
+ }
+
+ /**
+ * Send raw data to the POP3 server.
+ *
+ * @param string $string
+ *
+ * @return int
+ */
+ protected function sendString($string)
+ {
+ if ($this->pop_conn) {
+ if ($this->do_debug >= 2) { //Show client messages when debug >= 2
+ echo 'Client -> Server: ', $string;
+ }
+
+ return fwrite($this->pop_conn, $string, strlen($string));
+ }
+
+ return 0;
+ }
+
+ /**
+ * Checks the POP3 server response.
+ * Looks for for +OK or -ERR.
+ *
+ * @param string $string
+ *
+ * @return bool
+ */
+ protected function checkResponse($string)
+ {
+ if (strpos($string, '+OK') !== 0) {
+ $this->setError("Server reported an error: $string");
+
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Add an error to the internal error store.
+ * Also display debug output if it's enabled.
+ *
+ * @param string $error
+ */
+ protected function setError($error)
+ {
+ $this->errors[] = $error;
+ if ($this->do_debug >= 1) {
+ echo '<pre>';
+ foreach ($this->errors as $e) {
+ print_r($e);
+ }
+ echo '</pre>';
+ }
+ }
+
+ /**
+ * Get an array of error messages, if any.
+ *
+ * @return array
+ */
+ public function getErrors()
+ {
+ return $this->errors;
+ }
+
+ /**
+ * POP3 connection error handler.
+ *
+ * @param int $errno
+ * @param string $errstr
+ * @param string $errfile
+ * @param int $errline
+ */
+ protected function catchWarning($errno, $errstr, $errfile, $errline)
+ {
+ $this->setError(
+ 'Connecting to the POP3 server raised a PHP warning:' .
+ "errno: $errno errstr: $errstr; errfile: $errfile; errline: $errline"
+ );
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/src/SMTP.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/src/SMTP.php
new file mode 100644
index 0000000..aa55551
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/phpmailer/phpmailer/src/SMTP.php
@@ -0,0 +1,1371 @@
+<?php
+/**
+ * PHPMailer RFC821 SMTP email transport class.
+ * PHP Version 5.5.
+ *
+ * @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
+ *
+ * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
+ * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
+ * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
+ * @author Brent R. Matzelle (original founder)
+ * @copyright 2012 - 2019 Marcus Bointon
+ * @copyright 2010 - 2012 Jim Jagielski
+ * @copyright 2004 - 2009 Andy Prevost
+ * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
+ * @note This program is distributed in the hope that it will be useful - WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+namespace PHPMailer\PHPMailer;
+
+/**
+ * PHPMailer RFC821 SMTP email transport class.
+ * Implements RFC 821 SMTP commands and provides some utility methods for sending mail to an SMTP server.
+ *
+ * @author Chris Ryan
+ * @author Marcus Bointon <phpmailer@synchromedia.co.uk>
+ */
+class SMTP
+{
+ /**
+ * The PHPMailer SMTP version number.
+ *
+ * @var string
+ */
+ const VERSION = '6.1.6';
+
+ /**
+ * SMTP line break constant.
+ *
+ * @var string
+ */
+ const LE = "\r\n";
+
+ /**
+ * The SMTP port to use if one is not specified.
+ *
+ * @var int
+ */
+ const DEFAULT_PORT = 25;
+
+ /**
+ * The maximum line length allowed by RFC 5321 section 4.5.3.1.6,
+ * *excluding* a trailing CRLF break.
+ *
+ * @see https://tools.ietf.org/html/rfc5321#section-4.5.3.1.6
+ *
+ * @var int
+ */
+ const MAX_LINE_LENGTH = 998;
+
+ /**
+ * The maximum line length allowed for replies in RFC 5321 section 4.5.3.1.5,
+ * *including* a trailing CRLF line break.
+ *
+ * @see https://tools.ietf.org/html/rfc5321#section-4.5.3.1.5
+ *
+ * @var int
+ */
+ const MAX_REPLY_LENGTH = 512;
+
+ /**
+ * Debug level for no output.
+ *
+ * @var int
+ */
+ const DEBUG_OFF = 0;
+
+ /**
+ * Debug level to show client -> server messages.
+ *
+ * @var int
+ */
+ const DEBUG_CLIENT = 1;
+
+ /**
+ * Debug level to show client -> server and server -> client messages.
+ *
+ * @var int
+ */
+ const DEBUG_SERVER = 2;
+
+ /**
+ * Debug level to show connection status, client -> server and server -> client messages.
+ *
+ * @var int
+ */
+ const DEBUG_CONNECTION = 3;
+
+ /**
+ * Debug level to show all messages.
+ *
+ * @var int
+ */
+ const DEBUG_LOWLEVEL = 4;
+
+ /**
+ * Debug output level.
+ * Options:
+ * * self::DEBUG_OFF (`0`) No debug output, default
+ * * self::DEBUG_CLIENT (`1`) Client commands
+ * * self::DEBUG_SERVER (`2`) Client commands and server responses
+ * * self::DEBUG_CONNECTION (`3`) As DEBUG_SERVER plus connection status
+ * * self::DEBUG_LOWLEVEL (`4`) Low-level data output, all messages.
+ *
+ * @var int
+ */
+ public $do_debug = self::DEBUG_OFF;
+
+ /**
+ * How to handle debug output.
+ * Options:
+ * * `echo` Output plain-text as-is, appropriate for CLI
+ * * `html` Output escaped, line breaks converted to `<br>`, appropriate for browser output
+ * * `error_log` Output to error log as configured in php.ini
+ * Alternatively, you can provide a callable expecting two params: a message string and the debug level:
+ *
+ * ```php
+ * $smtp->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";};
+ * ```
+ *
+ * Alternatively, you can pass in an instance of a PSR-3 compatible logger, though only `debug`
+ * level output is used:
+ *
+ * ```php
+ * $mail->Debugoutput = new myPsr3Logger;
+ * ```
+ *
+ * @var string|callable|\Psr\Log\LoggerInterface
+ */
+ public $Debugoutput = 'echo';
+
+ /**
+ * Whether to use VERP.
+ *
+ * @see http://en.wikipedia.org/wiki/Variable_envelope_return_path
+ * @see http://www.postfix.org/VERP_README.html Info on VERP
+ *
+ * @var bool
+ */
+ public $do_verp = false;
+
+ /**
+ * The timeout value for connection, in seconds.
+ * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2.
+ * This needs to be quite high to function correctly with hosts using greetdelay as an anti-spam measure.
+ *
+ * @see http://tools.ietf.org/html/rfc2821#section-4.5.3.2
+ *
+ * @var int
+ */
+ public $Timeout = 300;
+
+ /**
+ * How long to wait for commands to complete, in seconds.
+ * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2.
+ *
+ * @var int
+ */
+ public $Timelimit = 300;
+
+ /**
+ * Patterns to extract an SMTP transaction id from reply to a DATA command.
+ * The first capture group in each regex will be used as the ID.
+ * MS ESMTP returns the message ID, which may not be correct for internal tracking.
+ *
+ * @var string[]
+ */
+ protected $smtp_transaction_id_patterns = [
+ 'exim' => '/[\d]{3} OK id=(.*)/',
+ 'sendmail' => '/[\d]{3} 2.0.0 (.*) Message/',
+ 'postfix' => '/[\d]{3} 2.0.0 Ok: queued as (.*)/',
+ 'Microsoft_ESMTP' => '/[0-9]{3} 2.[\d].0 (.*)@(?:.*) Queued mail for delivery/',
+ 'Amazon_SES' => '/[\d]{3} Ok (.*)/',
+ 'SendGrid' => '/[\d]{3} Ok: queued as (.*)/',
+ 'CampaignMonitor' => '/[\d]{3} 2.0.0 OK:([a-zA-Z\d]{48})/',
+ ];
+
+ /**
+ * The last transaction ID issued in response to a DATA command,
+ * if one was detected.
+ *
+ * @var string|bool|null
+ */
+ protected $last_smtp_transaction_id;
+
+ /**
+ * The socket for the server connection.
+ *
+ * @var ?resource
+ */
+ protected $smtp_conn;
+
+ /**
+ * Error information, if any, for the last SMTP command.
+ *
+ * @var array
+ */
+ protected $error = [
+ 'error' => '',
+ 'detail' => '',
+ 'smtp_code' => '',
+ 'smtp_code_ex' => '',
+ ];
+
+ /**
+ * The reply the server sent to us for HELO.
+ * If null, no HELO string has yet been received.
+ *
+ * @var string|null
+ */
+ protected $helo_rply;
+
+ /**
+ * The set of SMTP extensions sent in reply to EHLO command.
+ * Indexes of the array are extension names.
+ * Value at index 'HELO' or 'EHLO' (according to command that was sent)
+ * represents the server name. In case of HELO it is the only element of the array.
+ * Other values can be boolean TRUE or an array containing extension options.
+ * If null, no HELO/EHLO string has yet been received.
+ *
+ * @var array|null
+ */
+ protected $server_caps;
+
+ /**
+ * The most recent reply received from the server.
+ *
+ * @var string
+ */
+ protected $last_reply = '';
+
+ /**
+ * Output debugging info via a user-selected method.
+ *
+ * @param string $str Debug string to output
+ * @param int $level The debug level of this message; see DEBUG_* constants
+ *
+ * @see SMTP::$Debugoutput
+ * @see SMTP::$do_debug
+ */
+ protected function edebug($str, $level = 0)
+ {
+ if ($level > $this->do_debug) {
+ return;
+ }
+ //Is this a PSR-3 logger?
+ if ($this->Debugoutput instanceof \Psr\Log\LoggerInterface) {
+ $this->Debugoutput->debug($str);
+
+ return;
+ }
+ //Avoid clash with built-in function names
+ if (is_callable($this->Debugoutput) && !in_array($this->Debugoutput, ['error_log', 'html', 'echo'])) {
+ call_user_func($this->Debugoutput, $str, $level);
+
+ return;
+ }
+ switch ($this->Debugoutput) {
+ case 'error_log':
+ //Don't output, just log
+ error_log($str);
+ break;
+ case 'html':
+ //Cleans up output a bit for a better looking, HTML-safe output
+ echo gmdate('Y-m-d H:i:s'), ' ', htmlentities(
+ preg_replace('/[\r\n]+/', '', $str),
+ ENT_QUOTES,
+ 'UTF-8'
+ ), "<br>\n";
+ break;
+ case 'echo':
+ default:
+ //Normalize line breaks
+ $str = preg_replace('/\r\n|\r/m', "\n", $str);
+ echo gmdate('Y-m-d H:i:s'),
+ "\t",
+ //Trim trailing space
+ trim(
+ //Indent for readability, except for trailing break
+ str_replace(
+ "\n",
+ "\n \t ",
+ trim($str)
+ )
+ ),
+ "\n";
+ }
+ }
+
+ /**
+ * Connect to an SMTP server.
+ *
+ * @param string $host SMTP server IP or host name
+ * @param int $port The port number to connect to
+ * @param int $timeout How long to wait for the connection to open
+ * @param array $options An array of options for stream_context_create()
+ *
+ * @return bool
+ */
+ public function connect($host, $port = null, $timeout = 30, $options = [])
+ {
+ static $streamok;
+ //This is enabled by default since 5.0.0 but some providers disable it
+ //Check this once and cache the result
+ if (null === $streamok) {
+ $streamok = function_exists('stream_socket_client');
+ }
+ // Clear errors to avoid confusion
+ $this->setError('');
+ // Make sure we are __not__ connected
+ if ($this->connected()) {
+ // Already connected, generate error
+ $this->setError('Already connected to a server');
+
+ return false;
+ }
+ if (empty($port)) {
+ $port = self::DEFAULT_PORT;
+ }
+ // Connect to the SMTP server
+ $this->edebug(
+ "Connection: opening to $host:$port, timeout=$timeout, options=" .
+ (count($options) > 0 ? var_export($options, true) : 'array()'),
+ self::DEBUG_CONNECTION
+ );
+ $errno = 0;
+ $errstr = '';
+ if ($streamok) {
+ $socket_context = stream_context_create($options);
+ set_error_handler([$this, 'errorHandler']);
+ $this->smtp_conn = stream_socket_client(
+ $host . ':' . $port,
+ $errno,
+ $errstr,
+ $timeout,
+ STREAM_CLIENT_CONNECT,
+ $socket_context
+ );
+ restore_error_handler();
+ } else {
+ //Fall back to fsockopen which should work in more places, but is missing some features
+ $this->edebug(
+ 'Connection: stream_socket_client not available, falling back to fsockopen',
+ self::DEBUG_CONNECTION
+ );
+ set_error_handler([$this, 'errorHandler']);
+ $this->smtp_conn = fsockopen(
+ $host,
+ $port,
+ $errno,
+ $errstr,
+ $timeout
+ );
+ restore_error_handler();
+ }
+ // Verify we connected properly
+ if (!is_resource($this->smtp_conn)) {
+ $this->setError(
+ 'Failed to connect to server',
+ '',
+ (string) $errno,
+ $errstr
+ );
+ $this->edebug(
+ 'SMTP ERROR: ' . $this->error['error']
+ . ": $errstr ($errno)",
+ self::DEBUG_CLIENT
+ );
+
+ return false;
+ }
+ $this->edebug('Connection: opened', self::DEBUG_CONNECTION);
+ // SMTP server can take longer to respond, give longer timeout for first read
+ // Windows does not have support for this timeout function
+ if (strpos(PHP_OS, 'WIN') !== 0) {
+ $max = (int) ini_get('max_execution_time');
+ // Don't bother if unlimited
+ if (0 !== $max && $timeout > $max) {
+ @set_time_limit($timeout);
+ }
+ stream_set_timeout($this->smtp_conn, $timeout, 0);
+ }
+ // Get any announcement
+ $announce = $this->get_lines();
+ $this->edebug('SERVER -> CLIENT: ' . $announce, self::DEBUG_SERVER);
+
+ return true;
+ }
+
+ /**
+ * Initiate a TLS (encrypted) session.
+ *
+ * @return bool
+ */
+ public function startTLS()
+ {
+ if (!$this->sendCommand('STARTTLS', 'STARTTLS', 220)) {
+ return false;
+ }
+
+ //Allow the best TLS version(s) we can
+ $crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT;
+
+ //PHP 5.6.7 dropped inclusion of TLS 1.1 and 1.2 in STREAM_CRYPTO_METHOD_TLS_CLIENT
+ //so add them back in manually if we can
+ if (defined('STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT')) {
+ $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT;
+ $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT;
+ }
+
+ // Begin encrypted connection
+ set_error_handler([$this, 'errorHandler']);
+ $crypto_ok = stream_socket_enable_crypto(
+ $this->smtp_conn,
+ true,
+ $crypto_method
+ );
+ restore_error_handler();
+
+ return (bool) $crypto_ok;
+ }
+
+ /**
+ * Perform SMTP authentication.
+ * Must be run after hello().
+ *
+ * @see hello()
+ *
+ * @param string $username The user name
+ * @param string $password The password
+ * @param string $authtype The auth type (CRAM-MD5, PLAIN, LOGIN, XOAUTH2)
+ * @param OAuth $OAuth An optional OAuth instance for XOAUTH2 authentication
+ *
+ * @return bool True if successfully authenticated
+ */
+ public function authenticate(
+ $username,
+ $password,
+ $authtype = null,
+ $OAuth = null
+ ) {
+ if (!$this->server_caps) {
+ $this->setError('Authentication is not allowed before HELO/EHLO');
+
+ return false;
+ }
+
+ if (array_key_exists('EHLO', $this->server_caps)) {
+ // SMTP extensions are available; try to find a proper authentication method
+ if (!array_key_exists('AUTH', $this->server_caps)) {
+ $this->setError('Authentication is not allowed at this stage');
+ // 'at this stage' means that auth may be allowed after the stage changes
+ // e.g. after STARTTLS
+
+ return false;
+ }
+
+ $this->edebug('Auth method requested: ' . ($authtype ?: 'UNSPECIFIED'), self::DEBUG_LOWLEVEL);
+ $this->edebug(
+ 'Auth methods available on the server: ' . implode(',', $this->server_caps['AUTH']),
+ self::DEBUG_LOWLEVEL
+ );
+
+ //If we have requested a specific auth type, check the server supports it before trying others
+ if (null !== $authtype && !in_array($authtype, $this->server_caps['AUTH'], true)) {
+ $this->edebug('Requested auth method not available: ' . $authtype, self::DEBUG_LOWLEVEL);
+ $authtype = null;
+ }
+
+ if (empty($authtype)) {
+ //If no auth mechanism is specified, attempt to use these, in this order
+ //Try CRAM-MD5 first as it's more secure than the others
+ foreach (['CRAM-MD5', 'LOGIN', 'PLAIN', 'XOAUTH2'] as $method) {
+ if (in_array($method, $this->server_caps['AUTH'], true)) {
+ $authtype = $method;
+ break;
+ }
+ }
+ if (empty($authtype)) {
+ $this->setError('No supported authentication methods found');
+
+ return false;
+ }
+ $this->edebug('Auth method selected: ' . $authtype, self::DEBUG_LOWLEVEL);
+ }
+
+ if (!in_array($authtype, $this->server_caps['AUTH'], true)) {
+ $this->setError("The requested authentication method \"$authtype\" is not supported by the server");
+
+ return false;
+ }
+ } elseif (empty($authtype)) {
+ $authtype = 'LOGIN';
+ }
+ switch ($authtype) {
+ case 'PLAIN':
+ // Start authentication
+ if (!$this->sendCommand('AUTH', 'AUTH PLAIN', 334)) {
+ return false;
+ }
+ // Send encoded username and password
+ if (!$this->sendCommand(
+ 'User & Password',
+ base64_encode("\0" . $username . "\0" . $password),
+ 235
+ )
+ ) {
+ return false;
+ }
+ break;
+ case 'LOGIN':
+ // Start authentication
+ if (!$this->sendCommand('AUTH', 'AUTH LOGIN', 334)) {
+ return false;
+ }
+ if (!$this->sendCommand('Username', base64_encode($username), 334)) {
+ return false;
+ }
+ if (!$this->sendCommand('Password', base64_encode($password), 235)) {
+ return false;
+ }
+ break;
+ case 'CRAM-MD5':
+ // Start authentication
+ if (!$this->sendCommand('AUTH CRAM-MD5', 'AUTH CRAM-MD5', 334)) {
+ return false;
+ }
+ // Get the challenge
+ $challenge = base64_decode(substr($this->last_reply, 4));
+
+ // Build the response
+ $response = $username . ' ' . $this->hmac($challenge, $password);
+
+ // send encoded credentials
+ return $this->sendCommand('Username', base64_encode($response), 235);
+ case 'XOAUTH2':
+ //The OAuth instance must be set up prior to requesting auth.
+ if (null === $OAuth) {
+ return false;
+ }
+ $oauth = $OAuth->getOauth64();
+
+ // Start authentication
+ if (!$this->sendCommand('AUTH', 'AUTH XOAUTH2 ' . $oauth, 235)) {
+ return false;
+ }
+ break;
+ default:
+ $this->setError("Authentication method \"$authtype\" is not supported");
+
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Calculate an MD5 HMAC hash.
+ * Works like hash_hmac('md5', $data, $key)
+ * in case that function is not available.
+ *
+ * @param string $data The data to hash
+ * @param string $key The key to hash with
+ *
+ * @return string
+ */
+ protected function hmac($data, $key)
+ {
+ if (function_exists('hash_hmac')) {
+ return hash_hmac('md5', $data, $key);
+ }
+
+ // The following borrowed from
+ // http://php.net/manual/en/function.mhash.php#27225
+
+ // RFC 2104 HMAC implementation for php.
+ // Creates an md5 HMAC.
+ // Eliminates the need to install mhash to compute a HMAC
+ // by Lance Rushing
+
+ $bytelen = 64; // byte length for md5
+ if (strlen($key) > $bytelen) {
+ $key = pack('H*', md5($key));
+ }
+ $key = str_pad($key, $bytelen, chr(0x00));
+ $ipad = str_pad('', $bytelen, chr(0x36));
+ $opad = str_pad('', $bytelen, chr(0x5c));
+ $k_ipad = $key ^ $ipad;
+ $k_opad = $key ^ $opad;
+
+ return md5($k_opad . pack('H*', md5($k_ipad . $data)));
+ }
+
+ /**
+ * Check connection state.
+ *
+ * @return bool True if connected
+ */
+ public function connected()
+ {
+ if (is_resource($this->smtp_conn)) {
+ $sock_status = stream_get_meta_data($this->smtp_conn);
+ if ($sock_status['eof']) {
+ // The socket is valid but we are not connected
+ $this->edebug(
+ 'SMTP NOTICE: EOF caught while checking if connected',
+ self::DEBUG_CLIENT
+ );
+ $this->close();
+
+ return false;
+ }
+
+ return true; // everything looks good
+ }
+
+ return false;
+ }
+
+ /**
+ * Close the socket and clean up the state of the class.
+ * Don't use this function without first trying to use QUIT.
+ *
+ * @see quit()
+ */
+ public function close()
+ {
+ $this->setError('');
+ $this->server_caps = null;
+ $this->helo_rply = null;
+ if (is_resource($this->smtp_conn)) {
+ // close the connection and cleanup
+ fclose($this->smtp_conn);
+ $this->smtp_conn = null; //Makes for cleaner serialization
+ $this->edebug('Connection: closed', self::DEBUG_CONNECTION);
+ }
+ }
+
+ /**
+ * Send an SMTP DATA command.
+ * Issues a data command and sends the msg_data to the server,
+ * finializing the mail transaction. $msg_data is the message
+ * that is to be send with the headers. Each header needs to be
+ * on a single line followed by a <CRLF> with the message headers
+ * and the message body being separated by an additional <CRLF>.
+ * Implements RFC 821: DATA <CRLF>.
+ *
+ * @param string $msg_data Message data to send
+ *
+ * @return bool
+ */
+ public function data($msg_data)
+ {
+ //This will use the standard timelimit
+ if (!$this->sendCommand('DATA', 'DATA', 354)) {
+ return false;
+ }
+
+ /* The server is ready to accept data!
+ * According to rfc821 we should not send more than 1000 characters on a single line (including the LE)
+ * so we will break the data up into lines by \r and/or \n then if needed we will break each of those into
+ * smaller lines to fit within the limit.
+ * We will also look for lines that start with a '.' and prepend an additional '.'.
+ * NOTE: this does not count towards line-length limit.
+ */
+
+ // Normalize line breaks before exploding
+ $lines = explode("\n", str_replace(["\r\n", "\r"], "\n", $msg_data));
+
+ /* To distinguish between a complete RFC822 message and a plain message body, we check if the first field
+ * of the first line (':' separated) does not contain a space then it _should_ be a header and we will
+ * process all lines before a blank line as headers.
+ */
+
+ $field = substr($lines[0], 0, strpos($lines[0], ':'));
+ $in_headers = false;
+ if (!empty($field) && strpos($field, ' ') === false) {
+ $in_headers = true;
+ }
+
+ foreach ($lines as $line) {
+ $lines_out = [];
+ if ($in_headers && $line === '') {
+ $in_headers = false;
+ }
+ //Break this line up into several smaller lines if it's too long
+ //Micro-optimisation: isset($str[$len]) is faster than (strlen($str) > $len),
+ while (isset($line[self::MAX_LINE_LENGTH])) {
+ //Working backwards, try to find a space within the last MAX_LINE_LENGTH chars of the line to break on
+ //so as to avoid breaking in the middle of a word
+ $pos = strrpos(substr($line, 0, self::MAX_LINE_LENGTH), ' ');
+ //Deliberately matches both false and 0
+ if (!$pos) {
+ //No nice break found, add a hard break
+ $pos = self::MAX_LINE_LENGTH - 1;
+ $lines_out[] = substr($line, 0, $pos);
+ $line = substr($line, $pos);
+ } else {
+ //Break at the found point
+ $lines_out[] = substr($line, 0, $pos);
+ //Move along by the amount we dealt with
+ $line = substr($line, $pos + 1);
+ }
+ //If processing headers add a LWSP-char to the front of new line RFC822 section 3.1.1
+ if ($in_headers) {
+ $line = "\t" . $line;
+ }
+ }
+ $lines_out[] = $line;
+
+ //Send the lines to the server
+ foreach ($lines_out as $line_out) {
+ //RFC2821 section 4.5.2
+ if (!empty($line_out) && $line_out[0] === '.') {
+ $line_out = '.' . $line_out;
+ }
+ $this->client_send($line_out . static::LE, 'DATA');
+ }
+ }
+
+ //Message data has been sent, complete the command
+ //Increase timelimit for end of DATA command
+ $savetimelimit = $this->Timelimit;
+ $this->Timelimit *= 2;
+ $result = $this->sendCommand('DATA END', '.', 250);
+ $this->recordLastTransactionID();
+ //Restore timelimit
+ $this->Timelimit = $savetimelimit;
+
+ return $result;
+ }
+
+ /**
+ * Send an SMTP HELO or EHLO command.
+ * Used to identify the sending server to the receiving server.
+ * This makes sure that client and server are in a known state.
+ * Implements RFC 821: HELO <SP> <domain> <CRLF>
+ * and RFC 2821 EHLO.
+ *
+ * @param string $host The host name or IP to connect to
+ *
+ * @return bool
+ */
+ public function hello($host = '')
+ {
+ //Try extended hello first (RFC 2821)
+ return $this->sendHello('EHLO', $host) or $this->sendHello('HELO', $host);
+ }
+
+ /**
+ * Send an SMTP HELO or EHLO command.
+ * Low-level implementation used by hello().
+ *
+ * @param string $hello The HELO string
+ * @param string $host The hostname to say we are
+ *
+ * @return bool
+ *
+ * @see hello()
+ */
+ protected function sendHello($hello, $host)
+ {
+ $noerror = $this->sendCommand($hello, $hello . ' ' . $host, 250);
+ $this->helo_rply = $this->last_reply;
+ if ($noerror) {
+ $this->parseHelloFields($hello);
+ } else {
+ $this->server_caps = null;
+ }
+
+ return $noerror;
+ }
+
+ /**
+ * Parse a reply to HELO/EHLO command to discover server extensions.
+ * In case of HELO, the only parameter that can be discovered is a server name.
+ *
+ * @param string $type `HELO` or `EHLO`
+ */
+ protected function parseHelloFields($type)
+ {
+ $this->server_caps = [];
+ $lines = explode("\n", $this->helo_rply);
+
+ foreach ($lines as $n => $s) {
+ //First 4 chars contain response code followed by - or space
+ $s = trim(substr($s, 4));
+ if (empty($s)) {
+ continue;
+ }
+ $fields = explode(' ', $s);
+ if (!empty($fields)) {
+ if (!$n) {
+ $name = $type;
+ $fields = $fields[0];
+ } else {
+ $name = array_shift($fields);
+ switch ($name) {
+ case 'SIZE':
+ $fields = ($fields ? $fields[0] : 0);
+ break;
+ case 'AUTH':
+ if (!is_array($fields)) {
+ $fields = [];
+ }
+ break;
+ default:
+ $fields = true;
+ }
+ }
+ $this->server_caps[$name] = $fields;
+ }
+ }
+ }
+
+ /**
+ * Send an SMTP MAIL command.
+ * Starts a mail transaction from the email address specified in
+ * $from. Returns true if successful or false otherwise. If True
+ * the mail transaction is started and then one or more recipient
+ * commands may be called followed by a data command.
+ * Implements RFC 821: MAIL <SP> FROM:<reverse-path> <CRLF>.
+ *
+ * @param string $from Source address of this message
+ *
+ * @return bool
+ */
+ public function mail($from)
+ {
+ $useVerp = ($this->do_verp ? ' XVERP' : '');
+
+ return $this->sendCommand(
+ 'MAIL FROM',
+ 'MAIL FROM:<' . $from . '>' . $useVerp,
+ 250
+ );
+ }
+
+ /**
+ * Send an SMTP QUIT command.
+ * Closes the socket if there is no error or the $close_on_error argument is true.
+ * Implements from RFC 821: QUIT <CRLF>.
+ *
+ * @param bool $close_on_error Should the connection close if an error occurs?
+ *
+ * @return bool
+ */
+ public function quit($close_on_error = true)
+ {
+ $noerror = $this->sendCommand('QUIT', 'QUIT', 221);
+ $err = $this->error; //Save any error
+ if ($noerror || $close_on_error) {
+ $this->close();
+ $this->error = $err; //Restore any error from the quit command
+ }
+
+ return $noerror;
+ }
+
+ /**
+ * Send an SMTP RCPT command.
+ * Sets the TO argument to $toaddr.
+ * Returns true if the recipient was accepted false if it was rejected.
+ * Implements from RFC 821: RCPT <SP> TO:<forward-path> <CRLF>.
+ *
+ * @param string $address The address the message is being sent to
+ * @param string $dsn Comma separated list of DSN notifications. NEVER, SUCCESS, FAILURE
+ * or DELAY. If you specify NEVER all other notifications are ignored.
+ *
+ * @return bool
+ */
+ public function recipient($address, $dsn = '')
+ {
+ if (empty($dsn)) {
+ $rcpt = 'RCPT TO:<' . $address . '>';
+ } else {
+ $dsn = strtoupper($dsn);
+ $notify = [];
+
+ if (strpos($dsn, 'NEVER') !== false) {
+ $notify[] = 'NEVER';
+ } else {
+ foreach (['SUCCESS', 'FAILURE', 'DELAY'] as $value) {
+ if (strpos($dsn, $value) !== false) {
+ $notify[] = $value;
+ }
+ }
+ }
+
+ $rcpt = 'RCPT TO:<' . $address . '> NOTIFY=' . implode(',', $notify);
+ }
+
+ return $this->sendCommand(
+ 'RCPT TO',
+ $rcpt,
+ [250, 251]
+ );
+ }
+
+ /**
+ * Send an SMTP RSET command.
+ * Abort any transaction that is currently in progress.
+ * Implements RFC 821: RSET <CRLF>.
+ *
+ * @return bool True on success
+ */
+ public function reset()
+ {
+ return $this->sendCommand('RSET', 'RSET', 250);
+ }
+
+ /**
+ * Send a command to an SMTP server and check its return code.
+ *
+ * @param string $command The command name - not sent to the server
+ * @param string $commandstring The actual command to send
+ * @param int|array $expect One or more expected integer success codes
+ *
+ * @return bool True on success
+ */
+ protected function sendCommand($command, $commandstring, $expect)
+ {
+ if (!$this->connected()) {
+ $this->setError("Called $command without being connected");
+
+ return false;
+ }
+ //Reject line breaks in all commands
+ if ((strpos($commandstring, "\n") !== false) || (strpos($commandstring, "\r") !== false)) {
+ $this->setError("Command '$command' contained line breaks");
+
+ return false;
+ }
+ $this->client_send($commandstring . static::LE, $command);
+
+ $this->last_reply = $this->get_lines();
+ // Fetch SMTP code and possible error code explanation
+ $matches = [];
+ if (preg_match('/^([\d]{3})[ -](?:([\d]\\.[\d]\\.[\d]{1,2}) )?/', $this->last_reply, $matches)) {
+ $code = (int) $matches[1];
+ $code_ex = (count($matches) > 2 ? $matches[2] : null);
+ // Cut off error code from each response line
+ $detail = preg_replace(
+ "/{$code}[ -]" .
+ ($code_ex ? str_replace('.', '\\.', $code_ex) . ' ' : '') . '/m',
+ '',
+ $this->last_reply
+ );
+ } else {
+ // Fall back to simple parsing if regex fails
+ $code = (int) substr($this->last_reply, 0, 3);
+ $code_ex = null;
+ $detail = substr($this->last_reply, 4);
+ }
+
+ $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER);
+
+ if (!in_array($code, (array) $expect, true)) {
+ $this->setError(
+ "$command command failed",
+ $detail,
+ $code,
+ $code_ex
+ );
+ $this->edebug(
+ 'SMTP ERROR: ' . $this->error['error'] . ': ' . $this->last_reply,
+ self::DEBUG_CLIENT
+ );
+
+ return false;
+ }
+
+ $this->setError('');
+
+ return true;
+ }
+
+ /**
+ * Send an SMTP SAML command.
+ * Starts a mail transaction from the email address specified in $from.
+ * Returns true if successful or false otherwise. If True
+ * the mail transaction is started and then one or more recipient
+ * commands may be called followed by a data command. This command
+ * will send the message to the users terminal if they are logged
+ * in and send them an email.
+ * Implements RFC 821: SAML <SP> FROM:<reverse-path> <CRLF>.
+ *
+ * @param string $from The address the message is from
+ *
+ * @return bool
+ */
+ public function sendAndMail($from)
+ {
+ return $this->sendCommand('SAML', "SAML FROM:$from", 250);
+ }
+
+ /**
+ * Send an SMTP VRFY command.
+ *
+ * @param string $name The name to verify
+ *
+ * @return bool
+ */
+ public function verify($name)
+ {
+ return $this->sendCommand('VRFY', "VRFY $name", [250, 251]);
+ }
+
+ /**
+ * Send an SMTP NOOP command.
+ * Used to keep keep-alives alive, doesn't actually do anything.
+ *
+ * @return bool
+ */
+ public function noop()
+ {
+ return $this->sendCommand('NOOP', 'NOOP', 250);
+ }
+
+ /**
+ * Send an SMTP TURN command.
+ * This is an optional command for SMTP that this class does not support.
+ * This method is here to make the RFC821 Definition complete for this class
+ * and _may_ be implemented in future.
+ * Implements from RFC 821: TURN <CRLF>.
+ *
+ * @return bool
+ */
+ public function turn()
+ {
+ $this->setError('The SMTP TURN command is not implemented');
+ $this->edebug('SMTP NOTICE: ' . $this->error['error'], self::DEBUG_CLIENT);
+
+ return false;
+ }
+
+ /**
+ * Send raw data to the server.
+ *
+ * @param string $data The data to send
+ * @param string $command Optionally, the command this is part of, used only for controlling debug output
+ *
+ * @return int|bool The number of bytes sent to the server or false on error
+ */
+ public function client_send($data, $command = '')
+ {
+ //If SMTP transcripts are left enabled, or debug output is posted online
+ //it can leak credentials, so hide credentials in all but lowest level
+ if (self::DEBUG_LOWLEVEL > $this->do_debug &&
+ in_array($command, ['User & Password', 'Username', 'Password'], true)) {
+ $this->edebug('CLIENT -> SERVER: [credentials hidden]', self::DEBUG_CLIENT);
+ } else {
+ $this->edebug('CLIENT -> SERVER: ' . $data, self::DEBUG_CLIENT);
+ }
+ set_error_handler([$this, 'errorHandler']);
+ $result = fwrite($this->smtp_conn, $data);
+ restore_error_handler();
+
+ return $result;
+ }
+
+ /**
+ * Get the latest error.
+ *
+ * @return array
+ */
+ public function getError()
+ {
+ return $this->error;
+ }
+
+ /**
+ * Get SMTP extensions available on the server.
+ *
+ * @return array|null
+ */
+ public function getServerExtList()
+ {
+ return $this->server_caps;
+ }
+
+ /**
+ * Get metadata about the SMTP server from its HELO/EHLO response.
+ * The method works in three ways, dependent on argument value and current state:
+ * 1. HELO/EHLO has not been sent - returns null and populates $this->error.
+ * 2. HELO has been sent -
+ * $name == 'HELO': returns server name
+ * $name == 'EHLO': returns boolean false
+ * $name == any other string: returns null and populates $this->error
+ * 3. EHLO has been sent -
+ * $name == 'HELO'|'EHLO': returns the server name
+ * $name == any other string: if extension $name exists, returns True
+ * or its options (e.g. AUTH mechanisms supported). Otherwise returns False.
+ *
+ * @param string $name Name of SMTP extension or 'HELO'|'EHLO'
+ *
+ * @return string|bool|null
+ */
+ public function getServerExt($name)
+ {
+ if (!$this->server_caps) {
+ $this->setError('No HELO/EHLO was sent');
+
+ return;
+ }
+
+ if (!array_key_exists($name, $this->server_caps)) {
+ if ('HELO' === $name) {
+ return $this->server_caps['EHLO'];
+ }
+ if ('EHLO' === $name || array_key_exists('EHLO', $this->server_caps)) {
+ return false;
+ }
+ $this->setError('HELO handshake was used; No information about server extensions available');
+
+ return;
+ }
+
+ return $this->server_caps[$name];
+ }
+
+ /**
+ * Get the last reply from the server.
+ *
+ * @return string
+ */
+ public function getLastReply()
+ {
+ return $this->last_reply;
+ }
+
+ /**
+ * Read the SMTP server's response.
+ * Either before eof or socket timeout occurs on the operation.
+ * With SMTP we can tell if we have more lines to read if the
+ * 4th character is '-' symbol. If it is a space then we don't
+ * need to read anything else.
+ *
+ * @return string
+ */
+ protected function get_lines()
+ {
+ // If the connection is bad, give up straight away
+ if (!is_resource($this->smtp_conn)) {
+ return '';
+ }
+ $data = '';
+ $endtime = 0;
+ stream_set_timeout($this->smtp_conn, $this->Timeout);
+ if ($this->Timelimit > 0) {
+ $endtime = time() + $this->Timelimit;
+ }
+ $selR = [$this->smtp_conn];
+ $selW = null;
+ while (is_resource($this->smtp_conn) && !feof($this->smtp_conn)) {
+ //Must pass vars in here as params are by reference
+ if (!stream_select($selR, $selW, $selW, $this->Timelimit)) {
+ $this->edebug(
+ 'SMTP -> get_lines(): select timed-out in (' . $this->Timelimit . ' sec)',
+ self::DEBUG_LOWLEVEL
+ );
+ break;
+ }
+ //Deliberate noise suppression - errors are handled afterwards
+ $str = @fgets($this->smtp_conn, self::MAX_REPLY_LENGTH);
+ $this->edebug('SMTP INBOUND: "' . trim($str) . '"', self::DEBUG_LOWLEVEL);
+ $data .= $str;
+ // If response is only 3 chars (not valid, but RFC5321 S4.2 says it must be handled),
+ // or 4th character is a space or a line break char, we are done reading, break the loop.
+ // String array access is a significant micro-optimisation over strlen
+ if (!isset($str[3]) || $str[3] === ' ' || $str[3] === "\r" || $str[3] === "\n") {
+ break;
+ }
+ // Timed-out? Log and break
+ $info = stream_get_meta_data($this->smtp_conn);
+ if ($info['timed_out']) {
+ $this->edebug(
+ 'SMTP -> get_lines(): stream timed-out (' . $this->Timeout . ' sec)',
+ self::DEBUG_LOWLEVEL
+ );
+ break;
+ }
+ // Now check if reads took too long
+ if ($endtime && time() > $endtime) {
+ $this->edebug(
+ 'SMTP -> get_lines(): timelimit reached (' .
+ $this->Timelimit . ' sec)',
+ self::DEBUG_LOWLEVEL
+ );
+ break;
+ }
+ }
+
+ return $data;
+ }
+
+ /**
+ * Enable or disable VERP address generation.
+ *
+ * @param bool $enabled
+ */
+ public function setVerp($enabled = false)
+ {
+ $this->do_verp = $enabled;
+ }
+
+ /**
+ * Get VERP address generation mode.
+ *
+ * @return bool
+ */
+ public function getVerp()
+ {
+ return $this->do_verp;
+ }
+
+ /**
+ * Set error messages and codes.
+ *
+ * @param string $message The error message
+ * @param string $detail Further detail on the error
+ * @param string $smtp_code An associated SMTP error code
+ * @param string $smtp_code_ex Extended SMTP code
+ */
+ protected function setError($message, $detail = '', $smtp_code = '', $smtp_code_ex = '')
+ {
+ $this->error = [
+ 'error' => $message,
+ 'detail' => $detail,
+ 'smtp_code' => $smtp_code,
+ 'smtp_code_ex' => $smtp_code_ex,
+ ];
+ }
+
+ /**
+ * Set debug output method.
+ *
+ * @param string|callable $method The name of the mechanism to use for debugging output, or a callable to handle it
+ */
+ public function setDebugOutput($method = 'echo')
+ {
+ $this->Debugoutput = $method;
+ }
+
+ /**
+ * Get debug output method.
+ *
+ * @return string
+ */
+ public function getDebugOutput()
+ {
+ return $this->Debugoutput;
+ }
+
+ /**
+ * Set debug output level.
+ *
+ * @param int $level
+ */
+ public function setDebugLevel($level = 0)
+ {
+ $this->do_debug = $level;
+ }
+
+ /**
+ * Get debug output level.
+ *
+ * @return int
+ */
+ public function getDebugLevel()
+ {
+ return $this->do_debug;
+ }
+
+ /**
+ * Set SMTP timeout.
+ *
+ * @param int $timeout The timeout duration in seconds
+ */
+ public function setTimeout($timeout = 0)
+ {
+ $this->Timeout = $timeout;
+ }
+
+ /**
+ * Get SMTP timeout.
+ *
+ * @return int
+ */
+ public function getTimeout()
+ {
+ return $this->Timeout;
+ }
+
+ /**
+ * Reports an error number and string.
+ *
+ * @param int $errno The error number returned by PHP
+ * @param string $errmsg The error message returned by PHP
+ * @param string $errfile The file the error occurred in
+ * @param int $errline The line number the error occurred on
+ */
+ protected function errorHandler($errno, $errmsg, $errfile = '', $errline = 0)
+ {
+ $notice = 'Connection failed.';
+ $this->setError(
+ $notice,
+ $errmsg,
+ (string) $errno
+ );
+ $this->edebug(
+ "$notice Error #$errno: $errmsg [$errfile line $errline]",
+ self::DEBUG_CONNECTION
+ );
+ }
+
+ /**
+ * Extract and return the ID of the last SMTP transaction based on
+ * a list of patterns provided in SMTP::$smtp_transaction_id_patterns.
+ * Relies on the host providing the ID in response to a DATA command.
+ * If no reply has been received yet, it will return null.
+ * If no pattern was matched, it will return false.
+ *
+ * @return bool|string|null
+ */
+ protected function recordLastTransactionID()
+ {
+ $reply = $this->getLastReply();
+
+ if (empty($reply)) {
+ $this->last_smtp_transaction_id = null;
+ } else {
+ $this->last_smtp_transaction_id = false;
+ foreach ($this->smtp_transaction_id_patterns as $smtp_transaction_id_pattern) {
+ $matches = [];
+ if (preg_match($smtp_transaction_id_pattern, $reply, $matches)) {
+ $this->last_smtp_transaction_id = trim($matches[1]);
+ break;
+ }
+ }
+ }
+
+ return $this->last_smtp_transaction_id;
+ }
+
+ /**
+ * Get the queue/transaction ID of the last SMTP transaction
+ * If no reply has been received yet, it will return null.
+ * If no pattern was matched, it will return false.
+ *
+ * @return bool|string|null
+ *
+ * @see recordLastTransactionID()
+ */
+ public function getLastTransactionID()
+ {
+ return $this->last_smtp_transaction_id;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/.gitignore b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/.gitignore
new file mode 100644
index 0000000..8a25841
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/.gitignore
@@ -0,0 +1,189 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+
+# User-specific files
+*.suo
+*.user
+*.sln.docstates
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+build/
+bld/
+[Bb]in/
+[Oo]bj/
+
+# Roslyn cache directories
+*.ide/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+#NUNIT
+*.VisualState.xml
+TestResult.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+*_i.c
+*_p.c
+*_i.h
+*.ilk
+*.meta
+*.obj
+*.pch
+*.pdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opensdf
+*.sdf
+*.cachefile
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# JustCode is a .NET coding addin-in
+.JustCode
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# TODO: Comment the next line if you want to checkin your web deploy settings
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# NuGet Packages
+*.nupkg
+# The packages folder can be ignored because of Package Restore
+**/packages/*
+# except build/, which is used as an MSBuild target.
+!**/packages/build/
+# If using the old MSBuild-Integrated Package Restore, uncomment this:
+#!**/packages/repositories.config
+
+# Windows Azure Build Output
+csx/
+*.build.csdef
+
+# Windows Store app package directory
+AppPackages/
+
+# Others
+sql/
+*.Cache
+ClientBin/
+[Ss]tyle[Cc]op.*
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.pfx
+*.publishsettings
+node_modules/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+
+# SQL Server files
+*.mdf
+*.ldf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# Composer
+/vendor
+
+# .vs
+.vs/
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/.travis.yml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/.travis.yml
new file mode 100644
index 0000000..fdc6ff5
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/.travis.yml
@@ -0,0 +1,15 @@
+language: php
+
+php:
+ - 5.6
+ - 7.0
+ - 7.1
+ - 7.2
+ - 7.3
+ - 7.4
+
+before_script:
+ - composer install
+
+script:
+ - vendor/bin/phpunit --coverage-text tests
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/LICENSE b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/LICENSE
new file mode 100644
index 0000000..75a9631
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2015 Rob Janssen
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/README.md b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/README.md
new file mode 100644
index 0000000..3574ae9
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/README.md
@@ -0,0 +1,199 @@
+# ![Logo](https://raw.githubusercontent.com/RobThree/TwoFactorAuth/master/logo.png) PHP library for Two Factor Authentication
+
+[![Build status](https://img.shields.io/travis/RobThree/TwoFactorAuth.svg?style=flat-square)](https://travis-ci.org/RobThree/TwoFactorAuth/) [![Latest Stable Version](https://img.shields.io/packagist/v/robthree/twofactorauth.svg?style=flat-square)](https://packagist.org/packages/robthree/twofactorauth) [![License](https://img.shields.io/packagist/l/robthree/twofactorauth.svg?style=flat-square)](LICENSE) [![Downloads](https://img.shields.io/packagist/dt/robthree/twofactorauth.svg?style=flat-square)](https://packagist.org/packages/robthree/twofactorauth) [![Code Climate](https://img.shields.io/codeclimate/github/RobThree/TwoFactorAuth.svg?style=flat-square)](https://codeclimate.com/github/RobThree/TwoFactorAuth) [![PayPal donate button](http://img.shields.io/badge/paypal-donate-orange.svg?style=flat-square)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=6MB5M2SQLP636 "Keep me off the streets")
+
+PHP library for [two-factor (or multi-factor) authentication](http://en.wikipedia.org/wiki/Multi-factor_authentication) using [TOTP](http://en.wikipedia.org/wiki/Time-based_One-time_Password_Algorithm) and [QR-codes](http://en.wikipedia.org/wiki/QR_code). Inspired by, based on but most importantly an *improvement* on '[PHPGangsta/GoogleAuthenticator](https://github.com/PHPGangsta/GoogleAuthenticator)'. There's a [.Net implementation](https://github.com/RobThree/TwoFactorAuth.Net) of this library as well.
+
+<p align="center">
+<img src="https://raw.githubusercontent.com/RobThree/TwoFactorAuth/master/multifactorauthforeveryone.png">
+</p>
+
+## Requirements
+
+* Tested on PHP 5.6 up to 7.4
+* [cURL](http://php.net/manual/en/book.curl.php) when using the provided `ImageChartsQRCodeProvider` (default), `QRServerProvider` or `QRicketProvider` but you can also provide your own QR-code provider.
+* [random_bytes()](http://php.net/manual/en/function.random-bytes.php), [MCrypt](http://php.net/manual/en/book.mcrypt.php), [OpenSSL](http://php.net/manual/en/book.openssl.php) or [Hash](http://php.net/manual/en/book.hash.php) depending on which built-in RNG you use (TwoFactorAuth will try to 'autodetect' and use the best available); however: feel free to provide your own (CS)RNG.
+
+## Installation
+
+Run the following command:
+
+`php composer.phar require robthree/twofactorauth`
+
+## Quick start
+
+If you want to hit the ground running then have a look at the [demo](demo/demo.php). It's very simple and easy!
+
+## Usage
+
+Here are some code snippets that should help you get started...
+
+````php
+// Create a TwoFactorAuth instance
+$tfa = new RobThree\Auth\TwoFactorAuth('My Company');
+````
+
+The TwoFactorAuth class constructor accepts 7 arguments (all optional):
+
+Argument | Default value | Use
+------------------|---------------|--------------------------------------------------
+`$issuer` | `null` | Will be displayed in the app as issuer name
+`$digits` | `6` | The number of digits the resulting codes will be
+`$period` | `30` | The number of seconds a code will be valid
+`$algorithm` | `sha1` | The algorithm used
+`$qrcodeprovider` | `null` | QR-code provider (more on this later)
+`$rngprovider` | `null` | Random Number Generator provider (more on this later)
+`$timeprovider` | `null` | Time provider (more on this later)
+
+These arguments are all '`write once`'; the class will, for it's lifetime, use these values when generating / calculating codes. The number of digits, the period and algorithm are all set to values Google's Authticator app uses (and supports). You may specify `8` digits, a period of `45` seconds and the `sha256` algorithm but the authenticator app (be it Google's implementation, Authy or any other app) may or may not support these values. Your mileage may vary; keep it on the safe side if you don't control which app your audience uses.
+
+### Step 1: Set up secret shared key
+
+When a user wants to setup two-factor auth (or, more correctly, multi-factor auth) you need to create a secret. This will be your **shared secret**. This secret will need to be entered by the user in their app. This can be done manually, in which case you simply display the secret and have the user type it in the app:
+
+````php
+$secret = $tfa->createSecret();
+````
+
+The `createSecret()` method accepts two arguments: `$bits` (default: `80`) and `$requirecryptosecure` (default: `true`). The former is the number of bits generated for the shared secret. Make sure this argument is a multiple of 8 and, again, keep in mind that not all combinations may be supported by all apps. Google authenticator seems happy with 80 and 160, the default is set to 80 because that's what most sites (that I know of) currently use; however a value of 160 or higher is recommended (see [RFC 4226 - Algorithm Requirements](https://tools.ietf.org/html/rfc4226#section-4)). The latter is used to ensure that the secret is cryptographically secure; if you don't care very much for cryptographically secure secrets you can specify `false` and use a **non**-cryptographically secure RNG provider.
+
+````php
+// Display shared secret
+<p>Please enter the following code in your app: '<?php echo $secret; ?>'</p>
+````
+
+Another, more user-friendly, way to get the shared secret into the app is to generate a [QR-code](http://en.wikipedia.org/wiki/QR_code) which can be scanned by the app. To generate these QR codes you can use any one of the built-in `QRProvider` classes:
+
+1. `ImageChartsQRCodeProvider` (default)
+2. `QRServerProvider`
+3. `QRicketProvider`
+
+...or implement your own provider. To implement your own provider all you need to do is implement the `IQRCodeProvider` interface. You can use the built-in providers mentioned before to serve as an example or read the next chapter in this file. The built-in classes all use a 3rd (e.g. external) party (Image-charts, QRServer and QRicket) for the hard work of generating QR-codes (note: each of these services might at some point not be available or impose limitations to the number of codes generated per day, hour etc.). You could, however, easily use a project like [PHP QR Code](http://phpqrcode.sourceforge.net/) (or one of the [many others](https://packagist.org/search/?q=qr)) to generate your QR-codes without depending on external sources. Later on we'll [demonstrate](#qr-code-providers) how to do this.
+
+The built-in providers all have some provider-specific 'tweaks' you can 'apply'. Some provide support for different colors, others may let you specify the desired image-format etc. What they all have in common is that they return a QR-code as binary blob which, in turn, will be turned into a [data URI](http://en.wikipedia.org/wiki/Data_URI_scheme) by the `TwoFactorAuth` class. This makes it easy for you to display the image without requiring extra 'roundtrips' from browser to server and vice versa.
+
+````php
+// Display QR code to user
+<p>Scan the following image with your app:</p>
+<p><img src="<?php echo $tfa->getQRCodeImageAsDataUri('Bob Ross', $secret); ?>"></p>
+````
+
+When outputting a QR-code you can choose a `$label` for the user (which, when entering a shared secret manually, will have to be chosen by the user). This label may be an empty string or `null`. Also a `$size` may be specified (in pixels, width == height) for which we use a default value of `200`.
+
+### Step 2: Verify secret shared key
+
+When the shared secret is added to the app, the app will be ready to start generating codes which 'expire' each '`$period`' number of seconds. To make sure the secret was entered, or scanned, correctly you need to verify this by having the user enter a generated code. To check if the generated code is valid you call the `verifyCode()` method:
+
+````php
+// Verify code
+$result = $tfa->verifyCode($_SESSION['secret'], $_POST['verification']);
+````
+
+`verifyCode()` will return either `true` (the code was valid) or `false` (the code was invalid; no points for you!). You may need to store `$secret` in a `$_SESSION` or other persistent storage between requests. The `verifyCode()` accepts, aside from `$secret` and `$code`, three more arguments. The first being `$discrepancy`. Since TOTP codes are based on time("slices") it is very important that the server (but also client) have a correct date/time. But because the two *may* differ a bit we usually allow a certain amount of leeway. Because generated codes are valid for a specific period (remember the `$period` argument in the `TwoFactorAuth`'s constructor?) we usually check the period directly before and the period directly after the current time when validating codes. So when the current time is `14:34:21`, which results in a 'current timeslice' of `14:34:00` to `14:34:30` we also calculate/verify the codes for `14:33:30` to `14:34:00` and for `14:34:30` to `14:35:00`. This gives us a 'window' of `14:33:30` to `14:35:00`. The `$discrepancy` argument specifies how many periods (or: timeslices) we check in either direction of the current time. The default `$discrepancy` of `1` results in (max.) 3 period checks: -1, current and +1 period. A `$discrepancy` of `4` would result in a larger window (or: bigger time difference between client and server) of -4, -3, -2, -1, current, +1, +2, +3 and +4 periods.
+
+The second, `$time`, allows you to check a code for a specific point in time. This argument has no real practical use but can be handy for unittesting etc. The default value, `null`, means: use the current time.
+
+The third, `$timeslice`, is an out-argument; the value returned in `$timeslice` is the value of the timeslice that matched the code (if any). This value will be 0 when the code doesn't match and non-zero when the code matches. This value can be stored with the user and can be used to prevent replay-attacks. All you need to do is, on successful login, make sure `$timeslice` is greater than the previously stored timeslice.
+
+### Step 3: Store `$secret` with user and we're done!
+
+Ok, so now the code has been verified and found to be correct. Now we can store the `$secret` with our user in our database (or elsewhere) and whenever the user begins a new session we ask for a code generated by the authentication app of their choice. All we need to do is call `verifyCode()` again with the shared secret and the entered code and we know if the user is legit or not.
+
+Simple as 1-2-3.
+
+All we need is 3 methods and a constructor:
+
+````php
+public function __construct(
+ $issuer = null,
+ $digits = 6,
+ $period = 30,
+ $algorithm = 'sha1',
+ RobThree\Auth\Providers\Qr\IQRCodeProvider $qrcodeprovider = null,
+ RobThree\Auth\Providers\Rng\IRNGProvider $rngprovider = null
+);
+public function createSecret($bits = 80, $requirecryptosecure = true): string;
+public function getQRCodeImageAsDataUri($label, $secret, $size = 200): string;
+public function verifyCode($secret, $code, $discrepancy = 1, $time = null): bool;
+````
+
+### QR-code providers
+
+As mentioned before, this library comes with three 'built-in' QR-code providers. This chapter will touch the subject a bit but most of it should be self-explanatory. The `TwoFactorAuth`-class accepts a `$qrcodeprovider` argument which lets you specify a built-in or custom QR-code provider. All three built-in providers do a simple HTTP request to retrieve an image using cURL and implement the [`IQRCodeProvider`](lib/Providers/Qr/IQRCodeProvider.php) interface which is all you need to implement to write your own QR-code provider.
+
+The default provider is the [`ImageChartsQRCodeProvider`](lib/Providers/Qr/ImageChartsQRCodeProvider.php) which uses the [image-charts.com replacement for Google Image Charts](https://image-charts.com) to render QR-codes. Then we have the [`QRServerProvider`](lib/Providers/Qr/QRServerProvider.php) which uses the [goqr.me API](http://goqr.me/api/doc/create-qr-code/) and finally we have the [`QRicketProvider`](lib/Providers/Qr/QRicketProvider.php) which uses the [QRickit API](http://qrickit.com/qrickit_apps/qrickit_api.php). All three inherit from a common (abstract) baseclass named [`BaseHTTPQRCodeProvider`](lib/Providers/Qr/BaseHTTPQRCodeProvider.php) because all three share the same functionality: retrieve an image from a 3rd party over HTTP. All three classes have constructors that allow you to tweak some settings and most, if not all, arguments should speak for themselves. If you're not sure which values are supported, click the links in this paragraph for documentation on the API's that are utilized by these classes.
+
+If you don't like any of the built-in classes because you don't want to rely on external resources for example or because you're paranoid about sending the TOTP secret to these 3rd parties (which is useless to them since they miss *at least one* other factor in the [MFA process](http://en.wikipedia.org/wiki/Multi-factor_authentication)), feel tree to implement your own. The `IQRCodeProvider` interface couldn't be any simpler. All you need to do is implement 2 methods:
+
+````php
+getMimeType();
+getQRCodeImage($qrtext, $size);
+````
+
+The `getMimeType()` method should return the [MIME type](http://en.wikipedia.org/wiki/Internet_media_type) of the image that is returned by our implementation of `getQRCodeImage()`. In this example it's simply `image/png`. The `getQRCodeImage()` method is passed two arguments: `$qrtext` and `$size`. The latter, `$size`, is simply the width/height in pixels of the image desired by the caller. The first, `$qrtext` is the text that should be encoded in the QR-code. An example of such a text would be:
+
+`otpauth://totp/LABEL:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=ISSUER`
+
+All you need to do is return the QR-code as binary image data and you're done. All parts of the `$qrtext` have been escaped for you (but note: you *may* need to escape the entire `$qrtext` just once more when passing the data to another server as GET-argument).
+
+Let's see if we can use [PHP QR Code](http://phpqrcode.sourceforge.net/) to implement our own, custom, no-3rd-parties-allowed-here, provider. We start with downloading the [required (single) file](https://github.com/t0k4rt/phpqrcode/blob/master/phpqrcode.php) and putting it in the directory where `TwoFactorAuth.php` is located as well. Now let's implement the provider: create another file named `myprovider.php` in the `Providers\Qr` directory and paste in this content:
+
+````php
+<?php
+require_once '../../phpqrcode.php'; // Yeah, we're gonna need that
+
+namespace RobThree\Auth\Providers\Qr;
+
+class MyProvider implements IQRCodeProvider {
+ public function getMimeType() {
+ return 'image/png'; // This provider only returns PNG's
+ }
+
+ public function getQRCodeImage($qrtext, $size) {
+ ob_start(); // 'Catch' QRCode's output
+ QRCode::png($qrtext, null, QR_ECLEVEL_L, 3, 4); // We ignore $size and set it to 3
+ // since phpqrcode doesn't support
+ // a size in pixels...
+ $result = ob_get_contents(); // 'Catch' QRCode's output
+ ob_end_clean(); // Cleanup
+ return $result; // Return image
+ }
+}
+````
+
+That's it. We're done! We've implemented our own provider (with help of PHP QR Code). No more external dependencies, no more unnecessary latencies. Now let's *use* our provider:
+
+````php
+<?php
+$mp = new RobThree\Auth\Providers\Qr\MyProvider();
+$tfa = new RobThree\Auth\TwoFactorAuth('My Company', 6, 30, 'sha1', $mp);
+$secret = $tfa->createSecret();
+?>
+<p><img src="<?php echo $tfa->getQRCodeImageAsDataUri('Bob Ross', $secret); ?>"></p>
+````
+
+Voilà. Couldn't make it any simpler.
+
+### RNG providers
+
+This library also comes with three 'built-in' RNG providers ([Random Number Generator](https://en.wikipedia.org/wiki/Random_number_generation)). The RNG provider generates a number of random bytes and returns these bytes as a string. These values are then used to create the secret. By default (no RNG provider specified) TwoFactorAuth will try to determine the best available RNG provider to use. It will, by default, try to use the [`CSRNGProvider`](lib/Providers/Rng/CSRNGProvider.php) for PHP7+ or the [`MCryptRNGProvider`](lib/Providers/Rng/MCryptRNGProvider.php); if this is not available/supported for any reason it will try to use the [`OpenSSLRNGProvider`](lib/Providers/Rng/OpenSSLRNGProvider.php) and if that is also not available/supported it will try to use the final RNG provider: [`HashRNGProvider`](lib/Providers/Rng/HashRNGProvider.php). Each of these providers use their own method of generating a random sequence of bytes. The first three (`CSRNGProvider`, `OpenSSLRNGProvider` and `MCryptRNGProvider`) return a [cryptographically secure](https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator) sequence of random bytes whereas the `HashRNGProvider` returns a **non-cryptographically secure** sequence.
+
+You can easily implement your own `RNGProvider` by simply implementing the `IRNGProvider` interface. Each of the 'built-in' RNG providers have some constructor arguments that allow you to 'tweak' some of the settings to use when creating the random bytes such as which source to use (`MCryptRNGProvider`) or which hashing algorithm (`HashRNGProvider`). I encourage you to have a look at some of the ['built-in' RNG providers](lib/Providers/Rng) for details and the [`IRNGProvider` interface](lib/Providers/Rng/IRNGProvider.php).
+
+### Time providers
+
+Another set of providers in this library are the Time Providers; this library provides three 'built-in' ones. The default Time Provider used is the [`LocalMachineTimeProvider`](lib/Providers/Time/LocalMachineTimeProvider.php); this provider simply returns the output of `Time()` and is *highly recommended* as default provider. The [`HttpTimeProvider`](lib/Providers/Time/HttpTimeProvider.php) executes a `HEAD` request against a given webserver (default: google.com) and tries to extract the `Date:`-HTTP header and returns it's date. Other url's/domains can be used by specifying the url in the constructor. The final Time Provider is the [`NTPTimeProvider`](lib/Providers/Time/NTPTimeProvider.php) which does an NTP request to a specified NTP server.
+
+You can easily implement your own `TimeProvider` by simply implementing the `ITimeProvider` interface.
+
+As to *why* these Time Providers are implemented: it allows the TwoFactorAuth library to ensure the hosts time is correct (or rather: within a margin). You can use the `ensureCorrectTime()` method to ensure the hosts time is correct. By default this method will compare the hosts time (returned by calling `time()` on the `LocalMachineTimeProvider`) to the default `NTPTimeProvider` and `HttpTimeProvider`. You can pass an array of `ITimeProvider`s to change this and specify the `leniency` (second argument) allowed (default: 5 seconds). The method will throw when the TwoFactorAuth's timeprovider (which can be any `ITimeProvider`, see constructor) differs more than the given amount of seconds from any of the given `ITimeProviders`. We advise to call this method sparingly when relying on 3rd parties (which both the `HttpTimeProvider` and `NTPTimeProvider` do) or, if you need to ensure time is correct on a (very) regular basis to implement an `ITimeProvider` that is more efficient than the 'built-in' ones (like use a GPS signal). The `ensureCorrectTime()` method is mostly to be used to make sure the server is configured correctly.
+
+## Integrations
+
+- [CakePHP 3](https://github.com/andrej-griniuk/cakephp-two-factor-auth)
+
+## License
+
+Licensed under MIT license. See [LICENSE](https://raw.githubusercontent.com/RobThree/TwoFactorAuth/master/LICENSE) for details.
+
+[Logo / icon](http://www.iconmay.com/Simple/Travel_and_Tourism_Part_2/luggage_lock_safety_baggage_keys_cylinder_lock_hotel_travel_tourism_luggage_lock_icon_465) under CC0 1.0 Universal (CC0 1.0) Public Domain Dedication ([Archived page](http://riii.nl/tm7ap))
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/TwoFactorAuth.phpproj b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/TwoFactorAuth.phpproj
new file mode 100644
index 0000000..b7e00d6
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/TwoFactorAuth.phpproj
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Name>TwoFactorAuth</Name>
+ <ProjectGuid>{e569f53a-a604-4579-91ce-4e35b27da47b}</ProjectGuid>
+ <RootNamespace>TwoFactorAuth</RootNamespace>
+ <OutputType>Library</OutputType>
+ <ProjectTypeGuids>{A0786B88-2ADB-4C21-ABE8-AA2D79766269}</ProjectTypeGuids>
+ <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
+ <Server>PHPDev</Server>
+ <PublishEvent>None</PublishEvent>
+ <PHPDevAutoPort>True</PHPDevAutoPort>
+ <PHPDevPort>41315</PHPDevPort>
+ <PHPDevHostName>localhost</PHPDevHostName>
+ <IISProjectUrl>http://localhost:41315/</IISProjectUrl>
+ <Runtime>PHP</Runtime>
+ <RuntimeVersion>7.0</RuntimeVersion>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
+ <IncludeDebugInformation>true</IncludeDebugInformation>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
+ <IncludeDebugInformation>false</IncludeDebugInformation>
+ </PropertyGroup>
+ <ItemGroup>
+ <Compile Include="demo\demo.php" />
+ <Compile Include="demo\loader.php" />
+ <Compile Include="lib\Providers\Qr\BaseHTTPQRCodeProvider.php" />
+ <Compile Include="lib\Providers\Qr\ImageChartsQRCodeProvider.php" />
+ <Compile Include="lib\Providers\Qr\IQRCodeProvider.php" />
+ <Compile Include="lib\Providers\Qr\QRException.php" />
+ <Compile Include="lib\Providers\Qr\QRicketProvider.php" />
+ <Compile Include="lib\Providers\Qr\QRServerProvider.php" />
+ <Compile Include="lib\Providers\Rng\CSRNGProvider.php" />
+ <Compile Include="lib\Providers\Rng\IRNGProvider.php" />
+ <Compile Include="lib\Providers\Rng\MCryptRNGProvider.php" />
+ <Compile Include="lib\Providers\Rng\OpenSSLRNGProvider.php" />
+ <Compile Include="lib\Providers\Rng\HashRNGProvider.php" />
+ <Compile Include="lib\Providers\Rng\RNGException.php" />
+ <Compile Include="lib\Providers\Time\HttpTimeProvider.php" />
+ <Compile Include="lib\Providers\Time\ITimeProvider.php" />
+ <Compile Include="lib\Providers\Time\LocalMachineTimeProvider.php" />
+ <Compile Include="lib\Providers\Time\NTPTimeProvider.php" />
+ <Compile Include="lib\Providers\Time\TimeException.php" />
+ <Compile Include="lib\TwoFactorAuth.php" />
+ <Compile Include=".gitignore" />
+ <Compile Include="README.md" />
+ <Compile Include="lib\TwoFactorAuthException.php" />
+ <Compile Include="tests\TwoFactorAuthTest.php" />
+ </ItemGroup>
+ <ItemGroup>
+ <Folder Include="lib\" />
+ <Folder Include="lib\Providers\" />
+ <Folder Include="lib\Providers\Time\" />
+ <Folder Include="lib\Providers\Qr\" />
+ <Folder Include="lib\Providers\Rng\" />
+ <Folder Include="demo\" />
+ <Folder Include="tests\" />
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include=".travis.yml" />
+ <Content Include="composer.json" />
+ <Content Include="composer.lock" />
+ <Content Include="logo.png" />
+ <Content Include="multifactorauthforeveryone.png" />
+ <Content Include="LICENSE" />
+ <Content Include="phpunit.xml" />
+ </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/TwoFactorAuth.sln b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/TwoFactorAuth.sln
new file mode 100644
index 0000000..df901f6
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/TwoFactorAuth.sln
@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0.30723.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{A0786B88-2ADB-4C21-ABE8-AA2D79766269}") = "TwoFactorAuth", "TwoFactorAuth.phpproj", "{E569F53A-A604-4579-91CE-4E35B27DA47B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {E569F53A-A604-4579-91CE-4E35B27DA47B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E569F53A-A604-4579-91CE-4E35B27DA47B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E569F53A-A604-4579-91CE-4E35B27DA47B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E569F53A-A604-4579-91CE-4E35B27DA47B}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/composer.json b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/composer.json
new file mode 100644
index 0000000..50f8b86
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/composer.json
@@ -0,0 +1,36 @@
+{
+ "name": "robthree/twofactorauth",
+ "description": "Two Factor Authentication",
+ "version": "1.7.0",
+ "type": "library",
+ "keywords": [ "Authentication", "Two Factor Authentication", "Multi Factor Authentication", "TFA", "MFA", "PHP", "Authenticator", "Authy" ],
+ "homepage": "https://github.com/RobThree/TwoFactorAuth",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Rob Janssen",
+ "homepage": "http://robiii.me",
+ "role": "Developer"
+ }
+ ],
+ "support": {
+ "issues": "https://github.com/RobThree/TwoFactorAuth/issues",
+ "source": "https://github.com/RobThree/TwoFactorAuth"
+ },
+ "require": {
+ "php": ">=5.6.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "@stable"
+ },
+ "autoload": {
+ "psr-4": {
+ "RobThree\\Auth\\": "lib"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "RobThree\\Auth\\Test\\": "tests"
+ }
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/composer.lock b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/composer.lock
new file mode 100644
index 0000000..63df937
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/composer.lock
@@ -0,0 +1,980 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "9647de85f54ba6db237f5ff42ff85a1f",
+ "packages": [],
+ "packages-dev": [
+ {
+ "name": "doctrine/instantiator",
+ "version": "1.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/instantiator.git",
+ "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
+ "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3,<8.0-DEV"
+ },
+ "require-dev": {
+ "athletic/athletic": "~0.1.8",
+ "ext-pdo": "*",
+ "ext-phar": "*",
+ "phpunit/phpunit": "~4.0",
+ "squizlabs/php_codesniffer": "~2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "homepage": "http://ocramius.github.com/"
+ }
+ ],
+ "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+ "homepage": "https://github.com/doctrine/instantiator",
+ "keywords": [
+ "constructor",
+ "instantiate"
+ ],
+ "time": "2015-06-14T21:17:01+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-docblock",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+ "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8",
+ "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0"
+ },
+ "suggest": {
+ "dflydev/markdown": "~1.0",
+ "erusev/parsedown": "~1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "phpDocumentor": [
+ "src/"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "mike.vanriel@naenius.com"
+ }
+ ],
+ "time": "2015-02-03T12:10:50+00:00"
+ },
+ {
+ "name": "phpspec/prophecy",
+ "version": "v1.6.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpspec/prophecy.git",
+ "reference": "6c52c2722f8460122f96f86346600e1077ce22cb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/6c52c2722f8460122f96f86346600e1077ce22cb",
+ "reference": "6c52c2722f8460122f96f86346600e1077ce22cb",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.0.2",
+ "php": "^5.3|^7.0",
+ "phpdocumentor/reflection-docblock": "^2.0|^3.0.2",
+ "sebastian/comparator": "^1.1",
+ "sebastian/recursion-context": "^1.0|^2.0"
+ },
+ "require-dev": {
+ "phpspec/phpspec": "^2.0",
+ "phpunit/phpunit": "^4.8 || ^5.6.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.6.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Prophecy\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Konstantin Kudryashov",
+ "email": "ever.zet@gmail.com",
+ "homepage": "http://everzet.com"
+ },
+ {
+ "name": "Marcello Duarte",
+ "email": "marcello.duarte@gmail.com"
+ }
+ ],
+ "description": "Highly opinionated mocking framework for PHP 5.3+",
+ "homepage": "https://github.com/phpspec/prophecy",
+ "keywords": [
+ "Double",
+ "Dummy",
+ "fake",
+ "mock",
+ "spy",
+ "stub"
+ ],
+ "time": "2016-11-21T14:58:47+00:00"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "2.2.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979",
+ "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "phpunit/php-file-iterator": "~1.3",
+ "phpunit/php-text-template": "~1.2",
+ "phpunit/php-token-stream": "~1.3",
+ "sebastian/environment": "^1.3.2",
+ "sebastian/version": "~1.0"
+ },
+ "require-dev": {
+ "ext-xdebug": ">=2.1.4",
+ "phpunit/phpunit": "~4"
+ },
+ "suggest": {
+ "ext-dom": "*",
+ "ext-xdebug": ">=2.2.1",
+ "ext-xmlwriter": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.2.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
+ "time": "2015-10-06T15:47:00+00:00"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "1.4.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5",
+ "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.4.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+ "keywords": [
+ "filesystem",
+ "iterator"
+ ],
+ "time": "2016-10-03T07:40:28+00:00"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "1.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+ "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "time": "2015-06-21T13:50:34+00:00"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "1.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260",
+ "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4|~5"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "time": "2016-05-12T18:03:57+00:00"
+ },
+ {
+ "name": "phpunit/php-token-stream",
+ "version": "1.4.9",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+ "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3b402f65a4cc90abf6e1104e388b896ce209631b",
+ "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.4-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Wrapper around PHP's tokenizer extension.",
+ "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
+ "keywords": [
+ "tokenizer"
+ ],
+ "time": "2016-11-15T14:06:22+00:00"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "4.8.35",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "791b1a67c25af50e230f841ee7a9c6eba507dc87"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/791b1a67c25af50e230f841ee7a9c6eba507dc87",
+ "reference": "791b1a67c25af50e230f841ee7a9c6eba507dc87",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-pcre": "*",
+ "ext-reflection": "*",
+ "ext-spl": "*",
+ "php": ">=5.3.3",
+ "phpspec/prophecy": "^1.3.1",
+ "phpunit/php-code-coverage": "~2.1",
+ "phpunit/php-file-iterator": "~1.4",
+ "phpunit/php-text-template": "~1.2",
+ "phpunit/php-timer": "^1.0.6",
+ "phpunit/phpunit-mock-objects": "~2.3",
+ "sebastian/comparator": "~1.2.2",
+ "sebastian/diff": "~1.2",
+ "sebastian/environment": "~1.3",
+ "sebastian/exporter": "~1.2",
+ "sebastian/global-state": "~1.0",
+ "sebastian/version": "~1.0",
+ "symfony/yaml": "~2.1|~3.0"
+ },
+ "suggest": {
+ "phpunit/php-invoker": "~1.1"
+ },
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.8.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "time": "2017-02-06T05:18:07+00:00"
+ },
+ {
+ "name": "phpunit/phpunit-mock-objects",
+ "version": "2.3.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
+ "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983",
+ "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.0.2",
+ "php": ">=5.3.3",
+ "phpunit/php-text-template": "~1.2",
+ "sebastian/exporter": "~1.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.4"
+ },
+ "suggest": {
+ "ext-soap": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.3.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Mock Object library for PHPUnit",
+ "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
+ "keywords": [
+ "mock",
+ "xunit"
+ ],
+ "time": "2015-10-02T06:51:40+00:00"
+ },
+ {
+ "name": "sebastian/comparator",
+ "version": "1.2.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
+ "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "sebastian/diff": "~1.2",
+ "sebastian/exporter": "~1.2 || ~2.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "http://www.github.com/sebastianbergmann/comparator",
+ "keywords": [
+ "comparator",
+ "compare",
+ "equality"
+ ],
+ "time": "2017-01-29T09:50:25+00:00"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "1.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e",
+ "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.8"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.4-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "https://github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff"
+ ],
+ "time": "2015-12-08T07:14:41+00:00"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "1.3.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea",
+ "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.3 || ^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8 || ^5.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.3.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "http://www.github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
+ "time": "2016-08-18T05:49:44+00:00"
+ },
+ {
+ "name": "sebastian/exporter",
+ "version": "1.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4",
+ "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "sebastian/recursion-context": "~1.0"
+ },
+ "require-dev": {
+ "ext-mbstring": "*",
+ "phpunit/phpunit": "~4.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.3.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "http://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
+ "time": "2016-06-17T09:04:28+00:00"
+ },
+ {
+ "name": "sebastian/global-state",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
+ "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.2"
+ },
+ "suggest": {
+ "ext-uopz": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Snapshotting of global state",
+ "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
+ "time": "2015-10-12T03:26:01+00:00"
+ },
+ {
+ "name": "sebastian/recursion-context",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "913401df809e99e4f47b27cdd781f4a258d58791"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791",
+ "reference": "913401df809e99e4f47b27cdd781f4a258d58791",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+ "time": "2015-11-11T19:50:13+00:00"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "1.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
+ "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
+ "shasum": ""
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "time": "2015-06-21T13:59:46+00:00"
+ },
+ {
+ "name": "symfony/yaml",
+ "version": "v2.8.17",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/yaml.git",
+ "reference": "322a8c2dfbca15ad6b1b27e182899f98ec0e0153"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/322a8c2dfbca15ad6b1b27e182899f98ec0e0153",
+ "reference": "322a8c2dfbca15ad6b1b27e182899f98ec0e0153",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.9"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.8-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Yaml\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Yaml Component",
+ "homepage": "https://symfony.com",
+ "time": "2017-01-21T16:40:50+00:00"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": {
+ "phpunit/phpunit": 0
+ },
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": {
+ "php": ">=5.3.0"
+ },
+ "platform-dev": []
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/demo/demo.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/demo/demo.php
new file mode 100644
index 0000000..996dd92
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/demo/demo.php
@@ -0,0 +1,35 @@
+<!doctype html>
+<html>
+<head>
+ <title>Demo</title>
+</head>
+<body>
+ <ol>
+ <?php
+ require_once 'loader.php';
+ Loader::register('../lib','RobThree\\Auth');
+
+ use \RobThree\Auth\TwoFactorAuth;
+
+ $tfa = new TwoFactorAuth('MyApp');
+
+ echo '<li>First create a secret and associate it with a user';
+ $secret = $tfa->createSecret(160); // Though the default is an 80 bits secret (for backwards compatibility reasons) we recommend creating 160+ bits secrets (see RFC 4226 - Algorithm Requirements)
+ echo '<li>Next create a QR code and let the user scan it:<br><img src="' . $tfa->getQRCodeImageAsDataUri('My label', $secret) . '"><br>...or display the secret to the user for manual entry: ' . chunk_split($secret, 4, ' ');
+ $code = $tfa->getCode($secret);
+ echo '<li>Next, have the user verify the code; at this time the code displayed by a 2FA-app would be: <span style="color:#00c">' . $code . '</span> (but that changes periodically)';
+ echo '<li>When the code checks out, 2FA can be / is enabled; store (encrypted?) secret with user and have the user verify a code each time a new session is started.';
+ echo '<li>When aforementioned code (' . $code . ') was entered, the result would be: ' . (($tfa->verifyCode($secret, $code) === true) ? '<span style="color:#0c0">OK</span>' : '<span style="color:#c00">FAIL</span>');
+ ?>
+ </ol>
+ <p>Note: Make sure your server-time is <a href="http://en.wikipedia.org/wiki/Network_Time_Protocol">NTP-synced</a>! Depending on the $discrepancy allowed your time cannot drift too much from the users' time!</p>
+ <?php
+ try {
+ $tfa->ensureCorrectTime();
+ echo 'Your hosts time seems to be correct / within margin';
+ } catch (RobThree\Auth\TwoFactorAuthException $ex) {
+ echo '<b>Warning:</b> Your hosts time seems to be off: ' . $ex->getMessage();
+ }
+ ?>
+</body>
+</html>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/demo/loader.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/demo/loader.php
new file mode 100644
index 0000000..208f24d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/demo/loader.php
@@ -0,0 +1,50 @@
+<?php
+
+//http://www.leaseweblabs.com/2014/04/psr-0-psr-4-autoloading-classes-php/
+class Loader
+{
+ protected static $parentPath = null;
+ protected static $paths = null;
+ protected static $files = null;
+ protected static $nsChar = '\\';
+ protected static $initialized = false;
+
+ protected static function initialize()
+ {
+ if (static::$initialized) return;
+ static::$initialized = true;
+ static::$parentPath = __FILE__;
+ for ($i=substr_count(get_class(), static::$nsChar);$i>=0;$i--) {
+ static::$parentPath = dirname(static::$parentPath);
+ }
+ static::$paths = array();
+ static::$files = array(__FILE__);
+ }
+
+ public static function register($path,$namespace) {
+ if (!static::$initialized) static::initialize();
+ static::$paths[$namespace] = trim($path,DIRECTORY_SEPARATOR);
+ }
+
+ public static function load($class) {
+ if (class_exists($class,false)) return;
+ if (!static::$initialized) static::initialize();
+
+ foreach (static::$paths as $namespace => $path) {
+ if (!$namespace || $namespace.static::$nsChar === substr($class, 0, strlen($namespace.static::$nsChar))) {
+
+ $fileName = substr($class,strlen($namespace.static::$nsChar)-1);
+ $fileName = str_replace(static::$nsChar, DIRECTORY_SEPARATOR, ltrim($fileName,static::$nsChar));
+ $fileName = static::$parentPath.DIRECTORY_SEPARATOR.$path.DIRECTORY_SEPARATOR.$fileName.'.php';
+
+ if (file_exists($fileName)) {
+ include $fileName;
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+}
+
+spl_autoload_register(array('Loader', 'load'));
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/BaseHTTPQRCodeProvider.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/BaseHTTPQRCodeProvider.php
new file mode 100644
index 0000000..5cb3add
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/BaseHTTPQRCodeProvider.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace RobThree\Auth\Providers\Qr;
+
+abstract class BaseHTTPQRCodeProvider implements IQRCodeProvider
+{
+ protected $verifyssl;
+
+ protected function getContent($url)
+ {
+ $curlhandle = curl_init();
+
+ curl_setopt_array($curlhandle, array(
+ CURLOPT_URL => $url,
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_CONNECTTIMEOUT => 10,
+ CURLOPT_DNS_CACHE_TIMEOUT => 10,
+ CURLOPT_TIMEOUT => 10,
+ CURLOPT_SSL_VERIFYPEER => $this->verifyssl,
+ CURLOPT_USERAGENT => 'TwoFactorAuth'
+ ));
+ $data = curl_exec($curlhandle);
+
+ curl_close($curlhandle);
+ return $data;
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/IQRCodeProvider.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/IQRCodeProvider.php
new file mode 100644
index 0000000..83ed67b
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/IQRCodeProvider.php
@@ -0,0 +1,9 @@
+<?php
+
+namespace RobThree\Auth\Providers\Qr;
+
+interface IQRCodeProvider
+{
+ public function getQRCodeImage($qrtext, $size);
+ public function getMimeType();
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/ImageChartsQRCodeProvider.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/ImageChartsQRCodeProvider.php
new file mode 100644
index 0000000..cc094c3
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/ImageChartsQRCodeProvider.php
@@ -0,0 +1,39 @@
+<?php
+
+namespace RobThree\Auth\Providers\Qr;
+
+// https://image-charts.com
+class ImageChartsQRCodeProvider extends BaseHTTPQRCodeProvider
+{
+ public $errorcorrectionlevel;
+ public $margin;
+
+ function __construct($verifyssl = false, $errorcorrectionlevel = 'L', $margin = 1)
+ {
+ if (!is_bool($verifyssl))
+ throw new \QRException('VerifySSL must be bool');
+
+ $this->verifyssl = $verifyssl;
+
+ $this->errorcorrectionlevel = $errorcorrectionlevel;
+ $this->margin = $margin;
+ }
+
+ public function getMimeType()
+ {
+ return 'image/png';
+ }
+
+ public function getQRCodeImage($qrtext, $size)
+ {
+ return $this->getContent($this->getUrl($qrtext, $size));
+ }
+
+ public function getUrl($qrtext, $size)
+ {
+ return 'https://image-charts.com/chart?cht=qr'
+ . '&chs=' . ceil($size/2) . 'x' . ceil($size/2)
+ . '&chld=' . $this->errorcorrectionlevel . '|' . $this->margin
+ . '&chl=' . rawurlencode($qrtext);
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/QRException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/QRException.php
new file mode 100644
index 0000000..c28e829
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/QRException.php
@@ -0,0 +1,5 @@
+<?php
+
+use RobThree\Auth\TwoFactorAuthException;
+
+class QRException extends TwoFactorAuthException {}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/QRServerProvider.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/QRServerProvider.php
new file mode 100644
index 0000000..928b87b
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/QRServerProvider.php
@@ -0,0 +1,71 @@
+<?php
+
+namespace RobThree\Auth\Providers\Qr;
+
+// http://goqr.me/api/doc/create-qr-code/
+class QRServerProvider extends BaseHTTPQRCodeProvider
+{
+ public $errorcorrectionlevel;
+ public $margin;
+ public $qzone;
+ public $bgcolor;
+ public $color;
+ public $format;
+
+ function __construct($verifyssl = false, $errorcorrectionlevel = 'L', $margin = 4, $qzone = 1, $bgcolor = 'ffffff', $color = '000000', $format = 'png')
+ {
+ if (!is_bool($verifyssl))
+ throw new QRException('VerifySSL must be bool');
+
+ $this->verifyssl = $verifyssl;
+
+ $this->errorcorrectionlevel = $errorcorrectionlevel;
+ $this->margin = $margin;
+ $this->qzone = $qzone;
+ $this->bgcolor = $bgcolor;
+ $this->color = $color;
+ $this->format = $format;
+ }
+
+ public function getMimeType()
+ {
+ switch (strtolower($this->format))
+ {
+ case 'png':
+ return 'image/png';
+ case 'gif':
+ return 'image/gif';
+ case 'jpg':
+ case 'jpeg':
+ return 'image/jpeg';
+ case 'svg':
+ return 'image/svg+xml';
+ case 'eps':
+ return 'application/postscript';
+ }
+ throw new \QRException(sprintf('Unknown MIME-type: %s', $this->format));
+ }
+
+ public function getQRCodeImage($qrtext, $size)
+ {
+ return $this->getContent($this->getUrl($qrtext, $size));
+ }
+
+ private function decodeColor($value)
+ {
+ return vsprintf('%d-%d-%d', sscanf($value, "%02x%02x%02x"));
+ }
+
+ public function getUrl($qrtext, $size)
+ {
+ return 'https://api.qrserver.com/v1/create-qr-code/'
+ . '?size=' . $size . 'x' . $size
+ . '&ecc=' . strtoupper($this->errorcorrectionlevel)
+ . '&margin=' . $this->margin
+ . '&qzone=' . $this->qzone
+ . '&bgcolor=' . $this->decodeColor($this->bgcolor)
+ . '&color=' . $this->decodeColor($this->color)
+ . '&format=' . strtolower($this->format)
+ . '&data=' . rawurlencode($qrtext);
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/QRicketProvider.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/QRicketProvider.php
new file mode 100644
index 0000000..59e27cc
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/QRicketProvider.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace RobThree\Auth\Providers\Qr;
+
+// http://qrickit.com/qrickit_apps/qrickit_api.php
+class QRicketProvider extends BaseHTTPQRCodeProvider
+{
+ public $errorcorrectionlevel;
+ public $margin;
+ public $qzone;
+ public $bgcolor;
+ public $color;
+ public $format;
+
+ function __construct($errorcorrectionlevel = 'L', $bgcolor = 'ffffff', $color = '000000', $format = 'p')
+ {
+ $this->verifyssl = false;
+
+ $this->errorcorrectionlevel = $errorcorrectionlevel;
+ $this->bgcolor = $bgcolor;
+ $this->color = $color;
+ $this->format = $format;
+ }
+
+ public function getMimeType()
+ {
+ switch (strtolower($this->format))
+ {
+ case 'p':
+ return 'image/png';
+ case 'g':
+ return 'image/gif';
+ case 'j':
+ return 'image/jpeg';
+ }
+ throw new \QRException(sprintf('Unknown MIME-type: %s', $this->format));
+ }
+
+ public function getQRCodeImage($qrtext, $size)
+ {
+ return $this->getContent($this->getUrl($qrtext, $size));
+ }
+
+ public function getUrl($qrtext, $size)
+ {
+ return 'http://qrickit.com/api/qr'
+ . '?qrsize=' . $size
+ . '&e=' . strtolower($this->errorcorrectionlevel)
+ . '&bgdcolor=' . $this->bgcolor
+ . '&fgdcolor=' . $this->color
+ . '&t=' . strtolower($this->format)
+ . '&d=' . rawurlencode($qrtext);
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Rng/CSRNGProvider.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Rng/CSRNGProvider.php
new file mode 100644
index 0000000..8dba7fc
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Rng/CSRNGProvider.php
@@ -0,0 +1,14 @@
+<?php
+
+namespace RobThree\Auth\Providers\Rng;
+
+class CSRNGProvider implements IRNGProvider
+{
+ public function getRandomBytes($bytecount) {
+ return random_bytes($bytecount); // PHP7+
+ }
+
+ public function isCryptographicallySecure() {
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Rng/HashRNGProvider.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Rng/HashRNGProvider.php
new file mode 100644
index 0000000..eb42577
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Rng/HashRNGProvider.php
@@ -0,0 +1,28 @@
+<?php
+namespace RobThree\Auth\Providers\Rng;
+
+class HashRNGProvider implements IRNGProvider
+{
+ private $algorithm;
+
+ function __construct($algorithm = 'sha256' ) {
+ $algos = array_values(hash_algos());
+ if (!in_array($algorithm, $algos, true))
+ throw new \RNGException('Unsupported algorithm specified');
+ $this->algorithm = $algorithm;
+ }
+
+ public function getRandomBytes($bytecount) {
+ $result = '';
+ $hash = mt_rand();
+ for ($i = 0; $i < $bytecount; $i++) {
+ $hash = hash($this->algorithm, $hash.mt_rand(), true);
+ $result .= $hash[mt_rand(0, strlen($hash)-1)];
+ }
+ return $result;
+ }
+
+ public function isCryptographicallySecure() {
+ return false;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Rng/IRNGProvider.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Rng/IRNGProvider.php
new file mode 100644
index 0000000..6be2800
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Rng/IRNGProvider.php
@@ -0,0 +1,9 @@
+<?php
+
+namespace RobThree\Auth\Providers\Rng;
+
+interface IRNGProvider
+{
+ public function getRandomBytes($bytecount);
+ public function isCryptographicallySecure();
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Rng/MCryptRNGProvider.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Rng/MCryptRNGProvider.php
new file mode 100644
index 0000000..0eeab2c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Rng/MCryptRNGProvider.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace RobThree\Auth\Providers\Rng;
+
+class MCryptRNGProvider implements IRNGProvider
+{
+ private $source;
+
+ function __construct($source = MCRYPT_DEV_URANDOM) {
+ $this->source = $source;
+ }
+
+ public function getRandomBytes($bytecount) {
+ $result = @mcrypt_create_iv($bytecount, $this->source);
+ if ($result === false)
+ throw new \RNGException('mcrypt_create_iv returned an invalid value');
+ return $result;
+ }
+
+ public function isCryptographicallySecure() {
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Rng/OpenSSLRNGProvider.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Rng/OpenSSLRNGProvider.php
new file mode 100644
index 0000000..dc66c64
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Rng/OpenSSLRNGProvider.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace RobThree\Auth\Providers\Rng;
+
+class OpenSSLRNGProvider implements IRNGProvider
+{
+ private $requirestrong;
+
+ function __construct($requirestrong = true) {
+ $this->requirestrong = $requirestrong;
+ }
+
+ public function getRandomBytes($bytecount) {
+ $result = openssl_random_pseudo_bytes($bytecount, $crypto_strong);
+ if ($this->requirestrong && ($crypto_strong === false))
+ throw new \RNGException('openssl_random_pseudo_bytes returned non-cryptographically strong value');
+ if ($result === false)
+ throw new \RNGException('openssl_random_pseudo_bytes returned an invalid value');
+ return $result;
+ }
+
+ public function isCryptographicallySecure() {
+ return $this->requirestrong;
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Rng/RNGException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Rng/RNGException.php
new file mode 100644
index 0000000..eb5e913
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Rng/RNGException.php
@@ -0,0 +1,5 @@
+<?php
+
+use RobThree\Auth\TwoFactorAuthException;
+
+class RNGException extends TwoFactorAuthException {}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Time/HttpTimeProvider.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Time/HttpTimeProvider.php
new file mode 100644
index 0000000..8e7806e
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Time/HttpTimeProvider.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace RobThree\Auth\Providers\Time;
+
+/**
+ * Takes the time from any webserver by doing a HEAD request on the specified URL and extracting the 'Date:' header
+ */
+class HttpTimeProvider implements ITimeProvider
+{
+ public $url;
+ public $options;
+ public $expectedtimeformat;
+
+ function __construct($url = 'https://google.com', $expectedtimeformat = 'D, d M Y H:i:s O+', array $options = null)
+ {
+ $this->url = $url;
+ $this->expectedtimeformat = $expectedtimeformat;
+ $this->options = $options;
+ if ($this->options === null) {
+ $this->options = array(
+ 'http' => array(
+ 'method' => 'HEAD',
+ 'follow_location' => false,
+ 'ignore_errors' => true,
+ 'max_redirects' => 0,
+ 'request_fulluri' => true,
+ 'header' => array(
+ 'Connection: close',
+ 'User-agent: TwoFactorAuth HttpTimeProvider (https://github.com/RobThree/TwoFactorAuth)',
+ 'Cache-Control: no-cache'
+ )
+ )
+ );
+ }
+ }
+
+ public function getTime() {
+ try {
+ $context = stream_context_create($this->options);
+ $fd = fopen($this->url, 'rb', false, $context);
+ $headers = stream_get_meta_data($fd);
+ fclose($fd);
+
+ foreach ($headers['wrapper_data'] as $h) {
+ if (strcasecmp(substr($h, 0, 5), 'Date:') === 0)
+ return \DateTime::createFromFormat($this->expectedtimeformat, trim(substr($h,5)))->getTimestamp();
+ }
+ throw new \TimeException(sprintf('Unable to retrieve time from %s (Invalid or no "Date:" header found)', $this->url));
+ }
+ catch (Exception $ex) {
+ throw new \TimeException(sprintf('Unable to retrieve time from %s (%s)', $this->url, $ex->getMessage()));
+ }
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Time/ITimeProvider.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Time/ITimeProvider.php
new file mode 100644
index 0000000..a3b87a2
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Time/ITimeProvider.php
@@ -0,0 +1,8 @@
+<?php
+
+namespace RobThree\Auth\Providers\Time;
+
+interface ITimeProvider
+{
+ public function getTime();
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Time/LocalMachineTimeProvider.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Time/LocalMachineTimeProvider.php
new file mode 100644
index 0000000..572cedc
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Time/LocalMachineTimeProvider.php
@@ -0,0 +1,9 @@
+<?php
+
+namespace RobThree\Auth\Providers\Time;
+
+class LocalMachineTimeProvider implements ITimeProvider {
+ public function getTime() {
+ return time();
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Time/NTPTimeProvider.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Time/NTPTimeProvider.php
new file mode 100644
index 0000000..d69a3a6
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Time/NTPTimeProvider.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace RobThree\Auth\Providers\Time;
+
+/**
+ * Takes the time from any NTP server
+ */
+class NTPTimeProvider implements ITimeProvider
+{
+ public $host;
+ public $port;
+ public $timeout;
+
+ function __construct($host = 'time.google.com', $port = 123, $timeout = 1)
+ {
+ $this->host = $host;
+
+ if (!is_int($port) || $port <= 0 || $port > 65535)
+ throw new \TimeException('Port must be 0 < port < 65535');
+ $this->port = $port;
+
+ if (!is_int($timeout) || $timeout < 0)
+ throw new \TimeException('Timeout must be >= 0');
+ $this->timeout = $timeout;
+ }
+
+ public function getTime() {
+ try {
+ /* Create a socket and connect to NTP server */
+ $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
+ socket_set_option($sock, SOL_SOCKET, SO_RCVTIMEO, ['sec' => $this->timeout, 'usec' => 0]);
+ socket_connect($sock, $this->host, $this->port);
+
+ /* Send request */
+ $msg = "\010" . str_repeat("\0", 47);
+ socket_send($sock, $msg, strlen($msg), 0);
+
+ /* Receive response and close socket */
+ if (socket_recv($sock, $recv, 48, MSG_WAITALL) === false)
+ throw new \Exception(socket_strerror(socket_last_error($sock)));
+ socket_close($sock);
+
+ /* Interpret response */
+ $data = unpack('N12', $recv);
+ $timestamp = sprintf('%u', $data[9]);
+
+ /* NTP is number of seconds since 0000 UT on 1 January 1900 Unix time is seconds since 0000 UT on 1 January 1970 */
+ return $timestamp - 2208988800;
+ }
+ catch (Exception $ex) {
+ throw new \TimeException(sprintf('Unable to retrieve time from %s (%s)', $this->host, $ex->getMessage()));
+ }
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Time/TimeException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Time/TimeException.php
new file mode 100644
index 0000000..8de544d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Time/TimeException.php
@@ -0,0 +1,5 @@
+<?php
+
+use RobThree\Auth\TwoFactorAuthException;
+
+class TimeException extends TwoFactorAuthException {}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/TwoFactorAuth.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/TwoFactorAuth.php
new file mode 100644
index 0000000..7bc067d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/TwoFactorAuth.php
@@ -0,0 +1,256 @@
+<?php
+namespace RobThree\Auth;
+
+use RobThree\Auth\Providers\Qr\IQRCodeProvider;
+use RobThree\Auth\Providers\Rng\IRNGProvider;
+use RobThree\Auth\Providers\Time\ITimeProvider;
+
+// Based on / inspired by: https://github.com/PHPGangsta/GoogleAuthenticator
+// Algorithms, digits, period etc. explained: https://github.com/google/google-authenticator/wiki/Key-Uri-Format
+class TwoFactorAuth
+{
+ private $algorithm;
+ private $period;
+ private $digits;
+ private $issuer;
+ private $qrcodeprovider = null;
+ private $rngprovider = null;
+ private $timeprovider = null;
+ private static $_base32dict = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=';
+ private static $_base32;
+ private static $_base32lookup = array();
+ private static $_supportedalgos = array('sha1', 'sha256', 'sha512', 'md5');
+
+ function __construct($issuer = null, $digits = 6, $period = 30, $algorithm = 'sha1', IQRCodeProvider $qrcodeprovider = null, IRNGProvider $rngprovider = null, ITimeProvider $timeprovider = null)
+ {
+ $this->issuer = $issuer;
+ if (!is_int($digits) || $digits <= 0)
+ throw new TwoFactorAuthException('Digits must be int > 0');
+ $this->digits = $digits;
+
+ if (!is_int($period) || $period <= 0)
+ throw new TwoFactorAuthException('Period must be int > 0');
+ $this->period = $period;
+
+ $algorithm = strtolower(trim($algorithm));
+ if (!in_array($algorithm, self::$_supportedalgos))
+ throw new TwoFactorAuthException('Unsupported algorithm: ' . $algorithm);
+ $this->algorithm = $algorithm;
+ $this->qrcodeprovider = $qrcodeprovider;
+ $this->rngprovider = $rngprovider;
+ $this->timeprovider = $timeprovider;
+
+ self::$_base32 = str_split(self::$_base32dict);
+ self::$_base32lookup = array_flip(self::$_base32);
+ }
+
+ /**
+ * Create a new secret
+ */
+ public function createSecret($bits = 80, $requirecryptosecure = true)
+ {
+ $secret = '';
+ $bytes = ceil($bits / 5); //We use 5 bits of each byte (since we have a 32-character 'alphabet' / BASE32)
+ $rngprovider = $this->getRngprovider();
+ if ($requirecryptosecure && !$rngprovider->isCryptographicallySecure())
+ throw new TwoFactorAuthException('RNG provider is not cryptographically secure');
+ $rnd = $rngprovider->getRandomBytes($bytes);
+ for ($i = 0; $i < $bytes; $i++)
+ $secret .= self::$_base32[ord($rnd[$i]) & 31]; //Mask out left 3 bits for 0-31 values
+ return $secret;
+ }
+
+ /**
+ * Calculate the code with given secret and point in time
+ */
+ public function getCode($secret, $time = null)
+ {
+ $secretkey = $this->base32Decode($secret);
+
+ $timestamp = "\0\0\0\0" . pack('N*', $this->getTimeSlice($this->getTime($time))); // Pack time into binary string
+ $hashhmac = hash_hmac($this->algorithm, $timestamp, $secretkey, true); // Hash it with users secret key
+ $hashpart = substr($hashhmac, ord(substr($hashhmac, -1)) & 0x0F, 4); // Use last nibble of result as index/offset and grab 4 bytes of the result
+ $value = unpack('N', $hashpart); // Unpack binary value
+ $value = $value[1] & 0x7FFFFFFF; // Drop MSB, keep only 31 bits
+
+ return str_pad($value % pow(10, $this->digits), $this->digits, '0', STR_PAD_LEFT);
+ }
+
+ /**
+ * Check if the code is correct. This will accept codes starting from ($discrepancy * $period) sec ago to ($discrepancy * period) sec from now
+ */
+ public function verifyCode($secret, $code, $discrepancy = 1, $time = null, &$timeslice = 0)
+ {
+ $timetamp = $this->getTime($time);
+
+ $timeslice = 0;
+
+ // To keep safe from timing-attacks we iterate *all* possible codes even though we already may have
+ // verified a code is correct. We use the timeslice variable to hold either 0 (no match) or the timeslice
+ // of the match. Each iteration we either set the timeslice variable to the timeslice of the match
+ // or set the value to itself. This is an effort to maintain constant execution time for the code.
+ for ($i = -$discrepancy; $i <= $discrepancy; $i++) {
+ $ts = $timetamp + ($i * $this->period);
+ $slice = $this->getTimeSlice($ts);
+ $timeslice = $this->codeEquals($this->getCode($secret, $ts), $code) ? $slice : $timeslice;
+ }
+
+ return $timeslice > 0;
+ }
+
+ /**
+ * Timing-attack safe comparison of 2 codes (see http://blog.ircmaxell.com/2014/11/its-all-about-time.html)
+ */
+ private function codeEquals($safe, $user) {
+ if (function_exists('hash_equals')) {
+ return hash_equals($safe, $user);
+ }
+ // In general, it's not possible to prevent length leaks. So it's OK to leak the length. The important part is that
+ // we don't leak information about the difference of the two strings.
+ if (strlen($safe)===strlen($user)) {
+ $result = 0;
+ for ($i = 0; $i < strlen($safe); $i++)
+ $result |= (ord($safe[$i]) ^ ord($user[$i]));
+ return $result === 0;
+ }
+ return false;
+ }
+
+ /**
+ * Get data-uri of QRCode
+ */
+ public function getQRCodeImageAsDataUri($label, $secret, $size = 200)
+ {
+ if (!is_int($size) || $size <= 0)
+ throw new TwoFactorAuthException('Size must be int > 0');
+
+ $qrcodeprovider = $this->getQrCodeProvider();
+ return 'data:'
+ . $qrcodeprovider->getMimeType()
+ . ';base64,'
+ . base64_encode($qrcodeprovider->getQRCodeImage($this->getQRText($label, $secret), $size));
+ }
+
+ /**
+ * Compare default timeprovider with specified timeproviders and ensure the time is within the specified number of seconds (leniency)
+ */
+ public function ensureCorrectTime(array $timeproviders = null, $leniency = 5)
+ {
+ if ($timeproviders != null && !is_array($timeproviders))
+ throw new TwoFactorAuthException('No timeproviders specified');
+
+ if ($timeproviders == null)
+ $timeproviders = array(
+ new Providers\Time\NTPTimeProvider(),
+ new Providers\Time\HttpTimeProvider()
+ );
+
+ // Get default time provider
+ $timeprovider = $this->getTimeProvider();
+
+ // Iterate specified time providers
+ foreach ($timeproviders as $t) {
+ if (!($t instanceof ITimeProvider))
+ throw new TwoFactorAuthException('Object does not implement ITimeProvider');
+
+ // Get time from default time provider and compare to specific time provider and throw if time difference is more than specified number of seconds leniency
+ if (abs($timeprovider->getTime() - $t->getTime()) > $leniency)
+ throw new TwoFactorAuthException(sprintf('Time for timeprovider is off by more than %d seconds when compared to %s', $leniency, get_class($t)));
+ }
+ }
+
+ private function getTime($time)
+ {
+ return ($time === null) ? $this->getTimeProvider()->getTime() : $time;
+ }
+
+ private function getTimeSlice($time = null, $offset = 0)
+ {
+ return (int)floor($time / $this->period) + ($offset * $this->period);
+ }
+
+ /**
+ * Builds a string to be encoded in a QR code
+ */
+ public function getQRText($label, $secret)
+ {
+ return 'otpauth://totp/' . rawurlencode($label)
+ . '?secret=' . rawurlencode($secret)
+ . '&issuer=' . rawurlencode($this->issuer)
+ . '&period=' . intval($this->period)
+ . '&algorithm=' . rawurlencode(strtoupper($this->algorithm))
+ . '&digits=' . intval($this->digits);
+ }
+
+ private function base32Decode($value)
+ {
+ if (strlen($value)==0) return '';
+
+ if (preg_match('/[^'.preg_quote(self::$_base32dict).']/', $value) !== 0)
+ throw new TwoFactorAuthException('Invalid base32 string');
+
+ $buffer = '';
+ foreach (str_split($value) as $char)
+ {
+ if ($char !== '=')
+ $buffer .= str_pad(decbin(self::$_base32lookup[$char]), 5, 0, STR_PAD_LEFT);
+ }
+ $length = strlen($buffer);
+ $blocks = trim(chunk_split(substr($buffer, 0, $length - ($length % 8)), 8, ' '));
+
+ $output = '';
+ foreach (explode(' ', $blocks) as $block)
+ $output .= chr(bindec(str_pad($block, 8, 0, STR_PAD_RIGHT)));
+ return $output;
+ }
+
+ /**
+ * @return IQRCodeProvider
+ * @throws TwoFactorAuthException
+ */
+ public function getQrCodeProvider()
+ {
+ // Set default QR Code provider if none was specified
+ if (null === $this->qrcodeprovider) {
+ return $this->qrcodeprovider = new Providers\Qr\QRServerProvider();
+ }
+ return $this->qrcodeprovider;
+ }
+
+ /**
+ * @return IRNGProvider
+ * @throws TwoFactorAuthException
+ */
+ public function getRngprovider()
+ {
+ if (null !== $this->rngprovider) {
+ return $this->rngprovider;
+ }
+ if (function_exists('random_bytes')) {
+ return $this->rngprovider = new Providers\Rng\CSRNGProvider();
+ }
+ if (function_exists('mcrypt_create_iv')) {
+ return $this->rngprovider = new Providers\Rng\MCryptRNGProvider();
+ }
+ if (function_exists('openssl_random_pseudo_bytes')) {
+ return $this->rngprovider = new Providers\Rng\OpenSSLRNGProvider();
+ }
+ if (function_exists('hash')) {
+ return $this->rngprovider = new Providers\Rng\HashRNGProvider();
+ }
+ throw new TwoFactorAuthException('Unable to find a suited RNGProvider');
+ }
+
+ /**
+ * @return ITimeProvider
+ * @throws TwoFactorAuthException
+ */
+ public function getTimeProvider()
+ {
+ // Set default time provider if none was specified
+ if (null === $this->timeprovider) {
+ return $this->timeprovider = new Providers\Time\LocalMachineTimeProvider();
+ }
+ return $this->timeprovider;
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/TwoFactorAuthException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/TwoFactorAuthException.php
new file mode 100644
index 0000000..af51b74
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/lib/TwoFactorAuthException.php
@@ -0,0 +1,7 @@
+<?php
+
+namespace RobThree\Auth;
+
+use Exception;
+
+class TwoFactorAuthException extends \Exception {}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/logo.png b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/logo.png
new file mode 100644
index 0000000..65af9b2
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/logo.png
Binary files differ
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/multifactorauthforeveryone.png b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/multifactorauthforeveryone.png
new file mode 100644
index 0000000..086bd92
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/multifactorauthforeveryone.png
Binary files differ
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/phpunit.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/phpunit.xml
new file mode 100644
index 0000000..92c3a27
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/phpunit.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit backupGlobals="false"
+ backupStaticAttributes="false"
+ colors="true"
+ convertErrorsToExceptions="true"
+ convertNoticesToExceptions="true"
+ convertWarningsToExceptions="true"
+ processIsolation="false"
+ stopOnFailure="false">
+ <testsuites>
+ <testsuite name="Unit">
+ <directory suffix="Test.php">./tests</directory>
+ </testsuite>
+ </testsuites>
+ <filter>
+ <whitelist processUncoveredFilesFromWhitelist="true">
+ <directory suffix=".php">./lib</directory>
+ </whitelist>
+ </filter>
+</phpunit>
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/phpunit.xml.tmppica b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/phpunit.xml.tmppica
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/phpunit.xml.tmppica
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/tests/TwoFactorAuthTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/tests/TwoFactorAuthTest.php
new file mode 100644
index 0000000..a0f2f67
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/robthree/twofactorauth/tests/TwoFactorAuthTest.php
@@ -0,0 +1,409 @@
+<?php
+require_once 'lib/TwoFactorAuth.php';
+require_once 'lib/TwoFactorAuthException.php';
+
+require_once 'lib/Providers/Qr/IQRCodeProvider.php';
+require_once 'lib/Providers/Qr/BaseHTTPQRCodeProvider.php';
+require_once 'lib/Providers/Qr/ImageChartsQRCodeProvider.php';
+require_once 'lib/Providers/Qr/QRException.php';
+
+require_once 'lib/Providers/Rng/IRNGProvider.php';
+require_once 'lib/Providers/Rng/RNGException.php';
+require_once 'lib/Providers/Rng/CSRNGProvider.php';
+require_once 'lib/Providers/Rng/MCryptRNGProvider.php';
+require_once 'lib/Providers/Rng/OpenSSLRNGProvider.php';
+require_once 'lib/Providers/Rng/HashRNGProvider.php';
+require_once 'lib/Providers/Rng/RNGException.php';
+
+require_once 'lib/Providers/Time/ITimeProvider.php';
+require_once 'lib/Providers/Time/LocalMachineTimeProvider.php';
+require_once 'lib/Providers/Time/HttpTimeProvider.php';
+require_once 'lib/Providers/Time/NTPTimeProvider.php';
+require_once 'lib/Providers/Time/TimeException.php';
+
+use RobThree\Auth\TwoFactorAuth;
+use RobThree\Auth\Providers\Qr\IQRCodeProvider;
+use RobThree\Auth\Providers\Rng\IRNGProvider;
+use RobThree\Auth\Providers\Time\ITimeProvider;
+
+
+class TwoFactorAuthTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @expectedException \RobThree\Auth\TwoFactorAuthException
+ */
+ public function testConstructorThrowsOnInvalidDigits() {
+
+ new TwoFactorAuth('Test', 0);
+ }
+
+ /**
+ * @expectedException \RobThree\Auth\TwoFactorAuthException
+ */
+ public function testConstructorThrowsOnInvalidPeriod() {
+
+ new TwoFactorAuth('Test', 6, 0);
+ }
+
+ /**
+ * @expectedException \RobThree\Auth\TwoFactorAuthException
+ */
+ public function testConstructorThrowsOnInvalidAlgorithm() {
+
+ new TwoFactorAuth('Test', 6, 30, 'xxx');
+ }
+
+ public function testGetCodeReturnsCorrectResults() {
+
+ $tfa = new TwoFactorAuth('Test');
+ $this->assertEquals('543160', $tfa->getCode('VMR466AB62ZBOKHE', 1426847216));
+ $this->assertEquals('538532', $tfa->getCode('VMR466AB62ZBOKHE', 0));
+ }
+
+ /**
+ * @expectedException \RobThree\Auth\TwoFactorAuthException
+ */
+ public function testCreateSecretThrowsOnInsecureRNGProvider() {
+ $rng = new TestRNGProvider();
+
+ $tfa = new TwoFactorAuth('Test', 6, 30, 'sha1', null, $rng);
+ $tfa->createSecret();
+ }
+
+ public function testCreateSecretOverrideSecureDoesNotThrowOnInsecureRNG() {
+ $rng = new TestRNGProvider();
+
+ $tfa = new TwoFactorAuth('Test', 6, 30, 'sha1', null, $rng);
+ $this->assertEquals('ABCDEFGHIJKLMNOP', $tfa->createSecret(80, false));
+ }
+
+ public function testCreateSecretDoesNotThrowOnSecureRNGProvider() {
+ $rng = new TestRNGProvider(true);
+
+ $tfa = new TwoFactorAuth('Test', 6, 30, 'sha1', null, $rng);
+ $this->assertEquals('ABCDEFGHIJKLMNOP', $tfa->createSecret());
+ }
+
+ public function testCreateSecretGeneratesDesiredAmountOfEntropy() {
+ $rng = new TestRNGProvider(true);
+
+ $tfa = new TwoFactorAuth('Test', 6, 30, 'sha1', null, $rng);
+ $this->assertEquals('A', $tfa->createSecret(5));
+ $this->assertEquals('AB', $tfa->createSecret(6));
+ $this->assertEquals('ABCDEFGHIJKLMNOPQRSTUVWXYZ', $tfa->createSecret(128));
+ $this->assertEquals('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567', $tfa->createSecret(160));
+ $this->assertEquals('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567ABCDEFGHIJKLMNOPQRSTUVWXYZ234567', $tfa->createSecret(320));
+ $this->assertEquals('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567ABCDEFGHIJKLMNOPQRSTUVWXYZ234567A', $tfa->createSecret(321));
+ }
+
+ public function testEnsureCorrectTimeDoesNotThrowForCorrectTime() {
+ $tpr1 = new TestTimeProvider(123);
+ $tpr2 = new TestTimeProvider(128);
+
+ $tfa = new TwoFactorAuth('Test', 6, 30, 'sha1', null, null, $tpr1);
+ $tfa->ensureCorrectTime(array($tpr2)); // 128 - 123 = 5 => within default leniency
+ }
+
+ /**
+ * @expectedException \RobThree\Auth\TwoFactorAuthException
+ */
+ public function testEnsureCorrectTimeThrowsOnIncorrectTime() {
+ $tpr1 = new TestTimeProvider(123);
+ $tpr2 = new TestTimeProvider(124);
+
+ $tfa = new TwoFactorAuth('Test', 6, 30, 'sha1', null, null, $tpr1);
+ $tfa->ensureCorrectTime(array($tpr2), 0); // We force a leniency of 0, 124-123 = 1 so this should throw
+ }
+
+
+ public function testEnsureDefaultTimeProviderReturnsCorrectTime() {
+ $tfa = new TwoFactorAuth('Test', 6, 30, 'sha1');
+ $tfa->ensureCorrectTime(array(new TestTimeProvider(time())), 1); // Use a leniency of 1, should the time change between both time() calls
+ }
+
+ public function testEnsureAllTimeProvidersReturnCorrectTime() {
+ $tfa = new TwoFactorAuth('Test', 6, 30, 'sha1');
+ $tfa->ensureCorrectTime(array(
+ new RobThree\Auth\Providers\Time\NTPTimeProvider(), // Uses pool.ntp.org by default
+ //new RobThree\Auth\Providers\Time\NTPTimeProvider('time.google.com'), // Somehow time.google.com and time.windows.com make travis timeout??
+ new RobThree\Auth\Providers\Time\HttpTimeProvider(), // Uses google.com by default
+ new RobThree\Auth\Providers\Time\HttpTimeProvider('https://github.com'),
+ new RobThree\Auth\Providers\Time\HttpTimeProvider('https://yahoo.com'),
+ ));
+ }
+
+ public function testVerifyCodeWorksCorrectly() {
+
+ $tfa = new TwoFactorAuth('Test', 6, 30);
+ $this->assertEquals(true , $tfa->verifyCode('VMR466AB62ZBOKHE', '543160', 1, 1426847190));
+ $this->assertEquals(true , $tfa->verifyCode('VMR466AB62ZBOKHE', '543160', 0, 1426847190 + 29)); //Test discrepancy
+ $this->assertEquals(false, $tfa->verifyCode('VMR466AB62ZBOKHE', '543160', 0, 1426847190 + 30)); //Test discrepancy
+ $this->assertEquals(false, $tfa->verifyCode('VMR466AB62ZBOKHE', '543160', 0, 1426847190 - 1)); //Test discrepancy
+
+ $this->assertEquals(true , $tfa->verifyCode('VMR466AB62ZBOKHE', '543160', 1, 1426847205 + 0)); //Test discrepancy
+ $this->assertEquals(true , $tfa->verifyCode('VMR466AB62ZBOKHE', '543160', 1, 1426847205 + 35)); //Test discrepancy
+ $this->assertEquals(true , $tfa->verifyCode('VMR466AB62ZBOKHE', '543160', 1, 1426847205 - 35)); //Test discrepancy
+
+ $this->assertEquals(false, $tfa->verifyCode('VMR466AB62ZBOKHE', '543160', 1, 1426847205 + 65)); //Test discrepancy
+ $this->assertEquals(false, $tfa->verifyCode('VMR466AB62ZBOKHE', '543160', 1, 1426847205 - 65)); //Test discrepancy
+
+ $this->assertEquals(true , $tfa->verifyCode('VMR466AB62ZBOKHE', '543160', 2, 1426847205 + 65)); //Test discrepancy
+ $this->assertEquals(true , $tfa->verifyCode('VMR466AB62ZBOKHE', '543160', 2, 1426847205 - 65)); //Test discrepancy
+ }
+
+ public function testVerifyCorrectTimeSliceIsReturned() {
+ $tfa = new TwoFactorAuth('Test', 6, 30);
+
+ // We test with discrepancy 3 (so total of 7 codes: c-3, c-2, c-1, c, c+1, c+2, c+3
+ // Ensure each corresponding timeslice is returned correctly
+ $this->assertEquals(true, $tfa->verifyCode('VMR466AB62ZBOKHE', '534113', 3, 1426847190, $timeslice1));
+ $this->assertEquals(47561570, $timeslice1);
+ $this->assertEquals(true, $tfa->verifyCode('VMR466AB62ZBOKHE', '819652', 3, 1426847190, $timeslice2));
+ $this->assertEquals(47561571, $timeslice2);
+ $this->assertEquals(true, $tfa->verifyCode('VMR466AB62ZBOKHE', '915954', 3, 1426847190, $timeslice3));
+ $this->assertEquals(47561572, $timeslice3);
+ $this->assertEquals(true, $tfa->verifyCode('VMR466AB62ZBOKHE', '543160', 3, 1426847190, $timeslice4));
+ $this->assertEquals(47561573, $timeslice4);
+ $this->assertEquals(true, $tfa->verifyCode('VMR466AB62ZBOKHE', '348401', 3, 1426847190, $timeslice5));
+ $this->assertEquals(47561574, $timeslice5);
+ $this->assertEquals(true, $tfa->verifyCode('VMR466AB62ZBOKHE', '648525', 3, 1426847190, $timeslice6));
+ $this->assertEquals(47561575, $timeslice6);
+ $this->assertEquals(true, $tfa->verifyCode('VMR466AB62ZBOKHE', '170645', 3, 1426847190, $timeslice7));
+ $this->assertEquals(47561576, $timeslice7);
+
+ // Incorrect code should return false and a 0 timeslice
+ $this->assertEquals(false, $tfa->verifyCode('VMR466AB62ZBOKHE', '111111', 3, 1426847190, $timeslice8));
+ $this->assertEquals(0, $timeslice8);
+ }
+
+ public function testTotpUriIsCorrect() {
+ $qr = new TestQrProvider();
+
+ $tfa = new TwoFactorAuth('Test&Issuer', 6, 30, 'sha1', $qr);
+ $data = $this->DecodeDataUri($tfa->getQRCodeImageAsDataUri('Test&Label', 'VMR466AB62ZBOKHE'));
+ $this->assertEquals('test/test', $data['mimetype']);
+ $this->assertEquals('base64', $data['encoding']);
+ $this->assertEquals('otpauth://totp/Test%26Label?secret=VMR466AB62ZBOKHE&issuer=Test%26Issuer&period=30&algorithm=SHA1&digits=6@200', $data['data']);
+ }
+
+ /**
+ * @expectedException \RobThree\Auth\TwoFactorAuthException
+ */
+ public function testGetQRCodeImageAsDataUriThrowsOnInvalidSize() {
+ $qr = new TestQrProvider();
+
+ $tfa = new TwoFactorAuth('Test', 6, 30, 'sha1', $qr);
+ $tfa->getQRCodeImageAsDataUri('Test', 'VMR466AB62ZBOKHE', 0);
+ }
+
+ /**
+ * @expectedException \RobThree\Auth\TwoFactorAuthException
+ */
+ public function testGetCodeThrowsOnInvalidBase32String1() {
+ $tfa = new TwoFactorAuth('Test');
+ $tfa->getCode('FOO1BAR8BAZ9'); //1, 8 & 9 are invalid chars
+ }
+
+ /**
+ * @expectedException \RobThree\Auth\TwoFactorAuthException
+ */
+ public function testGetCodeThrowsOnInvalidBase32String2() {
+ $tfa = new TwoFactorAuth('Test');
+ $tfa->getCode('mzxw6==='); //Lowercase
+ }
+
+ public function testKnownBase32DecodeTestVectors() {
+ // We usually don't test internals (e.g. privates) but since we rely heavily on base32 decoding and don't want
+ // to expose this method nor do we want to give people the possibility of implementing / providing their own base32
+ // decoding/decoder (as we do with Rng/QR providers for example) we simply test the private base32Decode() method
+ // with some known testvectors **only** to ensure base32 decoding works correctly following RFC's so there won't
+ // be any bugs hiding in there. We **could** 'fool' ourselves by calling the public getCode() method (which uses
+ // base32decode internally) and then make sure getCode's output (in digits) equals expected output since that would
+ // mean the base32Decode() works as expected but that **could** hide some subtle bug(s) in decoding the base32 string.
+
+ // "In general, you don't want to break any encapsulation for the sake of testing (or as Mom used to say, "don't
+ // expose your privates!"). Most of the time, you should be able to test a class by exercising its public methods."
+ // Dave Thomas and Andy Hunt -- "Pragmatic Unit Testing
+ $tfa = new TwoFactorAuth('Test');
+
+ $method = new ReflectionMethod('RobThree\Auth\TwoFactorAuth', 'base32Decode');
+ $method->setAccessible(true);
+
+ // Test vectors from: https://tools.ietf.org/html/rfc4648#page-12
+ $this->assertEquals('', $method->invoke($tfa, ''));
+ $this->assertEquals('f', $method->invoke($tfa, 'MY======'));
+ $this->assertEquals('fo', $method->invoke($tfa, 'MZXQ===='));
+ $this->assertEquals('foo', $method->invoke($tfa, 'MZXW6==='));
+ $this->assertEquals('foob', $method->invoke($tfa, 'MZXW6YQ='));
+ $this->assertEquals('fooba', $method->invoke($tfa, 'MZXW6YTB'));
+ $this->assertEquals('foobar', $method->invoke($tfa, 'MZXW6YTBOI======'));
+ }
+
+ public function testKnownBase32DecodeUnpaddedTestVectors() {
+ // See testKnownBase32DecodeTestVectors() for the rationale behind testing the private base32Decode() method.
+ // This test ensures that strings without the padding-char ('=') are also decoded correctly.
+ // https://tools.ietf.org/html/rfc4648#page-4:
+ // "In some circumstances, the use of padding ("=") in base-encoded data is not required or used."
+ $tfa = new TwoFactorAuth('Test');
+
+ $method = new ReflectionMethod('RobThree\Auth\TwoFactorAuth', 'base32Decode');
+ $method->setAccessible(true);
+
+ // Test vectors from: https://tools.ietf.org/html/rfc4648#page-12
+ $this->assertEquals('', $method->invoke($tfa, ''));
+ $this->assertEquals('f', $method->invoke($tfa, 'MY'));
+ $this->assertEquals('fo', $method->invoke($tfa, 'MZXQ'));
+ $this->assertEquals('foo', $method->invoke($tfa, 'MZXW6'));
+ $this->assertEquals('foob', $method->invoke($tfa, 'MZXW6YQ'));
+ $this->assertEquals('fooba', $method->invoke($tfa, 'MZXW6YTB'));
+ $this->assertEquals('foobar', $method->invoke($tfa, 'MZXW6YTBOI'));
+ }
+
+
+ public function testKnownTestVectors_sha1() {
+ //Known test vectors for SHA1: https://tools.ietf.org/html/rfc6238#page-15
+ $secret = 'GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ'; //== base32encode('12345678901234567890')
+ $tfa = new TwoFactorAuth('Test', 8, 30, 'sha1');
+ $this->assertEquals('94287082', $tfa->getCode($secret, 59));
+ $this->assertEquals('07081804', $tfa->getCode($secret, 1111111109));
+ $this->assertEquals('14050471', $tfa->getCode($secret, 1111111111));
+ $this->assertEquals('89005924', $tfa->getCode($secret, 1234567890));
+ $this->assertEquals('69279037', $tfa->getCode($secret, 2000000000));
+ $this->assertEquals('65353130', $tfa->getCode($secret, 20000000000));
+ }
+
+ public function testKnownTestVectors_sha256() {
+ //Known test vectors for SHA256: https://tools.ietf.org/html/rfc6238#page-15
+ $secret = 'GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZA'; //== base32encode('12345678901234567890123456789012')
+ $tfa = new TwoFactorAuth('Test', 8, 30, 'sha256');
+ $this->assertEquals('46119246', $tfa->getCode($secret, 59));
+ $this->assertEquals('68084774', $tfa->getCode($secret, 1111111109));
+ $this->assertEquals('67062674', $tfa->getCode($secret, 1111111111));
+ $this->assertEquals('91819424', $tfa->getCode($secret, 1234567890));
+ $this->assertEquals('90698825', $tfa->getCode($secret, 2000000000));
+ $this->assertEquals('77737706', $tfa->getCode($secret, 20000000000));
+ }
+
+ public function testKnownTestVectors_sha512() {
+ //Known test vectors for SHA512: https://tools.ietf.org/html/rfc6238#page-15
+ $secret = 'GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNA'; //== base32encode('1234567890123456789012345678901234567890123456789012345678901234')
+ $tfa = new TwoFactorAuth('Test', 8, 30, 'sha512');
+ $this->assertEquals('90693936', $tfa->getCode($secret, 59));
+ $this->assertEquals('25091201', $tfa->getCode($secret, 1111111109));
+ $this->assertEquals('99943326', $tfa->getCode($secret, 1111111111));
+ $this->assertEquals('93441116', $tfa->getCode($secret, 1234567890));
+ $this->assertEquals('38618901', $tfa->getCode($secret, 2000000000));
+ $this->assertEquals('47863826', $tfa->getCode($secret, 20000000000));
+ }
+
+ /**
+ * @requires function random_bytes
+ */
+ public function testCSRNGProvidersReturnExpectedNumberOfBytes() {
+ $rng = new \RobThree\Auth\Providers\Rng\CSRNGProvider();
+ foreach ($this->getRngTestLengths() as $l)
+ $this->assertEquals($l, strlen($rng->getRandomBytes($l)));
+ $this->assertEquals(true, $rng->isCryptographicallySecure());
+ }
+
+ /**
+ * @requires function hash_algos
+ * @requires function hash
+ */
+ public function testHashRNGProvidersReturnExpectedNumberOfBytes() {
+ $rng = new \RobThree\Auth\Providers\Rng\HashRNGProvider();
+ foreach ($this->getRngTestLengths() as $l)
+ $this->assertEquals($l, strlen($rng->getRandomBytes($l)));
+ $this->assertEquals(false, $rng->isCryptographicallySecure());
+ }
+
+ /**
+ * @requires function mcrypt_create_iv
+ */
+ public function testMCryptRNGProvidersReturnExpectedNumberOfBytes() {
+ if (function_exists('mcrypt_create_iv')) {
+ $rng = new \RobThree\Auth\Providers\Rng\MCryptRNGProvider();
+ foreach ($this->getRngTestLengths() as $l)
+ $this->assertEquals($l, strlen($rng->getRandomBytes($l)));
+ $this->assertEquals(true, $rng->isCryptographicallySecure());
+ }
+ }
+
+ /**
+ * @requires function openssl_random_pseudo_bytes
+ */
+ public function testStrongOpenSSLRNGProvidersReturnExpectedNumberOfBytes() {
+ $rng = new \RobThree\Auth\Providers\Rng\OpenSSLRNGProvider(true);
+ foreach ($this->getRngTestLengths() as $l)
+ $this->assertEquals($l, strlen($rng->getRandomBytes($l)));
+ $this->assertEquals(true, $rng->isCryptographicallySecure());
+ }
+
+ /**
+ * @requires function openssl_random_pseudo_bytes
+ */
+ public function testNonStrongOpenSSLRNGProvidersReturnExpectedNumberOfBytes() {
+ $rng = new \RobThree\Auth\Providers\Rng\OpenSSLRNGProvider(false);
+ foreach ($this->getRngTestLengths() as $l)
+ $this->assertEquals($l, strlen($rng->getRandomBytes($l)));
+ $this->assertEquals(false, $rng->isCryptographicallySecure());
+ }
+
+
+ private function getRngTestLengths() {
+ return array(1, 16, 32, 256);
+ }
+
+ private function DecodeDataUri($datauri) {
+ if (preg_match('/data:(?P<mimetype>[\w\.\-\/]+);(?P<encoding>\w+),(?P<data>.*)/', $datauri, $m) === 1) {
+ return array(
+ 'mimetype' => $m['mimetype'],
+ 'encoding' => $m['encoding'],
+ 'data' => base64_decode($m['data'])
+ );
+ }
+ return null;
+ }
+}
+
+class TestRNGProvider implements IRNGProvider {
+ private $isSecure;
+
+ function __construct($isSecure = false) {
+ $this->isSecure = $isSecure;
+ }
+
+ public function getRandomBytes($bytecount) {
+ $result = '';
+ for ($i=0; $i<$bytecount; $i++)
+ $result.=chr($i);
+ return $result;
+
+ }
+
+ public function isCryptographicallySecure() {
+ return $this->isSecure;
+ }
+}
+
+class TestQrProvider implements IQRCodeProvider {
+ public function getQRCodeImage($qrtext, $size) {
+ return $qrtext . '@' . $size;
+ }
+
+ public function getMimeType() {
+ return 'test/test';
+ }
+}
+
+class TestTimeProvider implements ITimeProvider {
+ private $time;
+
+ function __construct($time) {
+ $this->time = $time;
+ }
+
+ public function getTime() {
+ return $this->time;
+ }
+}
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/.editorconfig b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/.editorconfig
new file mode 100644
index 0000000..f8dfe94
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/.editorconfig
@@ -0,0 +1,19 @@
+# EditorConfig is awesome: http://EditorConfig.org
+
+# top-most EditorConfig file
+root = true
+
+# Unix-style newlines with a newline ending every file
+[*]
+end_of_line = lf
+charset = utf-8
+insert_final_newline = true
+trim_trailing_whitespace = true
+indent_style = tab
+indent_size = 4
+
+[spec/examples/*]
+indent_style = tabs
+trim_trailing_whitespace = false
+insert_final_newline = false
+
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/.gitignore b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/.gitignore
new file mode 100644
index 0000000..abc5ab7
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/.gitignore
@@ -0,0 +1,4 @@
+tests/*.output
+*.sublime-project
+*.sublime-workspace
+vendor/
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/.travis.yml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/.travis.yml
new file mode 100644
index 0000000..ba7e820
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/.travis.yml
@@ -0,0 +1,10 @@
+language: php
+php:
+ - 5.5
+group: stable
+before_install:
+ - composer self-update
+install:
+ - composer install
+script:
+ - ./vendor/bin/phpunit
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/LICENSE.md b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/LICENSE.md
new file mode 100644
index 0000000..f735bee
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/LICENSE.md
@@ -0,0 +1,203 @@
+Eclipse Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
+LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation
+ distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+ i) changes to the Program, and
+ ii) additions to the Program;
+
+ where such changes and/or additions to the Program originate from and are
+ distributed by that particular Contributor. A Contribution 'originates'
+ from a Contributor if it was added to the Program by such Contributor
+ itself or anyone acting on such Contributor's behalf. Contributions do not
+ include additions to the Program which: (i) are separate modules of
+ software distributed in conjunction with the Program under their own
+ license agreement, and (ii) are not derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which are
+necessarily infringed by the use or sale of its Contribution alone or when
+combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this
+Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement,
+including all Contributors.
+
+2. GRANT OF RIGHTS
+ a) Subject to the terms of this Agreement, each Contributor hereby grants
+ Recipient a non-exclusive, worldwide, royalty-free copyright license to
+ reproduce, prepare derivative works of, publicly display, publicly
+ perform, distribute and sublicense the Contribution of such Contributor,
+ if any, and such derivative works, in source code and object code form.
+ b) Subject to the terms of this Agreement, each Contributor hereby grants
+ Recipient a non-exclusive, worldwide, royalty-free patent license under
+ Licensed Patents to make, use, sell, offer to sell, import and otherwise
+ transfer the Contribution of such Contributor, if any, in source code and
+ object code form. This patent license shall apply to the combination of
+ the Contribution and the Program if, at the time the Contribution is
+ added by the Contributor, such addition of the Contribution causes such
+ combination to be covered by the Licensed Patents. The patent license
+ shall not apply to any other combinations which include the Contribution.
+ No hardware per se is licensed hereunder.
+ c) Recipient understands that although each Contributor grants the licenses
+ to its Contributions set forth herein, no assurances are provided by any
+ Contributor that the Program does not infringe the patent or other
+ intellectual property rights of any other entity. Each Contributor
+ disclaims any liability to Recipient for claims brought by any other
+ entity based on infringement of intellectual property rights or
+ otherwise. As a condition to exercising the rights and licenses granted
+ hereunder, each Recipient hereby assumes sole responsibility to secure
+ any other intellectual property rights needed, if any. For example, if a
+ third party patent license is required to allow Recipient to distribute
+ the Program, it is Recipient's responsibility to acquire that license
+ before distributing the Program.
+ d) Each Contributor represents that to its knowledge it has sufficient
+ copyright rights in its Contribution, if any, to grant the copyright
+ license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under
+its own license agreement, provided that:
+
+ a) it complies with the terms and conditions of this Agreement; and
+ b) its license agreement:
+ i) effectively disclaims on behalf of all Contributors all warranties
+ and conditions, express and implied, including warranties or
+ conditions of title and non-infringement, and implied warranties or
+ conditions of merchantability and fitness for a particular purpose;
+ ii) effectively excludes on behalf of all Contributors all liability for
+ damages, including direct, indirect, special, incidental and
+ consequential damages, such as lost profits;
+ iii) states that any provisions which differ from this Agreement are
+ offered by that Contributor alone and not by any other party; and
+ iv) states that source code for the Program is available from such
+ Contributor, and informs licensees how to obtain it in a reasonable
+ manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+ a) it must be made available under this Agreement; and
+ b) a copy of this Agreement must be included with each copy of the Program.
+ Contributors may not remove or alter any copyright notices contained
+ within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution,
+if
+any, in a manner that reasonably allows subsequent Recipients to identify the
+originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with
+respect to end users, business partners and the like. While this license is
+intended to facilitate the commercial use of the Program, the Contributor who
+includes the Program in a commercial product offering should do so in a manner
+which does not create potential liability for other Contributors. Therefore,
+if a Contributor includes the Program in a commercial product offering, such
+Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
+every other Contributor ("Indemnified Contributor") against any losses,
+damages and costs (collectively "Losses") arising from claims, lawsuits and
+other legal actions brought by a third party against the Indemnified
+Contributor to the extent caused by the acts or omissions of such Commercial
+Contributor in connection with its distribution of the Program in a commercial
+product offering. The obligations in this section do not apply to any claims
+or Losses relating to any actual or alleged intellectual property
+infringement. In order to qualify, an Indemnified Contributor must:
+a) promptly notify the Commercial Contributor in writing of such claim, and
+b) allow the Commercial Contributor to control, and cooperate with the
+Commercial Contributor in, the defense and any related settlement
+negotiations. The Indemnified Contributor may participate in any such claim at
+its own expense.
+
+For example, a Contributor might include the Program in a commercial product
+offering, Product X. That Contributor is then a Commercial Contributor. If
+that Commercial Contributor then makes performance claims, or offers
+warranties related to Product X, those performance claims and warranties are
+such Commercial Contributor's responsibility alone. Under this section, the
+Commercial Contributor would have to defend claims against the other
+Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each
+Recipient is solely responsible for determining the appropriateness of using
+and distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to the
+risks and costs of program errors, compliance with applicable laws, damage to
+or loss of data, programs or equipment, and unavailability or interruption of
+operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION
+LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE
+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY
+OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of the
+remainder of the terms of this Agreement, and without further action by the
+parties hereto, such provision shall be reformed to the minimum extent
+necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+(excluding combinations of the Program with other software or hardware)
+infringes such Recipient's patent(s), then such Recipient's rights granted
+under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to
+comply with any of the material terms or conditions of this Agreement and does
+not cure such failure in a reasonable period of time after becoming aware of
+such noncompliance. If all Recipient's rights under this Agreement terminate,
+Recipient agrees to cease use and distribution of the Program as soon as
+reasonably practicable. However, Recipient's obligations under this Agreement
+and any licenses granted by Recipient relating to the Program shall continue
+and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in
+order to avoid inconsistency the Agreement is copyrighted and may only be
+modified in the following manner. The Agreement Steward reserves the right to
+publish new versions (including revisions) of this Agreement from time to
+time. No one other than the Agreement Steward has the right to modify this
+Agreement. The Eclipse Foundation is the initial Agreement Steward. The
+Eclipse Foundation may assign the responsibility to serve as the Agreement
+Steward to a suitable separate entity. Each new version of the Agreement will
+be given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version of the
+Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly
+stated in Sections 2(a) and 2(b) above, Recipient receives no rights or
+licenses to the intellectual property of any Contributor under this Agreement,
+whether expressly, by implication, estoppel or otherwise. All rights in the
+Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the
+intellectual property laws of the United States of America. No party to this
+Agreement will bring a legal action under this Agreement more than one year
+after the cause of action arose. Each party waives its rights to a jury trial in
+any resulting litigation.
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/README.md b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/README.md
new file mode 100644
index 0000000..be11992
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/README.md
@@ -0,0 +1,75 @@
+html2text [![Build Status](https://travis-ci.org/soundasleep/html2text.svg?branch=master)](https://travis-ci.org/soundasleep/html2text) [![Total Downloads](https://poser.pugx.org/soundasleep/html2text/downloads.png)](https://packagist.org/packages/soundasleep/html2text)
+=========
+
+html2text is a very simple script that uses PHP's DOM methods to load from HTML, and then iterates over the resulting DOM to correctly output plain text. For example:
+
+```html
+<html>
+<title>Ignored Title</title>
+<body>
+ <h1>Hello, World!</h1>
+
+ <p>This is some e-mail content.
+ Even though it has whitespace and newlines, the e-mail converter
+ will handle it correctly.
+
+ <p>Even mismatched tags.</p>
+
+ <div>A div</div>
+ <div>Another div</div>
+ <div>A div<div>within a div</div></div>
+
+ <a href="http://foo.com">A link</a>
+
+</body>
+</html>
+```
+
+Will be converted into:
+
+```text
+Hello, World!
+
+This is some e-mail content. Even though it has whitespace and newlines, the e-mail converter will handle it correctly.
+
+Even mismatched tags.
+A div
+Another div
+A div
+within a div
+[A link](http://foo.com)
+```
+
+See the [original blog post](http://journals.jevon.org/users/jevon-phd/entry/19818) or the related [StackOverflow answer](http://stackoverflow.com/a/2564472/39531).
+
+## Installing
+
+You can use [Composer](http://getcomposer.org/) to add the [package](https://packagist.org/packages/soundasleep/html2text) to your project:
+
+```json
+{
+ "require": {
+ "soundasleep/html2text": "~0.5"
+ }
+}
+```
+
+And then use it quite simply:
+
+```php
+$text = Html2Text\Html2Text::convert($html);
+```
+
+You can also include the supplied `html2text.php` and use `$text = convert_html_to_text($html);` instead.
+
+## Tests
+
+Some very basic tests are provided in the `tests/` directory. Run them with `composer install --dev && vendor/bin/phpunit`.
+
+## License
+
+`html2text` is dual licensed under both [EPL v1.0](https://www.eclipse.org/legal/epl-v10.html) and [LGPL v3.0](http://www.gnu.org/licenses/lgpl.html), making it suitable for both Eclipse and GPL projects.
+
+## Other versions
+
+Also see [html2text_ruby](https://github.com/soundasleep/html2text_ruby), a Ruby implementation.
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/composer.json b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/composer.json
new file mode 100644
index 0000000..d058176
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/composer.json
@@ -0,0 +1,32 @@
+{
+ "name": "soundasleep/html2text",
+ "description": "A PHP script to convert HTML into a plain text format",
+ "type": "library",
+ "keywords": [ "php", "html", "text", "email" ],
+ "homepage": "https://github.com/soundasleep/html2text",
+ "license": "EPL-1.0",
+ "authors": [
+ {
+ "name": "Jevon Wright",
+ "homepage": "https://jevon.org",
+ "role": "Developer"
+ }
+ ],
+ "autoload": {
+ "psr-4": {
+ "Html2Text\\": "src"
+ }
+ },
+ "support": {
+ "email": "support@jevon.org"
+ },
+ "require": {
+ "php": ">=5.3.2",
+ "ext-dom": "*",
+ "ext-libxml": "*"
+ },
+ "require-dev": {
+ "phpunit/phpunit": ">=4.0",
+ "soundasleep/component-tests": "dev-master"
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/composer.lock b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/composer.lock
new file mode 100644
index 0000000..47f938a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/composer.lock
@@ -0,0 +1,746 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+ "This file is @generated automatically"
+ ],
+ "hash": "bb90182bd8d808a06ae4762518746ed3",
+ "packages": [],
+ "packages-dev": [
+ {
+ "name": "justinrainbow/json-schema",
+ "version": "1.3.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/justinrainbow/json-schema.git",
+ "reference": "87b54b460febed69726c781ab67462084e97a105"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/87b54b460febed69726c781ab67462084e97a105",
+ "reference": "87b54b460febed69726c781ab67462084e97a105",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "json-schema/json-schema-test-suite": "1.1.0",
+ "phpdocumentor/phpdocumentor": "~2",
+ "phpunit/phpunit": "~3.7"
+ },
+ "bin": [
+ "bin/validate-json"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.4.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "JsonSchema": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Bruno Prieto Reis",
+ "email": "bruno.p.reis@gmail.com"
+ },
+ {
+ "name": "Justin Rainbow",
+ "email": "justin.rainbow@gmail.com"
+ },
+ {
+ "name": "Igor Wiedler",
+ "email": "igor@wiedler.ch"
+ },
+ {
+ "name": "Robert Schönthal",
+ "email": "seroscho@googlemail.com"
+ }
+ ],
+ "description": "A library to validate a json schema.",
+ "homepage": "https://github.com/justinrainbow/json-schema",
+ "keywords": [
+ "json",
+ "schema"
+ ],
+ "time": "2014-08-25 02:48:14"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "2.0.15",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "34cc484af1ca149188d0d9e91412191e398e0b67"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/34cc484af1ca149188d0d9e91412191e398e0b67",
+ "reference": "34cc484af1ca149188d0d9e91412191e398e0b67",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "phpunit/php-file-iterator": "~1.3",
+ "phpunit/php-text-template": "~1.2",
+ "phpunit/php-token-stream": "~1.3",
+ "sebastian/environment": "~1.0",
+ "sebastian/version": "~1.0"
+ },
+ "require-dev": {
+ "ext-xdebug": ">=2.1.4",
+ "phpunit/phpunit": "~4"
+ },
+ "suggest": {
+ "ext-dom": "*",
+ "ext-xdebug": ">=2.2.1",
+ "ext-xmlwriter": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
+ "time": "2015-01-24 10:06:35"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "1.3.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/acd690379117b042d1c8af1fafd61bde001bf6bb",
+ "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "File/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ ""
+ ],
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+ "keywords": [
+ "filesystem",
+ "iterator"
+ ],
+ "time": "2013-10-10 15:34:57"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/206dfefc0ffe9cebf65c413e3d0e809c82fbf00a",
+ "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "Text/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ ""
+ ],
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "time": "2014-01-30 17:20:04"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "1.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/19689d4354b295ee3d8c54b4f42c3efb69cbc17c",
+ "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "PHP/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ ""
+ ],
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "time": "2013-08-02 07:42:54"
+ },
+ {
+ "name": "phpunit/php-token-stream",
+ "version": "1.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+ "reference": "db32c18eba00b121c145575fcbcd4d4d24e6db74"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/db32c18eba00b121c145575fcbcd4d4d24e6db74",
+ "reference": "db32c18eba00b121c145575fcbcd4d4d24e6db74",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.4-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Wrapper around PHP's tokenizer extension.",
+ "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
+ "keywords": [
+ "tokenizer"
+ ],
+ "time": "2015-01-17 09:51:32"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "4.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "b3a7c58bc39f01577f89d63da1ec578e1e993f1a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b3a7c58bc39f01577f89d63da1ec578e1e993f1a",
+ "reference": "b3a7c58bc39f01577f89d63da1ec578e1e993f1a",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-pcre": "*",
+ "ext-reflection": "*",
+ "ext-spl": "*",
+ "php": ">=5.3.3",
+ "phpunit/php-code-coverage": ">=2.0.0,<2.1.0",
+ "phpunit/php-file-iterator": "~1.3.1",
+ "phpunit/php-text-template": "~1.2",
+ "phpunit/php-timer": "~1.0.2",
+ "phpunit/phpunit-mock-objects": ">=2.0.0,<2.1.0",
+ "sebastian/diff": "~1.1",
+ "sebastian/environment": "~1.0",
+ "sebastian/exporter": "~1.0.1",
+ "sebastian/version": "~1.0",
+ "symfony/yaml": "~2.0"
+ },
+ "suggest": {
+ "ext-json": "*",
+ "ext-simplexml": "*",
+ "ext-tokenizer": "*",
+ "phpunit/php-invoker": "~1.1"
+ },
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ "",
+ "../../symfony/yaml/"
+ ],
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "http://www.phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "time": "2014-03-07 07:00:44"
+ },
+ {
+ "name": "phpunit/phpunit-mock-objects",
+ "version": "2.0.10",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
+ "reference": "e60bb929c50ae4237aaf680a4f6773f4ee17f0a2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/e60bb929c50ae4237aaf680a4f6773f4ee17f0a2",
+ "reference": "e60bb929c50ae4237aaf680a4f6773f4ee17f0a2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "phpunit/php-text-template": "~1.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": ">=4.0.0,<4.1.0"
+ },
+ "suggest": {
+ "ext-soap": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ ""
+ ],
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Mock Object library for PHPUnit",
+ "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
+ "keywords": [
+ "mock",
+ "xunit"
+ ],
+ "time": "2014-06-12 07:19:48"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "5843509fed39dee4b356a306401e9dd1a931fec7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/5843509fed39dee4b356a306401e9dd1a931fec7",
+ "reference": "5843509fed39dee4b356a306401e9dd1a931fec7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "http://www.github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff"
+ ],
+ "time": "2014-08-15 10:29:00"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "1.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "6e6c71d918088c251b181ba8b3088af4ac336dd7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6e6c71d918088c251b181ba8b3088af4ac336dd7",
+ "reference": "6e6c71d918088c251b181ba8b3088af4ac336dd7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "http://www.github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
+ "time": "2014-10-25 08:00:45"
+ },
+ {
+ "name": "sebastian/exporter",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "c7d59948d6e82818e1bdff7cadb6c34710eb7dc0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c7d59948d6e82818e1bdff7cadb6c34710eb7dc0",
+ "reference": "c7d59948d6e82818e1bdff7cadb6c34710eb7dc0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "http://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
+ "time": "2014-09-10 00:51:36"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "1.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "a77d9123f8e809db3fbdea15038c27a95da4058b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/a77d9123f8e809db3fbdea15038c27a95da4058b",
+ "reference": "a77d9123f8e809db3fbdea15038c27a95da4058b",
+ "shasum": ""
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "time": "2014-12-15 14:25:24"
+ },
+ {
+ "name": "soundasleep/component-tests",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/soundasleep/component-tests.git",
+ "reference": "c1e9e6608ef41452b35d68a7057ea7add77ccd36"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/soundasleep/component-tests/zipball/c1e9e6608ef41452b35d68a7057ea7add77ccd36",
+ "reference": "c1e9e6608ef41452b35d68a7057ea7add77ccd36",
+ "shasum": ""
+ },
+ "require": {
+ "justinrainbow/json-schema": "~1.3",
+ "phpunit/phpunit": "4.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "ComponentTests\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "description": "Common Composer and PHP component lint and validation tests",
+ "time": "2015-03-18 02:30:24"
+ },
+ {
+ "name": "symfony/yaml",
+ "version": "v2.6.5",
+ "target-dir": "Symfony/Component/Yaml",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/Yaml.git",
+ "reference": "0cd8e72071e46e15fc072270ae39ea1b66b10a9d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/Yaml/zipball/0cd8e72071e46e15fc072270ae39ea1b66b10a9d",
+ "reference": "0cd8e72071e46e15fc072270ae39ea1b66b10a9d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "symfony/phpunit-bridge": "~2.7"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.6-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Symfony\\Component\\Yaml\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Symfony Community",
+ "homepage": "http://symfony.com/contributors"
+ },
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "Symfony Yaml Component",
+ "homepage": "http://symfony.com",
+ "time": "2015-03-12 10:28:44"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": {
+ "soundasleep/component-tests": 20
+ },
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": {
+ "php": ">=5.3.2",
+ "ext-dom": "*",
+ "ext-libxml": "*"
+ },
+ "platform-dev": []
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/convert.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/convert.php
new file mode 100644
index 0000000..be6647a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/convert.php
@@ -0,0 +1,38 @@
+<?php
+
+/******************************************************************************
+ * Copyright (c) 2010 Jevon Wright and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * or
+ *
+ * LGPL which is available at http://www.gnu.org/licenses/lgpl.html
+ *
+ *
+ * Contributors:
+ * Jevon Wright - initial API and implementation
+ ****************************************************************************/
+
+/**
+ * This file allows you to convert through the command line.
+ * Usage:
+ * php -f convert.php [input file]
+ */
+
+if (count($argv) < 2) {
+ throw new \InvalidArgumentException("Expected: php -f convert.php [input file]");
+}
+
+if (!file_exists($argv[1])) {
+ throw new \InvalidArgumentException("'" . $argv[1] . "' does not exist");
+}
+
+$input = file_get_contents($argv[1]);
+
+require_once(__DIR__ . "/src/Html2Text.php");
+require_once(__DIR__ . "/src/Html2TextException.php");
+
+echo Html2Text\Html2Text::convert($input);
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/html2text.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/html2text.php
new file mode 100644
index 0000000..f3afbef
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/html2text.php
@@ -0,0 +1,32 @@
+<?php
+/******************************************************************************
+ * Copyright (c) 2010 Jevon Wright and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * or
+ *
+ * LGPL which is available at http://www.gnu.org/licenses/lgpl.html
+ *
+ *
+ * Contributors:
+ * Jevon Wright - initial API and implementation
+ ****************************************************************************/
+
+/**
+ * This file is available if you still want to use functions rather than
+ * autoloading classes.
+ */
+
+require_once(__DIR__ . "/src/Html2Text.php");
+require_once(__DIR__ . "/src/Html2TextException.php");
+
+function convert_html_to_text($html) {
+ return Html2Text\Html2Text::convert($html);
+}
+
+function fix_newlines($text) {
+ return Html2Text\Html2Text::fixNewlines($text);
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/phpunit.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/phpunit.xml
new file mode 100644
index 0000000..5cb49a5
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/phpunit.xml
@@ -0,0 +1,8 @@
+<phpunit stop-on-failure="true" stop-on-error="true">
+ <testsuites>
+ <testsuite name="Tests">
+ <!-- loads all *Test.php -->
+ <directory>tests</directory>
+ </testsuite>
+ </testsuites>
+</phpunit>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/src/Html2Text.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/src/Html2Text.php
new file mode 100644
index 0000000..8e1f8ad
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/src/Html2Text.php
@@ -0,0 +1,394 @@
+<?php
+/******************************************************************************
+ * Copyright (c) 2010 Jevon Wright and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * or
+ *
+ * LGPL which is available at http://www.gnu.org/licenses/lgpl.html
+ *
+ *
+ * Contributors:
+ * Jevon Wright - initial API and implementation
+ ****************************************************************************/
+
+namespace Html2Text;
+
+class Html2Text {
+
+ /**
+ * Tries to convert the given HTML into a plain text format - best suited for
+ * e-mail display, etc.
+ *
+ * <p>In particular, it tries to maintain the following features:
+ * <ul>
+ * <li>Links are maintained, with the 'href' copied over
+ * <li>Information in the <head> is lost
+ * </ul>
+ *
+ * @param string $html the input HTML
+ * @param boolean $ignore_error Ignore xml parsing errors
+ * @return string the HTML converted, as best as possible, to text
+ * @throws Html2TextException if the HTML could not be loaded as a {@link DOMDocument}
+ */
+ public static function convert($html, $ignore_error = false) {
+ // replace with spaces
+ $html = str_replace(" ", " ", $html);
+ $html = str_replace("\xc2\xa0", " ", $html);
+
+ $is_office_document = static::isOfficeDocument($html);
+
+ if ($is_office_document) {
+ // remove office namespace
+ $html = str_replace(array("<o:p>", "</o:p>"), "", $html);
+ }
+
+ $html = static::fixNewlines($html);
+ if (mb_detect_encoding($html, "UTF-8", true)) {
+ $html = mb_convert_encoding($html, "HTML-ENTITIES", "UTF-8");
+ }
+
+ $doc = static::getDocument($html, $ignore_error);
+
+ $output = static::iterateOverNode($doc, null, false, $is_office_document);
+
+ // remove leading and trailing spaces on each line
+ $output = preg_replace("/[ \t]*\n[ \t]*/im", "\n", $output);
+ $output = preg_replace("/ *\t */im", "\t", $output);
+
+ // unarmor pre blocks
+ $output = str_replace("\r", "\n", $output);
+
+ // remove unnecessary empty lines
+ $output = preg_replace("/\n\n\n*/im", "\n\n", $output);
+
+ // remove leading and trailing whitespace
+ $output = trim($output);
+
+ return $output;
+ }
+
+ /**
+ * Unify newlines; in particular, \r\n becomes \n, and
+ * then \r becomes \n. This means that all newlines (Unix, Windows, Mac)
+ * all become \ns.
+ *
+ * @param string $text text with any number of \r, \r\n and \n combinations
+ * @return string the fixed text
+ */
+ static function fixNewlines($text) {
+ // replace \r\n to \n
+ $text = str_replace("\r\n", "\n", $text);
+ // remove \rs
+ $text = str_replace("\r", "\n", $text);
+
+ return $text;
+ }
+
+ /**
+ * Parse HTML into a DOMDocument
+ *
+ * @param string $html the input HTML
+ * @param boolean $ignore_error Ignore xml parsing errors
+ * @return DOMDocument the parsed document tree
+ */
+ static function getDocument($html, $ignore_error = false) {
+
+ $doc = new \DOMDocument();
+
+ $html = trim($html);
+
+ if (!$html) {
+ // DOMDocument doesn't support empty value and throws an error
+ // Return empty document instead
+ return $doc;
+ }
+
+ if ($html[0] !== '<') {
+ // If HTML does not begin with a tag, we put a body tag around it.
+ // If we do not do this, PHP will insert a paragraph tag around
+ // the first block of text for some reason which can mess up
+ // the newlines. See pre.html test for an example.
+ $html = '<body>' . $html . '</body>';
+ }
+
+ if ($ignore_error) {
+ $doc->strictErrorChecking = false;
+ $doc->recover = true;
+ $doc->xmlStandalone = true;
+ $old_internal_errors = libxml_use_internal_errors(true);
+ $load_result = $doc->loadHTML($html, LIBXML_NOWARNING | LIBXML_NOERROR | LIBXML_NONET);
+ libxml_use_internal_errors($old_internal_errors);
+ }
+ else {
+ $load_result = $doc->loadHTML($html);
+ }
+
+ if (!$load_result) {
+ throw new Html2TextException("Could not load HTML - badly formed?", $html);
+ }
+
+ return $doc;
+ }
+
+ /**
+ * Can we guess that this HTML is generated by Microsoft Office?
+ */
+ static function isOfficeDocument($html) {
+ return strpos($html, "urn:schemas-microsoft-com:office") !== false;
+ }
+
+ static function isWhitespace($text) {
+ return strlen(trim($text, "\n\r\t ")) === 0;
+ }
+
+ static function nextChildName($node) {
+ // get the next child
+ $nextNode = $node->nextSibling;
+ while ($nextNode != null) {
+ if ($nextNode instanceof \DOMText) {
+ if (!static::isWhitespace($nextNode->wholeText)) {
+ break;
+ }
+ }
+ if ($nextNode instanceof \DOMElement) {
+ break;
+ }
+ $nextNode = $nextNode->nextSibling;
+ }
+ $nextName = null;
+ if (($nextNode instanceof \DOMElement || $nextNode instanceof \DOMText) && $nextNode != null) {
+ $nextName = strtolower($nextNode->nodeName);
+ }
+
+ return $nextName;
+ }
+
+ static function iterateOverNode($node, $prevName = null, $in_pre = false, $is_office_document = false) {
+
+ if ($node instanceof \DOMText) {
+ // Replace whitespace characters with a space (equivilant to \s)
+ if ($in_pre) {
+ $text = "\n" . trim($node->wholeText, "\n\r\t ") . "\n";
+ // Remove trailing whitespace only
+ $text = preg_replace("/[ \t]*\n/im", "\n", $text);
+ // armor newlines with \r.
+ return str_replace("\n", "\r", $text);
+ } else {
+ $text = preg_replace("/[\\t\\n\\f\\r ]+/im", " ", $node->wholeText);
+ if (!static::isWhitespace($text) && ($prevName == 'p' || $prevName == 'div')) {
+ return "\n" . $text;
+ }
+ return $text;
+ }
+ }
+ if ($node instanceof \DOMDocumentType) {
+ // ignore
+ return "";
+ }
+ if ($node instanceof \DOMProcessingInstruction) {
+ // ignore
+ return "";
+ }
+
+ $name = strtolower($node->nodeName);
+ $nextName = static::nextChildName($node);
+
+ // start whitespace
+ switch ($name) {
+ case "hr":
+ $prefix = '';
+ if ($prevName != null) {
+ $prefix = "\n";
+ }
+ return $prefix . "---------------------------------------------------------------\n";
+
+ case "style":
+ case "head":
+ case "title":
+ case "meta":
+ case "script":
+ // ignore these tags
+ return "";
+
+ case "h1":
+ case "h2":
+ case "h3":
+ case "h4":
+ case "h5":
+ case "h6":
+ case "ol":
+ case "ul":
+ // add two newlines, second line is added below
+ $output = "\n";
+ break;
+
+ case "td":
+ case "th":
+ // add tab char to separate table fields
+ $output = "\t";
+ break;
+
+ case "p":
+ // Microsoft exchange emails often include HTML which, when passed through
+ // html2text, results in lots of double line returns everywhere.
+ //
+ // To fix this, for any p element with a className of `MsoNormal` (the standard
+ // classname in any Microsoft export or outlook for a paragraph that behaves
+ // like a line return) we skip the first line returns and set the name to br.
+ if ($is_office_document && $node->getAttribute('class') == 'MsoNormal') {
+ $output = "";
+ $name = 'br';
+ break;
+ }
+ // add two lines
+ $output = "\n\n";
+ break;
+
+ case "pre":
+ case "tr":
+ case "div":
+ // add one line
+ $output = "\n";
+ break;
+
+ case "li":
+ $output = "- ";
+ break;
+
+ default:
+ // print out contents of unknown tags
+ $output = "";
+ break;
+ }
+
+ // debug
+ //$output .= "[$name,$nextName]";
+
+ if (isset($node->childNodes)) {
+
+ $n = $node->childNodes->item(0);
+ $previousSiblingName = null;
+
+ while($n != null) {
+
+ $text = static::iterateOverNode($n, $previousSiblingName, $in_pre || $name == 'pre', $is_office_document);
+
+ // Pass current node name to next child, as previousSibling does not appear to get populated
+ if ($n instanceof \DOMDocumentType
+ || $n instanceof \DOMProcessingInstruction
+ || ($n instanceof \DOMText && static::isWhitespace($text))) {
+ // Keep current previousSiblingName, these are invisible
+ }
+ else {
+ $previousSiblingName = strtolower($n->nodeName);
+ }
+
+ $node->removeChild($n);
+ $n = $node->childNodes->item(0);
+
+ // suppress last br tag inside a node list
+ if ($n != null || $previousSiblingName != 'br') {
+ $output .= $text;
+ }
+ }
+ }
+
+ // end whitespace
+ switch ($name) {
+ case "h1":
+ case "h2":
+ case "h3":
+ case "h4":
+ case "h5":
+ case "h6":
+ $output .= "\n";
+ break;
+
+ case "p":
+ // add two lines
+ $output .= "\n\n";
+ break;
+
+ case "pre":
+ case "br":
+ // add one line
+ $output .= "\n";
+ break;
+
+ case "div":
+ break;
+
+ case "a":
+ // links are returned in [text](link) format
+ $href = $node->getAttribute("href");
+
+ $output = trim($output);
+
+ // remove double [[ ]] s from linking images
+ if (substr($output, 0, 1) == "[" && substr($output, -1) == "]") {
+ $output = substr($output, 1, strlen($output) - 2);
+
+ // for linking images, the title of the <a> overrides the title of the <img>
+ if ($node->getAttribute("title")) {
+ $output = $node->getAttribute("title");
+ }
+ }
+
+ // if there is no link text, but a title attr
+ if (!$output && $node->getAttribute("title")) {
+ $output = $node->getAttribute("title");
+ }
+
+ if ($href == null) {
+ // it doesn't link anywhere
+ if ($node->getAttribute("name") != null) {
+ $output = "[$output]";
+ }
+ } else {
+ if ($href == $output || $href == "mailto:$output" || $href == "http://$output" || $href == "https://$output") {
+ // link to the same address: just use link
+ $output;
+ } else {
+ // replace it
+ if ($output) {
+ $output = "[$output]($href)";
+ } else {
+ // empty string
+ $output = $href;
+ }
+ }
+ }
+
+ // does the next node require additional whitespace?
+ switch ($nextName) {
+ case "h1": case "h2": case "h3": case "h4": case "h5": case "h6":
+ $output .= "\n";
+ break;
+ }
+ break;
+
+ case "img":
+ if ($node->getAttribute("title")) {
+ $output = "[" . $node->getAttribute("title") . "]";
+ } elseif ($node->getAttribute("alt")) {
+ $output = "[" . $node->getAttribute("alt") . "]";
+ } else {
+ $output = "";
+ }
+ break;
+
+ case "li":
+ $output .= "\n";
+ break;
+
+ default:
+ // do nothing
+ }
+
+ return $output;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/src/Html2TextException.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/src/Html2TextException.php
new file mode 100644
index 0000000..ddfa865
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/src/Html2TextException.php
@@ -0,0 +1,28 @@
+<?php
+
+/******************************************************************************
+ * Copyright (c) 2010 Jevon Wright and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * or
+ *
+ * LGPL which is available at http://www.gnu.org/licenses/lgpl.html
+ *
+ *
+ * Contributors:
+ * Jevon Wright - initial API and implementation
+ ****************************************************************************/
+
+namespace Html2Text;
+
+class Html2TextException extends \Exception {
+ var $more_info;
+
+ public function __construct($message = "", $more_info = "") {
+ parent::__construct($message);
+ $this->more_info = $more_info;
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/.editorconfig b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/.editorconfig
new file mode 100644
index 0000000..8c485ef
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/.editorconfig
@@ -0,0 +1,10 @@
+# EditorConfig is awesome: http://EditorConfig.org
+
+# don't add newlines to test files
+[*]
+insert_final_newline = false
+trim_trailing_whitespace = false
+
+[**.txt]
+insert_final_newline = false
+trim_trailing_whitespace = false
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/Html2TextComponentTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/Html2TextComponentTest.php
new file mode 100644
index 0000000..fed4e5d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/Html2TextComponentTest.php
@@ -0,0 +1,9 @@
+<?php
+
+class Html2TextComponentTest extends \ComponentTests\ComponentTest {
+
+ function getRoots() {
+ return array(__DIR__ . "/..");
+ }
+
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/Html2TextTest.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/Html2TextTest.php
new file mode 100644
index 0000000..4f9b8b0
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/Html2TextTest.php
@@ -0,0 +1,101 @@
+<?php
+
+class Html2TextTest extends PHPUnit_Framework_TestCase {
+
+ function doTest($test, $ignoreXmlError = false) {
+ $this->assertTrue(file_exists(__DIR__ . "/$test.html"), "File '$test.html' did not exist");
+ $this->assertTrue(file_exists(__DIR__ . "/$test.txt"), "File '$test.txt' did not exist");
+ $input = file_get_contents(__DIR__ . "/$test.html");
+ $expected = Html2Text\Html2Text::fixNewlines(file_get_contents(__DIR__ . "/$test.txt"));
+
+ $output = Html2Text\Html2Text::convert($input, $ignoreXmlError);
+
+ if ($output != $expected) {
+ file_put_contents(__DIR__ . "/$test.output", $output);
+ }
+ $this->assertEquals($output, $expected);
+ }
+
+ function testBasic() {
+ $this->doTest("basic");
+ }
+
+ function testAnchors() {
+ $this->doTest("anchors");
+ }
+
+ function testMoreAnchors() {
+ $this->doTest("more-anchors");
+ }
+
+ function test3() {
+ $this->doTest("test3");
+ }
+
+ function test4() {
+ $this->doTest("test4");
+ }
+
+ function testTable() {
+ $this->doTest("table");
+ }
+
+ function testNbsp() {
+ $this->doTest("nbsp");
+ }
+
+ function testLists() {
+ $this->doTest("lists");
+ }
+
+ function testPre() {
+ $this->doTest("pre");
+ }
+
+ function testFullEmail() {
+ $this->doTest("full_email");
+ }
+
+ function testImages() {
+ $this->doTest("images");
+ }
+
+ function testNonBreakingSpaces() {
+ $this->doTest("non-breaking-spaces");
+ }
+
+ function testUtf8Example() {
+ $this->doTest("utf8-example");
+ }
+
+ function testWindows1252Example() {
+ $this->doTest("windows-1252-example");
+ }
+
+ function testMsoffice() {
+ $this->doTest("msoffice");
+ }
+
+ function testDOMProcessing() {
+ $this->doTest("dom-processing");
+ }
+
+ function testEmpty() {
+ $this->doTest("empty");
+ }
+
+ function testHugeMsoffice() {
+ $this->doTest("huge-msoffice");
+ }
+
+ /**
+ * @expectedException PHPUnit_Framework_Error_Warning
+ */
+ function testInvalidXML() {
+ $this->doTest("invalid", false);
+ }
+
+ function testInvalidXMLIgnore() {
+ $this->doTest("invalid", true);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/anchors.html b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/anchors.html
new file mode 100644
index 0000000..2413c52
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/anchors.html
@@ -0,0 +1,12 @@
+A document without any HTML open/closing tags.
+
+<hr>
+
+We try and use the representation given by common browsers of the
+HTML document, so that it looks similar when converted to plain text.
+
+<a href="http://foo.com">visit foo.com</a> - or <a href="http://www.foo.com">http://www.foo.com</a>
+
+<a href="http://foo.com" title="a link with a title">link</a>
+
+<h2><a name="anchor">An anchor which will not appear</a></h2>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/anchors.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/anchors.txt
new file mode 100644
index 0000000..da440cf
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/anchors.txt
@@ -0,0 +1,5 @@
+A document without any HTML open/closing tags.
+---------------------------------------------------------------
+We try and use the representation given by common browsers of the HTML document, so that it looks similar when converted to plain text. [visit foo.com](http://foo.com) - or http://www.foo.com [link](http://foo.com)
+
+[An anchor which will not appear]
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/basic.html b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/basic.html
new file mode 100644
index 0000000..df46693
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/basic.html
@@ -0,0 +1,21 @@
+<html>
+<title>Ignored Title</title>
+<body>
+ <h1>Hello, World!</h1>
+
+ <p>This is some e-mail content.
+ Even though it has whitespace and newlines, the e-mail converter
+ will handle it correctly.
+
+ <p>Even mismatched tags.</p>
+
+ <div>A div</div>
+ <div>Another div</div>
+ <div>A div<div>within a div</div></div>
+
+ <p>Another line<br />Yet another line</p>
+
+ <a href="http://foo.com">A link</a>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/basic.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/basic.txt
new file mode 100644
index 0000000..1b8f37d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/basic.txt
@@ -0,0 +1,15 @@
+Hello, World!
+
+This is some e-mail content. Even though it has whitespace and newlines, the e-mail converter will handle it correctly.
+
+Even mismatched tags.
+
+A div
+Another div
+A div
+within a div
+
+Another line
+Yet another line
+
+[A link](http://foo.com)
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/dom-processing.html b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/dom-processing.html
new file mode 100644
index 0000000..6ba811f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/dom-processing.html
@@ -0,0 +1,8 @@
+<html>
+<body>
+<?a
+I am a random piece of code
+?>
+Hello
+</body>
+</html>
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/dom-processing.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/dom-processing.txt
new file mode 100644
index 0000000..5ab2f8a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/dom-processing.txt
@@ -0,0 +1 @@
+Hello
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/empty.html b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/empty.html
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/empty.html
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/empty.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/empty.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/empty.txt
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/full_email.html b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/full_email.html
new file mode 100644
index 0000000..acb65bf
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/full_email.html
@@ -0,0 +1,220 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <meta name="viewport" content="width=680">
+ </head>
+ <body class="cat-update-email cat-update" style="background: #ffccee; color: blue; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0; padding: 0; text-align: center" bgcolor="#ffccee">
+<style type="text/css">
+body.cat-update-email {
+margin: 0; padding: 0; background: #ffccee; color: blue; text-align: center;
+}
+body.cat-update-email {
+font-size: 12px; font-family: Times New Roman; font-weight: normal;
+}
+body.cat-update-email th {
+font-size: 12px; font-family: Times New Roman; font-weight: normal;
+}
+body.cat-update-email td {
+font-size: 12px; font-family: Times New Roman; font-weight: normal;
+}
+</style>
+ <table class="header-wrapper" style="border-spacing: 0; border: none; margin: 0; width: 100%">
+ <tr>
+ <td class="header" style="background: none; color: #999; font-family: Times New Roman; font-size: 12px; font-weight: normal; padding: 15px 0">
+ <table cellspacing="0" cellpadding="0" border="0" style="margin: 0 auto; padding: 0 20px; width: 640px">
+ <tr>
+ <th style="font-family: Times New Roman; font-size: 12px; font-weight: normal">
+ <a class="logo" href="http://localhost/home" style="color: red; text-decoration: none">
+ <img border="0" height="32" src="test.png" width="200" style="display: block">
+</a> </th>
+ <td class="account-number" style="color: white; font-family: Times New Roman; font-size: 12px; font-weight: normal; text-align: right" align="right">
+ 16 December 2015<br>
+ Account 123
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+
+ <table class="section-wrapper" style="border-spacing: 0; border: none; margin: 0 auto 20px; width: 640px">
+ <tr>
+ <td class="salutation section" style="background: white; color: black; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0 auto 20px; padding: 40px 20px; text-align: left; width: 600px" align="left" bgcolor="white">
+ <h1 class="user_greeting" style="font-family: Times New Roman; font-size: 1.8; font-weight: normal; line-height: 1.2; margin: 0 0 1em">
+ Hi Susan
+ </h1>
+ <p class="message" style="font-size: 1.5em; line-height: 1.2; margin: 0">
+ Here is your cat report.
+ </p>
+
+ </td>
+ </tr>
+ </table>
+
+
+
+
+<table class="section-wrapper" style="border-spacing: 0; border: none; margin: 0 auto 20px; width: 640px">
+ <tr>
+ <td class="balance section" style="background: white; color: black; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0 auto 20px; padding: 40px 20px; text-align: left; width: 600px" align="left" bgcolor="white">
+ <div class="account-status-heading" style="font-size: 2.5em; line-height: 1em; padding: 30px 20px; text-align: center" align="center">You have found <span class="status-cats-negative" style="color: #df0000">5 cats</span> less than anyone else</div>
+
+ <div id="cat-update-action-buttons">
+ <div id="buy-button" style="text-align: center" align="center">
+ <a class="btn-alert" href="http://localhost/cats" id="buy-cats-button" style="-moz-appearance: none; -webkit-appearance: none; background: #DF0000; border-radius: 3px; border: 11px solid #df0000; color: #fff; cursor: pointer; display: block; font-size: 16px; height: 16px; line-height: 16px; margin: 0 auto; text-decoration: none; transition: background-color .15s; width: 120px">Find more cats</a>
+ </div>
+ </div>
+ </td>
+ </tr>
+</table>
+
+<table class="section-wrapper" style="border-spacing: 0; border: none; margin: 0 auto 20px; width: 640px">
+ <tr>
+ <td class="cats section" id="cats" style="background: white; color: black; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0 auto 20px; padding: 40px 20px; text-align: left; width: 600px" align="left" bgcolor="white">
+ <div class="cats-usage">
+ <h2 style="font-family: Times New Roman; font-size: 1.8; font-weight: normal; line-height: 1.2; margin: 0">Down the road</h2>
+ <p class="fine-print" style="margin: 0">Across the hall</p>
+
+ <h3 style="font-family: Times New Roman; font-size: 18px; font-weight: normal; line-height: 2em; margin: 10px 0 0">Your achievements</h3>
+ <table class="current-usage with-icon-left" style="border-collapse: collapse; border-spacing: 0; margin-bottom: 20px; margin-top: 20px; width: 100%">
+ <tr>
+ <th style="border: none; font-family: Times New Roman; font-size: 14px; font-weight: bold; margin: 0; padding: 0; text-align: left; vertical-align: middle; width: 50px" align="left" valign="middle"><img src="test.png"></th>
+ <td style="border: none; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0; padding: 0; vertical-align: top; width: 550px" valign="top">
+ <div class="top">You're currently finding about</div>
+ <div class="large" style="color: black; font-size: 18px; padding: 4px 0">12 cats</div>
+ <div class="bottom">per day</div>
+ </td>
+ </tr>
+ <tr><td colspan="2" style="border: none; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0; padding: 0; vertical-align: top; width: 550px" valign="top"> </td></tr>
+ <tr>
+ <td colspan="2" style="border: none; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0; padding: 0; vertical-align: top; width: 550px" valign="top"><img alt="Number of cats found" src="test.png"></td>
+ </tr>
+ </table>
+</div>
+
+
+ <div class="summary">
+ <hr class="fine-print" style="border-bottom-color: #eee; border-bottom-style: solid; border-width: 0 0 1px; margin: 20px 0">
+
+ <h3 style="font-family: Times New Roman; font-size: 18px; font-weight: normal; line-height: 2em; margin: 10px 0 0">Your last cat was found two days ago.</h3>
+ <p class="fine-print" style="margin: 0">One type of cat is a kitten.</p>
+
+ <table class="readings" style="border-collapse: collapse; border-spacing: 0; margin: 10px 0; width: 100%">
+ <tr style="color: #BD236C">
+ <td class="left-column" style="border: none; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0; padding: 0; width: 5%">
+ <img src="test.png" style="padding-top: 10px">
+ </td>
+ <td class="center-column" style="border: none; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0; padding: 0; width: 60%">
+ <h3 style="font-family: Times New Roman; font-size: 18px; font-weight: normal; line-height: 2em; margin: 10px 0 0">Special account <span class="nickname" style="font-size: 12px"></span> <span class="fine-print">A1</span>
+</h3>
+ </td>
+ <td class="right-column" style="border: none; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0; padding: 0; width: 20%">
+ <h3 style="font-family: Times New Roman; font-size: 18px; font-weight: normal; line-height: 2em; margin: 10px 0 0">12.345</h3>
+ </td>
+ <td style="border: none; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0; padding: 0"></td>
+ </tr>
+ </table>
+
+</div>
+
+ </td>
+ </tr>
+</table>
+
+ <div class="banner" style="margin: 0 auto 20px; padding: 10px; text-align: center; width: 640px" align="center">
+ <a href="http://localhost/logout" style="color: red; text-decoration: none">
+ <img alt="" border="0" height="177" src="http://localhost/photo1.png" width="600">
+ </a>
+</div>
+
+ <table class="section-wrapper" style="border-spacing: 0; border: none; margin: 0 auto 20px; width: 640px">
+ <tr>
+ <td class="tips section" style="background: white; color: black; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0 auto 20px; padding: 40px 20px; text-align: left; width: 600px" align="left" bgcolor="white">
+ <table style="border-collapse: collapse; border-spacing: 0; width: 100%">
+ <tr>
+ <td colspan="3" style="border: none; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0; padding: 5px 0 0; vertical-align: top; width: 200px" valign="top"><h2 style="font-family: Times New Roman; font-size: 1.8; font-weight: normal; line-height: 1.2; margin: 0 0 10px">How can you find more cats?</h2></td>
+ </tr>
+
+ <tr class="icon">
+ <td style="border: none; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0; padding: 5px 0 0; vertical-align: top; width: 200px" valign="top"><img height="40" src="http://localhost/photo1.png" width="40"></td>
+ <td style="border: none; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0; padding: 5px 0 0 17px; vertical-align: top; width: 200px" valign="top"><img height="40" src="http://localhost/photo2.png" width="40"></td>
+ <td style="border: none; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0; padding: 5px 0 0 17px; vertical-align: top; width: 200px" valign="top"><img height="40" src="http://localhost/photo3.png" width="40"></td>
+ </tr>
+
+ <tr class="subtitle">
+ <td style="border: none; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0; padding: 5px 0 0; vertical-align: top; width: 200px" valign="top"><h3 style="font-family: Times New Roman; font-size: 18px; font-weight: normal; line-height: 2em; margin: 0 0 5px">Look in trash cans</h3></td>
+ <td style="border: none; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0; padding: 5px 0 0 17px; vertical-align: top; width: 200px" valign="top"><h3 style="font-family: Times New Roman; font-size: 18px; font-weight: normal; line-height: 2em; margin: 0 0 5px">Start meowing</h3></td>
+ <td style="border: none; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0; padding: 5px 0 0 17px; vertical-align: top; width: 200px" valign="top"><h3 style="font-family: Times New Roman; font-size: 18px; font-weight: normal; line-height: 2em; margin: 0 0 5px">Eat cat food</h3></td>
+ </tr>
+
+ <tr class="body" style="color: green">
+ <td style="border: none; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0; padding: 5px 0 0; vertical-align: top; width: 200px" valign="top">Some cats like to hang out in trash cans. Some cats do not.</td>
+ <td style="border: none; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0; padding: 5px 0 0 17px; vertical-align: top; width: 200px" valign="top">Some cats are attracted to similar tones.</td>
+ <td style="border: none; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0; padding: 5px 0 0 17px; vertical-align: top; width: 200px" valign="top">So one day your tears may smell like cat food, attracting more cats.</td>
+ </tr>
+
+ <tr class="image">
+ <td style="border: none; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0; padding: 5px 0 0; vertical-align: top; width: 200px" valign="top">
+ <a href="https://localhost/about" style="color: red; text-decoration: none">
+ <img border="0" height="130" src="http://localhost/photo1.png" style="display: block; margin: 10px 0" width="165">
+ </a>
+ </td>
+ <td style="border: none; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0; padding: 5px 0 0 17px; vertical-align: top; width: 200px" valign="top">
+ <a href="https://localhost/about" style="color: red; text-decoration: none">
+ <img border="0" height="130" src="http://localhost/photo2.png" style="display: block; margin: 10px 0" width="165">
+ </a>
+ </td>
+ <td style="border: none; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0; padding: 5px 0 0 17px; vertical-align: top; width: 200px" valign="top">
+ <a href="https://localhost/about" style="color: red; text-decoration: none">
+ <img border="0" height="130" src="http://localhost/photo3.png" style="display: block; margin: 10px 0" width="165">
+ </a>
+ </td>
+ </tr>
+
+ <tr class="tips-footer" style="color: green">
+ <td style="border: none; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0; padding: 5px 0 0; vertical-align: top; width: 200px" valign="top">
+ <a href="https://github.com/soundasleep/html2text_ruby" style="color: red; text-decoration: none">Cats are great.</a>
+ </td>
+ <td style="border: none; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0; padding: 5px 0 0 17px; vertical-align: top; width: 200px" valign="top">
+ <a href="https://github.com/soundasleep/html2text_ruby" style="color: red; text-decoration: none">Find more cats.</a>
+ </td>
+ <td style="border: none; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0; padding: 5px 0 0 17px; vertical-align: top; width: 200px" valign="top">
+ <a href="https://github.com/soundasleep/html2text_ruby" style="color: red; text-decoration: none">Do more things.</a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+
+
+
+
+
+ <table class="footer-wrapper" style="margin: 0 auto 20px">
+ <tr>
+ <td class="footer" style="color: #9B9B9B; font-family: Times New Roman; font-size: 12px; font-weight: normal; margin: 0 auto 4em; text-align: left; width: 600px" align="left">
+ <h3 style="font-family: Times New Roman; font-size: 1.2; font-weight: normal; line-height: 2em; margin: 0">
+ <a href="http://localhost/contact" style="color: red; text-decoration: none">Contact us</a>
+ </h3>
+ <p style="margin: 0 0 1em">
+ cats@cats.com<br>
+ Monday and Friday
+ </p>
+
+ <p style="margin: 0 0 1em"><a href="https://github.com/soundasleep/html2text" style="color: red; text-decoration: none"><img align="absmiddle" height="26" src="test.png" width="26"></a>
+<a href="https://github.com/soundasleep/html2text_ruby" style="color: red; text-decoration: none"><img align="absmiddle" height="26" src="test.png" width="26"></a>
+</p>
+
+ <p class="message no-web-display" style="margin: 0">Having trouble seeing this email?
+ <a href="http://localhost/view_it_online" style="color: red; text-decoration: none">View it online</a>.
+ </p>
+
+ </td>
+ </tr>
+ </table>
+ <script async type="text/javascript" id="profiler" src="/profiler.js" data-version="1.0"></script>
+</body>
+</html>
+
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/full_email.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/full_email.txt
new file mode 100644
index 0000000..475e31a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/full_email.txt
@@ -0,0 +1,54 @@
+http://localhost/home 16 December 2015
+Account 123
+
+Hi Susan
+
+Here is your cat report.
+
+You have found 5 cats less than anyone else
+
+[Find more cats](http://localhost/cats)
+
+Down the road
+
+Across the hall
+
+Your achievements
+
+You're currently finding about
+12 cats
+per day
+
+[Number of cats found]
+---------------------------------------------------------------
+
+Your last cat was found two days ago.
+
+One type of cat is a kitten.
+
+Special account A1
+
+12.345
+
+http://localhost/logout
+
+How can you find more cats?
+
+Look in trash cans
+
+Start meowing
+
+Eat cat food
+
+Some cats like to hang out in trash cans. Some cats do not. Some cats are attracted to similar tones. So one day your tears may smell like cat food, attracting more cats.
+https://localhost/about https://localhost/about https://localhost/about
+[Cats are great.](https://github.com/soundasleep/html2text_ruby) [Find more cats.](https://github.com/soundasleep/html2text_ruby) [Do more things.](https://github.com/soundasleep/html2text_ruby)
+
+[Contact us](http://localhost/contact)
+
+cats@cats.com
+Monday and Friday
+
+https://github.com/soundasleep/html2text https://github.com/soundasleep/html2text_ruby
+
+Having trouble seeing this email? [View it online](http://localhost/view_it_online).
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/huge-msoffice.html b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/huge-msoffice.html
new file mode 100644
index 0000000..563fdfd
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/huge-msoffice.html
@@ -0,0 +1 @@
+<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!-- /* Font Definitions */ @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4;} @font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {margin:0cm; margin-bottom:.0001pt; font-size:11.0pt; font-family:"Calibri",sans-serif; mso-fareast-language:EN-US;} a:link, span.MsoHyperlink {mso-style-priority:99; color:#0563C1; text-decoration:underline;} a:visited, span.MsoHyperlinkFollowed {mso-style-priority:99; color:#954F72; text-decoration:underline;} span.EmailStyle17 {mso-style-type:personal-compose; font-family:"Calibri",sans-serif; color:windowtext;} .MsoChpDefault {mso-style-type:export-only; font-family:"Calibri",sans-serif; mso-fareast-language:EN-US;} @page WordSection1 {size:612.0pt 792.0pt; margin:72.0pt 72.0pt 72.0pt 72.0pt;} div.WordSection1 {page:WordSection1;} --></style><!--[if gte mso 9]><xml> <o:shapedefaults v:ext="edit" spidmax="1026" /> </xml><![endif]--><!--[if gte mso 9]><xml> <o:shapelayout v:ext="edit"> <o:idmap v:ext="edit" data="1" /> </o:shapelayout></xml><![endif]--></head><body lang=EN-GB link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p></div></body></html>
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/huge-msoffice.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/huge-msoffice.txt
new file mode 100644
index 0000000..2ca5879
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/huge-msoffice.txt
@@ -0,0 +1,25872 @@
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/images.html b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/images.html
new file mode 100644
index 0000000..1f360e9
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/images.html
@@ -0,0 +1,54 @@
+<body>
+ <p>
+ One: <img src="one.png">
+ </p>
+
+ <p>
+ Two: <img src="two.png" alt="two">
+ </p>
+
+ <p>
+ Three: <img src="three.png" title="three">
+ </p>
+
+ <p>
+ Four: <img src="four.png" title="four" alt="four alt">
+ </p>
+
+ <h1>With links</h1>
+
+ <p>
+ One: <a href="http://localhost"><img src="one.png"></a>
+ </p>
+
+ <p>
+ Two: <a href="http://localhost"><img src="two.png" alt="two"></a>
+ </p>
+
+ <p>
+ Three: <a href="http://localhost"><img src="three.png" title="three"></a>
+ </p>
+
+ <p>
+ Four: <a href="http://localhost"><img src="four.png" title="four" alt="four alt"></a>
+ </p>
+
+ <h1>With links with titles</h1>
+
+ <p>
+ One: <a href="http://localhost" title="one link"><img src="one.png"></a>
+ </p>
+
+ <p>
+ Two: <a href="http://localhost" title="two link"><img src="two.png" alt="two"></a>
+ </p>
+
+ <p>
+ Three: <a href="http://localhost" title="three link"><img src="three.png" title="three"></a>
+ </p>
+
+ <p>
+ Four: <a href="http://localhost" title="four link"><img src="four.png" title="four" alt="four alt"></a>
+ </p>
+</body>
+</html>
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/images.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/images.txt
new file mode 100644
index 0000000..7c3c020
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/images.txt
@@ -0,0 +1,27 @@
+One:
+
+Two: [two]
+
+Three: [three]
+
+Four: [four]
+
+With links
+
+One: http://localhost
+
+Two: [two](http://localhost)
+
+Three: [three](http://localhost)
+
+Four: [four](http://localhost)
+
+With links with titles
+
+One: [one link](http://localhost)
+
+Two: [two link](http://localhost)
+
+Three: [three link](http://localhost)
+
+Four: [four link](http://localhost)
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/invalid.html b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/invalid.html
new file mode 100644
index 0000000..16d43ee
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/invalid.html
@@ -0,0 +1,4 @@
+<b>Hello &nbsnbsp; world</b>
+<div class=">
+ Error
+</div>
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/invalid.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/invalid.txt
new file mode 100644
index 0000000..128d9f5
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/invalid.txt
@@ -0,0 +1 @@
+Hello &nbsnbsp; world
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/lists.html b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/lists.html
new file mode 100644
index 0000000..ecbb7be
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/lists.html
@@ -0,0 +1,24 @@
+<h1>List tests</h1>
+
+<p>
+Add some lists.
+</p>
+
+<ol>
+ <li>one</li>
+ <li>two
+ <li>three
+</ol>
+
+<h2>An unordered list</h2>
+
+<ul>
+ <li>one
+ <li>two</li>
+ <li>three</li>
+</ul>
+<ul>
+ <li>one
+ <li>two</li>
+ <li>three</li>
+</ul>
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/lists.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/lists.txt
new file mode 100644
index 0000000..51629f7
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/lists.txt
@@ -0,0 +1,17 @@
+List tests
+
+Add some lists.
+
+- one
+- two
+- three
+
+An unordered list
+
+- one
+- two
+- three
+
+- one
+- two
+- three
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/more-anchors.html b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/more-anchors.html
new file mode 100644
index 0000000..69918b6
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/more-anchors.html
@@ -0,0 +1,14 @@
+<h1>Anchor tests</h1>
+
+<p>
+Visit http://openiaml.org or <a href="http://openiaml.org">openiaml.org</a> or <a href="http://openiaml.org">http://openiaml.org</a>.
+</p>
+
+<p>
+To visit with SSL, visit https://openiaml.org or <a href="https://openiaml.org">openiaml.org</a> or <a href="https://openiaml.org">https://openiaml.org</a>.
+</p>
+
+<p>
+To mail, email support@openiaml.org or mailto:support@openiaml.org
+or <a href="mailto:support@openiaml.org">support@openiaml.org</a> or <a href="mailto:support@openiaml.org">mailto:support@openiaml.org</a>.
+</p>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/more-anchors.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/more-anchors.txt
new file mode 100644
index 0000000..3471196
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/more-anchors.txt
@@ -0,0 +1,7 @@
+Anchor tests
+
+Visit http://openiaml.org or openiaml.org or http://openiaml.org.
+
+To visit with SSL, visit https://openiaml.org or openiaml.org or https://openiaml.org.
+
+To mail, email support@openiaml.org or mailto:support@openiaml.org or support@openiaml.org or mailto:support@openiaml.org.
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/msoffice.html b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/msoffice.html
new file mode 100644
index 0000000..c0afeb0
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/msoffice.html
@@ -0,0 +1 @@
+<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!-- /* Font Definitions */ @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4;} @font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {margin:0cm; margin-bottom:.0001pt; font-size:11.0pt; font-family:"Calibri",sans-serif; mso-fareast-language:EN-US;} a:link, span.MsoHyperlink {mso-style-priority:99; color:#0563C1; text-decoration:underline;} a:visited, span.MsoHyperlinkFollowed {mso-style-priority:99; color:#954F72; text-decoration:underline;} span.EmailStyle17 {mso-style-type:personal-compose; font-family:"Calibri",sans-serif; color:windowtext;} .MsoChpDefault {mso-style-type:export-only; font-family:"Calibri",sans-serif; mso-fareast-language:EN-US;} @page WordSection1 {size:612.0pt 792.0pt; margin:72.0pt 72.0pt 72.0pt 72.0pt;} div.WordSection1 {page:WordSection1;} --></style><!--[if gte mso 9]><xml> <o:shapedefaults v:ext="edit" spidmax="1026" /> </xml><![endif]--><!--[if gte mso 9]><xml> <o:shapelayout v:ext="edit"> <o:idmap v:ext="edit" data="1" /> </o:shapelayout></xml><![endif]--></head><body lang=EN-GB link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Dear html2text,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is an example email that can be used to test html2text conversion of outlook / exchange emails.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The addition of <o:p> tags is very annoying!<o:p></o:p></p><p class=MsoNormal>This is a single line return<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>This is bold<o:p></o:p></b></p><p class=MsoNormal><i>This is italic<o:p></o:p></i></p><p class=MsoNormal><u>This is underline<o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Andrew<o:p></o:p></p></div></body></html>
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/msoffice.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/msoffice.txt
new file mode 100644
index 0000000..c9ba808
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/msoffice.txt
@@ -0,0 +1,12 @@
+Dear html2text,
+
+This is an example email that can be used to test html2text conversion of outlook / exchange emails.
+
+The addition of <o:p> tags is very annoying!
+This is a single line return
+
+This is bold
+This is italic
+This is underline
+
+Andrew
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/nbsp.html b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/nbsp.html
new file mode 100644
index 0000000..2011bc7
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/nbsp.html
@@ -0,0 +1 @@
+hello world & people < > &NBSP;
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/nbsp.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/nbsp.txt
new file mode 100644
index 0000000..b09619d
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/nbsp.txt
@@ -0,0 +1 @@
+hello world & people < > &NBSP;
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/newlines.html b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/newlines.html
new file mode 100644
index 0000000..6da7486
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/newlines.html
@@ -0,0 +1,31 @@
+<html>
+<body>
+<div>
+Hello
+<br>
+</div>
+<div>
+How are you?
+<br>
+</div>
+
+<p>
+How are you?
+<br>
+<p></p>
+</p>
+
+<p>
+How are you?
+<br>
+</p>
+
+This is not the end!
+<div>
+How are you again?
+<br>
+</div>
+This is the end!
+<br>
+</body>
+</html>
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/newlines.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/newlines.txt
new file mode 100644
index 0000000..8792c10
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/newlines.txt
@@ -0,0 +1,10 @@
+Hello
+How are you?
+
+How are you?
+
+How are you?
+
+This is not the end!
+How are you again?
+This is the end!
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/non-breaking-spaces.html b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/non-breaking-spaces.html
new file mode 100644
index 0000000..a23ec36
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/non-breaking-spaces.html
@@ -0,0 +1 @@
+these spaces are non-breaking
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/non-breaking-spaces.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/non-breaking-spaces.txt
new file mode 100644
index 0000000..475dfe7
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/non-breaking-spaces.txt
@@ -0,0 +1 @@
+these spaces are non-breaking
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/pre.html b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/pre.html
new file mode 100644
index 0000000..1a6306f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/pre.html
@@ -0,0 +1,10 @@
+Here is the code
+<pre>
+#include <stdlib.h>
+#include <stdio.h>
+
+int main(){
+ return 0;
+};
+
+</pre>
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/pre.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/pre.txt
new file mode 100644
index 0000000..0285442
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/pre.txt
@@ -0,0 +1,8 @@
+Here is the code
+
+#include <stdlib.h>
+#include <stdio.h>
+
+int main(){
+ return 0;
+};
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/table.html b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/table.html
new file mode 100644
index 0000000..b4b3cf0
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/table.html
@@ -0,0 +1,53 @@
+<html>
+<title>Ignored Title</title>
+<body>
+ <h1>Hello, World!</h1>
+ <table>
+ <thead>
+ <tr>
+ <th>Col A</th>
+ <th>Col B</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>
+ Data A1
+ </td>
+ <td>
+ Data B1
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Data A2
+ </td>
+ <td>
+ Data B2
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Data A3
+ </td>
+ <td>
+ Data B4
+ </td>
+ </tr>
+ </tbody>
+ <tfoot>
+ <tr>
+ <td>
+ Total A
+ </td>
+ <td>
+ Total B
+ </td>
+ </tr>
+
+ </tfoot>
+
+ </table>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/table.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/table.txt
new file mode 100644
index 0000000..f03bace
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/table.txt
@@ -0,0 +1,7 @@
+Hello, World!
+
+Col A Col B
+Data A1 Data B1
+Data A2 Data B2
+Data A3 Data B4
+Total A Total B
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/test3.html b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/test3.html
new file mode 100644
index 0000000..22cfed9
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/test3.html
@@ -0,0 +1 @@
+test one<br />test two
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/test3.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/test3.txt
new file mode 100644
index 0000000..4104e03
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/test3.txt
@@ -0,0 +1,2 @@
+test one
+test two
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/test4.html b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/test4.html
new file mode 100644
index 0000000..d1fa7b0
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/test4.html
@@ -0,0 +1 @@
+1<br />2<br />3<br />4<br />5 6
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/test4.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/test4.txt
new file mode 100644
index 0000000..644e527
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/test4.txt
@@ -0,0 +1,5 @@
+1
+2
+3
+4
+5 6
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/utf8-example.html b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/utf8-example.html
new file mode 100644
index 0000000..fdff306
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/utf8-example.html
@@ -0,0 +1,4 @@
+<ul>
+ <li>ÅÄÖ</li>
+ <li>åäö</li>
+</ul>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/utf8-example.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/utf8-example.txt
new file mode 100644
index 0000000..4d10a5c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/utf8-example.txt
@@ -0,0 +1,2 @@
+- ÅÄÖ
+- åäö
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/windows-1252-example.html b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/windows-1252-example.html
new file mode 100644
index 0000000..2de5120
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/windows-1252-example.html
@@ -0,0 +1,4 @@
+<ul>
+ <li>ÅÄÖ</li>
+ <li>åäö</li>
+</ul>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/windows-1252-example.txt b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/windows-1252-example.txt
new file mode 100644
index 0000000..4d10a5c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/soundasleep/html2text/tests/windows-1252-example.txt
@@ -0,0 +1,2 @@
+- ÅÄÖ
+- åäö
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/.gitignore b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/.gitignore
new file mode 100644
index 0000000..0d968f1
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/.gitignore
@@ -0,0 +1,7 @@
+composer.lock
+vendor/
+.*.swp
+php-u2flib-server-*.tar.gz
+php-u2flib-server-*.tar.gz.sig
+apidocs/
+build/
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/.travis.yml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/.travis.yml
new file mode 100644
index 0000000..beade3b
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/.travis.yml
@@ -0,0 +1,23 @@
+language: php
+sudo: false
+php:
+ - 7.0
+ - 7.1
+ - 7.2
+ - hhvm
+matrix:
+ include:
+ - php: 5.6
+ env: COVERALLS=true
+ allow_failures:
+ - php: hhvm
+
+before_script:
+ - composer install
+
+script:
+ - ./vendor/bin/psalm
+ - ./vendor/phpunit/phpunit/phpunit -c phpunit.xml
+
+after_success:
+ - test -z $COVERALLS || (composer require satooshi/php-coveralls && vendor/bin/coveralls -v)
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/BLURB b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/BLURB
new file mode 100644
index 0000000..c579742
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/BLURB
@@ -0,0 +1,9 @@
+Author: Yubico
+Basename: php-u2flib-server
+Homepage: https://developers.yubico.com/php-u2flib-server
+License: BSD-2-Clause
+Name: Native U2F library in PHP
+Project: php-u2flib-server
+Summary: Native U2F library in PHP
+Yubico-Category: U2F projects
+Travis: https://travis-ci.org/Yubico/php-u2flib-server
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/COPYING b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/COPYING
new file mode 100644
index 0000000..427c917
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/COPYING
@@ -0,0 +1,26 @@
+Copyright (c) 2014 Yubico AB
+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.
+
+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.
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/NEWS b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/NEWS
new file mode 100644
index 0000000..496175e
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/NEWS
@@ -0,0 +1,34 @@
+php-u2flib-server NEWS -- History of user-visible changes.
+
+* Version 1.0.2 (released 2018-09-07)
+ ** Additional error checks.
+ ** Add user presence check.
+ ** Support single files for attestation root.
+ ** Type safety, CSPRNG, avoid chr().
+
+* Version 1.0.1 (released 2017-05-09)
+ ** Move examples to phps so they don't execute by default
+ ** Use common challenge for multiple registrations
+
+* Version 1.0.0 (released 2016-02-19)
+ ** Give an early error on openssl < 1.0
+ ** Support devices with initial counter 0
+ ** Fixes to examples
+ ** Handle errorCode: 0 correctly
+
+* Version 0.1.0 (released 2015-03-03)
+ ** Use openssl for all crypto instead of third party extensions.
+ ** Properly check the request challenge on authenticate.
+ ** Switch from returning error codes to throwing exceptions.
+ ** Stop recommending composer for installation.
+
+* Version 0.0.2 (released 2014-10-24)
+ ** Refactor the API to return objects instead of encoded objects.
+ ** Add a second example that uses PDO to store registrations.
+ ** Add documentation to the API.
+ ** Check that randomness returned is good.
+ ** Drop the unneeded mcrypt extension.
+ ** More tests.
+
+* Version 0.0.1 (released 2014-10-16)
+ ** Initial release.
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/README b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/README
new file mode 100644
index 0000000..0116a27
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/README
@@ -0,0 +1,34 @@
+php-u2flib-server
+-----------------
+
+image:https://travis-ci.org/Yubico/php-u2flib-server.svg?branch=master["Build Status", link="https://travis-ci.org/Yubico/php-u2flib-server"]
+image:https://coveralls.io/repos/Yubico/php-u2flib-server/badge.svg?branch=master&service=github["Coverage", link="https://coveralls.io/github/Yubico/php-u2flib-server?branch=master"]
+image:https://scrutinizer-ci.com/g/Yubico/php-u2flib-server/badges/quality-score.png?b=master["Scrutinizer Code Quality", link="https://scrutinizer-ci.com/g/Yubico/php-u2flib-server/?branch=master"]
+
+=== Introduction ===
+
+Serverside U2F library for PHP. Provides functionality for registering
+tokens and authentication with said tokens.
+
+To read more about U2F and how to use a U2F library, visit
+link:http://developers.yubico.com/U2F[developers.yubico.com/U2F].
+
+=== License ===
+
+The project is licensed under a BSD license. See the file COPYING for
+exact wording. For any copyright year range specified as YYYY-ZZZZ in
+this package note that the range specifies every single year in that
+closed interval.
+
+=== Dependencies ===
+
+The only dependency is the openssl extension to PHP that has to be enabled.
+
+A composer.json is included in the distribution to make things simpler for
+other project using composer.
+
+=== Tests ===
+
+To run the test suite link:https://phpunit.de[PHPUnit] is required. To run it, type:
+
+ $ phpunit
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/README.adoc b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/README.adoc
new file mode 120000
index 0000000..100b938
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/README.adoc
@@ -0,0 +1 @@
+README
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/apigen.neon b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/apigen.neon
new file mode 100644
index 0000000..bbb7071
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/apigen.neon
@@ -0,0 +1,13 @@
+destination: apidocs
+
+source:
+ - src/u2flib_server
+
+exclude:
+ - "*/tests/*"
+
+groups: none
+
+tree: false
+
+title: php-u2flib-server API
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/composer.json b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/composer.json
new file mode 100644
index 0000000..3f2d9ea
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/composer.json
@@ -0,0 +1,18 @@
+{
+ "name":"yubico/u2flib-server",
+ "description":"Library for U2F implementation",
+ "homepage":"https://developers.yubico.com/php-u2flib-server",
+ "license":"BSD-2-Clause",
+ "require": {
+ "ext-openssl":"*",
+ "paragonie/random_compat": ">= 1",
+ "php": ">=5.6"
+ },
+ "autoload": {
+ "classmap": ["src/"]
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~5.7",
+ "vimeo/psalm": "^0|^1|^2"
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/do-source-release.sh b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/do-source-release.sh
new file mode 100755
index 0000000..7e50173
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/do-source-release.sh
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+set -e
+
+VERSION=$1
+PGP_KEYID=$2
+
+if [ "x$PGP_KEYID" = "x" ]; then
+ echo "try with $0 VERSION PGP_KEYID"
+ echo "example: $0 0.0.1 B2168C0A"
+ exit
+fi
+
+if ! head -3 NEWS | grep -q "Version $VERSION .released `date -I`"; then
+ echo "You need to update date/version in NEWS"
+ exit
+fi
+
+if [ "x$YUBICO_GITHUB_REPO" = "x" ]; then
+ echo "you need to define YUBICO_GITHUB_REPO"
+ exit
+fi
+
+releasename=php-u2flib-server-${VERSION}
+
+git push
+git tag -u ${PGP_KEYID} -m $VERSION $VERSION
+git push --tags
+tmpdir=`mktemp -d /tmp/release.XXXXXX`
+releasedir=${tmpdir}/${releasename}
+mkdir -p $releasedir
+git archive $VERSION --format=tar | tar -xC $releasedir
+git2cl > $releasedir/ChangeLog
+cd $releasedir
+apigen generate
+cd -
+tar -cz --directory=$tmpdir --file=${releasename}.tar.gz $releasename
+gpg --detach-sign --default-key $PGP_KEYID ${releasename}.tar.gz
+$YUBICO_GITHUB_REPO/publish php-u2flib-server $VERSION ${releasename}.tar.gz*
+rm -rf $tmpdir
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/examples/assets/u2f-api.js b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/examples/assets/u2f-api.js
new file mode 100644
index 0000000..0f06f50
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/examples/assets/u2f-api.js
@@ -0,0 +1,651 @@
+// Copyright 2014-2015 Google Inc. All rights reserved.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file or at
+// https://developers.google.com/open-source/licenses/bsd
+
+/**
+ * @fileoverview The U2F api.
+ */
+
+'use strict';
+
+/** Namespace for the U2F api.
+ * @type {Object}
+ */
+var u2f = u2f || {};
+
+/**
+ * The U2F extension id
+ * @type {string}
+ * @const
+ */
+u2f.EXTENSION_ID = 'kmendfapggjehodndflmmgagdbamhnfd';
+
+/**
+ * Message types for messsages to/from the extension
+ * @const
+ * @enum {string}
+ */
+u2f.MessageTypes = {
+ 'U2F_REGISTER_REQUEST': 'u2f_register_request',
+ 'U2F_SIGN_REQUEST': 'u2f_sign_request',
+ 'U2F_REGISTER_RESPONSE': 'u2f_register_response',
+ 'U2F_SIGN_RESPONSE': 'u2f_sign_response'
+};
+
+/**
+ * Response status codes
+ * @const
+ * @enum {number}
+ */
+u2f.ErrorCodes = {
+ 'OK': 0,
+ 'OTHER_ERROR': 1,
+ 'BAD_REQUEST': 2,
+ 'CONFIGURATION_UNSUPPORTED': 3,
+ 'DEVICE_INELIGIBLE': 4,
+ 'TIMEOUT': 5
+};
+
+/**
+ * A message type for registration requests
+ * @typedef {{
+ * type: u2f.MessageTypes,
+ * signRequests: Array<u2f.SignRequest>,
+ * registerRequests: ?Array<u2f.RegisterRequest>,
+ * timeoutSeconds: ?number,
+ * requestId: ?number
+ * }}
+ */
+u2f.Request;
+
+/**
+ * A message for registration responses
+ * @typedef {{
+ * type: u2f.MessageTypes,
+ * responseData: (u2f.Error | u2f.RegisterResponse | u2f.SignResponse),
+ * requestId: ?number
+ * }}
+ */
+u2f.Response;
+
+/**
+ * An error object for responses
+ * @typedef {{
+ * errorCode: u2f.ErrorCodes,
+ * errorMessage: ?string
+ * }}
+ */
+u2f.Error;
+
+/**
+ * Data object for a single sign request.
+ * @typedef {{
+ * version: string,
+ * challenge: string,
+ * keyHandle: string,
+ * appId: string
+ * }}
+ */
+u2f.SignRequest;
+
+/**
+ * Data object for a sign response.
+ * @typedef {{
+ * keyHandle: string,
+ * signatureData: string,
+ * clientData: string
+ * }}
+ */
+u2f.SignResponse;
+
+/**
+ * Data object for a registration request.
+ * @typedef {{
+ * version: string,
+ * challenge: string,
+ * appId: string
+ * }}
+ */
+u2f.RegisterRequest;
+
+/**
+ * Data object for a registration response.
+ * @typedef {{
+ * registrationData: string,
+ * clientData: string
+ * }}
+ */
+u2f.RegisterResponse;
+
+
+// Low level MessagePort API support
+
+/**
+ * Sets up a MessagePort to the U2F extension using the
+ * available mechanisms.
+ * @param {function((MessagePort|u2f.WrappedChromeRuntimePort_))} callback
+ */
+u2f.getMessagePort = function(callback) {
+ if (typeof chrome != 'undefined' && chrome.runtime) {
+ // The actual message here does not matter, but we need to get a reply
+ // for the callback to run. Thus, send an empty signature request
+ // in order to get a failure response.
+ var msg = {
+ type: u2f.MessageTypes.U2F_SIGN_REQUEST,
+ signRequests: []
+ };
+ chrome.runtime.sendMessage(u2f.EXTENSION_ID, msg, function() {
+ if (!chrome.runtime.lastError) {
+ // We are on a whitelisted origin and can talk directly
+ // with the extension.
+ u2f.getChromeRuntimePort_(callback);
+ } else {
+ // chrome.runtime was available, but we couldn't message
+ // the extension directly, use iframe
+ u2f.getIframePort_(callback);
+ }
+ });
+ } else if (u2f.isAndroidChrome_()) {
+ u2f.getAuthenticatorPort_(callback);
+ } else {
+ // chrome.runtime was not available at all, which is normal
+ // when this origin doesn't have access to any extensions.
+ u2f.getIframePort_(callback);
+ }
+};
+
+/**
+ * Detect chrome running on android based on the browser's useragent.
+ * @private
+ */
+u2f.isAndroidChrome_ = function() {
+ var userAgent = navigator.userAgent;
+ return userAgent.indexOf('Chrome') != -1 &&
+ userAgent.indexOf('Android') != -1;
+};
+
+/**
+ * Connects directly to the extension via chrome.runtime.connect
+ * @param {function(u2f.WrappedChromeRuntimePort_)} callback
+ * @private
+ */
+u2f.getChromeRuntimePort_ = function(callback) {
+ var port = chrome.runtime.connect(u2f.EXTENSION_ID,
+ {'includeTlsChannelId': true});
+ setTimeout(function() {
+ callback(new u2f.WrappedChromeRuntimePort_(port));
+ }, 0);
+};
+
+/**
+ * Return a 'port' abstraction to the Authenticator app.
+ * @param {function(u2f.WrappedAuthenticatorPort_)} callback
+ * @private
+ */
+u2f.getAuthenticatorPort_ = function(callback) {
+ setTimeout(function() {
+ callback(new u2f.WrappedAuthenticatorPort_());
+ }, 0);
+};
+
+/**
+ * A wrapper for chrome.runtime.Port that is compatible with MessagePort.
+ * @param {Port} port
+ * @constructor
+ * @private
+ */
+u2f.WrappedChromeRuntimePort_ = function(port) {
+ this.port_ = port;
+};
+
+/**
+ * Format a return a sign request.
+ * @param {Array<u2f.SignRequest>} signRequests
+ * @param {number} timeoutSeconds
+ * @param {number} reqId
+ * @return {Object}
+ */
+u2f.WrappedChromeRuntimePort_.prototype.formatSignRequest_ =
+ function(signRequests, timeoutSeconds, reqId) {
+ return {
+ type: u2f.MessageTypes.U2F_SIGN_REQUEST,
+ signRequests: signRequests,
+ timeoutSeconds: timeoutSeconds,
+ requestId: reqId
+ };
+ };
+
+/**
+ * Format a return a register request.
+ * @param {Array<u2f.SignRequest>} signRequests
+ * @param {Array<u2f.RegisterRequest>} signRequests
+ * @param {number} timeoutSeconds
+ * @param {number} reqId
+ * @return {Object}
+ */
+u2f.WrappedChromeRuntimePort_.prototype.formatRegisterRequest_ =
+ function(signRequests, registerRequests, timeoutSeconds, reqId) {
+ return {
+ type: u2f.MessageTypes.U2F_REGISTER_REQUEST,
+ signRequests: signRequests,
+ registerRequests: registerRequests,
+ timeoutSeconds: timeoutSeconds,
+ requestId: reqId
+ };
+ };
+
+/**
+ * Posts a message on the underlying channel.
+ * @param {Object} message
+ */
+u2f.WrappedChromeRuntimePort_.prototype.postMessage = function(message) {
+ this.port_.postMessage(message);
+};
+
+/**
+ * Emulates the HTML 5 addEventListener interface. Works only for the
+ * onmessage event, which is hooked up to the chrome.runtime.Port.onMessage.
+ * @param {string} eventName
+ * @param {function({data: Object})} handler
+ */
+u2f.WrappedChromeRuntimePort_.prototype.addEventListener =
+ function(eventName, handler) {
+ var name = eventName.toLowerCase();
+ if (name == 'message' || name == 'onmessage') {
+ this.port_.onMessage.addListener(function(message) {
+ // Emulate a minimal MessageEvent object
+ handler({'data': message});
+ });
+ } else {
+ console.error('WrappedChromeRuntimePort only supports onMessage');
+ }
+ };
+
+/**
+ * Wrap the Authenticator app with a MessagePort interface.
+ * @constructor
+ * @private
+ */
+u2f.WrappedAuthenticatorPort_ = function() {
+ this.requestId_ = -1;
+ this.requestObject_ = null;
+}
+
+/**
+ * Launch the Authenticator intent.
+ * @param {Object} message
+ */
+u2f.WrappedAuthenticatorPort_.prototype.postMessage = function(message) {
+ var intentLocation = /** @type {string} */ (message);
+ document.location = intentLocation;
+};
+
+/**
+ * Emulates the HTML 5 addEventListener interface.
+ * @param {string} eventName
+ * @param {function({data: Object})} handler
+ */
+u2f.WrappedAuthenticatorPort_.prototype.addEventListener =
+ function(eventName, handler) {
+ var name = eventName.toLowerCase();
+ if (name == 'message') {
+ var self = this;
+ /* Register a callback to that executes when
+ * chrome injects the response. */
+ window.addEventListener(
+ 'message', self.onRequestUpdate_.bind(self, handler), false);
+ } else {
+ console.error('WrappedAuthenticatorPort only supports message');
+ }
+ };
+
+/**
+ * Callback invoked when a response is received from the Authenticator.
+ * @param function({data: Object}) callback
+ * @param {Object} message message Object
+ */
+u2f.WrappedAuthenticatorPort_.prototype.onRequestUpdate_ =
+ function(callback, message) {
+ var messageObject = JSON.parse(message.data);
+ var intentUrl = messageObject['intentURL'];
+
+ var errorCode = messageObject['errorCode'];
+ var responseObject = null;
+ if (messageObject.hasOwnProperty('data')) {
+ responseObject = /** @type {Object} */ (
+ JSON.parse(messageObject['data']));
+ responseObject['requestId'] = this.requestId_;
+ }
+
+ /* Sign responses from the authenticator do not conform to U2F,
+ * convert to U2F here. */
+ responseObject = this.doResponseFixups_(responseObject);
+ callback({'data': responseObject});
+ };
+
+/**
+ * Fixup the response provided by the Authenticator to conform with
+ * the U2F spec.
+ * @param {Object} responseData
+ * @return {Object} the U2F compliant response object
+ */
+u2f.WrappedAuthenticatorPort_.prototype.doResponseFixups_ =
+ function(responseObject) {
+ if (responseObject.hasOwnProperty('responseData')) {
+ return responseObject;
+ } else if (this.requestObject_['type'] != u2f.MessageTypes.U2F_SIGN_REQUEST) {
+ // Only sign responses require fixups. If this is not a response
+ // to a sign request, then an internal error has occurred.
+ return {
+ 'type': u2f.MessageTypes.U2F_REGISTER_RESPONSE,
+ 'responseData': {
+ 'errorCode': u2f.ErrorCodes.OTHER_ERROR,
+ 'errorMessage': 'Internal error: invalid response from Authenticator'
+ }
+ };
+ }
+
+ /* Non-conformant sign response, do fixups. */
+ var encodedChallengeObject = responseObject['challenge'];
+ if (typeof encodedChallengeObject !== 'undefined') {
+ var challengeObject = JSON.parse(atob(encodedChallengeObject));
+ var serverChallenge = challengeObject['challenge'];
+ var challengesList = this.requestObject_['signData'];
+ var requestChallengeObject = null;
+ for (var i = 0; i < challengesList.length; i++) {
+ var challengeObject = challengesList[i];
+ if (challengeObject['keyHandle'] == responseObject['keyHandle']) {
+ requestChallengeObject = challengeObject;
+ break;
+ }
+ }
+ }
+ var responseData = {
+ 'errorCode': responseObject['resultCode'],
+ 'keyHandle': responseObject['keyHandle'],
+ 'signatureData': responseObject['signature'],
+ 'clientData': encodedChallengeObject
+ };
+ return {
+ 'type': u2f.MessageTypes.U2F_SIGN_RESPONSE,
+ 'responseData': responseData,
+ 'requestId': responseObject['requestId']
+ }
+ };
+
+/**
+ * Base URL for intents to Authenticator.
+ * @const
+ * @private
+ */
+u2f.WrappedAuthenticatorPort_.INTENT_URL_BASE_ =
+ 'intent:#Intent;action=com.google.android.apps.authenticator.AUTHENTICATE';
+
+/**
+ * Format a return a sign request.
+ * @param {Array<u2f.SignRequest>} signRequests
+ * @param {number} timeoutSeconds (ignored for now)
+ * @param {number} reqId
+ * @return {string}
+ */
+u2f.WrappedAuthenticatorPort_.prototype.formatSignRequest_ =
+ function(signRequests, timeoutSeconds, reqId) {
+ if (!signRequests || signRequests.length == 0) {
+ return null;
+ }
+ /* TODO(fixme): stash away requestId, as the authenticator app does
+ * not return it for sign responses. */
+ this.requestId_ = reqId;
+ /* TODO(fixme): stash away the signRequests, to deal with the legacy
+ * response format returned by the Authenticator app. */
+ this.requestObject_ = {
+ 'type': u2f.MessageTypes.U2F_SIGN_REQUEST,
+ 'signData': signRequests,
+ 'requestId': reqId,
+ 'timeout': timeoutSeconds
+ };
+
+ var appId = signRequests[0]['appId'];
+ var intentUrl =
+ u2f.WrappedAuthenticatorPort_.INTENT_URL_BASE_ +
+ ';S.appId=' + encodeURIComponent(appId) +
+ ';S.eventId=' + reqId +
+ ';S.challenges=' +
+ encodeURIComponent(
+ JSON.stringify(this.getBrowserDataList_(signRequests))) + ';end';
+ return intentUrl;
+ };
+
+/**
+ * Get the browser data objects from the challenge list
+ * @param {Array} challenges list of challenges
+ * @return {Array} list of browser data objects
+ * @private
+ */
+u2f.WrappedAuthenticatorPort_
+ .prototype.getBrowserDataList_ = function(challenges) {
+ return challenges
+ .map(function(challenge) {
+ var browserData = {
+ 'typ': 'navigator.id.getAssertion',
+ 'challenge': challenge['challenge']
+ };
+ var challengeObject = {
+ 'challenge' : browserData,
+ 'keyHandle' : challenge['keyHandle']
+ };
+ return challengeObject;
+ });
+};
+
+/**
+ * Format a return a register request.
+ * @param {Array<u2f.SignRequest>} signRequests
+ * @param {Array<u2f.RegisterRequest>} enrollChallenges
+ * @param {number} timeoutSeconds (ignored for now)
+ * @param {number} reqId
+ * @return {Object}
+ */
+u2f.WrappedAuthenticatorPort_.prototype.formatRegisterRequest_ =
+ function(signRequests, enrollChallenges, timeoutSeconds, reqId) {
+ if (!enrollChallenges || enrollChallenges.length == 0) {
+ return null;
+ }
+ // Assume the appId is the same for all enroll challenges.
+ var appId = enrollChallenges[0]['appId'];
+ var registerRequests = [];
+ for (var i = 0; i < enrollChallenges.length; i++) {
+ var registerRequest = {
+ 'challenge': enrollChallenges[i]['challenge'],
+ 'version': enrollChallenges[i]['version']
+ };
+ if (enrollChallenges[i]['appId'] != appId) {
+ // Only include the appId when it differs from the first appId.
+ registerRequest['appId'] = enrollChallenges[i]['appId'];
+ }
+ registerRequests.push(registerRequest);
+ }
+ var registeredKeys = [];
+ if (signRequests) {
+ for (i = 0; i < signRequests.length; i++) {
+ var key = {
+ 'keyHandle': signRequests[i]['keyHandle'],
+ 'version': signRequests[i]['version']
+ };
+ // Only include the appId when it differs from the appId that's
+ // being registered now.
+ if (signRequests[i]['appId'] != appId) {
+ key['appId'] = signRequests[i]['appId'];
+ }
+ registeredKeys.push(key);
+ }
+ }
+ var request = {
+ 'type': u2f.MessageTypes.U2F_REGISTER_REQUEST,
+ 'appId': appId,
+ 'registerRequests': registerRequests,
+ 'registeredKeys': registeredKeys,
+ 'requestId': reqId,
+ 'timeoutSeconds': timeoutSeconds
+ };
+ var intentUrl =
+ u2f.WrappedAuthenticatorPort_.INTENT_URL_BASE_ +
+ ';S.request=' + encodeURIComponent(JSON.stringify(request)) +
+ ';end';
+ /* TODO(fixme): stash away requestId, this is is not necessary for
+ * register requests, but here to keep parity with sign.
+ */
+ this.requestId_ = reqId;
+ return intentUrl;
+ };
+
+
+/**
+ * Sets up an embedded trampoline iframe, sourced from the extension.
+ * @param {function(MessagePort)} callback
+ * @private
+ */
+u2f.getIframePort_ = function(callback) {
+ // Create the iframe
+ var iframeOrigin = 'chrome-extension://' + u2f.EXTENSION_ID;
+ var iframe = document.createElement('iframe');
+ iframe.src = iframeOrigin + '/u2f-comms.html';
+ iframe.setAttribute('style', 'display:none');
+ document.body.appendChild(iframe);
+
+ var channel = new MessageChannel();
+ var ready = function(message) {
+ if (message.data == 'ready') {
+ channel.port1.removeEventListener('message', ready);
+ callback(channel.port1);
+ } else {
+ console.error('First event on iframe port was not "ready"');
+ }
+ };
+ channel.port1.addEventListener('message', ready);
+ channel.port1.start();
+
+ iframe.addEventListener('load', function() {
+ // Deliver the port to the iframe and initialize
+ iframe.contentWindow.postMessage('init', iframeOrigin, [channel.port2]);
+ });
+};
+
+
+// High-level JS API
+
+/**
+ * Default extension response timeout in seconds.
+ * @const
+ */
+u2f.EXTENSION_TIMEOUT_SEC = 30;
+
+/**
+ * A singleton instance for a MessagePort to the extension.
+ * @type {MessagePort|u2f.WrappedChromeRuntimePort_}
+ * @private
+ */
+u2f.port_ = null;
+
+/**
+ * Callbacks waiting for a port
+ * @type {Array<function((MessagePort|u2f.WrappedChromeRuntimePort_))>}
+ * @private
+ */
+u2f.waitingForPort_ = [];
+
+/**
+ * A counter for requestIds.
+ * @type {number}
+ * @private
+ */
+u2f.reqCounter_ = 0;
+
+/**
+ * A map from requestIds to client callbacks
+ * @type {Object.<number,(function((u2f.Error|u2f.RegisterResponse))
+ * |function((u2f.Error|u2f.SignResponse)))>}
+ * @private
+ */
+u2f.callbackMap_ = {};
+
+/**
+ * Creates or retrieves the MessagePort singleton to use.
+ * @param {function((MessagePort|u2f.WrappedChromeRuntimePort_))} callback
+ * @private
+ */
+u2f.getPortSingleton_ = function(callback) {
+ if (u2f.port_) {
+ callback(u2f.port_);
+ } else {
+ if (u2f.waitingForPort_.length == 0) {
+ u2f.getMessagePort(function(port) {
+ u2f.port_ = port;
+ u2f.port_.addEventListener('message',
+ /** @type {function(Event)} */ (u2f.responseHandler_));
+
+ // Careful, here be async callbacks. Maybe.
+ while (u2f.waitingForPort_.length)
+ u2f.waitingForPort_.shift()(u2f.port_);
+ });
+ }
+ u2f.waitingForPort_.push(callback);
+ }
+};
+
+/**
+ * Handles response messages from the extension.
+ * @param {MessageEvent.<u2f.Response>} message
+ * @private
+ */
+u2f.responseHandler_ = function(message) {
+ var response = message.data;
+ var reqId = response['requestId'];
+ if (!reqId || !u2f.callbackMap_[reqId]) {
+ console.error('Unknown or missing requestId in response.');
+ return;
+ }
+ var cb = u2f.callbackMap_[reqId];
+ delete u2f.callbackMap_[reqId];
+ cb(response['responseData']);
+};
+
+/**
+ * Dispatches an array of sign requests to available U2F tokens.
+ * @param {Array<u2f.SignRequest>} signRequests
+ * @param {function((u2f.Error|u2f.SignResponse))} callback
+ * @param {number=} opt_timeoutSeconds
+ */
+u2f.sign = function(signRequests, callback, opt_timeoutSeconds) {
+ u2f.getPortSingleton_(function(port) {
+ var reqId = ++u2f.reqCounter_;
+ u2f.callbackMap_[reqId] = callback;
+ var timeoutSeconds = (typeof opt_timeoutSeconds !== 'undefined' ?
+ opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC);
+ var req = port.formatSignRequest_(signRequests, timeoutSeconds, reqId);
+ port.postMessage(req);
+ });
+};
+
+/**
+ * Dispatches register requests to available U2F tokens. An array of sign
+ * requests identifies already registered tokens.
+ * @param {Array<u2f.RegisterRequest>} registerRequests
+ * @param {Array<u2f.SignRequest>} signRequests
+ * @param {function((u2f.Error|u2f.RegisterResponse))} callback
+ * @param {number=} opt_timeoutSeconds
+ */
+u2f.register = function(registerRequests, signRequests,
+ callback, opt_timeoutSeconds) {
+ u2f.getPortSingleton_(function(port) {
+ var reqId = ++u2f.reqCounter_;
+ u2f.callbackMap_[reqId] = callback;
+ var timeoutSeconds = (typeof opt_timeoutSeconds !== 'undefined' ?
+ opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC);
+ var req = port.formatRegisterRequest_(
+ signRequests, registerRequests, timeoutSeconds, reqId);
+ port.postMessage(req);
+ });
+};
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/examples/cli/u2f-server.phps b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/examples/cli/u2f-server.phps
new file mode 100755
index 0000000..8acb66a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/examples/cli/u2f-server.phps
@@ -0,0 +1,83 @@
+#!/usr/bin/php
+<?php
+
+ /* Copyright (c) 2015 Yubico AB
+ * 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.
+ *
+ * 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.
+ */
+
+/**
+ * This is a basic example of a u2f-server command line that can be used
+ * with the u2f-host binary to perform regitrations and authentications.
+ */
+
+require_once('../../src/u2flib_server/U2F.php');
+
+$options = getopt("rao:R:");
+$mode;
+$challenge;
+$response;
+$result;
+$regs;
+
+if(array_key_exists('r', $options)) {
+ $mode = "register";
+} elseif(array_key_exists('a', $options)) {
+ if(!array_key_exists('R', $options)) {
+ print "a registration must be supplied with -R";
+ exit(1);
+ }
+ $regs = json_decode('[' . $options['R'] . ']');
+ $mode = "authenticate";
+} else {
+ print "-r or -a must be used\n";
+ exit(1);
+}
+if(!array_key_exists('o', $options)) {
+ print "origin must be supplied with -o\n";
+ exit(1);
+}
+
+$u2f = new u2flib_server\U2F($options['o']);
+
+if($mode === "register") {
+ $challenge = $u2f->getRegisterData();
+} elseif($mode === "authenticate") {
+ $challenge = $u2f->getAuthenticateData($regs);
+}
+
+print json_encode($challenge[0]) . "\n";
+$response = fgets(STDIN);
+
+if($mode === "register") {
+ $result = $u2f->doRegister($challenge[0], json_decode($response));
+} elseif($mode === "authenticate") {
+ $result = $u2f->doAuthenticate($challenge, $regs, json_decode($response));
+}
+
+print json_encode($result) . "\n";
+
+?>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/examples/localstorage/index.phps b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/examples/localstorage/index.phps
new file mode 100644
index 0000000..d840dd3
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/examples/localstorage/index.phps
@@ -0,0 +1,186 @@
+<?php
+/**
+ * Copyright (c) 2014 Yubico AB
+ * 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.
+ *
+ * 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.
+ */
+
+/**
+ * This is a minimal example of U2F registration and authentication.
+ * The data that has to be stored between registration and authentication
+ * is stored in browser localStorage, so there's nothing real-world
+ * about this.
+ */
+require_once('../../src/u2flib_server/U2F.php');
+$scheme = isset($_SERVER['HTTPS']) ? "https://" : "http://";
+$u2f = new u2flib_server\U2F($scheme . $_SERVER['HTTP_HOST']);
+?>
+<html>
+<head>
+ <title>PHP U2F Demo</title>
+
+ <script src="../assets/u2f-api.js"></script>
+
+ <script>
+ function addRegistration(reg) {
+ var existing = localStorage.getItem('u2fregistration');
+ var regobj = JSON.parse(reg);
+ var data = null;
+ if(existing) {
+ data = JSON.parse(existing);
+ if(Array.isArray(data)) {
+ for (var i = 0; i < data.length; i++) {
+ if(data[i].keyHandle === regobj.keyHandle) {
+ data.splice(i,1);
+ break;
+ }
+ }
+ data.push(regobj);
+ } else {
+ data = null;
+ }
+ }
+ if(data == null) {
+ data = [regobj];
+ }
+ localStorage.setItem('u2fregistration', JSON.stringify(data));
+ }
+ <?php
+ function fixupArray($data) {
+ $ret = array();
+ $decoded = json_decode($data);
+ foreach ($decoded as $d) {
+ $ret[] = json_encode($d);
+ }
+ return $ret;
+ }
+ if($_SERVER['REQUEST_METHOD'] === 'POST') {
+ if(isset($_POST['startRegister'])) {
+ $regs = json_decode($_POST['registrations']) ? : array();
+ list($data, $reqs) = $u2f->getRegisterData($regs);
+ echo "var request = " . json_encode($data) . ";\n";
+ echo "var signs = " . json_encode($reqs) . ";\n";
+ ?>
+ setTimeout(function() {
+ console.log("Register: ", request);
+ u2f.register([request], signs, function(data) {
+ var form = document.getElementById('form');
+ var reg = document.getElementById('doRegister');
+ var req = document.getElementById('request');
+ console.log("Register callback", data);
+ if(data.errorCode && data.errorCode != 0) {
+ alert("registration failed with errror: " + data.errorCode);
+ return;
+ }
+ reg.value=JSON.stringify(data);
+ req.value=JSON.stringify(request);
+ form.submit();
+ });
+ }, 1000);
+ <?php
+ } else if($_POST['doRegister']) {
+ try {
+ $data = $u2f->doRegister(json_decode($_POST['request']), json_decode($_POST['doRegister']));
+ echo "var registration = '" . json_encode($data) . "';\n";
+ ?>
+ addRegistration(registration);
+ alert("registration successful!");
+ <?php
+ } catch(u2flib_server\Error $e) {
+ echo "alert('error:" . $e->getMessage() . "');\n";
+ }
+ } else if(isset($_POST['startAuthenticate'])) {
+ $regs = json_decode($_POST['registrations']);
+ $data = $u2f->getAuthenticateData($regs);
+ echo "var registrations = " . $_POST['registrations'] . ";\n";
+ echo "var request = " . json_encode($data) . ";\n";
+ ?>
+ setTimeout(function() {
+ console.log("sign: ", request);
+ u2f.sign(request, function(data) {
+ var form = document.getElementById('form');
+ var reg = document.getElementById('doAuthenticate');
+ var req = document.getElementById('request');
+ var regs = document.getElementById('registrations');
+ console.log("Authenticate callback", data);
+ reg.value=JSON.stringify(data);
+ req.value=JSON.stringify(request);
+ regs.value=JSON.stringify(registrations);
+ form.submit();
+ });
+ }, 1000);
+ <?php
+ } else if($_POST['doAuthenticate']) {
+ $reqs = json_decode($_POST['request']);
+ $regs = json_decode($_POST['registrations']);
+ try {
+ $data = $u2f->doAuthenticate($reqs, $regs, json_decode($_POST['doAuthenticate']));
+ echo "var registration = '" . json_encode($data) . "';\n";
+ echo "addRegistration(registration);\n";
+ echo "alert('Authentication successful, counter:" . $data->counter . "');\n";
+ } catch(u2flib_server\Error $e) {
+ echo "alert('error:" . $e->getMessage() . "');\n";
+ }
+ }
+ }
+ ?>
+ </script>
+
+</head>
+<body>
+<form method="POST" id="form">
+ <button name="startRegister" type="submit">Register</button>
+ <input type="hidden" name="doRegister" id="doRegister"/>
+ <button name="startAuthenticate" type="submit" id="startAuthenticate">Authenticate</button>
+ <input type="hidden" name="doAuthenticate" id="doAuthenticate"/>
+ <input type="hidden" name="request" id="request"/>
+ <input type="hidden" name="registrations" id="registrations"/>
+</form>
+
+<p>
+ <span id="registered">0</span> Authenticators currently registered.
+</p>
+
+<script>
+ var reg = localStorage.getItem('u2fregistration');
+ var auth = document.getElementById('startAuthenticate');
+ if(reg == null) {
+ auth.disabled = true;
+ } else {
+ var regs = document.getElementById('registrations');
+ decoded = JSON.parse(reg);
+ if(!Array.isArray(decoded)) {
+ auth.disabled = true;
+ } else {
+ regs.value = reg;
+ console.log("set the registrations to : ", reg);
+ var regged = document.getElementById('registered');
+ regged.innerHTML = decoded.length;
+ }
+ }
+</script>
+</body>
+</html>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/examples/pdo/index.phps b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/examples/pdo/index.phps
new file mode 100644
index 0000000..c04d63e
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/examples/pdo/index.phps
@@ -0,0 +1,204 @@
+<?php
+/**
+ * Copyright (c) 2014 Yubico AB
+ * 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.
+ *
+ * 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.
+ */
+
+/**
+ * This is a simple example using PDO and a sqlite database for storing
+ * registrations. It supports multiple registrations associated with each user.
+ */
+
+require_once('../../src/u2flib_server/U2F.php');
+
+$dbfile = '/var/tmp/u2f-pdo.sqlite';
+
+$pdo = new PDO("sqlite:$dbfile");
+$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
+$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
+
+$pdo->exec("create table if not exists users (id integer primary key, name varchar(255))");
+$pdo->exec("create table if not exists registrations (id integer primary key, user_id integer, keyHandle varchar(255), publicKey varchar(255), certificate text, counter integer)");
+
+$scheme = isset($_SERVER['HTTPS']) ? "https://" : "http://";
+$u2f = new u2flib_server\U2F($scheme . $_SERVER['HTTP_HOST']);
+
+session_start();
+
+function createAndGetUser($name) {
+ global $pdo;
+ $sel = $pdo->prepare("select * from users where name = ?");
+ $sel->execute(array($name));
+ $user = $sel->fetch();
+ if(!$user) {
+ $ins = $pdo->prepare("insert into users (name) values(?)");
+ $ins->execute(array($name));
+ $sel->execute(array($name));
+ $user = $sel->fetch();
+ }
+ return $user;
+}
+
+function getRegs($user_id) {
+ global $pdo;
+ $sel = $pdo->prepare("select * from registrations where user_id = ?");
+ $sel->execute(array($user_id));
+ return $sel->fetchAll();
+}
+
+function addReg($user_id, $reg) {
+ global $pdo;
+ $ins = $pdo->prepare("insert into registrations (user_id, keyHandle, publicKey, certificate, counter) values (?, ?, ?, ?, ?)");
+ $ins->execute(array($user_id, $reg->keyHandle, $reg->publicKey, $reg->certificate, $reg->counter));
+}
+
+function updateReg($reg) {
+ global $pdo;
+ $upd = $pdo->prepare("update registrations set counter = ? where id = ?");
+ $upd->execute(array($reg->counter, $reg->id));
+}
+
+?>
+
+<html>
+<head>
+ <title>PHP U2F example</title>
+
+ <script src="../assets/u2f-api.js"></script>
+
+ <script>
+ <?php
+
+ if($_SERVER['REQUEST_METHOD'] === 'POST') {
+ if(!$_POST['username']) {
+ echo "alert('no username provided!');";
+ } else if(!isset($_POST['action']) && !isset($_POST['register2']) && !isset($_POST['authenticate2'])) {
+ echo "alert('no action provided!');";
+ } else {
+ $user = createAndGetUser($_POST['username']);
+
+ if(isset($_POST['action'])) {
+ switch($_POST['action']):
+ case 'register':
+ try {
+ $data = $u2f->getRegisterData(getRegs($user->id));
+
+ list($req,$sigs) = $data;
+ $_SESSION['regReq'] = json_encode($req);
+ echo "var req = " . json_encode($req) . ";";
+ echo "var sigs = " . json_encode($sigs) . ";";
+ echo "var username = '" . $user->name . "';";
+ ?>
+ setTimeout(function() {
+ console.log("Register: ", req);
+ u2f.register([req], sigs, function(data) {
+ var form = document.getElementById('form');
+ var reg = document.getElementById('register2');
+ var user = document.getElementById('username');
+ console.log("Register callback", data);
+ if(data.errorCode && errorCode != 0) {
+ alert("registration failed with errror: " + data.errorCode);
+ return;
+ }
+ reg.value = JSON.stringify(data);
+ user.value = username;
+ form.submit();
+ });
+ }, 1000);
+ <?php
+ } catch( Exception $e ) {
+ echo "alert('error: " . $e->getMessage() . "');";
+ }
+
+ break;
+
+ case 'authenticate':
+ try {
+ $reqs = json_encode($u2f->getAuthenticateData(getRegs($user->id)));
+
+ $_SESSION['authReq'] = $reqs;
+ echo "var req = $reqs;";
+ echo "var username = '" . $user->name . "';";
+ ?>
+ setTimeout(function() {
+ console.log("sign: ", req);
+ u2f.sign(req, function(data) {
+ var form = document.getElementById('form');
+ var auth = document.getElementById('authenticate2');
+ var user = document.getElementById('username');
+ console.log("Authenticate callback", data);
+ auth.value=JSON.stringify(data);
+ user.value = username;
+ form.submit();
+ });
+ }, 1000);
+ <?php
+ } catch( Exception $e ) {
+ echo "alert('error: " . $e->getMessage() . "');";
+ }
+
+ break;
+
+ endswitch;
+ } else if($_POST['register2']) {
+ try {
+ $reg = $u2f->doRegister(json_decode($_SESSION['regReq']), json_decode($_POST['register2']));
+ addReg($user->id, $reg);
+ } catch( Exception $e ) {
+ echo "alert('error: " . $e->getMessage() . "');";
+ } finally {
+ $_SESSION['regReq'] = null;
+ }
+ } else if($_POST['authenticate2']) {
+ try {
+ $reg = $u2f->doAuthenticate(json_decode($_SESSION['authReq']), getRegs($user->id), json_decode($_POST['authenticate2']));
+ updateReg($reg);
+ echo "alert('success: " . $reg->counter . "');";
+ } catch( Exception $e ) {
+ echo "alert('error: " . $e->getMessage() . "');";
+ } finally {
+ $_SESSION['authReq'] = null;
+ }
+ }
+ }
+ }
+ ?>
+ </script>
+</head>
+<body>
+
+<form method="POST" id="form">
+ username: <input name="username" id="username"/><br/>
+ register: <input value="register" name="action" type="radio"/><br/>
+ authenticate: <input value="authenticate" name="action" type="radio"/><br/>
+ <input type="hidden" name="register2" id="register2"/>
+ <input type="hidden" name="authenticate2" id="authenticate2"/>
+ <button type="submit">Submit!</button>
+</form>
+
+</body>
+</html>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/phpunit.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/phpunit.xml
new file mode 100644
index 0000000..fa6f08e
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/phpunit.xml
@@ -0,0 +1,9 @@
+<phpunit
+ colors="true">
+ <testsuite name="tests">
+ <directory suffix="test.php">tests</directory>
+ </testsuite>
+ <logging>
+ <log type="coverage-clover" target="build/logs/clover.xml"/>
+ </logging>
+</phpunit>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/psalm.xml b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/psalm.xml
new file mode 100644
index 0000000..6b6234c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/psalm.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0"?>
+<psalm
+ totallyTyped="false"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="https://getpsalm.org/schema/config"
+ xsi:schemaLocation="https://getpsalm.org/schema/config file:///mnt/share/php-u2flib-server/vendor/vimeo/psalm/config.xsd"
+>
+ <projectFiles>
+ <directory name="src" />
+ <ignoreFiles>
+ <directory name="vendor" />
+ </ignoreFiles>
+ </projectFiles>
+
+ <issueHandlers>
+ <LessSpecificReturnType errorLevel="info" />
+
+ <!-- level 3 issues - slightly lazy code writing, but provably low false-negatives -->
+
+ <DeprecatedMethod errorLevel="info" />
+ <DeprecatedProperty errorLevel="info" />
+ <DeprecatedClass errorLevel="info" />
+ <DeprecatedInterface errorLevel="info" />
+
+ <MissingClosureReturnType errorLevel="info" />
+ <MissingReturnType errorLevel="info" />
+ <MissingPropertyType errorLevel="info" />
+ <InvalidDocblock errorLevel="info" />
+ <MisplacedRequiredParam errorLevel="info" />
+
+ <PropertyNotSetInConstructor errorLevel="info" />
+ <MissingConstructor errorLevel="info" />
+ <MissingClosureParamType errorLevel="info" />
+ <MissingParamType errorLevel="info" />
+
+ <RedundantCondition errorLevel="info" />
+
+ <DocblockTypeContradiction errorLevel="suppress" />
+ <RedundantConditionGivenDocblockType errorLevel="suppress" />
+
+ <UnresolvableInclude errorLevel="info" />
+
+ <RawObjectIteration errorLevel="info" />
+
+ <!-- psalm seems to wrongly complain about this, set the errorLevel to info for now -->
+ <UndefinedConstant errorLevel="info" />
+ </issueHandlers>
+</psalm>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/src/u2flib_server/U2F.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/src/u2flib_server/U2F.php
new file mode 100644
index 0000000..8583fff
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/yubico/u2flib-server/src/u2flib_server/U2F.php
@@ -0,0 +1,563 @@
+<?php
+/* Copyright (c) 2014 Yubico AB
+ * 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.
+ *
+ * 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.
+ */
+
+namespace u2flib_server;
+
+/** Constant for the version of the u2f protocol */
+const U2F_VERSION = "U2F_V2";
+
+/** Constant for the type value in registration clientData */
+const REQUEST_TYPE_REGISTER = "navigator.id.finishEnrollment";
+
+/** Constant for the type value in authentication clientData */
+const REQUEST_TYPE_AUTHENTICATE = "navigator.id.getAssertion";
+
+/** Error for the authentication message not matching any outstanding
+ * authentication request */
+const ERR_NO_MATCHING_REQUEST = 1;
+
+/** Error for the authentication message not matching any registration */
+const ERR_NO_MATCHING_REGISTRATION = 2;
+
+/** Error for the signature on the authentication message not verifying with
+ * the correct key */
+const ERR_AUTHENTICATION_FAILURE = 3;
+
+/** Error for the challenge in the registration message not matching the
+ * registration challenge */
+const ERR_UNMATCHED_CHALLENGE = 4;
+
+/** Error for the attestation signature on the registration message not
+ * verifying */
+const ERR_ATTESTATION_SIGNATURE = 5;
+
+/** Error for the attestation verification not verifying */
+const ERR_ATTESTATION_VERIFICATION = 6;
+
+/** Error for not getting good random from the system */
+const ERR_BAD_RANDOM = 7;
+
+/** Error when the counter is lower than expected */
+const ERR_COUNTER_TOO_LOW = 8;
+
+/** Error decoding public key */
+const ERR_PUBKEY_DECODE = 9;
+
+/** Error user-agent returned error */
+const ERR_BAD_UA_RETURNING = 10;
+
+/** Error old OpenSSL version */
+const ERR_OLD_OPENSSL = 11;
+
+/** Error for the origin not matching the appId */
+const ERR_NO_MATCHING_ORIGIN = 12;
+
+/** Error for the type in clientData being invalid */
+const ERR_BAD_TYPE = 13;
+
+/** Error for bad user presence byte value */
+const ERR_BAD_USER_PRESENCE = 14;
+
+/** @internal */
+const PUBKEY_LEN = 65;
+
+class U2F
+{
+ /** @var string */
+ private $appId;
+
+ /** @var null|string */
+ private $attestDir;
+
+ /** @internal */
+ private $FIXCERTS = array(
+ '349bca1031f8c82c4ceca38b9cebf1a69df9fb3b94eed99eb3fb9aa3822d26e8',
+ 'dd574527df608e47ae45fbba75a2afdd5c20fd94a02419381813cd55a2a3398f',
+ '1d8764f0f7cd1352df6150045c8f638e517270e8b5dda1c63ade9c2280240cae',
+ 'd0edc9a91a1677435a953390865d208c55b3183c6759c9b5a7ff494c322558eb',
+ '6073c436dcd064a48127ddbf6032ac1a66fd59a0c24434f070d4e564c124c897',
+ 'ca993121846c464d666096d35f13bf44c1b05af205f9b4a1e00cf6cc10c5e511'
+ );
+
+ /**
+ * @param string $appId Application id for the running application
+ * @param string|null $attestDir Directory where trusted attestation roots may be found
+ * @throws Error If OpenSSL older than 1.0.0 is used
+ */
+ public function __construct($appId, $attestDir = null)
+ {
+ if(OPENSSL_VERSION_NUMBER < 0x10000000) {
+ throw new Error('OpenSSL has to be at least version 1.0.0, this is ' . OPENSSL_VERSION_TEXT, ERR_OLD_OPENSSL);
+ }
+ $this->appId = $appId;
+ $this->attestDir = $attestDir;
+ }
+
+ /**
+ * Called to get a registration request to send to a user.
+ * Returns an array of one registration request and a array of sign requests.
+ *
+ * @param array $registrations List of current registrations for this
+ * user, to prevent the user from registering the same authenticator several
+ * times.
+ * @return array An array of two elements, the first containing a
+ * RegisterRequest the second being an array of SignRequest
+ * @throws Error
+ */
+ public function getRegisterData(array $registrations = array())
+ {
+ $challenge = $this->createChallenge();
+ $request = new RegisterRequest($challenge, $this->appId);
+ $signs = $this->getAuthenticateData($registrations);
+ return array($request, $signs);
+ }
+
+ /**
+ * Called to verify and unpack a registration message.
+ *
+ * @param RegisterRequest $request this is a reply to
+ * @param object $response response from a user
+ * @param bool $includeCert set to true if the attestation certificate should be
+ * included in the returned Registration object
+ * @return Registration
+ * @throws Error
+ */
+ public function doRegister($request, $response, $includeCert = true)
+ {
+ if( !is_object( $request ) ) {
+ throw new \InvalidArgumentException('$request of doRegister() method only accepts object.');
+ }
+
+ if( !is_object( $response ) ) {
+ throw new \InvalidArgumentException('$response of doRegister() method only accepts object.');
+ }
+
+ if( property_exists( $response, 'errorCode') && $response->errorCode !== 0 ) {
+ throw new Error('User-agent returned error. Error code: ' . $response->errorCode, ERR_BAD_UA_RETURNING );
+ }
+
+ if( !is_bool( $includeCert ) ) {
+ throw new \InvalidArgumentException('$include_cert of doRegister() method only accepts boolean.');
+ }
+
+ $rawReg = $this->base64u_decode($response->registrationData);
+ $regData = array_values(unpack('C*', $rawReg));
+ $clientData = $this->base64u_decode($response->clientData);
+ $cli = json_decode($clientData);
+
+ if($cli->challenge !== $request->challenge) {
+ throw new Error('Registration challenge does not match', ERR_UNMATCHED_CHALLENGE );
+ }
+
+ if(isset($cli->typ) && $cli->typ !== REQUEST_TYPE_REGISTER) {
+ throw new Error('ClientData type is invalid', ERR_BAD_TYPE);
+ }
+
+ if(isset($cli->origin) && $cli->origin !== $request->appId) {
+ throw new Error('App ID does not match the origin', ERR_NO_MATCHING_ORIGIN);
+ }
+
+ $registration = new Registration();
+ $offs = 1;
+ $pubKey = substr($rawReg, $offs, PUBKEY_LEN);
+ $offs += PUBKEY_LEN;
+ // decode the pubKey to make sure it's good
+ $tmpKey = $this->pubkey_to_pem($pubKey);
+ if($tmpKey === null) {
+ throw new Error('Decoding of public key failed', ERR_PUBKEY_DECODE );
+ }
+ $registration->publicKey = base64_encode($pubKey);
+ $khLen = $regData[$offs++];
+ $kh = substr($rawReg, $offs, $khLen);
+ $offs += $khLen;
+ $registration->keyHandle = $this->base64u_encode($kh);
+
+ // length of certificate is stored in byte 3 and 4 (excluding the first 4 bytes)
+ $certLen = 4;
+ $certLen += ($regData[$offs + 2] << 8);
+ $certLen += $regData[$offs + 3];
+
+ $rawCert = $this->fixSignatureUnusedBits(substr($rawReg, $offs, $certLen));
+ $offs += $certLen;
+ $pemCert = "-----BEGIN CERTIFICATE-----\r\n";
+ $pemCert .= chunk_split(base64_encode($rawCert), 64);
+ $pemCert .= "-----END CERTIFICATE-----";
+ if($includeCert) {
+ $registration->certificate = base64_encode($rawCert);
+ }
+ if($this->attestDir) {
+ if(openssl_x509_checkpurpose($pemCert, -1, $this->get_certs()) !== true) {
+ throw new Error('Attestation certificate can not be validated', ERR_ATTESTATION_VERIFICATION );
+ }
+ }
+
+ if(!openssl_pkey_get_public($pemCert)) {
+ throw new Error('Decoding of public key failed', ERR_PUBKEY_DECODE );
+ }
+ $signature = substr($rawReg, $offs);
+
+ $dataToVerify = pack('C', 0);
+ $dataToVerify .= hash('sha256', $request->appId, true);
+ $dataToVerify .= hash('sha256', $clientData, true);
+ $dataToVerify .= $kh;
+ $dataToVerify .= $pubKey;
+
+ if(openssl_verify($dataToVerify, $signature, $pemCert, 'sha256') === 1) {
+ return $registration;
+ } else {
+ throw new Error('Attestation signature does not match', ERR_ATTESTATION_SIGNATURE );
+ }
+ }
+
+ /**
+ * Called to get an authentication request.
+ *
+ * @param array $registrations An array of the registrations to create authentication requests for.
+ * @return array An array of SignRequest
+ * @throws Error
+ */
+ public function getAuthenticateData(array $registrations)
+ {
+ $sigs = array();
+ $challenge = $this->createChallenge();
+ foreach ($registrations as $reg) {
+ if( !is_object( $reg ) ) {
+ throw new \InvalidArgumentException('$registrations of getAuthenticateData() method only accepts array of object.');
+ }
+ /** @var Registration $reg */
+
+ $sig = new SignRequest();
+ $sig->appId = $this->appId;
+ $sig->keyHandle = $reg->keyHandle;
+ $sig->challenge = $challenge;
+ $sigs[] = $sig;
+ }
+ return $sigs;
+ }
+
+ /**
+ * Called to verify an authentication response
+ *
+ * @param array $requests An array of outstanding authentication requests
+ * @param array $registrations An array of current registrations
+ * @param object $response A response from the authenticator
+ * @return Registration
+ * @throws Error
+ *
+ * The Registration object returned on success contains an updated counter
+ * that should be saved for future authentications.
+ * If the Error returned is ERR_COUNTER_TOO_LOW this is an indication of
+ * token cloning or similar and appropriate action should be taken.
+ */
+ public function doAuthenticate(array $requests, array $registrations, $response)
+ {
+ if( !is_object( $response ) ) {
+ throw new \InvalidArgumentException('$response of doAuthenticate() method only accepts object.');
+ }
+
+ if( property_exists( $response, 'errorCode') && $response->errorCode !== 0 ) {
+ throw new Error('User-agent returned error. Error code: ' . $response->errorCode, ERR_BAD_UA_RETURNING );
+ }
+
+ /** @var object|null $req */
+ $req = null;
+
+ /** @var object|null $reg */
+ $reg = null;
+
+ $clientData = $this->base64u_decode($response->clientData);
+ $decodedClient = json_decode($clientData);
+
+ if(isset($decodedClient->typ) && $decodedClient->typ !== REQUEST_TYPE_AUTHENTICATE) {
+ throw new Error('ClientData type is invalid', ERR_BAD_TYPE);
+ }
+
+ foreach ($requests as $req) {
+ if( !is_object( $req ) ) {
+ throw new \InvalidArgumentException('$requests of doAuthenticate() method only accepts array of object.');
+ }
+
+ if($req->keyHandle === $response->keyHandle && $req->challenge === $decodedClient->challenge) {
+ break;
+ }
+
+ $req = null;
+ }
+ if($req === null) {
+ throw new Error('No matching request found', ERR_NO_MATCHING_REQUEST );
+ }
+ if(isset($decodedClient->origin) && $decodedClient->origin !== $req->appId) {
+ throw new Error('App ID does not match the origin', ERR_NO_MATCHING_ORIGIN);
+ }
+ foreach ($registrations as $reg) {
+ if( !is_object( $reg ) ) {
+ throw new \InvalidArgumentException('$registrations of doAuthenticate() method only accepts array of object.');
+ }
+
+ if($reg->keyHandle === $response->keyHandle) {
+ break;
+ }
+ $reg = null;
+ }
+ if($reg === null) {
+ throw new Error('No matching registration found', ERR_NO_MATCHING_REGISTRATION );
+ }
+ $pemKey = $this->pubkey_to_pem($this->base64u_decode($reg->publicKey));
+ if($pemKey === null) {
+ throw new Error('Decoding of public key failed', ERR_PUBKEY_DECODE );
+ }
+
+ $signData = $this->base64u_decode($response->signatureData);
+ $dataToVerify = hash('sha256', $req->appId, true);
+ $dataToVerify .= substr($signData, 0, 5);
+ $dataToVerify .= hash('sha256', $clientData, true);
+ $signature = substr($signData, 5);
+
+ if(openssl_verify($dataToVerify, $signature, $pemKey, 'sha256') === 1) {
+ $upb = unpack("Cupb", substr($signData, 0, 1));
+ if($upb['upb'] !== 1) {
+ throw new Error('User presence byte value is invalid', ERR_BAD_USER_PRESENCE );
+ }
+ $ctr = unpack("Nctr", substr($signData, 1, 4));
+ $counter = $ctr['ctr'];
+ /* TODO: wrap-around should be handled somehow.. */
+ if($counter > $reg->counter) {
+ $reg->counter = $counter;
+ return self::castObjectToRegistration($reg);
+ } else {
+ throw new Error('Counter too low.', ERR_COUNTER_TOO_LOW );
+ }
+ } else {
+ throw new Error('Authentication failed', ERR_AUTHENTICATION_FAILURE );
+ }
+ }
+
+ /**
+ * @param object $object
+ * @return Registration
+ */
+ protected static function castObjectToRegistration($object)
+ {
+ $reg = new Registration();
+ if (property_exists($object, 'publicKey')) {
+ $reg->publicKey = $object->publicKey;
+ }
+ if (property_exists($object, 'certificate')) {
+ $reg->certificate = $object->certificate;
+ }
+ if (property_exists($object, 'counter')) {
+ $reg->counter = $object->counter;
+ }
+ if (property_exists($object, 'keyHandle')) {
+ $reg->keyHandle = $object->keyHandle;
+ }
+ return $reg;
+ }
+
+ /**
+ * @return array
+ */
+ private function get_certs()
+ {
+ $files = array();
+ $dir = $this->attestDir;
+ if($dir !== null && is_dir($dir) && $handle = opendir($dir)) {
+ while(false !== ($entry = readdir($handle))) {
+ if(is_file("$dir/$entry")) {
+ $files[] = "$dir/$entry";
+ }
+ }
+ closedir($handle);
+ } elseif (is_file("$dir")) {
+ $files[] = "$dir";
+ }
+ return $files;
+ }
+
+ /**
+ * @param string $data
+ * @return string
+ */
+ private function base64u_encode($data)
+ {
+ return trim(strtr(base64_encode($data), '+/', '-_'), '=');
+ }
+
+ /**
+ * @param string $data
+ * @return string
+ */
+ private function base64u_decode($data)
+ {
+ return base64_decode(strtr($data, '-_', '+/'));
+ }
+
+ /**
+ * @param string $key
+ * @return null|string
+ */
+ private function pubkey_to_pem($key)
+ {
+ if(strlen($key) !== PUBKEY_LEN || $key[0] !== "\x04") {
+ return null;
+ }
+
+ /*
+ * Convert the public key to binary DER format first
+ * Using the ECC SubjectPublicKeyInfo OIDs from RFC 5480
+ *
+ * SEQUENCE(2 elem) 30 59
+ * SEQUENCE(2 elem) 30 13
+ * OID1.2.840.10045.2.1 (id-ecPublicKey) 06 07 2a 86 48 ce 3d 02 01
+ * OID1.2.840.10045.3.1.7 (secp256r1) 06 08 2a 86 48 ce 3d 03 01 07
+ * BIT STRING(520 bit) 03 42 ..key..
+ */
+ $der = "\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01";
+ $der .= "\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07\x03\x42";
+ $der .= "\0".$key;
+
+ $pem = "-----BEGIN PUBLIC KEY-----\r\n";
+ $pem .= chunk_split(base64_encode($der), 64);
+ $pem .= "-----END PUBLIC KEY-----";
+
+ return $pem;
+ }
+
+ /**
+ * @return string
+ * @throws Error
+ */
+ private function createChallenge()
+ {
+ $challenge = random_bytes(32);
+ $challenge = $this->base64u_encode( $challenge );
+
+ return $challenge;
+ }
+
+ /**
+ * Fixes a certificate where the signature contains unused bits.
+ *
+ * @param string $cert
+ * @return mixed
+ */
+ private function fixSignatureUnusedBits($cert)
+ {
+ if(in_array(hash('sha256', $cert), $this->FIXCERTS, true)) {
+ $cert[strlen($cert) - 257] = "\0";
+ }
+ return $cert;
+ }
+}
+
+/**
+ * Class for building a registration request
+ *
+ * @package u2flib_server
+ */
+class RegisterRequest
+{
+ /** @var string Protocol version */
+ public $version = U2F_VERSION;
+
+ /** @var string Registration challenge */
+ public $challenge;
+
+ /** @var string Application id */
+ public $appId;
+
+ /**
+ * @param string $challenge
+ * @param string $appId
+ * @internal
+ */
+ public function __construct($challenge, $appId)
+ {
+ $this->challenge = $challenge;
+ $this->appId = $appId;
+ }
+}
+
+/**
+ * Class for building up an authentication request
+ *
+ * @package u2flib_server
+ */
+class SignRequest
+{
+ /** @var string Protocol version */
+ public $version = U2F_VERSION;
+
+ /** @var string Authentication challenge */
+ public $challenge = '';
+
+ /** @var string Key handle of a registered authenticator */
+ public $keyHandle = '';
+
+ /** @var string Application id */
+ public $appId = '';
+}
+
+/**
+ * Class returned for successful registrations
+ *
+ * @package u2flib_server
+ */
+class Registration
+{
+ /** @var string The key handle of the registered authenticator */
+ public $keyHandle = '';
+
+ /** @var string The public key of the registered authenticator */
+ public $publicKey = '';
+
+ /** @var string The attestation certificate of the registered authenticator */
+ public $certificate = '';
+
+ /** @var int The counter associated with this registration */
+ public $counter = -1;
+}
+
+/**
+ * Error class, returned on errors
+ *
+ * @package u2flib_server
+ */
+class Error extends \Exception
+{
+ /**
+ * Override constructor and make message and code mandatory
+ * @param string $message
+ * @param int $code
+ * @param \Exception|null $previous
+ */
+ public function __construct($message, $code, \Exception $previous = null) {
+ parent::__construct($message, $code, $previous);
+ }
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/prerequisites.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/prerequisites.inc.php
new file mode 100644
index 0000000..220c87c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/prerequisites.inc.php
@@ -0,0 +1,269 @@
+<?php
+
+// Slave does not serve UI
+/* if (!preg_match('/y|yes/i', getenv('MASTER'))) {
+ header('Location: /SOGo', true, 307);
+ exit;
+}*/
+
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/vars.inc.php';
+$default_autodiscover_config = $autodiscover_config;
+
+if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/inc/vars.local.inc.php')) {
+ include_once $_SERVER['DOCUMENT_ROOT'] . '/inc/vars.local.inc.php';
+}
+unset($https_port);
+$autodiscover_config = array_merge($default_autodiscover_config, $autodiscover_config);
+
+header_remove("X-Powered-By");
+
+// Yubi OTP API
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/lib/Yubico.php';
+
+// WebAuthn
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/lib/WebAuthn/WebAuthn.php';
+
+// Autoload composer
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/lib/vendor/autoload.php';
+
+// Load Sieve
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/lib/sieve/SieveParser.php';
+
+// minifierExtended
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/lib/JSminifierExtended.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/lib/CSSminifierExtended.php';
+
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/lib/array_merge_real.php';
+
+// Minify JS
+use MatthiasMullie\Minify;
+$js_minifier = new JSminifierExtended();
+$js_dir = array_diff(scandir('/web/js/build'), array('..', '.'));
+foreach ($js_dir as $js_file) {
+ $js_minifier->add('/web/js/build/' . $js_file);
+}
+
+// Minify CSS
+$css_minifier = new CSSminifierExtended();
+$css_dir = array_diff(scandir('/web/css/build'), array('..', '.'));
+foreach ($css_dir as $css_file) {
+ $css_minifier->add('/web/css/build/' . $css_file);
+}
+
+// U2F API + T/HOTP API
+$u2f = new u2flib_server\U2F('https://' . $_SERVER['HTTP_HOST']);
+$qrprovider = new RobThree\Auth\Providers\Qr\QRServerProvider();
+$tfa = new RobThree\Auth\TwoFactorAuth($OTP_LABEL, 6, 30, 'sha1', $qrprovider);
+
+// FIDO2
+$formats = $GLOBALS['FIDO2_FORMATS'];
+$WebAuthn = new \WebAuthn\WebAuthn('WebAuthn Library', $_SERVER['HTTP_HOST'], $formats);
+$WebAuthn->addRootCertificates($_SERVER['DOCUMENT_ROOT'] . '/inc/lib/WebAuthn/rootCertificates/solo.pem');
+$WebAuthn->addRootCertificates($_SERVER['DOCUMENT_ROOT'] . '/inc/lib/WebAuthn/rootCertificates/apple.pem');
+$WebAuthn->addRootCertificates($_SERVER['DOCUMENT_ROOT'] . '/inc/lib/WebAuthn/rootCertificates/nitro.pem');
+$WebAuthn->addRootCertificates($_SERVER['DOCUMENT_ROOT'] . '/inc/lib/WebAuthn/rootCertificates/yubico.pem');
+$WebAuthn->addRootCertificates($_SERVER['DOCUMENT_ROOT'] . '/inc/lib/WebAuthn/rootCertificates/hypersecu.pem');
+$WebAuthn->addRootCertificates($_SERVER['DOCUMENT_ROOT'] . '/inc/lib/WebAuthn/rootCertificates/globalSign.pem');
+$WebAuthn->addRootCertificates($_SERVER['DOCUMENT_ROOT'] . '/inc/lib/WebAuthn/rootCertificates/googleHardware.pem');
+$WebAuthn->addRootCertificates($_SERVER['DOCUMENT_ROOT'] . '/inc/lib/WebAuthn/rootCertificates/microsoftTpmCollection.pem');
+$WebAuthn->addRootCertificates($_SERVER['DOCUMENT_ROOT'] . '/inc/lib/WebAuthn/rootCertificates/huawei.pem');
+
+// Redis
+$redis = new Redis();
+try {
+ if (!empty(getenv('REDIS_SLAVEOF_IP'))) {
+ $redis->connect(getenv('REDIS_SLAVEOF_IP'), getenv('REDIS_SLAVEOF_PORT'));
+ }
+ else {
+ $redis->connect('redis-mailcow', 6379);
+ }
+}
+catch (Exception $e) {
+?>
+<center style='font-family:sans-serif;'>Connection to Redis failed.<br /><br />The following error was reported:<br/><?=$e->getMessage();?></center>
+<?php
+exit;
+}
+
+// PDO
+// Calculate offset
+// $now = new DateTime();
+// $mins = $now->getOffset() / 60;
+// $sgn = ($mins < 0 ? -1 : 1);
+// $mins = abs($mins);
+// $hrs = floor($mins / 60);
+// $mins -= $hrs * 60;
+// $offset = sprintf('%+d:%02d', $hrs*$sgn, $mins);
+
+$dsn = $database_type . ":unix_socket=" . $database_sock . ";dbname=" . $database_name;
+$opt = [
+ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
+ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
+ PDO::ATTR_EMULATE_PREPARES => false,
+ //PDO::MYSQL_ATTR_INIT_COMMAND => "SET time_zone = '" . $offset . "', group_concat_max_len = 3423543543;",
+];
+try {
+ $pdo = new PDO($dsn, $database_user, $database_pass, $opt);
+}
+catch (PDOException $e) {
+// Stop when SQL connection fails
+?>
+<center style='font-family:sans-serif;'>Connection to database failed.<br /><br />The following error was reported:<br/> <?=$e->getMessage();?></center>
+<?php
+exit;
+}
+// Stop when dockerapi is not available
+if (fsockopen("tcp://dockerapi", 443, $errno, $errstr) === false) {
+?>
+<center style='font-family:sans-serif;'>Connection to dockerapi container failed.<br /><br />The following error was reported:<br/><?=$errno;?> - <?=$errstr;?></center>
+<?php
+exit;
+}
+
+// OAuth2
+class mailcowPdo extends OAuth2\Storage\Pdo {
+ public function __construct($connection, $config = array()) {
+ parent::__construct($connection, $config);
+ $this->config['user_table'] = 'mailbox';
+ }
+ public function checkUserCredentials($username, $password) {
+ if (check_login($username, $password) == 'user') {
+ return true;
+ }
+ return false;
+ }
+ public function getUserDetails($username) {
+ return $this->getUser($username);
+ }
+}
+$oauth2_scope_storage = new OAuth2\Storage\Memory(array('default_scope' => 'profile', 'supported_scopes' => array('profile')));
+$oauth2_storage = new mailcowPdo(array('dsn' => $dsn, 'username' => $database_user, 'password' => $database_pass));
+$oauth2_server = new OAuth2\Server($oauth2_storage, array(
+ 'refresh_token_lifetime' => $REFRESH_TOKEN_LIFETIME,
+ 'access_lifetime' => $ACCESS_TOKEN_LIFETIME,
+));
+$oauth2_server->setScopeUtil(new OAuth2\Scope($oauth2_scope_storage));
+$oauth2_server->addGrantType(new OAuth2\GrantType\AuthorizationCode($oauth2_storage));
+$oauth2_server->addGrantType(new OAuth2\GrantType\UserCredentials($oauth2_storage));
+$oauth2_server->addGrantType(new OAuth2\GrantType\RefreshToken($oauth2_storage, array(
+ 'always_issue_new_refresh_token' => true
+)));
+
+function exception_handler($e) {
+ if ($e instanceof PDOException) {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__),
+ 'msg' => array('mysql_error', $e)
+ );
+ return false;
+ }
+ else {
+ $_SESSION['return'][] = array(
+ 'type' => 'danger',
+ 'log' => array(__FUNCTION__),
+ 'msg' => 'An unknown error occured: ' . print_r($e, true)
+ );
+ return false;
+ }
+}
+set_exception_handler('exception_handler');
+
+// TODO: Move function
+function get_remote_ip($anonymize = null) {
+ global $ANONYMIZE_IPS;
+ if ($anonymize === null) {
+ $anonymize = $ANONYMIZE_IPS;
+ }
+ elseif ($anonymize !== true && $anonymize !== false) {
+ $anonymize = true;
+ }
+ $remote = $_SERVER['REMOTE_ADDR'];
+ if (filter_var($remote, FILTER_VALIDATE_IP) === false) {
+ return '0.0.0.0';
+ }
+ if ($anonymize) {
+ if (strlen(inet_pton($remote)) == 4) {
+ return inet_ntop(inet_pton($remote) & inet_pton("255.255.255.0"));
+ }
+ elseif (strlen(inet_pton($remote)) == 16) {
+ return inet_ntop(inet_pton($remote) & inet_pton('ffff:ffff:ffff:ffff:0000:0000:0000:0000'));
+ }
+ }
+ else {
+ return $remote;
+ }
+}
+
+// Load core functions first
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/sessions.inc.php';
+
+// IMAP lib
+// use Ddeboer\Imap\Server;
+// $imap_server = new Server('dovecot', 143, '/imap/tls/novalidate-cert');
+
+// Set language
+if (!isset($_SESSION['mailcow_locale']) && !isset($_COOKIE['mailcow_locale'])) {
+ if ($DETECT_LANGUAGE && isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
+ $header_lang = strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2));
+ if (in_array($header_lang, $AVAILABLE_LANGUAGES)) {
+ $_SESSION['mailcow_locale'] = $header_lang;
+ }
+ }
+ else {
+ $_SESSION['mailcow_locale'] = strtolower(trim($DEFAULT_LANG));
+ }
+}
+if (isset($_COOKIE['mailcow_locale'])) {
+ (preg_match('/^[a-z]{2}$/', $_COOKIE['mailcow_locale'])) ? $_SESSION['mailcow_locale'] = $_COOKIE['mailcow_locale'] : setcookie("mailcow_locale", "", time() - 300);
+}
+if (isset($_GET['lang']) && in_array($_GET['lang'], $AVAILABLE_LANGUAGES)) {
+ $_SESSION['mailcow_locale'] = $_GET['lang'];
+ setcookie("mailcow_locale", $_GET['lang'], time()+30758400); // one year
+}
+
+/*
+ * load language
+ */
+$lang = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/lang/lang.en.json'), true);
+
+$langFile = $_SERVER['DOCUMENT_ROOT'] . '/lang/lang.'.$_SESSION['mailcow_locale'].'.json';
+if(file_exists($langFile)) {
+ $lang = array_merge_real($lang, json_decode(file_get_contents($langFile), true));
+}
+
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.acl.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.app_passwd.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.mailbox.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.customize.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.address_rewriting.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.domain_admin.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.admin.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.quarantine.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.quota_notification.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.policy.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.dkim.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.fwdhost.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.mailq.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.oauth2.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.pushover.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.ratelimit.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.transports.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.rspamd.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.tls_policy_maps.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.fail2ban.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.docker.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.presets.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/init_db.inc.php';
+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/triggers.inc.php';
+init_db_schema();
+if (isset($_SESSION['mailcow_cc_role'])) {
+ // if ($_SESSION['mailcow_cc_role'] == 'user') {
+ // list($master_user, $master_passwd) = explode(':', file_get_contents('/etc/sogo/sieve.creds'));
+ // $imap_connection = $imap_server->authenticate($_SESSION['mailcow_cc_username'] . '*' . trim($master_user), trim($master_passwd));
+ // $master_user = $master_passwd = null;
+ // }
+ acl('to_session');
+}
+$UI_TEXTS = customize('get', 'ui_texts');
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/presets/rspamd/preset_1.yml b/mailcow/src/mailcow-dockerized/data/web/inc/presets/rspamd/preset_1.yml
new file mode 100644
index 0000000..acbe352
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/presets/rspamd/preset_1.yml
@@ -0,0 +1,7 @@
+headline: lang.rsettings_preset_1
+content: |
+ priority = 10;
+ authenticated = yes;
+ apply "default" {
+ symbols_enabled = ["DKIM_SIGNED", "RATELIMITED", "RATELIMIT_UPDATE", "RATELIMIT_CHECK", "DYN_RL_CHECK", "HISTORY_SAVE", "MILTER_HEADERS", "ARC_SIGNED"];
+ }
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/presets/rspamd/preset_3.yml b/mailcow/src/mailcow-dockerized/data/web/inc/presets/rspamd/preset_3.yml
new file mode 100644
index 0000000..37a81d0
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/presets/rspamd/preset_3.yml
@@ -0,0 +1,13 @@
+headline: lang.rsettings_preset_3
+content: |
+ priority = 10;
+ rcpt = "internal-only@domain.tld";
+ # Multiple allowed hosts
+ # from = "/^((?!(.*@allowed-domain\.tld|.*@other-allowed-domain\.tld)).)*$/";
+ from = "/^((?!.*@domain\.tld).)*$/";
+ apply "default" {
+ MAILCOW_BLACK = 9999.0;
+ }
+ symbols [
+ "MAILCOW_BLACK"
+ ]
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/presets/sieve/sieve_1.yml b/mailcow/src/mailcow-dockerized/data/web/inc/presets/sieve/sieve_1.yml
new file mode 100644
index 0000000..e7fa8c8
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/presets/sieve/sieve_1.yml
@@ -0,0 +1,10 @@
+headline: lang.sieve_preset_1
+content: |
+ require ["reject","body","regex"];
+ if anyof (body :raw :regex ["filename=.*\.doc","filename=.*\.exe","filename=.*\.moo"]) {
+ reject text:
+ doc, exe and moo are dangerous file extensions.
+ Why would you do that? I am a sad cow.
+ .
+ ;
+ }
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/presets/sieve/sieve_2.yml b/mailcow/src/mailcow-dockerized/data/web/inc/presets/sieve/sieve_2.yml
new file mode 100644
index 0000000..1dafec1
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/presets/sieve/sieve_2.yml
@@ -0,0 +1,7 @@
+headline: lang.sieve_preset_2
+content: |
+ require ["envelope", "imap4flags"];
+ if envelope "from" "mark@me-read.com"
+ {
+ setflag "\\seen";
+ }
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/presets/sieve/sieve_3.yml b/mailcow/src/mailcow-dockerized/data/web/inc/presets/sieve/sieve_3.yml
new file mode 100644
index 0000000..92f0e10
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/presets/sieve/sieve_3.yml
@@ -0,0 +1,3 @@
+headline: lang.sieve_preset_3
+content: |
+ discard; stop;
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/presets/sieve/sieve_4.yml b/mailcow/src/mailcow-dockerized/data/web/inc/presets/sieve/sieve_4.yml
new file mode 100644
index 0000000..38c7b5f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/presets/sieve/sieve_4.yml
@@ -0,0 +1,4 @@
+headline: lang.sieve_preset_4
+content: |
+ require "fileinto";
+ fileinto "INBOX"; stop;
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/presets/sieve/sieve_5.yml b/mailcow/src/mailcow-dockerized/data/web/inc/presets/sieve/sieve_5.yml
new file mode 100644
index 0000000..adef757
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/presets/sieve/sieve_5.yml
@@ -0,0 +1,16 @@
+headline: lang.sieve_preset_5
+content: |
+ require "vacation-seconds";
+ if true
+ {
+ # Only send once a day:
+ # vacation :seconds 86400 text:
+ # Only send once every 300 seconds:
+ # vacation :seconds 300 text:
+ # Else:
+ vacation text:
+ I am on holidays, yay!
+ Mail me later, alligator.
+ .
+ ;
+ }
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/presets/sieve/sieve_6.yml b/mailcow/src/mailcow-dockerized/data/web/inc/presets/sieve/sieve_6.yml
new file mode 100644
index 0000000..38eaa7c
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/presets/sieve/sieve_6.yml
@@ -0,0 +1,10 @@
+headline: lang.sieve_preset_6
+content: |
+ require ["reject"];
+ # Rejects are sent from postmaster@mailcow_hostname, make sure DMARC/SPF are fine
+ # You should prefer rejects via mailcow blacklists
+ reject text:
+ I am not taking mail from you, and I don't
+ want your birdseed, either!
+ .
+ ;
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/presets/sieve/sieve_7.yml b/mailcow/src/mailcow-dockerized/data/web/inc/presets/sieve/sieve_7.yml
new file mode 100644
index 0000000..6f405e9
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/presets/sieve/sieve_7.yml
@@ -0,0 +1,7 @@
+headline: lang.sieve_preset_7
+content: |
+ redirect "other-address@domain.tld";
+ # Either keep after redirecting:
+ # keep;
+ # Or redirect and drop:
+ discard; stop;
\ No newline at end of file
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/sessions.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/sessions.inc.php
new file mode 100644
index 0000000..5c7ec71
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/sessions.inc.php
@@ -0,0 +1,140 @@
+<?php
+// Start session
+if (session_status() !== PHP_SESSION_ACTIVE) {
+ ini_set("session.cookie_httponly", 1);
+ ini_set('session.gc_maxlifetime', $SESSION_LIFETIME);
+}
+
+if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
+ strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == "https") {
+ if (session_status() !== PHP_SESSION_ACTIVE) {
+ ini_set("session.cookie_secure", 1);
+ }
+ $IS_HTTPS = true;
+}
+elseif (isset($_SERVER['HTTPS'])) {
+ if (session_status() !== PHP_SESSION_ACTIVE) {
+ ini_set("session.cookie_secure", 1);
+ }
+ $IS_HTTPS = true;
+}
+else {
+ $IS_HTTPS = false;
+}
+
+if (session_status() !== PHP_SESSION_ACTIVE) {
+ session_start();
+}
+
+if (!isset($_SESSION['CSRF']['TOKEN'])) {
+ $_SESSION['CSRF']['TOKEN'] = bin2hex(random_bytes(32));
+}
+
+// Set session UA
+if (!isset($_SESSION['SESS_REMOTE_UA'])) {
+ $_SESSION['SESS_REMOTE_UA'] = $_SERVER['HTTP_USER_AGENT'];
+}
+
+// Keep session active
+if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > $SESSION_LIFETIME)) {
+ session_unset();
+ session_destroy();
+}
+$_SESSION['LAST_ACTIVITY'] = time();
+
+// API
+if (!empty($_SERVER['HTTP_X_API_KEY'])) {
+ $stmt = $pdo->prepare("SELECT * FROM `api` WHERE `api_key` = :api_key AND `active` = '1';");
+ $stmt->execute(array(
+ ':api_key' => preg_replace('/[^a-zA-Z0-9-]/', '', $_SERVER['HTTP_X_API_KEY'])
+ ));
+ $api_return = $stmt->fetch(PDO::FETCH_ASSOC);
+ if (!empty($api_return['api_key'])) {
+ $skip_ip_check = ($api_return['skip_ip_check'] == 1);
+ $remote = get_remote_ip(false);
+ $allow_from = array_map('trim', preg_split( "/( |,|;|\n)/", $api_return['allow_from']));
+ if ($skip_ip_check === true || ip_acl($remote, $allow_from)) {
+ $_SESSION['mailcow_cc_username'] = 'API';
+ $_SESSION['mailcow_cc_role'] = 'admin';
+ $_SESSION['mailcow_cc_api'] = true;
+ if ($api_return['access'] == 'rw') {
+ $_SESSION['mailcow_cc_api_access'] = 'rw';
+ }
+ else {
+ $_SESSION['mailcow_cc_api_access'] = 'ro';
+ }
+ }
+ else {
+ $redis->publish("F2B_CHANNEL", "mailcow UI: Invalid password for API_USER by " . $_SERVER['REMOTE_ADDR']);
+ error_log("mailcow UI: Invalid password for " . $user . " by " . $_SERVER['REMOTE_ADDR']);
+ http_response_code(401);
+ echo json_encode(array(
+ 'type' => 'error',
+ 'msg' => 'api access denied for ip ' . $_SERVER['REMOTE_ADDR']
+ ));
+ unset($_POST);
+ exit();
+ }
+ }
+ else {
+ $redis->publish("F2B_CHANNEL", "mailcow UI: Invalid password for API_USER by " . $_SERVER['REMOTE_ADDR']);
+ error_log("mailcow UI: Invalid password for " . $user . " by " . $_SERVER['REMOTE_ADDR']);
+ http_response_code(401);
+ echo json_encode(array(
+ 'type' => 'error',
+ 'msg' => 'authentication failed'
+ ));
+ unset($_POST);
+ exit();
+ }
+}
+
+// Handle logouts
+if (isset($_POST["logout"])) {
+ if (isset($_SESSION["dual-login"])) {
+ $_SESSION["mailcow_cc_username"] = $_SESSION["dual-login"]["username"];
+ $_SESSION["mailcow_cc_role"] = $_SESSION["dual-login"]["role"];
+ unset($_SESSION["dual-login"]);
+ header("Location: /mailbox");
+ exit();
+ }
+ else {
+ session_regenerate_id(true);
+ session_unset();
+ session_destroy();
+ session_write_close();
+ header("Location: /");
+ }
+}
+
+// Check session
+function session_check() {
+ if (isset($_SESSION['mailcow_cc_api']) && $_SESSION['mailcow_cc_api'] === true) {
+ return true;
+ }
+ if (!isset($_SESSION['SESS_REMOTE_UA']) || ($_SESSION['SESS_REMOTE_UA'] != $_SERVER['HTTP_USER_AGENT'])) {
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'msg' => 'session_ua'
+ );
+ return false;
+ }
+ if (!empty($_POST)) {
+ if ($_SESSION['CSRF']['TOKEN'] != $_POST['csrf_token']) {
+ $_SESSION['return'][] = array(
+ 'type' => 'warning',
+ 'msg' => 'session_token'
+ );
+ return false;
+ }
+ unset($_POST['csrf_token']);
+ $_SESSION['CSRF']['TOKEN'] = bin2hex(random_bytes(32));
+ $_SESSION['CSRF']['TIME'] = time();
+ }
+ return true;
+}
+
+if (isset($_SESSION['mailcow_cc_role']) && session_check() === false) {
+ $_POST = array();
+ $_FILES = array();
+}
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/spf.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/spf.inc.php
new file mode 100644
index 0000000..199f572
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/spf.inc.php
@@ -0,0 +1,143 @@
+<?php
+error_reporting(0);
+
+function get_spf_allowed_hosts($check_domain)
+{
+ $hosts = array();
+
+ $records = dns_get_record($check_domain, DNS_TXT);
+ foreach ($records as $record)
+ {
+ $txt = explode(' ', $record['entries'][0]);
+ if (array_shift($txt) != 'v=spf1') // only handle SPF records
+ continue;
+
+ foreach ($txt as $mech)
+ {
+ $qual = substr($mech, 0, 1);
+ if ($qual == '-' || $qual == '~') // only handle pass or neutral records
+ continue(2);
+
+ if ($qual == '+' || $qual == '?')
+ $mech = substr($mech, 1); // remove the qualifier
+
+ if (strpos($mech, '=') !== FALSE) // handle a modifier
+ {
+ $mod = explode('=', $mech);
+ if ($mod[0] == 'redirect') // handle a redirect
+ {
+ $hosts = get_spf_allowed_hosts($mod[1]);
+ return $hosts;
+ }
+ }
+ else
+ {
+ unset($cidr);
+ // reset domain to check_domain
+ $domain = $check_domain;
+ if (strpos($mech, ':') !== FALSE) // handle a domain specification
+ {
+ $split = explode(':', $mech);
+ $mech = array_shift($split);
+ $domain = implode(':', $split);
+ if (strpos($domain, '/') !== FALSE) // remove CIDR specification
+ {
+ $split = explode('/', $domain);
+ $domain = $split[0];
+ $cidr = $split[1];
+ }
+ }
+
+ $new_hosts = array();
+ if ($mech == 'include' && $check_domain != $domain) // handle an inclusion
+ {
+ $new_hosts = get_spf_allowed_hosts($domain);
+ }
+ elseif ($mech == 'a') // handle a mechanism
+ {
+ $new_hosts = get_a_hosts($domain);
+ }
+ elseif ($mech == 'mx') // handle mx mechanism
+ {
+ $new_hosts = get_mx_hosts($domain);
+ }
+ elseif ($mech == 'ip4' || $mech == 'ip6') // handle ip mechanism
+ {
+ $new_hosts = array($domain);
+ }
+
+ if (isset($cidr)) // add CIDR specification if present
+ {
+ foreach ($new_hosts as &$host)
+ {
+ $host .= '/' . $cidr;
+ }
+ unset($host);
+ }
+
+ $hosts = array_unique(array_merge($hosts,$new_hosts), SORT_REGULAR);
+ }
+ }
+ }
+ foreach ($hosts as &$host) {
+ if (filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
+ $host = $host;
+ }
+ }
+ return $hosts;
+}
+
+
+function get_mx_hosts($domain)
+{
+ $hosts = array();
+ try {
+ $mx_records = dns_get_record($domain, DNS_MX);
+ if ($mx_records) {
+ foreach ($mx_records as $mx_record) {
+ $new_hosts = get_a_hosts($mx_record['target']);
+ $hosts = array_unique(array_merge($hosts,$new_hosts), SORT_REGULAR);
+ }
+ }
+ }
+ catch (Exception $e) {
+ if ($e->getMessage() !== 'dns_get_record(): A temporary server error occurred.') {
+ throw $e;
+ }
+ $mx_records = false;
+ }
+ return $hosts;
+}
+
+function get_a_hosts($domain)
+{
+ $hosts = array();
+
+ $a_records = dns_get_record($domain, DNS_A);
+ foreach ($a_records as $a_record)
+ {
+ $hosts[] = $a_record['ip'];
+ }
+ $a_records = dns_get_record($domain, DNS_AAAA);
+ foreach ($a_records as $a_record)
+ {
+ $hosts[] = $a_record['ipv6'];
+ }
+
+ return $hosts;
+}
+
+function get_outgoing_hosts_best_guess($domain)
+{
+ // try the SPF record to get hosts that are allowed to send outgoing mails for this domain
+ $hosts = get_spf_allowed_hosts($domain);
+ if ($hosts) return $hosts;
+
+ // try the MX record to get mail servers for this domain
+ $hosts = get_mx_hosts($domain);
+ if ($hosts) return $hosts;
+
+ // fall back to the A record to get the host name for this domain
+ return get_a_hosts($domain);
+}
+?>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/triggers.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/triggers.inc.php
new file mode 100644
index 0000000..8785759
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/triggers.inc.php
@@ -0,0 +1,133 @@
+<?php
+if (isset($_POST["verify_tfa_login"])) {
+ if (verify_tfa_login($_SESSION['pending_mailcow_cc_username'], $_POST["token"])) {
+ $_SESSION['mailcow_cc_username'] = $_SESSION['pending_mailcow_cc_username'];
+ $_SESSION['mailcow_cc_role'] = $_SESSION['pending_mailcow_cc_role'];
+ unset($_SESSION['pending_mailcow_cc_username']);
+ unset($_SESSION['pending_mailcow_cc_role']);
+ unset($_SESSION['pending_tfa_method']);
+ header("Location: /user");
+ }
+}
+
+if (isset($_POST["quick_release"])) {
+ quarantine('quick_release', $_POST["quick_release"]);
+}
+
+if (isset($_POST["quick_delete"])) {
+ quarantine('quick_delete', $_POST["quick_delete"]);
+}
+
+if (isset($_POST["login_user"]) && isset($_POST["pass_user"])) {
+ $login_user = strtolower(trim($_POST["login_user"]));
+ $as = check_login($login_user, $_POST["pass_user"]);
+ if ($as == "admin") {
+ $_SESSION['mailcow_cc_username'] = $login_user;
+ $_SESSION['mailcow_cc_role'] = "admin";
+ $_SESSION['mailcow_cc_last_login'] = last_login($login_user);
+ header("Location: /admin");
+ }
+ elseif ($as == "domainadmin") {
+ $_SESSION['mailcow_cc_username'] = $login_user;
+ $_SESSION['mailcow_cc_role'] = "domainadmin";
+ $_SESSION['mailcow_cc_last_login'] = last_login($login_user);
+ header("Location: /mailbox");
+ }
+ elseif ($as == "user") {
+ $_SESSION['mailcow_cc_username'] = $login_user;
+ $_SESSION['mailcow_cc_role'] = "user";
+ $_SESSION['mailcow_cc_last_login'] = last_login($login_user);
+ $http_parameters = explode('&', $_SESSION['index_query_string']);
+ unset($_SESSION['index_query_string']);
+ if (in_array('mobileconfig', $http_parameters)) {
+ if (in_array('only_email', $http_parameters)) {
+ header("Location: /mobileconfig.php?email_only");
+ die();
+ }
+ header("Location: /mobileconfig.php");
+ die();
+ }
+ header("Location: /user");
+ }
+ elseif ($as != "pending") {
+ unset($_SESSION['pending_mailcow_cc_username']);
+ unset($_SESSION['pending_mailcow_cc_role']);
+ unset($_SESSION['pending_tfa_method']);
+ unset($_SESSION['mailcow_cc_username']);
+ unset($_SESSION['mailcow_cc_role']);
+ }
+}
+
+if (isset($_SESSION['mailcow_cc_role']) && $_SESSION['acl']['login_as'] == "1") {
+ if (isset($_GET["duallogin"])) {
+ $duallogin = html_entity_decode(rawurldecode($_GET["duallogin"]));
+ if (filter_var($duallogin, FILTER_VALIDATE_EMAIL)) {
+ if (!empty(mailbox('get', 'mailbox_details', $duallogin))) {
+ $_SESSION["dual-login"]["username"] = $_SESSION['mailcow_cc_username'];
+ $_SESSION["dual-login"]["role"] = $_SESSION['mailcow_cc_role'];
+ $_SESSION['mailcow_cc_username'] = $duallogin;
+ $_SESSION['mailcow_cc_role'] = "user";
+ header("Location: /user");
+ }
+ }
+ else {
+ if (!empty(domain_admin('details', $duallogin))) {
+ $_SESSION["dual-login"]["username"] = $_SESSION['mailcow_cc_username'];
+ $_SESSION["dual-login"]["role"] = $_SESSION['mailcow_cc_role'];
+ $_SESSION['mailcow_cc_username'] = $duallogin;
+ $_SESSION['mailcow_cc_role'] = "domainadmin";
+ header("Location: /user");
+ }
+ }
+ }
+}
+
+if (isset($_SESSION['mailcow_cc_role']) && ($_SESSION['mailcow_cc_role'] == "admin" || $_SESSION['mailcow_cc_role'] == "domainadmin")) {
+ if (isset($_POST["set_tfa"])) {
+ set_tfa($_POST);
+ }
+ if (isset($_POST["unset_tfa_key"])) {
+ unset_tfa_key($_POST);
+ }
+ if (isset($_POST["unset_fido2_key"])) {
+ fido2(array("action" => "unset_fido2_key", "post_data" => $_POST));
+ }
+}
+if (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == "admin") {
+ // TODO: Move file upload to API?
+ if (isset($_POST["submit_main_logo"])) {
+ if ($_FILES['main_logo']['error'] == 0) {
+ customize('add', 'main_logo', $_FILES);
+ }
+ }
+ if (isset($_POST["reset_main_logo"])) {
+ customize('delete', 'main_logo');
+ }
+ // Some actions will not be available via API
+ if (isset($_POST["license_validate_now"])) {
+ license('verify');
+ }
+ if (isset($_POST["admin_api"])) {
+ if (isset($_POST["admin_api"]["ro"])) {
+ admin_api('ro', 'edit', $_POST);
+ }
+ elseif (isset($_POST["admin_api"]["rw"])) {
+ admin_api('rw', 'edit', $_POST);
+ }
+ }
+ if (isset($_POST["admin_api_regen_key"])) {
+ if (isset($_POST["admin_api_regen_key"]["ro"])) {
+ admin_api('ro', 'regen_key', $_POST);
+ }
+ elseif (isset($_POST["admin_api_regen_key"]["rw"])) {
+ admin_api('rw', 'regen_key', $_POST);
+ }
+ }
+ if (isset($_POST["rspamd_ui"])) {
+ rspamd_ui('edit', $_POST);
+ }
+ if (isset($_POST["mass_send"])) {
+ sys_mail($_POST);
+ }
+}
+?>
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/vars.inc.php b/mailcow/src/mailcow-dockerized/data/web/inc/vars.inc.php
new file mode 100644
index 0000000..f497ffb
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/vars.inc.php
@@ -0,0 +1,208 @@
+<?php
+error_reporting(E_ERROR);
+//error_reporting(E_ALL);
+
+/*
+PLEASE USE THE FILE "vars.local.inc.php" TO OVERWRITE SETTINGS AND MAKE THEM PERSISTENT!
+This file will be reset on upgrades.
+*/
+
+// SQL database connection variables
+$database_type = 'mysql';
+$database_sock = '/var/run/mysqld/mysqld.sock';
+$database_host = 'mysql';
+$database_user = getenv('DBUSER');
+$database_pass = getenv('DBPASS');
+$database_name = getenv('DBNAME');
+
+// Other variables
+$mailcow_hostname = getenv('MAILCOW_HOSTNAME');
+$default_pass_scheme = getenv('MAILCOW_PASS_SCHEME');
+
+// Autodiscover settings
+// ===
+// Auto-detect HTTPS port =>
+$https_port = strpos($_SERVER['HTTP_HOST'], ':');
+if ($https_port === FALSE) {
+ $https_port = 443;
+} else {
+ $https_port = substr($_SERVER['HTTP_HOST'], $https_port+1);
+}
+
+// Alternatively select port here =>
+//$https_port = 1234;
+// Other settings =>
+$autodiscover_config = array(
+ // General autodiscover service type: "activesync" or "imap"
+ // emClient uses autodiscover, but does not support ActiveSync. mailcow excludes emClient from ActiveSync.
+ // With SOGo disabled, the type will always fallback to imap. CalDAV and CardDAV will be excluded, too.
+ 'autodiscoverType' => 'activesync',
+ // If autodiscoverType => activesync, also use ActiveSync (EAS) for Outlook desktop clients (>= Outlook 2013 on Windows)
+ // Outlook for Mac does not support ActiveSync
+ 'useEASforOutlook' => 'no',
+ // Please don't use STARTTLS-enabled service ports in the "port" variable.
+ // The autodiscover service will always point to SMTPS and IMAPS (TLS-wrapped services).
+ // The autoconfig service will additionally announce the STARTTLS-enabled ports, specified in the "tlsport" variable.
+ 'imap' => array(
+ 'server' => $mailcow_hostname,
+ 'port' => end(explode(':', getenv('IMAPS_PORT'))),
+ 'tlsport' => end(explode(':', getenv('IMAP_PORT'))),
+ ),
+ 'pop3' => array(
+ 'server' => $mailcow_hostname,
+ 'port' => end(explode(':', getenv('POPS_PORT'))),
+ 'tlsport' => end(explode(':', getenv('POP_PORT'))),
+ ),
+ 'smtp' => array(
+ 'server' => $mailcow_hostname,
+ 'port' => end(explode(':', getenv('SMTPS_PORT'))),
+ 'tlsport' => end(explode(':', getenv('SUBMISSION_PORT'))),
+ ),
+ 'activesync' => array(
+ 'url' => 'https://'.$mailcow_hostname.($https_port == 443 ? '' : ':'.$https_port).'/Microsoft-Server-ActiveSync',
+ ),
+ 'caldav' => array(
+ 'server' => $mailcow_hostname,
+ 'port' => $https_port,
+ ),
+ 'carddav' => array(
+ 'server' => $mailcow_hostname,
+ 'port' => $https_port,
+ ),
+);
+
+// If false, we will use DEFAULT_LANG
+// Uses HTTP_ACCEPT_LANGUAGE header
+$DETECT_LANGUAGE = true;
+
+// Change default language
+$DEFAULT_LANG = 'en';
+
+// Available languages
+$AVAILABLE_LANGUAGES = array('ca', 'cs', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ko', 'lv', 'nl', 'pl', 'pt', 'ro', 'ru', 'sk', 'sv', 'zh');
+
+// Change theme (default: lumen)
+// Needs to be one of those: cerulean, cosmo, cyborg, darkly, flatly, journal, lumen, paper, readable, sandstone,
+// simplex, slate, spacelab, superhero, united, yeti
+// See https://bootswatch.com/
+// WARNING: Only lumen is loaded locally. Enabling any other theme, will download external sources.
+$DEFAULT_THEME = 'lumen';
+
+// Password complexity as regular expression
+// Min. 6 characters
+$PASSWD_REGEP = '.{6,}';
+// Min. 6 characters, which must include at least one uppercase letter, one lowercase letter and one number
+// $PASSWD_REGEP = '^(?=.*[A-Z])(?=.*[0-9])(?=.*[a-z]).{6,}$';
+// Min. 6 characters, which must include at least one letter and one number
+// $PASSWD_REGEP = '^(?=.*[0-9])(?=.*[A-Za-z]).{6,}$';
+
+// Show DKIM private keys - false by default
+$SHOW_DKIM_PRIV_KEYS = false;
+
+// mailcow Apps - buttons on login screen
+$MAILCOW_APPS = array(
+ array(
+ 'name' => 'Webmail',
+ 'link' => '/SOGo/',
+ )
+);
+
+// Rows until pagination begins
+$PAGINATION_SIZE = 20;
+
+// Default number of rows/lines to display (log table)
+$LOG_LINES = 1000;
+
+// Rows until pagination begins (log table)
+$LOG_PAGINATION_SIZE = 50;
+
+// Session lifetime in seconds
+$SESSION_LIFETIME = 10800;
+
+// Label for OTP devices
+$OTP_LABEL = "mailcow UI";
+
+// Default "to" address in relay test tool
+$RELAY_TO = "null@hosted.mailcow.de";
+
+// How long to wait (in s) for cURL Docker requests
+$DOCKER_TIMEOUT = 60;
+
+// Anonymize IPs logged via UI
+$ANONYMIZE_IPS = true;
+
+// Split DKIM key notation (bind format)
+$SPLIT_DKIM_255 = false;
+
+// OAuth2 settings
+$REFRESH_TOKEN_LIFETIME = 2678400;
+$ACCESS_TOKEN_LIFETIME = 86400;
+// Logout from mailcow after first OAuth2 session profile request
+$OAUTH2_FORGET_SESSION_AFTER_LOGIN = false;
+
+// MAILBOX_DEFAULT_ATTRIBUTES define default attributes for new mailboxes
+// These settings will not change existing mailboxes
+
+// Force incoming TLS for new mailboxes by default
+$MAILBOX_DEFAULT_ATTRIBUTES['tls_enforce_in'] = false;
+
+// Force outgoing TLS for new mailboxes by default
+$MAILBOX_DEFAULT_ATTRIBUTES['tls_enforce_out'] = false;
+
+// Force password change on next login (only allows login to mailcow UI)
+$MAILBOX_DEFAULT_ATTRIBUTES['force_pw_update'] = false;
+
+// Enable SOGo access (set to false to disable access by default)
+$MAILBOX_DEFAULT_ATTRIBUTES['sogo_access'] = true;
+
+// Send notification when quarantine is not empty (never, hourly, daily, weekly)
+$MAILBOX_DEFAULT_ATTRIBUTES['quarantine_notification'] = 'hourly';
+
+// Mailbox has IMAP access by default
+$MAILBOX_DEFAULT_ATTRIBUTES['imap_access'] = true;
+
+// Mailbox has POP3 access by default
+$MAILBOX_DEFAULT_ATTRIBUTES['pop3_access'] = true;
+
+// Mailbox has SMTP access by default
+$MAILBOX_DEFAULT_ATTRIBUTES['smtp_access'] = true;
+
+// Mailbox receives notifications about...
+// "add_header" - mail that was put into the Junk folder
+// "reject" - mail that was rejected
+// "all" - mail that was rejected and put into the Junk folder
+$MAILBOX_DEFAULT_ATTRIBUTES['quarantine_category'] = 'reject';
+
+// Default mailbox format, should not be changed unless you know exactly, what you do, keep the trailing ":"
+// Check dovecot.conf for further changes (e.g. shared namespace)
+$MAILBOX_DEFAULT_ATTRIBUTES['mailbox_format'] = 'maildir:';
+
+// Show last IMAP and POP3 logins
+$SHOW_LAST_LOGIN = true;
+
+// UV flag handling in FIDO2/WebAuthn - defaults to false to allow iOS logins
+// true = required
+// false = preferred
+// string 'required' 'preferred' 'discouraged'
+$FIDO2_UV_FLAG_REGISTER = 'preferred';
+$FIDO2_UV_FLAG_LOGIN = 'preferred'; // iOS ignores the key via NFC if required - known issue
+$FIDO2_USER_PRESENT_FLAG = true;
+$FIDO2_FORMATS = array('apple', 'android-key', 'android-safetynet', 'fido-u2f', 'none', 'packed', 'tpm');
+
+// Set visible Rspamd maps in mailcow UI, do not change unless you know what you are doing
+$RSPAMD_MAPS = array(
+ 'regex' => array(
+ 'Header-From: Blacklist' => 'global_mime_from_blacklist.map',
+ 'Header-From: Whitelist' => 'global_mime_from_whitelist.map',
+ 'Envelope Sender Blacklist' => 'global_smtp_from_blacklist.map',
+ 'Envelope Sender Whitelist' => 'global_smtp_from_whitelist.map',
+ 'Recipient Blacklist' => 'global_rcpt_blacklist.map',
+ 'Recipient Whitelist' => 'global_rcpt_whitelist.map',
+ 'Fishy TLDS (only fired in combination with bad words)' => 'fishy_tlds.map',
+ 'Bad Words (only fired in combination with fishy TLDs)' => 'bad_words.map',
+ 'Bad Words DE (only fired in combination with fishy TLDs)' => 'bad_words_de.map',
+ 'Bad Languages' => 'bad_languages.map',
+ 'Bulk Mail Headers' => 'bulk_header.map',
+ 'Monitoring Hosts' => 'monitoring_nolog.map'
+ )
+);