summaryrefslogtreecommitdiffstats
path: root/comm/mail/test/browser/smime
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/test/browser/smime')
-rw-r--r--comm/mail/test/browser/smime/browser.ini13
-rw-r--r--comm/mail/test/browser/smime/browser_multipartAlternative.js100
-rw-r--r--comm/mail/test/browser/smime/browser_nestedSMimeSigs.js49
-rw-r--r--comm/mail/test/browser/smime/data/Bob.p12bin0 -> 3666 bytes
-rw-r--r--comm/mail/test/browser/smime/data/README.md5
-rw-r--r--comm/mail/test/browser/smime/data/TestCA.pem21
-rw-r--r--comm/mail/test/browser/smime/data/multipart-alternative.eml42
-rw-r--r--comm/mail/test/browser/smime/data/nested-sigs.eml219
8 files changed, 449 insertions, 0 deletions
diff --git a/comm/mail/test/browser/smime/browser.ini b/comm/mail/test/browser/smime/browser.ini
new file mode 100644
index 0000000000..ba509e2496
--- /dev/null
+++ b/comm/mail/test/browser/smime/browser.ini
@@ -0,0 +1,13 @@
+[DEFAULT]
+prefs =
+ mail.provider.suppress_dialog_on_startup=true
+ mail.spotlight.firstRunDone=true
+ mail.winsearch.firstRunDone=true
+ mailnews.start_page.override_url=about:blank
+ mailnews.start_page.url=about:blank
+ datareporting.policy.dataSubmissionPolicyBypassNotification=true
+subsuite = thunderbird
+support-files = data/**
+
+[browser_multipartAlternative.js]
+[browser_nestedSMimeSigs.js]
diff --git a/comm/mail/test/browser/smime/browser_multipartAlternative.js b/comm/mail/test/browser/smime/browser_multipartAlternative.js
new file mode 100644
index 0000000000..cd55bba265
--- /dev/null
+++ b/comm/mail/test/browser/smime/browser_multipartAlternative.js
@@ -0,0 +1,100 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * Test that a reply to a multipart/alternative message with two
+ * encrypted parts doesn't leak the secret plaintext from the second
+ * part.
+ */
+
+"use strict";
+
+var { close_compose_window, get_msg_source, open_compose_with_reply } =
+ ChromeUtils.import("resource://testing-common/mozmill/ComposeHelpers.jsm");
+var {
+ be_in_folder,
+ get_special_folder,
+ open_message_from_file,
+ press_delete,
+ select_click_row,
+ smimeUtils_ensureNSS,
+ smimeUtils_loadCertificateAndKey,
+ smimeUtils_loadPEMCertificate,
+} = ChromeUtils.import(
+ "resource://testing-common/mozmill/FolderDisplayHelpers.jsm"
+);
+var { close_window } = ChromeUtils.import(
+ "resource://testing-common/mozmill/WindowHelpers.jsm"
+);
+
+var { MailServices } = ChromeUtils.import(
+ "resource:///modules/MailServices.jsm"
+);
+
+var gDrafts;
+
+add_setup(async function () {
+ gDrafts = await get_special_folder(Ci.nsMsgFolderFlags.Drafts, true);
+
+ Services.prefs.setBoolPref("mail.identity.id1.compose_html", true);
+});
+
+add_task(async function test_multipart_alternative() {
+ smimeUtils_ensureNSS();
+ smimeUtils_loadPEMCertificate(
+ new FileUtils.File(getTestFilePath("data/TestCA.pem")),
+ Ci.nsIX509Cert.CA_CERT
+ );
+ smimeUtils_loadCertificateAndKey(
+ new FileUtils.File(getTestFilePath("data/Bob.p12"), "nss")
+ );
+
+ let msgc = await open_message_from_file(
+ new FileUtils.File(getTestFilePath("data/multipart-alternative.eml"))
+ );
+
+ let cwc = open_compose_with_reply(msgc);
+
+ close_window(msgc);
+
+ // Now save the message as a draft.
+ EventUtils.synthesizeKey(
+ "s",
+ { shiftKey: false, accelKey: true },
+ cwc.window
+ );
+ await TestUtils.waitForCondition(
+ () => !cwc.window.gSaveOperationInProgress && !cwc.window.gWindowLock,
+ "Saving of draft did not finish"
+ );
+ close_compose_window(cwc);
+
+ // Now check the message content in the drafts folder.
+ await be_in_folder(gDrafts);
+ let message = select_click_row(0);
+ let messageContent = await get_msg_source(message);
+
+ // Check for a single line that contains text and make sure there is a
+ // space at the end for a flowed reply.
+ Assert.ok(
+ !messageContent.includes("SECRET-TEXT"),
+ "Secret text was found, but shouldn't be there."
+ );
+
+ // Delete the outgoing message.
+ press_delete();
+});
+
+registerCleanupFunction(function () {
+ Services.prefs.clearUserPref("mail.identity.id1.compose_html");
+
+ // Some tests that open new windows don't return focus to the main window
+ // in a way that satisfies mochitest, and the test times out.
+ Services.focus.focusedWindow = window;
+ // Focus an element in the main window, then blur it again to avoid it
+ // hijacking keypresses.
+ let mainWindowElement = document.getElementById("button-appmenu");
+ mainWindowElement.focus();
+ mainWindowElement.blur();
+});
diff --git a/comm/mail/test/browser/smime/browser_nestedSMimeSigs.js b/comm/mail/test/browser/smime/browser_nestedSMimeSigs.js
new file mode 100644
index 0000000000..996c4e804a
--- /dev/null
+++ b/comm/mail/test/browser/smime/browser_nestedSMimeSigs.js
@@ -0,0 +1,49 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * Test that a message containing two nested S/MIME signatures shows
+ * the contents of the inner signed message.
+ */
+
+"use strict";
+
+var { open_message_from_file, get_about_message, smimeUtils_ensureNSS } =
+ ChromeUtils.import(
+ "resource://testing-common/mozmill/FolderDisplayHelpers.jsm"
+ );
+var { close_window } = ChromeUtils.import(
+ "resource://testing-common/mozmill/WindowHelpers.jsm"
+);
+
+function getMsgBodyTxt(mc) {
+ let msgPane = get_about_message(mc.window).getMessagePaneBrowser();
+ return msgPane.contentDocument.documentElement.textContent;
+}
+
+add_task(async function test_nested_sigs() {
+ smimeUtils_ensureNSS();
+
+ let msgc = await open_message_from_file(
+ new FileUtils.File(getTestFilePath("data/nested-sigs.eml"))
+ );
+
+ Assert.ok(
+ getMsgBodyTxt(msgc).includes("level 2"),
+ "level 2 text is shown in body"
+ );
+
+ close_window(msgc);
+});
+
+registerCleanupFunction(() => {
+ // Some tests that open new windows don't return focus to the main window
+ // in a way that satisfies mochitest, and the test times out.
+ Services.focus.focusedWindow = window;
+ // Focus an element in the main window, then blur it again to avoid it
+ // hijacking keypresses.
+ let mainWindowElement = document.getElementById("button-appmenu");
+ mainWindowElement.focus();
+ mainWindowElement.blur();
+});
diff --git a/comm/mail/test/browser/smime/data/Bob.p12 b/comm/mail/test/browser/smime/data/Bob.p12
new file mode 100644
index 0000000000..b5c8504a73
--- /dev/null
+++ b/comm/mail/test/browser/smime/data/Bob.p12
Binary files differ
diff --git a/comm/mail/test/browser/smime/data/README.md b/comm/mail/test/browser/smime/data/README.md
new file mode 100644
index 0000000000..43c4ce63fa
--- /dev/null
+++ b/comm/mail/test/browser/smime/data/README.md
@@ -0,0 +1,5 @@
+S/MIME Mozmill test certificates and messages
+=============================================
+
+The test data in this directory can be refreshed by executing script
+local-gen.sh found in comm/mailnews/test/data/smime
diff --git a/comm/mail/test/browser/smime/data/TestCA.pem b/comm/mail/test/browser/smime/data/TestCA.pem
new file mode 100644
index 0000000000..0e9f065d6e
--- /dev/null
+++ b/comm/mail/test/browser/smime/data/TestCA.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDdTCCAl2gAwIBAgIBATANBgkqhkiG9w0BAQsFADBkMQswCQYDVQQGEwJVUzET
+MBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzESMBAG
+A1UEChMJQk9HVVMgTlNTMRQwEgYDVQQDEwtOU1MgVGVzdCBDQTAgFw0yMzExMjEy
+MDUwMDdaGA8yMDczMTEyMTIwNTAwN1owZDELMAkGA1UEBhMCVVMxEzARBgNVBAgT
+CkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxEjAQBgNVBAoTCUJP
+R1VTIE5TUzEUMBIGA1UEAxMLTlNTIFRlc3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUA
+A4IBDwAwggEKAoIBAQDPL+VBVHBnK32PfKsFz5mwpeOdSOsfqymx2DN1qo42mQ8s
+SRmrK7lbi0iiGuU+3jFBh/29wWitHH+1qb/DDSiIYk+RS3mVKdTxDOztwyRW7mf3
+oqK3OR4cQhLxXhIDuhDW4P4CQTwu6CSqwyTkrJeEi77foQ/C1rX1zQWMpJW7n4Iv
+9PNMedHpNtoXP7zS8GxV9WwiHFEcRYzwdrlHQJm9+l0OWp8Tl5DFniJjjOuQYr4n
+DGJ1R4F74yU9NPrOzAy9Cvm1eO4novQEcUyQ5Mdnw7bHI31ChWf/KyZzDLA+jTMI
+30fLNDr512k0Z1429p1n77nzGhSDSbSNKFtyyNy1AgMBAAGjMDAuMBEGCWCGSAGG
++EIBAQQEAwIABzAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjANBgkqhkiG9w0B
+AQsFAAOCAQEAt8reMMu83pDQiZqgq1bI7P1sGznDykMefFITZF3veDas86T9seDZ
+pPAT45uo8t/+yuQWciDfBDcB5NnedkTjmXUaG1ZKekTamv6uNaLqr5aZrotnNUwK
+CYk4ci1K5MuprqE6kBKKP8cGYL5ZqA4PPIHxlCgU2JR9G8NVn7Nw3Xb6ZTqRWTSn
+g2tM3LWBDCu2p6qIZPNu35OYBUmLzsfSSlroj8iwirnOa+LYAmUMTQlnBQpln1WI
+q+q0haYFPt9MTGpvwA9JBoElS9I4XxJHbthlsCizas9UJfue37RIR5LRXA8zudRU
+Rwo8QS6MTgppRvorz2kvABRmkXiYk3Vn/g==
+-----END CERTIFICATE-----
diff --git a/comm/mail/test/browser/smime/data/multipart-alternative.eml b/comm/mail/test/browser/smime/data/multipart-alternative.eml
new file mode 100644
index 0000000000..0ff896f048
--- /dev/null
+++ b/comm/mail/test/browser/smime/data/multipart-alternative.eml
@@ -0,0 +1,42 @@
+MIME-Version: 1.0
+Date: Tue, 21 Nov 2023 21:12:39 +0000
+From: Alice <alice@example.com>
+To: Bob <bob@example.com>
+Subject: a message
+Content-Type: multipart/alternative; boundary="--------BOUNDARY"
+
+----------BOUNDARY
+Content-Type: application/pkcs7-mime; smime-type=enveloped-data
+Content-Transfer-Encoding: base64
+
+MIAGCSqGSIb3DQEHA6CAMIACAQAxggGFMIIBgQIBADBpMGQxCzAJBgNVBAYTAlVT
+MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRIw
+EAYDVQQKEwlCT0dVUyBOU1MxFDASBgNVBAMTC05TUyBUZXN0IENBAgEoMA0GCSqG
+SIb3DQEBAQUABIIBAJFkVEzBMOiW8RY8h8xH7ZujIgZ/HjTP0NziHV+asAP1ANm1
+EqPqiy8C5/jtrW/rYF+2JYZIe8xW9kOpd4AlKyAvESn/jM+wRwRai3YHJ8DalFzl
+4+CsqIzSwmf9KZa0yK72Cy+Lp8/0ycWJstDU/ZXFd6lUsHWiYdPgF1KsceWepyYS
+Ggg4n9dopCN7+Xthlj8uW2yG5u+WtJkWJrXqrM4z7pzaW9GDPeOV5jp9CUauZOdV
+ItlwPlGH/mMeiJ7KKQVclnN8bx2q/QHOvnSWS6fID1WTBYV1ZhAlxZHWBRSn643J
+3ZwLxIS+F1cRc/EClsWv8zgKLfNXrcVSja1vD4UwgAYJKoZIhvcNAQcBMB0GCWCG
+SAFlAwQBAgQQ57mGV7ei08u956g0xkC4caCABIGQt8h3XciNdcCwh4xWGWviytVC
+Gbt5ZAI/iAsrBbkm2Tx/PxNrcn7+5FBhsTld1Inm8lge2WTNClOxoOecoeZxCe+y
+MGqrAsxPIDYpO7HP/n1+RBWy8azv+j2o2+LuguA+xo2wnTbt8BJz6DN8k61PL8Xg
+yY8hP+DQsA/6OxB/KA8TJRFxR8N26DseKmuXoo/xBBAJyufRO/Z/JkWOTbTpOIjC
+AAAAAAAAAAAAAA==
+----------BOUNDARY
+Content-Type: application/pkcs7-mime; smime-type=enveloped-data
+Content-Transfer-Encoding: base64
+
+MIAGCSqGSIb3DQEHA6CAMIACAQAxggGFMIIBgQIBADBpMGQxCzAJBgNVBAYTAlVT
+MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRIw
+EAYDVQQKEwlCT0dVUyBOU1MxFDASBgNVBAMTC05TUyBUZXN0IENBAgEoMA0GCSqG
+SIb3DQEBAQUABIIBAAZXwFocAUc633rlij5f7h34x/PYispef+6ufoNaQKq1/c9b
+SbKRZR4hqBYy1pBxO6tK61gWnFeHdnrq7Kec/i+LOkUG4g8Ki4ELG3MGICaqo7Fu
+CAQeSbSD+E8LuO/rRsnNwUwNE2oy7Zie9iqqcJQuCR48WMeVhuGn+RwEDAlZod73
+/us2Xvobl3Q40vcbidegMmP9UXBa45BhIfeq8GrtPOUzVW9zv7fQoNc+1x1JSK7L
+Y+o5VPUoJUMsr2jcgpGDb0uPN1xN8qEThEb8YeFLQbynEoEihJLtKfs33E0U2BVe
+GhSCHB0w6SvSkhwSYI7OY6vj18JBcjnFTIY2VkEwgAYJKoZIhvcNAQcBMB0GCWCG
+SAFlAwQBAgQQECWIfBfTzibznP1cQzICh6CABEBc9eyhZr/eEGCVEcyXi/X5XfUr
+YAbZTYjcjislKjI+2R922HPdAtQabWkWY9S8O81XlRNmTr0qhl+IArc3IWUwBBC+
+3oryP+raeGBWDEEj7ZTYAAAAAAAAAAAAAA==
+----------BOUNDARY
diff --git a/comm/mail/test/browser/smime/data/nested-sigs.eml b/comm/mail/test/browser/smime/data/nested-sigs.eml
new file mode 100644
index 0000000000..3a84ae1f98
--- /dev/null
+++ b/comm/mail/test/browser/smime/data/nested-sigs.eml
@@ -0,0 +1,219 @@
+Date: Wed, 5 Jan 2022 08:54:26 +0100
+From: nobody1@example.com
+To: nobody2@example.com
+Subject: subject 1
+MIME-Version: 1.0
+Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-1;
+ boundary="----=_Part_159674795_1647108947.1641369266420"
+
+------=_Part_159674795_1647108947.1641369266420
+Content-Type: multipart/mixed;
+ boundary="----=_Part_159674792_1533625984.1641369266416"
+
+------=_Part_159674792_1533625984.1641369266416
+Content-Type: text/plain; charset="ISO-8859-1"
+Content-Transfer-Encoding: quoted-printable
+
+level 1
+
+------=_Part_159674792_1533625984.1641369266416
+Content-Type: message/rfc822; name=nested2.eml
+Content-Disposition: attachment; filename="nested2.eml"
+
+Date: Wed, 5 Jan 2022 08:54:23 +0100
+From: nobody3@example.com
+To: nobody1@example.com
+Subject: subject 2
+MIME-Version: 1.0
+Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-1;
+ boundary="----=_Part_71865141_195979751.1641369263077"
+
+------=_Part_71865141_195979751.1641369263077
+Content-Type: text/plain; charset="ISO-8859-1"
+Content-Transfer-Encoding: quoted-printable
+
+level 2
+
+------=_Part_71865141_195979751.1641369263077
+Content-Type: application/pkcs7-signature; name=smime.p7s; smime-type=signed-data
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; filename="smime.p7s"
+Content-Description: S/MIME Cryptographic Signature
+
+MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgMFADCABgkqhkiG9w0BBwEAAKCC
+DMgwggY9MIIEJaADAgECAgMU4igwDQYJKoZIhvcNAQENBQAweTEQMA4GA1UEChMHUm9vdCBD
+QTEeMBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0IFNp
+Z25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2VydC5vcmcwHhcN
+MjEwNDE5MTIxODMwWhcNMzEwNDE3MTIxODMwWjBUMRQwEgYDVQQKEwtDQWNlcnQgSW5jLjEe
+MBwGA1UECxMVaHR0cDovL3d3dy5DQWNlcnQub3JnMRwwGgYDVQQDExNDQWNlcnQgQ2xhc3Mg
+MyBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq0k1EUh80iZ+U5TPQ6nd
+KNdCKovzh3gZWHwPntqJfeH763KQDXShlmSrn6AkmXPa4lV2xxd79QSsRrjDvn9kjRBsJPNh
+nMDykPpR5vVpAWPDD1biSkLP4kSMJSioxXkJfUa5ivPp8zQpCEXkHJ/LlAQcgagUs5hlxEPs
+ToKNCdG9qluNktDs3pDFfwrC4+vmMVpedD6XM1nowwM9YDO/99FvR8TN7mKDUm4uCJqk2RUY
+kaaFkkewrkjrbbch7IUaaHI1q//wEF3A9JSnatU7kn5MkAV+k8Esi6SOYnQVcW4LcQPqrxU4
+mtTSBXJvjPkr61pyJfk5RuNyGz4Ew2QnIhAqik9YpwOtvrQuE+1dqkjX1X3UKntc+kYEUOTM
+DkJbjO3b8s/8lpPg2xE2VGI0OI8MYJs7l1Y4rfPSW4ugW+pOlrh819WghnBA05Ept6I8rfWM
+u88akorkNHvA2Gxf6QrCw6cgmlrfLF1SXLpH1ZvvJChwOCAv1X8pwLJBA2iSzOCczJdLRe86
+EAqrcDqYlXCtNbHqhSukHIAhMamuYHqAJkgAuAHAk2NVIpE8Vuev2zol848xVOomi4FZ+aHR
+UxHFe50D9nQR4G2xLD8shpGZcZqmd4s0YNEUtCysna+MENOfxGr4bxP8c1n3ZkJ0Horj+NzS
+b5icy0eYlUAF++kCAwEAAaOB8jCB7zAPBgNVHRMBAf8EBTADAQH/MGEGCCsGAQUFBwEBBFUw
+UzAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuQ0FjZXJ0Lm9yZy8wLAYIKwYBBQUHMAKGIGh0
+dHA6Ly93d3cuQ0FjZXJ0Lm9yZy9jbGFzczMuY3J0MEUGA1UdIAQ+MDwwOgYLKwYBBAGBkEoC
+AwEwKzApBggrBgEFBQcCARYdaHR0cDovL3d3dy5DQWNlcnQub3JnL2Nwcy5waHAwMgYDVR0f
+BCswKTAnoCWgI4YhaHR0cHM6Ly93d3cuY2FjZXJ0Lm9yZy9jbGFzczMuY3JsMA0GCSqGSIb3
+DQEBDQUAA4ICAQDGHq13XLQom9HIjUQSwL12dgSDIQf4EYJ/a8GVQsA4EbUlcI2LDMHVbP0c
+GgN8i/gGMaWd3kEp1IubhNc9wTeGcaMfW2EpHl13fbvwrbkVGRMU5jWA/6YZtDeFlEHoiMNf
+4LIGpLv4QKkdOazt6j+YBE35jPlHeXNS9ezfNJf7Pnfg3NGDiLqIc0dapqQVxA1wDQ+eSxMH
+fu8YPvmlAap5KbHnUvpTOsimf7bviaGxoU0vzmOFf6Uq6TvUwaPPChOFu5nXnGaQhOdm1FCz
+oeEtIiolaMMgsivEupgd6ErvXFjCtE2EVvdOuxZoQmySuG94zQ6z+++gs2SH8veIRDn8ueYs
+wJgk1EAsXsjuCx24Ak0muAoYxi8eS3Vujy4hc7zCA1XuqhTgmhoHUwvfRBSoZwWvRMjToUV2
+ArZ/DLmG6U/GbrC7FbS/6IC1djH+ZGTBClhtxVC2sgO/HUJPWTnRxDGL6MgqORwVYfDeQGgO
+cKizT+6R6A9PtpCeTYBsvhzucKS4BwQrDUECVIROR+qLlu12WGHnwyF7Bm/UtwvnNDKDzDWm
+5yVPfBdC/LxXA8afQn+YYPiAstn2sZwcNQQKiTEWhaT67kwJxWqYZuzIbirmy5LcI2yWwdRF
+8zxtArigu8dHwsIcQExFx0UGfztxK84rp4HWR0YosDzKZfFmnzCCBoMwggRroAMCAQICAwL0
+FjANBgkqhkiG9w0BAQ0FADBUMRQwEgYDVQQKEwtDQWNlcnQgSW5jLjEeMBwGA1UECxMVaHR0
+cDovL3d3dy5DQWNlcnQub3JnMRwwGgYDVQQDExNDQWNlcnQgQ2xhc3MgMyBSb290MB4XDTIx
+MTAxMzE1MDA0NloXDTIzMTAxMzE1MDA0NlowVzETMBEGA1UEAxMKS2FpIEVuZ2VydDEbMBkG
+CSqGSIb3DQEJARYMa2FpZUBrdWl4LmRlMSMwIQYJKoZIhvcNAQkBFhRrYWllQHRodW5kZXJi
+aXJkLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKlAMvhWj/JTL3TYeWHi
+ElUgH7QcaKr57viBf5Hz6GliZuC7IffSD7o9FPL5Her+Y6ny/7emyzY444619SgxA6GtT2cx
+bl7usPrV8JX+ZxFQLrODQ3xmlhO1PiQGVhLxnjh/hBQYLqyuibjy77vexAAmHYyvjcvwtOeV
+JxYQn0wRWf9fXOqa5jKot9U4/gT3UnSxLtFfU9d8wjAE3EV8Q6wto0e3xKy4GkP6DWBK/LJI
+tE+wEtvP6egFJgxByuNrCIwtL6qCi15JAFUpAegnxEl6Ejn+vBKSz3GtiSPA5TuCtJx6nYy4
+C8JSIMUxXsLxXeabtRgJyb/4AP14Vjfa/bdryUTgzoNjmQ4kJJv0ltG2weyhomsL4oZIoY/V
+x9cXnBrlr+C1CU3r4d7JeB3OlJFGxC0C5uq3+OfTozdrn26fVamlAo3CnjQ/qYqPZfmjtSD7
+bVl4gYxFOlAxN6a1QpDf3dNdmXGRalj04osQ+QcaNVeLhpyqFN4dslFWMboGDkDQhRysA2la
+BxS1f99syysaiI7xNIOs6QYExf/yCo1BKEXbpTkygFJLicIv/SC/o6/9OZhwoG2tM3eSKp8V
+0P9NcIh6KZN5wZ4KYebW1y2aA+Hh+qHAgVUhb8FZyRuKKpqfrpavaQB1SAHJK0xq4Xjd7KI8
+gUTR8Z0zIg/ZJ5kVAgMBAAGjggFZMIIBVTAMBgNVHRMBAf8EAjAAMFYGCWCGSAGG+EIBDQRJ
+FkdUbyBnZXQgeW91ciBvd24gY2VydGlmaWNhdGUgZm9yIEZSRUUgaGVhZCBvdmVyIHRvIGh0
+dHA6Ly93d3cuQ0FjZXJ0Lm9yZzAOBgNVHQ8BAf8EBAMCA6gwQAYDVR0lBDkwNwYIKwYBBQUH
+AwQGCCsGAQUFBwMCBgorBgEEAYI3CgMEBgorBgEEAYI3CgMDBglghkgBhvhCBAEwMgYIKwYB
+BQUHAQEEJjAkMCIGCCsGAQUFBzABhhZodHRwOi8vb2NzcC5jYWNlcnQub3JnMDgGA1UdHwQx
+MC8wLaAroCmGJ2h0dHA6Ly9jcmwuY2FjZXJ0Lm9yZy9jbGFzczMtcmV2b2tlLmNybDAtBgNV
+HREEJjAkgQxrYWllQGt1aXguZGWBFGthaWVAdGh1bmRlcmJpcmQubmV0MA0GCSqGSIb3DQEB
+DQUAA4ICAQBEyGOkkF49VDUeSiqRn7J2QVpNTJszE5yofqw3YjUEx1GQZ3pf2dWwSUnCR3bi
+Am2/OomaBvqWVpS0nDvbFrTCF8ewoRcvQRt9AwIZDYA0mPnl9wR66L4o2/1AkvmXUAXbOilr
+9m2rAZQ8Xu6iZtCUmXR/0QoXbiJYk7ljFVd3/cjOzXAo5K1GAWwQ8jh8s06RVkSXuWORX3Pa
+mkHfRcdokp9oi2nRHrLWUWwJUj8f2zURovXDVyUZYephYfMpac9y/ySnviuTmMYsndIZm9qP
+E7IiC22mTLMNaTGjfI13n+X7jC0Oh0K7WqqmmpCb+xYFfa0G3gmnQaPuS8CcecEvL06dNOBC
+aeMrWPbR7n0IwQSWxCueg8TvGryqhK0nX0X9DyX90uxtK+Zqb+mZGJ5ovv54FsWpYfZDMWIk
+UMQs8jiFxHQi+uFtDB1UYxaN5ML15VnFH2wRzq0aHzHevn8cq5SXo5tbbpOucEqMyASiYAdj
+51TumBPhTLGV81lLHQxSY8bBTrMfaljIieps1pP/pL5LgbrmB+ZuHpXxOeHQADzNuTipdYLr
+kDwjMfjIVQEiiNPxjmOH/oEIjYZMlvZdnZyz0RYTJfAMEHhpo/VkC0m6CWxUnpy4YE4/179s
+tsSviSN77rLqdPVhtgucPn7FP1vdWi+xkNxpG/KmaCnTVjGCBFswggRXAgEBMFswVDEUMBIG
+A1UEChMLQ0FjZXJ0IEluYy4xHjAcBgNVBAsTFWh0dHA6Ly93d3cuQ0FjZXJ0Lm9yZzEcMBoG
+A1UEAxMTQ0FjZXJ0IENsYXNzIDMgUm9vdAIDAvQWMA0GCWCGSAFlAwQCAwUAoIIB0TAYBgkq
+hkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0yMTExMDIwOTU2MDNaME8G
+CSqGSIb3DQEJBDFCBED769ZTTw8PcLnVMFuaVHnDUorGj9QTWjUfRdTnwvdskdCvXa4df9U0
+U5IcPrdX9QQy4COFNAX4X5070FSXRTx4MGoGCSsGAQQBgjcQBDFdMFswVDEUMBIGA1UEChML
+Q0FjZXJ0IEluYy4xHjAcBgNVBAsTFWh0dHA6Ly93d3cuQ0FjZXJ0Lm9yZzEcMBoGA1UEAxMT
+Q0FjZXJ0IENsYXNzIDMgUm9vdAIDAvQWMGwGCSqGSIb3DQEJDzFfMF0wCwYJYIZIAWUDBAEq
+MAsGCWCGSAFlAwQBAjAKBggqhkiG9w0DBzAOBggqhkiG9w0DAgICAIAwDQYIKoZIhvcNAwIC
+AUAwBwYFKw4DAgcwDQYIKoZIhvcNAwICASgwbAYLKoZIhvcNAQkQAgsxXaBbMFQxFDASBgNV
+BAoTC0NBY2VydCBJbmMuMR4wHAYDVQQLExVodHRwOi8vd3d3LkNBY2VydC5vcmcxHDAaBgNV
+BAMTE0NBY2VydCBDbGFzcyAzIFJvb3QCAwL0FjANBgkqhkiG9w0BAQEFAASCAgCNhxk8PfAe
+qCu70oJfAvQ09c1SYERIaRXqYLpHT1gC0L0M/8mn+nlhvHh+suNI6yvsqafvyBRwZKp5e2K3
+dQT+irZrn0CWiwfJarGsqNoilmNbXRieRgXbSPCU6O+BTDXJmwAc9EvPO0PKeJnQH0VhVSw2
+s8IpqdHnmlf8XZ8BBVEZLUstuzzVBXtVDlvzwneKULrn07yEfLuHkVbG1addtssOhOabjy2t
+/RK+jAi00bO9KyhBedXvtbd1ugWowRSFZHqnKHccvIpsHF1P1PCPnnDuQQftlPzxoWK11gCz
+XVpJyJyuI/C007QuJFBPVaJL3kTR2tR/dnyOq8iJ8iAOQ227/9i0Xt2IYF5fBlwrWsm7VIg7
+XJb/EHAqaXNSfbo66gWBRWi9YF/mx59CGQLbS6FIlEca1T25HlXipoN8nH7SaHgHpM/rziuY
+5kkNIWB8UXZYe9XpPKTBat3dUVpKlyHVTKYq1UqyoUiFSMigicFvuz3uEBJHUMMuEuaJSUB9
+rraWm+++XlHMVfgwyDw77jws6+cI0CfOrsEtGPzLCiStnlSlKfywg5dzBSn26NXxN26Z3P/e
+PiB8aayx0hANyVd+J4TWcbd5WckAOj2kVZk9bNUFumrxMCOpoai/JOFdXU5P1yaxaTrJJICf
+nynNuW256mKMxVwYWImgCmQjngAAAAAAAA==
+------=_Part_71865141_195979751.1641369263077--
+
+------=_Part_159674792_1533625984.1641369266416--
+
+------=_Part_159674795_1647108947.1641369266420
+Content-Type: application/pkcs7-signature; name=smime.p7s; smime-type=signed-data
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; filename="smime.p7s"
+Content-Description: S/MIME Cryptographic Signature
+
+MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgMFADCABgkqhkiG9w0BBwEAAKCC
+DMgwggY9MIIEJaADAgECAgMU4igwDQYJKoZIhvcNAQENBQAweTEQMA4GA1UEChMHUm9vdCBD
+QTEeMBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0IFNp
+Z25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2VydC5vcmcwHhcN
+MjEwNDE5MTIxODMwWhcNMzEwNDE3MTIxODMwWjBUMRQwEgYDVQQKEwtDQWNlcnQgSW5jLjEe
+MBwGA1UECxMVaHR0cDovL3d3dy5DQWNlcnQub3JnMRwwGgYDVQQDExNDQWNlcnQgQ2xhc3Mg
+MyBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq0k1EUh80iZ+U5TPQ6nd
+KNdCKovzh3gZWHwPntqJfeH763KQDXShlmSrn6AkmXPa4lV2xxd79QSsRrjDvn9kjRBsJPNh
+nMDykPpR5vVpAWPDD1biSkLP4kSMJSioxXkJfUa5ivPp8zQpCEXkHJ/LlAQcgagUs5hlxEPs
+ToKNCdG9qluNktDs3pDFfwrC4+vmMVpedD6XM1nowwM9YDO/99FvR8TN7mKDUm4uCJqk2RUY
+kaaFkkewrkjrbbch7IUaaHI1q//wEF3A9JSnatU7kn5MkAV+k8Esi6SOYnQVcW4LcQPqrxU4
+mtTSBXJvjPkr61pyJfk5RuNyGz4Ew2QnIhAqik9YpwOtvrQuE+1dqkjX1X3UKntc+kYEUOTM
+DkJbjO3b8s/8lpPg2xE2VGI0OI8MYJs7l1Y4rfPSW4ugW+pOlrh819WghnBA05Ept6I8rfWM
+u88akorkNHvA2Gxf6QrCw6cgmlrfLF1SXLpH1ZvvJChwOCAv1X8pwLJBA2iSzOCczJdLRe86
+EAqrcDqYlXCtNbHqhSukHIAhMamuYHqAJkgAuAHAk2NVIpE8Vuev2zol848xVOomi4FZ+aHR
+UxHFe50D9nQR4G2xLD8shpGZcZqmd4s0YNEUtCysna+MENOfxGr4bxP8c1n3ZkJ0Horj+NzS
+b5icy0eYlUAF++kCAwEAAaOB8jCB7zAPBgNVHRMBAf8EBTADAQH/MGEGCCsGAQUFBwEBBFUw
+UzAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuQ0FjZXJ0Lm9yZy8wLAYIKwYBBQUHMAKGIGh0
+dHA6Ly93d3cuQ0FjZXJ0Lm9yZy9jbGFzczMuY3J0MEUGA1UdIAQ+MDwwOgYLKwYBBAGBkEoC
+AwEwKzApBggrBgEFBQcCARYdaHR0cDovL3d3dy5DQWNlcnQub3JnL2Nwcy5waHAwMgYDVR0f
+BCswKTAnoCWgI4YhaHR0cHM6Ly93d3cuY2FjZXJ0Lm9yZy9jbGFzczMuY3JsMA0GCSqGSIb3
+DQEBDQUAA4ICAQDGHq13XLQom9HIjUQSwL12dgSDIQf4EYJ/a8GVQsA4EbUlcI2LDMHVbP0c
+GgN8i/gGMaWd3kEp1IubhNc9wTeGcaMfW2EpHl13fbvwrbkVGRMU5jWA/6YZtDeFlEHoiMNf
+4LIGpLv4QKkdOazt6j+YBE35jPlHeXNS9ezfNJf7Pnfg3NGDiLqIc0dapqQVxA1wDQ+eSxMH
+fu8YPvmlAap5KbHnUvpTOsimf7bviaGxoU0vzmOFf6Uq6TvUwaPPChOFu5nXnGaQhOdm1FCz
+oeEtIiolaMMgsivEupgd6ErvXFjCtE2EVvdOuxZoQmySuG94zQ6z+++gs2SH8veIRDn8ueYs
+wJgk1EAsXsjuCx24Ak0muAoYxi8eS3Vujy4hc7zCA1XuqhTgmhoHUwvfRBSoZwWvRMjToUV2
+ArZ/DLmG6U/GbrC7FbS/6IC1djH+ZGTBClhtxVC2sgO/HUJPWTnRxDGL6MgqORwVYfDeQGgO
+cKizT+6R6A9PtpCeTYBsvhzucKS4BwQrDUECVIROR+qLlu12WGHnwyF7Bm/UtwvnNDKDzDWm
+5yVPfBdC/LxXA8afQn+YYPiAstn2sZwcNQQKiTEWhaT67kwJxWqYZuzIbirmy5LcI2yWwdRF
+8zxtArigu8dHwsIcQExFx0UGfztxK84rp4HWR0YosDzKZfFmnzCCBoMwggRroAMCAQICAwL0
+FjANBgkqhkiG9w0BAQ0FADBUMRQwEgYDVQQKEwtDQWNlcnQgSW5jLjEeMBwGA1UECxMVaHR0
+cDovL3d3dy5DQWNlcnQub3JnMRwwGgYDVQQDExNDQWNlcnQgQ2xhc3MgMyBSb290MB4XDTIx
+MTAxMzE1MDA0NloXDTIzMTAxMzE1MDA0NlowVzETMBEGA1UEAxMKS2FpIEVuZ2VydDEbMBkG
+CSqGSIb3DQEJARYMa2FpZUBrdWl4LmRlMSMwIQYJKoZIhvcNAQkBFhRrYWllQHRodW5kZXJi
+aXJkLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKlAMvhWj/JTL3TYeWHi
+ElUgH7QcaKr57viBf5Hz6GliZuC7IffSD7o9FPL5Her+Y6ny/7emyzY444619SgxA6GtT2cx
+bl7usPrV8JX+ZxFQLrODQ3xmlhO1PiQGVhLxnjh/hBQYLqyuibjy77vexAAmHYyvjcvwtOeV
+JxYQn0wRWf9fXOqa5jKot9U4/gT3UnSxLtFfU9d8wjAE3EV8Q6wto0e3xKy4GkP6DWBK/LJI
+tE+wEtvP6egFJgxByuNrCIwtL6qCi15JAFUpAegnxEl6Ejn+vBKSz3GtiSPA5TuCtJx6nYy4
+C8JSIMUxXsLxXeabtRgJyb/4AP14Vjfa/bdryUTgzoNjmQ4kJJv0ltG2weyhomsL4oZIoY/V
+x9cXnBrlr+C1CU3r4d7JeB3OlJFGxC0C5uq3+OfTozdrn26fVamlAo3CnjQ/qYqPZfmjtSD7
+bVl4gYxFOlAxN6a1QpDf3dNdmXGRalj04osQ+QcaNVeLhpyqFN4dslFWMboGDkDQhRysA2la
+BxS1f99syysaiI7xNIOs6QYExf/yCo1BKEXbpTkygFJLicIv/SC/o6/9OZhwoG2tM3eSKp8V
+0P9NcIh6KZN5wZ4KYebW1y2aA+Hh+qHAgVUhb8FZyRuKKpqfrpavaQB1SAHJK0xq4Xjd7KI8
+gUTR8Z0zIg/ZJ5kVAgMBAAGjggFZMIIBVTAMBgNVHRMBAf8EAjAAMFYGCWCGSAGG+EIBDQRJ
+FkdUbyBnZXQgeW91ciBvd24gY2VydGlmaWNhdGUgZm9yIEZSRUUgaGVhZCBvdmVyIHRvIGh0
+dHA6Ly93d3cuQ0FjZXJ0Lm9yZzAOBgNVHQ8BAf8EBAMCA6gwQAYDVR0lBDkwNwYIKwYBBQUH
+AwQGCCsGAQUFBwMCBgorBgEEAYI3CgMEBgorBgEEAYI3CgMDBglghkgBhvhCBAEwMgYIKwYB
+BQUHAQEEJjAkMCIGCCsGAQUFBzABhhZodHRwOi8vb2NzcC5jYWNlcnQub3JnMDgGA1UdHwQx
+MC8wLaAroCmGJ2h0dHA6Ly9jcmwuY2FjZXJ0Lm9yZy9jbGFzczMtcmV2b2tlLmNybDAtBgNV
+HREEJjAkgQxrYWllQGt1aXguZGWBFGthaWVAdGh1bmRlcmJpcmQubmV0MA0GCSqGSIb3DQEB
+DQUAA4ICAQBEyGOkkF49VDUeSiqRn7J2QVpNTJszE5yofqw3YjUEx1GQZ3pf2dWwSUnCR3bi
+Am2/OomaBvqWVpS0nDvbFrTCF8ewoRcvQRt9AwIZDYA0mPnl9wR66L4o2/1AkvmXUAXbOilr
+9m2rAZQ8Xu6iZtCUmXR/0QoXbiJYk7ljFVd3/cjOzXAo5K1GAWwQ8jh8s06RVkSXuWORX3Pa
+mkHfRcdokp9oi2nRHrLWUWwJUj8f2zURovXDVyUZYephYfMpac9y/ySnviuTmMYsndIZm9qP
+E7IiC22mTLMNaTGjfI13n+X7jC0Oh0K7WqqmmpCb+xYFfa0G3gmnQaPuS8CcecEvL06dNOBC
+aeMrWPbR7n0IwQSWxCueg8TvGryqhK0nX0X9DyX90uxtK+Zqb+mZGJ5ovv54FsWpYfZDMWIk
+UMQs8jiFxHQi+uFtDB1UYxaN5ML15VnFH2wRzq0aHzHevn8cq5SXo5tbbpOucEqMyASiYAdj
+51TumBPhTLGV81lLHQxSY8bBTrMfaljIieps1pP/pL5LgbrmB+ZuHpXxOeHQADzNuTipdYLr
+kDwjMfjIVQEiiNPxjmOH/oEIjYZMlvZdnZyz0RYTJfAMEHhpo/VkC0m6CWxUnpy4YE4/179s
+tsSviSN77rLqdPVhtgucPn7FP1vdWi+xkNxpG/KmaCnTVjGCBFswggRXAgEBMFswVDEUMBIG
+A1UEChMLQ0FjZXJ0IEluYy4xHjAcBgNVBAsTFWh0dHA6Ly93d3cuQ0FjZXJ0Lm9yZzEcMBoG
+A1UEAxMTQ0FjZXJ0IENsYXNzIDMgUm9vdAIDAvQWMA0GCWCGSAFlAwQCAwUAoIIB0TAYBgkq
+hkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0yMTExMDIwOTU2MDNaME8G
+CSqGSIb3DQEJBDFCBED769ZTTw8PcLnVMFuaVHnDUorGj9QTWjUfRdTnwvdskdCvXa4df9U0
+U5IcPrdX9QQy4COFNAX4X5070FSXRTx4MGoGCSsGAQQBgjcQBDFdMFswVDEUMBIGA1UEChML
+Q0FjZXJ0IEluYy4xHjAcBgNVBAsTFWh0dHA6Ly93d3cuQ0FjZXJ0Lm9yZzEcMBoGA1UEAxMT
+Q0FjZXJ0IENsYXNzIDMgUm9vdAIDAvQWMGwGCSqGSIb3DQEJDzFfMF0wCwYJYIZIAWUDBAEq
+MAsGCWCGSAFlAwQBAjAKBggqhkiG9w0DBzAOBggqhkiG9w0DAgICAIAwDQYIKoZIhvcNAwIC
+AUAwBwYFKw4DAgcwDQYIKoZIhvcNAwICASgwbAYLKoZIhvcNAQkQAgsxXaBbMFQxFDASBgNV
+BAoTC0NBY2VydCBJbmMuMR4wHAYDVQQLExVodHRwOi8vd3d3LkNBY2VydC5vcmcxHDAaBgNV
+BAMTE0NBY2VydCBDbGFzcyAzIFJvb3QCAwL0FjANBgkqhkiG9w0BAQEFAASCAgCNhxk8PfAe
+qCu70oJfAvQ09c1SYERIaRXqYLpHT1gC0L0M/8mn+nlhvHh+suNI6yvsqafvyBRwZKp5e2K3
+dQT+irZrn0CWiwfJarGsqNoilmNbXRieRgXbSPCU6O+BTDXJmwAc9EvPO0PKeJnQH0VhVSw2
+s8IpqdHnmlf8XZ8BBVEZLUstuzzVBXtVDlvzwneKULrn07yEfLuHkVbG1addtssOhOabjy2t
+/RK+jAi00bO9KyhBedXvtbd1ugWowRSFZHqnKHccvIpsHF1P1PCPnnDuQQftlPzxoWK11gCz
+XVpJyJyuI/C007QuJFBPVaJL3kTR2tR/dnyOq8iJ8iAOQ227/9i0Xt2IYF5fBlwrWsm7VIg7
+XJb/EHAqaXNSfbo66gWBRWi9YF/mx59CGQLbS6FIlEca1T25HlXipoN8nH7SaHgHpM/rziuY
+5kkNIWB8UXZYe9XpPKTBat3dUVpKlyHVTKYq1UqyoUiFSMigicFvuz3uEBJHUMMuEuaJSUB9
+rraWm+++XlHMVfgwyDw77jws6+cI0CfOrsEtGPzLCiStnlSlKfywg5dzBSn26NXxN26Z3P/e
+PiB8aayx0hANyVd+J4TWcbd5WckAOj2kVZk9bNUFumrxMCOpoai/JOFdXU5P1yaxaTrJJICf
+nynNuW256mKMxVwYWImgCmQjngAAAAAAAA==
+------=_Part_159674795_1647108947.1641369266420--