Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[13.0][ADD] ebill_paynet v2 #585

Merged
merged 34 commits into from
Sep 27, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
ab73d7b
[13.0][ADD] ebill_paynet module
TDu May 24, 2019
ca5f50d
Paynet: add interfacing with account_invoice_export
TDu Aug 17, 2020
6ab1ab8
[13.0][IMP] Split jobs
TDu Aug 19, 2020
e261509
[13.0][IMP] ebill_paynet
TDu Aug 25, 2020
b157769
[13.0][IMP] ebiil_paynet add qr
TDu Sep 8, 2020
9ca5a64
[13.0][IMP] ebiil_paynet B2B message
TDu Sep 11, 2020
93c618e
[13.0][IMP] ebiil_paynet
TDu Sep 11, 2020
b1c9ef5
[13.0][IMP] ebiil_paynet B2B message fix tax on line
TDu Sep 11, 2020
bf7bd1e
[13.0][FIX] ebiil_paynet - ESR bank account
TDu Sep 16, 2020
041e68b
[13.0][IMP] ebill_paynet - Pdf sent
TDu Sep 16, 2020
1d6bc65
Fix url computed field on paynet service
TDu Nov 2, 2020
dbd9612
Fix paynet message generation
TDu Nov 9, 2020
0dcb692
Paynet fix the delivery address and party name
TDu Nov 12, 2020
0361875
Paynet fix fault handling on DWS communication
TDu Nov 16, 2020
69cd1cc
Paynet fix invoicing line generated in XML
TDu Nov 23, 2020
2daf164
Paynet switch Odoo order ref with customer order ref
TDu Nov 23, 2020
ee53222
Paynet improve invoice currency and fix data length
TDu Dec 3, 2020
98221cc
Fix the due date in the Paynet message
TDu Dec 7, 2020
8af9e60
Refactor ebill_paynet to allow for specific discount module
TDu Dec 8, 2020
7807459
Fix XML node content length with truncate
TDu Dec 9, 2020
7946f44
Fix paynet communication with prod service
TDu Dec 14, 2020
664e17c
Fix module dependencies
TDu Jan 6, 2021
f39538a
[FIX] remove customer fields (#3)
i-vyshnevska Feb 3, 2021
f96d80e
[13.0][ADD] server_env_ebill_paynet
TDu Aug 17, 2020
ba17373
ebill_paynet: Change import statement for zeep
TDu Feb 8, 2021
8471c5d
ebill_paynet: Fix travis for pdf generated
TDu Feb 16, 2021
c32cea2
ebill_paynet: Add hook for other reference on invoice
TDu Feb 19, 2021
83820fc
Fix ISR terminology and add translation
TDu Mar 15, 2021
4da44b1
Add delivery note in XML message Paynet
TDu Mar 17, 2021
5c4bd3d
Fix transmit method data
TDu Mar 25, 2021
9439060
Paynet add extended amount
TDu Jul 28, 2021
44baba8
ebill_paynet: make amount type 66 tax excluded (#5)
mmequignon Sep 2, 2021
a1c9ecc
Fix linting and add info in roadmap
TDu Sep 23, 2021
5d8b2dc
Paynet fix python requirements
TDu Sep 23, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ repos:
- "[email protected]"
- "@prettier/[email protected]"
files: \.(css|htm|html|js|json|jsx|less|md|scss|toml|ts|xml|yaml|yml)$
# For ebill_paynet don't format the message template files
exclude: /messages/.*\.xml$|/components/wsdl/.*\.xml$|/tests/examples/.*\.xml$
- repo: https://github.com/pre-commit/mirrors-eslint
rev: v6.8.0
hooks:
Expand Down
2 changes: 2 additions & 0 deletions ebill_paynet/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import components
from . import models
34 changes: 34 additions & 0 deletions ebill_paynet/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Copyright 2019-2020 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

{
"name": "eBill Paynet",
"summary": """
Paynet platform bridge implementation""",
"version": "13.0.1.0.0",
"license": "AGPL-3",
"author": "Camptocamp SA,Odoo Community Association (OCA)",
"website": "https://github.com/OCA/l10n-switzerland",
"depends": [
"account",
"account_invoice_export",
"base_ebill_payment_contract",
"l10n_ch_base_bank",
"l10n_ch_qriban",
"queue_job",
"sale",
"delivery",
simahawk marked this conversation as resolved.
Show resolved Hide resolved
],
"external_dependencies": {"python": ["zeep"]},
"data": [
"data/transmit.method.xml",
"data/ir_cron.xml",
"data/mail_activity_type.xml",
"security/ir.model.access.csv",
"views/ebill_payment_contract.xml",
"views/message_template.xml",
"views/paynet_service.xml",
"views/paynet_invoice_message.xml",
],
"demo": [],
}
1 change: 1 addition & 0 deletions ebill_paynet/components/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import api
58 changes: 58 additions & 0 deletions ebill_paynet/components/api.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# Copyright 2019 Camptocamp SA

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why components if there's no component here?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)

import logging
import os

import requests
import zeep
from lxml import html

from odoo.modules.module import get_resource_path

_logger = logging.getLogger(__name__)

WSDL_DOC = os.path.join(os.path.dirname(__file__), "wsdl", "DWSPayNet.wsdl")
SSL_PROD_CERTIFICATE = get_resource_path(
"ebill_paynet", "certificats", "prod_services_chain.pem"
)
SSL_TEST_CERTIFICATE = get_resource_path(
"ebill_paynet", "certificats", "test_services_chain.pem"
)


class PayNetDWS:
"""PayNet DWS web services."""

def __init__(self, url, test_service):
settings = zeep.Settings(xml_huge_tree=True)
session = requests.Session()
if test_service:
session.verify = SSL_TEST_CERTIFICATE
else:
session.verify = SSL_PROD_CERTIFICATE
transport = zeep.transports.Transport(session=session)
self.client = zeep.Client(WSDL_DOC, transport=transport, settings=settings)
if url:
self.service = self.client.create_service(
"{http://www.sap.com/DWS}DWSBinding", url
)
else:
self.service = self.client.service

@staticmethod
def authorization(userid, password):
"""Generate Authorization node."""
return {"UserName": userid, "Password": password}

@staticmethod
def handle_fault(fault):
msg = ("{}\n" "code: {} -> {}\n" "actor: {}\n" "detail: {}\n").format(
fault.message.upper(),
fault.code,
fault.subcodes,
fault.actor,
html.tostring(fault.detail),
)
_logger.info("Paynet DWS fault : {}".format(msg))
return msg
108 changes: 108 additions & 0 deletions ebill_paynet/components/certificats/prod_services_chain.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
-----BEGIN CERTIFICATE-----
MIIGaTCCBVGgAwIBAgIUWba4DmLQ0dWzDjnsaT2OQ8rbIGwwDQYJKoZIhvcNAQEL
BQAwVDELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEuMCwGA1UE
AxMlU3dpc3NTaWduIFBlcnNvbmFsIEdvbGQgQ0EgMjAxNCAtIEcyMjAeFw0xNzEx
MjAwOTU5NDRaFw0yMjExMjAwOTU5NDRaMIGYMQswCQYDVQQGEwJDSDELMAkGA1UE
CBMCWkgxFjAUBgNVBAoTDVNJWCBQYXluZXQgQUcxGjAYBgNVBAsTEVBheW5ldCBw
cm9kdWN0aW9uMSYwJAYJKoZIhvcNAQkBFhdzdXBwb3J0Y2VudGVyQHBheW5ldC5j
aDEgMB4GA1UEAxMXcHNldWRvOiBTeXN0ZW0tU2VydmljZXMwggEiMA0GCSqGSIb3
DQEBAQUAA4IBDwAwggEKAoIBAQCZKGdFfKvzyIIjIHAa0Cke7K7fmHeUicyDTcUD
uHkzKgug1gXIBVcp8BUxlWa4i2z4CeR+ovGL6J/qlCySAOAF/gTd9toIfsBtZvpw
IuBxCSoik/ctTwFTw8DKBWGEwgWjPDm2mZBqHpHMsr1q2IXueLT0vZnTMvfsnR1d
EqD1lsX5q8expQdfhjoo51hRAh9ZUGvCfIuQUJBpVb2NkGPHJVD36wzQHANyJUxL
sM4GvNCLYiJn9HtAAppxoOaEgiwA36iQuOI5j2g22RhCIdUATfSGhmNWsL8DBc+0
vEH+NXsa1j+teQ7jOjA4b4e6PSFZaV3p/J3OCS8CN4nYtMgBAgMBQhWjggLsMIIC
6DAiBgNVHREEGzAZgRdzdXBwb3J0Y2VudGVyQHBheW5ldC5jaDAOBgNVHQ8BAf8E
BAMCA/gwNQYDVR0lBC4wLAYIKwYBBQUHAwIGCCsGAQUFBwMEBgorBgEEAYI3CgME
BgorBgEEAYI3FAICMB0GA1UdDgQWBBSpA61TR1vJwbygReWdyy696hwRKjAfBgNV
HSMEGDAWgBTaMvlJ+FHMmHFmDNnOttuSPwlL7zCB/wYDVR0fBIH3MIH0MEegRaBD
hkFodHRwOi8vY3JsLnN3aXNzc2lnbi5uZXQvREEzMkY5NDlGODUxQ0M5ODcxNjYw
Q0Q5Q0VCNkRCOTIzRjA5NEJFRjCBqKCBpaCBooaBn2xkYXA6Ly9kaXJlY3Rvcnku
c3dpc3NzaWduLm5ldC9DTj1EQTMyRjk0OUY4NTFDQzk4NzE2NjBDRDlDRUI2REI5
MjNGMDk0QkVGJTJDTz1Td2lzc1NpZ24lMkNDPUNIP2NlcnRpZmljYXRlUmV2b2Nh
dGlvbkxpc3Q/YmFzZT9vYmplY3RDbGFzcz1jUkxEaXN0cmlidXRpb25Qb2ludDBf
BgNVHSAEWDBWMFQGCWCFdAFZAQIBBjBHMEUGCCsGAQUFBwIBFjlodHRwOi8vcmVw
b3NpdG9yeS5zd2lzc3NpZ24uY29tL1N3aXNzU2lnbi1Hb2xkLUNQLUNQUy5wZGYw
gdcGCCsGAQUFBwEBBIHKMIHHMGQGCCsGAQUFBzAChlhodHRwOi8vc3dpc3NzaWdu
Lm5ldC9jZ2ktYmluL2F1dGhvcml0eS9kb3dubG9hZC9EQTMyRjk0OUY4NTFDQzk4
NzE2NjBDRDlDRUI2REI5MjNGMDk0QkVGMF8GCCsGAQUFBzABhlNodHRwOi8vZ29s
ZC1wZXJzb25hbC1nMi5vY3NwLnN3aXNzc2lnbi5uZXQvREEzMkY5NDlGODUxQ0M5
ODcxNjYwQ0Q5Q0VCNkRCOTIzRjA5NEJFRjANBgkqhkiG9w0BAQsFAAOCAQEAYHiL
SurldkBD3sra6oQ0LygKueuJobgrrJmkAnvfCZbjbgd12IJs7ayDG1Eu7hhFWh+8
7JkbcfwZMgYkpfN7ogHZYm9Sl3nf3hfCXqnxji2Hzeb7GZFrmQ/BOBdrCIEaTZwf
MjHPVOQ0XhNVGb8oFE4xSeK7yhLZlue33xNEGEKYlC8hwyCj690OhCJVzr5l7obf
0821KA2L/pXb0HmuXQkev+ECF9D1T/nsswIj2IJFlxDvnTpvYiUxBh3Mj8GnPHrS
R+vsIlcRYa1OGm10Nfwe7EnpTf+pAm5iKepxhcReFKzXQA12xkEquNgIr8sa76+y
Eg95jNEZxB9wC4bIJQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIGuDCCBKCgAwIBAgIPGReV3CJ0GxId21RMXMvcMA0GCSqGSIb3DQEBCwUAMEUx
CzAJBgNVBAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3
aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcNMTQwOTE5MTQxMDI1WhcNMjkwOTE1MTQx
MDI1WjBUMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMS4wLAYD
VQQDEyVTd2lzc1NpZ24gUGVyc29uYWwgR29sZCBDQSAyMDE0IC0gRzIyMIIBIjAN
BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnrf0T2JFsx4NPb+TUBInPgv9nUyF
9dMJh7sQL66HybrB2devqNc1+Gq+fFT4tfBa9hbI+xqRRqCO0LoQOJ3v3XMlOzQ3
zTL+b3wgDvs/d8tZ7LWGOSYF480/rL1aaBIQFlrE62GDQvcmkH/C8QxsSS+T+ga2
FQhC/Br/btveNcP6cz87WyshF8IU/7sOKYqh3o5mbxI641R1u3+zaiGq8A9620pS
oW3b9P1Mf5t4z51ifqb+/QsYtDt60dw+mVES6sk8cl9VRLejcuiXFyVJaj7YyITi
or33buzheHvzZdxaQSgeq0mIrvmXqtplZoqXQ12irR7xhuf/w9UtFBbqCwIDAQAB
o4IClDCCApAwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYD
VR0OBBYEFNoy+Un4UcyYcWYM2c6225I/CUvvMB8GA1UdIwQYMBaAFFsle5akZVF+
uDnzwHhmXug65/DuMIH/BgNVHR8EgfcwgfQwR6BFoEOGQWh0dHA6Ly9jcmwuc3dp
c3NzaWduLm5ldC81QjI1N0I5NkE0NjU1MTdFQjgzOUYzQzA3ODY2NUVFODNBRTdG
MEVFMIGooIGloIGihoGfbGRhcDovL2RpcmVjdG9yeS5zd2lzc3NpZ24ubmV0L0NO
PTVCMjU3Qjk2QTQ2NTUxN0VCODM5RjNDMDc4NjY1RUU4M0FFN0YwRUUlMkNPPVN3
aXNzU2lnbiUyQ0M9Q0g/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdD9iYXNlP29i
amVjdENsYXNzPWNSTERpc3RyaWJ1dGlvblBvaW50MF8GA1UdIARYMFYwVAYJYIV0
AVkBAgEGMEcwRQYIKwYBBQUHAgEWOWh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2ln
bi5jb20vU3dpc3NTaWduLUdvbGQtQ1AtQ1BTLnBkZjCBxgYIKwYBBQUHAQEEgbkw
gbYwZAYIKwYBBQUHMAKGWGh0dHA6Ly9zd2lzc3NpZ24ubmV0L2NnaS1iaW4vYXV0
aG9yaXR5L2Rvd25sb2FkLzVCMjU3Qjk2QTQ2NTUxN0VCODM5RjNDMDc4NjY1RUU4
M0FFN0YwRUUwTgYIKwYBBQUHMAGGQmh0dHA6Ly9vY3NwLnN3aXNzc2lnbi5uZXQv
NUIyNTdCOTZBNDY1NTE3RUI4MzlGM0MwNzg2NjVFRTgzQUU3RjBFRTANBgkqhkiG
9w0BAQsFAAOCAgEArevbqCOPH6va0x4oEb4UviyXJzIokl5MjRADlGMDFXaKm52m
U+IZlJ9PjcqBiEXhjjD1oR8uV5aVRWXH+auI6JgQZz5L+u2a309bDu3bcineP45v
Z+nAuoDvulmx2nqjloCOturaks727w/nHCoz723eYH46fg//q/a5QnOoBe+WIiZW
T71TcycX4hiVcPwVqB53tL9IM2qe2balnCpZKorZWVHQXYWSO5MIBaw/iMOwCCpf
lDRU75TruHPjfE4Bu4U9Nm3NBt3zcc5ykcQ8ZbJzkWLnSi2LY8r71Ulc3jxqyWOZ
QbgS14x/BzVQj4Rk9+X8KovGpooAFVIBR/bdU/z2IdZlENgoPNpJokuEH5OS6UZS
yNmhhXjI2QGXn91G+QV4++kreVz6heVOhDPgOoOfRXLYG9O/9wqPMthmUQgcTrym
p57bPpM0zIYpHxcKfxhoYprQdO3LuU1F2xkZE2vFLWVB9ugHzXd1ADIKrrGgJXPf
MluXT9wK8BzTcI5cOqhESt4Awq5q9fmiW3OUAROL0Ca0Z/sRQcvvJ/ewlZvLdsym
cfjV6JtN7/IBgIJ4D/Js4DRWCwAv1jhBiEGsRAlhiJmep//U1HEaT9oredt9PYS1
iKbkcMuDEtPuYXrQ+8OQmMEwMbOFboZMMTOVNOenLH+EiG6BUnowTwqqjtA=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln
biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF
MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT
d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8
76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+
bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c
6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE
emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd
MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt
MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y
MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y
FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi
aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM
gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB
qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7
lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn
8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6
45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO
UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5
O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC
bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv
GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a
77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC
hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3
92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp
Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w
ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt
Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
-----END CERTIFICATE-----
108 changes: 108 additions & 0 deletions ebill_paynet/components/certificats/test_services_chain.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
-----BEGIN CERTIFICATE-----
MIIGYzCCBUugAwIBAgIUWdrIKM3bJ8JpG1C7eTGiyjv34rswDQYJKoZIhvcNAQEL
BQAwVDELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEuMCwGA1UE
AxMlU3dpc3NTaWduIFBlcnNvbmFsIEdvbGQgQ0EgMjAxNCAtIEcyMjAeFw0xNzEx
MjAwOTU2NTBaFw0yMjExMjAwOTU2NTBaMIGSMQswCQYDVQQGEwJDSDELMAkGA1UE
CBMCWkgxFjAUBgNVBAoTDVNJWCBQYXluZXQgQUcxFDASBgNVBAsTC1BheW5ldCB0
ZXN0MSYwJAYJKoZIhvcNAQkBFhdzdXBwb3J0Y2VudGVyQHBheW5ldC5jaDEgMB4G
A1UEAxMXcHNldWRvOiBTeXN0ZW0tU2VydmljZXMwggEiMA0GCSqGSIb3DQEBAQUA
A4IBDwAwggEKAoIBAQCypeouG2k5NzPRVMvXWgtQmRdGi9ix2LD+B0iC0xkBiFn6
MZnvchjqenwY66xleqn1plryb1B5aCX1q04RBtEgXj7P9WL4p7TpjtXIneoY2UuO
ir97GmfgMLwnhwxq612AofsFwa2TujRAGWycMUNzUFMpifWP61vcXxVS/vZ/DM7h
UGwOk6d4YLDk37UrtPke1nIzvG59QI0yDSe3B3pp9RQ3RSZHCnYuNOZVgSOYn2XR
NbkZWY1Vl3O7eqGp9pcfuVQlgXkm7HiBj19MXcwL7HilYnvH0d812LuO3f48Xrtq
ya7b1sfmKS2HnlydMfHrW30FkKSNIu8soN55Qm9bAgMBLj2jggLsMIIC6DAiBgNV
HREEGzAZgRdzdXBwb3J0Y2VudGVyQHBheW5ldC5jaDAOBgNVHQ8BAf8EBAMCA/gw
NQYDVR0lBC4wLAYIKwYBBQUHAwIGCCsGAQUFBwMEBgorBgEEAYI3CgMEBgorBgEE
AYI3FAICMB0GA1UdDgQWBBQtnW9uvu1S1/48B4sogUt1iVX9ZjAfBgNVHSMEGDAW
gBTaMvlJ+FHMmHFmDNnOttuSPwlL7zCB/wYDVR0fBIH3MIH0MEegRaBDhkFodHRw
Oi8vY3JsLnN3aXNzc2lnbi5uZXQvREEzMkY5NDlGODUxQ0M5ODcxNjYwQ0Q5Q0VC
NkRCOTIzRjA5NEJFRjCBqKCBpaCBooaBn2xkYXA6Ly9kaXJlY3Rvcnkuc3dpc3Nz
aWduLm5ldC9DTj1EQTMyRjk0OUY4NTFDQzk4NzE2NjBDRDlDRUI2REI5MjNGMDk0
QkVGJTJDTz1Td2lzc1NpZ24lMkNDPUNIP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxp
c3Q/YmFzZT9vYmplY3RDbGFzcz1jUkxEaXN0cmlidXRpb25Qb2ludDBfBgNVHSAE
WDBWMFQGCWCFdAFZAQIBBjBHMEUGCCsGAQUFBwIBFjlodHRwOi8vcmVwb3NpdG9y
eS5zd2lzc3NpZ24uY29tL1N3aXNzU2lnbi1Hb2xkLUNQLUNQUy5wZGYwgdcGCCsG
AQUFBwEBBIHKMIHHMGQGCCsGAQUFBzAChlhodHRwOi8vc3dpc3NzaWduLm5ldC9j
Z2ktYmluL2F1dGhvcml0eS9kb3dubG9hZC9EQTMyRjk0OUY4NTFDQzk4NzE2NjBD
RDlDRUI2REI5MjNGMDk0QkVGMF8GCCsGAQUFBzABhlNodHRwOi8vZ29sZC1wZXJz
b25hbC1nMi5vY3NwLnN3aXNzc2lnbi5uZXQvREEzMkY5NDlGODUxQ0M5ODcxNjYw
Q0Q5Q0VCNkRCOTIzRjA5NEJFRjANBgkqhkiG9w0BAQsFAAOCAQEAQpjmC9W3K5pO
EtRakvBA+kexvGesc+jtzzqPJhUSEN1AB8OrcfY+xhiN9TO/hNdRApPTtYuDFIqW
Lxhz3i5Gs+k6bpXnioDEs0UfgqhGvTLEq7LYbkMgZQ+0U4DpiANKMKbRo38krK5I
1OSY6W7zchC/r4O/0Wj7kQL+Cchv6LEdgu9xqBVkRTe3Z0jxK8AvNGkppFMNACRd
Ev2/9N0/klbGY6ZF3keU/u3IaTRNaX5spXIjpwYBwp0DNmIUnHZLPyji474rNzHg
z950/a5cIbhukwkUw2lu2f21r3MkpX/TJ5Pjmo5N0qUkj9h7iWWZO1lI1phpIMmd
VgNEI1L2lw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIGuDCCBKCgAwIBAgIPGReV3CJ0GxId21RMXMvcMA0GCSqGSIb3DQEBCwUAMEUx
CzAJBgNVBAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3
aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcNMTQwOTE5MTQxMDI1WhcNMjkwOTE1MTQx
MDI1WjBUMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMS4wLAYD
VQQDEyVTd2lzc1NpZ24gUGVyc29uYWwgR29sZCBDQSAyMDE0IC0gRzIyMIIBIjAN
BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnrf0T2JFsx4NPb+TUBInPgv9nUyF
9dMJh7sQL66HybrB2devqNc1+Gq+fFT4tfBa9hbI+xqRRqCO0LoQOJ3v3XMlOzQ3
zTL+b3wgDvs/d8tZ7LWGOSYF480/rL1aaBIQFlrE62GDQvcmkH/C8QxsSS+T+ga2
FQhC/Br/btveNcP6cz87WyshF8IU/7sOKYqh3o5mbxI641R1u3+zaiGq8A9620pS
oW3b9P1Mf5t4z51ifqb+/QsYtDt60dw+mVES6sk8cl9VRLejcuiXFyVJaj7YyITi
or33buzheHvzZdxaQSgeq0mIrvmXqtplZoqXQ12irR7xhuf/w9UtFBbqCwIDAQAB
o4IClDCCApAwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYD
VR0OBBYEFNoy+Un4UcyYcWYM2c6225I/CUvvMB8GA1UdIwQYMBaAFFsle5akZVF+
uDnzwHhmXug65/DuMIH/BgNVHR8EgfcwgfQwR6BFoEOGQWh0dHA6Ly9jcmwuc3dp
c3NzaWduLm5ldC81QjI1N0I5NkE0NjU1MTdFQjgzOUYzQzA3ODY2NUVFODNBRTdG
MEVFMIGooIGloIGihoGfbGRhcDovL2RpcmVjdG9yeS5zd2lzc3NpZ24ubmV0L0NO
PTVCMjU3Qjk2QTQ2NTUxN0VCODM5RjNDMDc4NjY1RUU4M0FFN0YwRUUlMkNPPVN3
aXNzU2lnbiUyQ0M9Q0g/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdD9iYXNlP29i
amVjdENsYXNzPWNSTERpc3RyaWJ1dGlvblBvaW50MF8GA1UdIARYMFYwVAYJYIV0
AVkBAgEGMEcwRQYIKwYBBQUHAgEWOWh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2ln
bi5jb20vU3dpc3NTaWduLUdvbGQtQ1AtQ1BTLnBkZjCBxgYIKwYBBQUHAQEEgbkw
gbYwZAYIKwYBBQUHMAKGWGh0dHA6Ly9zd2lzc3NpZ24ubmV0L2NnaS1iaW4vYXV0
aG9yaXR5L2Rvd25sb2FkLzVCMjU3Qjk2QTQ2NTUxN0VCODM5RjNDMDc4NjY1RUU4
M0FFN0YwRUUwTgYIKwYBBQUHMAGGQmh0dHA6Ly9vY3NwLnN3aXNzc2lnbi5uZXQv
NUIyNTdCOTZBNDY1NTE3RUI4MzlGM0MwNzg2NjVFRTgzQUU3RjBFRTANBgkqhkiG
9w0BAQsFAAOCAgEArevbqCOPH6va0x4oEb4UviyXJzIokl5MjRADlGMDFXaKm52m
U+IZlJ9PjcqBiEXhjjD1oR8uV5aVRWXH+auI6JgQZz5L+u2a309bDu3bcineP45v
Z+nAuoDvulmx2nqjloCOturaks727w/nHCoz723eYH46fg//q/a5QnOoBe+WIiZW
T71TcycX4hiVcPwVqB53tL9IM2qe2balnCpZKorZWVHQXYWSO5MIBaw/iMOwCCpf
lDRU75TruHPjfE4Bu4U9Nm3NBt3zcc5ykcQ8ZbJzkWLnSi2LY8r71Ulc3jxqyWOZ
QbgS14x/BzVQj4Rk9+X8KovGpooAFVIBR/bdU/z2IdZlENgoPNpJokuEH5OS6UZS
yNmhhXjI2QGXn91G+QV4++kreVz6heVOhDPgOoOfRXLYG9O/9wqPMthmUQgcTrym
p57bPpM0zIYpHxcKfxhoYprQdO3LuU1F2xkZE2vFLWVB9ugHzXd1ADIKrrGgJXPf
MluXT9wK8BzTcI5cOqhESt4Awq5q9fmiW3OUAROL0Ca0Z/sRQcvvJ/ewlZvLdsym
cfjV6JtN7/IBgIJ4D/Js4DRWCwAv1jhBiEGsRAlhiJmep//U1HEaT9oredt9PYS1
iKbkcMuDEtPuYXrQ+8OQmMEwMbOFboZMMTOVNOenLH+EiG6BUnowTwqqjtA=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln
biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF
MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT
d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8
76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+
bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c
6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE
emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd
MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt
MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y
MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y
FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi
aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM
gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB
qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7
lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn
8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6
45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO
UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5
O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC
bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv
GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a
77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC
hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3
92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp
Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w
ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt
Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
-----END CERTIFICATE-----
Loading