PayVector_Tpg - Version 1.0.0

Version Notes

First release based on IridiumCorp module v1.16.2

Download this release

Release Info

Developer IridiumCorp
Extension PayVector_Tpg
Version 1.0.0
Comparing to
See all releases


Version 1.0.0

Files changed (54) hide show
  1. app/code/local/PayVector/Checkout/Block/Onepage/Payment/Methods.php +38 -0
  2. app/code/local/PayVector/Checkout/Model/Type/Onepage.php +1011 -0
  3. app/code/local/PayVector/Checkout/etc/config.xml +24 -0
  4. app/code/local/PayVector/Sales/Model/Order.php +32 -0
  5. app/code/local/PayVector/Sales/Model/Order/Invoice.php +75 -0
  6. app/code/local/PayVector/Sales/Model/Order/Payment.php +553 -0
  7. app/code/local/PayVector/Sales/Model/Service/Quote.php +92 -0
  8. app/code/local/PayVector/Sales/etc/config.xml +56 -0
  9. app/code/local/PayVector/Tpg/Block/Adminhtml/Sales/Order/Payment.php +25 -0
  10. app/code/local/PayVector/Tpg/Block/Error.php +6 -0
  11. app/code/local/PayVector/Tpg/Block/Form.php +127 -0
  12. app/code/local/PayVector/Tpg/Block/Info.php +36 -0
  13. app/code/local/PayVector/Tpg/Block/Redirect.php +262 -0
  14. app/code/local/PayVector/Tpg/Block/Threedsecure.php +46 -0
  15. app/code/local/PayVector/Tpg/Helper/Data.php +6 -0
  16. app/code/local/PayVector/Tpg/Model/Common/GlobalErrors.php +38 -0
  17. app/code/local/PayVector/Tpg/Model/Common/ISOCountries.php +266 -0
  18. app/code/local/PayVector/Tpg/Model/Common/ISOCurrencies.php +199 -0
  19. app/code/local/PayVector/Tpg/Model/Common/PaymentFormHelper.php +539 -0
  20. app/code/local/PayVector/Tpg/Model/Common/ThePaymentGateway/PaymentSystem.php +3340 -0
  21. app/code/local/PayVector/Tpg/Model/Common/ThePaymentGateway/SOAP.php +1045 -0
  22. app/code/local/PayVector/Tpg/Model/Common/ThePaymentGateway/TPG_Common.php +1884 -0
  23. app/code/local/PayVector/Tpg/Model/Common/ThePaymentGateway/cacert.pem +3785 -0
  24. app/code/local/PayVector/Tpg/Model/Direct.php +1536 -0
  25. app/code/local/PayVector/Tpg/Model/Gatewayentrypoints.php +34 -0
  26. app/code/local/PayVector/Tpg/Model/Request.php +22 -0
  27. app/code/local/PayVector/Tpg/Model/Resource/Eav/Mysql4/Setup.php +6 -0
  28. app/code/local/PayVector/Tpg/Model/Resource/Gatewayentrypoints.php +9 -0
  29. app/code/local/PayVector/Tpg/Model/Resource/Gatewayentrypoints/Collection.php +8 -0
  30. app/code/local/PayVector/Tpg/Model/Resource/Setup.php +6 -0
  31. app/code/local/PayVector/Tpg/Model/Source/HashMethod.php +33 -0
  32. app/code/local/PayVector/Tpg/Model/Source/OrderStatus.php +15 -0
  33. app/code/local/PayVector/Tpg/Model/Source/PaymentAction.php +22 -0
  34. app/code/local/PayVector/Tpg/Model/Source/PaymentMode.php +30 -0
  35. app/code/local/PayVector/Tpg/Model/Source/ResultDeliveryMethod.php +28 -0
  36. app/code/local/PayVector/Tpg/controllers/PaymentController.php +1027 -0
  37. app/code/local/PayVector/Tpg/etc/config.xml +138 -0
  38. app/code/local/PayVector/Tpg/etc/system.xml +246 -0
  39. app/code/local/PayVector/Tpg/sql/tpg_setup/install-0.1.0.php +16 -0
  40. app/code/local/PayVector/Tpg/sql/tpg_setup/mysql4-install-0.1.0.php +58 -0
  41. app/design/adminhtml/base/default/template/tpg/form.phtml +87 -0
  42. app/design/adminhtml/base/default/template/tpg/info.phtml +18 -0
  43. app/design/adminhtml/default/default/layout/tpg.xml +11 -0
  44. app/design/adminhtml/default/default/template/payment/info/cc_tpg.phtml +172 -0
  45. app/design/adminhtml/default/default/template/tpg/form.phtml +87 -0
  46. app/design/adminhtml/default/default/template/tpg/info.phtml +18 -0
  47. app/design/frontend/base/default/template/tpg/form.phtml +198 -0
  48. app/design/frontend/base/default/template/tpg/info.phtml +18 -0
  49. app/design/frontend/default/default/template/tpg/form.phtml +93 -0
  50. app/design/frontend/default/default/template/tpg/info.phtml +17 -0
  51. package.xml +18 -0
  52. skin/adminhtml/default/default/tpg.js +35 -0
  53. skin/frontend/base/default/images/payvector.png +0 -0
  54. skin/frontend/default/default/images/payvector.png +0 -0
app/code/local/PayVector/Checkout/Block/Onepage/Payment/Methods.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * One page checkout status
5
+ *
6
+ * @category Mage
7
+ * @package Mage_Checkout
8
+ * @author Magento Core Team <core@magentocommerce.com>
9
+ */
10
+ class PayVector_Checkout_Block_Onepage_Payment_Methods extends Mage_Checkout_Block_Onepage_Payment_Methods
11
+ {
12
+ /**
13
+ * Override the base function - by default the PayVector payment option will be selected
14
+ *
15
+ * @return mixed
16
+ */
17
+ public function getSelectedMethodCode()
18
+ {
19
+ $method = false;
20
+ $model = Mage::getModel('tpg/direct');
21
+
22
+ if($this->getQuote()->getPayment()->getMethod())
23
+ {
24
+ $method = $this->getQuote()->getPayment()->getMethod();
25
+ }
26
+
27
+ /*else
28
+ {
29
+ // force the current payment to be selected
30
+ if($model)
31
+ {
32
+ $method = 'tpg';
33
+ }
34
+ }*/
35
+
36
+ return $method;
37
+ }
38
+ }
app/code/local/PayVector/Checkout/Model/Type/Onepage.php ADDED
@@ -0,0 +1,1011 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PayVector_Checkout_Model_Type_Onepage extends Mage_Checkout_Model_Type_Onepage
4
+ {
5
+ /**
6
+ * Create an order
7
+ *
8
+ * @return Mage_Checkout_Model_Type_Onepage
9
+ */
10
+ public function saveOrder()
11
+ {
12
+ $nVersion = Mage::getModel('tpg/direct')->getVersion();
13
+ if($nVersion >= 1600)
14
+ {
15
+ $this->validate();
16
+ $isNewCustomer = false;
17
+ switch($this->getCheckoutMethod())
18
+ {
19
+ case self::METHOD_GUEST:
20
+ $this->_prepareGuestQuote();
21
+ break;
22
+ case self::METHOD_REGISTER:
23
+ $this->_prepareNewCustomerQuote();
24
+ $isNewCustomer = true;
25
+ break;
26
+ default:
27
+ $this->_prepareCustomerQuote();
28
+ break;
29
+ }
30
+ $service = Mage::getModel('sales/service_quote', $this->getQuote());
31
+ $service->submitAll();
32
+ if($isNewCustomer)
33
+ {
34
+ try
35
+ {
36
+ $this->_involveNewCustomer();
37
+ }
38
+ catch(Exception $e)
39
+ {
40
+ Mage::logException($e);
41
+ }
42
+ }
43
+ $this->_checkoutSession->setLastQuoteId($this->getQuote()->getId())
44
+ ->setLastSuccessQuoteId($this->getQuote()->getId())
45
+ ->clearHelperData();
46
+ $order = $service->getOrder();
47
+ if($order)
48
+ {
49
+ Mage::dispatchEvent(
50
+ 'checkout_type_onepage_save_order_after',
51
+ array('order' => $order, 'quote' => $this->getQuote())
52
+ );
53
+ /**
54
+ * a flag to set that there will be redirect to third party after confirmation
55
+ * eg: paypal standard ipn
56
+ */
57
+ $redirectUrl = $this->getQuote()->getPayment()->getOrderPlaceRedirectUrl();
58
+ /**
59
+ * we only want to send to customer about new order when there is no redirect to third party
60
+ */
61
+ if(!$redirectUrl && $order->getCanSendNewEmailFlag())
62
+ {
63
+ try
64
+ {
65
+ $order->sendNewOrderEmail();
66
+ }
67
+ catch(Exception $e)
68
+ {
69
+ Mage::logException($e);
70
+ }
71
+ }
72
+ // add order information to the session
73
+ $this->_checkoutSession->setLastOrderId($order->getId())
74
+ ->setRedirectUrl($redirectUrl)
75
+ ->setLastRealOrderId($order->getIncrementId());
76
+ // as well a billing agreement can be created
77
+ $agreement = $order->getPayment()->getBillingAgreement();
78
+ if($agreement)
79
+ {
80
+ $this->_checkoutSession->setLastBillingAgreementId($agreement->getId());
81
+ }
82
+ }
83
+ // add recurring profiles information to the session
84
+ $profiles = $service->getRecurringPaymentProfiles();
85
+ if($profiles)
86
+ {
87
+ $ids = array();
88
+ foreach($profiles as $profile)
89
+ {
90
+ $ids[] = $profile->getId();
91
+ }
92
+ $this->_checkoutSession->setLastRecurringProfileIds($ids);
93
+ // TODO: send recurring profile emails
94
+ }
95
+ Mage::dispatchEvent(
96
+ 'checkout_submit_all_after',
97
+ array('order' => $order, 'quote' => $this->getQuote(), 'recurring_profiles' => $profiles)
98
+ );
99
+ }
100
+ else if($nVersion >= 1410)
101
+ {
102
+ // logic for version 1.4.1.0 and above
103
+ $this->validate();
104
+ $isNewCustomer = false;
105
+ switch($this->getCheckoutMethod())
106
+ {
107
+ case self::METHOD_GUEST:
108
+ $this->_prepareGuestQuote();
109
+ break;
110
+ case self::METHOD_REGISTER:
111
+ $this->_prepareNewCustomerQuote();
112
+ $isNewCustomer = true;
113
+ break;
114
+ default:
115
+ $this->_prepareCustomerQuote();
116
+ break;
117
+ }
118
+ $service = Mage::getModel('sales/service_quote', $this->getQuote());
119
+ $redirectUrl = $this->getQuote()->getPayment()->getOrderPlaceRedirectUrl();
120
+ if(!$redirectUrl ||
121
+ $this->getQuote()->getPayment()->getMethodInstance()->getCode() != 'tpg'
122
+ )
123
+ {
124
+ $service->submitAll();
125
+ }
126
+ if($isNewCustomer)
127
+ {
128
+ try
129
+ {
130
+ $this->_involveNewCustomer();
131
+ }
132
+ catch(Exception $e)
133
+ {
134
+ Mage::logException($e);
135
+ }
136
+ }
137
+ $this->_checkoutSession->setLastQuoteId($this->getQuote()->getId())
138
+ ->setLastSuccessQuoteId($this->getQuote()->getId());
139
+ #->clearHelperData();
140
+ $order = $service->getOrder();
141
+ if($order)
142
+ {
143
+ Mage::dispatchEvent('checkout_type_onepage_save_order_after', array('order' => $order, 'quote' => $this->getQuote()));
144
+ /**
145
+ * a flag to set that there will be redirect to third party after confirmation
146
+ * eg: paypal standard ipn
147
+ */
148
+ $redirectUrl = $this->getQuote()->getPayment()->getOrderPlaceRedirectUrl();
149
+ /**
150
+ * we only want to send to customer about new order when there is no redirect to third party
151
+ */
152
+ if(!$redirectUrl)
153
+ {
154
+ try
155
+ {
156
+ $order->sendNewOrderEmail();
157
+ }
158
+ catch(Exception $e)
159
+ {
160
+ Mage::logException($e);
161
+ }
162
+ }
163
+ // add order information to the session
164
+ $this->_checkoutSession->setLastOrderId($order->getId())
165
+ ->setRedirectUrl($redirectUrl)
166
+ ->setLastRealOrderId($order->getIncrementId());
167
+ // as well a billing agreement can be created
168
+ $agreement = $order->getPayment()->getBillingAgreement();
169
+ if($agreement)
170
+ {
171
+ $this->_checkoutSession->setLastBillingAgreementId($agreement->getId());
172
+ }
173
+ }
174
+ // add recurring profiles information to the session
175
+ $profiles = $service->getRecurringPaymentProfiles();
176
+ if($profiles)
177
+ {
178
+ $ids = array();
179
+ foreach($profiles as $profile)
180
+ {
181
+ $ids[] = $profile->getId();
182
+ }
183
+ $this->_checkoutSession->setLastRecurringProfileIds($ids);
184
+ // TODO: send recurring profile emails
185
+ }
186
+ }
187
+ else if($nVersion == 1400 || $nVersion == 1401)
188
+ {
189
+ // logic for version below 1.4.0.1 and below
190
+ $this->validateOrder();
191
+ $billing = $this->getQuote()->getBillingAddress();
192
+ if(!$this->getQuote()->isVirtual())
193
+ {
194
+ $shipping = $this->getQuote()->getShippingAddress();
195
+ }
196
+ switch($this->getQuote()->getCheckoutMethod())
197
+ {
198
+ case Mage_Sales_Model_Quote::CHECKOUT_METHOD_GUEST:
199
+ if(!$this->getQuote()->isAllowedGuestCheckout())
200
+ {
201
+ Mage::throwException(Mage::helper('checkout')->__('Sorry, guest checkout is not enabled. Please try again or contact store owner.'));
202
+ }
203
+ $this->getQuote()->setCustomerId(null)
204
+ ->setCustomerEmail($billing->getEmail())
205
+ ->setCustomerIsGuest(true)
206
+ ->setCustomerGroupId(Mage_Customer_Model_Group::NOT_LOGGED_IN_ID);
207
+ break;
208
+ case Mage_Sales_Model_Quote::CHECKOUT_METHOD_REGISTER:
209
+ $customer = Mage::getModel('customer/customer');
210
+ $customerBilling = $billing->exportCustomerAddress();
211
+ $customer->addAddress($customerBilling);
212
+ if(!$this->getQuote()->isVirtual() && !$shipping->getSameAsBilling())
213
+ {
214
+ $customerShipping = $shipping->exportCustomerAddress();
215
+ $customer->addAddress($customerShipping);
216
+ }
217
+ if($this->getQuote()->getCustomerDob() && !$billing->getCustomerDob())
218
+ {
219
+ $billing->setCustomerDob($this->getQuote()->getCustomerDob());
220
+ }
221
+ Mage::helper('core')->copyFieldset('checkout_onepage_billing', 'to_customer', $billing, $customer);
222
+ $customer->setPassword($customer->decryptPassword($this->getQuote()->getPasswordHash()));
223
+ $customer->setPasswordHash($customer->hashPassword($customer->getPassword()));
224
+ $this->getQuote()->setCustomer($customer);
225
+ Mage::log(time());
226
+ break;
227
+ default:
228
+ $customer = Mage::getSingleton('customer/session')->getCustomer();
229
+ if(!$billing->getCustomerId() || $billing->getSaveInAddressBook())
230
+ {
231
+ $customerBilling = $billing->exportCustomerAddress();
232
+ $customer->addAddress($customerBilling);
233
+ }
234
+ if(
235
+ !$this->getQuote()->isVirtual() &&
236
+ ((!$shipping->getCustomerId() && !$shipping->getSameAsBilling()) || (!$shipping->getSameAsBilling() && $shipping->getSaveInAddressBook()))
237
+ )
238
+ {
239
+ $customerShipping = $shipping->exportCustomerAddress();
240
+ $customer->addAddress($customerShipping);
241
+ }
242
+ $customer->setSavedFromQuote(true);
243
+ $customer->save();
244
+ $changed = false;
245
+ if(isset($customerBilling) && !$customer->getDefaultBilling())
246
+ {
247
+ $customer->setDefaultBilling($customerBilling->getId());
248
+ $changed = true;
249
+ }
250
+ if(
251
+ !$this->getQuote()->isVirtual() &&
252
+ isset($customerBilling) &&
253
+ !$customer->getDefaultShipping() &&
254
+ $shipping->getSameAsBilling()
255
+ )
256
+ {
257
+ $customer->setDefaultShipping($customerBilling->getId());
258
+ $changed = true;
259
+ }
260
+ elseif(
261
+ !$this->getQuote()->isVirtual() &&
262
+ isset($customerShipping) &&
263
+ !$customer->getDefaultShipping()
264
+ )
265
+ {
266
+ $customer->setDefaultShipping($customerShipping->getId());
267
+ $changed = true;
268
+ }
269
+ if($changed)
270
+ {
271
+ $customer->save();
272
+ }
273
+ }
274
+ $this->getQuote()->reserveOrderId();
275
+ /* @var $convertQuote Mage_Sales_Model_Convert_Quote */
276
+ $convertQuote = Mage::getModel('sales/convert_quote');
277
+ if($this->getQuote()->isVirtual())
278
+ {
279
+ $order = $convertQuote->addressToOrder($billing);
280
+ }
281
+ else
282
+ {
283
+ $order = $convertQuote->addressToOrder($shipping);
284
+ }
285
+ /* @var $order Mage_Sales_Model_Order */
286
+ $order->setBillingAddress($convertQuote->addressToOrderAddress($billing));
287
+ if(!$this->getQuote()->isVirtual())
288
+ {
289
+ $order->setShippingAddress($convertQuote->addressToOrderAddress($shipping));
290
+ }
291
+ $order->setPayment($convertQuote->paymentToOrderPayment($this->getQuote()->getPayment()));
292
+ foreach($this->getQuote()->getAllItems() as $item)
293
+ {
294
+ $orderItem = $convertQuote->itemToOrderItem($item);
295
+ if($item->getParentItem())
296
+ {
297
+ $orderItem->setParentItem($order->getItemByQuoteItemId($item->getParentItem()->getId()));
298
+ }
299
+ $order->addItem($orderItem);
300
+ }
301
+ // We can use configuration data for declare new order status
302
+ Mage::dispatchEvent('checkout_type_onepage_save_order', array('order' => $order, 'quote' => $this->getQuote()));
303
+ // check again, if customer exists
304
+ if($this->getQuote()->getCheckoutMethod() == Mage_Sales_Model_Quote::CHECKOUT_METHOD_REGISTER)
305
+ {
306
+ if($this->_customerEmailExists($customer->getEmail(), Mage::app()->getWebsite()->getId()))
307
+ {
308
+ Mage::throwException(Mage::helper('checkout')->__('There is already a customer registered using this email address'));
309
+ }
310
+ }
311
+ // clear 3dSecure session variables
312
+ Mage::getSingleton('checkout/session')->setThreedsecurerequired(null)
313
+ ->setMd(null)
314
+ ->setPares(null)
315
+ ->setAcsurl(null);
316
+ $order->place();
317
+ if($this->getQuote()->getCheckoutMethod() == Mage_Sales_Model_Quote::CHECKOUT_METHOD_REGISTER)
318
+ {
319
+ $customer->save();
320
+ $customerBillingId = $customerBilling->getId();
321
+ if(!$this->getQuote()->isVirtual())
322
+ {
323
+ $customerShippingId = isset($customerShipping) ? $customerShipping->getId() : $customerBillingId;
324
+ $customer->setDefaultShipping($customerShippingId);
325
+ }
326
+ $customer->setDefaultBilling($customerBillingId);
327
+ $customer->save();
328
+ $this->getQuote()->setCustomerId($customer->getId());
329
+ $order->setCustomerId($customer->getId());
330
+ Mage::helper('core')->copyFieldset('customer_account', 'to_order', $customer, $order);
331
+ $billing->setCustomerId($customer->getId())->setCustomerAddressId($customerBillingId);
332
+ if(!$this->getQuote()->isVirtual())
333
+ {
334
+ $shipping->setCustomerId($customer->getId())->setCustomerAddressId($customerShippingId);
335
+ }
336
+ if($customer->isConfirmationRequired())
337
+ {
338
+ $customer->sendNewAccountEmail('confirmation');
339
+ }
340
+ else
341
+ {
342
+ $customer->sendNewAccountEmail();
343
+ }
344
+ }
345
+ /**
346
+ * a flag to set that there will be redirect to third party after confirmation
347
+ * eg: paypal standard ipn
348
+ */
349
+ $redirectUrl = $this->getQuote()->getPayment()->getOrderPlaceRedirectUrl();
350
+ if(!$redirectUrl)
351
+ {
352
+ $order->setEmailSent(true);
353
+ }
354
+ if(!$redirectUrl ||
355
+ $this->getQuote()->getPayment()->getMethodInstance()->getCode() != 'tpg'
356
+ )
357
+ {
358
+ $order->save();
359
+ }
360
+ Mage::dispatchEvent('checkout_type_onepage_save_order_after', array('order' => $order, 'quote' => $this->getQuote()));
361
+ /**
362
+ * need to have some logic to set order as new status to make sure order is not finished yet
363
+ * quote will be still active when we send the customer to paypal
364
+ */
365
+ $orderId = $order->getIncrementId();
366
+ $this->getCheckout()->setLastQuoteId($this->getQuote()->getId());
367
+ $this->getCheckout()->setLastOrderId($order->getId());
368
+ $this->getCheckout()->setLastRealOrderId($order->getIncrementId());
369
+ $this->getCheckout()->setRedirectUrl($redirectUrl);
370
+ /**
371
+ * we only want to send to customer about new order when there is no redirect to third party
372
+ */
373
+ if(!$redirectUrl)
374
+ {
375
+ $order->sendNewOrderEmail();
376
+ }
377
+ if($this->getQuote()->getCheckoutMethod(true) == Mage_Sales_Model_Quote::CHECKOUT_METHOD_REGISTER &&
378
+ !Mage::getSingleton('customer/session')->isLoggedIn()
379
+ )
380
+ {
381
+ /**
382
+ * we need to save quote here to have it saved with Customer Id.
383
+ * so when loginById() executes checkout/session method loadCustomerQuote
384
+ * it would not create new quotes and merge it with old one.
385
+ */
386
+ $this->getQuote()->save();
387
+ if($customer->isConfirmationRequired())
388
+ {
389
+ Mage::getSingleton('checkout/session')->addSuccess(
390
+ Mage::helper('customer')->__(
391
+ 'Account confirmation is required. Please, check your e-mail for confirmation link. To resend confirmation email please <a href="%s">click here</a>.',
392
+ Mage::helper('customer')->getEmailConfirmationUrl($customer->getEmail())
393
+ )
394
+ );
395
+ }
396
+ else
397
+ {
398
+ Mage::getSingleton('customer/session')->loginById($customer->getId());
399
+ }
400
+ }
401
+ //Setting this one more time like control flag that we haves saved order
402
+ //Must be checkout on success page to show it or not.
403
+ $this->getCheckout()->setLastSuccessQuoteId($this->getQuote()->getId());
404
+ /*
405
+ * Fix for v1.4.1.0 and above - need to comment the below lines
406
+ */
407
+ //$this->getQuote()->setIsActive(false);
408
+ //$this->getQuote()->save();
409
+ }
410
+ else if($nVersion == 1324 || $nVersion == 1330)
411
+ {
412
+ $this->validateOrder();
413
+ $billing = $this->getQuote()->getBillingAddress();
414
+ if(!$this->getQuote()->isVirtual())
415
+ {
416
+ $shipping = $this->getQuote()->getShippingAddress();
417
+ }
418
+ switch($this->getQuote()->getCheckoutMethod())
419
+ {
420
+ case Mage_Sales_Model_Quote::CHECKOUT_METHOD_GUEST:
421
+ if(!$this->getQuote()->isAllowedGuestCheckout())
422
+ {
423
+ Mage::throwException(Mage::helper('checkout')->__('Sorry, guest checkout is not enabled. Please try again or contact store owner.'));
424
+ }
425
+ $this->getQuote()->setCustomerId(null)
426
+ ->setCustomerEmail($billing->getEmail())
427
+ ->setCustomerIsGuest(true)
428
+ ->setCustomerGroupId(Mage_Customer_Model_Group::NOT_LOGGED_IN_ID);
429
+ break;
430
+ case Mage_Sales_Model_Quote::CHECKOUT_METHOD_REGISTER:
431
+ $customer = Mage::getModel('customer/customer');
432
+ $customerBilling = $billing->exportCustomerAddress();
433
+ $customer->addAddress($customerBilling);
434
+ if(!$this->getQuote()->isVirtual() &&
435
+ !$shipping->getSameAsBilling()
436
+ )
437
+ {
438
+ $customerShipping = $shipping->exportCustomerAddress();
439
+ $customer->addAddress($customerShipping);
440
+ }
441
+ if($this->getQuote()->getCustomerDob() &&
442
+ !$billing->getCustomerDob()
443
+ )
444
+ {
445
+ $billing->setCustomerDob($this->getQuote()->getCustomerDob());
446
+ }
447
+ if($this->getQuote()->getCustomerTaxvat() && !$billing->getCustomerTaxvat())
448
+ {
449
+ $billing->setCustomerTaxvat($this->getQuote()->getCustomerTaxvat());
450
+ }
451
+ Mage::helper('core')->copyFieldset('checkout_onepage_billing', 'to_customer', $billing, $customer);
452
+ $customer->setPassword($customer->decryptPassword($this->getQuote()->getPasswordHash()));
453
+ $customer->setPasswordHash($customer->hashPassword($customer->getPassword()));
454
+ $this->getQuote()->setCustomer($customer);
455
+ Mage::log(time());
456
+ break;
457
+ default:
458
+ $customer = Mage::getSingleton('customer/session')->getCustomer();
459
+ if(!$billing->getCustomerId() ||
460
+ $billing->getSaveInAddressBook()
461
+ )
462
+ {
463
+ $customerBilling = $billing->exportCustomerAddress();
464
+ $customer->addAddress($customerBilling);
465
+ }
466
+ if(!$this->getQuote()->isVirtual() &&
467
+ ((!$shipping->getCustomerId() && !$shipping->getSameAsBilling()) ||
468
+ (!$shipping->getSameAsBilling() && $shipping->getSaveInAddressBook()))
469
+ )
470
+ {
471
+ $customerShipping = $shipping->exportCustomerAddress();
472
+ $customer->addAddress($customerShipping);
473
+ }
474
+ $customer->setSavedFromQuote(true);
475
+ $customer->save();
476
+ $changed = false;
477
+ if(isset($customerBilling) &&
478
+ !$customer->getDefaultBilling()
479
+ )
480
+ {
481
+ $customer->setDefaultBilling($customerBilling->getId());
482
+ $changed = true;
483
+ }
484
+ if(!$this->getQuote()->isVirtual() &&
485
+ isset($customerBilling) &&
486
+ !$customer->getDefaultShipping() &&
487
+ $shipping->getSameAsBilling()
488
+ )
489
+ {
490
+ $customer->setDefaultShipping($customerBilling->getId());
491
+ $changed = true;
492
+ }
493
+ elseif(!$this->getQuote()->isVirtual() &&
494
+ isset($customerShipping) &&
495
+ !$customer->getDefaultShipping()
496
+ )
497
+ {
498
+ $customer->setDefaultShipping($customerShipping->getId());
499
+ $changed = true;
500
+ }
501
+ if($changed)
502
+ {
503
+ $customer->save();
504
+ }
505
+ }
506
+ $this->getQuote()->reserveOrderId();
507
+ $convertQuote = Mage::getModel('sales/convert_quote');
508
+ // @var $convertQuote Mage_Sales_Model_Convert_Quote
509
+ if($this->getQuote()->isVirtual())
510
+ {
511
+ $order = $convertQuote->addressToOrder($billing);
512
+ }
513
+ else
514
+ {
515
+ $order = $convertQuote->addressToOrder($shipping);
516
+ }
517
+ // @var $order Mage_Sales_Model_Order
518
+ $order->setBillingAddress($convertQuote->addressToOrderAddress($billing));
519
+ if(!$this->getQuote()->isVirtual())
520
+ {
521
+ $order->setShippingAddress($convertQuote->addressToOrderAddress($shipping));
522
+ }
523
+ $order->setPayment($convertQuote->paymentToOrderPayment($this->getQuote()->getPayment()));
524
+ foreach($this->getQuote()->getAllItems() as $item)
525
+ {
526
+ $orderItem = $convertQuote->itemToOrderItem($item);
527
+ if($item->getParentItem())
528
+ {
529
+ $orderItem->setParentItem($order->getItemByQuoteItemId($item->getParentItem()->getId()));
530
+ }
531
+ $order->addItem($orderItem);
532
+ }
533
+ // We can use configuration data for declare new order status
534
+ Mage::dispatchEvent('checkout_type_onepage_save_order', array('order' => $order, 'quote' => $this->getQuote()));
535
+ // check again, if customer exists
536
+ if($this->getQuote()->getCheckoutMethod() == Mage_Sales_Model_Quote::CHECKOUT_METHOD_REGISTER)
537
+ {
538
+ if($this->_customerEmailExists($customer->getEmail(), Mage::app()->getWebsite()->getId()))
539
+ {
540
+ Mage::throwException(Mage::helper('checkout')->__('There is already a customer registered using this email address'));
541
+ }
542
+ }
543
+ // clear 3dSecure session variables
544
+ Mage::getSingleton('checkout/session')->setThreedsecurerequired(null);
545
+ Mage::getSingleton('checkout/session')->setMd(null);
546
+ Mage::getSingleton('checkout/session')->setPares(null);
547
+ Mage::getSingleton('checkout/session')->setAcsurl(null);
548
+ $order->place();
549
+ if($this->getQuote()->getCheckoutMethod() == Mage_Sales_Model_Quote::CHECKOUT_METHOD_REGISTER)
550
+ {
551
+ $customer->save();
552
+ $customerBillingId = $customerBilling->getId();
553
+ if(!$this->getQuote()->isVirtual())
554
+ {
555
+ $customerShippingId = isset($customerShipping) ? $customerShipping->getId() : $customerBillingId;
556
+ $customer->setDefaultShipping($customerShippingId);
557
+ }
558
+ $customer->setDefaultBilling($customerBillingId);
559
+ $customer->save();
560
+ $this->getQuote()->setCustomerId($customer->getId());
561
+ $order->setCustomerId($customer->getId());
562
+ Mage::helper('core')->copyFieldset('customer_account', 'to_order', $customer, $order);
563
+ $billing->setCustomerId($customer->getId())->setCustomerAddressId($customerBillingId);
564
+ if(!$this->getQuote()->isVirtual())
565
+ {
566
+ $shipping->setCustomerId($customer->getId())->setCustomerAddressId($customerShippingId);
567
+ }
568
+ if($customer->isConfirmationRequired())
569
+ {
570
+ $customer->sendNewAccountEmail('confirmation');
571
+ }
572
+ else
573
+ {
574
+ $customer->sendNewAccountEmail();
575
+ }
576
+ }
577
+ /**
578
+ * a flag to set that there will be redirect to third party after confirmation
579
+ * eg: paypal standard ipn
580
+ */
581
+ $redirectUrl = $this->getQuote()->getPayment()->getOrderPlaceRedirectUrl();
582
+ if(!$redirectUrl)
583
+ {
584
+ $order->setEmailSent(true);
585
+ }
586
+ if(!$redirectUrl ||
587
+ $this->getQuote()->getPayment()->getMethodInstance()->getCode() != 'tpg'
588
+ )
589
+ {
590
+ $order->save();
591
+ }
592
+ Mage::dispatchEvent('checkout_type_onepage_save_order_after', array('order' => $order, 'quote' => $this->getQuote()));
593
+ /**
594
+ * need to have somelogic to set order as new status to make sure order is not finished yet
595
+ * quote will be still active when we send the customer to paypal
596
+ */
597
+ $orderId = $order->getIncrementId();
598
+ $this->getCheckout()->setLastQuoteId($this->getQuote()->getId());
599
+ $this->getCheckout()->setLastOrderId($order->getId());
600
+ $this->getCheckout()->setLastRealOrderId($order->getIncrementId());
601
+ $this->getCheckout()->setRedirectUrl($redirectUrl);
602
+ /**
603
+ * we only want to send to customer about new order when there is no redirect to third party
604
+ */
605
+ if(!$redirectUrl)
606
+ {
607
+ $order->sendNewOrderEmail();
608
+ }
609
+ if($this->getQuote()->getCheckoutMethod(true) == Mage_Sales_Model_Quote::CHECKOUT_METHOD_REGISTER &&
610
+ !Mage::getSingleton('customer/session')->isLoggedIn()
611
+ )
612
+ {
613
+ /**
614
+ * we need to save quote here to have it saved with Customer Id.
615
+ * so when loginById() executes checkout/session method loadCustomerQuote
616
+ * it would not create new quotes and merge it with old one.
617
+ */
618
+ $this->getQuote()->save();
619
+ if($customer->isConfirmationRequired())
620
+ {
621
+ Mage::getSingleton('checkout/session')->addSuccess(
622
+ Mage::helper('customer')->__(
623
+ 'Account confirmation is required. Please, check your e-mail for confirmation link. To resend confirmation email please <a href="%s">click here</a>.',
624
+ Mage::helper('customer')->getEmailConfirmationUrl($customer->getEmail())
625
+ )
626
+ );
627
+ }
628
+ else
629
+ {
630
+ Mage::getSingleton('customer/session')->loginById($customer->getId());
631
+ }
632
+ }
633
+ //Setting this one more time like control flag that we haves saved order
634
+ //Must be checkout on success page to show it or not.
635
+ $this->getCheckout()->setLastSuccessQuoteId($this->getQuote()->getId());
636
+ $this->getQuote()->setIsActive(false);
637
+ $this->getQuote()->save();
638
+ }
639
+
640
+ return $this;
641
+ }
642
+
643
+ /**
644
+ * Create an order for a Direct (API) 3D Secure enabled payment on the callback
645
+ *
646
+ * @param unknown_type $pares
647
+ * @param unknown_type $md
648
+ * @return unknown
649
+ */
650
+ public function saveOrderAfter3dSecure($pares, $md)
651
+ {
652
+ $nVersion = Mage::getModel('tpg/direct')->getVersion();
653
+ if($nVersion >= 1410)
654
+ {
655
+ $orderId = Mage::getSingleton('checkout/session')->getTpgOrderId();
656
+ $_order = Mage::getModel('sales/order')->load($orderId);
657
+ if(!$_order->getId())
658
+ {
659
+ Mage::throwException('Could not load order.');
660
+ }
661
+ Mage::getSingleton('checkout/session')->setThreedsecurerequired(true)
662
+ ->setMd($md)
663
+ ->setPares($pares);
664
+ $method = Mage::getSingleton('checkout/session')->getRedirectionMethod();
665
+ $_order->getPayment()->getMethodInstance()->{$method}($_order->getPayment(), $pares, $md);
666
+ if($_order->getFailedThreed() !== true &&
667
+ $_order->getPayment()->getMethodInstance()->getCode() == 'tpg' &&
668
+ $_order->getStatus() != 'pending'
669
+ )
670
+ {
671
+ $order_status = Mage::getStoreConfig('payment/tpg/order_status', Mage::app()->getStore()->getId());
672
+ $_order->addStatusToHistory($order_status);
673
+ $_order->setStatus($order_status);
674
+ }
675
+ $_order->save();
676
+ Mage::getSingleton('checkout/session')->setThreedsecurerequired(null)
677
+ ->setMd(null)
678
+ ->setPareq(null)
679
+ ->setAcsurl(null)
680
+ ->setTpgOrderId(null);
681
+ }
682
+ else if($nVersion == 1400 || $nVersion == 1401 || $nVersion == 1324 || $nVersion == 1330)
683
+ {
684
+ $this->validateOrder();
685
+ $billing = $this->getQuote()->getBillingAddress();
686
+ if(!$this->getQuote()->isVirtual())
687
+ {
688
+ $shipping = $this->getQuote()->getShippingAddress();
689
+ }
690
+ switch($this->getQuote()->getCheckoutMethod())
691
+ {
692
+ case 'guest':
693
+ $this->getQuote()->setCustomerEmail($billing->getEmail())
694
+ ->setCustomerIsGuest(true)
695
+ ->setCustomerGroupId(Mage_Customer_Model_Group::NOT_LOGGED_IN_ID);
696
+ break;
697
+ default:
698
+ $customer = Mage::getSingleton('customer/session')->getCustomer();
699
+ if(!$billing->getCustomerId() ||
700
+ $billing->getSaveInAddressBook()
701
+ )
702
+ {
703
+ $customerBilling = $billing->exportCustomerAddress();
704
+ $customer->addAddress($customerBilling);
705
+ }
706
+ if(!$this->getQuote()->isVirtual() &&
707
+ ((!$shipping->getCustomerId() && !$shipping->getSameAsBilling()) ||
708
+ (!$shipping->getSameAsBilling() && $shipping->getSaveInAddressBook()))
709
+ )
710
+ {
711
+ $customerShipping = $shipping->exportCustomerAddress();
712
+ $customer->addAddress($customerShipping);
713
+ }
714
+ $customer->setSavedFromQuote(true);
715
+ $customer->save();
716
+ $changed = false;
717
+ if(isset($customerBilling) &&
718
+ !$customer->getDefaultBilling()
719
+ )
720
+ {
721
+ $customer->setDefaultBilling($customerBilling->getId());
722
+ $changed = true;
723
+ }
724
+ if(!$this->getQuote()->isVirtual() &&
725
+ isset($customerBilling) &&
726
+ !$customer->getDefaultShipping() &&
727
+ $shipping->getSameAsBilling()
728
+ )
729
+ {
730
+ $customer->setDefaultShipping($customerBilling->getId());
731
+ $changed = true;
732
+ }
733
+ elseif(!$this->getQuote()->isVirtual() &&
734
+ isset($customerShipping) &&
735
+ !$customer->getDefaultShipping()
736
+ )
737
+ {
738
+ $customer->setDefaultShipping($customerShipping->getId());
739
+ $changed = true;
740
+ }
741
+ if($changed)
742
+ {
743
+ $customer->save();
744
+ }
745
+ }
746
+ $this->getQuote()->reserveOrderId();
747
+ $convertQuote = Mage::getModel('sales/convert_quote');
748
+ // @var $convertQuote Mage_Sales_Model_Convert_Quote
749
+ if($this->getQuote()->isVirtual())
750
+ {
751
+ $order = $convertQuote->addressToOrder($billing);
752
+ }
753
+ else
754
+ {
755
+ $order = $convertQuote->addressToOrder($shipping);
756
+ }
757
+ /* @var $order Mage_Sales_Model_Order */
758
+ $order->setBillingAddress($convertQuote->addressToOrderAddress($billing));
759
+ if(!$this->getQuote()->isVirtual())
760
+ {
761
+ $order->setShippingAddress($convertQuote->addressToOrderAddress($shipping));
762
+ }
763
+ $order->setPayment($convertQuote->paymentToOrderPayment($this->getQuote()->getPayment()));
764
+ foreach($this->getQuote()->getAllItems() as $item)
765
+ {
766
+ $order->addItem($convertQuote->itemToOrderItem($item));
767
+ }
768
+ /**
769
+ * We can use configuration data for declare new order status
770
+ */
771
+ Mage::dispatchEvent('checkout_type_onepage_save_order', array('order' => $order, 'quote' => $this->getQuote()));
772
+ Mage::getSingleton('checkout/session')->setThreedsecurerequired(true)
773
+ ->setMd($md)
774
+ ->setPares($pares);
775
+ $order->place();
776
+ if($order->getPayment()->getMethodInstance()->getCode() == 'tpg' &&
777
+ $order->getStatus() != 'pending'
778
+ )
779
+ {
780
+ $order_status = Mage::getStoreConfig('payment/tpg/order_status', Mage::app()->getStore()->getId());
781
+ $order->addStatusToHistory($order_status);
782
+ $order->setStatus($order_status);
783
+ }
784
+ $order->save();
785
+ Mage::dispatchEvent('checkout_type_onepage_save_order_after', array('order' => $order, 'quote' => $this->getQuote()));
786
+ $this->getQuote()->setIsActive(false);
787
+ $this->getQuote()->save();
788
+ $orderId = $order->getIncrementId();
789
+ $this->getCheckout()->setLastQuoteId($this->getQuote()->getId());
790
+ $this->getCheckout()->setLastOrderId($order->getId());
791
+ $this->getCheckout()->setLastRealOrderId($order->getIncrementId());
792
+ // $this->getCheckout()->setRedirectUrl($redirectUrl);
793
+ /**
794
+ * we only want to send to customer about new order when there is no redirect to third party
795
+ */
796
+ /*if(!$redirectUrl){
797
+ $order->sendNewOrderEmail();
798
+ }*/
799
+ if($this->getQuote()->getCheckoutMethod() == 'register')
800
+ {
801
+ Mage::getSingleton('customer/session')->loginById($customer->getId());
802
+ }
803
+ }
804
+
805
+ return $this;
806
+ }
807
+
808
+ /**
809
+ * Create an order for a Hosted Payment Form/Transparent Redirect payment on the callback
810
+ *
811
+ * @param bool $boIsHostedPaymentAction
812
+ * @param string $szStatusCode
813
+ * @param string $szMessage
814
+ * @param string $szPreviousStatusCode
815
+ * @param string $szPreviousMessage
816
+ * @param string $szOrderID
817
+ * @param string $szCardType
818
+ * @return PayVector_Checkout_Model_Type_OnePage
819
+ */
820
+ public function saveOrderAfterRedirectedPaymentAction(
821
+ $boIsHostedPaymentAction,
822
+ $szStatusCode,
823
+ $szMessage,
824
+ $szPreviousStatusCode,
825
+ $szPreviousMessage,
826
+ $szOrderID,
827
+ $szCrossReference,
828
+ $szCardType
829
+ )
830
+ {
831
+ $nVersion = Mage::getModel('tpg/direct')->getVersion();
832
+ if($nVersion >= 1410)
833
+ {
834
+ /* @var Mage_Sales_Model_Order $_order */
835
+ $_order = Mage::getModel('sales/order')->load(Mage::getSingleton('checkout/session')->getTpgOrderId());
836
+ if(!$_order->getId())
837
+ {
838
+ Mage::throwException('Could not load order.');
839
+ }
840
+ Mage::getSingleton('checkout/session')->setRedirectedPayment(true)
841
+ ->setIshostedpayment($boIsHostedPaymentAction)
842
+ ->setStatuscode($szStatusCode)
843
+ ->setMessage($szMessage)
844
+ ->setPreviousstatuscode($szPreviousStatusCode)
845
+ ->setPreviousmessage($szPreviousMessage)
846
+ ->setOrderid($szOrderID)
847
+ ->setCrossReference($szCrossReference)
848
+ ->setCardType($szCardType);
849
+ $method = Mage::getSingleton('checkout/session')->getRedirectionMethod();
850
+ $_order->getPayment()->getMethodInstance()->{$method}(
851
+ $_order->getPayment(),
852
+ $boIsHostedPaymentAction,
853
+ $szStatusCode,
854
+ $szMessage,
855
+ $szPreviousStatusCode,
856
+ $szPreviousMessage,
857
+ $szOrderID,
858
+ $szCrossReference,
859
+ $szCardType
860
+ );
861
+ if(
862
+ $_order->getFailedThreed() !== true &&
863
+ $_order->getPayment()->getMethodInstance()->getCode() == 'tpg' &&
864
+ $_order->getStatus() != 'pending'
865
+ )
866
+ {
867
+ $order_status = Mage::getStoreConfig('payment/tpg/order_status', Mage::app()->getStore()->getId());
868
+ $_order->addStatusToHistory($order_status);
869
+ $_order->setStatus($order_status);
870
+ }
871
+ $_order->save();
872
+ Mage::getSingleton('checkout/session')->setRedirectedPayment(null)
873
+ ->setIshostedpayment(null)
874
+ ->setStatuscode(null)
875
+ ->setMessage(null)
876
+ ->setPreviousstatuscode(null)
877
+ ->setPreviousmessage(null)
878
+ ->setOrderid(null)
879
+ ->setTpgOrderId(null);
880
+ }
881
+ else if($nVersion == 1400 || $nVersion == 1401 || $nVersion == 1324 || $nVersion == 1330)
882
+ {
883
+ $this->validateOrder();
884
+ $billing = $this->getQuote()->getBillingAddress();
885
+ if(!$this->getQuote()->isVirtual())
886
+ {
887
+ $shipping = $this->getQuote()->getShippingAddress();
888
+ }
889
+ switch($this->getQuote()->getCheckoutMethod())
890
+ {
891
+ case 'guest':
892
+ $this->getQuote()->setCustomerEmail($billing->getEmail())
893
+ ->setCustomerIsGuest(true)
894
+ ->setCustomerGroupId(Mage_Customer_Model_Group::NOT_LOGGED_IN_ID);
895
+ break;
896
+ default:
897
+ $customer = Mage::getSingleton('customer/session')->getCustomer();
898
+ if(!$billing->getCustomerId() ||
899
+ $billing->getSaveInAddressBook()
900
+ )
901
+ {
902
+ $customerBilling = $billing->exportCustomerAddress();
903
+ $customer->addAddress($customerBilling);
904
+ }
905
+ if(!$this->getQuote()->isVirtual() &&
906
+ ((!$shipping->getCustomerId() && !$shipping->getSameAsBilling()) ||
907
+ (!$shipping->getSameAsBilling() && $shipping->getSaveInAddressBook()))
908
+ )
909
+ {
910
+ $customerShipping = $shipping->exportCustomerAddress();
911
+ $customer->addAddress($customerShipping);
912
+ }
913
+ $customer->setSavedFromQuote(true);
914
+ $customer->save();
915
+ $changed = false;
916
+ if(isset($customerBilling) &&
917
+ !$customer->getDefaultBilling()
918
+ )
919
+ {
920
+ $customer->setDefaultBilling($customerBilling->getId());
921
+ $changed = true;
922
+ }
923
+ if(!$this->getQuote()->isVirtual() &&
924
+ isset($customerBilling) &&
925
+ !$customer->getDefaultShipping() &&
926
+ $shipping->getSameAsBilling()
927
+ )
928
+ {
929
+ $customer->setDefaultShipping($customerBilling->getId());
930
+ $changed = true;
931
+ }
932
+ elseif(!$this->getQuote()->isVirtual() &&
933
+ isset($customerShipping) &&
934
+ !$customer->getDefaultShipping()
935
+ )
936
+ {
937
+ $customer->setDefaultShipping($customerShipping->getId());
938
+ $changed = true;
939
+ }
940
+ if($changed)
941
+ {
942
+ $customer->save();
943
+ }
944
+ }
945
+ $this->getQuote()->reserveOrderId();
946
+ $convertQuote = Mage::getModel('sales/convert_quote');
947
+ // @var $convertQuote Mage_Sales_Model_Convert_Quote
948
+ if($this->getQuote()->isVirtual())
949
+ {
950
+ $order = $convertQuote->addressToOrder($billing);
951
+ }
952
+ else
953
+ {
954
+ $order = $convertQuote->addressToOrder($shipping);
955
+ }
956
+ /* @var $order Mage_Sales_Model_Order */
957
+ $order->setBillingAddress($convertQuote->addressToOrderAddress($billing));
958
+ if(!$this->getQuote()->isVirtual())
959
+ {
960
+ $order->setShippingAddress($convertQuote->addressToOrderAddress($shipping));
961
+ }
962
+ $order->setPayment($convertQuote->paymentToOrderPayment($this->getQuote()->getPayment()));
963
+ foreach($this->getQuote()->getAllItems() as $item)
964
+ {
965
+ $order->addItem($convertQuote->itemToOrderItem($item));
966
+ }
967
+ /**
968
+ * We can use configuration data for declare new order status
969
+ */
970
+ Mage::dispatchEvent('checkout_type_onepage_save_order', array('order' => $order, 'quote' => $this->getQuote()));
971
+ Mage::getSingleton('checkout/session')->setRedirectedPayment(true)
972
+ ->setIshostedpayment($boIsHostedPaymentAction)
973
+ ->setStatuscode($szStatusCode)
974
+ ->setMessage($szMessage)
975
+ ->setPreviousstatuscode($szPreviousStatusCode)
976
+ ->setPreviousmessage($szPreviousMessage)
977
+ ->setOrderid($szOrderID)
978
+ ->setCrossReference($szCrossReference)
979
+ ->setCardType($szCardType);
980
+ $order->place();
981
+ if($order->getPayment()->getMethodInstance()->getCode() == 'tpg' &&
982
+ $order->getStatus() != 'pending'
983
+ )
984
+ {
985
+ $order_status = Mage::getStoreConfig('payment/tpg/order_status', Mage::app()->getStore()->getId());
986
+ $order->addStatusToHistory($order_status);
987
+ $order->setStatus($order_status);
988
+ }
989
+ $order->save();
990
+ Mage::dispatchEvent('checkout_type_onepage_save_order_after', array('order' => $order, 'quote' => $this->getQuote()));
991
+ $this->getQuote()->setIsActive(false);
992
+ $this->getQuote()->save();
993
+ $orderId = $order->getIncrementId();
994
+ $this->getCheckout()->setLastQuoteId($this->getQuote()->getId());
995
+ $this->getCheckout()->setLastOrderId($order->getId());
996
+ $this->getCheckout()->setLastRealOrderId($order->getIncrementId());
997
+ /**
998
+ * we only want to send to customer about new order when there is no redirect to third party
999
+ */
1000
+ //if(!$redirectUrl){
1001
+ $order->sendNewOrderEmail();
1002
+ //}
1003
+ if($this->getQuote()->getCheckoutMethod() == 'register')
1004
+ {
1005
+ Mage::getSingleton('customer/session')->loginById($customer->getId());
1006
+ }
1007
+ }
1008
+
1009
+ return $this;
1010
+ }
1011
+ }
app/code/local/PayVector/Checkout/etc/config.xml ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <PayVector_Checkout>
5
+ <version>0.0.1</version>
6
+ </PayVector_Checkout>
7
+ </modules>
8
+ <global>
9
+ <models>
10
+ <checkout>
11
+ <rewrite>
12
+ <type_onepage>PayVector_Checkout_Model_Type_Onepage</type_onepage>
13
+ </rewrite>
14
+ </checkout>
15
+ </models>
16
+ <blocks>
17
+ <checkout>
18
+ <rewrite>
19
+ <onepage_payment_methods>PayVector_Checkout_Block_Onepage_Payment_Methods</onepage_payment_methods>
20
+ </rewrite>
21
+ </checkout>
22
+ </blocks>
23
+ </global>
24
+ </config>
app/code/local/PayVector/Sales/Model/Order.php ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PayVector_Sales_Model_Order extends Mage_Sales_Model_Order
4
+ {
5
+ protected function _setState($state, $status = false, $comment = '', $isCustomerNotified = null, $shouldProtectState = false)
6
+ {
7
+ // attempt to set the specified state
8
+ if ($shouldProtectState)
9
+ {
10
+ if ($this->isStateProtected($state))
11
+ {
12
+ Mage::throwException(Mage::helper('sales')->__('The Order State "%s" must not be set manually.', $state));
13
+ }
14
+ }
15
+
16
+ $this->setData('state', $state);
17
+
18
+ // add status history
19
+ if ($status)
20
+ {
21
+ if ($status === true)
22
+ {
23
+ $status = $this->getConfig()->getStateDefaultStatus($state);
24
+ }
25
+
26
+ $this->setStatus($status);
27
+ $history = $this->addStatusHistoryComment($comment, false); // no sense to set $status again
28
+ $history->setIsCustomerNotified($isCustomerNotified); // for backwards compatibility
29
+ }
30
+ return $this;
31
+ }
32
+ }
app/code/local/PayVector/Sales/Model/Order/Invoice.php ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PayVector_Sales_Model_Order_Invoice extends Mage_Sales_Model_Order_Invoice
4
+ {
5
+ /**
6
+ * Capture invoice
7
+ *
8
+ * @return Mage_Sales_Model_Order_Invoice
9
+ */
10
+ public function capture()
11
+ {
12
+ $this->getOrder()->getPayment()->capture($this);
13
+
14
+ if ($this->getIsPaid())
15
+ {
16
+ $this->pay();
17
+ }
18
+ return $this;
19
+ }
20
+
21
+ public function pay()
22
+ {
23
+ $nVersion = Mage::getModel('tpg/direct')->getVersion();
24
+
25
+ if($nVersion >= 1400)
26
+ {
27
+ if ($this->_wasPayCalled)
28
+ {
29
+ return $this;
30
+ }
31
+
32
+ if(!$this->getOrder()->getIsThreeDSecurePending() &&
33
+ !$this->getOrder()->getIsHostedPaymentPending())
34
+ {
35
+ $this->_wasPayCalled = true;
36
+
37
+ $invoiceState = self::STATE_PAID;
38
+ if ($this->getOrder()->getPayment()->hasForcedState())
39
+ {
40
+ $invoiceState = $this->getOrder()->getPayment()->getForcedState();
41
+ }
42
+
43
+ $this->setState($invoiceState);
44
+
45
+ $this->getOrder()->getPayment()->pay($this);
46
+ $this->getOrder()->setTotalPaid(
47
+ $this->getOrder()->getTotalPaid()+$this->getGrandTotal()
48
+ );
49
+ $this->getOrder()->setBaseTotalPaid(
50
+ $this->getOrder()->getBaseTotalPaid()+$this->getBaseGrandTotal()
51
+ );
52
+ Mage::dispatchEvent('sales_order_invoice_pay', array($this->_eventObject=>$this));
53
+ }
54
+ }
55
+ else if($nVersion == 1324 || $nVersion == 1330)
56
+ {
57
+ $invoiceState = self::STATE_PAID;
58
+ if ($this->getOrder()->getPayment()->hasForcedState())
59
+ {
60
+ $invoiceState = $this->getOrder()->getPayment()->getForcedState();
61
+ }
62
+ $this->setState($invoiceState);
63
+
64
+ $this->getOrder()->getPayment()->pay($this);
65
+ $this->getOrder()->setTotalPaid(
66
+ $this->getOrder()->getTotalPaid()+$this->getGrandTotal()
67
+ );
68
+ $this->getOrder()->setBaseTotalPaid(
69
+ $this->getOrder()->getBaseTotalPaid()+$this->getBaseGrandTotal()
70
+ );
71
+ Mage::dispatchEvent('sales_order_invoice_pay', array($this->_eventObject=>$this));
72
+ }
73
+ return $this;
74
+ }
75
+ }
app/code/local/PayVector/Sales/Model/Order/Payment.php ADDED
@@ -0,0 +1,553 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PayVector_Sales_Model_Order_Payment extends Mage_Sales_Model_Order_Payment
4
+ {
5
+ /**
6
+ * Capture payment
7
+ *
8
+ * @return Mage_Sales_Model_Order_Payment
9
+ */
10
+ public function capture($invoice)
11
+ {
12
+ $nVersion = Mage::getModel('tpg/direct')->getVersion();
13
+
14
+ if($nVersion >= 1411 || $nVersion == 1410)
15
+ {
16
+ if (is_null($invoice))
17
+ {
18
+ $invoice = $this->_invoice();
19
+ $this->setCreatedInvoice($invoice);
20
+ return $this; // @see Mage_Sales_Model_Order_Invoice::capture()
21
+ }
22
+ $amountToCapture = $this->_formatAmount($invoice->getBaseGrandTotal());
23
+ $order = $this->getOrder();
24
+
25
+ // prepare parent transaction and its amount
26
+ $paidWorkaround = 0;
27
+ if (!$invoice->wasPayCalled())
28
+ {
29
+ $paidWorkaround = (float)$amountToCapture;
30
+ }
31
+ $this->_isCaptureFinal($paidWorkaround);
32
+
33
+ $this->_generateTransactionId(Mage_Sales_Model_Order_Payment_Transaction::TYPE_CAPTURE, $this->getAuthorizationTransaction());
34
+
35
+ Mage::dispatchEvent('sales_order_payment_capture', array('payment' => $this, 'invoice' => $invoice));
36
+
37
+ /**
38
+ * Fetch an update about existing transaction. It can determine whether the transaction can be paid
39
+ * Capture attempt will happen only when invoice is not yet paid and the transaction can be paid
40
+ */
41
+ if ($invoice->getTransactionId())
42
+ {
43
+ $this->getMethodInstance()->setStore($order->getStoreId())->fetchTransactionInfo($this, $invoice->getTransactionId());
44
+ }
45
+ $status = true;
46
+ if (!$invoice->getIsPaid() && !$this->getIsTransactionPending())
47
+ {
48
+ // attempt to capture: this can trigger "is_transaction_pending"
49
+ $this->getMethodInstance()->setStore($order->getStoreId())->capture($this, $amountToCapture);
50
+
51
+ $transaction = $this->_addTransaction(Mage_Sales_Model_Order_Payment_Transaction::TYPE_CAPTURE, $invoice, true);
52
+
53
+ if ($this->getIsTransactionPending())
54
+ {
55
+ $message = Mage::helper('sales')->__('Capturing amount of %s is pending approval on gateway.', $this->_formatPrice($amountToCapture));
56
+ $state = Mage_Sales_Model_Order::STATE_PAYMENT_REVIEW;
57
+ if ($this->getIsFraudDetected())
58
+ {
59
+ $status = 'fraud';
60
+ }
61
+ $invoice->setIsPaid(false);
62
+ }
63
+ else
64
+ { // normal online capture: invoice is marked as "paid"
65
+ $message = Mage::helper('sales')->__('Captured amount of %s online.', $this->_formatPrice($amountToCapture));
66
+ $state = Mage_Sales_Model_Order::STATE_PROCESSING;
67
+ $invoice->setIsPaid(true);
68
+ $this->_updateTotals(array('base_amount_paid_online' => $amountToCapture));
69
+ }
70
+ if ($order->isNominal())
71
+ {
72
+ $message = $this->_prependMessage(Mage::helper('sales')->__('Nominal order registered.'));
73
+ }
74
+ else
75
+ {
76
+ $message = $this->_prependMessage($message);
77
+ $message = $this->_appendTransactionToMessage($transaction, $message);
78
+ }
79
+ $order->setState($state, $status, $message);
80
+ $this->getMethodInstance()->processInvoice($invoice, $this); // should be deprecated
81
+ return $this;
82
+ }
83
+ Mage::throwException(Mage::helper('sales')->__('The transaction "%s" cannot be captured yet.', $invoice->getTransactionId()));
84
+ }
85
+ if($nVersion == 1400 || $nVersion == 1401)
86
+ {
87
+ if (is_null($invoice))
88
+ {
89
+ $invoice = $this->_invoice();
90
+ $this->setCreatedInvoice($invoice);
91
+ return $this; // @see Mage_Sales_Model_Order_Invoice::capture()
92
+ }
93
+ $amountToCapture = $this->_formatAmount($invoice->getBaseGrandTotal());
94
+
95
+ $paidWorkaround = 0;
96
+ if (!$invoice->wasPayCalled())
97
+ {
98
+ $paidWorkaround = (float)$amountToCapture;
99
+ }
100
+ $this->_isCaptureFinal($paidWorkaround);
101
+ $baseTransaction = false;
102
+ if ($invoice->getTransactionId())
103
+ {
104
+ $baseTransaction = $this->_lookupTransaction($invoice->getTransactionId());
105
+ }
106
+ else
107
+ {
108
+ $baseTransaction = $this->getAuthorizationTransaction();
109
+ }
110
+ $this->_generateTransactionId(Mage_Sales_Model_Order_Payment_Transaction::TYPE_CAPTURE, $baseTransaction);
111
+
112
+ Mage::dispatchEvent('sales_order_payment_capture', array('payment' => $this, 'invoice' => $invoice));
113
+
114
+ $this->getMethodInstance()
115
+ ->setStore($this->getOrder()->getStoreId())
116
+ ->capture($this, $amountToCapture);
117
+
118
+ // update transactions, set order state (order will close itself if required)
119
+ $transaction = $this->_addTransaction(Mage_Sales_Model_Order_Payment_Transaction::TYPE_CAPTURE, $invoice, true);
120
+ /**
121
+ * Check if payment transaction is under pending state.
122
+ * Gateway can accept peyment transaction but mark it as pending.
123
+ * We need hold such kind of orders
124
+ */
125
+ if ($this->getIsTransactionPending())
126
+ {
127
+ $message = Mage::helper('sales')->__('Amount of %s pending approval on gateway.', $this->_formatPrice($amountToCapture));
128
+ $message = $this->_prependMessage($message);
129
+ $message = $this->_appendTransactionToMessage($transaction, $message);
130
+ $status = $this->getTransactionPendingStatus() ? $this->getTransactionPendingStatus() : true;
131
+ $this->getOrder()->setState(Mage_Sales_Model_Order::STATE_HOLDED, $status, $message);
132
+ $invoice->setIsPaid(false);
133
+ }
134
+ else
135
+ {
136
+ $this->_updateTotals(array('base_amount_paid_online' => $amountToCapture));
137
+ $message = Mage::helper('sales')->__('Captured amount of %s online.', $this->_formatPrice($amountToCapture));
138
+ $message = $this->_prependMessage($message);
139
+ $message = $this->_appendTransactionToMessage($transaction, $message);
140
+ $this->getOrder()->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true, $message);
141
+ $invoice->setIsPaid(true);
142
+ }
143
+
144
+ $this->getMethodInstance()->processInvoice($invoice, $this); // should be deprecated
145
+ return $this;
146
+ }
147
+ if($nVersion == 1324 || $nVersion == 1330)
148
+ {
149
+ if (is_null($invoice))
150
+ {
151
+ $invoice = $this->_invoice();
152
+ }
153
+
154
+ Mage::dispatchEvent('sales_order_payment_capture', array('payment' => $this, 'invoice' => $invoice));
155
+
156
+ $this->getMethodInstance()
157
+ ->setStore($this->getOrder()->getStoreId())
158
+ ->capture($this, sprintf('%.2f', $invoice->getBaseGrandTotal()));
159
+ if($this->getIsInvoicePaid())
160
+ {
161
+ $invoice->setIsPaid(true);
162
+ }
163
+ $this->getMethodInstance()->processInvoice($invoice, $this);
164
+
165
+ return $this;
166
+ }
167
+ }
168
+
169
+ /**
170
+ * Authorize or authorize and capture payment on gateway, if applicable
171
+ * This method is supposed to be called only when order is placed
172
+ *
173
+ * @return Mage_Sales_Model_Order_Payment
174
+ */
175
+ public function place()
176
+ {
177
+ $nVersion = Mage::getModel('tpg/direct')->getVersion();
178
+ $paymentAction = Mage::getModel('tpg/direct')->getConfigData('payment_action');
179
+
180
+ if($paymentAction == Mage_Paygate_Model_Authorizenet::ACTION_AUTHORIZE_CAPTURE)
181
+ {
182
+ $ircOrderStatus = "irc_paid";
183
+ }
184
+ else if($paymentAction == Mage_Paygate_Model_Authorizenet::ACTION_AUTHORIZE)
185
+ {
186
+ $ircOrderStatus = "irc_preauth";
187
+ }
188
+ else
189
+ {
190
+ $ircOrderStatus = null;
191
+ }
192
+
193
+ if($nVersion >= 1411 || $nVersion == 1410 || $nVersion == 1401 || $nVersion == 1400)
194
+ {
195
+ Mage::dispatchEvent('sales_order_payment_place_start', array('payment' => $this));
196
+ $order = $this->getOrder();
197
+
198
+ $this->setAmountOrdered($order->getTotalDue());
199
+ $this->setBaseAmountOrdered($order->getBaseTotalDue());
200
+ $this->setShippingAmount($order->getShippingAmount());
201
+ $this->setBaseShippingAmount($order->getBaseShippingAmount());
202
+
203
+ $methodInstance = $this->getMethodInstance();
204
+ $methodInstance->setStore($order->getStoreId());
205
+
206
+ $orderState = Mage_Sales_Model_Order::STATE_NEW;
207
+ $orderStatus= false;
208
+
209
+ $stateObject = new Varien_Object();
210
+
211
+ /**
212
+ * Do order payment validation on payment method level
213
+ */
214
+ $methodInstance->validate();
215
+ $action = $methodInstance->getConfigPaymentAction();
216
+ if ($action)
217
+ {
218
+ if ($methodInstance->isInitializeNeeded())
219
+ {
220
+ /**
221
+ * For method initialization we have to use original config value for payment action
222
+ */
223
+ $methodInstance->initialize($methodInstance->getConfigData('payment_action'), $stateObject);
224
+ }
225
+ else
226
+ {
227
+ $orderState = Mage_Sales_Model_Order::STATE_PROCESSING;
228
+ switch ($action)
229
+ {
230
+ case Mage_Payment_Model_Method_Abstract::ACTION_AUTHORIZE:
231
+ $this->_authorize(true, $order->getBaseTotalDue()); // base amount will be set inside
232
+ $this->setAmountAuthorized($order->getTotalDue());
233
+ break;
234
+ case Mage_Payment_Model_Method_Abstract::ACTION_AUTHORIZE_CAPTURE:
235
+ $this->setAmountAuthorized($order->getTotalDue());
236
+ $this->setBaseAmountAuthorized($order->getBaseTotalDue());
237
+ $this->capture(null);
238
+ break;
239
+ default:
240
+ break;
241
+ }
242
+ }
243
+ }
244
+
245
+ if($nVersion >= 1411 || $nVersion == 1410)
246
+ {
247
+ $this->_createBillingAgreement();
248
+ $orderStateHelper = Mage_Sales_Model_Order::STATE_PAYMENT_REVIEW;
249
+ }
250
+ else
251
+ {
252
+ $orderStateHelper = Mage_Sales_Model_Order::STATE_HOLDED;
253
+ }
254
+
255
+ $orderIsNotified = null;
256
+ if ($stateObject->getState() && $stateObject->getStatus())
257
+ {
258
+ $orderState = $stateObject->getState();
259
+ if($ircOrderStatus == null)
260
+ {
261
+ $orderStatus = $stateObject->getStatus();
262
+ }
263
+ else
264
+ {
265
+ $orderStatus = $ircOrderStatus;
266
+ }
267
+ $orderIsNotified = $stateObject->getIsNotified();
268
+ }
269
+ else if($order->getIsThreeDSecurePending())
270
+ {
271
+ $orderState = 'pending_payment';
272
+ $orderStatus = 'irc_pending_threed_secure';
273
+ $message = '3D Secure authentication need to be completed';
274
+ $orderIsNotified = false;
275
+ }
276
+ else if($order->getIsHostedPaymentPending())
277
+ {
278
+ $order->setState(Mage_Sales_Model_Order::STATE_PENDING_PAYMENT, true)->save();
279
+ $orderStateHelper = Mage_Sales_Model_Order::STATE_PENDING_PAYMENT;
280
+ $orderState = 'pending_payment';
281
+ $orderStatus = 'irc_pending_hosted_payment';
282
+ $message = 'Hosted Payment need to be completed';
283
+ $orderIsNotified = false;
284
+ }
285
+ else
286
+ {
287
+ if($ircOrderStatus == null)
288
+ {
289
+ $orderStatus = $methodInstance->getConfigData('order_status');
290
+ if (!$orderStatus || $order->getIsVirtual())
291
+ {
292
+ $orderStatus = $order->getConfig()->getStateDefaultStatus($orderState);
293
+ }
294
+ }
295
+ else
296
+ {
297
+ $orderStatus = $ircOrderStatus;
298
+ }
299
+ }
300
+
301
+ $isCustomerNotified = (null !== $orderIsNotified) ? $orderIsNotified : $order->getCustomerNoteNotify();
302
+ //$message = $order->getCustomerNote();
303
+ if(!$order->getIsThreeDSecurePending() &&
304
+ !$order->getIsHostedPaymentPending())
305
+ {
306
+ $message = $order->getCustomerNote();
307
+ }
308
+
309
+ // add message if order was put into review during authorization or capture
310
+ //if ($order->getState() == Mage_Sales_Model_Order::STATE_PAYMENT_REVIEW)$orderState
311
+ if ($order->getState() == $orderStateHelper)
312
+ {
313
+ if ($message)
314
+ {
315
+ $order->addStatusToHistory($order->getStatus(), $message, $isCustomerNotified);
316
+ }
317
+
318
+ if($nVersion >= 1401 || $nVersion == 1400)
319
+ {
320
+ $order->setHoldBeforeState($orderState);
321
+ $order->setHoldBeforeStatus($orderStatus);
322
+ }
323
+ }
324
+
325
+ // add message to history if order state already declared
326
+ elseif ($order->getState() && ($orderStatus !== $order->getStatus() || $message))
327
+ {
328
+ $order->setState($orderState, $orderStatus, $message, $isCustomerNotified);
329
+ }
330
+ // set order state
331
+ elseif (($order->getState() != $orderState) || ($order->getStatus() != $orderStatus) || $message)
332
+ {
333
+ $order->setState($orderState, $orderStatus, $message, $isCustomerNotified);
334
+ }
335
+
336
+ Mage::dispatchEvent('sales_order_payment_place_end', array('payment' => $this));
337
+
338
+ return $this;
339
+ }
340
+ if($nVersion == 1324 || $nVersion == 1330)
341
+ {
342
+ Mage::dispatchEvent('sales_order_payment_place_start', array('payment' => $this));
343
+
344
+ $this->setAmountOrdered($this->getOrder()->getTotalDue());
345
+ $this->setBaseAmountOrdered($this->getOrder()->getBaseTotalDue());
346
+
347
+ $this->setShippingAmount($this->getOrder()->getShippingAmount());
348
+ $this->setBaseShippingAmount($this->getOrder()->getBaseShippingAmount());
349
+
350
+ $methodInstance = $this->getMethodInstance()->setStore($this->getOrder()->getStoreId());
351
+
352
+ $orderState = Mage_Sales_Model_Order::STATE_NEW;
353
+ $orderStatus= false;
354
+
355
+ $stateObject = new Varien_Object();
356
+
357
+ /**
358
+ * validating payment method again
359
+ */
360
+ $methodInstance->validate();
361
+ if ($action = $methodInstance->getConfigData('payment_action')) {
362
+ /**
363
+ * Run action declared for payment method in configuration
364
+ */
365
+
366
+ if ($methodInstance->isInitializeNeeded()) {
367
+ $methodInstance->initialize($action, $stateObject);
368
+ } else {
369
+ switch ($action) {
370
+ case Mage_Payment_Model_Method_Abstract::ACTION_AUTHORIZE:
371
+ case Mage_Paypal_Model_Api_Abstract::PAYMENT_TYPE_AUTH:
372
+ $methodInstance->authorize($this, $this->getOrder()->getBaseTotalDue());
373
+
374
+ $this->setAmountAuthorized($this->getOrder()->getTotalDue());
375
+ $this->setBaseAmountAuthorized($this->getOrder()->getBaseTotalDue());
376
+
377
+ $orderState = Mage_Sales_Model_Order::STATE_PROCESSING;
378
+ break;
379
+ case Mage_Payment_Model_Method_Abstract::ACTION_AUTHORIZE_CAPTURE:
380
+ case Mage_Paypal_Model_Api_Abstract::PAYMENT_TYPE_SALE:
381
+ $invoice = $this->_invoice();
382
+
383
+ $this->setAmountAuthorized($this->getOrder()->getTotalDue());
384
+ $this->setBaseAmountAuthorized($this->getOrder()->getBaseTotalDue());
385
+
386
+ $orderState = $this->getOrder()->getIsVirtual()
387
+ ? Mage_Sales_Model_Order::STATE_COMPLETE
388
+ : Mage_Sales_Model_Order::STATE_PROCESSING;
389
+ break;
390
+ default:
391
+ break;
392
+ }
393
+ }
394
+ }
395
+
396
+ $orderIsNotified = null;
397
+ if ($stateObject->getState() && $stateObject->getStatus())
398
+ {
399
+ $orderState = $stateObject->getState();
400
+ if($ircOrderStatus == null)
401
+ {
402
+ $orderStatus = $stateObject->getStatus();
403
+ }
404
+ else
405
+ {
406
+ $orderStatus = $ircOrderStatus;
407
+ }
408
+ $orderIsNotified = $stateObject->getIsNotified();
409
+ }
410
+ else
411
+ {
412
+ /*
413
+ * this flag will set if the order went to as authorization under fraud service for payflowpro
414
+ */
415
+ if ($this->getFraudFlag())
416
+ {
417
+ $orderStatus = $methodInstance->getConfigData('fraud_order_status');
418
+ $orderState = Mage_Sales_Model_Order::STATE_HOLDED;
419
+ }
420
+ else
421
+ {
422
+ $orderStatus = $methodInstance->getConfigData('order_status');
423
+ }
424
+
425
+ if($ircOrderStatus == null)
426
+ {
427
+ if (!$orderStatus || $this->getOrder()->getIsVirtual())
428
+ {
429
+ $orderStatus = $this->getOrder()->getConfig()->getStateDefaultStatus($orderState);
430
+ }
431
+ }
432
+ else
433
+ {
434
+ $orderStatus = $ircOrderStatus;
435
+ }
436
+ }
437
+
438
+ $this->getOrder()->setState($orderState);
439
+ $this->getOrder()->addStatusToHistory(
440
+ $orderStatus,
441
+ $this->getOrder()->getCustomerNote(),
442
+ (null !== $orderIsNotified ? $orderIsNotified : $this->getOrder()->getCustomerNoteNotify())
443
+ );
444
+
445
+ Mage::dispatchEvent('sales_order_payment_place_end', array('payment' => $this));
446
+
447
+ return $this;
448
+ }
449
+ }
450
+
451
+ /**
452
+ * Create transaction,
453
+ * prepare its insertion into hierarchy and add its information to payment and comments
454
+ *
455
+ * To add transactions and related information,
456
+ * the following information should be set to payment before processing:
457
+ * - transaction_id
458
+ * - is_transaction_closed (optional) - whether transaction should be closed or open (closed by default)
459
+ * - parent_transaction_id (optional)
460
+ * - should_close_parent_transaction (optional) - whether to close parent transaction (closed by default)
461
+ *
462
+ * If the sales document is specified, it will be linked to the transaction as related for future usage.
463
+ * Currently transaction ID is set into the sales object
464
+ * This method writes the added transaction ID into last_trans_id field of the payment object
465
+ *
466
+ * To make sure transaction object won't cause trouble before saving, use $failsafe = true
467
+ *
468
+ * @param string $type
469
+ * @param Mage_Sales_Model_Abstract $salesDocument
470
+ * @param bool $failsafe
471
+ * @return null|Mage_Sales_Model_Order_Payment_Transaction
472
+ */
473
+ protected function _addTransaction($type, $salesDocument = null, $failsafe = false)
474
+ {
475
+ $model = Mage::getModel('tpg/direct');
476
+ $nVersion = $model->getVersion();
477
+
478
+ if($nVersion >= 1501)
479
+ {
480
+ if ($this->getSkipTransactionCreation())
481
+ {
482
+ $this->unsTransactionId();
483
+ return null;
484
+ }
485
+ }
486
+
487
+ // look for set transaction ids
488
+ $transactionId = $this->getTransactionId();
489
+ if (null !== $transactionId)
490
+ {
491
+ // set transaction parameters
492
+ $transaction = false;
493
+ if ($this->getOrder()->getId())
494
+ {
495
+ $transaction = $this->_lookupTransaction($transactionId);
496
+ }
497
+
498
+ if (!$transaction)
499
+ {
500
+ $transaction = Mage::getModel('sales/order_payment_transaction')->setTxnId($transactionId);
501
+ }
502
+ $transaction
503
+ ->setOrderPaymentObject($this)
504
+ ->setTxnType($type)
505
+ ->isFailsafe($failsafe);
506
+
507
+ if ($this->hasIsTransactionClosed())
508
+ {
509
+ $transaction->setIsClosed((int)$this->getIsTransactionClosed());
510
+ }
511
+
512
+ //set transaction addition information
513
+ if ($this->_transactionAdditionalInfo)
514
+ {
515
+ foreach ($this->_transactionAdditionalInfo as $key => $value)
516
+ {
517
+ $transaction->setAdditionalInformation($key, $value);
518
+ }
519
+ }
520
+
521
+ // link with sales entities
522
+ $this->setLastTransId($transactionId);
523
+ $this->setCreatedTransaction($transaction);
524
+ $this->getOrder()->addRelatedObject($transaction);
525
+ if ($salesDocument && $salesDocument instanceof Mage_Sales_Model_Abstract)
526
+ {
527
+ $salesDocument->setTransactionId($transactionId);
528
+ // TODO: linking transaction with the sales document
529
+ }
530
+
531
+ // link with parent transaction
532
+ $parentTransactionId = $this->getParentTransactionId();
533
+
534
+ if ($parentTransactionId)
535
+ {
536
+ $transaction->setParentTxnId($parentTransactionId);
537
+ if ($this->getShouldCloseParentTransaction())
538
+ {
539
+ $parentTransaction = $this->_lookupTransaction($parentTransactionId);
540
+ if ($parentTransaction)
541
+ {
542
+ if (!$parentTransaction->getIsClosed())
543
+ {
544
+ $parentTransaction->isFailsafe($failsafe)->close(false);
545
+ }
546
+ $this->getOrder()->addRelatedObject($parentTransaction);
547
+ }
548
+ }
549
+ }
550
+ return $transaction;
551
+ }
552
+ }
553
+ }
app/code/local/PayVector/Sales/Model/Service/Quote.php ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PayVector_Sales_Model_Service_Quote extends Mage_Sales_Model_Service_Quote
4
+ {
5
+ public function submitOrder()
6
+ {
7
+ $nVersion = Mage::getModel('tpg/direct')->getVersion();
8
+
9
+ if($nVersion >= 1410)
10
+ {
11
+ if ($this->_quote->getPayment()->getMethodInstance()->getCode() != 'tpg')
12
+ {
13
+ return parent::submitOrder();
14
+ }
15
+
16
+ $this->_deleteNominalItems();
17
+ $this->_validate();
18
+ $quote = $this->_quote;
19
+ $isVirtual = $quote->isVirtual();
20
+
21
+ $transaction = Mage::getModel('core/resource_transaction');
22
+ if ($quote->getCustomerId())
23
+ {
24
+ $transaction->addObject($quote->getCustomer());
25
+ }
26
+ $transaction->addObject($quote);
27
+
28
+ $quote->reserveOrderId();
29
+ if ($isVirtual)
30
+ {
31
+ $order = $this->_convertor->addressToOrder($quote->getBillingAddress());
32
+ }
33
+ else
34
+ {
35
+ $order = $this->_convertor->addressToOrder($quote->getShippingAddress());
36
+ }
37
+ $order->setBillingAddress($this->_convertor->addressToOrderAddress($quote->getBillingAddress()));
38
+
39
+ if (!$isVirtual)
40
+ {
41
+ $order->setShippingAddress($this->_convertor->addressToOrderAddress($quote->getShippingAddress()));
42
+ }
43
+ $order->setPayment($this->_convertor->paymentToOrderPayment($quote->getPayment()));
44
+
45
+ foreach ($this->_orderData as $key => $value)
46
+ {
47
+ $order->setData($key, $value);
48
+ }
49
+
50
+ foreach ($quote->getAllItems() as $item)
51
+ {
52
+ $orderItem = $this->_convertor->itemToOrderItem($item);
53
+ if ($item->getParentItem())
54
+ {
55
+ $orderItem->setParentItem($order->getItemByQuoteItemId($item->getParentItem()->getId()));
56
+ }
57
+ $order->addItem($orderItem);
58
+ }
59
+ // make sure the cart is not emptied
60
+ //$quote->setIsActive(false);
61
+
62
+ $transaction->addObject($order);
63
+ $transaction->addCommitCallback(array($order, 'place'));
64
+ $transaction->addCommitCallback(array($order, 'save'));
65
+
66
+ /**
67
+ * We can use configuration data for declare new order status
68
+ */
69
+ Mage::dispatchEvent('checkout_type_onepage_save_order', array('order'=>$order, 'quote'=>$quote));
70
+ Mage::dispatchEvent('sales_model_service_quote_submit_before', array('order'=>$order, 'quote'=>$quote));
71
+ try
72
+ {
73
+ $transaction->save();
74
+ Mage::dispatchEvent('sales_model_service_quote_submit_success', array('order'=>$order, 'quote'=>$quote));
75
+
76
+ // need to store the orderID in the session for the callback from an external page
77
+ Mage::getSingleton('checkout/session')->setTpgOrderId($order->getId());
78
+
79
+ }
80
+ catch (Exception $e)
81
+ {
82
+ Mage::logException($e);
83
+ Mage::dispatchEvent('sales_model_service_quote_submit_failure', array('order'=>$order, 'quote'=>$quote));
84
+ throw $e;
85
+ }
86
+ Mage::dispatchEvent('sales_model_service_quote_submit_after', array('order'=>$order, 'quote'=>$quote));
87
+ $this->_order = $order;
88
+
89
+ return $order;
90
+ }
91
+ }
92
+ }
app/code/local/PayVector/Sales/etc/config.xml ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <PayVector_Sales>
5
+ <version>0.0.1</version>
6
+ </PayVector_Sales>
7
+ </modules>
8
+ <global>
9
+ <models>
10
+ <sales>
11
+ <rewrite>
12
+ <order>PayVector_Sales_Model_Order</order>
13
+ <order_invoice>PayVector_Sales_Model_Order_Invoice</order_invoice>
14
+ <order_payment>PayVector_Sales_Model_Order_Payment</order_payment>
15
+ <service_quote>PayVector_Sales_Model_Service_Quote</service_quote>
16
+ </rewrite>
17
+ </sales>
18
+ </models>
19
+ <sales>
20
+ <order>
21
+ <statuses>
22
+ <irc_paid translate="label">
23
+ <label>PayVector - Successful Payment</label>
24
+ </irc_paid>
25
+ <irc_pending_threed_secure translate="label">
26
+ <label>PayVector - Pending 3D Secure</label>
27
+ </irc_pending_threed_secure>
28
+ <irc_failed_threed_secure translate="label">
29
+ <label>PayVector - Failed 3D Secure</label>
30
+ </irc_failed_threed_secure>
31
+ <irc_pending translate="label">
32
+ <label>PayVector - Pending Hosted Payment</label>
33
+ </irc_pending>
34
+ <irc_pending_hosted_payment translate="label">
35
+ <label>PayVector - Pending Hosted Payment</label>
36
+ </irc_pending_hosted_payment>
37
+ <irc_failed_hosted_payment translate="label">
38
+ <label>PayVector - Failed Hosted Payment</label>
39
+ </irc_failed_hosted_payment>
40
+ <irc_refunded translate="label">
41
+ <label>PayVector - Payment Refunded</label>
42
+ </irc_refunded>
43
+ <irc_voided translate="label">
44
+ <label>PayVector - Payment Voided</label>
45
+ </irc_voided>
46
+ <irc_preauth translate="label">
47
+ <label>PayVector - Payment PreAuthorized</label>
48
+ </irc_preauth>
49
+ <irc_collected translate="label">
50
+ <label>PayVector - Payment Collected</label>
51
+ </irc_collected>
52
+ </statuses>
53
+ </order>
54
+ </sales>
55
+ </global>
56
+ </config>
app/code/local/PayVector/Tpg/Block/Adminhtml/Sales/Order/Payment.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class PayVector_Tpg_Block_Adminhtml_Sales_Order_Payment extends Mage_Adminhtml_Block_Sales_Order_Payment
3
+ {
4
+ public function setPayment($payment)
5
+ {
6
+ parent::setPayment($payment);
7
+ $paymentInfoBlock = Mage::helper('payment')->getInfoBlock($payment);
8
+
9
+ if ($payment->getMethod() == 'tpg')
10
+ {
11
+
12
+ $paymentInfoBlock->setTemplate('payment/info/cc_tpg.phtml');
13
+ }
14
+
15
+ $this->setChild('info', $paymentInfoBlock);
16
+ $this->setData('payment', $payment);
17
+ return $this;
18
+ }
19
+
20
+ protected function _toHtml()
21
+ {
22
+ return $this->getChildHtml('info');
23
+ }
24
+
25
+ }
app/code/local/PayVector/Tpg/Block/Error.php ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PayVector_Tpg_Block_Error extends Mage_Core_Block_Template
4
+ {
5
+
6
+ }
app/code/local/PayVector/Tpg/Block/Form.php ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class PayVector_Tpg_Block_Form extends Mage_Payment_Block_Form
3
+ {
4
+ protected function _construct()
5
+ {
6
+ parent::_construct();
7
+ $this->setTemplate('tpg/form.phtml');
8
+ }
9
+
10
+ protected function _getConfig()
11
+ {
12
+ return Mage::getSingleton('payment/config');
13
+ }
14
+
15
+ /**
16
+ * Returns an array of credit card expiry months
17
+ *
18
+ * @return unknown
19
+ */
20
+ public function getCcMonths()
21
+ {
22
+ $months = $this->getData('cc_months');
23
+
24
+ if (is_null($months))
25
+ {
26
+ $months = array();
27
+ $monthList = $this->_getConfig()->getMonths();
28
+
29
+ $months[0] = $this->__('Month');
30
+ for ($nCount = 1; $nCount <= sizeof($monthList); $nCount++)
31
+ {
32
+ $value = $nCount;
33
+ if($value < 10)
34
+ {
35
+ $value = '0'.$value;
36
+ }
37
+ $months[$value] = $monthList[$nCount];
38
+ }
39
+
40
+ $this->setData('cc_months', $months);
41
+ }
42
+
43
+ return $months;
44
+ }
45
+
46
+ /**
47
+ * Returns an array of credit card expiry years
48
+ *
49
+ * @return unknown
50
+ */
51
+ public function getCcYears()
52
+ {
53
+ $years = $this->getData('cc_years');
54
+
55
+ if (is_null($years))
56
+ {
57
+ $years = array();
58
+ $first = date("Y");
59
+
60
+ $years = array($this->__('Year'));
61
+ for ($index = 0; $index < 10; $index++)
62
+ {
63
+ $year = $first + $index;
64
+ $yearPartial = substr($year, 2);
65
+ $years[$yearPartial] = $year;
66
+ }
67
+ $this->setData('cc_years', $years);
68
+ }
69
+
70
+ return $years;
71
+ }
72
+
73
+ /**
74
+ * Returns an array credit card start months
75
+ *
76
+ * @return unknown
77
+ */
78
+ public function getCcStartMonths()
79
+ {
80
+ $months = $this->getData('cc_ss_start_month');
81
+
82
+ if (is_null($months))
83
+ {
84
+ $months = array();
85
+ $monthList = $this->_getConfig()->getMonths();
86
+
87
+ for ($nCount = 1; $nCount <= sizeof($monthList); $nCount++)
88
+ {
89
+ $value = $nCount;
90
+ if($value < 10)
91
+ {
92
+ $value = '0'.$value;
93
+ }
94
+ $months[$value] = $monthList[$nCount];
95
+ }
96
+ $this->setData('cc_ss_start_month', $months);
97
+ }
98
+
99
+ return $months;
100
+ }
101
+
102
+ /**
103
+ * Returns an array of credit card start years
104
+ *
105
+ * @return unknown
106
+ */
107
+ public function getCcStartYears()
108
+ {
109
+ $years = $this->getData('cc_start_years');
110
+
111
+ if(is_null($years))
112
+ {
113
+ $years = array();
114
+ $first = date("Y");
115
+
116
+ for ($index = 0; $index < 10; $index++)
117
+ {
118
+ $year = $first - $index;
119
+ $yearPartial = substr($year, 2);
120
+ $years[$yearPartial] = $year;
121
+ }
122
+ $this->setData('cc_start_years', $years);
123
+ }
124
+
125
+ return $years;
126
+ }
127
+ }
app/code/local/PayVector/Tpg/Block/Info.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PayVector_Tpg_Block_Info extends Mage_Payment_Block_Info
4
+ {
5
+ /**
6
+ * Init default template for block
7
+ */
8
+ protected function _construct()
9
+ {
10
+ parent::_construct();
11
+ $this->setTemplate('tpg/info.phtml');
12
+ }
13
+
14
+ public function getCcNumber()
15
+ {
16
+ return $this->getInfo()->decrypt($this->getInfo()->getCcNumberEnc());
17
+ }
18
+
19
+ public function getCcCid()
20
+ {
21
+ return $this->getInfo()->decrypt($this->getInfo()->getCcCidEnc());
22
+ }
23
+
24
+ /**
25
+ * Retrieve CC expiration date
26
+ *
27
+ * @return Zend_Date
28
+ */
29
+ public function getCcExpDate()
30
+ {
31
+ $date = Mage::app()->getLocale()->date(0);
32
+ $date->setYear($this->getInfo()->getCcExpYear());
33
+ $date->setMonth($this->getInfo()->getCcExpMonth());
34
+ return $date;
35
+ }
36
+ }
app/code/local/PayVector/Tpg/Block/Redirect.php ADDED
@@ -0,0 +1,262 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PayVector_Tpg_Block_Redirect extends Mage_Core_Block_Abstract
4
+ {
5
+ /**
6
+ * Build the redirect form to be submitted to the hosted payment form or the transparent redirect page
7
+ *
8
+ */
9
+ protected function _toHtml()
10
+ {
11
+ $model = Mage::getModel('tpg/direct');
12
+ $pmPaymentMode = $model->getConfigData('mode');
13
+ switch($pmPaymentMode)
14
+ {
15
+ case PayVector_Tpg_Model_Source_PaymentMode::PAYMENT_MODE_HOSTED_PAYMENT_FORM:
16
+ $html = self::_redirectToHostedPaymentForm();
17
+ break;
18
+ case PayVector_Tpg_Model_Source_PaymentMode::PAYMENT_MODE_TRANSPARENT_REDIRECT:
19
+ $html = self::_redirectToTransparentRedirect();
20
+ break;
21
+ }
22
+
23
+ return $html;
24
+ }
25
+
26
+ /**
27
+ * Build the redirect form for the Hosted Payment Form payment type
28
+ *
29
+ * @return string
30
+ */
31
+ private function _redirectToHostedPaymentForm()
32
+ {
33
+ $model = Mage::getModel('tpg/direct');
34
+ $szActionURL = $model->getConfigData('hostedpaymentactionurl');
35
+ $cookies = Mage::getSingleton('core/cookie')->get();
36
+ $checkoutSession = Mage::getSingleton('checkout/session');
37
+ $szServerResultURLCookieVariables = '';
38
+ $szServerResultURLFormVariables = '';
39
+ $szServerResultURLQueryStringVariables = '';
40
+
41
+ // create a Magento form
42
+ $form = new Varien_Data_Form();
43
+ $form->setAction($szActionURL)
44
+ ->setId('HostedPaymentForm')
45
+ ->setName('HostedPaymentForm')
46
+ ->setMethod('POST')
47
+ ->setUseContainer(true);
48
+
49
+ $form->addField("HashDigest", 'hidden', array('name' => "HashDigest", 'value' => $checkoutSession->getHashdigest()));
50
+ $form->addField("MerchantID", 'hidden', array('name' => "MerchantID", 'value' => $checkoutSession->getMerchantid()));
51
+ $form->addField("Amount", 'hidden', array('name' => "Amount", 'value' => $checkoutSession->getAmount()));
52
+ $form->addField("CurrencyCode", 'hidden', array('name' => "CurrencyCode", 'value' => $checkoutSession->getCurrencycode()));
53
+ $form->addField("EchoCardType", 'hidden', array('name' => "EchoCardType", 'value' => $checkoutSession->getEchoCardType()));
54
+ $form->addField("OrderID", 'hidden', array('name' => "OrderID", 'value' => $checkoutSession->getOrderid()));
55
+ $form->addField("TransactionType", 'hidden', array('name' => "TransactionType", 'value' => $checkoutSession->getTransactiontype()));
56
+ $form->addField("TransactionDateTime", 'hidden', array('name' => "TransactionDateTime", 'value' => $checkoutSession->getTransactiondatetime()));
57
+ $form->addField("CallbackURL", 'hidden', array('name' => "CallbackURL", 'value' => $checkoutSession->getCallbackurl()));
58
+ $form->addField("OrderDescription", 'hidden', array('name' => "OrderDescription", 'value' => $checkoutSession->getOrderdescription()));
59
+ $form->addField("CustomerName", 'hidden', array('name' => "CustomerName", 'value' => $checkoutSession->getCustomername()));
60
+ $form->addField("Address1", 'hidden', array('name' => "Address1", 'value' => $checkoutSession->getAddress1()));
61
+ $form->addField("Address2", 'hidden', array('name' => "Address2", 'value' => $checkoutSession->getAddress2()));
62
+ $form->addField("Address3", 'hidden', array('name' => "Address3", 'value' => $checkoutSession->getAddress3()));
63
+ $form->addField("Address4", 'hidden', array('name' => "Address4", 'value' => $checkoutSession->getAddress4()));
64
+ $form->addField("City", 'hidden', array('name' => "City", 'value' => $checkoutSession->getCity()));
65
+ $form->addField("State", 'hidden', array('name' => "State", 'value' => $checkoutSession->getState()));
66
+ $form->addField("PostCode", 'hidden', array('name' => "PostCode", 'value' => $checkoutSession->getPostcode()));
67
+ $form->addField("CountryCode", 'hidden', array('name' => "CountryCode", 'value' => $checkoutSession->getCountrycode()));
68
+ $form->addField("CV2Mandatory", 'hidden', array('name' => "CV2Mandatory", 'value' => $checkoutSession->getCv2mandatory()));
69
+ $form->addField("Address1Mandatory", 'hidden', array('name' => "Address1Mandatory", 'value' => $checkoutSession->getAddress1mandatory()));
70
+ $form->addField("CityMandatory", 'hidden', array('name' => "CityMandatory", 'value' => $checkoutSession->getCitymandatory()));
71
+ $form->addField("PostCodeMandatory", 'hidden', array('name' => "PostCodeMandatory", 'value' => $checkoutSession->getPostcodemandatory()));
72
+ $form->addField("StateMandatory", 'hidden', array('name' => "StateMandatory", 'value' => $checkoutSession->getStatemandatory()));
73
+ $form->addField("CountryMandatory", 'hidden', array('name' => "CountryMandatory", 'value' => $checkoutSession->getCountrymandatory()));
74
+ $form->addField("ResultDeliveryMethod", 'hidden', array('name' => "ResultDeliveryMethod", 'value' => $checkoutSession->getResultdeliverymethod()));
75
+ $form->addField("ServerResultURL", 'hidden', array('name' => "ServerResultURL", 'value' => $checkoutSession->getServerresulturl()));
76
+ $form->addField("PaymentFormDisplaysResult", 'hidden', array('name' => "PaymentFormDisplaysResult", 'value' => $checkoutSession->getPaymentformdisplaysresult()));
77
+ $form->addField("ServerResultURLCookieVariables", 'hidden', array('name' => "ServerResultURLCookieVariables", 'value' => $checkoutSession->getServerresulturlcookievariables()));
78
+ $form->addField("ServerResultURLFormVariables", 'hidden', array('name' => "ServerResultURLFormVariables", 'value' => $checkoutSession->getServerresulturlformvariables()));
79
+ $form->addField("ServerResultURLQueryStringVariables", 'hidden', array('name' => "ServerResultURLQueryStringVariables", 'value' => $checkoutSession->getServerresulturlquerystringvariables()));
80
+
81
+ // reset the session items
82
+ $checkoutSession
83
+ ->setHashdigest(null)
84
+ ->setMerchantid(null)
85
+ ->setAmount(null)
86
+ ->setCurrencycode(null)
87
+ ->setEchoCardType(null)
88
+ ->setOrderid(null)
89
+ ->setTransactiontype(null)
90
+ ->setTransactiondatetime(null)
91
+ ->setCallbackurl(null)
92
+ ->setOrderdescription(null)
93
+ ->setCustomername(null)
94
+ ->setAddress1(null)
95
+ ->setAddress2(null)
96
+ ->setAddress3(null)
97
+ ->setAddress4(null)
98
+ ->setCity(null)
99
+ ->setState(null)
100
+ ->setPostcode(null)
101
+ ->setCountrycode(null)
102
+ ->setCv2mandatory(null)
103
+ ->setAddress1mandatory(null)
104
+ ->setCitymandatory(null)
105
+ ->setPostcodemandatory(null)
106
+ ->setStatemandatory(null)
107
+ ->setCountrymandatory(null)
108
+ ->setResultdeliverymethod(null)
109
+ ->setServerresulturl(null)
110
+ ->setPaymentformdisplaysresult(null)
111
+ ->setServerresulturlcookievariables(null)
112
+ ->setServerresulturlformvariables(null)
113
+ ->setServerresulturlquerystringvariables(null);
114
+
115
+ $html = '<html><body>';
116
+ $html .= $this->__('You will be redirected to a secure payment page in a few seconds.');
117
+ $html .= $form->toHtml();
118
+ $html .= '<script type="text/javascript">document.getElementById("HostedPaymentForm").submit();</script>';
119
+ $html .= '</body></html>';
120
+
121
+ return $html;
122
+ }
123
+
124
+ /**
125
+ * Build the redirect form for the Transparent Redirect payment type
126
+ *
127
+ * @return string
128
+ */
129
+ private function _redirectToTransparentRedirect()
130
+ {
131
+ $model = Mage::getModel('tpg/direct');
132
+ $szActionURL = $model->getConfigData('transparentredirectactionurl');
133
+ $szPaRes = Mage::getSingleton('checkout/session')->getPares();
134
+
135
+ if(isset($szPaRes))
136
+ {
137
+ $html = self::_submitPaRes($szActionURL);
138
+ }
139
+ else
140
+ {
141
+ $html = self::_submitTransaction($szActionURL);
142
+ }
143
+
144
+ return $html;
145
+ }
146
+
147
+ /**
148
+ * Build the submit
149
+ *
150
+ * @param string $szActionURL
151
+ * @return string
152
+ */
153
+ private function _submitTransaction($szActionURL)
154
+ {
155
+ // create a Magento form
156
+ $form = new Varien_Data_Form();
157
+ $form->setAction($szActionURL)
158
+ ->setId('TransparentRedirectForm')
159
+ ->setName('TransparentRedirectForm')
160
+ ->setMethod('POST')
161
+ ->setUseContainer(true);
162
+
163
+ $form->addField("HashDigest", 'hidden', array('name' => "HashDigest", 'value' => Mage::getSingleton('checkout/session')->getHashdigest()));
164
+ $form->addField("MerchantID", 'hidden', array('name' => "MerchantID", 'value' => Mage::getSingleton('checkout/session')->getMerchantid()));
165
+ $form->addField("Amount", 'hidden', array('name' => "Amount", 'value' => Mage::getSingleton('checkout/session')->getAmount()));
166
+ $form->addField("CurrencyCode", 'hidden', array('name' => "CurrencyCode", 'value' => Mage::getSingleton('checkout/session')->getCurrencycode()));
167
+ $form->addField("OrderID", 'hidden', array('name' => "OrderID", 'value' => Mage::getSingleton('checkout/session')->getOrderid()));
168
+ $form->addField("TransactionType", 'hidden', array('name' => "TransactionType", 'value' => Mage::getSingleton('checkout/session')->getTransactiontype()));
169
+ $form->addField("TransactionDateTime", 'hidden', array('name' => "TransactionDateTime", 'value' => Mage::getSingleton('checkout/session')->getTransactiondatetime()));
170
+ $form->addField("CallbackURL", 'hidden', array('name' => "CallbackURL", 'value' => Mage::getSingleton('checkout/session')->getCallbackurl()));
171
+ $form->addField("OrderDescription", 'hidden', array('name' => "OrderDescription", 'value' => Mage::getSingleton('checkout/session')->getOrderdescription()));
172
+ $form->addField("Address1", 'hidden', array('name' => "Address1", 'value' => Mage::getSingleton('checkout/session')->getAddress1()));
173
+ $form->addField("Address2", 'hidden', array('name' => "Address2", 'value' => Mage::getSingleton('checkout/session')->getAddress2()));
174
+ $form->addField("Address3", 'hidden', array('name' => "Address3", 'value' => Mage::getSingleton('checkout/session')->getAddress3()));
175
+ $form->addField("Address4", 'hidden', array('name' => "Address4", 'value' => Mage::getSingleton('checkout/session')->getAddress4()));
176
+ $form->addField("City", 'hidden', array('name' => "City", 'value' => Mage::getSingleton('checkout/session')->getCity()));
177
+ $form->addField("State", 'hidden', array('name' => "State", 'value' => Mage::getSingleton('checkout/session')->getState()));
178
+ $form->addField("PostCode", 'hidden', array('name' => "PostCode", 'value' => Mage::getSingleton('checkout/session')->getPostcode()));
179
+ $form->addField("CountryCode", 'hidden', array('name' => "CountryCode", 'value' => Mage::getSingleton('checkout/session')->getCountrycode()));
180
+ $form->addField("CardName", 'hidden', array('name' => "CardName", 'value' => Mage::getSingleton('checkout/session')->getCardname()));
181
+ $form->addField("CardNumber", 'hidden', array('name' => "CardNumber", 'value' => Mage::getSingleton('checkout/session')->getCardnumber()));
182
+ $form->addField("ExpiryDateMonth", 'hidden', array('name' => "ExpiryDateMonth", 'value' => Mage::getSingleton('checkout/session')->getExpirydatemonth()));
183
+ $form->addField("ExpiryDateYear", 'hidden', array('name' => "ExpiryDateYear", 'value' => Mage::getSingleton('checkout/session')->getExpirydateyear()));
184
+ $form->addField("StartDateMonth", 'hidden', array('name' => "StartDateMonth", 'value' => Mage::getSingleton('checkout/session')->getStartdatemonth()));
185
+ $form->addField("StartDateYear", 'hidden', array('name' => "StartDateYear", 'value' => Mage::getSingleton('checkout/session')->getStartdateyear()));
186
+ $form->addField("IssueNumber", 'hidden', array('name' => "IssueNumber", 'value' => Mage::getSingleton('checkout/session')->getIssuenumber()));
187
+ $form->addField("CV2", 'hidden', array('name' => "CV2", 'value' => Mage::getSingleton('checkout/session')->getCv2()));
188
+
189
+ // reset the session items
190
+ Mage::getSingleton('checkout/session')->setHashdigest(null)
191
+ ->setMerchantid(null)
192
+ ->setAmount(null)
193
+ ->setCurrencycode(null)
194
+ ->setOrderid(null)
195
+ ->setTransactiontype(null)
196
+ ->setTransactiondatetime(null)
197
+ ->setCallbackurl(null)
198
+ ->setOrderdescription(null)
199
+ ->setAddress1(null)
200
+ ->setAddress2(null)
201
+ ->setAddress3(null)
202
+ ->setAddress4(null)
203
+ ->setCity(null)
204
+ ->setState(null)
205
+ ->setPostcode(null)
206
+ ->setCountrycode(null)
207
+ ->setCardname(null)
208
+ ->setCardnumber(null)
209
+ ->setExpirydatemonth(null)
210
+ ->setExpirydateyear(null)
211
+ ->setStartdatemonth(null)
212
+ ->setStartdateyear(null)
213
+ ->setIssuenumber(null)
214
+ ->setCv2(null);
215
+
216
+ $html = '<html><body>';
217
+ $html .= $form->toHtml();
218
+ $html .= '<script type="text/javascript">document.getElementById("TransparentRedirectForm").submit();</script>';
219
+ $html .= '</body></html>';
220
+
221
+ return $html;
222
+ }
223
+
224
+ /**
225
+ * Build the form for the Transparent Redirect 3DSecure authentication payment
226
+ *
227
+ * @param string $szActionURL
228
+ * @return string
229
+ */
230
+ private function _submitPaRes($szActionURL)
231
+ {
232
+ // create a Magento form
233
+ $form = new Varien_Data_Form();
234
+ $form->setAction($szActionURL)
235
+ ->setId('SubmitPaResForm')
236
+ ->setName('SubmitPaResForm')
237
+ ->setMethod('POST')
238
+ ->setUseContainer(true);
239
+
240
+ $form->addField("HashDigest", 'hidden', array('name' => "HashDigest", 'value' => Mage::getSingleton('checkout/session')->getHashdigest()));
241
+ $form->addField("MerchantID", 'hidden', array('name' => "MerchantID", 'value' => Mage::getSingleton('checkout/session')->getMerchantid()));
242
+ $form->addField("CrossReference", 'hidden', array('name' => "CrossReference", 'value' => Mage::getSingleton('checkout/session')->getCrossreference()));
243
+ $form->addField("TransactionDateTime", 'hidden', array('name' => "TransactionDateTime", 'value' => Mage::getSingleton('checkout/session')->getTransactiondatetime()));
244
+ $form->addField("CallbackURL", 'hidden', array('name' => "CallbackURL", 'value' => Mage::getSingleton('checkout/session')->getCallbackurl()));
245
+ $form->addField("PaRES", 'hidden', array('name' => "PaRES", 'value' => Mage::getSingleton('checkout/session')->getPares()));
246
+
247
+ // reset the session items
248
+ Mage::getSingleton('checkout/session')->setHashdigest(null)
249
+ ->setMerchantid(null)
250
+ ->setCrossreference(null)
251
+ ->setTransactiondatetime(null)
252
+ ->setCallbackurl(null)
253
+ ->setPares(null);
254
+
255
+ $html = '<html><body>';
256
+ $html .= $form->toHtml();
257
+ $html .= '<script type="text/javascript">document.getElementById("SubmitPaResForm").submit();</script>';
258
+ $html .= '</body></html>';
259
+
260
+ return $html;
261
+ }
262
+ }
app/code/local/PayVector/Tpg/Block/Threedsecure.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PayVector_Tpg_Block_Threedsecure extends Mage_Core_Block_Abstract
4
+ {
5
+ /**
6
+ * Build the 3D Secure form to be submitted to the redirect 3D Secure authorization page
7
+ *
8
+ */
9
+ protected function _toHtml()
10
+ {
11
+ $mode = Mage::getModel('tpg/direct')->getConfigData('mode');
12
+
13
+ if($mode == PayVector_Tpg_Model_Source_PaymentMode::PAYMENT_MODE_TRANSPARENT_REDIRECT)
14
+ {
15
+ $szTermURL = 'tpg/payment/callbacktransparentredirect';
16
+ }
17
+ else
18
+ {
19
+ $szTermURL = 'tpg/payment/callback3d';
20
+ }
21
+
22
+ $form = new Varien_Data_Form();
23
+ $form->setAction(Mage::getSingleton('checkout/session')->getAcsurl())
24
+ ->setId('ThreeDSecureForm')
25
+ ->setName('ThreeDSecureForm')
26
+ ->setMethod('POST')
27
+ ->setUseContainer(true);
28
+
29
+ $form->addField("PaReq", 'hidden', array('name'=>"PaReq", 'value'=>Mage::getSingleton('checkout/session')->getPareq()));
30
+ $form->addField("MD", 'hidden', array('name'=>"MD", 'value'=>Mage::getSingleton('checkout/session')->getMd()));
31
+ $form->addField("TermUrl", 'hidden', array('name'=>"TermUrl", 'value'=>Mage::getUrl($szTermURL, array('_secure' => true))));
32
+
33
+ $html = '<html><body>';
34
+ $html.= $this->__('You will be redirected to a 3D secure form in a few seconds.');
35
+ $html.= $form->toHtml();
36
+ $html.= '<script type="text/javascript">document.getElementById("ThreeDSecureForm").submit();</script>';
37
+ $html.= '</body></html>';
38
+
39
+ // reset the 3DS session values
40
+ Mage::getSingleton('checkout/session')->setMd(null)
41
+ ->setAcsurl(null)
42
+ ->setPareq(null);
43
+
44
+ return $html;
45
+ }
46
+ }
app/code/local/PayVector/Tpg/Helper/Data.php ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PayVector_Tpg_Helper_Data extends Mage_Core_Helper_Abstract
4
+ {
5
+
6
+ }
app/code/local/PayVector/Tpg/Model/Common/GlobalErrors.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PayVector_Tpg_Model_Common_GlobalErrors
4
+ {
5
+ /*
6
+ * failure - probably a wrong card details entered in
7
+ * error - payment gateway communication and hashing related issues
8
+ */
9
+ // failure - occurred in the processing of the final callback from the hosted payment form/transparent redirect
10
+ const ERROR_182 = "The payment was not successful and checkout was cancelled.\r\nPlease check your credit card details and try again.\r\n";
11
+
12
+ const ERROR_183 = "The payment was not successful and checkout was cancelled.<br/>Please check your credit card details and try again.";
13
+
14
+ // error - occurred during the partial processing of the callback from the transparent redirect page
15
+ const ERROR_260 = "ERROR 260: The payment result couldn't be verified.";
16
+
17
+ // error - direct integration transaction cannot be completed - problem in the communication with the payment gateway
18
+ const ERROR_261 = "ERROR 261: Couldn't communicate with payment gateway.";
19
+
20
+ // error - direct integration 3D Secure transaction couldn't be processed - problem in the communication with the paymwent gateway
21
+ const ERROR_431 = "ERROR 431: Couldn't communicate with payment gateway to complete the 3D Secure authentication.";
22
+
23
+ // failure - occurred during the processing of the data in the callback from the 3D Secure Authentication page
24
+ const ERROR_7655 = "3D Secure payment was not successfull and checkout was cancelled.<br/>Please check your credit card details and try again.";
25
+
26
+ // failure - server pull result related error: no URL variable present in the payment form to merchant webshop redirection
27
+ const ERROR_309 ="ERROR 309: Missing parameters.";
28
+
29
+ // failure - server pull result related error: OrderID or CrossReference is missing from the URL variable list
30
+ const ERROR_304 = "ERROR 304: The payment was rejected for a SECURITY reason: the incoming payment data was tampered with.";
31
+
32
+ // faulire - server pull result related error: Magento web request to the hosted PaymentFormHandler failed while trying to retrieve the transaction details using the CrossReference
33
+ const ERROR_329 = "ERROR 329: Error happened while trying to validate the transaction result.";
34
+
35
+ // failure - server pull result related error: empty response due to invalid CrossReference
36
+ const ERROR_381 = "ERROR 381: Invalid transaction details.";
37
+ }
38
+ ?>
app/code/local/PayVector/Tpg/Model/Common/ISOCountries.php ADDED
@@ -0,0 +1,266 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ include_once ("ThePaymentGateway/TPG_Common.php");
4
+
5
+ class ISOCountries
6
+ {
7
+ /**
8
+ * Get the list of ISO Countries
9
+ *
10
+ * @return ISOCountryList
11
+ */
12
+ public static function getISOCountryList()
13
+ {
14
+ $iclISOCountryList = new ISOCountryList();
15
+
16
+ $iclISOCountryList -> add(826, "GB", "GBR", "United Kingdom", 3);
17
+ $iclISOCountryList -> add(840, "US", "USA", "United States", 2);
18
+ $iclISOCountryList -> add(36, "AU", "AUS", "Australia", 1);
19
+ $iclISOCountryList -> add(124, "CA", "CAN", "Canada", 1);
20
+ $iclISOCountryList -> add(276, "DE", "DEU", "Germany", 1);
21
+ $iclISOCountryList -> add(250, "FR", "FRA", "France", 1);
22
+ $iclISOCountryList -> add(533, "AW", "ABW", "Aruba", 0);
23
+ $iclISOCountryList -> add(4, "AF", "AFG", "Afghanistan", 0);
24
+ $iclISOCountryList -> add(24, "AO", "AGO", "Angola", 0);
25
+ $iclISOCountryList -> add(660, "AI", "AIA", "Anguilla", 0);
26
+ $iclISOCountryList -> add(248, "AX", "ALA", "Åland Islands", 0);
27
+ $iclISOCountryList -> add(8, "AL", "ALB", "Albania", 0);
28
+ $iclISOCountryList -> add(20, "AD", "AND", "Andorra", 0);
29
+ $iclISOCountryList -> add(530, "AN", "ANT", "Netherlands Antilles", 0);
30
+ $iclISOCountryList -> add(784, "AE", "ARE", "United Arab Emirates", 0);
31
+ $iclISOCountryList -> add(32, "AR", "ARG", "Argentina", 0);
32
+ $iclISOCountryList -> add(51, "AM", "ARM", "Armenia", 0);
33
+ $iclISOCountryList -> add(16, "AS", "ASM", "American Samoa", 0);
34
+ $iclISOCountryList -> add(10, "AQ", "ATA", "Antarctica", 0);
35
+ $iclISOCountryList -> add(260, "TF", "ATF", "French Southern Territories", 0);
36
+ $iclISOCountryList -> add(28, "AG", "ATG", "Antigua and Barbuda", 0);
37
+ $iclISOCountryList -> add(40, "AT", "AUT", "Austria", 0);
38
+ $iclISOCountryList -> add(31, "AZ", "AZE", "Azerbaijan", 0);
39
+ $iclISOCountryList -> add(108, "BI", "BDI", "Burundi", 0);
40
+ $iclISOCountryList -> add(56, "BE", "BEL", "Belgium", 0);
41
+ $iclISOCountryList -> add(204, "BJ", "BEN", "Benin", 0);
42
+ $iclISOCountryList -> add(854, "BF", "BFA", "Burkina Faso", 0);
43
+ $iclISOCountryList -> add(50, "BD", "BGD", "Bangladesh", 0);
44
+ $iclISOCountryList -> add(100, "BG", "BGR", "Bulgaria", 0);
45
+ $iclISOCountryList -> add(48, "BH", "BHR", "Bahrain", 0);
46
+ $iclISOCountryList -> add(44, "BS", "BHS", "Bahamas", 0);
47
+ $iclISOCountryList -> add(70, "BA", "BIH", "Bosnia and Herzegovina", 0);
48
+ $iclISOCountryList -> add(652, "BL", "BLM", "Saint Barthélemy", 0);
49
+ $iclISOCountryList -> add(112, "BY", "BLR", "Belarus", 0);
50
+ $iclISOCountryList -> add(84, "BZ", "BLZ", "Belize", 0);
51
+ $iclISOCountryList -> add(60, "BM", "BMU", "Bermuda", 0);
52
+ $iclISOCountryList -> add(68, "BO", "BOL", "Bolivia", 0);
53
+ $iclISOCountryList -> add(76, "BR", "BRA", "Brazil", 0);
54
+ $iclISOCountryList -> add(52, "BB", "BRB", "Barbados", 0);
55
+ $iclISOCountryList -> add(96, "BN", "BRN", "Brunei Darussalam", 0);
56
+ $iclISOCountryList -> add(64, "BT", "BTN", "Bhutan", 0);
57
+ $iclISOCountryList -> add(74, "BV", "BVT", "Bouvet Island", 0);
58
+ $iclISOCountryList -> add(72, "BW", "BWA", "Botswana", 0);
59
+ $iclISOCountryList -> add(140, "CF", "CAF", "Central African Republic", 0);
60
+ $iclISOCountryList -> add(166, "CC", "CCK", "Cocos (Keeling) Islands", 0);
61
+ $iclISOCountryList -> add(756, "CH", "CHE", "Switzerland", 0);
62
+ $iclISOCountryList -> add(152, "CL", "CHL", "Chile", 0);
63
+ $iclISOCountryList -> add(156, "CN", "CHN", "China", 0);
64
+ $iclISOCountryList -> add(384, "CI", "CIV", "Côte d'Ivoire", 0);
65
+ $iclISOCountryList -> add(120, "CM", "CMR", "Cameroon", 0);
66
+ $iclISOCountryList -> add(180, "CD", "COD", "Congo, the Democratic Republic of the", 0);
67
+ $iclISOCountryList -> add(178, "CG", "COG", "Congo", 0);
68
+ $iclISOCountryList -> add(184, "CK", "COK", "Cook Islands", 0);
69
+ $iclISOCountryList -> add(170, "CO", "COL", "Colombia", 0);
70
+ $iclISOCountryList -> add(174, "KM", "COM", "Comoros", 0);
71
+ $iclISOCountryList -> add(132, "CV", "CPV", "Cape Verde", 0);
72
+ $iclISOCountryList -> add(188, "CR", "CRI", "Costa Rica", 0);
73
+ $iclISOCountryList -> add(192, "CU", "CUB", "Cuba", 0);
74
+ $iclISOCountryList -> add(162, "CX", "CXR", "Christmas Island", 0);
75
+ $iclISOCountryList -> add(136, "KY", "CYM", "Cayman Islands", 0);
76
+ $iclISOCountryList -> add(196, "CY", "CYP", "Cyprus", 0);
77
+ $iclISOCountryList -> add(203, "CZ", "CZE", "Czech Republic", 0);
78
+ $iclISOCountryList -> add(262, "DJ", "DJI", "Djibouti", 0);
79
+ $iclISOCountryList -> add(212, "DM", "DMA", "Dominica", 0);
80
+ $iclISOCountryList -> add(208, "DK", "DNK", "Denmark", 0);
81
+ $iclISOCountryList -> add(214, "DO", "DOM", "Dominican Republic", 0);
82
+ $iclISOCountryList -> add(12, "DZ", "DZA", "Algeria", 0);
83
+ $iclISOCountryList -> add(218, "EC", "ECU", "Ecuador", 0);
84
+ $iclISOCountryList -> add(818, "EG", "EGY", "Egypt", 0);
85
+ $iclISOCountryList -> add(232, "ER", "ERI", "Eritrea", 0);
86
+ $iclISOCountryList -> add(732, "EH", "ESH", "Western Sahara", 0);
87
+ $iclISOCountryList -> add(724, "ES", "ESP", "Spain", 0);
88
+ $iclISOCountryList -> add(233, "EE", "EST", "Estonia", 0);
89
+ $iclISOCountryList -> add(231, "ET", "ETH", "Ethiopia", 0);
90
+ $iclISOCountryList -> add(246, "FI", "FIN", "Finland", 0);
91
+ $iclISOCountryList -> add(242, "FJ", "FJI", "Fiji", 0);
92
+ $iclISOCountryList -> add(238, "FK", "FLK", "Falkland Islands (Malvinas)", 0);
93
+ $iclISOCountryList -> add(234, "FO", "FRO", "Faroe Islands", 0);
94
+ $iclISOCountryList -> add(583, "FM", "FSM", "Micronesia, Federated States of", 0);
95
+ $iclISOCountryList -> add(266, "GA", "GAB", "Gabon", 0);
96
+ $iclISOCountryList -> add(268, "GE", "GEO", "Georgia", 0);
97
+ $iclISOCountryList -> add(831, "GG", "GGY", "Guernsey", 0);
98
+ $iclISOCountryList -> add(288, "GH", "GHA", "Ghana", 0);
99
+ $iclISOCountryList -> add(292, "GI", "GIB", "Gibraltar", 0);
100
+ $iclISOCountryList -> add(324, "GN", "GIN", "Guinea", 0);
101
+ $iclISOCountryList -> add(312, "GP", "GLP", "Guadeloupe", 0);
102
+ $iclISOCountryList -> add(270, "GM", "GMB", "Gambia", 0);
103
+ $iclISOCountryList -> add(624, "GW", "GNB", "Guinea-Bissau", 0);
104
+ $iclISOCountryList -> add(226, "GQ", "GNQ", "Equatorial Guinea", 0);
105
+ $iclISOCountryList -> add(300, "GR", "GRC", "Greece", 0);
106
+ $iclISOCountryList -> add(308, "GD", "GRD", "Grenada", 0);
107
+ $iclISOCountryList -> add(304, "GL", "GRL", "Greenland", 0);
108
+ $iclISOCountryList -> add(320, "GT", "GTM", "Guatemala", 0);
109
+ $iclISOCountryList -> add(254, "GF", "GUF", "French Guiana", 0);
110
+ $iclISOCountryList -> add(316, "GU", "GUM", "Guam", 0);
111
+ $iclISOCountryList -> add(328, "GY", "GUY", "Guyana", 0);
112
+ $iclISOCountryList -> add(344, "HK", "HKG", "Hong Kong", 0);
113
+ $iclISOCountryList -> add(334, "HM", "HMD", "Heard Island and McDonald Islands", 0);
114
+ $iclISOCountryList -> add(340, "HN", "HND", "Honduras", 0);
115
+ $iclISOCountryList -> add(191, "HR", "HRV", "Croatia", 0);
116
+ $iclISOCountryList -> add(332, "HT", "HTI", "Haiti", 0);
117
+ $iclISOCountryList -> add(348, "HU", "HUN", "Hungary", 0);
118
+ $iclISOCountryList -> add(360, "ID", "IDN", "Indonesia", 0);
119
+ $iclISOCountryList -> add(833, "IM", "IMN", "Isle of Man", 0);
120
+ $iclISOCountryList -> add(356, "IN", "IND", "India", 0);
121
+ $iclISOCountryList -> add(86, "IO", "IOT", "British Indian Ocean Territory", 0);
122
+ $iclISOCountryList -> add(372, "IE", "IRL", "Ireland", 0);
123
+ $iclISOCountryList -> add(364, "IR", "IRN", "Iran, Islamic Republic of", 0);
124
+ $iclISOCountryList -> add(368, "IQ", "IRQ", "Iraq", 0);
125
+ $iclISOCountryList -> add(352, "IS", "ISL", "Iceland", 0);
126
+ $iclISOCountryList -> add(376, "IL", "ISR", "Israel", 0);
127
+ $iclISOCountryList -> add(380, "IT", "ITA", "Italy", 0);
128
+ $iclISOCountryList -> add(388, "JM", "JAM", "Jamaica", 0);
129
+ $iclISOCountryList -> add(832, "JE", "JEY", "Jersey", 0);
130
+ $iclISOCountryList -> add(400, "JO", "JOR", "Jordan", 0);
131
+ $iclISOCountryList -> add(392, "JP", "JPN", "Japan", 0);
132
+ $iclISOCountryList -> add(398, "KZ", "KAZ", "Kazakhstan", 0);
133
+ $iclISOCountryList -> add(404, "KE", "KEN", "Kenya", 0);
134
+ $iclISOCountryList -> add(417, "KG", "KGZ", "Kyrgyzstan", 0);
135
+ $iclISOCountryList -> add(116, "KH", "KHM", "Cambodia", 0);
136
+ $iclISOCountryList -> add(296, "KI", "KIR", "Kiribati", 0);
137
+ $iclISOCountryList -> add(659, "KN", "KNA", "Saint Kitts and Nevis", 0);
138
+ $iclISOCountryList -> add(410, "KR", "KOR", "Korea, Republic of", 0);
139
+ $iclISOCountryList -> add(414, "KW", "KWT", "Kuwait", 0);
140
+ $iclISOCountryList -> add(418, "LA", "LAO", "Lao People's Democratic Republic", 0);
141
+ $iclISOCountryList -> add(422, "LB", "LBN", "Lebanon", 0);
142
+ $iclISOCountryList -> add(430, "LR", "LBR", "Liberia", 0);
143
+ $iclISOCountryList -> add(434, "LY", "LBY", "Libyan Arab Jamahiriya", 0);
144
+ $iclISOCountryList -> add(662, "LC", "LCA", "Saint Lucia", 0);
145
+ $iclISOCountryList -> add(438, "LI", "LIE", "Liechtenstein", 0);
146
+ $iclISOCountryList -> add(144, "LK", "LKA", "Sri Lanka", 0);
147
+ $iclISOCountryList -> add(426, "LS", "LSO", "Lesotho", 0);
148
+ $iclISOCountryList -> add(440, "LT", "LTU", "Lithuania", 0);
149
+ $iclISOCountryList -> add(442, "LU", "LUX", "Luxembourg", 0);
150
+ $iclISOCountryList -> add(428, "LV", "LVA", "Latvia", 0);
151
+ $iclISOCountryList -> add(446, "MO", "MAC", "Macao", 0);
152
+ $iclISOCountryList -> add(663, "MF", "MAF", "Saint Martin (French part)", 0);
153
+ $iclISOCountryList -> add(504, "MA", "MAR", "Morocco", 0);
154
+ $iclISOCountryList -> add(492, "MC", "MCO", "Monaco", 0);
155
+ $iclISOCountryList -> add(498, "MD", "MDA", "Moldova", 0);
156
+ $iclISOCountryList -> add(450, "MG", "MDG", "Madagascar", 0);
157
+ $iclISOCountryList -> add(462, "MV", "MDV", "Maldives", 0);
158
+ $iclISOCountryList -> add(484, "MX", "MEX", "Mexico", 0);
159
+ $iclISOCountryList -> add(584, "MH", "MHL", "Marshall Islands", 0);
160
+ $iclISOCountryList -> add(807, "MK", "MKD", "Macedonia, the former Yugoslav Republic of", 0);
161
+ $iclISOCountryList -> add(466, "ML", "MLI", "Mali", 0);
162
+ $iclISOCountryList -> add(470, "MT", "MLT", "Malta", 0);
163
+ $iclISOCountryList -> add(104, "MM", "MMR", "Myanmar", 0);
164
+ $iclISOCountryList -> add(499, "ME", "MNE", "Montenegro", 0);
165
+ $iclISOCountryList -> add(496, "MN", "MNG", "Mongolia", 0);
166
+ $iclISOCountryList -> add(580, "MP", "MNP", "Northern Mariana Islands", 0);
167
+ $iclISOCountryList -> add(508, "MZ", "MOZ", "Mozambique", 0);
168
+ $iclISOCountryList -> add(478, "MR", "MRT", "Mauritania", 0);
169
+ $iclISOCountryList -> add(500, "MS", "MSR", "Montserrat", 0);
170
+ $iclISOCountryList -> add(474, "MQ", "MTQ", "Martinique", 0);
171
+ $iclISOCountryList -> add(480, "MU", "MUS", "Mauritius", 0);
172
+ $iclISOCountryList -> add(454, "MW", "MWI", "Malawi", 0);
173
+ $iclISOCountryList -> add(458, "MY", "MYS", "Malaysia", 0);
174
+ $iclISOCountryList -> add(175, "YT", "MYT", "Mayotte", 0);
175
+ $iclISOCountryList -> add(516, "NA", "NAM", "Namibia", 0);
176
+ $iclISOCountryList -> add(540, "NC", "NCL", "New Caledonia", 0);
177
+ $iclISOCountryList -> add(562, "NE", "NER", "Niger", 0);
178
+ $iclISOCountryList -> add(574, "NF", "NFK", "Norfolk Island", 0);
179
+ $iclISOCountryList -> add(566, "NG", "NGA", "Nigeria", 0);
180
+ $iclISOCountryList -> add(558, "NI", "NIC", "Nicaragua", 0);
181
+ $iclISOCountryList -> add(570, "NU", "NIU", "Niue", 0);
182
+ $iclISOCountryList -> add(528, "NL", "NLD", "Netherlands", 0);
183
+ $iclISOCountryList -> add(578, "NO", "NOR", "Norway", 0);
184
+ $iclISOCountryList -> add(524, "NP", "NPL", "Nepal", 0);
185
+ $iclISOCountryList -> add(520, "NR", "NRU", "Nauru", 0);
186
+ $iclISOCountryList -> add(554, "NZ", "NZL", "New Zealand", 0);
187
+ $iclISOCountryList -> add(512, "OM", "OMN", "Oman", 0);
188
+ $iclISOCountryList -> add(586, "PK", "PAK", "Pakistan", 0);
189
+ $iclISOCountryList -> add(591, "PA", "PAN", "Panama", 0);
190
+ $iclISOCountryList -> add(612, "PN", "PCN", "Pitcairn", 0);
191
+ $iclISOCountryList -> add(604, "PE", "PER", "Peru", 0);
192
+ $iclISOCountryList -> add(608, "PH", "PHL", "Philippines", 0);
193
+ $iclISOCountryList -> add(585, "PW", "PLW", "Palau", 0);
194
+ $iclISOCountryList -> add(598, "PG", "PNG", "Papua New Guinea", 0);
195
+ $iclISOCountryList -> add(616, "PL", "POL", "Poland", 0);
196
+ $iclISOCountryList -> add(630, "PR", "PRI", "Puerto Rico", 0);
197
+ $iclISOCountryList -> add(408, "KP", "PRK", "Korea, Democratic People's Republic of", 0);
198
+ $iclISOCountryList -> add(620, "PT", "PRT", "Portugal", 0);
199
+ $iclISOCountryList -> add(600, "PY", "PRY", "Paraguay", 0);
200
+ $iclISOCountryList -> add(275, "PS", "PSE", "Palestinian Territory, Occupied", 0);
201
+ $iclISOCountryList -> add(258, "PF", "PYF", "French Polynesia", 0);
202
+ $iclISOCountryList -> add(634, "QA", "QAT", "Qatar", 0);
203
+ $iclISOCountryList -> add(638, "RE", "REU", "Réunion", 0);
204
+ $iclISOCountryList -> add(642, "RO", "ROU", "Romania", 0);
205
+ $iclISOCountryList -> add(643, "RU", "RUS", "Russian Federation", 0);
206
+ $iclISOCountryList -> add(646, "RW", "RWA", "Rwanda", 0);
207
+ $iclISOCountryList -> add(682, "SA", "SAU", "Saudi Arabia", 0);
208
+ $iclISOCountryList -> add(736, "SD", "SDN", "Sudan", 0);
209
+ $iclISOCountryList -> add(686, "SN", "SEN", "Senegal", 0);
210
+ $iclISOCountryList -> add(702, "SG", "SGP", "Singapore", 0);
211
+ $iclISOCountryList -> add(239, "GS", "SGS", "South Georgia and the South Sandwich Islands", 0);
212
+ $iclISOCountryList -> add(654, "SH", "SHN", "Saint Helena", 0);
213
+ $iclISOCountryList -> add(744, "SJ", "SJM", "Svalbard and Jan Mayen", 0);
214
+ $iclISOCountryList -> add(90, "SB", "SLB", "Solomon Islands", 0);
215
+ $iclISOCountryList -> add(694, "SL", "SLE", "Sierra Leone", 0);
216
+ $iclISOCountryList -> add(222, "SV", "SLV", "El Salvador", 0);
217
+ $iclISOCountryList -> add(674, "SM", "SMR", "San Marino", 0);
218
+ $iclISOCountryList -> add(706, "SO", "SOM", "Somalia", 0);
219
+ $iclISOCountryList -> add(666, "PM", "SPM", "Saint Pierre and Miquelon", 0);
220
+ $iclISOCountryList -> add(688, "RS", "SRB", "Serbia", 0);
221
+ $iclISOCountryList -> add(678, "ST", "STP", "Sao Tome and Principe", 0);
222
+ $iclISOCountryList -> add(740, "SR", "SUR", "Suriname", 0);
223
+ $iclISOCountryList -> add(703, "SK", "SVK", "Slovakia", 0);
224
+ $iclISOCountryList -> add(705, "SI", "SVN", "Slovenia", 0);
225
+ $iclISOCountryList -> add(752, "SE", "SWE", "Sweden", 0);
226
+ $iclISOCountryList -> add(748, "SZ", "SWZ", "Swaziland", 0);
227
+ $iclISOCountryList -> add(690, "SC", "SYC", "Seychelles", 0);
228
+ $iclISOCountryList -> add(760, "SY", "SYR", "Syrian Arab Republic", 0);
229
+ $iclISOCountryList -> add(796, "TC", "TCA", "Turks and Caicos Islands", 0);
230
+ $iclISOCountryList -> add(148, "TD", "TCD", "Chad", 0);
231
+ $iclISOCountryList -> add(768, "TG", "TGO", "Togo", 0);
232
+ $iclISOCountryList -> add(764, "TH", "THA", "Thailand", 0);
233
+ $iclISOCountryList -> add(762, "TJ", "TJK", "Tajikistan", 0);
234
+ $iclISOCountryList -> add(772, "TK", "TKL", "Tokelau", 0);
235
+ $iclISOCountryList -> add(795, "TM", "TKM", "Turkmenistan", 0);
236
+ $iclISOCountryList -> add(626, "TL", "TLS", "Timor-Leste", 0);
237
+ $iclISOCountryList -> add(776, "TO", "TON", "Tonga", 0);
238
+ $iclISOCountryList -> add(780, "TT", "TTO", "Trinidad and Tobago", 0);
239
+ $iclISOCountryList -> add(788, "TN", "TUN", "Tunisia", 0);
240
+ $iclISOCountryList -> add(792, "TR", "TUR", "Turkey", 0);
241
+ $iclISOCountryList -> add(798, "TV", "TUV", "Tuvalu", 0);
242
+ $iclISOCountryList -> add(158, "TW", "TWN", "Taiwan, Province of China", 0);
243
+ $iclISOCountryList -> add(834, "TZ", "TZA", "Tanzania, United Republic of", 0);
244
+ $iclISOCountryList -> add(800, "UG", "UGA", "Uganda", 0);
245
+ $iclISOCountryList -> add(804, "UA", "UKR", "Ukraine", 0);
246
+ $iclISOCountryList -> add(581, "UM", "UMI", "United States Minor Outlying Islands", 0);
247
+ $iclISOCountryList -> add(858, "UY", "URY", "Uruguay", 0);
248
+ $iclISOCountryList -> add(860, "UZ", "UZB", "Uzbekistan", 0);
249
+ $iclISOCountryList -> add(336, "VA", "VAT", "Holy See (Vatican City State)", 0);
250
+ $iclISOCountryList -> add(670, "VC", "VCT", "Saint Vincent and the Grenadines", 0);
251
+ $iclISOCountryList -> add(862, "VE", "VEN", "Venezuela", 0);
252
+ $iclISOCountryList -> add(92, "VG", "VGB", "Virgin Islands, British", 0);
253
+ $iclISOCountryList -> add(850, "VI", "VIR", "Virgin Islands, U.S.", 0);
254
+ $iclISOCountryList -> add(704, "VN", "VNM", "Viet Nam", 0);
255
+ $iclISOCountryList -> add(548, "VU", "VUT", "Vanuatu", 0);
256
+ $iclISOCountryList -> add(876, "WF", "WLF", "Wallis And Futuna", 0);
257
+ $iclISOCountryList -> add(882, "WS", "WSM", "Samoa", 0);
258
+ $iclISOCountryList -> add(887, "YE", "YEM", "Yemen", 0);
259
+ $iclISOCountryList -> add(710, "ZA", "ZAF", "South Africa", 0);
260
+ $iclISOCountryList -> add(894, "ZM", "ZMB", "Zambia", 0);
261
+ $iclISOCountryList -> add(716, "ZW", "ZWE", "Zimbabwe", 0);
262
+
263
+ return $iclISOCountryList;
264
+ }
265
+
266
+ }
app/code/local/PayVector/Tpg/Model/Common/ISOCurrencies.php ADDED
@@ -0,0 +1,199 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ include_once ("ThePaymentGateway/TPG_Common.php");
4
+
5
+ class ISOCurrencies
6
+ {
7
+ /**
8
+ * Get the list of ISO Currencies
9
+ *
10
+ * @return ISOCurrencyList
11
+ */
12
+ public static function getISOCurrencyList()
13
+ {
14
+ $iclISOCurrencyList = new ISOCurrencyList();
15
+
16
+ $iclISOCurrencyList->add(634, "Qatari Rial","QAR", 2);
17
+ $iclISOCurrencyList->add(566, "Naira", "NGN", 2);
18
+ $iclISOCurrencyList->add(678, "Dobra", "STD", 2);
19
+ $iclISOCurrencyList->add(943, "Metical", "MZN", 2);
20
+ $iclISOCurrencyList->add(826, "Pound Sterling", "GBP", 2);
21
+ $iclISOCurrencyList->add(654, "Saint Helena Pound", "SHP", 2);
22
+ $iclISOCurrencyList->add(704, "Vietnamese ??ng", "VND", 2);
23
+ $iclISOCurrencyList->add(952, "CFA Franc BCEAO", "XOF", 0);
24
+ $iclISOCurrencyList->add(356, "Indian Rupee", "INR", 2);
25
+ $iclISOCurrencyList->add(807, "Denar", "MKD", 2);
26
+ $iclISOCurrencyList->add(959, "Gold (one Troy ounce)", "XAU", 0);
27
+ $iclISOCurrencyList->add(410, "South Korean Won", "KRW", 0);
28
+ $iclISOCurrencyList->add(946, "Romanian New Leu", "RON", 2);
29
+ $iclISOCurrencyList->add(949, "New Turkish Lira", "TRY", 2);
30
+ $iclISOCurrencyList->add(532, "Netherlands Antillian Guilder", "ANG", 2);
31
+ $iclISOCurrencyList->add(788, "Tunisian Dinar", "TND", 3);
32
+ $iclISOCurrencyList->add(646, "Rwanda Franc", "RWF", 0);
33
+ $iclISOCurrencyList->add(504, "Moroccan Dirham", "MAD", 2);
34
+ $iclISOCurrencyList->add(174, "Comoro Franc", "KMF", 0);
35
+ $iclISOCurrencyList->add(484, "Mexican Peso", "MXN", 2);
36
+ $iclISOCurrencyList->add(478, "Ouguiya", "MRO", 2);
37
+ $iclISOCurrencyList->add(233, "Kroon", "EEK", 2);
38
+ $iclISOCurrencyList->add(400, "Jordanian Dinar", "JOD", 3);
39
+ $iclISOCurrencyList->add(292, "Gibraltar pound", "GIP", 2);
40
+ $iclISOCurrencyList->add(690, "Seychelles Rupee", "SCR", 2);
41
+ $iclISOCurrencyList->add(422, "Lebanese Pound", "LBP", 2);
42
+ $iclISOCurrencyList->add(232, "Nakfa", "ERN", 2);
43
+ $iclISOCurrencyList->add(496, "Tugrik", "MNT", 2);
44
+ $iclISOCurrencyList->add(328, "Guyana Dollar", "GYD", 2);
45
+ $iclISOCurrencyList->add(970, "Unidad de Valor Real", "COU", 2);
46
+ $iclISOCurrencyList->add(974, "Belarusian Ruble", "BYR", 0);
47
+ $iclISOCurrencyList->add(608, "Philippine Peso", "PHP", 2);
48
+ $iclISOCurrencyList->add(598, "Kina", "PGK", 2);
49
+ $iclISOCurrencyList->add(951, "East Caribbean Dollar", "XCD", 2);
50
+ $iclISOCurrencyList->add(52, "Barbados Dollar", "BBD", 2);
51
+ $iclISOCurrencyList->add(944, "Azerbaijanian Manat", "AZN", 2);
52
+ $iclISOCurrencyList->add(434, "Libyan Dinar", "LYD", 3);
53
+ $iclISOCurrencyList->add(706, "Somali Shilling", "SOS", 2);
54
+ $iclISOCurrencyList->add(950, "CFA Franc BEAC", "XAF", 0);
55
+ $iclISOCurrencyList->add(840, "US Dollar", "USD", 2);
56
+ $iclISOCurrencyList->add(68, "Boliviano", "BOB", 2);
57
+ $iclISOCurrencyList->add(214, "Dominican Peso", "DOP", 2);
58
+ $iclISOCurrencyList->add(818, "Egyptian Pound", "EGP", 2);
59
+ $iclISOCurrencyList->add(170, "Colombian Peso", "COP", 2);
60
+ $iclISOCurrencyList->add(986, "Brazilian Real", "BRL", 2);
61
+ $iclISOCurrencyList->add(961, "Silver (one Troy ounce)", "XAG", 0);
62
+ $iclISOCurrencyList->add(973, "Kwanza", "AOA", 2);
63
+ $iclISOCurrencyList->add(962, "Platinum (one Troy ounce)", "XPT", 0);
64
+ $iclISOCurrencyList->add(414, "Kuwaiti Dinar", "KWD", 3);
65
+ $iclISOCurrencyList->add(604, "Nuevo Sol", "PEN", 2);
66
+ $iclISOCurrencyList->add(702, "Singapore Dollar", "SGD", 2);
67
+ $iclISOCurrencyList->add(862, "Venezuelan bol�var", "VEB", 2);
68
+ $iclISOCurrencyList->add(953, "CFP franc", "XPF", 0);
69
+ $iclISOCurrencyList->add(558, "Cordoba Oro", "NIO", 2);
70
+ $iclISOCurrencyList->add(348, "Forint", "HUF", 2);
71
+ $iclISOCurrencyList->add(948, "WIR Franc ", "CHW", 2);
72
+ $iclISOCurrencyList->add(116, "Riel", "KHR", 2);
73
+ $iclISOCurrencyList->add(956, "European Monetary Unit", "XBB", 0);
74
+ $iclISOCurrencyList->add(156, "Yuan Renminbi", "CNY", 2);
75
+ $iclISOCurrencyList->add(834, "Tanzanian Shilling", "TZS", 2);
76
+ $iclISOCurrencyList->add(997, "", "USN", 2);
77
+ $iclISOCurrencyList->add(981, "Lari", "GEL", 2);
78
+ $iclISOCurrencyList->add(242, "Fiji Dollar", "FJD", 2);
79
+ $iclISOCurrencyList->add(941, "Serbian Dinar", "RSD", 2);
80
+ $iclISOCurrencyList->add(104, "Kyat", "MMK", 2);
81
+ $iclISOCurrencyList->add(84, " Belize Dollar", "BZD", 2);
82
+ $iclISOCurrencyList->add(710, "South African Rand", "ZAR", 2);
83
+ $iclISOCurrencyList->add(760, "Syrian Pound", "SYP", 2);
84
+ $iclISOCurrencyList->add(512, "Rial Omani", "OMR", 3);
85
+ $iclISOCurrencyList->add(324, "Guinea Franc", "GNF", 0);
86
+ $iclISOCurrencyList->add(196, "Cyprus Pound", "CYP", 2);
87
+ $iclISOCurrencyList->add(960, "Special Drawing Rights", "XDR", 0);
88
+ $iclISOCurrencyList->add(716, "Zimbabwe Dollar", "ZWD", 2);
89
+ $iclISOCurrencyList->add(972, "Somoni", "TJS", 2);
90
+ $iclISOCurrencyList->add(462, "Rufiyaa", "MVR", 2);
91
+ $iclISOCurrencyList->add(979, "Mexican Unidad de Inversion (UDI)", "MXV", 2);
92
+ $iclISOCurrencyList->add(860, "Uzbekistan Som", "UZS", 2);
93
+ $iclISOCurrencyList->add(12, "Algerian Dinar", "DZD", 2);
94
+ $iclISOCurrencyList->add(332, "Haiti Gourde", "HTG", 2);
95
+ $iclISOCurrencyList->add(963, "Code reserved for testing purposes", "XTS", 0);
96
+ $iclISOCurrencyList->add(32, "Argentine Peso", "ARS", 2);
97
+ $iclISOCurrencyList->add(642, "Romanian Leu", "ROL", 2);
98
+ $iclISOCurrencyList->add(984, "Bolivian Mvdol (Funds code)", "BOV", 2);
99
+ $iclISOCurrencyList->add(440, "Lithuanian Litas", "LTL", 2);
100
+ $iclISOCurrencyList->add(480, "Mauritius Rupee", "MUR", 2);
101
+ $iclISOCurrencyList->add(426, "Loti", "LSL", 2);
102
+ $iclISOCurrencyList->add(262, "Djibouti Franc", "DJF", 0);
103
+ $iclISOCurrencyList->add(886, "Yemeni Rial", "YER", 2);
104
+ $iclISOCurrencyList->add(748, "Lilangeni", "SZL", 2);
105
+ $iclISOCurrencyList->add(192, "Cuban Peso", "CUP", 2);
106
+ $iclISOCurrencyList->add(548, "Vatu", "VUV", 0);
107
+ $iclISOCurrencyList->add(360, "Rupiah", "IDR", 2);
108
+ $iclISOCurrencyList->add(51, "Armenian Dram", "AMD", 2);
109
+ $iclISOCurrencyList->add(894, "Kwacha", "ZMK", 2);
110
+ $iclISOCurrencyList->add(90, "Solomon Islands Dollar", "SBD", 2);
111
+ $iclISOCurrencyList->add(132, "Cape Verde Escudo", "CVE", 2);
112
+ $iclISOCurrencyList->add(999, "No currency", "XXX", 0);
113
+ $iclISOCurrencyList->add(524, "Nepalese Rupee", "NPR", 2);
114
+ $iclISOCurrencyList->add(203, "Czech Koruna", "CZK", 2);
115
+ $iclISOCurrencyList->add(44, "Bahamian Dollar", "BSD", 2);
116
+ $iclISOCurrencyList->add(96, "Brunei Dollar", "BND", 2);
117
+ $iclISOCurrencyList->add(50, "Bangladeshi Taka", "BDT", 2);
118
+ $iclISOCurrencyList->add(404, "Kenyan Shilling", "KES", 2);
119
+ $iclISOCurrencyList->add(947, "WIR Euro ", "CHE", 2);
120
+ $iclISOCurrencyList->add(964, "Palladium (one Troy ounce)", "XPD", 0);
121
+ $iclISOCurrencyList->add(398, "Tenge", "KZT", 2);
122
+ $iclISOCurrencyList->add(352, "Iceland Krona", "ISK", 2);
123
+ $iclISOCurrencyList->add(64, "Ngultrum", "BTN", 2);
124
+ $iclISOCurrencyList->add(533, "Aruban Guilder", "AWG", 2);
125
+ $iclISOCurrencyList->add(230, "Ethiopian Birr", "ETB", 2);
126
+ $iclISOCurrencyList->add(800, "Uganda Shilling", "UGX", 2);
127
+ $iclISOCurrencyList->add(968, "Surinam Dollar", "SRD", 2);
128
+ $iclISOCurrencyList->add(882, "Samoan Tala", "WST", 2);
129
+ $iclISOCurrencyList->add(454, "Kwacha", "MWK", 2);
130
+ $iclISOCurrencyList->add(985, "Zloty", "PLN", 2);
131
+ $iclISOCurrencyList->add(124, "Canadian Dollar", "CAD", 2);
132
+ $iclISOCurrencyList->add(776, "Pa'anga", "TOP", 2);
133
+ $iclISOCurrencyList->add(208, "Danish Krone", "DKK", 2);
134
+ $iclISOCurrencyList->add(108, "Burundian Franc", "BIF", 0);
135
+ $iclISOCurrencyList->add(764, "Baht", "THB", 2);
136
+ $iclISOCurrencyList->add(458, "Malaysian Ringgit", "MYR", 2);
137
+ $iclISOCurrencyList->add(364, "Iranian Rial", "IRR", 2);
138
+ $iclISOCurrencyList->add(600, "Guarani", "PYG", 0);
139
+ $iclISOCurrencyList->add(977, "Convertible Marks", "BAM", 2);
140
+ $iclISOCurrencyList->add(446, "Pataca", "MOP", 2);
141
+ $iclISOCurrencyList->add(780, "Trinidad and Tobago Dollar", "TTD", 2);
142
+ $iclISOCurrencyList->add(703, "Slovak Koruna", "SKK", 2);
143
+ $iclISOCurrencyList->add(958, "European Unit of Account 17 (E.U.A.-17)", "XBD", 0);
144
+ $iclISOCurrencyList->add(430, "Liberian Dollar", "LRD", 2);
145
+ $iclISOCurrencyList->add(191, "Croatian Kuna", "HRK", 2);
146
+ $iclISOCurrencyList->add(694, "Leone", "SLL", 2);
147
+ $iclISOCurrencyList->add(756, "Swiss Franc", "CHF", 2);
148
+ $iclISOCurrencyList->add(969, "Malagasy Ariary", "MGA", 0);
149
+ $iclISOCurrencyList->add(270, "Dalasi", "GMD", 2);
150
+ $iclISOCurrencyList->add(418, "Kip", "LAK", 2);
151
+ $iclISOCurrencyList->add(516, "Namibian Dollar", "NAD", 2);
152
+ $iclISOCurrencyList->add(392, "Japanese yen", "JPY", 0);
153
+ $iclISOCurrencyList->add(320, "Quetzal", "GTQ", 2);
154
+ $iclISOCurrencyList->add(554, "New Zealand Dollar", "NZD", 2);
155
+ $iclISOCurrencyList->add(578, "Norwegian Krone", "NOK", 2);
156
+ $iclISOCurrencyList->add(376, "New Israeli Shekel", "ILS", 2);
157
+ $iclISOCurrencyList->add(957, "European Unit of Account 9 (E.U.A.-9)", "XBC", 0);
158
+ $iclISOCurrencyList->add(498, "Moldovan Leu", "MDL", 2);
159
+ $iclISOCurrencyList->add(998, "", "USS", 2);
160
+ $iclISOCurrencyList->add(955, "European Composite Unit (EURCO)", "XBA", 0);
161
+ $iclISOCurrencyList->add(344, "Hong Kong Dollar", "HKD", 2);
162
+ $iclISOCurrencyList->add(417, "Som", "KGS", 2);
163
+ $iclISOCurrencyList->add(858, "Peso Uruguayo", "UYU", 2);
164
+ $iclISOCurrencyList->add(60, "Bermudian Dollar ", "BMD", 2);
165
+ $iclISOCurrencyList->add(682, "Saudi Riyal", "SAR", 2);
166
+ $iclISOCurrencyList->add(643, "Russian Ruble", "RUB", 2);
167
+ $iclISOCurrencyList->add(470, "Maltese Lira", "MTL", 2);
168
+ $iclISOCurrencyList->add(340, "Lempira", "HNL", 2);
169
+ $iclISOCurrencyList->add(72, "Pula", "BWP", 2);
170
+ $iclISOCurrencyList->add(368, "Iraqi Dinar", "IQD", 3);
171
+ $iclISOCurrencyList->add(188, "Costa Rican Colon", "CRC", 2);
172
+ $iclISOCurrencyList->add(144, "Sri Lanka Rupee", "LKR", 2);
173
+ $iclISOCurrencyList->add(752, "Swedish Krona", "SEK", 2);
174
+ $iclISOCurrencyList->add(136, "Cayman Islands Dollar", "KYD", 2);
175
+ $iclISOCurrencyList->add(8, "Lek", "ALL", 2);
176
+ $iclISOCurrencyList->add(48, "Bahraini Dinar", "BHD", 3);
177
+ $iclISOCurrencyList->add(795, "Manat", "TMM", 2);
178
+ $iclISOCurrencyList->add(938, "Sudanese Pound", "SDG", 2);
179
+ $iclISOCurrencyList->add(590, "Balboa", "PAB", 2);
180
+ $iclISOCurrencyList->add(152, "Chilean Peso", "CLP", 0);
181
+ $iclISOCurrencyList->add(980, "Hryvnia", "UAH", 2);
182
+ $iclISOCurrencyList->add(428, "Latvian Lats", "LVL", 2);
183
+ $iclISOCurrencyList->add(288, "Cedi", "GHS", 2);
184
+ $iclISOCurrencyList->add(978, "Euro", "EUR", 2);
185
+ $iclISOCurrencyList->add(976, "Franc Congolais", "CDF", 2);
186
+ $iclISOCurrencyList->add(586, "Pakistan Rupee", "PKR", 2);
187
+ $iclISOCurrencyList->add(408, "North Korean Won", "KPW", 2);
188
+ $iclISOCurrencyList->add(388, "Jamaican Dollar", "JMD", 2);
189
+ $iclISOCurrencyList->add(990, "Unidades de formento", "CLF", 0);
190
+ $iclISOCurrencyList->add(971, "Afghani", "AFN", 2);
191
+ $iclISOCurrencyList->add(975, "Bulgarian Lev", "BGN", 2);
192
+ $iclISOCurrencyList->add(36, "Australian Dollar", "AUD", 2);
193
+ $iclISOCurrencyList->add(238, "Falkland Islands Pound", "FKP", 2);
194
+ $iclISOCurrencyList->add(901, "New Taiwan Dollar", "TWD", 2);
195
+ $iclISOCurrencyList->add(784, "United Arab Emirates dirham", "AED", 2);
196
+
197
+ return $iclISOCurrencyList;
198
+ }
199
+ }
app/code/local/PayVector/Tpg/Model/Common/PaymentFormHelper.php ADDED
@@ -0,0 +1,539 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class TPG_ListItemList
4
+ {
5
+ private $m_lilListItemList;
6
+
7
+ public function getCount()
8
+ {
9
+ return count($this->m_lilListItemList);
10
+ }
11
+
12
+ public function getAt($nIndex)
13
+ {
14
+ if ($nIndex < 0 ||
15
+ $nIndex >= count($this->m_lilListItemList))
16
+ {
17
+ throw new Exception('Array index out of bounds');
18
+ }
19
+
20
+ return $this->m_lilListItemList[$nIndex];
21
+ }
22
+
23
+ public function add($szName, $szValue, $boIsSelected)
24
+ {
25
+ $liListItem = new TPG_ListItem($szName, $szValue, $boIsSelected);
26
+
27
+ $this->m_lilListItemList[] = $liListItem;
28
+ }
29
+
30
+ public function toString()
31
+ {
32
+ $szReturnString = "";
33
+
34
+ for ($nCount = 0; $nCount < count($this->m_lilListItemList); $nCount++)
35
+ {
36
+ $liListItem = $this->m_lilListItemList[$nCount];
37
+
38
+ $szReturnString = $szReturnString."<option";
39
+
40
+ if ($liListItem->getValue() != null &&
41
+ $liListItem->getValue() != "")
42
+ {
43
+ $szReturnString = $szReturnString." value=\"".$liListItem->getValue()."\"";
44
+ }
45
+
46
+ if ($liListItem->getIsSelected() == true)
47
+ {
48
+ $szReturnString = $szReturnString." selected=\"selected\"";
49
+ }
50
+
51
+ $szReturnString = $szReturnString.">".$liListItem->getName()."</option>\n";
52
+ }
53
+
54
+ return ($szReturnString);
55
+ }
56
+
57
+ //constructor
58
+ public function __construct()
59
+ {
60
+ $this->m_lilListItemList = array();
61
+ }
62
+ }
63
+
64
+ class TPG_ListItem
65
+ {
66
+ private $m_szName;
67
+ private $m_szValue;
68
+ private $m_boIsSelected;
69
+
70
+ //public properties
71
+ public function getName()
72
+ {
73
+ return $this->m_szName;
74
+ }
75
+
76
+ public function getValue()
77
+ {
78
+ return $this->m_szValue;
79
+ }
80
+
81
+ public function getIsSelected()
82
+ {
83
+ return $this->m_boIsSelected;
84
+ }
85
+
86
+ //constructor
87
+ public function __construct($szName, $szValue, $boIsSelected)
88
+ {
89
+ $this->m_szName = $szName;
90
+ $this->m_szValue = $szValue;
91
+ $this->m_boIsSelected = $boIsSelected;
92
+ }
93
+ }
94
+
95
+ class TPG_PaymentFormHelper
96
+ {
97
+ /**
98
+ * Hash mechanism for hosted payment form trasaction
99
+ *
100
+ * @param string $szMerchantID
101
+ * @param string $szPassword
102
+ * @param string $hmHashMethod
103
+ * @param string $szPreSharedKey
104
+ * @param int $nAmount
105
+ * @param int $nCurrencyCode
106
+ * @param string $szEchoCardType
107
+ * @param string $szOrderID
108
+ * @param string $szTransactionType
109
+ * @param string $szTransactionDateTime
110
+ * @param string $szCallbackURL
111
+ * @param string $szOrderDescription
112
+ * @param string $szCustomerName
113
+ * @param string $szAddress1
114
+ * @param string $szAddress2
115
+ * @param string $szAddress3
116
+ * @param string $szAddress4
117
+ * @param string $szCity
118
+ * @param string $szState
119
+ * @param string $szPostCode
120
+ * @param int $nCountryCode
121
+ * @param bool $boCV2Mandatory
122
+ * @param bool $boAddress1Mandatory
123
+ * @param bool $boCityMandatory
124
+ * @param bool $boPostCodeMandatory
125
+ * @param bool $boStateMandatory
126
+ * @param bool $boCountryMandatory
127
+ * @param string $rdmResultdeliveryMethod
128
+ * @param string $szServerResultURL
129
+ * @param bool $boPaymentFormDisplaysResult
130
+ * @return string
131
+ */
132
+ public static function calculateHashDigest($szMerchantID, $szPassword, $hmHashMethod, $szPreSharedKey, $nAmount, $nCurrencyCode, $szEchoCardType, $szOrderID, $szTransactionType, $szTransactionDateTime, $szCallbackURL, $szOrderDescription, $szCustomerName, $szAddress1, $szAddress2, $szAddress3, $szAddress4, $szCity, $szState, $szPostCode, $nCountryCode, $boCV2Mandatory, $boAddress1Mandatory, $boCityMandatory, $boPostCodeMandatory, $boStateMandatory, $boCountryMandatory, $rdmResultdeliveryMethod, $szServerResultURL, $boPaymentFormDisplaysResult, $szServerResultURLCookieVariables, $szServerResultURLFormVariables, $szServerResultURLQueryStringVariables)
133
+ {
134
+ $szHashDigest = '';
135
+ $szStringBeforeHash;
136
+
137
+ $szStringBeforeHash =
138
+ 'MerchantID='.$szMerchantID.'&'.
139
+ 'Password='.$szPassword.'&'.
140
+ 'Amount='.$nAmount.'&'.
141
+ 'CurrencyCode='.$nCurrencyCode.'&'.
142
+ 'EchoCardType='.$szEchoCardType.'&'.
143
+ 'OrderID='.$szOrderID.'&'.
144
+ 'TransactionType='.$szTransactionType.'&'.
145
+ 'TransactionDateTime='.$szTransactionDateTime.'&'.
146
+ 'CallbackURL='.$szCallbackURL.'&'.
147
+ 'OrderDescription='.$szOrderDescription.'&'.
148
+ 'CustomerName='.$szCustomerName.'&'.
149
+ 'Address1='.$szAddress1.'&'.
150
+ 'Address2='.$szAddress2.'&'.
151
+ 'Address3='.$szAddress3.'&'.
152
+ 'Address4='.$szAddress4.'&'.
153
+ 'City='.$szCity.'&'.
154
+ 'State='.$szState.'&'.
155
+ 'PostCode='.$szPostCode.'&'.
156
+ 'CountryCode='.$nCountryCode.'&'.
157
+ 'CV2Mandatory='.$boCV2Mandatory.'&'.
158
+ 'Address1Mandatory='.$boAddress1Mandatory.'&'.
159
+ 'CityMandatory='.$boCityMandatory.'&'.
160
+ 'PostCodeMandatory='.$boPostCodeMandatory.'&'.
161
+ 'StateMandatory='.$boStateMandatory.'&'.
162
+ 'CountryMandatory='.$boCountryMandatory.'&'.
163
+ 'ResultDeliveryMethod='.$rdmResultdeliveryMethod.'&'.
164
+ 'ServerResultURL='.$szServerResultURL.'&'.
165
+ 'PaymentFormDisplaysResult='.$boPaymentFormDisplaysResult.'&'.
166
+ 'ServerResultURLCookieVariables='.$szServerResultURLCookieVariables.'&'.
167
+ 'ServerResultURLFormVariables='.$szServerResultURLFormVariables.'&'.
168
+ 'ServerResultURLQueryStringVariables='.$szServerResultURLQueryStringVariables;
169
+
170
+ if ($hmHashMethod == PayVector_Tpg_Model_Source_HashMethod::HASH_METHOD_MD5 ||
171
+ $hmHashMethod == PayVector_Tpg_Model_Source_HashMethod::HASH_METHOD_SHA1)
172
+ {
173
+ $szStringBeforeHash = 'PreSharedKey='.$szPreSharedKey.'&'.$szStringBeforeHash;
174
+ }
175
+
176
+ $szHashDigest = self::_hashCalculator($hmHashMethod, $szPreSharedKey, $szStringBeforeHash);
177
+
178
+ return $szHashDigest;
179
+ }
180
+
181
+ /**
182
+ * Hash mechanism for transparent redirect trasaction
183
+ *
184
+ * @param unknown_type $szMerchantID
185
+ * @param unknown_type $szPassword
186
+ * @param unknown_type $hmHashMethod
187
+ * @param unknown_type $szPreSharedKey
188
+ * @param unknown_type $nAmount
189
+ * @param unknown_type $nCurrencyCode
190
+ * @param unknown_type $szOrderID
191
+ * @param unknown_type $szTransactionType
192
+ * @param unknown_type $szTransactionDateTime
193
+ * @param unknown_type $szCallbackURL
194
+ * @param unknown_type $szOrderDescription
195
+ * @return unknown
196
+ */
197
+ public static function calculateTransparentRedirectHashDigest($szMerchantID, $szPassword, $hmHashMethod, $szPreSharedKey, $nAmount, $nCurrencyCode, $szOrderID, $szTransactionType, $szTransactionDateTime, $szCallbackURL, $szOrderDescription)
198
+ {
199
+ $szHashDigest = '';
200
+ $szStringBeforeHash;
201
+
202
+ $szStringBeforeHash = 'MerchantID='.$szMerchantID.'&'.
203
+ 'Password='.$szPassword.'&'.
204
+ 'Amount='.$nAmount.'&'.
205
+ 'CurrencyCode='.$nCurrencyCode.'&'.
206
+ 'OrderID='.$szOrderID.'&'.
207
+ 'TransactionType='.$szTransactionType.'&'.
208
+ 'TransactionDateTime='.$szTransactionDateTime.'&'.
209
+ 'CallbackURL='.$szCallbackURL.'&'.
210
+ 'OrderDescription='.$szOrderDescription;
211
+
212
+ if ($hmHashMethod == PayVector_Tpg_Model_Source_HashMethod::HASH_METHOD_MD5 ||
213
+ $hmHashMethod == PayVector_Tpg_Model_Source_HashMethod::HASH_METHOD_SHA1)
214
+ {
215
+ $szStringBeforeHash = 'PreSharedKey='.$szPreSharedKey.'&'.$szStringBeforeHash;
216
+ }
217
+
218
+ $szHashDigest = self::_hashCalculator($hmHashMethod, $szPreSharedKey, $szStringBeforeHash);
219
+
220
+ return $szHashDigest;
221
+ }
222
+
223
+ /**
224
+ * Hash mechanism for calculating the hash digest for the post 3D Secure Authentication in the transparent redirect payment mode
225
+ *
226
+ * @param unknown_type $szMerchantID
227
+ * @param unknown_type $szPassword
228
+ * @param unknown_type $hmHashMethod
229
+ * @param unknown_type $szPreSharedKey
230
+ * @param unknown_type $szPaRES
231
+ * @param unknown_type $szCrossReference
232
+ * @param unknown_type $szTransactionDateTime
233
+ * @param unknown_type $szCallbackURL
234
+ * @return unknown
235
+ */
236
+ public static function calculatePostThreeDSecureAuthenticationHashDigest($szMerchantID, $szPassword, $hmHashMethod, $szPreSharedKey, $szPaRES, $szCrossReference, $szTransactionDateTime, $szCallbackURL)
237
+ {
238
+ $szHashDigest = '';
239
+ $szStringBeforeHash;
240
+
241
+ $szStringBeforeHash = 'MerchantID='.$szMerchantID.'&'.
242
+ 'Password='.$szPassword.'&'.
243
+ 'CrossReference='.$szCrossReference.'&'.
244
+ 'TransactionDateTime='.$szTransactionDateTime.'&'.
245
+ 'CallbackURL='.$szCallbackURL.'&'.
246
+ 'PaRES='.$szPaRES;
247
+
248
+
249
+ if ($hmHashMethod == PayVector_Tpg_Model_Source_HashMethod::HASH_METHOD_MD5 ||
250
+ $hmHashMethod == PayVector_Tpg_Model_Source_HashMethod::HASH_METHOD_SHA1)
251
+ {
252
+ $szStringBeforeHash = 'PreSharedKey='.$szPreSharedKey.'&'.$szStringBeforeHash;
253
+ }
254
+
255
+ $szHashDigest = self::_hashCalculator($hmHashMethod, $szPreSharedKey, $szStringBeforeHash);
256
+
257
+ return $szHashDigest;
258
+ }
259
+
260
+ /**
261
+ * Private hash calculator for hashing the raw string
262
+ *
263
+ * @param unknown_type $hmHashMethod
264
+ * @param unknown_type $szPreSharedKey
265
+ * @param unknown_type $szStringBeforeHash
266
+ * @return unknown
267
+ */
268
+ private static function _hashCalculator($hmHashMethod, $szPreSharedKey, $szStringBeforeHash)
269
+ {
270
+ $szHashDigest = '';
271
+
272
+ switch ($hmHashMethod)
273
+ {
274
+ case PayVector_Tpg_Model_Source_HashMethod::HASH_METHOD_MD5:
275
+ $szHashDigest = md5($szStringBeforeHash);
276
+ break;
277
+ case PayVector_Tpg_Model_Source_HashMethod::HASH_METHOD_SHA1:
278
+ $szHashDigest = sha1($szStringBeforeHash);
279
+ break;
280
+ case PayVector_Tpg_Model_Source_HashMethod::HASH_METHOD_HMACMD5:
281
+ $szHashDigest = hash_hmac('md5', $szStringBeforeHash, $szPreSharedKey);
282
+ break;
283
+ case PayVector_Tpg_Model_Source_HashMethod::HASH_METHOD_HMACSHA1:
284
+ $szHashDigest = hash_hmac('sha1', $szStringBeforeHash, $szPreSharedKey);
285
+ break;
286
+ default:
287
+ throw new Exception('Invalid hash method used for hash digest calculation: '.$hmHashMethod);
288
+ break;
289
+ }
290
+
291
+ //$szHashDigest = strtoupper($szHashDigest);
292
+
293
+ return $szHashDigest;
294
+ }
295
+
296
+ /**
297
+ * Hash validator mechanism for hosted payment form transaction
298
+ *
299
+ * @param unknown_type $szHashDigest
300
+ * @param unknown_type $szMerchantID
301
+ * @param unknown_type $szStatusCode
302
+ * @param unknown_type $szMessage
303
+ * @param unknown_type $szPreviousStatusCode
304
+ * @param unknown_type $szPreviousMessage
305
+ * @param unknown_type $szCrossReference
306
+ * @param unknown_type $szAmount
307
+ * @param unknown_type $szCurrencyCode
308
+ * @param unknown_type $szOrderID
309
+ * @param unknown_type $szTransactionType
310
+ * @param unknown_type $szTransactionDateTime
311
+ * @param unknown_type $szOrderDescription
312
+ * @param unknown_type $szCustomerName
313
+ * @param unknown_type $szAddress1
314
+ * @param unknown_type $szAddress2
315
+ * @param unknown_type $szAddress3
316
+ * @param unknown_type $szAddress4
317
+ * @param unknown_type $szCity
318
+ * @param unknown_type $szState
319
+ * @param unknown_type $szPostCode
320
+ * @param unknown_type $szCountryCode
321
+ * @return unknown
322
+ */
323
+ public static function compareHostedPaymentFormHashDigest($formVariables, $szPassword, $hmHashMethod, $szPreSharedKey)
324
+ {
325
+ $boMatch = false;
326
+ $szCalculatedHashDigest;
327
+ $szStringBeforeHash;
328
+
329
+ $szStringBeforeHash =
330
+ 'MerchantID='.$formVariables['MerchantID'].'&'.
331
+ 'Password='.$szPassword.'&'.
332
+ 'StatusCode='.$formVariables['StatusCode'].'&'.
333
+ 'Message='.$formVariables['Message'].'&'.
334
+ 'PreviousStatusCode='.$formVariables['PreviousStatusCode'].'&'.
335
+ 'PreviousMessage='.$formVariables['PreviousMessage'].'&'.
336
+ 'CrossReference='.$formVariables['CrossReference'].'&'.
337
+ 'CardType='.$formVariables['CardType'].'&'.
338
+ 'CardClass='.$formVariables['CardClass'].'&'.
339
+ 'CardIssuer='.$formVariables['CardIssuer'].'&'.
340
+ 'CardIssuerCountryCode='.$formVariables['CardIssuerCountryCode'].'&'.
341
+ 'Amount='.$formVariables['Amount'].'&'.
342
+ 'CurrencyCode='.$formVariables['CurrencyCode'].'&'.
343
+ 'OrderID='.$formVariables['OrderID'].'&'.
344
+ 'TransactionType='.$formVariables['TransactionType'].'&'.
345
+ 'TransactionDateTime='.$formVariables['TransactionDateTime'].'&'.
346
+ 'OrderDescription='.$formVariables['OrderDescription'].'&'.
347
+ 'CustomerName='.$formVariables['CustomerName'].'&'.
348
+ 'Address1='.$formVariables['Address1'].'&'.
349
+ 'Address2='.$formVariables['Address2'].'&'.
350
+ 'Address3='.$formVariables['Address3'].'&'.
351
+ 'Address4='.$formVariables['Address4'].'&'.
352
+ 'City='.$formVariables['City'].'&'.
353
+ 'State='.$formVariables['State'].'&'.
354
+ 'PostCode='.$formVariables['PostCode'].'&'.
355
+ 'CountryCode='.$formVariables['CountryCode'];
356
+
357
+ if ($hmHashMethod == PayVector_Tpg_Model_Source_HashMethod::HASH_METHOD_MD5 ||
358
+ $hmHashMethod == PayVector_Tpg_Model_Source_HashMethod::HASH_METHOD_SHA1)
359
+ {
360
+ $szStringBeforeHash = 'PreSharedKey='.$szPreSharedKey.'&'.$szStringBeforeHash;
361
+ }
362
+
363
+ $szCalculatedHashDigest = self::_hashCalculator($hmHashMethod, $szPreSharedKey, $szStringBeforeHash);
364
+ if(strtoupper($formVariables['HashDigest']) == strtoupper($szCalculatedHashDigest))
365
+ {
366
+ $boMatch = true;
367
+ }
368
+
369
+ return $boMatch;
370
+ }
371
+
372
+ /**
373
+ * Hash validator mechanism for the incoming payment complete hash in transparent redirect payment mode
374
+ *
375
+ * @param unknown_type $formVariables
376
+ * @param unknown_type $szPassword
377
+ * @param unknown_type $hmHashMethod
378
+ * @param unknown_type $szPreSharedKey
379
+ * @return unknown
380
+ */
381
+ public static function comparePaymentCompleteHashDigest($formVariables, $szPassword, $hmHashMethod, $szPreSharedKey)
382
+ {
383
+ $boMatch = false;
384
+ $szCalculatedHashDigest;
385
+ $szStringBeforeHash;
386
+
387
+ if ($hmHashMethod == PayVector_Tpg_Model_Source_HashMethod::HASH_METHOD_MD5 ||
388
+ $hmHashMethod == PayVector_Tpg_Model_Source_HashMethod::HASH_METHOD_SHA1)
389
+ {
390
+ $szStringBeforeHash = 'PreSharedKey='.$szPreSharedKey.'&';
391
+ }
392
+
393
+ $szStringBeforeHash .= 'MerchantID=' . $formVariables['MerchantID'] .
394
+ '&Password=' . $szPassword .
395
+ '&StatusCode=' . $formVariables['StatusCode'] .
396
+ '&Message=' . $formVariables['Message'] .
397
+ '&PreviousStatusCode=' . $formVariables['PreviousStatusCode'] .
398
+ '&PreviousMessage=' . $formVariables['PreviousMessage'] .
399
+ '&CrossReference=' . $formVariables['CrossReference'] .
400
+ '&AddressNumericCheckResult=' . $formVariables['AddressNumericCheckResult'] .
401
+ '&PostCodeCheckResult=' . $formVariables['PostCodeCheckResult'] .
402
+ '&CV2CheckResult=' . $formVariables['CV2CheckResult'] .
403
+ '&ThreeDSecureAuthenticationCheckResult=' . $formVariables['ThreeDSecureAuthenticationCheckResult'] .
404
+ '&CardType=' . $formVariables['CardType'] .
405
+ '&CardClass=' . $formVariables['CardClass'] .
406
+ '&CardIssuer='. $formVariables['CardIssuer'] .
407
+ '&CardIssuerCountryCode=' . $formVariables['CardIssuerCountryCode'] .
408
+ '&Amount=' . $formVariables['Amount'] .
409
+ '&CurrencyCode=' . $formVariables['CurrencyCode'] .
410
+ '&OrderID=' . $formVariables['OrderID'] .
411
+ '&TransactionType='. $formVariables['TransactionType'] .
412
+ '&TransactionDateTime=' . $formVariables['TransactionDateTime'] .
413
+ '&OrderDescription=' . $formVariables['OrderDescription'] .
414
+ '&Address1=' . $formVariables['Address1'] .
415
+ '&Address2=' . $formVariables['Address2'] .
416
+ '&Address3=' . $formVariables['Address3'] .
417
+ '&Address4=' . $formVariables['Address4'] .
418
+ '&City=' . $formVariables['City'] .
419
+ '&State=' . $formVariables['State'] .
420
+ '&PostCode=' . $formVariables['PostCode'] .
421
+ '&CountryCode=' . $formVariables['CountryCode'] .
422
+ '&EmailAddress=' .$formVariables['EmailAddress'] .
423
+ '&PhoneNumber=' . $formVariables['PhoneNumber'];
424
+
425
+ $szCalculatedHashDigest = self::_hashCalculator($hmHashMethod, $szPreSharedKey, $szStringBeforeHash);
426
+ if(strtoupper($formVariables['HashDigest']) == strtoupper($szCalculatedHashDigest))
427
+ {
428
+ $boMatch = true;
429
+ }
430
+
431
+ return $boMatch;
432
+ }
433
+
434
+ /**
435
+ * Hash validator mechanism for the 3D Secure Authentication required hash in the transparent redirect payment mode
436
+ *
437
+ * @param unknown_type $formVariables
438
+ * @param unknown_type $szPassword
439
+ * @param unknown_type $hmHashMethod
440
+ * @param unknown_type $szPreSharedKey
441
+ * @return unknown
442
+ */
443
+ public static function compareThreeDSecureAuthenticationRequiredHashDigest($formVariables, $szPassword, $hmHashMethod, $szPreSharedKey)
444
+ {
445
+ $boMatch = false;
446
+ $szCalculatedHashDigest;
447
+ $szStringBeforeHash;
448
+
449
+ $szStringBeforeHash = 'MerchantID='.$formVariables['MerchantID'].'&'.
450
+ 'Password='.$szPassword.'&'.
451
+ 'StatusCode='.$formVariables['StatusCode'].'&'.
452
+ 'Message='.$formVariables['Message'].'&'.
453
+ 'CrossReference='.$formVariables['CrossReference'].'&'.
454
+ 'OrderID='.$formVariables['OrderID'].'&'.
455
+ 'TransactionDateTime='.$formVariables['TransactionDateTime'].'&'.
456
+ 'ACSURL='.$formVariables['ACSURL'].'&'.
457
+ 'PaREQ='.$formVariables['PaREQ'];
458
+
459
+ if ($hmHashMethod == PayVector_Tpg_Model_Source_HashMethod::HASH_METHOD_MD5 ||
460
+ $hmHashMethod == PayVector_Tpg_Model_Source_HashMethod::HASH_METHOD_SHA1)
461
+ {
462
+ $szStringBeforeHash = 'PreSharedKey='.$szPreSharedKey.'&'.$szStringBeforeHash;
463
+ }
464
+
465
+ $szCalculatedHashDigest = self::_hashCalculator($hmHashMethod, $szPreSharedKey, $szStringBeforeHash);
466
+ if(strtoupper($formVariables['HashDigest']) == strtoupper($szCalculatedHashDigest))
467
+ {
468
+ $boMatch = true;
469
+ }
470
+
471
+ return $boMatch;
472
+ }
473
+
474
+ /**
475
+ * Convert a URL string to a name value array collection
476
+ *
477
+ * @param unknown_type $szInputVariableString
478
+ * @return unknown
479
+ */
480
+ public static function getVariableCollectionFromString($szInputVariableString)
481
+ {
482
+ $arVariableCollection = array();
483
+
484
+ $arURLVariableArray = explode('&', $szInputVariableString);
485
+ for($nCount = 0; $nCount < sizeof($arURLVariableArray); $nCount++)
486
+ {
487
+ $szNameValue = $arURLVariableArray[$nCount];
488
+ $arNameValue = explode('=', $szNameValue);
489
+ if(sizeof($arNameValue) == 1)
490
+ {
491
+ $arVariableCollection[$arNameValue[0]] = '';
492
+ }
493
+ else
494
+ {
495
+ $arVariableCollection[$arNameValue[0]] = $arNameValue[1];
496
+ }
497
+ }
498
+
499
+ return ($arVariableCollection);
500
+ }
501
+
502
+ /**
503
+ * Hash validator mechanism for the SERVER and SERVER_PULL methods
504
+ *
505
+ * @param unknown_type $formVariables
506
+ * @param unknown_type $szPassword
507
+ * @param unknown_type $hmHashMethod
508
+ * @param unknown_type $szPreSharedKey
509
+ */
510
+ public static function compareServerHashDigest($formVariables, $szPassword, $hmHashMethod, $szPreSharedKey)
511
+ {
512
+ $boMatch = false;
513
+ $szHashDigest = isset($formVariables['HashDigest']) ? $formVariables['HashDigest'] : false;
514
+ $szMerchantID = isset($formVariables['MerchantID']) ? $formVariables['MerchantID'] : false;
515
+ $szCrossReference = isset($formVariables['CrossReference']) ? $formVariables['CrossReference'] : false;
516
+ $szOrderID = isset($formVariables['OrderID']) ? $formVariables['OrderID'] : false;
517
+
518
+ $szStringBeforeHash = 'MerchantID='.$szMerchantID.'&'.
519
+ 'Password='.$szPassword.'&'.
520
+ 'CrossReference='.$szCrossReference.'&'.
521
+ 'OrderID='.$szOrderID;
522
+
523
+ if ($hmHashMethod == PayVector_Tpg_Model_Source_HashMethod::HASH_METHOD_MD5 ||
524
+ $hmHashMethod == PayVector_Tpg_Model_Source_HashMethod::HASH_METHOD_SHA1)
525
+ {
526
+ $szStringBeforeHash = 'PreSharedKey='.$szPreSharedKey.'&'.$szStringBeforeHash;
527
+ }
528
+
529
+ $szCalculatedHashDigest = self::_hashCalculator($hmHashMethod, $szPreSharedKey, $szStringBeforeHash);
530
+
531
+ if(strtoupper($szHashDigest) === strtoupper($szCalculatedHashDigest))
532
+ {
533
+ $boMatch = true;
534
+ }
535
+
536
+ return $boMatch;
537
+ }
538
+ }
539
+ ?>
app/code/local/PayVector/Tpg/Model/Common/ThePaymentGateway/PaymentSystem.php ADDED
@@ -0,0 +1,3340 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ //accessing external files
3
+ require_once ("TPG_Common.php");
4
+ require_once ("SOAP.php");
5
+
6
+ /*****************/
7
+ /* Input classes */
8
+ /*****************/
9
+ class RequestGatewayEntryPoint extends GatewayEntryPoint
10
+ {
11
+ /**
12
+ * @var int
13
+ */
14
+ private $m_nRetryAttempts;
15
+
16
+ /**
17
+ * @return int
18
+ */
19
+ public function getRetryAttempts()
20
+ {
21
+ return $this -> m_nRetryAttempts;
22
+ }
23
+
24
+ /**
25
+ * @param string $szEntryPointURL
26
+ * @param int $nMetric
27
+ * @param int $nRetryAttempts
28
+ */
29
+ public function __construct($szEntryPointURL, $nMetric, $nRetryAttempts)
30
+ {
31
+ //do NOT forget to call the parent constructor too
32
+ //parent::GatewayEntryPoint($szEntryPointURL, $nMetric);
33
+ GatewayEntryPoint::__construct($szEntryPointURL, $nMetric);
34
+
35
+ $this -> m_nRetryAttempts = $nRetryAttempts;
36
+ }
37
+
38
+ }
39
+ class RequestGatewayEntryPointList
40
+ {
41
+ /**
42
+ * @var RequestGatewayEntryPoint[]
43
+ */
44
+ private $m_lrgepRequestGatewayEntryPoint;
45
+
46
+ /**
47
+ * @param int $nIndex
48
+ * @return RequestGatewayEntryPoint
49
+ * @throws Exception
50
+ */
51
+ public function getAt($nIndex)
52
+ {
53
+ if ($nIndex < 0 || $nIndex >= count($this -> m_lrgepRequestGatewayEntryPoint))
54
+ {
55
+ throw new Exception("Array index out of bounds");
56
+ }
57
+
58
+ return $this -> m_lrgepRequestGatewayEntryPoint[$nIndex];
59
+ }
60
+ /**
61
+ * @return int
62
+ */
63
+ public function getCount()
64
+ {
65
+ return count($this -> m_lrgepRequestGatewayEntryPoint);
66
+ }
67
+ /**
68
+ * @param string $ComparerClassName
69
+ * @param string $ComparerMethodName
70
+ */
71
+ public function sort($ComparerClassName, $ComparerMethodName)
72
+ {
73
+ usort($this -> m_lrgepRequestGatewayEntryPoint, array(
74
+ "$ComparerClassName",
75
+ "$ComparerMethodName"
76
+ ));
77
+ }
78
+ /**
79
+ * @param string $EntryPointURL
80
+ * @param int $nMetric
81
+ * @param int $nRetryAttempts
82
+ */
83
+ public function add($EntryPointURL, $nMetric, $nRetryAttempts)
84
+ {
85
+ array_push($this -> m_lrgepRequestGatewayEntryPoint, new RequestGatewayEntryPoint($EntryPointURL, $nMetric, $nRetryAttempts));
86
+ }
87
+
88
+ //constructor
89
+ public function __construct()
90
+ {
91
+ $this -> m_lrgepRequestGatewayEntryPoint = array();
92
+ }
93
+
94
+ }
95
+ class GenericVariable
96
+ {
97
+ /**
98
+ * @var string
99
+ */
100
+ private $m_szName;
101
+ /**
102
+ * @var string
103
+ */
104
+ private $m_szValue;
105
+
106
+ /**
107
+ * @return string
108
+ */
109
+ public function getName()
110
+ {
111
+ return $this -> m_szName;
112
+ }
113
+ /**
114
+ * @param string $name
115
+ */
116
+ public function setName($name)
117
+ {
118
+ $this -> m_szName = $name;
119
+ }
120
+ /**
121
+ * @return string
122
+ */
123
+ public function getValue()
124
+ {
125
+ return $this -> m_szValue;
126
+ }
127
+ /**
128
+ * @param string $value
129
+ */
130
+ public function setValue($value)
131
+ {
132
+ $this -> m_szValue = $value;
133
+ }
134
+
135
+ //constructor
136
+ public function __construct()
137
+ {
138
+ $this -> m_szName = "";
139
+ $this -> m_szValue = "";
140
+ }
141
+
142
+ }
143
+ class GenericVariableList
144
+ {
145
+ /**
146
+ * @var GenericVariable[]
147
+ */
148
+ private $m_lgvGenericVariableList;
149
+
150
+ /**
151
+ * @param int|string $intOrStringValue
152
+ * @return GenericVariable
153
+ * @throws Exception
154
+ */
155
+ public function getAt($intOrStringValue)
156
+ {
157
+ $nCount = 0;
158
+ $boFound = false;
159
+ $gvGenericVariable = null;
160
+
161
+ if (is_int($intOrStringValue))
162
+ {
163
+ if ($intOrStringValue < 0 || $intOrStringValue >= count($this -> m_lgvGenericVariableList))
164
+ {
165
+ throw new Exception("Array index out of bounds");
166
+ }
167
+
168
+ return $this -> m_lgvGenericVariableList[$intOrStringValue];
169
+ }
170
+ elseif (is_string($intOrStringValue))
171
+ {
172
+ if ($intOrStringValue == null || $intOrStringValue == "")
173
+ {
174
+ return (null);
175
+ }
176
+
177
+ while (!$boFound && $nCount < count($this -> m_lgvGenericVariableList))
178
+ {
179
+ if (strtoupper($this -> m_lgvGenericVariableList[$nCount] -> getName()) == strtoupper($intOrStringValue))
180
+ {
181
+ $gvGenericVariable = $this -> m_lgvGenericVariableList[$nCount];
182
+ $boFound = true;
183
+ }
184
+ $nCount++;
185
+ }
186
+
187
+ return $gvGenericVariable;
188
+ }
189
+ else
190
+ {
191
+ throw new Exception("Invalid parameter type:$intOrStringValue");
192
+ }
193
+ }
194
+ /**
195
+ * @return int
196
+ */
197
+ public function getCount()
198
+ {
199
+ return count($this -> m_lgvGenericVariableList);
200
+ }
201
+ /**
202
+ * @param string $szName
203
+ * @param string $szValue
204
+ */
205
+ public function add($szName, $szValue)
206
+ {
207
+ if ($szName != null && $szName != "")
208
+ {
209
+ $genericVariable = new GenericVariable();
210
+ $genericVariable -> setName($szName);
211
+ $genericVariable -> setValue($szValue);
212
+ array_push($this -> m_lgvGenericVariableList, $genericVariable);
213
+ }
214
+ }
215
+
216
+ //constructor
217
+ public function __construct()
218
+ {
219
+ $this -> m_lgvGenericVariableList = array();
220
+ }
221
+
222
+ }
223
+ class CustomerDetails
224
+ {
225
+ /**
226
+ * @var BillingAddress
227
+ */
228
+ private $m_adBillingAddress;
229
+ /**
230
+ * @var string
231
+ */
232
+ private $m_szEmailAddress;
233
+ /**
234
+ * @var string
235
+ */
236
+ private $m_szPhoneNumber;
237
+ /**
238
+ * @var string
239
+ */
240
+ private $m_szCustomerIPAddress;
241
+
242
+ /**
243
+ * @return BillingAddress
244
+ */
245
+ public function getBillingAddress()
246
+ {
247
+ return $this -> m_adBillingAddress;
248
+ }
249
+ /**
250
+ * @return string
251
+ */
252
+ public function getEmailAddress()
253
+ {
254
+ return $this -> m_szEmailAddress;
255
+ }
256
+ /**
257
+ * @param string $emailAddress
258
+ */
259
+ public function setEmailAddress($emailAddress)
260
+ {
261
+ $this -> m_szEmailAddress = $emailAddress;
262
+ }
263
+ /**
264
+ * @return string
265
+ */
266
+ public function getPhoneNumber()
267
+ {
268
+ return $this -> m_szPhoneNumber;
269
+ }
270
+ /**
271
+ * @param string $phoneNumber
272
+ */
273
+ public function setPhoneNumber($phoneNumber)
274
+ {
275
+ $this -> m_szPhoneNumber = $phoneNumber;
276
+ }
277
+ /**
278
+ * @return string
279
+ */
280
+ public function getCustomerIPAddress()
281
+ {
282
+ return $this -> m_szCustomerIPAddress;
283
+ }
284
+ /**
285
+ * @param string $IPAddress
286
+ */
287
+ public function setCustomerIPAddress($IPAddress)
288
+ {
289
+ $this -> m_szCustomerIPAddress = $IPAddress;
290
+ }
291
+
292
+ //constructor
293
+ public function __construct()
294
+ {
295
+ $this -> m_adBillingAddress = new BillingAddress();
296
+ $this -> m_szEmailAddress = "";
297
+ $this -> m_szPhoneNumber = "";
298
+ $this -> m_szCustomerIPAddress = "";
299
+ }
300
+
301
+ }
302
+ class BillingAddress
303
+ {
304
+ /**
305
+ * @var string
306
+ */
307
+ private $m_szAddress1;
308
+ /**
309
+ * @var string
310
+ */
311
+ private $m_szAddress2;
312
+ /**
313
+ * @var string
314
+ */
315
+ private $m_szAddress3;
316
+ /**
317
+ * @var string
318
+ */
319
+ private $m_szAddress4;
320
+ /**
321
+ * @var string
322
+ */
323
+ private $m_szCity;
324
+ /**
325
+ * @var string
326
+ */
327
+ private $m_szState;
328
+ /**
329
+ * @var string
330
+ */
331
+ private $m_szPostCode;
332
+ /**
333
+ * @var NullableInt
334
+ */
335
+ private $m_nCountryCode;
336
+
337
+ /**
338
+ * @return string
339
+ */
340
+ public function getAddress1()
341
+ {
342
+ return $this -> m_szAddress1;
343
+ }
344
+ /**
345
+ * @param string $address1
346
+ */
347
+ public function setAddress1($address1)
348
+ {
349
+ $this -> m_szAddress1 = $address1;
350
+ }
351
+ /**
352
+ * @return string
353
+ */
354
+ public function getAddress2()
355
+ {
356
+ return $this -> m_szAddress2;
357
+ }
358
+ /**
359
+ * @param string $address2
360
+ */
361
+ public function setAddress2($address2)
362
+ {
363
+ $this -> m_szAddress2 = $address2;
364
+ }
365
+ /**
366
+ * @return string
367
+ */
368
+ public function getAddress3()
369
+ {
370
+ return $this -> m_szAddress3;
371
+ }
372
+ /**
373
+ * @param string $address3
374
+ */
375
+ public function setAddress3($address3)
376
+ {
377
+ $this -> m_szAddress3 = $address3;
378
+ }
379
+ /**
380
+ * @return string
381
+ */
382
+ public function getAddress4()
383
+ {
384
+ return $this -> m_szAddress4;
385
+ }
386
+ /**
387
+ * @param string $address4
388
+ */
389
+ public function setAddress4($address4)
390
+ {
391
+ $this -> m_szAddress4 = $address4;
392
+ }
393
+ /**
394
+ * @return string
395
+ */
396
+ public function getCity()
397
+ {
398
+ return $this -> m_szCity;
399
+ }
400
+ /**
401
+ * @param string $city
402
+ */
403
+ public function setCity($city)
404
+ {
405
+ $this -> m_szCity = $city;
406
+ }
407
+ /**
408
+ * @return string
409
+ */
410
+ public function getState()
411
+ {
412
+ return $this -> m_szState;
413
+ }
414
+ /**
415
+ * @param string $state
416
+ */
417
+ public function setState($state)
418
+ {
419
+ $this -> m_szState = $state;
420
+ }
421
+ /**
422
+ * @return string
423
+ */
424
+ public function getPostCode()
425
+ {
426
+ return $this -> m_szPostCode;
427
+ }
428
+ /**
429
+ * @param string $postCode
430
+ */
431
+ public function setPostCode($postCode)
432
+ {
433
+ $this -> m_szPostCode = $postCode;
434
+ }
435
+ /**
436
+ * @return NullableInt
437
+ */
438
+ public function getCountryCode()
439
+ {
440
+ return $this -> m_nCountryCode;
441
+ }
442
+
443
+ //constructor
444
+ public function __construct()
445
+ {
446
+ $this -> m_szAddress1 = "";
447
+ $this -> m_szAddress2 = "";
448
+ $this -> m_szAddress3 = "";
449
+ $this -> m_szAddress4 = "";
450
+ $this -> m_szCity = "";
451
+ $this -> m_szState = "";
452
+ $this -> m_szPostCode = "";
453
+ $this -> m_nCountryCode = new NullableInt();
454
+ }
455
+
456
+ }
457
+ abstract class CreditCardDate
458
+ {
459
+ /**
460
+ * @var NullableInt
461
+ */
462
+ private $m_nMonth;
463
+ /**
464
+ * @var NullableInt
465
+ */
466
+ private $m_nYear;
467
+
468
+ /**
469
+ * @return NullableInt
470
+ */
471
+ public function getMonth()
472
+ {
473
+ return $this -> m_nMonth;
474
+ }
475
+ /**
476
+ * @return NullableInt
477
+ */
478
+ public function getYear()
479
+ {
480
+ return $this -> m_nYear;
481
+ }
482
+
483
+ //constructor
484
+ public function __construct()
485
+ {
486
+ $this -> m_nMonth = new NullableInt();
487
+ $this -> m_nYear = new NullableInt();
488
+ }
489
+
490
+ }
491
+ class ExpiryDate extends CreditCardDate
492
+ {
493
+ public function __construct()
494
+ {
495
+ parent::__construct();
496
+ }
497
+
498
+ }
499
+ class StartDate extends CreditCardDate
500
+ {
501
+ public function __construct()
502
+ {
503
+ parent::__construct();
504
+ }
505
+
506
+ }
507
+ class CardDetails
508
+ {
509
+ /**
510
+ * @var string
511
+ */
512
+ private $m_szCardName;
513
+ /**
514
+ * @var string
515
+ */
516
+ private $m_szCardNumber;
517
+ /**
518
+ * @var ExpiryDate
519
+ */
520
+ private $m_edExpiryDate;
521
+ /**
522
+ * @var StartDate
523
+ */
524
+ private $m_sdStartDate;
525
+ /**
526
+ * @var string
527
+ */
528
+ private $m_szIssueNumber;
529
+ /**
530
+ * @var string
531
+ */
532
+ private $m_szCV2;
533
+
534
+ /**
535
+ * @return string
536
+ */
537
+ public function getCardName()
538
+ {
539
+ return $this -> m_szCardName;
540
+ }
541
+ /**
542
+ * @param string $cardName
543
+ */
544
+ public function setCardName($cardName)
545
+ {
546
+ $this -> m_szCardName = $cardName;
547
+ }
548
+ /**
549
+ * @return string
550
+ */
551
+ public function getCardNumber()
552
+ {
553
+ return $this -> m_szCardNumber;
554
+ }
555
+ /**
556
+ * @param string $cardNumber
557
+ */
558
+ public function setCardNumber($cardNumber)
559
+ {
560
+ $this -> m_szCardNumber = $cardNumber;
561
+ }
562
+ /**
563
+ * @return ExpiryDate
564
+ */
565
+ public function getExpiryDate()
566
+ {
567
+ return $this -> m_edExpiryDate;
568
+ }
569
+ /**
570
+ * @return StartDate
571
+ */
572
+ public function getStartDate()
573
+ {
574
+ return $this -> m_sdStartDate;
575
+ }
576
+ /**
577
+ * @return string
578
+ */
579
+ public function getIssueNumber()
580
+ {
581
+ return $this -> m_szIssueNumber;
582
+ }
583
+ /**
584
+ * @param string $issueNumber
585
+ */
586
+ public function setIssueNumber($issueNumber)
587
+ {
588
+ $this -> m_szIssueNumber = $issueNumber;
589
+ }
590
+ /**
591
+ * @return string
592
+ */
593
+ public function getCV2()
594
+ {
595
+ return $this -> m_szCV2;
596
+ }
597
+ /**
598
+ * @param string $cv2
599
+ */
600
+ public function setCV2($cv2)
601
+ {
602
+ $this -> m_szCV2 = $cv2;
603
+ }
604
+
605
+ //constructor
606
+ public function __construct()
607
+ {
608
+ $this -> m_szCardName = "";
609
+ $this -> m_szCardNumber = "";
610
+ $this -> m_edExpiryDate = new ExpiryDate();
611
+ $this -> m_sdStartDate = new StartDate();
612
+ $this -> m_szIssueNumber = "";
613
+ $this -> m_szCV2 = "";
614
+ }
615
+
616
+ }
617
+ class OverrideCardDetails extends CardDetails
618
+ {
619
+ public function __construct()
620
+ {
621
+ parent::__construct();
622
+ }
623
+
624
+ }
625
+ class MerchantAuthentication
626
+ {
627
+ /**
628
+ * @var string
629
+ */
630
+ private $m_szMerchantID;
631
+ /**
632
+ * @var string
633
+ */
634
+ private $m_szPassword;
635
+
636
+ /**
637
+ * @return string
638
+ */
639
+ public function getMerchantID()
640
+ {
641
+ return $this -> m_szMerchantID;
642
+ }
643
+ /**
644
+ * @param string $merchantID
645
+ */
646
+ public function setMerchantID($merchantID)
647
+ {
648
+ $this -> m_szMerchantID = $merchantID;
649
+ }
650
+ /**
651
+ * @return string
652
+ */
653
+ public function getPassword()
654
+ {
655
+ return $this -> m_szPassword;
656
+ }
657
+ /**
658
+ * @param string $password
659
+ */
660
+ public function setPassword($password)
661
+ {
662
+ $this -> m_szPassword = $password;
663
+ }
664
+
665
+ //constructor
666
+ public function __construct()
667
+ {
668
+ $this -> m_szMerchantID = "";
669
+ $this -> m_szPassword = "";
670
+ }
671
+
672
+ }
673
+ class MessageDetails
674
+ {
675
+ /**
676
+ * @var string
677
+ */
678
+ private $m_szTransactionType;
679
+ /**
680
+ * @var NullableBool
681
+ */
682
+ private $m_boNewTransaction;
683
+ /**
684
+ * @var string
685
+ */
686
+ private $m_szCrossReference;
687
+ /**
688
+ * @var string
689
+ */
690
+ private $m_szClientReference;
691
+ /**
692
+ * @var string
693
+ */
694
+ private $m_szPreviousClientReference;
695
+
696
+ /**
697
+ * @return string
698
+ */
699
+ public function getTransactionType()
700
+ {
701
+ return $this -> m_szTransactionType;
702
+ }
703
+ /**
704
+ * @param string $transactionType
705
+ */
706
+ public function setTransactionType($transactionType)
707
+ {
708
+ $this -> m_szTransactionType = $transactionType;
709
+ }
710
+ /**
711
+ * @return NullableBool
712
+ */
713
+ public function getNewTransaction()
714
+ {
715
+ return $this -> m_boNewTransaction;
716
+ }
717
+ /**
718
+ * @return string
719
+ */
720
+ public function getCrossReference()
721
+ {
722
+ return $this -> m_szCrossReference;
723
+ }
724
+ /**
725
+ * @param string $crossReference
726
+ */
727
+ public function setCrossReference($crossReference)
728
+ {
729
+ $this -> m_szCrossReference = $crossReference;
730
+ }
731
+ /**
732
+ * @return string
733
+ */
734
+ public function getClientReference()
735
+ {
736
+ return $this -> m_szClientReference;
737
+ }
738
+ /**
739
+ * @param string $clientReference
740
+ */
741
+ public function setClientReference($clientReference)
742
+ {
743
+ $this -> m_szClientReference = $clientReference;
744
+ }
745
+ /**
746
+ * @return string
747
+ */
748
+ public function getPreviousClientReference()
749
+ {
750
+ return $this -> m_szPreviousClientReference;
751
+ }
752
+ /**
753
+ * @param string $previousClientReference
754
+ */
755
+ public function setPreviousClientReference($previousClientReference)
756
+ {
757
+ $this -> m_szPreviousClientReference = $previousClientReference;
758
+ }
759
+
760
+ //constructor
761
+ public function __construct()
762
+ {
763
+ $this -> m_szTransactionType = "";
764
+ $this -> m_szCrossReference = "";
765
+ $this -> m_boNewTransaction = new NullableBool();
766
+ $this -> m_szClientReference = "";
767
+ $this -> m_szPreviousClientReference = "";
768
+ }
769
+
770
+ }
771
+ class TransactionDetails
772
+ {
773
+ /**
774
+ * @var MessageDetails
775
+ */
776
+ private $m_mdMessageDetails;
777
+ /**
778
+ * @var NullableInt
779
+ */
780
+ private $m_nAmount;
781
+ /**
782
+ * @var NullableInt
783
+ */
784
+ private $m_nCurrencyCode;
785
+ /**
786
+ * @var string
787
+ */
788
+ private $m_szCaptureEnvironment;
789
+ /**
790
+ * @var NullableBool
791
+ */
792
+ private $m_boContinuousAuthority;
793
+ /**
794
+ * @var string
795
+ */
796
+ private $m_szOrderID;
797
+ /**
798
+ * @var string
799
+ */
800
+ private $m_szOrderDescription;
801
+ /**
802
+ * @var TransactionControl
803
+ */
804
+ private $m_tcTransactionControl;
805
+ /**
806
+ * @var ThreeDSecureBrowserDetails
807
+ */
808
+ private $m_tdsbdThreeDSecureBrowserDetails;
809
+
810
+ /**
811
+ * @return MessageDetails
812
+ */
813
+ public function getMessageDetails()
814
+ {
815
+ return $this -> m_mdMessageDetails;
816
+ }
817
+ /**
818
+ * @return NullableInt
819
+ */
820
+ public function getAmount()
821
+ {
822
+ return $this -> m_nAmount;
823
+ }
824
+ /**
825
+ * @return NullableInt
826
+ */
827
+ public function getCurrencyCode()
828
+ {
829
+ return $this -> m_nCurrencyCode;
830
+ }
831
+ /**
832
+ * @return string
833
+ */
834
+ public function getCaptureEnvironment()
835
+ {
836
+ return $this -> m_szCaptureEnvironment;
837
+ }
838
+ /**
839
+ * @param string $szCaptureEnvironment
840
+ */
841
+ public function setCaptureEnvironment($szCaptureEnvironment)
842
+ {
843
+ $this -> m_szCaptureEnvironment = $szCaptureEnvironment;
844
+ }
845
+ /**
846
+ * @return NullableBool
847
+ */
848
+ public function getContinuousAuthority()
849
+ {
850
+ return $this -> m_boContinuousAuthority;
851
+ }
852
+ /**
853
+ * @return string
854
+ */
855
+ public function getOrderID()
856
+ {
857
+ return $this -> m_szOrderID;
858
+ }
859
+ /**
860
+ * @param string $orderID
861
+ */
862
+ public function setOrderID($orderID)
863
+ {
864
+ $this -> m_szOrderID = $orderID;
865
+ }
866
+ /**
867
+ * @return string
868
+ */
869
+ public function getOrderDescription()
870
+ {
871
+ return $this -> m_szOrderDescription;
872
+ }
873
+ /**
874
+ * @param string $orderDescription
875
+ */
876
+ public function setOrderDescription($orderDescription)
877
+ {
878
+ $this -> m_szOrderDescription = $orderDescription;
879
+ }
880
+ /**
881
+ * @return TransactionControl
882
+ */
883
+ public function getTransactionControl()
884
+ {
885
+ return $this -> m_tcTransactionControl;
886
+ }
887
+ /**
888
+ * @return ThreeDSecureBrowserDetails
889
+ */
890
+ public function getThreeDSecureBrowserDetails()
891
+ {
892
+ return $this -> m_tdsbdThreeDSecureBrowserDetails;
893
+ }
894
+
895
+ //constructor
896
+ public function __construct()
897
+ {
898
+ $this -> m_mdMessageDetails = new MessageDetails();
899
+ $this -> m_nAmount = new NullableInt();
900
+ $this -> m_szCaptureEnvironment = "";
901
+ $this -> m_boContinuousAuthority = new NullableBool();
902
+ $this -> m_nCurrencyCode = new NullableInt();
903
+ $this -> m_szOrderID = "";
904
+ $this -> m_szOrderDescription = "";
905
+ $this -> m_tcTransactionControl = new TransactionControl();
906
+ $this -> m_tdsbdThreeDSecureBrowserDetails = new ThreeDSecureBrowserDetails();
907
+ }
908
+
909
+ }
910
+ class ThreeDSecureBrowserDetails
911
+ {
912
+ /**
913
+ * @var NullableInt
914
+ */
915
+ private $m_nDeviceCategory;
916
+ /**
917
+ * @var string
918
+ */
919
+ private $m_szAcceptHeaders;
920
+ /**
921
+ * @var string
922
+ */
923
+ private $m_szUserAgent;
924
+
925
+ /**
926
+ * @return NullableInt
927
+ */
928
+ public function getDeviceCategory()
929
+ {
930
+ return $this -> m_nDeviceCategory;
931
+ }
932
+ /**
933
+ * @return string
934
+ */
935
+ public function getAcceptHeaders()
936
+ {
937
+ return $this -> m_szAcceptHeaders;
938
+ }
939
+ /**
940
+ * @param string $acceptHeaders
941
+ */
942
+ public function setAcceptHeaders($acceptHeaders)
943
+ {
944
+ $this -> m_szAcceptHeaders = $acceptHeaders;
945
+ }
946
+ /**
947
+ * @return string
948
+ */
949
+ public function getUserAgent()
950
+ {
951
+ return $this -> m_szUserAgent;
952
+ }
953
+ /**
954
+ * @param string $userAgent
955
+ */
956
+ public function setUserAgent($userAgent)
957
+ {
958
+ $this -> m_szUserAgent = $userAgent;
959
+ }
960
+
961
+ //constructor
962
+ public function __construct()
963
+ {
964
+ $this -> m_nDeviceCategory = new NullableInt();
965
+ $this -> m_szAcceptHeaders = "";
966
+ $this -> m_szUserAgent = "";
967
+ }
968
+
969
+ }
970
+ class TransactionControl
971
+ {
972
+ /**
973
+ * @var NullableBool
974
+ */
975
+ private $m_boEchoCardType;
976
+ /**
977
+ * @var NullableBool
978
+ */
979
+ private $m_boEchoAVSCheckResult;
980
+ /**
981
+ * @var NullableBool
982
+ */
983
+ private $m_boEchoCV2CheckResult;
984
+ /**
985
+ * @var NullableBool
986
+ */
987
+ private $m_boEchoAmountReceived;
988
+ /**
989
+ * @var NullableInt
990
+ */
991
+ private $m_nDuplicateDelay;
992
+ /**
993
+ * @var string
994
+ */
995
+ private $m_szAVSOverridePolicy;
996
+ /**
997
+ * @var string
998
+ */
999
+ private $m_szCV2OverridePolicy;
1000
+ /**
1001
+ * @var NullableBool
1002
+ */
1003
+ private $m_boThreeDSecureOverridePolicy;
1004
+ /**
1005
+ * @var string
1006
+ */
1007
+ private $m_szAuthCode;
1008
+ /**
1009
+ * @var ThreeDSecurePassthroughData
1010
+ */
1011
+ private $m_tdsptThreeDSecurePassthroughData;
1012
+ /**
1013
+ * @var GenericVariableList
1014
+ */
1015
+ private $m_lgvCustomVariables;
1016
+
1017
+ /**
1018
+ * @return NullableBool
1019
+ */
1020
+ public function getEchoCardType()
1021
+ {
1022
+ return $this -> m_boEchoCardType;
1023
+ }
1024
+ /**
1025
+ * @return NullableBool
1026
+ */
1027
+ public function getEchoAVSCheckResult()
1028
+ {
1029
+ return $this -> m_boEchoAVSCheckResult;
1030
+ }
1031
+ /**
1032
+ * @return NullableBool
1033
+ */
1034
+ public function getEchoCV2CheckResult()
1035
+ {
1036
+ return $this -> m_boEchoCV2CheckResult;
1037
+ }
1038
+ /**
1039
+ * @return NullableBool
1040
+ */
1041
+ public function getEchoAmountReceived()
1042
+ {
1043
+ return $this -> m_boEchoAmountReceived;
1044
+ }
1045
+ /**
1046
+ * @return NullableInt
1047
+ */
1048
+ public function getDuplicateDelay()
1049
+ {
1050
+ return $this -> m_nDuplicateDelay;
1051
+ }
1052
+ /**
1053
+ * @return string
1054
+ */
1055
+ public function getAVSOverridePolicy()
1056
+ {
1057
+ return $this -> m_szAVSOverridePolicy;
1058
+ }
1059
+ /**
1060
+ * @param string $AVSOverridePolicy
1061
+ */
1062
+ public function setAVSOverridePolicy($AVSOverridePolicy)
1063
+ {
1064
+ $this -> m_szAVSOverridePolicy = $AVSOverridePolicy;
1065
+ }
1066
+ /**
1067
+ * @return string
1068
+ */
1069
+ public function getCV2OverridePolicy()
1070
+ {
1071
+ return $this -> m_szCV2OverridePolicy;
1072
+ }
1073
+ /**
1074
+ * @param string $CV2OverridePolicy
1075
+ */
1076
+ public function setCV2OverridePolicy($CV2OverridePolicy)
1077
+ {
1078
+ $this -> m_szCV2OverridePolicy = $CV2OverridePolicy;
1079
+ }
1080
+ /**
1081
+ * @return NullableBool
1082
+ */
1083
+ public function getThreeDSecureOverridePolicy()
1084
+ {
1085
+ return $this -> m_boThreeDSecureOverridePolicy;
1086
+ }
1087
+ /**
1088
+ * @return string
1089
+ */
1090
+ public function getAuthCode()
1091
+ {
1092
+ return $this -> m_szAuthCode;
1093
+ }
1094
+ /**
1095
+ * @param string $authCode
1096
+ */
1097
+ public function setAuthCode($authCode)
1098
+ {
1099
+ $this -> m_szAuthCode = $authCode;
1100
+ }
1101
+ /**
1102
+ * @return ThreeDSecurePassthroughData
1103
+ */
1104
+ function getThreeDSecurePassthroughData()
1105
+ {
1106
+ return $this -> m_tdsptThreeDSecurePassthroughData;
1107
+ }
1108
+ /**
1109
+ * @return GenericVariableList
1110
+ */
1111
+ public function getCustomVariables()
1112
+ {
1113
+ return $this -> m_lgvCustomVariables;
1114
+ }
1115
+
1116
+ //constructor
1117
+ public function __construct()
1118
+ {
1119
+ $this -> m_boEchoCardType = new NullableBool();
1120
+ $this -> m_boEchoAVSCheckResult = new NullableBool();
1121
+ $this -> m_boEchoCV2CheckResult = new NullableBool();
1122
+ $this -> m_boEchoAmountReceived = new NullableBool();
1123
+ $this -> m_nDuplicateDelay = new NullableInt();
1124
+ $this -> m_szAVSOverridePolicy = "";
1125
+ $this -> m_szCV2OverridePolicy = "";
1126
+ $this -> m_boThreeDSecureOverridePolicy = new NullableBool();
1127
+ $this -> m_szAuthCode = "";
1128
+ $this -> m_tdsptThreeDSecurePassthroughData = new ThreeDSecurePassthroughData();
1129
+ $this -> m_lgvCustomVariables = new GenericVariableList();
1130
+ }
1131
+
1132
+ }
1133
+ class ThreeDSecureInputData
1134
+ {
1135
+ /**
1136
+ * @var string
1137
+ */
1138
+ private $m_szCrossReference;
1139
+ /**
1140
+ * @var string
1141
+ */
1142
+ private $m_szPaRES;
1143
+ /**
1144
+ * @return string
1145
+ */
1146
+ public function getCrossReference()
1147
+ {
1148
+ return $this -> m_szCrossReference;
1149
+ }
1150
+
1151
+ /**
1152
+ * @param string $crossReference
1153
+ */
1154
+ public function setCrossReference($crossReference)
1155
+ {
1156
+ $this -> m_szCrossReference = $crossReference;
1157
+ }
1158
+ /**
1159
+ * @return string
1160
+ */
1161
+ public function getPaRES()
1162
+ {
1163
+ return $this -> m_szPaRES;
1164
+ }
1165
+ /**
1166
+ * @param string $PaRES
1167
+ */
1168
+ public function setPaRES($PaRES)
1169
+ {
1170
+ $this -> m_szPaRES = $PaRES;
1171
+ }
1172
+
1173
+ //constructor
1174
+ public function __construct()
1175
+ {
1176
+ $this -> m_szCrossReference = "";
1177
+ $this -> m_szPaRES = "";
1178
+ }
1179
+
1180
+ }
1181
+ class ThreeDSecurePassthroughData
1182
+ {
1183
+ /**
1184
+ * @var string
1185
+ */
1186
+ private $m_szEnrolmentStatus;
1187
+ /**
1188
+ * @var string
1189
+ */
1190
+ private $m_szAuthenticationStatus;
1191
+ /**
1192
+ * @var string
1193
+ */
1194
+ private $m_szElectronicCommerceIndicator;
1195
+ /**
1196
+ * @var string
1197
+ */
1198
+ private $m_szAuthenticationValue;
1199
+ /**
1200
+ * @var string
1201
+ */
1202
+ private $m_szTransactionIdentifier;
1203
+
1204
+ /**
1205
+ * @return string
1206
+ */
1207
+ function getEnrolmentStatus()
1208
+ {
1209
+ return $this -> m_szEnrolmentStatus;
1210
+ }
1211
+ /**
1212
+ * @param string $enrolmentStatus
1213
+ */
1214
+ public function setEnrolmentStatus($enrolmentStatus)
1215
+ {
1216
+ $this -> m_szEnrolmentStatus = $enrolmentStatus;
1217
+ }
1218
+ /**
1219
+ * @return string
1220
+ */
1221
+ function getAuthenticationStatus()
1222
+ {
1223
+ return $this -> m_szAuthenticationStatus;
1224
+ }
1225
+ /**
1226
+ * @param string $authenticationStatus
1227
+ */
1228
+ public function setAuthenticationStatus($authenticationStatus)
1229
+ {
1230
+ $this -> m_szAuthenticationStatus = $authenticationStatus;
1231
+ }
1232
+ /**
1233
+ * @return string
1234
+ */
1235
+ function getElectronicCommerceIndicator()
1236
+ {
1237
+ return $this -> m_szElectronicCommerceIndicator;
1238
+ }
1239
+ /**
1240
+ * @param string $electronicCommerceIndicator
1241
+ */
1242
+ public function setElectronicCommerceIndicator($electronicCommerceIndicator)
1243
+ {
1244
+ $this -> m_szElectronicCommerceIndicator = $electronicCommerceIndicator;
1245
+ }
1246
+ /**
1247
+ * @return string
1248
+ */
1249
+ function getAuthenticationValue()
1250
+ {
1251
+ return $this -> m_szAuthenticationValue;
1252
+ }
1253
+ /**
1254
+ * @param string $authenticationValue
1255
+ */
1256
+ public function setAuthenticationValue($authenticationValue)
1257
+ {
1258
+ $this -> m_szAuthenticationValue = $authenticationValue;
1259
+ }
1260
+ /**
1261
+ * @return string
1262
+ */
1263
+ function getTransactionIdentifier()
1264
+ {
1265
+ return $this -> m_szTransactionIdentifier;
1266
+ }
1267
+ /**
1268
+ * @param string $transactionIdentifier
1269
+ */
1270
+ public function setTransactionIdentifier($transactionIdentifier)
1271
+ {
1272
+ $this -> m_szTransactionIdentifier = $transactionIdentifier;
1273
+ }
1274
+
1275
+ //constructor
1276
+ function __construct()
1277
+ {
1278
+ $this -> m_szEnrolmentStatus = "";
1279
+ $this -> m_szAuthenticationStatus = "";
1280
+ $this -> m_szElectronicCommerceIndicator = "";
1281
+ $this -> m_szAuthenticationValue = "";
1282
+ $this -> m_szTransactionIdentifier = "";
1283
+ }
1284
+
1285
+ }
1286
+ /******************/
1287
+ /* Output classes */
1288
+ /******************/
1289
+ class Issuer
1290
+ {
1291
+ /**
1292
+ * @var string
1293
+ */
1294
+ private $m_szIssuer;
1295
+ /**
1296
+ * @var NullableInt
1297
+ */
1298
+ private $m_nISOCode;
1299
+
1300
+ /**
1301
+ * @return string
1302
+ */
1303
+ public function getValue()
1304
+ {
1305
+ return $this -> m_szIssuer;
1306
+ }
1307
+
1308
+ /**
1309
+ * @return NullableInt
1310
+ */
1311
+ public function getISOCode()
1312
+ {
1313
+ return $this -> m_nISOCode;
1314
+ }
1315
+
1316
+ //constructor
1317
+ public function __construct($szIssuer, NullableInt $nISOCode = null)
1318
+ {
1319
+ $this -> m_szIssuer = $szIssuer;
1320
+ $this -> m_nISOCode = $nISOCode;
1321
+ }
1322
+
1323
+ }
1324
+ class CardTypeData
1325
+ {
1326
+ /**
1327
+ * @var string
1328
+ */
1329
+ private $m_szCardType;
1330
+ /**
1331
+ * @var Issuer
1332
+ */
1333
+ private $m_iIssuer;
1334
+ /**
1335
+ * @var string
1336
+ */
1337
+ private $m_szCardClass;
1338
+ /**
1339
+ * @var NullableBool
1340
+ */
1341
+ private $m_boLuhnCheckRequired;
1342
+ /**
1343
+ * @var string
1344
+ */
1345
+ private $m_szIssueNumberStatus;
1346
+ /**
1347
+ * @var string
1348
+ */
1349
+ private $m_szStartDateStatus;
1350
+
1351
+ /**
1352
+ * @return string
1353
+ */
1354
+ public function getCardType()
1355
+ {
1356
+ return $this -> m_szCardType;
1357
+ }
1358
+ /**
1359
+ * @return string
1360
+ */
1361
+ public function getCardClass()
1362
+ {
1363
+ return $this -> m_szCardClass;
1364
+ }
1365
+ /**
1366
+ * @return Issuer
1367
+ */
1368
+ public function getIssuer()
1369
+ {
1370
+ return $this -> m_iIssuer;
1371
+ }
1372
+ /**
1373
+ * @return NullableBool
1374
+ */
1375
+ public function getLuhnCheckRequired()
1376
+ {
1377
+ return $this -> m_boLuhnCheckRequired;
1378
+ }
1379
+ /**
1380
+ * @return string
1381
+ */
1382
+ public function getIssueNumberStatus()
1383
+ {
1384
+ return $this -> m_szIssueNumberStatus;
1385
+ }
1386
+ /**
1387
+ * @return string
1388
+ */
1389
+ public function getStartDateStatus()
1390
+ {
1391
+ return $this -> m_szStartDateStatus;
1392
+ }
1393
+
1394
+ //constructor
1395
+ /**
1396
+ * @param string $szCardType
1397
+ * @param string $szCardClass
1398
+ * @param string $iIssuer
1399
+ * @param NullableBool $boLuhnCheckRequired
1400
+ * @param string $szIssueNumberStatus
1401
+ * @param string $szStartDateStatus
1402
+ */
1403
+ public function __construct($szCardType, $szCardClass, $iIssuer, NullableBool $boLuhnCheckRequired = null, $szIssueNumberStatus, $szStartDateStatus)
1404
+ {
1405
+ $this -> m_szCardType = $szCardType;
1406
+ $this -> m_szCardClass = $szCardClass;
1407
+ $this -> m_iIssuer = $iIssuer;
1408
+ $this -> m_boLuhnCheckRequired = $boLuhnCheckRequired;
1409
+ $this -> m_szIssueNumberStatus = $szIssueNumberStatus;
1410
+ $this -> m_szStartDateStatus = $szStartDateStatus;
1411
+ }
1412
+
1413
+ }
1414
+ class GatewayEntryPoint
1415
+ {
1416
+ /**
1417
+ * @var string
1418
+ */
1419
+ private $m_szEntryPointURL;
1420
+ /**
1421
+ * @var int
1422
+ */
1423
+ private $m_nMetric;
1424
+
1425
+ /**
1426
+ * @return string
1427
+ */
1428
+ public function getEntryPointURL()
1429
+ {
1430
+ return $this -> m_szEntryPointURL;
1431
+ }
1432
+ /**
1433
+ * @return int
1434
+ */
1435
+ public function getMetric()
1436
+ {
1437
+ return $this -> m_nMetric;
1438
+ }
1439
+ /**
1440
+ * @return string
1441
+ */
1442
+ public function toXmlString()
1443
+ {
1444
+ $szXmlString = "<GatewayEntryPoint EntryPointURL=\"" . $this -> m_szEntryPointURL . "\" Metric=\"" . $this -> m_nMetric . "\" />";
1445
+
1446
+ return ($szXmlString);
1447
+ }
1448
+
1449
+ //constructor
1450
+ /**
1451
+ * @param string $szEntryPointURL
1452
+ * @param int $nMetric
1453
+ */
1454
+ public function __construct($szEntryPointURL, $nMetric)
1455
+ {
1456
+ $this -> m_szEntryPointURL = $szEntryPointURL;
1457
+ $this -> m_nMetric = $nMetric;
1458
+ }
1459
+
1460
+ }
1461
+ class GatewayEntryPointList
1462
+ {
1463
+ /**
1464
+ * @var GatewayEntryPoint[]
1465
+ */
1466
+ private $m_lgepGatewayEntryPoint;
1467
+
1468
+ /**
1469
+ * @param int $nIndex
1470
+ * @return GatewayEntryPoint
1471
+ * @throws Exception
1472
+ */
1473
+ public function getAt($nIndex)
1474
+ {
1475
+ if ($nIndex < 0 || $nIndex >= count($this -> m_lgepGatewayEntryPoint))
1476
+ {
1477
+ throw new Exception("Array index out of bounds");
1478
+ }
1479
+
1480
+ return $this -> m_lgepGatewayEntryPoint[$nIndex];
1481
+ }
1482
+ /**
1483
+ * @return int
1484
+ */
1485
+ public function getCount()
1486
+ {
1487
+ return count($this -> m_lgepGatewayEntryPoint);
1488
+ }
1489
+ /**
1490
+ * @param string $GatewayEntrypointURL
1491
+ * @param int $nMetric
1492
+ */
1493
+ public function add($GatewayEntrypointURL, $nMetric)
1494
+ {
1495
+ array_push($this -> m_lgepGatewayEntryPoint, new GatewayEntryPoint($GatewayEntrypointURL, $nMetric));
1496
+ }
1497
+ /**
1498
+ * @param string $szXmlString
1499
+ * @return GatewayEntryPointList
1500
+ * @throws Exception
1501
+ */
1502
+ public static function fromXmlString($szXmlString)
1503
+ {
1504
+ $xpXmlParser = new XmlParser();
1505
+
1506
+ if (!$xpXmlParser -> parseBuffer($szXmlString))
1507
+ {
1508
+ throw new Exception("Could not parse response string");
1509
+ }
1510
+ else
1511
+ {
1512
+ // look to see if there are any gateway entry points
1513
+ $nCount = 0;
1514
+ $szXmlFormatString1 = "GatewayEntryPoint[";
1515
+ $szXmlFormatString2 = "]";
1516
+ $lgepGatewayEntryPoints = null;
1517
+
1518
+ while ($xpXmlParser -> getStringValue($szXmlFormatString1 . $nCount . $szXmlFormatString2 . ".EntryPointURL", $szEntryPointURL))
1519
+ {
1520
+ if (!$xpXmlParser -> getIntegerValue($szXmlFormatString1 . $nCount . $szXmlFormatString2 . ".Metric", $nMetric))
1521
+ {
1522
+ $nMetric = -1;
1523
+ }
1524
+ if ($lgepGatewayEntryPoints == null)
1525
+ {
1526
+ $lgepGatewayEntryPoints = new GatewayEntryPointList();
1527
+ }
1528
+ $lgepGatewayEntryPoints -> add($szEntryPointURL, $nMetric);
1529
+ $nCount++;
1530
+ }
1531
+ }
1532
+ return ($lgepGatewayEntryPoints);
1533
+ }
1534
+ /**
1535
+ * @return string
1536
+ * @throws Exception
1537
+ */
1538
+ public function toXmlString()
1539
+ {
1540
+ $szXmlString = "<GatewayEntryPoints>";
1541
+
1542
+ for ($nCount = 0; $nCount < $this -> getCount(); $nCount++)
1543
+ {
1544
+ $szXmlString = $szXmlString . $this -> getAt($nCount) -> toXmlString();
1545
+ }
1546
+ $szXmlString = $szXmlString . "</GatewayEntryPoints>";
1547
+
1548
+ return ($szXmlString);
1549
+ }
1550
+
1551
+ //constructor
1552
+ public function __construct()
1553
+ {
1554
+ $this -> m_lgepGatewayEntryPoint = array();
1555
+ }
1556
+
1557
+ }
1558
+ class PreviousTransactionResult
1559
+ {
1560
+ /**
1561
+ * @var NullableInt
1562
+ */
1563
+ private $m_nStatusCode;
1564
+ /**
1565
+ * @var string
1566
+ */
1567
+ private $m_szMessage;
1568
+
1569
+ /**
1570
+ * @return NullableInt
1571
+ */
1572
+ function getStatusCode()
1573
+ {
1574
+ return $this -> m_nStatusCode;
1575
+ }
1576
+ /**
1577
+ * @return string
1578
+ */
1579
+ function getMessage()
1580
+ {
1581
+ return $this -> m_szMessage;
1582
+ }
1583
+
1584
+ /**
1585
+ * @param NullableInt $nStatusCode
1586
+ * @param string $szMessage
1587
+ */
1588
+ function __construct(NullableInt $nStatusCode = null, $szMessage)
1589
+ {
1590
+ $this -> m_nStatusCode = $nStatusCode;
1591
+ $this -> m_szMessage = $szMessage;
1592
+ }
1593
+
1594
+ }
1595
+ class GatewayOutput
1596
+ {
1597
+ /**
1598
+ * @var int
1599
+ */
1600
+ private $m_nStatusCode;
1601
+ /**
1602
+ * @var string
1603
+ */
1604
+ private $m_szMessage;
1605
+ /**
1606
+ * @var StringList
1607
+ */
1608
+ private $m_lszErrorMessages;
1609
+
1610
+ /**
1611
+ * @return int
1612
+ */
1613
+ public function getStatusCode()
1614
+ {
1615
+ return $this -> m_nStatusCode;
1616
+ }
1617
+ /**
1618
+ * @return string
1619
+ */
1620
+ public function getMessage()
1621
+ {
1622
+ return $this -> m_szMessage;
1623
+ }
1624
+ /**
1625
+ * @return StringList
1626
+ */
1627
+ public function getErrorMessages()
1628
+ {
1629
+ return $this -> m_lszErrorMessages;
1630
+ }
1631
+
1632
+ //constructor
1633
+ /**
1634
+ * @param int $nStatusCode
1635
+ * @param string $szMessage
1636
+ * @param StringList $lszErrorMessages
1637
+ */
1638
+ public function __construct($nStatusCode, $szMessage, StringList $lszErrorMessages = null)
1639
+ {
1640
+ $this -> m_nStatusCode = $nStatusCode;
1641
+ $this -> m_szMessage = $szMessage;
1642
+ $this -> m_lszErrorMessages = $lszErrorMessages;
1643
+ }
1644
+
1645
+ }
1646
+ class PaymentMessageGatewayOutput extends GatewayOutput
1647
+ {
1648
+ /**
1649
+ * @var PreviousTransactionResult
1650
+ */
1651
+ private $m_ptdPreviousTransactionResult;
1652
+ /**
1653
+ * @var NullableBool
1654
+ */
1655
+ private $m_boAuthorisationAttempted;
1656
+
1657
+ /**
1658
+ * @return PreviousTransactionResult
1659
+ */
1660
+ public function getPreviousTransactionResult()
1661
+ {
1662
+ return $this -> m_ptdPreviousTransactionResult;
1663
+ }
1664
+ /**
1665
+ * @return NullableBool
1666
+ */
1667
+ public function getAuthorisationAttempted()
1668
+ {
1669
+ return $this -> m_boAuthorisationAttempted;
1670
+ }
1671
+
1672
+ //constructor
1673
+ /**
1674
+ * @param int $nStatusCode
1675
+ * @param string $szMessage
1676
+ * @param NullableBool $boAuthorisationAttempted
1677
+ * @param PreviousTransactionResult $ptdPreviousTransactionResult
1678
+ * @param StringList $lszErrorMessages
1679
+ */
1680
+ public function __construct($nStatusCode, $szMessage, NullableBool $boAuthorisationAttempted = null, PreviousTransactionResult $ptdPreviousTransactionResult = null, StringList $lszErrorMessages = null)
1681
+ {
1682
+ parent::__construct($nStatusCode, $szMessage, $lszErrorMessages);
1683
+ $this -> m_boAuthorisationAttempted = $boAuthorisationAttempted;
1684
+ $this -> m_ptdPreviousTransactionResult = $ptdPreviousTransactionResult;
1685
+ }
1686
+
1687
+ }
1688
+ class CardDetailsTransactionResult extends PaymentMessageGatewayOutput
1689
+ {
1690
+ /**
1691
+ * @param int $nStatusCode
1692
+ * @param string $szMessage
1693
+ * @param NullableBool $boAuthorisationAttempted
1694
+ * @param PreviousTransactionResult $ptdPreviousTransactionResult
1695
+ * @param StringList $lszErrorMessages
1696
+ */
1697
+ public function __construct($nStatusCode, $szMessage, NullableBool $boAuthorisationAttempted = null, PreviousTransactionResult $ptdPreviousTransactionResult = null, StringList $lszErrorMessages = null)
1698
+ {
1699
+ parent::__construct($nStatusCode, $szMessage, $boAuthorisationAttempted, $ptdPreviousTransactionResult, $lszErrorMessages);
1700
+ }
1701
+
1702
+ }
1703
+ class CrossReferenceTransactionResult extends PaymentMessageGatewayOutput
1704
+ {
1705
+ /**
1706
+ * @param int $nStatusCode
1707
+ * @param string $szMessage
1708
+ * @param NullableBool $boAuthorisationAttempted
1709
+ * @param PreviousTransactionResult $ptdPreviousTransactionResult
1710
+ * @param StringList $lszErrorMessages
1711
+ */
1712
+ public function __construct($nStatusCode, $szMessage, NullableBool $boAuthorisationAttempted = null, PreviousTransactionResult $ptdPreviousTransactionResult = null, StringList $lszErrorMessages = null)
1713
+ {
1714
+ parent::__construct($nStatusCode, $szMessage, $boAuthorisationAttempted, $ptdPreviousTransactionResult, $lszErrorMessages);
1715
+ }
1716
+
1717
+ }
1718
+ class ThreeDSecureTransactionResult extends PaymentMessageGatewayOutput
1719
+ {
1720
+ /**
1721
+ * @param int $nStatusCode
1722
+ * @param string $szMessage
1723
+ * @param NullableBool $boAuthorisationAttempted
1724
+ * @param PreviousTransactionResult $ptdPreviousTransactionResult
1725
+ * @param StringList $lszErrorMessages
1726
+ */
1727
+ public function __construct($nStatusCode, $szMessage, NullableBool $boAuthorisationAttempted = null, PreviousTransactionResult $ptdPreviousTransactionResult = null, StringList $lszErrorMessages = null)
1728
+ {
1729
+ parent::__construct($nStatusCode, $szMessage, $boAuthorisationAttempted, $ptdPreviousTransactionResult, $lszErrorMessages);
1730
+ }
1731
+
1732
+ }
1733
+ class GetGatewayEntryPointsResult extends GatewayOutput
1734
+ {
1735
+ /**
1736
+ * @param int $nStatusCode
1737
+ * @param string $szMessage
1738
+ * @param StringList $lszErrorMessages
1739
+ */
1740
+ public function __construct($nStatusCode, $szMessage, StringList $lszErrorMessages = null)
1741
+ {
1742
+ parent::__construct($nStatusCode, $szMessage, $lszErrorMessages);
1743
+ }
1744
+
1745
+ }
1746
+ class GetCardTypeResult extends GatewayOutput
1747
+ {
1748
+ /**
1749
+ * @param int $nStatusCode
1750
+ * @param string $szMessage
1751
+ * @param StringList $lszErrorMessages
1752
+ */
1753
+ public function __construct($nStatusCode, $szMessage, StringList $lszErrorMessages = null)
1754
+ {
1755
+ parent::__construct($nStatusCode, $szMessage, $lszErrorMessages);
1756
+ }
1757
+
1758
+ }
1759
+ class ThreeDSecureOutputData
1760
+ {
1761
+ /**
1762
+ * @var string
1763
+ */
1764
+ private $m_szPaREQ;
1765
+ /**
1766
+ * @var string
1767
+ */
1768
+ private $m_szACSURL;
1769
+
1770
+ /**
1771
+ * @return string
1772
+ */
1773
+ public function getPaREQ()
1774
+ {
1775
+ return $this -> m_szPaREQ;
1776
+ }
1777
+ /**
1778
+ * @return string
1779
+ */
1780
+ public function getACSURL()
1781
+ {
1782
+ return ($this -> m_szACSURL);
1783
+ }
1784
+
1785
+ //constructor
1786
+ /**
1787
+ * @param string $szPaREQ
1788
+ * @param string $szACSURL
1789
+ */
1790
+ public function __construct($szPaREQ, $szACSURL)
1791
+ {
1792
+ $this -> m_szPaREQ = $szPaREQ;
1793
+ $this -> m_szACSURL = $szACSURL;
1794
+ }
1795
+
1796
+ }
1797
+ class GetGatewayEntryPointsOutputData extends BaseOutputData
1798
+ {
1799
+ //constructor
1800
+ function __construct(GatewayEntryPointList $lgepGatewayEntryPoints = null)
1801
+ {
1802
+ parent::__construct($lgepGatewayEntryPoints);
1803
+ }
1804
+
1805
+ }
1806
+ class TransactionOutputData extends BaseOutputData
1807
+ {
1808
+ /**
1809
+ * @var string
1810
+ */
1811
+ private $m_szCrossReference;
1812
+ /**
1813
+ * @var string
1814
+ */
1815
+ private $m_szAuthCode;
1816
+ /**
1817
+ * @var string
1818
+ */
1819
+ private $m_szAddressNumericCheckResult;
1820
+ /**
1821
+ * @var string
1822
+ */
1823
+ private $m_szPostCodeCheckResult;
1824
+ /**
1825
+ * @var string
1826
+ */
1827
+ private $m_szThreeDSecureAuthenticationCheckResult;
1828
+ /**
1829
+ * @var string
1830
+ */
1831
+ private $m_szCV2CheckResult;
1832
+ /**
1833
+ * @var CardTypeData
1834
+ */
1835
+ private $m_ctdCardTypeData;
1836
+ /**
1837
+ * @var NullableInt
1838
+ */
1839
+ private $m_nAmountReceived;
1840
+ /**
1841
+ * @var ThreeDSecureOutputData
1842
+ */
1843
+ private $m_tdsodThreeDSecureOutputData;
1844
+ /**
1845
+ * @var GenericVariableList
1846
+ */
1847
+ private $m_lgvCustomVariables;
1848
+ /**
1849
+ * @var GatewayEntryPointList
1850
+ */
1851
+ private $m_gepodGatewayEntryPointsOutputData;
1852
+
1853
+ /**
1854
+ * @return string
1855
+ */
1856
+ public function getCrossReference()
1857
+ {
1858
+ return $this -> m_szCrossReference;
1859
+ }
1860
+ /**
1861
+ * @return string
1862
+ */
1863
+ public function getAuthCode()
1864
+ {
1865
+ return $this -> m_szAuthCode;
1866
+ }
1867
+ /**
1868
+ * @return string
1869
+ */
1870
+ public function getAddressNumericCheckResult()
1871
+ {
1872
+ return $this -> m_szAddressNumericCheckResult;
1873
+ }
1874
+ /**
1875
+ * @return string
1876
+ */
1877
+ public function getPostCodeCheckResult()
1878
+ {
1879
+ return $this -> m_szPostCodeCheckResult;
1880
+ }
1881
+ /**
1882
+ * @return string
1883
+ */
1884
+ public function getThreeDSecureAuthenticationCheckResult()
1885
+ {
1886
+ return $this -> m_szThreeDSecureAuthenticationCheckResult;
1887
+ }
1888
+ /**
1889
+ * @return string
1890
+ */
1891
+ public function getCV2CheckResult()
1892
+ {
1893
+ return $this -> m_szCV2CheckResult;
1894
+ }
1895
+ /**
1896
+ * @return CardTypeData
1897
+ */
1898
+ public function getCardTypeData()
1899
+ {
1900
+ return $this -> m_ctdCardTypeData;
1901
+ }
1902
+ /**
1903
+ * @return NullableInt
1904
+ */
1905
+ public function getAmountReceived()
1906
+ {
1907
+ return $this -> m_nAmountReceived;
1908
+ }
1909
+ /**
1910
+ * @return ThreeDSecureOutputData
1911
+ */
1912
+ public function getThreeDSecureOutputData()
1913
+ {
1914
+ return $this -> m_tdsodThreeDSecureOutputData;
1915
+ }
1916
+ /**
1917
+ * @return GenericVariableList
1918
+ */
1919
+ public function getCustomVariables()
1920
+ {
1921
+ return $this -> m_lgvCustomVariables;
1922
+ }
1923
+ /**
1924
+ * @return GatewayEntryPointList
1925
+ */
1926
+ public function getGatewayEntryPoints()
1927
+ {
1928
+ return $this -> m_gepodGatewayEntryPointsOutputData;
1929
+ }
1930
+
1931
+ //constructor
1932
+ /**
1933
+ * @param GatewayEntryPointList $szCrossReference
1934
+ * @param string $szAuthCode
1935
+ * @param string $szAddressNumericCheckResult
1936
+ * @param string $szPostCodeCheckResult
1937
+ * @param string $szThreeDSecureAuthenticationCheckResult
1938
+ * @param string $szCV2CheckResult
1939
+ * @param CardTypeData $ctdCardTypeData
1940
+ * @param NullableInt $nAmountReceived
1941
+ * @param ThreeDSecureOutputData $tdsodThreeDSecureOutputData
1942
+ * @param GenericVariableList $lgvCustomVariables
1943
+ * @param GatewayEntryPointList $lgepGatewayEntryPoints
1944
+ */
1945
+ public function __construct($szCrossReference, $szAuthCode, $szAddressNumericCheckResult, $szPostCodeCheckResult, $szThreeDSecureAuthenticationCheckResult, $szCV2CheckResult, CardTypeData $ctdCardTypeData = null, NullableInt $nAmountReceived = null, ThreeDSecureOutputData $tdsodThreeDSecureOutputData = null, GenericVariableList $lgvCustomVariables = null, GatewayEntryPointList $lgepGatewayEntryPoints = null)
1946
+ {
1947
+ //first calling the parent constructor
1948
+ parent::__construct($lgepGatewayEntryPoints);
1949
+
1950
+ $this -> m_szCrossReference = $szCrossReference;
1951
+ $this -> m_szAuthCode = $szAuthCode;
1952
+ $this -> m_szAddressNumericCheckResult = $szAddressNumericCheckResult;
1953
+ $this -> m_szPostCodeCheckResult = $szPostCodeCheckResult;
1954
+ $this -> m_szThreeDSecureAuthenticationCheckResult = $szThreeDSecureAuthenticationCheckResult;
1955
+ $this -> m_szCV2CheckResult = $szCV2CheckResult;
1956
+ $this -> m_ctdCardTypeData = $ctdCardTypeData;
1957
+ $this -> m_nAmountReceived = $nAmountReceived;
1958
+ $this -> m_tdsodThreeDSecureOutputData = $tdsodThreeDSecureOutputData;
1959
+ $this -> m_lgvCustomVariables = $lgvCustomVariables;
1960
+ $this -> m_gepodGatewayEntryPointsOutputData = $lgepGatewayEntryPoints;
1961
+ }
1962
+
1963
+ }
1964
+ class GetCardTypeOutputData extends BaseOutputData
1965
+ {
1966
+ /**
1967
+ * @var CardTypeData
1968
+ */
1969
+ private $m_ctdCardTypeData;
1970
+
1971
+ /**
1972
+ * @return CardTypeData
1973
+ */
1974
+ public function getCardTypeData()
1975
+ {
1976
+ return $this -> m_ctdCardTypeData;
1977
+ }
1978
+ //constructor
1979
+ /**
1980
+ * @param CardTypeData $ctdCardTypeData
1981
+ * @param GatewayEntryPointList $lgepGatewayEntryPoints
1982
+ */
1983
+ public function __construct(CardTypeData $ctdCardTypeData = null, GatewayEntryPointList $lgepGatewayEntryPoints = null)
1984
+ {
1985
+ parent::__construct($lgepGatewayEntryPoints);
1986
+
1987
+ $this -> m_ctdCardTypeData = $ctdCardTypeData;
1988
+ }
1989
+
1990
+ }
1991
+ class BaseOutputData
1992
+ {
1993
+ /**
1994
+ * @var GatewayEntryPointList
1995
+ */
1996
+ private $m_lgepGatewayEntryPoints;
1997
+
1998
+ /**
1999
+ * @return GatewayEntryPointList
2000
+ */
2001
+ public function getGatewayEntryPoints()
2002
+ {
2003
+ return $this -> m_lgepGatewayEntryPoints;
2004
+ }
2005
+
2006
+ //constructor
2007
+ /**
2008
+ * @param GatewayEntryPointList $lgepGatewayEntryPoints
2009
+ */
2010
+ public function __construct(GatewayEntryPointList $lgepGatewayEntryPoints = null)
2011
+ {
2012
+ $this -> m_lgepGatewayEntryPoints = $lgepGatewayEntryPoints;
2013
+ }
2014
+
2015
+ }
2016
+ /********************/
2017
+ /* Gateway messages */
2018
+ /********************/
2019
+ class GetGatewayEntryPoints extends GatewayTransaction
2020
+ {
2021
+ /**
2022
+ * @param GetGatewayEntryPointsResult $ggeprGetGatewayEntryPointsResult Passed as reference
2023
+ * @param GetGatewayEntryPointsOutputData $ggepGetGatewayEntryPointsOutputData Passed as reference
2024
+ * @return bool
2025
+ * @throws Exception
2026
+ */
2027
+ function processTransaction(GetGatewayEntryPointsResult &$ggeprGetGatewayEntryPointsResult = null, GetGatewayEntryPointsOutputData &$ggepGetGatewayEntryPointsOutputData = null)
2028
+ {
2029
+ $boTransactionSubmitted = false;
2030
+ $sSOAPClient;
2031
+ $lgepGatewayEntryPoints;
2032
+
2033
+ $ggepGetGatewayEntryPointsOutputData = null;
2034
+ $goGatewayOutput = null;
2035
+
2036
+ $sSOAPClient = new SOAP("GetGatewayEntryPoints", GatewayTransaction::getSOAPNamespace());
2037
+
2038
+ $boTransactionSubmitted = GatewayTransaction::processTransactionBase($sSOAPClient, "GetGatewayEntryPointsMessage", "GetGatewayEntryPointsResult", "GetGatewayEntryPointsOutputData", $goGatewayOutput, $lgepGatewayEntryPoints);
2039
+
2040
+ if ($boTransactionSubmitted)
2041
+ {
2042
+ $ggeprGetGatewayEntryPointsResult = $goGatewayOutput;
2043
+
2044
+ $ggepGetGatewayEntryPointsOutputData = new GetGatewayEntryPointsOutputData($lgepGatewayEntryPoints);
2045
+ }
2046
+
2047
+ return $boTransactionSubmitted;
2048
+ }
2049
+
2050
+ //constructor
2051
+ /**
2052
+ * @param RequestGatewayEntryPointList $lrgepRequestGatewayEntryPoints
2053
+ * @param int $nRetryAttempts
2054
+ * @param NullableInt $nTimeout
2055
+ */
2056
+ public function __construct(RequestGatewayEntryPointList $lrgepRequestGatewayEntryPoints = null, $nRetryAttempts = 1, NullableInt $nTimeout = null)
2057
+ {
2058
+ if ($nRetryAttempts == null && $nTimeout == null)
2059
+ {
2060
+ GatewayTransaction::__construct($lrgepRequestGatewayEntryPoints, 1, null);
2061
+ }
2062
+ else
2063
+ {
2064
+ GatewayTransaction::__construct($lrgepRequestGatewayEntryPoints, $nRetryAttempts, $nTimeout);
2065
+ }
2066
+ }
2067
+
2068
+ }
2069
+ class CardDetailsTransaction extends GatewayTransaction
2070
+ {
2071
+ /**
2072
+ * @var TransactionDetails
2073
+ */
2074
+ private $m_tdTransactionDetails;
2075
+ /**
2076
+ * @var CardDetails
2077
+ */
2078
+ private $m_cdCardDetails;
2079
+ /**
2080
+ * @var CustomerDetails
2081
+ */
2082
+ private $m_cdCustomerDetails;
2083
+
2084
+ /**
2085
+ * @return TransactionDetails
2086
+ */
2087
+ public function getTransactionDetails()
2088
+ {
2089
+ return $this -> m_tdTransactionDetails;
2090
+ }
2091
+ /**
2092
+ * @return CardDetails
2093
+ */
2094
+ public function getCardDetails()
2095
+ {
2096
+ return $this -> m_cdCardDetails;
2097
+ }
2098
+ /**
2099
+ * @return CustomerDetails
2100
+ */
2101
+ public function getCustomerDetails()
2102
+ {
2103
+ return $this -> m_cdCustomerDetails;
2104
+ }
2105
+ /**
2106
+ * @param CardDetailsTransactionResult $cdtrCardDetailsTransactionResult Passed by reference
2107
+ * @param TransactionOutputData $todTransactionOutputData Passed by reference
2108
+ * @return bool
2109
+ * @throws Exception
2110
+ */
2111
+ public function processTransaction(CardDetailsTransactionResult &$cdtrCardDetailsTransactionResult = null, TransactionOutputData &$todTransactionOutputData = null)
2112
+ {
2113
+ $boTransactionSubmitted = false;
2114
+ $sSOAPClient;
2115
+ $lgepGatewayEntryPoints = null;
2116
+ $goGatewayOutput = null;
2117
+
2118
+ $todTransactionOutputData = null;
2119
+ $cdtrCardDetailsTransactionResult = null;
2120
+
2121
+ $sSOAPClient = new SOAP("CardDetailsTransaction", parent::getSOAPNamespace());
2122
+
2123
+ // transaction details
2124
+ if ($this -> m_tdTransactionDetails != null)
2125
+ {
2126
+ if ($this -> m_tdTransactionDetails -> getAmount() != null)
2127
+ {
2128
+ if ($this -> m_tdTransactionDetails -> getAmount() -> getHasValue())
2129
+ {
2130
+ $sSOAPClient -> addParamAttribute("PaymentMessage.TransactionDetails", "Amount", (string)$this -> m_tdTransactionDetails -> getAmount() -> getValue());
2131
+ }
2132
+ }
2133
+ if ($this -> m_tdTransactionDetails -> getCurrencyCode() != null)
2134
+ {
2135
+ if ($this -> m_tdTransactionDetails -> getCurrencyCode() -> getHasValue())
2136
+ {
2137
+ $sSOAPClient -> addParamAttribute("PaymentMessage.TransactionDetails", "CurrencyCode", (string)$this -> m_tdTransactionDetails -> getCurrencyCode() -> getValue());
2138
+ }
2139
+ }
2140
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getCaptureEnvironment()))
2141
+ {
2142
+ $sSOAPClient -> addParamAttribute("PaymentMessage.TransactionDetails", "CaptureEnvironment", $this -> m_tdTransactionDetails -> getCaptureEnvironment());
2143
+ }
2144
+ if ($this -> m_tdTransactionDetails -> getContinuousAuthority() != null)
2145
+ {
2146
+ if ($this -> m_tdTransactionDetails -> getContinuousAuthority() -> getHasValue())
2147
+ {
2148
+ $sSOAPClient -> addParamAttribute("PaymentMessage.TransactionDetails", "ContinuousAuthority", (string)$this -> m_tdTransactionDetails -> getContinuousAuthority() -> getValue());
2149
+ }
2150
+ }
2151
+ if ($this -> m_tdTransactionDetails -> getMessageDetails() != null)
2152
+ {
2153
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getMessageDetails() -> getClientReference()))
2154
+ {
2155
+ $sSOAPClient -> addParamAttribute("PaymentMessage.TransactionDetails.MessageDetails", "ClientReference", $this -> m_tdTransactionDetails -> getMessageDetails() -> getClientReference());
2156
+ }
2157
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getMessageDetails() -> getTransactionType()))
2158
+ {
2159
+ $sSOAPClient -> addParamAttribute("PaymentMessage.TransactionDetails.MessageDetails", "TransactionType", $this -> m_tdTransactionDetails -> getMessageDetails() -> getTransactionType());
2160
+ }
2161
+ }
2162
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() != null)
2163
+ {
2164
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getTransactionControl() -> getAuthCode()))
2165
+ {
2166
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.TransactionControl.AuthCode", $this -> m_tdTransactionDetails -> getTransactionControl() -> getAuthCode());
2167
+ }
2168
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getThreeDSecureOverridePolicy() != null)
2169
+ {
2170
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getThreeDSecureOverridePolicy() -> getHasValue())
2171
+ {
2172
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.TransactionControl.ThreeDSecureOverridePolicy", SharedFunctions::boolToString($this -> m_tdTransactionDetails -> getTransactionControl() -> getThreeDSecureOverridePolicy() -> getValue()));
2173
+ }
2174
+ }
2175
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getTransactionControl() -> getAVSOverridePolicy()))
2176
+ {
2177
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.TransactionControl.AVSOverridePolicy", $this -> m_tdTransactionDetails -> getTransactionControl() -> getAVSOverridePolicy());
2178
+ }
2179
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getTransactionControl() -> getCV2OverridePolicy()))
2180
+ {
2181
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.TransactionControl.CV2OverridePolicy", ($this -> m_tdTransactionDetails -> getTransactionControl() -> getCV2OverridePolicy()));
2182
+ }
2183
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getDuplicateDelay() != null)
2184
+ {
2185
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getDuplicateDelay() -> getHasValue())
2186
+ {
2187
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.TransactionControl.DuplicateDelay", (string)$this -> m_tdTransactionDetails -> getTransactionControl() -> getDuplicateDelay() -> getValue());
2188
+ }
2189
+ }
2190
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoCardType() != null)
2191
+ {
2192
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoCardType() -> getHasValue())
2193
+ {
2194
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.TransactionControl.EchoCardType", SharedFunctions::boolToString($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoCardType() -> getValue()));
2195
+ }
2196
+ }
2197
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoAVSCheckResult() != null)
2198
+ {
2199
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoAVSCheckResult() -> getHasValue())
2200
+ {
2201
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.TransactionControl.EchoAVSCheckResult", SharedFunctions::boolToString($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoAVSCheckResult() -> getValue()));
2202
+ }
2203
+ }
2204
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoAVSCheckResult() != null)
2205
+ {
2206
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoAVSCheckResult() -> getHasValue())
2207
+ {
2208
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.TransactionControl.EchoAVSCheckResult", SharedFunctions::boolToString($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoAVSCheckResult() -> getValue()));
2209
+ }
2210
+ }
2211
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoCV2CheckResult() != null)
2212
+ {
2213
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoCV2CheckResult() -> getHasValue())
2214
+ {
2215
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.TransactionControl.EchoCV2CheckResult", SharedFunctions::boolToString($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoCV2CheckResult() -> getValue()));
2216
+ }
2217
+ }
2218
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoAmountReceived() != null)
2219
+ {
2220
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoAmountReceived() -> getHasValue())
2221
+ {
2222
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.TransactionControl.EchoAmountReceived", SharedFunctions::boolToString($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoAmountReceived() -> getValue()));
2223
+ }
2224
+ }
2225
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getThreeDSecurePassthroughData() != null)
2226
+ {
2227
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getTransactionControl() -> getThreeDSecurePassthroughData() -> getEnrolmentStatus()))
2228
+ {
2229
+ $sSOAPClient -> addParamAttribute("PaymentMessage.TransactionDetails.TransactionControl.ThreeDSecurePassthroughData", "EnrolmentStatus", $this -> m_tdTransactionDetails -> getTransactionControl() -> getThreeDSecurePassthroughData() -> getEnrolmentStatus());
2230
+ }
2231
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getTransactionControl() -> getThreeDSecurePassthroughData() -> getAuthenticationStatus()))
2232
+ {
2233
+ $sSOAPClient -> addParamAttribute("PaymentMessage.TransactionDetails.TransactionControl.ThreeDSecurePassthroughData", "AuthenticationStatus", $this -> m_tdTransactionDetails -> getTransactionControl() -> getThreeDSecurePassthroughData() -> getAuthenticationStatus());
2234
+ }
2235
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getTransactionControl() -> getThreeDSecurePassthroughData() -> getElectronicCommerceIndicator()))
2236
+ {
2237
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.TransactionControl.ThreeDSecurePassthroughData.ElectronicCommerceIndicator", $this -> m_tdTransactionDetails -> getTransactionControl() -> getThreeDSecurePassthroughData() -> getElectronicCommerceIndicator());
2238
+ }
2239
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getTransactionControl() -> getThreeDSecurePassthroughData() -> getAuthenticationValue()))
2240
+ {
2241
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.TransactionControl.ThreeDSecurePassthroughData.AuthenticationValue", $this -> m_tdTransactionDetails -> getTransactionControl() -> getThreeDSecurePassthroughData() -> getAuthenticationValue());
2242
+ }
2243
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getTransactionControl() -> getThreeDSecurePassthroughData() -> getTransactionIdentifier()))
2244
+ {
2245
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.TransactionControl.ThreeDSecurePassthroughData.TransactionIdentifier", $this -> m_tdTransactionDetails -> getTransactionControl() -> getThreeDSecurePassthroughData() -> getTransactionIdentifier());
2246
+ }
2247
+ }
2248
+ }
2249
+ if ($this -> m_tdTransactionDetails -> getThreeDSecureBrowserDetails() != null)
2250
+ {
2251
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getThreeDSecureBrowserDetails() -> getAcceptHeaders()))
2252
+ {
2253
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.ThreeDSecureBrowserDetails.AcceptHeaders", $this -> m_tdTransactionDetails -> getThreeDSecureBrowserDetails() -> getAcceptHeaders());
2254
+ }
2255
+ if ($this -> m_tdTransactionDetails -> getThreeDSecureBrowserDetails() -> getDeviceCategory() != null)
2256
+ {
2257
+ if ($this -> m_tdTransactionDetails -> getThreeDSecureBrowserDetails() -> getDeviceCategory() -> getHasValue())
2258
+ {
2259
+ $sSOAPClient -> addParamAttribute("PaymentMessage.TransactionDetails.ThreeDSecureBrowserDetails", "DeviceCategory", (string)$this -> m_tdTransactionDetails -> getThreeDSecureBrowserDetails() -> getDeviceCategory() -> getValue());
2260
+ }
2261
+ }
2262
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getThreeDSecureBrowserDetails() -> getUserAgent()))
2263
+ {
2264
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.ThreeDSecureBrowserDetails.UserAgent", $this -> m_tdTransactionDetails -> getThreeDSecureBrowserDetails() -> getUserAgent());
2265
+ }
2266
+ }
2267
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getOrderID()))
2268
+ {
2269
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.OrderID", $this -> m_tdTransactionDetails -> getOrderID());
2270
+ }
2271
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getOrderDescription()))
2272
+ {
2273
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.OrderDescription", $this -> m_tdTransactionDetails -> getOrderDescription());
2274
+ }
2275
+ }
2276
+ // card details
2277
+ if ($this -> m_cdCardDetails != null)
2278
+ {
2279
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_cdCardDetails -> getCardName()))
2280
+ {
2281
+ $sSOAPClient -> addParam("PaymentMessage.CardDetails.CardName", $this -> m_cdCardDetails -> getCardName());
2282
+ }
2283
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_cdCardDetails -> getCV2()))
2284
+ {
2285
+ $sSOAPClient -> addParam("PaymentMessage.CardDetails.CV2", $this -> m_cdCardDetails -> getCV2());
2286
+ }
2287
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_cdCardDetails -> getCardNumber()))
2288
+ {
2289
+ $sSOAPClient -> addParam("PaymentMessage.CardDetails.CardNumber", $this -> m_cdCardDetails -> getCardNumber());
2290
+ }
2291
+ if ($this -> m_cdCardDetails -> getExpiryDate() != null)
2292
+ {
2293
+ if ($this -> m_cdCardDetails -> getExpiryDate() -> getMonth() != null)
2294
+ {
2295
+ if ($this -> m_cdCardDetails -> getExpiryDate() -> getMonth() -> getHasValue())
2296
+ {
2297
+ $sSOAPClient -> addParamAttribute("PaymentMessage.CardDetails.ExpiryDate", "Month", (string)$this -> m_cdCardDetails -> getExpiryDate() -> getMonth() -> getValue());
2298
+ }
2299
+ }
2300
+ if ($this -> m_cdCardDetails -> getExpiryDate() -> getYear() != null)
2301
+ {
2302
+ if ($this -> m_cdCardDetails -> getExpiryDate() -> getYear() -> getHasValue())
2303
+ {
2304
+ $sSOAPClient -> addParamAttribute("PaymentMessage.CardDetails.ExpiryDate", "Year", (string)$this -> m_cdCardDetails -> getExpiryDate() -> getYear() -> getValue());
2305
+ }
2306
+ }
2307
+ }
2308
+ if ($this -> m_cdCardDetails -> getStartDate() != null)
2309
+ {
2310
+ if ($this -> m_cdCardDetails -> getStartDate() -> getMonth() != null)
2311
+ {
2312
+ if ($this -> m_cdCardDetails -> getStartDate() -> getMonth() -> getHasValue())
2313
+ {
2314
+ $sSOAPClient -> addParamAttribute("PaymentMessage.CardDetails.StartDate", "Month", (string)$this -> m_cdCardDetails -> getStartDate() -> getMonth() -> getValue());
2315
+ }
2316
+ }
2317
+ if ($this -> m_cdCardDetails -> getStartDate() -> getYear() != null)
2318
+ {
2319
+ if ($this -> m_cdCardDetails -> getStartDate() -> getYear() -> getHasValue())
2320
+ {
2321
+ $sSOAPClient -> addParamAttribute("PaymentMessage.CardDetails.StartDate", "Year", (string)$this -> m_cdCardDetails -> getStartDate() -> getYear() -> getValue());
2322
+ }
2323
+ }
2324
+ }
2325
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_cdCardDetails -> getIssueNumber()))
2326
+ {
2327
+ $sSOAPClient -> addParam("PaymentMessage.CardDetails.IssueNumber", $this -> m_cdCardDetails -> getIssueNumber());
2328
+ }
2329
+ }
2330
+ // customer details
2331
+ if ($this -> m_cdCustomerDetails != null)
2332
+ {
2333
+ if ($this -> m_cdCustomerDetails -> getBillingAddress() != null)
2334
+ {
2335
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_cdCustomerDetails -> getBillingAddress() -> getAddress1()))
2336
+ {
2337
+ $sSOAPClient -> addParam("PaymentMessage.CustomerDetails.BillingAddress.Address1", $this -> m_cdCustomerDetails -> getBillingAddress() -> getAddress1());
2338
+ }
2339
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_cdCustomerDetails -> getBillingAddress() -> getAddress2()))
2340
+ {
2341
+ $sSOAPClient -> addParam("PaymentMessage.CustomerDetails.BillingAddress.Address2", $this -> m_cdCustomerDetails -> getBillingAddress() -> getAddress2());
2342
+ }
2343
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_cdCustomerDetails -> getBillingAddress() -> getAddress3()))
2344
+ {
2345
+ $sSOAPClient -> addParam("PaymentMessage.CustomerDetails.BillingAddress.Address3", $this -> m_cdCustomerDetails -> getBillingAddress() -> getAddress3());
2346
+ }
2347
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_cdCustomerDetails -> getBillingAddress() -> getAddress4()))
2348
+ {
2349
+ $sSOAPClient -> addParam("PaymentMessage.CustomerDetails.BillingAddress.Address4", $this -> m_cdCustomerDetails -> getBillingAddress() -> getAddress4());
2350
+ }
2351
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_cdCustomerDetails -> getBillingAddress() -> getCity()))
2352
+ {
2353
+ $sSOAPClient -> addParam("PaymentMessage.CustomerDetails.BillingAddress.City", $this -> m_cdCustomerDetails -> getBillingAddress() -> getCity());
2354
+ }
2355
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_cdCustomerDetails -> getBillingAddress() -> getState()))
2356
+ {
2357
+ $sSOAPClient -> addParam("PaymentMessage.CustomerDetails.BillingAddress.State", $this -> m_cdCustomerDetails -> getBillingAddress() -> getState());
2358
+ }
2359
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_cdCustomerDetails -> getBillingAddress() -> getPostCode()))
2360
+ {
2361
+ $sSOAPClient -> addParam("PaymentMessage.CustomerDetails.BillingAddress.PostCode", $this -> m_cdCustomerDetails -> getBillingAddress() -> getPostCode());
2362
+ }
2363
+ if ($this -> m_cdCustomerDetails -> getBillingAddress() -> getCountryCode() != null)
2364
+ {
2365
+ if ($this -> m_cdCustomerDetails -> getBillingAddress() -> getCountryCode() -> getHasValue())
2366
+ {
2367
+ $sSOAPClient -> addParam("PaymentMessage.CustomerDetails.BillingAddress.CountryCode", (string)$this -> m_cdCustomerDetails -> getBillingAddress() -> getCountryCode() -> getValue());
2368
+ }
2369
+ }
2370
+ }
2371
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_cdCustomerDetails -> getEmailAddress()))
2372
+ {
2373
+ $sSOAPClient -> addParam("PaymentMessage.CustomerDetails.EmailAddress", $this -> m_cdCustomerDetails -> getEmailAddress());
2374
+ }
2375
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_cdCustomerDetails -> getPhoneNumber()))
2376
+ {
2377
+ $sSOAPClient -> addParam("PaymentMessage.CustomerDetails.PhoneNumber", $this -> m_cdCustomerDetails -> getPhoneNumber());
2378
+ }
2379
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_cdCustomerDetails -> getCustomerIPAddress()))
2380
+ {
2381
+ $sSOAPClient -> addParam("PaymentMessage.CustomerDetails.CustomerIPAddress", $this -> m_cdCustomerDetails -> getCustomerIPAddress());
2382
+ }
2383
+ }
2384
+
2385
+ $boTransactionSubmitted = GatewayTransaction::processTransactionBase($sSOAPClient, "PaymentMessage", "CardDetailsTransactionResult", "TransactionOutputData", $goGatewayOutput, $lgepGatewayEntryPoints);
2386
+
2387
+ if ($boTransactionSubmitted)
2388
+ {
2389
+ $cdtrCardDetailsTransactionResult = SharedFunctionsPaymentSystemShared::getPaymentMessageGatewayOutput($sSOAPClient -> getXmlTag(), "CardDetailsTransactionResult", $goGatewayOutput);
2390
+
2391
+ $todTransactionOutputData = SharedFunctionsPaymentSystemShared::getTransactionOutputData($sSOAPClient -> getXmlTag(), $lgepGatewayEntryPoints);
2392
+ }
2393
+
2394
+ return ($boTransactionSubmitted);
2395
+ }
2396
+
2397
+ /**
2398
+ * @param RequestGatewayEntryPointList $lrgepRequestGatewayEntryPoints
2399
+ * @param int $nRetryAttempts
2400
+ * @param NullableInt $nTimeout
2401
+ */
2402
+ public function __construct(RequestGatewayEntryPointList $lrgepRequestGatewayEntryPoints = null, $nRetryAttempts = 1, NullableInt $nTimeout = null)
2403
+ {
2404
+ parent::__construct($lrgepRequestGatewayEntryPoints, $nRetryAttempts, $nTimeout);
2405
+
2406
+ $this -> m_tdTransactionDetails = new TransactionDetails();
2407
+ $this -> m_cdCardDetails = new CardDetails();
2408
+ $this -> m_cdCustomerDetails = new CustomerDetails();
2409
+ }
2410
+
2411
+ }
2412
+ class CrossReferenceTransaction extends GatewayTransaction
2413
+ {
2414
+ /**
2415
+ * @var TransactionDetails
2416
+ */
2417
+ private $m_tdTransactionDetails;
2418
+ /**
2419
+ * @var OverrideCardDetails
2420
+ */
2421
+ private $m_ocdOverrideCardDetails;
2422
+ /**
2423
+ * @var CustomerDetails
2424
+ */
2425
+ private $m_cdCustomerDetails;
2426
+
2427
+ /**
2428
+ * @return TransactionDetails
2429
+ */
2430
+ public function getTransactionDetails()
2431
+ {
2432
+ return $this -> m_tdTransactionDetails;
2433
+ }
2434
+ /**
2435
+ * @return OverrideCardDetails
2436
+ */
2437
+ public function getOverrideCardDetails()
2438
+ {
2439
+ return $this -> m_ocdOverrideCardDetails;
2440
+ }
2441
+ /**
2442
+ * @return CustomerDetails
2443
+ */
2444
+ public function getCustomerDetails()
2445
+ {
2446
+ return $this -> m_cdCustomerDetails;
2447
+ }
2448
+ /**
2449
+ * @param CrossReferenceTransactionResult $crtrCrossReferenceTransactionResult Passed by reference
2450
+ * @param TransactionOutputData $todTransactionOutputData Passed by reference
2451
+ * @return bool
2452
+ * @throws Exception
2453
+ */
2454
+ public function processTransaction(CrossReferenceTransactionResult &$crtrCrossReferenceTransactionResult = null, TransactionOutputData &$todTransactionOutputData = null)
2455
+ {
2456
+ $boTransactionSubmitted = false;
2457
+ $sSOAPClient;
2458
+ $lgepGatewayEntryPoints = null;
2459
+
2460
+ $todTransactionOutputData = null;
2461
+ $goGatewayOutput = null;
2462
+
2463
+ $sSOAPClient = new SOAP("CrossReferenceTransaction", GatewayTransaction::getSOAPNamespace());
2464
+ // transaction details
2465
+ if ($this -> m_tdTransactionDetails != null)
2466
+ {
2467
+ if ($this -> m_tdTransactionDetails -> getAmount() != null)
2468
+ {
2469
+ if ($this -> m_tdTransactionDetails -> getAmount() -> getHasValue())
2470
+ {
2471
+ $sSOAPClient -> addParamAttribute("PaymentMessage.TransactionDetails", "Amount", (string)$this -> m_tdTransactionDetails -> getAmount() -> getValue());
2472
+ }
2473
+ }
2474
+ if ($this -> m_tdTransactionDetails -> getCurrencyCode() != null)
2475
+ {
2476
+ if ($this -> m_tdTransactionDetails -> getCurrencyCode() -> getHasValue())
2477
+ {
2478
+ $sSOAPClient -> addParamAttribute("PaymentMessage.TransactionDetails", "CurrencyCode", (string)$this -> m_tdTransactionDetails -> getCurrencyCode() -> getValue());
2479
+ }
2480
+ }
2481
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getCaptureEnvironment()))
2482
+ {
2483
+ $sSOAPClient -> addParamAttribute("PaymentMessage.TransactionDetails", "CaptureEnvironment", $this -> m_tdTransactionDetails -> getCaptureEnvironment());
2484
+ }
2485
+ if ($this -> m_tdTransactionDetails -> getContinuousAuthority() != null)
2486
+ {
2487
+ if ($this -> m_tdTransactionDetails -> getContinuousAuthority() -> getHasValue())
2488
+ {
2489
+ $sSOAPClient -> addParamAttribute("PaymentMessage.TransactionDetails", "ContinuousAuthority", (string)$this -> m_tdTransactionDetails -> getContinuousAuthority() -> getValue());
2490
+ }
2491
+ }
2492
+ if ($this -> m_tdTransactionDetails -> getMessageDetails() != null)
2493
+ {
2494
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getMessageDetails() -> getClientReference()))
2495
+ {
2496
+ $sSOAPClient -> addParamAttribute("PaymentMessage.TransactionDetails.MessageDetails", "ClientReference", $this -> m_tdTransactionDetails -> getMessageDetails() -> getClientReference());
2497
+ }
2498
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getMessageDetails() -> getPreviousClientReference()))
2499
+ {
2500
+ $sSOAPClient -> addParamAttribute("PaymentMessage.TransactionDetails.MessageDetails", "PreviousClientReference", $this -> m_tdTransactionDetails -> getMessageDetails() -> getPreviousClientReference());
2501
+ }
2502
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getMessageDetails() -> getTransactionType()))
2503
+ {
2504
+ $sSOAPClient -> addParamAttribute("PaymentMessage.TransactionDetails.MessageDetails", "TransactionType", $this -> m_tdTransactionDetails -> getMessageDetails() -> getTransactionType());
2505
+ }
2506
+ if ($this -> m_tdTransactionDetails -> getMessageDetails() -> getNewTransaction() != null)
2507
+ {
2508
+ if ($this -> m_tdTransactionDetails -> getMessageDetails() -> getNewTransaction() -> getHasValue())
2509
+ {
2510
+ $sSOAPClient -> addParamAttribute("PaymentMessage.TransactionDetails.MessageDetails", "NewTransaction", SharedFunctions::boolToString($this -> m_tdTransactionDetails -> getMessageDetails() -> getNewTransaction() -> getValue()));
2511
+ }
2512
+ }
2513
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getMessageDetails() -> getCrossReference()))
2514
+ {
2515
+ $sSOAPClient -> addParamAttribute("PaymentMessage.TransactionDetails.MessageDetails", "CrossReference", $this -> m_tdTransactionDetails -> getMessageDetails() -> getCrossReference());
2516
+ }
2517
+ }
2518
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() != null)
2519
+ {
2520
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getTransactionControl() -> getAuthCode()))
2521
+ {
2522
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.TransactionControl.AuthCode", $this -> m_tdTransactionDetails -> getTransactionControl() -> getAuthCode());
2523
+ }
2524
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getTransactionControl() -> getThreeDSecureOverridePolicy()))
2525
+ {
2526
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getThreeDSecureOverridePolicy() -> getHasValue())
2527
+ {
2528
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.TransactionControl.ThreeDSecureOverridePolicy", SharedFunctions::boolToString($this -> m_tdTransactionDetails -> getTransactionControl() -> getThreeDSecureOverridePolicy() -> getValue()));
2529
+ }
2530
+ }
2531
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getTransactionControl() -> getAVSOverridePolicy()))
2532
+ {
2533
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.TransactionControl.AVSOverridePolicy", $this -> m_tdTransactionDetails -> getTransactionControl() -> getAVSOverridePolicy());
2534
+ }
2535
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getTransactionControl() -> getCV2OverridePolicy()))
2536
+ {
2537
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.TransactionControl.CV2OverridePolicy", $this -> m_tdTransactionDetails -> getTransactionControl() -> getCV2OverridePolicy());
2538
+ }
2539
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getDuplicateDelay() != null)
2540
+ {
2541
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getDuplicateDelay() -> getHasValue())
2542
+ {
2543
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.TransactionControl.DuplicateDelay", (string)($this -> m_tdTransactionDetails -> getTransactionControl() -> getDuplicateDelay() -> getValue()));
2544
+ }
2545
+ }
2546
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoCardType() != null)
2547
+ {
2548
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoCardType() -> getHasValue())
2549
+ {
2550
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.TransactionControl.EchoCardType", SharedFunctions::boolToString($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoCardType() -> getValue()));
2551
+ }
2552
+ }
2553
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoAVSCheckResult() != null)
2554
+ {
2555
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoAVSCheckResult() -> getHasValue())
2556
+ {
2557
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.TransactionControl.EchoAVSCheckResult", SharedFunctions::boolToString($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoAVSCheckResult() -> getValue()));
2558
+ }
2559
+ }
2560
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoAVSCheckResult() != null)
2561
+ {
2562
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoAVSCheckResult() -> getHasValue())
2563
+ {
2564
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.TransactionControl.EchoAVSCheckResult", SharedFunctions::boolToString($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoAVSCheckResult() -> getValue()));
2565
+ }
2566
+ }
2567
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoCV2CheckResult() != null)
2568
+ {
2569
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoCV2CheckResult() -> getHasValue())
2570
+ {
2571
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.TransactionControl.EchoCV2CheckResult", SharedFunctions::boolToString($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoCV2CheckResult() -> getValue()));
2572
+ }
2573
+ }
2574
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoAmountReceived() != null)
2575
+ {
2576
+ if ($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoAmountReceived() -> getHasValue())
2577
+ {
2578
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.TransactionControl.EchoAmountReceived", SharedFunctions::boolToString($this -> m_tdTransactionDetails -> getTransactionControl() -> getEchoAmountReceived() -> getValue()));
2579
+ }
2580
+ }
2581
+ }
2582
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getOrderID()))
2583
+ {
2584
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.OrderID", $this -> m_tdTransactionDetails -> getOrderID());
2585
+ }
2586
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdTransactionDetails -> getOrderDescription()))
2587
+ {
2588
+ $sSOAPClient -> addParam("PaymentMessage.TransactionDetails.OrderDescription", $this -> m_tdTransactionDetails -> getOrderDescription());
2589
+ }
2590
+ }
2591
+ // card details
2592
+ if ($this -> m_ocdOverrideCardDetails != null)
2593
+ {
2594
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_ocdOverrideCardDetails -> getCardName()))
2595
+ {
2596
+ $sSOAPClient -> addParam("PaymentMessage.OverrideCardDetails.CardName", $this -> m_ocdOverrideCardDetails -> getCardName());
2597
+ }
2598
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_ocdOverrideCardDetails -> getCV2()))
2599
+ {
2600
+ $sSOAPClient -> addParam("PaymentMessage.OverrideCardDetails.CV2", $this -> m_ocdOverrideCardDetails -> getCV2());
2601
+ }
2602
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_ocdOverrideCardDetails -> getCardNumber()))
2603
+ {
2604
+ $sSOAPClient -> addParam("PaymentMessage.OverrideCardDetails.CardNumber", $this -> m_ocdOverrideCardDetails -> getCardNumber());
2605
+ }
2606
+ if ($this -> m_ocdOverrideCardDetails -> getExpiryDate() != null)
2607
+ {
2608
+ if ($this -> m_ocdOverrideCardDetails -> getExpiryDate() -> getMonth() != null)
2609
+ {
2610
+ if ($this -> m_ocdOverrideCardDetails -> getExpiryDate() -> getMonth() -> getHasValue())
2611
+ {
2612
+ $sSOAPClient -> addParamAttribute("PaymentMessage.OverrideCardDetails.ExpiryDate", "Month", (string)$this -> m_ocdOverrideCardDetails -> getExpiryDate() -> getMonth() -> getValue());
2613
+ }
2614
+ }
2615
+ if ($this -> m_ocdOverrideCardDetails -> getExpiryDate() -> getYear() != null)
2616
+ {
2617
+ if ($this -> m_ocdOverrideCardDetails -> getExpiryDate() -> getYear() -> getHasValue())
2618
+ {
2619
+ $sSOAPClient -> addParamAttribute("PaymentMessage.OverrideCardDetails.ExpiryDate", "Year", (string)$this -> m_ocdOverrideCardDetails -> getExpiryDate() -> getYear() -> getValue());
2620
+ }
2621
+ }
2622
+ }
2623
+ if ($this -> m_ocdOverrideCardDetails -> getStartDate() != null)
2624
+ {
2625
+ if ($this -> m_ocdOverrideCardDetails -> getStartDate() -> getMonth() != null)
2626
+ {
2627
+ if ($this -> m_ocdOverrideCardDetails -> getStartDate() -> getMonth() -> getHasValue())
2628
+ {
2629
+ $sSOAPClient -> addParamAttribute("PaymentMessage.OverrideCardDetails.StartDate", "Month", (string)$this -> m_ocdOverrideCardDetails -> getStartDate() -> getMonth() -> getValue());
2630
+ }
2631
+ }
2632
+ if ($this -> m_ocdOverrideCardDetails -> getStartDate() -> getYear() != null)
2633
+ {
2634
+ if ($this -> m_ocdOverrideCardDetails -> getStartDate() -> getYear() -> getHasValue())
2635
+ {
2636
+ $sSOAPClient -> addParamAttribute("PaymentMessage.OverrideCardDetails.StartDate", "Year", (string)$this -> m_ocdOverrideCardDetails -> getStartDate() -> getYear() -> getValue());
2637
+ }
2638
+ }
2639
+ }
2640
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_ocdOverrideCardDetails -> getIssueNumber()))
2641
+ {
2642
+ $sSOAPClient -> addParam("PaymentMessage.CardDetails.IssueNumber", $this -> m_ocdOverrideCardDetails -> getIssueNumber());
2643
+ }
2644
+ }
2645
+ // customer details
2646
+ if ($this -> m_cdCustomerDetails != null)
2647
+ {
2648
+ if ($this -> m_cdCustomerDetails -> getBillingAddress() != null)
2649
+ {
2650
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_cdCustomerDetails -> getBillingAddress() -> getAddress1()))
2651
+ {
2652
+ $sSOAPClient -> addParam("PaymentMessage.CustomerDetails.BillingAddress.Address1", $this -> m_cdCustomerDetails -> getBillingAddress() -> getAddress1());
2653
+ }
2654
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_cdCustomerDetails -> getBillingAddress() -> getAddress2()))
2655
+ {
2656
+ $sSOAPClient -> addParam("PaymentMessage.CustomerDetails.BillingAddress.Address2", $this -> m_cdCustomerDetails -> getBillingAddress() -> getAddress2());
2657
+ }
2658
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_cdCustomerDetails -> getBillingAddress() -> getAddress3()))
2659
+ {
2660
+ $sSOAPClient -> addParam("PaymentMessage.CustomerDetails.BillingAddress.Address3", $this -> m_cdCustomerDetails -> getBillingAddress() -> getAddress3());
2661
+ }
2662
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_cdCustomerDetails -> getBillingAddress() -> getAddress4()))
2663
+ {
2664
+ $sSOAPClient -> addParam("PaymentMessage.CustomerDetails.BillingAddress.Address4", $this -> m_cdCustomerDetails -> getBillingAddress() -> getAddress4());
2665
+ }
2666
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_cdCustomerDetails -> getBillingAddress() -> getCity()))
2667
+ {
2668
+ $sSOAPClient -> addParam("PaymentMessage.CustomerDetails.BillingAddress.City", $this -> m_cdCustomerDetails -> getBillingAddress() -> getCity());
2669
+ }
2670
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_cdCustomerDetails -> getBillingAddress() -> getState()))
2671
+ {
2672
+ $sSOAPClient -> addParam("PaymentMessage.CustomerDetails.BillingAddress.State", $this -> m_cdCustomerDetails -> getBillingAddress() -> getState());
2673
+ }
2674
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_cdCustomerDetails -> getBillingAddress() -> getPostCode()))
2675
+ {
2676
+ $sSOAPClient -> addParam("PaymentMessage.CustomerDetails.BillingAddress.PostCode", (string)$this -> m_cdCustomerDetails -> getBillingAddress() -> getPostCode());
2677
+ }
2678
+ if ($this -> m_cdCustomerDetails -> getBillingAddress() -> getCountryCode() != null)
2679
+ {
2680
+ if ($this -> m_cdCustomerDetails -> getBillingAddress() -> getCountryCode() -> getHasValue())
2681
+ {
2682
+ $sSOAPClient -> addParam("PaymentMessage.CustomerDetails.BillingAddress.CountryCode", (string)$this -> m_cdCustomerDetails -> getBillingAddress() -> getCountryCode() -> getValue());
2683
+ }
2684
+ }
2685
+ }
2686
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_cdCustomerDetails -> getEmailAddress()))
2687
+ {
2688
+ $sSOAPClient -> addParam("PaymentMessage.CustomerDetails.EmailAddress", $this -> m_cdCustomerDetails -> getEmailAddress());
2689
+ }
2690
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_cdCustomerDetails -> getPhoneNumber()))
2691
+ {
2692
+ $sSOAPClient -> addParam("PaymentMessage.CustomerDetails.PhoneNumber", $this -> m_cdCustomerDetails -> getPhoneNumber());
2693
+ }
2694
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_cdCustomerDetails -> getCustomerIPAddress()))
2695
+ {
2696
+ $sSOAPClient -> addParam("PaymentMessage.CustomerDetails.CustomerIPAddress", $this -> m_cdCustomerDetails -> getCustomerIPAddress());
2697
+ }
2698
+ }
2699
+
2700
+ $boTransactionSubmitted = GatewayTransaction::processTransactionBase($sSOAPClient, "PaymentMessage", "CrossReferenceTransactionResult", "TransactionOutputData", $goGatewayOutput, $lgepGatewayEntryPoints);
2701
+
2702
+ if ($boTransactionSubmitted)
2703
+ {
2704
+ $crtrCrossReferenceTransactionResult = SharedFunctionsPaymentSystemShared::getPaymentMessageGatewayOutput($sSOAPClient -> getXmlTag(), "CrossReferenceTransactionResult", $goGatewayOutput);
2705
+
2706
+ $todTransactionOutputData = SharedFunctionsPaymentSystemShared::getTransactionOutputData($sSOAPClient -> getXmlTag(), $lgepGatewayEntryPoints);
2707
+ }
2708
+
2709
+ return $boTransactionSubmitted;
2710
+ }
2711
+
2712
+ //constructor
2713
+ /**
2714
+ * @param RequestGatewayEntryPointList $lrgepRequestGatewayEntryPoints
2715
+ * @param int $nRetryAttempts
2716
+ * @param NullableInt $nTimeout
2717
+ */
2718
+ public function __construct(RequestGatewayEntryPointList $lrgepRequestGatewayEntryPoints = null, $nRetryAttempts = 1, NullableInt $nTimeout = null)
2719
+ {
2720
+ GatewayTransaction::__construct($lrgepRequestGatewayEntryPoints, $nRetryAttempts, $nTimeout);
2721
+
2722
+ $this -> m_tdTransactionDetails = new TransactionDetails();
2723
+ $this -> m_ocdOverrideCardDetails = new OverrideCardDetails();
2724
+ $this -> m_cdCustomerDetails = new CustomerDetails();
2725
+ }
2726
+
2727
+ }
2728
+ class ThreeDSecureAuthentication extends GatewayTransaction
2729
+ {
2730
+ /**
2731
+ * @var ThreeDSecureInputData
2732
+ */
2733
+ private $m_tdsidThreeDSecureInputData;
2734
+
2735
+ /**
2736
+ * @return ThreeDSecureInputData
2737
+ */
2738
+ public function getThreeDSecureInputData()
2739
+ {
2740
+ return $this -> m_tdsidThreeDSecureInputData;
2741
+ }
2742
+ /**
2743
+ * @param ThreeDSecureAuthenticationResult $tdsarThreeDSecureAuthenticationResult Passed by reference
2744
+ * @param TransactionOutputData $todTransactionOutputData Passed by reference
2745
+ * @return bool
2746
+ * @throws Exception
2747
+ */
2748
+ public function processTransaction(ThreeDSecureAuthenticationResult &$tdsarThreeDSecureAuthenticationResult = null, TransactionOutputData &$todTransactionOutputData = null)
2749
+ {
2750
+ $boTransactionSubmitted = false;
2751
+ $sSOAPClient;
2752
+ $lgepGatewayEntryPoints = null;
2753
+
2754
+ $todTransactionOutputData = null;
2755
+ $goGatewayOutput = null;
2756
+
2757
+ $sSOAPClient = new SOAP("ThreeDSecureAuthentication", GatewayTransaction::getSOAPNamespace());
2758
+ if ($this -> m_tdsidThreeDSecureInputData != null)
2759
+ {
2760
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdsidThreeDSecureInputData -> getCrossReference()))
2761
+ {
2762
+ $sSOAPClient -> addParamAttribute("ThreeDSecureMessage.ThreeDSecureInputData", "CrossReference", $this -> m_tdsidThreeDSecureInputData -> getCrossReference());
2763
+ }
2764
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_tdsidThreeDSecureInputData -> getPaRES()))
2765
+ {
2766
+ $sSOAPClient -> addParam("ThreeDSecureMessage.ThreeDSecureInputData.PaRES", $this -> m_tdsidThreeDSecureInputData -> getPaRES());
2767
+ }
2768
+ }
2769
+
2770
+ $boTransactionSubmitted = GatewayTransaction::processTransactionBase($sSOAPClient, "ThreeDSecureMessage", "ThreeDSecureAuthenticationResult", "TransactionOutputData", $goGatewayOutput, $lgepGatewayEntryPoints);
2771
+
2772
+ if ($boTransactionSubmitted)
2773
+ {
2774
+ $tdsarThreeDSecureAuthenticationResult = SharedFunctionsPaymentSystemShared::getPaymentMessageGatewayOutput($sSOAPClient -> getXmlTag(), "ThreeDSecureAuthenticationResult", $goGatewayOutput);
2775
+
2776
+ $todTransactionOutputData = SharedFunctionsPaymentSystemShared::getTransactionOutputData($sSOAPClient -> getXmlTag(), $lgepGatewayEntryPoints);
2777
+ }
2778
+
2779
+ return $boTransactionSubmitted;
2780
+ }
2781
+
2782
+ //constructor
2783
+ /**
2784
+ * @param RequestGatewayEntryPointList $lrgepRequestGatewayEntryPoints
2785
+ * @param int $nRetryAttempts
2786
+ * @param NullableInt $nTimeout
2787
+ */
2788
+ public function __construct(RequestGatewayEntryPointList $lrgepRequestGatewayEntryPoints = null, $nRetryAttempts = 1, NullableInt $nTimeout = null)
2789
+ {
2790
+ GatewayTransaction::__construct($lrgepRequestGatewayEntryPoints, $nRetryAttempts, $nTimeout);
2791
+
2792
+ $this -> m_tdsidThreeDSecureInputData = new ThreeDSecureInputData();
2793
+ }
2794
+
2795
+ }
2796
+ class GetCardType extends GatewayTransaction
2797
+ {
2798
+ /**
2799
+ * @var string
2800
+ */
2801
+ private $m_szCardNumber;
2802
+
2803
+ /**
2804
+ * @return string
2805
+ */
2806
+ public function getCardNumber()
2807
+ {
2808
+ return $this -> m_szCardNumber;
2809
+ }
2810
+ /**
2811
+ * @param string $cardNumber
2812
+ */
2813
+ public function setCardNumber($cardNumber)
2814
+ {
2815
+ $this -> m_szCardNumber = $cardNumber;
2816
+ }
2817
+ /**
2818
+ * @param GetCardTypeResult $gctrGetCardTypeResult Passed by reference
2819
+ * @param GetCardTypeOutputData $gctodGetCardTypeOutputData Passed by reference
2820
+ * @return bool
2821
+ * @throws Exception
2822
+ */
2823
+ public function processTransaction(GetCardTypeResult &$gctrGetCardTypeResult = null, GetCardTypeOutputData &$gctodGetCardTypeOutputData = null)
2824
+ {
2825
+ $boTransactionSubmitted = false;
2826
+ $sSOAPClient;
2827
+ $lgepGatewayEntryPoints = null;
2828
+ $ctdCardTypeData = null;
2829
+
2830
+ $gctodGetCardTypeOutputData = null;
2831
+ $goGatewayOutput = null;
2832
+
2833
+ $sSOAPClient = new SOAP("GetCardType", GatewayTransaction::getSOAPNamespace());
2834
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_szCardNumber))
2835
+ {
2836
+ $sSOAPClient -> addParam("GetCardTypeMessage.CardNumber", $this -> m_szCardNumber);
2837
+ }
2838
+
2839
+ $boTransactionSubmitted = GatewayTransaction::processTransactionBase($sSOAPClient, "GetCardTypeMessage", "GetCardTypeResult", "GetCardTypeOutputData", $goGatewayOutput, $lgepGatewayEntryPoints);
2840
+
2841
+ if ($boTransactionSubmitted)
2842
+ {
2843
+ $gctrGetCardTypeResult = $goGatewayOutput;
2844
+
2845
+ $ctdCardTypeData = SharedFunctionsPaymentSystemShared::getCardTypeData($sSOAPClient -> getXmlTag(), "GetCardTypeOutputData.CardTypeData");
2846
+
2847
+ $gctodGetCardTypeOutputData = new GetCardTypeOutputData($ctdCardTypeData, $lgepGatewayEntryPoints);
2848
+ }
2849
+ return $boTransactionSubmitted;
2850
+ }
2851
+
2852
+ //constructor
2853
+ /**
2854
+ * @param RequestGatewayEntryPointList $lrgepRequestGatewayEntryPoints
2855
+ * @param int $nRetryAttempts
2856
+ * @param NullableInt $nTimeout
2857
+ */
2858
+ public function __construct(RequestGatewayEntryPointList $lrgepRequestGatewayEntryPoints = null, $nRetryAttempts = 1, NullableInt $nTimeout = null)
2859
+ {
2860
+ GatewayTransaction::__construct($lrgepRequestGatewayEntryPoints, $nRetryAttempts, $nTimeout);
2861
+
2862
+ $this -> m_szCardNumber = "";
2863
+ }
2864
+
2865
+ }
2866
+ abstract class GatewayTransaction
2867
+ {
2868
+ /**
2869
+ * @var MerchantAuthentication
2870
+ */
2871
+ private $m_maMerchantAuthentication;
2872
+ /**
2873
+ * @var RequestGatewayEntryPointList
2874
+ */
2875
+ private $m_lrgepRequestGatewayEntryPoints;
2876
+ /**
2877
+ * @var int
2878
+ */
2879
+ private $m_nRetryAttempts;
2880
+ /**
2881
+ * @var NullableInt
2882
+ */
2883
+ private $m_nTimeout;
2884
+ /**
2885
+ * @var string
2886
+ */
2887
+ private $m_szSOAPNamespace = "https://www.thepaymentgateway.net/";
2888
+ /**
2889
+ * @var string
2890
+ */
2891
+ private $m_szLastRequest;
2892
+ /**
2893
+ * @var string
2894
+ */
2895
+ private $m_szLastResponse;
2896
+ /**
2897
+ * @var Exception
2898
+ */
2899
+ private $m_eLastException;
2900
+ /**
2901
+ * @var string
2902
+ */
2903
+ private $m_szEntryPointUsed;
2904
+
2905
+ /**
2906
+ * @return MerchantAuthentication
2907
+ */
2908
+ public function getMerchantAuthentication()
2909
+ {
2910
+ return $this -> m_maMerchantAuthentication;
2911
+ }
2912
+ /**
2913
+ * @return RequestGatewayEntryPointList
2914
+ */
2915
+ public function getRequestGatewayEntryPoints()
2916
+ {
2917
+ return $this -> m_lrgepRequestGatewayEntryPoints;
2918
+ }
2919
+ /**
2920
+ * @return int
2921
+ */
2922
+ public function getRetryAttempts()
2923
+ {
2924
+ return $this -> m_nRetryAttempts;
2925
+ }
2926
+ /**
2927
+ * @return NullableInt
2928
+ */
2929
+ public function getTimeout()
2930
+ {
2931
+ return $this -> m_nTimeout;
2932
+ }
2933
+ /**
2934
+ * @return string
2935
+ */
2936
+ public function getSOAPNamespace()
2937
+ {
2938
+ return $this -> m_szSOAPNamespace;
2939
+ }
2940
+ /**
2941
+ * @param string $value
2942
+ */
2943
+ public function setSOAPNamespace($value)
2944
+ {
2945
+ $this -> m_szSOAPNamespace = $value;
2946
+ }
2947
+ /**
2948
+ * @return string
2949
+ */
2950
+ public function getLastRequest()
2951
+ {
2952
+ return $this -> m_szLastRequest;
2953
+ }
2954
+ /**
2955
+ * @return string
2956
+ */
2957
+ public function getLastResponse()
2958
+ {
2959
+ return $this -> m_szLastResponse;
2960
+ }
2961
+ /**
2962
+ * @return Exception
2963
+ */
2964
+ public function getLastException()
2965
+ {
2966
+ return $this -> m_eLastException;
2967
+ }
2968
+ /**
2969
+ * @return string
2970
+ */
2971
+ public function getEntryPointUsed()
2972
+ {
2973
+ return $this -> m_szEntryPointUsed;
2974
+ }
2975
+ /**
2976
+ * @param RequestGatewayEntryPoint $x
2977
+ * @param RequestGatewayEntryPoint $y
2978
+ * @return int
2979
+ */
2980
+ public static function compare($x, $y)
2981
+ {
2982
+ $rgepFirst = null;
2983
+ $rgepSecond = null;
2984
+
2985
+ $rgepFirst = $x;
2986
+ $rgepSecond = $y;
2987
+
2988
+ return (GatewayTransaction::compareGatewayEntryPoints($rgepFirst, $rgepSecond));
2989
+ }
2990
+ /**
2991
+ * @param RequestGatewayEntryPoint $rgepFirst
2992
+ * @param RequestGatewayEntryPoint $rgepSecond
2993
+ * @return int
2994
+ */
2995
+ private static function compareGatewayEntryPoints(RequestGatewayEntryPoint $rgepFirst, RequestGatewayEntryPoint $rgepSecond)
2996
+ {
2997
+ $nReturnValue = 0;
2998
+ // returns >0 if rgepFirst greater than rgepSecond
2999
+ // returns 0 if they are equal
3000
+ // returns <0 if rgepFirst less than rgepSecond
3001
+
3002
+ // both null, then they are the same
3003
+ if ($rgepFirst == null && $rgepSecond == null)
3004
+ {
3005
+ $nReturnValue = 0;
3006
+ }
3007
+ // just first null? then second is greater
3008
+ elseif ($rgepFirst == null && $rgepSecond != null)
3009
+ {
3010
+ $nReturnValue = 1;
3011
+ }
3012
+ // just second null? then first is greater
3013
+ elseif ($rgepFirst != null && $rgepSecond == null)
3014
+ {
3015
+ $nReturnValue = -1;
3016
+ }
3017
+ // can now assume that first & second both have a value
3018
+ elseif ($rgepFirst -> getMetric() == $rgepSecond -> getMetric())
3019
+ {
3020
+ $nReturnValue = 0;
3021
+ }
3022
+ elseif ($rgepFirst -> getMetric() < $rgepSecond -> getMetric())
3023
+ {
3024
+ $nReturnValue = -1;
3025
+ }
3026
+ elseif ($rgepFirst -> getMetric() > $rgepSecond -> getMetric())
3027
+ {
3028
+ $nReturnValue = 1;
3029
+ }
3030
+
3031
+ return $nReturnValue;
3032
+ }
3033
+ /**
3034
+ * @param SOAP $sSOAPClient
3035
+ * @param string $szMessageXMLPath
3036
+ * @param string $szGatewayOutputXMLPath
3037
+ * @param string $szTransactionMessageXMLPath
3038
+ * @param GatewayOutput $goGatewayOutput
3039
+ * @param GatewayEntryPointList $lgepGatewayEntryPoints
3040
+ * @return bool
3041
+ * @throws Exception
3042
+ */
3043
+ protected function processTransactionBase(SOAP $sSOAPClient, $szMessageXMLPath, $szGatewayOutputXMLPath, $szTransactionMessageXMLPath, GatewayOutput &$goGatewayOutput = null, GatewayEntryPointList &$lgepGatewayEntryPoints = null)
3044
+ {
3045
+ $boTransactionSubmitted = false;
3046
+ $nOverallRetryCount = 0;
3047
+ $nOverallGatewayEntryPointCount = 0;
3048
+ $nGatewayEntryPointCount = 0;
3049
+ $nErrorMessageCount = 0;
3050
+ $rgepCurrentGatewayEntryPoint;
3051
+ $nStatusCode;
3052
+ $szMessage = null;
3053
+ $lszErrorMessages;
3054
+ $szString;
3055
+ $sbXMLString;
3056
+ $szXMLFormatString;
3057
+ $nCount = 0;
3058
+ $szEntryPointURL;
3059
+ $nMetric;
3060
+ $gepGatewayEntryPoint = null;
3061
+
3062
+ $lgepGatewayEntryPoints = null;
3063
+ $goGatewayOutput = null;
3064
+
3065
+ $this -> m_szEntryPointUsed = null;
3066
+
3067
+ if ($sSOAPClient == null)
3068
+ {
3069
+ return false;
3070
+ }
3071
+
3072
+ // populate the merchant details
3073
+ if ($this -> m_maMerchantAuthentication != null)
3074
+ {
3075
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_maMerchantAuthentication -> getMerchantID()))
3076
+ {
3077
+ $sSOAPClient -> addParamAttribute($szMessageXMLPath . ".MerchantAuthentication", "MerchantID", $this -> m_maMerchantAuthentication -> getMerchantID());
3078
+ }
3079
+ if (!SharedFunctions::isStringNullOrEmpty($this -> m_maMerchantAuthentication -> getPassword()))
3080
+ {
3081
+ $sSOAPClient -> addParamAttribute($szMessageXMLPath . ".MerchantAuthentication", "Password", $this -> m_maMerchantAuthentication -> getPassword());
3082
+ }
3083
+ }
3084
+
3085
+ // first need to sort the gateway entry points into the correct usage order
3086
+ $number = $this -> m_lrgepRequestGatewayEntryPoints -> sort("GatewayTransaction", "Compare");
3087
+
3088
+ // loop over the overall number of transaction attempts
3089
+ while (!$boTransactionSubmitted && $nOverallRetryCount < $this -> m_nRetryAttempts)
3090
+ {
3091
+ $nOverallGatewayEntryPointCount = 0;
3092
+
3093
+ // loop over the number of gateway entry points in the list
3094
+ while (!$boTransactionSubmitted && $nOverallGatewayEntryPointCount < $this -> m_lrgepRequestGatewayEntryPoints -> getCount())
3095
+ {
3096
+ $rgepCurrentGatewayEntryPoint = $this -> m_lrgepRequestGatewayEntryPoints -> getAt($nOverallGatewayEntryPointCount);
3097
+
3098
+ // ignore if the metric is "-1" this indicates that the entry point is offline
3099
+ if ($rgepCurrentGatewayEntryPoint -> getMetric() >= 0)
3100
+ {
3101
+ $nGatewayEntryPointCount = 0;
3102
+ $sSOAPClient -> setURL($rgepCurrentGatewayEntryPoint -> getEntryPointURL());
3103
+
3104
+ // loop over the number of times to try this specific entry point
3105
+ while (!$boTransactionSubmitted && $nGatewayEntryPointCount < $rgepCurrentGatewayEntryPoint -> getRetryAttempts())
3106
+ {
3107
+ if ($sSOAPClient -> sendRequest())
3108
+ {
3109
+ if ($sSOAPClient -> getXmlTag() -> getIntegerValue($szGatewayOutputXMLPath . ".StatusCode", $nStatusCode))
3110
+ {
3111
+ // a status code of 50 means that this entry point is not to be used
3112
+ if ($nStatusCode != 50)
3113
+ {
3114
+ $this -> m_szEntryPointUsed = $rgepCurrentGatewayEntryPoint -> getEntryPointURL();
3115
+
3116
+ // the transaction was submitted
3117
+ $boTransactionSubmitted = true;
3118
+
3119
+ $sSOAPClient -> getXmlTag() -> getStringValue($szGatewayOutputXMLPath . ".Message", $szMessage);
3120
+
3121
+ $nErrorMessageCount = 0;
3122
+ $lszErrorMessages = new StringList();
3123
+ $szXmlFormatString1 = $szGatewayOutputXMLPath . ".ErrorMessages.MessageDetail[";
3124
+ $szXmlFormatString2 = "].Detail";
3125
+
3126
+ while ($sSOAPClient -> getXmlTag() -> getStringValue($szXmlFormatString1 . $nErrorMessageCount . $szXmlFormatString2, $szString))
3127
+ {
3128
+ $lszErrorMessages -> add($szString);
3129
+
3130
+ $nErrorMessageCount++;
3131
+ }
3132
+
3133
+ $goGatewayOutput = new GatewayOutput($nStatusCode, $szMessage, $lszErrorMessages);
3134
+
3135
+ // look to see if there are any gateway entry points
3136
+ $nCount = 0;
3137
+ $szXmlFormatString1 = $szTransactionMessageXMLPath . ".GatewayEntryPoints.GatewayEntryPoint[";
3138
+ $szXmlFormatString2 = "]";
3139
+
3140
+ while ($sSOAPClient -> getXmlTag() -> getStringValue($szXmlFormatString1 . $nCount . $szXmlFormatString2 . ".EntryPointURL", $szEntryPointURL))
3141
+ {
3142
+ if (!$sSOAPClient -> getXmlTag() -> getIntegerValue($szXmlFormatString1 . $nCount . $szXmlFormatString2 . ".Metric", $nMetric))
3143
+ {
3144
+ $nMetric = -1;
3145
+ }
3146
+ if ($lgepGatewayEntryPoints == null)
3147
+ {
3148
+ $lgepGatewayEntryPoints = new GatewayEntryPointList();
3149
+ }
3150
+ $lgepGatewayEntryPoints -> add($szEntryPointURL, $nMetric);
3151
+ $nCount++;
3152
+ }
3153
+ }
3154
+ }
3155
+ }
3156
+
3157
+ $nGatewayEntryPointCount++;
3158
+ }
3159
+ }
3160
+ $nOverallGatewayEntryPointCount++;
3161
+ }
3162
+ $nOverallRetryCount++;
3163
+ }
3164
+ $this -> m_szLastRequest = $sSOAPClient -> getSOAPPacket();
3165
+ $this -> m_szLastResponse = $sSOAPClient -> getLastResponse();
3166
+ $this -> m_eLastException = $sSOAPClient -> getLastException();
3167
+
3168
+ return $boTransactionSubmitted;
3169
+ }
3170
+
3171
+ public function __construct(RequestGatewayEntryPointList $lrgepRequestGatewayEntryPoints = null, $nRetryAttempts = 1, NullableInt $nTimeout = null)
3172
+ {
3173
+ $this -> m_maMerchantAuthentication = new MerchantAuthentication();
3174
+ $this -> m_lrgepRequestGatewayEntryPoints = $lrgepRequestGatewayEntryPoints;
3175
+ $this -> m_nRetryAttempts = $nRetryAttempts;
3176
+ $this -> m_nTimeout = $nTimeout;
3177
+ }
3178
+
3179
+ }
3180
+ class SharedFunctionsPaymentSystemShared
3181
+ {
3182
+ /**
3183
+ * @param XmlTag $xtTransactionOutputDataXmlTag
3184
+ * @param GatewayEntryPointList $lgepGatewayEntryPoints
3185
+ * @return TransactionOutputData
3186
+ * @throws Exception
3187
+ */
3188
+ public static function getTransactionOutputData(XmlTag $xtTransactionOutputDataXmlTag, GatewayEntryPointList $lgepGatewayEntryPoints = null)
3189
+ {
3190
+ $szCrossReference = "";
3191
+ $szAddressNumericCheckResult = "";
3192
+ $szPostCodeCheckResult = "";
3193
+ $szThreeDSecureAuthenticationCheckResult = "";
3194
+ $szCV2CheckResult = "";
3195
+ $nAmountReceived = null;
3196
+ $szPaREQ = "";
3197
+ $szACSURL = "";
3198
+ $ctdCardTypeData = null;
3199
+ $tdsodThreeDSecureOutputData = null;
3200
+ $lgvCustomVariables = null;
3201
+ $nCount = 0;
3202
+ $szAuthCode = "";
3203
+ $todTransactionOutputData = null;
3204
+
3205
+ if ($xtTransactionOutputDataXmlTag == null)
3206
+ {
3207
+ return (null);
3208
+ }
3209
+
3210
+ $xtTransactionOutputDataXmlTag -> getStringValue("TransactionOutputData.CrossReference", $szCrossReference);
3211
+ $xtTransactionOutputDataXmlTag -> getStringValue("TransactionOutputData.AuthCode", $szAuthCode);
3212
+ $xtTransactionOutputDataXmlTag -> getStringValue("TransactionOutputData.AddressNumericCheckResult", $szAddressNumericCheckResult);
3213
+ $xtTransactionOutputDataXmlTag -> getStringValue("TransactionOutputData.PostCodeCheckResult", $szPostCodeCheckResult);
3214
+ $xtTransactionOutputDataXmlTag -> getStringValue("TransactionOutputData.ThreeDSecureAuthenticationCheckResult", $szThreeDSecureAuthenticationCheckResult);
3215
+ $xtTransactionOutputDataXmlTag -> getStringValue("TransactionOutputData.CV2CheckResult", $szCV2CheckResult);
3216
+
3217
+ $ctdCardTypeData = SharedFunctionsPaymentSystemShared::getCardTypeData($xtTransactionOutputDataXmlTag, "TransactionOutputData.CardTypeData");
3218
+ if ($xtTransactionOutputDataXmlTag -> getIntegerValue("TransactionOutputData.AmountReceived", $nTempValue))
3219
+ {
3220
+ $nAmountReceived = new NullableInt($nTempValue);
3221
+ }
3222
+ $xtTransactionOutputDataXmlTag -> getStringValue("TransactionOutputData.ThreeDSecureOutputData.PaREQ", $szPaREQ);
3223
+ $xtTransactionOutputDataXmlTag -> getStringValue("TransactionOutputData.ThreeDSecureOutputData.ACSURL", $szACSURL);
3224
+
3225
+ if (!SharedFunctions::isStringNullOrEmpty($szACSURL) && !SharedFunctions::isStringNullOrEmpty($szPaREQ))
3226
+ {
3227
+ $tdsodThreeDSecureOutputData = new ThreeDSecureOutputData($szPaREQ, $szACSURL);
3228
+ }
3229
+
3230
+ $nCount = 0;
3231
+ $szXmlFormatString1 = "TransactionOutputData.CustomVariables.GenericVariable[";
3232
+ $szXmlFormatString2 = "]";
3233
+
3234
+ while ($xtTransactionOutputDataXmlTag -> getStringValue($szXmlFormatString1 . $nCount . $szXmlFormatString2 . ".Name", $szName))
3235
+ {
3236
+ if (!$xtTransactionOutputDataXmlTag -> getValue($szXmlFormatString1 . $nCount . $szXmlFormatString2 . ".Value", $szValue))
3237
+ {
3238
+ $szValue = "";
3239
+ }
3240
+ if ($lgvCustomVariables == null)
3241
+ {
3242
+ $lgvCustomVariables = new GenericVariableList();
3243
+ }
3244
+ $lgvCustomVariables -> add($szName, $szValue);
3245
+ $nCount++;
3246
+ }
3247
+
3248
+ $todTransactionOutputData = new TransactionOutputData($szCrossReference, $szAuthCode, $szAddressNumericCheckResult, $szPostCodeCheckResult, $szThreeDSecureAuthenticationCheckResult, $szCV2CheckResult, $ctdCardTypeData, $nAmountReceived, $tdsodThreeDSecureOutputData, $lgvCustomVariables, $lgepGatewayEntryPoints);
3249
+
3250
+ return ($todTransactionOutputData);
3251
+ }
3252
+ /**
3253
+ * @param XmlTag $xtGetCardTypeXmlTag
3254
+ * @param string $szCardTypeDataXMLPath
3255
+ * @return CardTypeData
3256
+ * @throws Exception
3257
+ */
3258
+ public static function getCardTypeData(XmlTag $xtGetCardTypeXmlTag, $szCardTypeDataXMLPath)
3259
+ {
3260
+ $ctdCardTypeData = null;
3261
+ $boTempValue;
3262
+ $nISOCode = null;
3263
+ $boLuhnCheckRequired = null;
3264
+ $szStartDateStatus = null;
3265
+ $szIssueNumberStatus = null;
3266
+ $szCardType;
3267
+ $szIssuer = null;
3268
+ $nTemp;
3269
+ $iIssuer;
3270
+ $szCardClass;
3271
+
3272
+ if ($xtGetCardTypeXmlTag == null)
3273
+ {
3274
+ return (null);
3275
+ }
3276
+
3277
+ if ($xtGetCardTypeXmlTag -> getStringValue($szCardTypeDataXMLPath . ".CardType", $szCardType))
3278
+ {
3279
+ $xtGetCardTypeXmlTag -> getStringValue($szCardTypeDataXMLPath . ".CardClass", $szCardClass);
3280
+ $xtGetCardTypeXmlTag -> getStringValue($szCardTypeDataXMLPath . ".Issuer", $szIssuer);
3281
+ if ($xtGetCardTypeXmlTag -> getIntegerValue($szCardTypeDataXMLPath . ".Issuer.ISOCode", $nTemp))
3282
+ {
3283
+ $nISOCode = new NullableInt($nTemp);
3284
+ }
3285
+ $iIssuer = new Issuer($szIssuer, $nISOCode);
3286
+ if ($xtGetCardTypeXmlTag -> getBooleanValue($szCardTypeDataXMLPath . ".LuhnCheckRequired", $boTempValue))
3287
+ {
3288
+ $boLuhnCheckRequired = new NullableBool($boTempValue);
3289
+ }
3290
+ $xtGetCardTypeXmlTag -> getStringValue($szCardTypeDataXMLPath . ".IssueNumberStatus", $szIssueNumberStatus);
3291
+ $xtGetCardTypeXmlTag -> getStringValue($szCardTypeDataXMLPath . ".StartDateStatus", $szStartDateStatus);
3292
+ $ctdCardTypeData = new CardTypeData($szCardType, $szCardClass, $iIssuer, $boLuhnCheckRequired, $szIssueNumberStatus, $szStartDateStatus);
3293
+ }
3294
+
3295
+ return ($ctdCardTypeData);
3296
+ }
3297
+ /**
3298
+ * @param XmlTag $xtMessageResultXmlTag
3299
+ * @param string $szGatewayOutputXMLPath
3300
+ * @param GatewayOutput $goGatewayOutput
3301
+ * @return PaymentMessageGatewayOutput
3302
+ * @throws Exception
3303
+ */
3304
+ public static function getPaymentMessageGatewayOutput(XmlTag $xtMessageResultXmlTag, $szGatewayOutputXMLPath, GatewayOutput $goGatewayOutput = null)
3305
+ {
3306
+ $nTempValue = 0;
3307
+ $boAuthorisationAttempted = null;
3308
+ $boTempValue;
3309
+ $nPreviousStatusCode = null;
3310
+ $szPreviousMessage = null;
3311
+ $ptrPreviousTransactionResult = null;
3312
+ $pmgoPaymentMessageGatewayOutput;
3313
+
3314
+ if ($xtMessageResultXmlTag == null)
3315
+ {
3316
+ return (null);
3317
+ }
3318
+
3319
+ if ($xtMessageResultXmlTag -> getBooleanValue($szGatewayOutputXMLPath . ".AuthorisationAttempted", $boTempValue))
3320
+ {
3321
+ $boAuthorisationAttempted = new NullableBool($boTempValue);
3322
+ }
3323
+
3324
+ // check to see if there is any previous transaction data
3325
+ if ($xtMessageResultXmlTag -> getIntegerValue($szGatewayOutputXMLPath . ".PreviousTransactionResult.StatusCode", $nTempValue))
3326
+ {
3327
+ $nPreviousStatusCode = new NullableInt($nTempValue);
3328
+ }
3329
+ $xtMessageResultXmlTag -> getStringValue($szGatewayOutputXMLPath . ".PreviousTransactionResult.Message", $szPreviousMessage);
3330
+ if ($nPreviousStatusCode != null && !SharedFunctions::isStringNullOrEmpty($szPreviousMessage))
3331
+ {
3332
+ $ptrPreviousTransactionResult = new PreviousTransactionResult($nPreviousStatusCode, $szPreviousMessage);
3333
+ }
3334
+
3335
+ $pmgoPaymentMessageGatewayOutput = new PaymentMessageGatewayOutput($goGatewayOutput -> getStatusCode(), $goGatewayOutput -> getMessage(), $boAuthorisationAttempted, $ptrPreviousTransactionResult, $goGatewayOutput -> getErrorMessages());
3336
+
3337
+ return ($pmgoPaymentMessageGatewayOutput);
3338
+ }
3339
+
3340
+ }
app/code/local/PayVector/Tpg/Model/Common/ThePaymentGateway/SOAP.php ADDED
@@ -0,0 +1,1045 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ //accessing external files
3
+ require_once("TPG_Common.php");
4
+
5
+ class SOAPNamespace
6
+ {
7
+ /**
8
+ * @var string
9
+ */
10
+ private $m_szNamespace;
11
+ /**
12
+ * @var string
13
+ */
14
+ private $m_szPrefix;
15
+
16
+ /**
17
+ * @return string
18
+ */
19
+ public function getNamespace()
20
+ {
21
+ return $this->m_szNamespace;
22
+ }
23
+ /**
24
+ * @return string
25
+ */
26
+ public function getPrefix()
27
+ {
28
+ return $this->m_szPrefix;
29
+ }
30
+
31
+ /**
32
+ * @param string $szPrefix
33
+ * @param string $szNamespace
34
+ */
35
+ public function __construct($szPrefix, $szNamespace)
36
+ {
37
+ $this->m_szNamespace = $szNamespace;
38
+ $this->m_szPrefix = $szPrefix;
39
+ }
40
+ }
41
+
42
+ class SOAPNamespaceList
43
+ {
44
+ /**
45
+ * @var SOAPNamespace[]
46
+ */
47
+ private $m_lsnSOAPNamespaceList;
48
+
49
+ /**
50
+ * @param int $nIndex
51
+ * @return SOAPNamespace
52
+ * @throws Exception
53
+ */
54
+ function getAt($nIndex)
55
+ {
56
+ if ($nIndex < 0 ||
57
+ $nIndex >= count($this->m_lsnSOAPNamespaceList))
58
+ {
59
+ throw new Exception("Array index out of bounds");
60
+ }
61
+
62
+ return $this->m_lsnSOAPNamespaceList[$nIndex];
63
+ }
64
+ /**
65
+ * @return int
66
+ */
67
+ function getCount()
68
+ {
69
+ return count($this->m_lsnSOAPNamespaceList);
70
+ }
71
+ /**
72
+ * @param SOAPNamespace $snSOAPNamespace
73
+ */
74
+ public function add(SOAPNamespace $snSOAPNamespace)
75
+ {
76
+ $this->m_lsnSOAPNamespaceList[] = $snSOAPNamespace;
77
+ }
78
+
79
+ //constructor
80
+ public function __construct()
81
+ {
82
+ $this->m_lsnSOAPNamespaceList = array();
83
+ }
84
+ }
85
+
86
+ class SOAPParameter
87
+ {
88
+ /**
89
+ * @var string
90
+ */
91
+ private $m_szName;
92
+ /**
93
+ * @var string
94
+ */
95
+ private $m_szValue;
96
+ //private $m_lspaSOAPParamAttributeList = array();
97
+ /**
98
+ * @var SOAPParamAttributeList
99
+ */
100
+ private $m_lspaSOAPParamAttributeList;
101
+ /**
102
+ * @var SOAPParamList
103
+ */
104
+ private $m_lspSOAPParamList;
105
+
106
+ /**
107
+ * @return string
108
+ */
109
+ public function getName()
110
+ {
111
+ return $this->m_szName;
112
+ }
113
+ /**
114
+ * @return string
115
+ */
116
+ public function getValue()
117
+ {
118
+ return $this->m_szValue;
119
+ }
120
+ /**
121
+ * @param string $szValue
122
+ */
123
+ public function setValue($szValue)
124
+ {
125
+ $this->m_szValue = $szValue;
126
+ }
127
+ /**
128
+ * @return SOAPParamAttributeList
129
+ */
130
+ public function getSOAPParamAttributeList()
131
+ {
132
+ return $this->m_lspaSOAPParamAttributeList;
133
+ }
134
+ /**
135
+ * @return SOAPParamList
136
+ */
137
+ public function getSOAPParamList()
138
+ {
139
+ return $this->m_lspSOAPParamList;
140
+ }
141
+
142
+ //constructor
143
+ /**
144
+ * @param string $szName
145
+ * @param string $szValue
146
+ * @param SOAPParamAttributeList $lspaSOAPParamAttributeList
147
+ * @throws Exception
148
+ */
149
+ public function __construct($szName, $szValue, SOAPParamAttributeList $lspaSOAPParamAttributeList = null)
150
+ {
151
+ $nCount = 0;
152
+ $spaSOAPParamAttribute = null;
153
+
154
+ if (!is_string($szName) ||
155
+ !is_string($szValue))
156
+ {
157
+ throw new Exception("Invalid parameter type");
158
+ }
159
+
160
+ $this->m_szName = $szName;
161
+ //$this->m_szValue = SharedFunctions::replaceCharsInStringWithEntities($szValue);
162
+ $this->setValue($szValue);
163
+
164
+ $this->m_lspSOAPParamList = new SOAPParamList();
165
+ $this->m_lspaSOAPParamAttributeList = new SOAPParamAttributeList();
166
+
167
+ if ($lspaSOAPParamAttributeList != null)
168
+ {
169
+ for ($nCount = 0; $nCount < $lspaSOAPParamAttributeList->getCount();$nCount++)
170
+ {
171
+ $spaSOAPParamAttribute = new SOAPParamAttribute($lspaSOAPParamAttributeList->getAt($nCount)->getName(), $lspaSOAPParamAttributeList->getAt($nCount)->getValue());
172
+
173
+ $this->m_lspaSOAPParamAttributeList->add($spaSOAPParamAttribute);
174
+ }
175
+ }
176
+ }
177
+
178
+ /**
179
+ * @return string
180
+ * @throws Exception
181
+ */
182
+ function toXMLString()
183
+ {
184
+ $sbReturnString = null;
185
+ $nCount = null;
186
+ $spParam = null;
187
+ $spaAttribute = null;
188
+ $sbString = null;
189
+
190
+ $sbReturnString = "";
191
+ $sbReturnString .= "<" . $this->getName();
192
+
193
+ if ($this->m_lspaSOAPParamAttributeList != null)
194
+ {
195
+ for ($nCount = 0; $nCount < $this->m_lspaSOAPParamAttributeList->getCount(); $nCount++)
196
+ {
197
+ $spaAttribute = $this->m_lspaSOAPParamAttributeList->getAt($nCount);
198
+
199
+ if ($spaAttribute != null)
200
+ {
201
+ $sbString = "";
202
+ $sbString .= " " .$spaAttribute->getName(). "=\"" .SharedFunctions::replaceCharsInStringWithEntities($spaAttribute->getValue()). "\"";
203
+ $sbReturnString .= (string)$sbString;
204
+ }
205
+ }
206
+ }
207
+
208
+ if ($this->m_lspSOAPParamList->getCount() == 0 &&
209
+ $this->getValue() == "")
210
+ {
211
+ $sbReturnString .= " />";
212
+ }
213
+ else
214
+ {
215
+ $sbReturnString .= ">";
216
+
217
+ if ($this->getValue() != "")
218
+ {
219
+ $sbReturnString .= SharedFunctions::replaceCharsInStringWithEntities($this->getValue());
220
+ }
221
+
222
+ for ($nCount = 0; $nCount < $this->m_lspSOAPParamList->getCount(); $nCount++)
223
+ {
224
+ $spParam = $this->m_lspSOAPParamList->getAt($nCount);
225
+
226
+ if ($spParam != null)
227
+ {
228
+ $sbReturnString .= $spParam->toXMLString();
229
+ }
230
+ }
231
+
232
+ $sbReturnString .= "</" . $this->getName() . ">";
233
+ }
234
+
235
+ return (string)$sbReturnString;
236
+ }
237
+ }
238
+
239
+ class SOAPParamList
240
+ {
241
+ /**
242
+ * @var SOAPParameter[]
243
+ */
244
+ private $m_lspSOAPParamList;
245
+
246
+ /**
247
+ * @return int
248
+ */
249
+ function getCount()
250
+ {
251
+ return count($this->m_lspSOAPParamList);
252
+ }
253
+ /**
254
+ * @param int $nIndex
255
+ * @return SOAPParamter
256
+ * @throws Exception
257
+ */
258
+ public function getAt($nIndex)
259
+ {
260
+ if ($nIndex < 0 ||
261
+ $nIndex > count($this->m_lspSOAPParamList))
262
+ {
263
+ throw new Exception("Array index out of bounds");
264
+ }
265
+
266
+ return $this->m_lspSOAPParamList[$nIndex];
267
+ }
268
+ /**
269
+ * @param string $szTagNameToFind
270
+ * @param int $nIndex
271
+ * @return null|SOAPParamter
272
+ * @throws Exception
273
+ */
274
+ public function isSOAPParamInList($szTagNameToFind, $nIndex)
275
+ {
276
+ $spReturnParam = null;
277
+ $boFound = false;
278
+ $nFound = 0;
279
+ $nCount = 0;
280
+ $spCurrentParam = null;
281
+
282
+ while(!$boFound &&
283
+ $nCount < $this->getCount())
284
+ {
285
+ $spCurrentParam = $this->getAt($nCount);
286
+
287
+ if ($spCurrentParam->getName() == $szTagNameToFind)
288
+ {
289
+ if ($nFound == $nIndex)
290
+ {
291
+ $boFound = true;
292
+ $spReturnParam = $spCurrentParam;
293
+ }
294
+ else
295
+ {
296
+ $nFound++;
297
+ }
298
+ }
299
+
300
+ $nCount++;
301
+ }
302
+
303
+ return $spReturnParam;
304
+ }
305
+ /**
306
+ * @param SOAPParameter $spSOAPParam
307
+ */
308
+ public function add(SOAPParameter $spSOAPParam)
309
+ {
310
+ $this->m_lspSOAPParamList[] = $spSOAPParam;
311
+ }
312
+
313
+ //constructor
314
+ public function __construct()
315
+ {
316
+ $this->m_lspSOAPParamList = array();
317
+ }
318
+ }
319
+
320
+ class SOAPParamAttribute
321
+ {
322
+ /**
323
+ * @var string
324
+ */
325
+ private $m_szName;
326
+ /**
327
+ * @var string
328
+ */
329
+ private $m_szValue;
330
+
331
+ /**
332
+ * @return string
333
+ */
334
+ public function getName()
335
+ {
336
+ return $this->m_szName;
337
+ }
338
+ /**
339
+ * @return string
340
+ */
341
+ public function getValue()
342
+ {
343
+ return $this->m_szValue;
344
+ }
345
+
346
+ //constructor
347
+ /**
348
+ * @param string $szName
349
+ * @param string $szValue
350
+ * @throws Exception
351
+ */
352
+ public function __construct($szName, $szValue)
353
+ {
354
+ if (!is_string($szName) ||
355
+ !is_string($szValue))
356
+ {
357
+ throw new Exception("Invalid parameter type");
358
+ }
359
+
360
+ $this->m_szName = $szName;
361
+ $this->m_szValue = $szValue;
362
+ }
363
+ }
364
+
365
+ class SOAPParamAttributeList
366
+ {
367
+ /**
368
+ * @var SOAPParamAttribute[]
369
+ */
370
+ private $m_lspaSOAPParamAttributeAttributeList;
371
+
372
+ /**
373
+ * @param int $nIndex
374
+ * @return SOAPParamAttribute
375
+ * @throws Exception
376
+ */
377
+ public function getAt($nIndex)
378
+ {
379
+ if ($nIndex < 0 ||
380
+ $nIndex >= count($this->m_lspaSOAPParamAttributeAttributeList))
381
+ {
382
+ throw new Exception("Array index out of bounds");
383
+ }
384
+
385
+ return $this->m_lspaSOAPParamAttributeAttributeList[$nIndex];
386
+ }
387
+ /**
388
+ * @return int
389
+ */
390
+ public function getCount()
391
+ {
392
+ return count($this->m_lspaSOAPParamAttributeAttributeList);
393
+ }
394
+ /**
395
+ * @param SOAPParamAttribute $spaSOAPParamAttributeAttribute
396
+ */
397
+ public function add(SOAPParamAttribute $spaSOAPParamAttributeAttribute)
398
+ {
399
+ $this->m_lspaSOAPParamAttributeAttributeList[] = $spaSOAPParamAttributeAttribute;
400
+ }
401
+
402
+ //constructor
403
+ public function __construct()
404
+ {
405
+ $this->m_lspaSOAPParamAttributeAttributeList = array();
406
+ }
407
+ }
408
+
409
+ class SOAP
410
+ {
411
+ /**
412
+ * @var string
413
+ */
414
+ private $m_szMethod;
415
+ /**
416
+ * @var string
417
+ */
418
+ private $m_szMethodURI;
419
+ /**
420
+ * @var string
421
+ */
422
+ private $m_szURL;
423
+ /**
424
+ * @var string
425
+ */
426
+ private $m_szActionURI;
427
+ /**
428
+ * @var string
429
+ */
430
+ private $m_szSOAPEncoding;
431
+ /**
432
+ * @var bool
433
+ */
434
+ private $m_boPacketBuilt;
435
+ /**
436
+ * @var string
437
+ */
438
+ private $m_szLastResponse;
439
+ /**
440
+ * @var string
441
+ */
442
+ private $m_szSOAPPacket;
443
+ /**
444
+ * @var XmlParser
445
+ */
446
+ private $m_xmlParser;
447
+ /**
448
+ * @var XMLTag
449
+ */
450
+ private $m_xmlTag;
451
+ /**
452
+ * @var int
453
+ */
454
+ private $m_nTimeout;
455
+ /**
456
+ * @var Exception
457
+ */
458
+ private $m_eLastException;
459
+ /**
460
+ * @var SOAPNamespaceList
461
+ */
462
+ private $m_lsnSOAPNamespaceList;
463
+ /**
464
+ * @var SOAPParamList
465
+ */
466
+ private $m_lspSOAPParamList;
467
+
468
+ /**
469
+ * @return string
470
+ */
471
+ public function getMethod()
472
+ {
473
+ return $this->m_szMethod;
474
+ }
475
+ /**
476
+ * @return string
477
+ */
478
+ public function getMethodURI()
479
+ {
480
+ return $this->m_szMethodURI;
481
+ }
482
+ /**
483
+ * @return string
484
+ */
485
+ public function getURL()
486
+ {
487
+ return $this->m_szURL;
488
+ }
489
+ /**
490
+ * @param $value
491
+ */
492
+ public function setURL($value)
493
+ {
494
+ $this->m_szURL = $value;
495
+ }
496
+ /**
497
+ * @return string
498
+ */
499
+ public function getActionURI()
500
+ {
501
+ return $this->m_szActionURI;
502
+ }
503
+ /**
504
+ * @return string
505
+ */
506
+ public function getSOAPEncoding()
507
+ {
508
+ return $this->m_szSOAPEncoding;
509
+ }
510
+ /**
511
+ * @return bool
512
+ */
513
+ public function getPacketBuilt()
514
+ {
515
+ return $this->m_boPacketBuilt;
516
+ }
517
+ /**
518
+ * @return string
519
+ */
520
+ public function getLastResponse()
521
+ {
522
+ return $this->m_szLastResponse;
523
+ }
524
+ /**
525
+ * @return string
526
+ */
527
+ public function getSOAPPacket()
528
+ {
529
+ return $this->m_szSOAPPacket;
530
+ }
531
+ /**
532
+ * @return XmlParser
533
+ */
534
+ public function getXmlParser()
535
+ {
536
+ return $this->m_xmlParser;
537
+ }
538
+ /**
539
+ * @return XMLTag
540
+ */
541
+ public function getXmlTag()
542
+ {
543
+ return $this->m_xmlTag;
544
+ }
545
+ /**
546
+ * @return int
547
+ */
548
+ public function getTimeout()
549
+ {
550
+ return $this->m_nTimeout;
551
+ }
552
+ /**
553
+ * @param int $value
554
+ */
555
+ public function setTimeout($value)
556
+ {
557
+ $this->m_nTimeout = $value;
558
+ }
559
+ /**
560
+ * @return Exception
561
+ */
562
+ public function getLastException()
563
+ {
564
+ $this->m_eLastException;
565
+ }
566
+ /**
567
+ * @throws Exception
568
+ */
569
+ public function buildPacket()
570
+ {
571
+ $sbString = null;
572
+ $sbString2 = null;
573
+ $snNamespace = null;
574
+ $szFirstNamespace = null;
575
+ $szFirstPrefix = null;
576
+ $nCount = 0;
577
+ $spSOAPParam = null;
578
+
579
+ // build the xml SOAP request
580
+ // start with the XML version
581
+ $sbString = "";
582
+ $sbString .= "<?xml version=\"1.0\" encoding=\"utf-8\" ?>";
583
+
584
+ if ($this->m_lsnSOAPNamespaceList->getCount() == 0)
585
+ {
586
+ $szFirstNamespace = "http://schemas.xmlsoap.org/soap/envelope/";
587
+ $szFirstPrefix = "soap";
588
+ }
589
+ else
590
+ {
591
+ $snNamespace = $this->m_lsnSOAPNamespaceList->getAt(0);
592
+
593
+ if ($snNamespace == null)
594
+ {
595
+ $szFirstNamespace = "http://schemas.xmlsoap.org/soap/envelope/";
596
+ $szFirstPrefix = "soap";
597
+ }
598
+ else
599
+ {
600
+ if ($snNamespace->getNamespace() == null ||
601
+ $snNamespace->getNamespace() == "")
602
+ {
603
+ $szFirstNamespace = "http://schemas.xmlsoap.org/soap/envelope/";
604
+ }
605
+ else
606
+ {
607
+ $szFirstNamespace = $snNamespace->getNamespace();
608
+ }
609
+
610
+ if ($snNamespace->getPrefix() == null ||
611
+ $snNamespace->getPrefix() == "")
612
+ {
613
+ $szFirstPrefix = "soap";
614
+ }
615
+ else
616
+ {
617
+ $szFirstPrefix = $snNamespace->getPrefix();
618
+ }
619
+ }
620
+ }
621
+
622
+ $sbString2 = "";
623
+ $sbString2 .= "<" .$szFirstPrefix. ":Envelope xmlns:" .$szFirstPrefix. "=\"" .$szFirstNamespace. "\"";
624
+
625
+ for ($nCount = 1; $nCount <$this->m_lsnSOAPNamespaceList->getCount(); $nCount++)
626
+ {
627
+ $snNamespace = $this->m_lsnSOAPNamespaceList->getAt($nCount);
628
+
629
+ if ($snNamespace != null)
630
+ {
631
+ if ($snNamespace->getNamespace() != "" &&
632
+ $snNamespace->getPrefix() != "")
633
+ {
634
+ $sbString2 .= " xmlns:" .$snNamespace->getPrefix(). "=\"" .$snNamespace->getNamespace(). "\"";
635
+ }
636
+ }
637
+ }
638
+
639
+ $sbString2 .= ">";
640
+
641
+ $sbString .= (string)$sbString2;
642
+ $sbString2 = "";
643
+ $sbString2 .= "<" .$szFirstPrefix. ":Body>";
644
+ $sbString .= (string)$sbString2;
645
+ $sbString2 = "";
646
+ $sbString2 .= "<" .$this->getMethod(). " xmlns=\"" .$this->getMethodURI(). "\">";
647
+ $sbString .= (string)$sbString2;
648
+
649
+ for ($nCount = 0;$nCount < $this->m_lspSOAPParamList->getCount(); $nCount++)
650
+ {
651
+ $spSOAPParam = $this->m_lspSOAPParamList->getAt($nCount);
652
+
653
+ if ($spSOAPParam != null)
654
+ {
655
+ $sbString .= $spSOAPParam->toXMLString();
656
+ }
657
+ }
658
+
659
+ $sbString2 = "";
660
+ $sbString2 .= "</" .$this->getMethod(). ">";
661
+ $sbString .= (string)$sbString2;
662
+ $sbString2 = "";
663
+ $sbString2 .= "</" .$szFirstPrefix. ":Body></" .$szFirstPrefix. ":Envelope>";
664
+ $sbString .= (string)$sbString2;
665
+
666
+ $this->m_szSOAPPacket = (string)$sbString;
667
+ $this->m_boPacketBuilt = true;
668
+ }
669
+ /**
670
+ * @return bool
671
+ */
672
+ public function sendRequest()
673
+ {
674
+ $szString = "";
675
+ $boReturnValue = false;
676
+ $szUserAgent = "ThePaymentGateway SOAP Library PHP";
677
+
678
+ if (!$this->m_boPacketBuilt)
679
+ {
680
+ $this->buildPacket();
681
+ }
682
+
683
+ $this->m_xmlParser = null;
684
+ $this->m_xmlTag = null;
685
+
686
+ try
687
+ {
688
+ //intialising the curl for XML parsing
689
+ $cURL = curl_init();
690
+
691
+ //http settings
692
+ $HttpHeader[] = "SOAPAction:". $this->getActionURI();
693
+ $HttpHeader[] = "Content-Type: text/xml; charset = utf-8";
694
+ $HttpHeader[] = "Connection: close";
695
+
696
+ /*$http_options = array(CURLOPT_HEADER => false,
697
+ CURLOPT_HTTPHEADER => $HttpHeader,
698
+ CURLOPT_POST => true,
699
+ CURLOPT_URL => $this->getURL(),
700
+ CURLOPT_USERAGENT => $szUserAgent,
701
+ CURLOPT_POSTFIELDS => $this->getSOAPPacket(),
702
+ CURLOPT_RETURNTRANSFER => true,
703
+ CURLOPT_ENCODING => "UTF-8",
704
+ CURLOPT_SSL_VERIFYPEER => false, //disabling default peer SSL certificate verification
705
+ );
706
+
707
+ curl_setopt_array($cURL, $http_options);*/
708
+
709
+ curl_setopt($cURL, CURLOPT_HEADER, false);
710
+ curl_setopt($cURL, CURLOPT_HTTPHEADER, $HttpHeader);
711
+ curl_setopt($cURL, CURLOPT_POST, true);
712
+ curl_setopt($cURL, CURLOPT_URL, $this->getURL());
713
+ curl_setopt($cURL, CURLOPT_USERAGENT, $szUserAgent);
714
+ curl_setopt($cURL, CURLOPT_POSTFIELDS, $this->getSOAPPacket());
715
+ curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
716
+ curl_setopt($cURL, CURLOPT_ENCODING, "UTF-8");
717
+ curl_setopt($cURL, CURLOPT_SSL_VERIFYPEER, true);
718
+
719
+ //check if a certificate list is specified in the php.ini file, otherwise use the bundled one
720
+ $caInfoSetting = ini_get("curl.cainfo");
721
+ if(empty($caInfoSetting))
722
+ {
723
+ curl_setopt($cURL, CURLOPT_CAINFO, __DIR__ . "/cacert.pem");
724
+ }
725
+
726
+ if ($this->getTimeout() != null)
727
+ {
728
+ curl_setopt($cURL, CURLOPT_TIMEOUT, $this->getTimeout());
729
+ }
730
+
731
+ //$this->m_szLastResponse = curl_exec($cURL);
732
+ $szString = curl_exec($cURL);
733
+ $errorNo = curl_errno($cURL);//test
734
+ $errorMsg = curl_error($cURL);//test
735
+ $header = curl_getinfo($cURL);//test
736
+ curl_close($cURL);
737
+
738
+ //HACK - certain versions of PHP seem to cause extra characters to be added to the HTTP Header so that curl doesn't strip the header
739
+ //the regex makes sure that only XML is passed through to the parser
740
+ $pattern = '(<\?xml.*</soap:Envelope>)';
741
+ preg_match($pattern, $szString, $matches, PREG_OFFSET_CAPTURE);
742
+
743
+ $szString = $matches[0][0];
744
+
745
+ $this->m_szLastResponse = $szString;
746
+
747
+
748
+ $szString = str_replace("<soap:Body>", " ", $szString);
749
+ $szString = str_replace("</soap:Body>", " ", $szString);
750
+
751
+ $this->m_xmlParser = new XmlParser();
752
+
753
+ if (!$this->m_xmlParser->parseBuffer($szString))
754
+ {
755
+ throw new Exception("Could not parse response string");
756
+ }
757
+ else
758
+ {
759
+ $szResponsePathString = $this->m_szMethod."Response";
760
+
761
+ $this->m_xmlTag = $this->m_xmlParser->getTag($szResponsePathString);
762
+
763
+ if ($this->m_xmlTag == null)
764
+ {
765
+ throw new Exception("Couldn't find SOAP response tag: ".$szResponsePathString);
766
+ }
767
+ $boReturnValue = true;
768
+ }
769
+
770
+ $boReturnValue = true;
771
+ }
772
+ catch (Exception $exc)
773
+ {
774
+ $boReturnValue = false;
775
+ $m_eLastException = $exc;
776
+ //log error to the system log file
777
+ error_log(
778
+ "PHP Exception '" .$exc->getMessage() .
779
+ "' at line " . $exc->getLine() .
780
+ " in '" . $exc->getFile() .
781
+ "'. Stack trace: " . $exc->getTraceAsString()
782
+ );
783
+ }
784
+
785
+ return $boReturnValue;
786
+ }
787
+ /**
788
+ * @param string $szName
789
+ * @param string $szValue
790
+ * @param SOAPParamAttributeList $lspaSOAPParamAttributeList
791
+ */
792
+ public function addParam($szName, $szValue, SOAPParamAttributeList $lspaSOAPParamAttributeList = null)
793
+ {
794
+ $spSOAPParam;
795
+
796
+ $spSOAPParam = new SOAPParameter($szName, $szValue, $lspaSOAPParamAttributeList);
797
+
798
+ $this->addParam2($spSOAPParam, true);
799
+ }
800
+ /**
801
+ * @param SOAPParameter $spSOAPParam
802
+ * @param bool $boOverWriteValue
803
+ * @throws Exception
804
+ */
805
+ private function addParam2(SOAPParameter $spSOAPParam, $boOverWriteValue)
806
+ {
807
+ $lszHierarchicalNames;
808
+ $nCurrentIndex = 0;
809
+ $szTagNameToFind;
810
+ $szString;
811
+ $nCount = 0;
812
+ $nCount2 = 0;
813
+ $lspParamList;
814
+ $spWorkingSOAPParam;
815
+ $spNewSOAPParam;
816
+ $boFound = false;
817
+ $lspaAttributeList;
818
+ $spaAttribute;
819
+ $spaNewAttribute;
820
+ $spaSOAPParamAttributeList;
821
+
822
+ // need to check the name of the incoming item to see if it is a
823
+ // complex soap parameter
824
+ $lszHierarchicalNames = new StringList();
825
+
826
+ $lszHierarchicalNames = SharedFunctions::getStringListFromCharSeparatedString($spSOAPParam->getName(), ".");
827
+
828
+ if ($lszHierarchicalNames->getCount() == 1)
829
+ {
830
+ $this->m_lspSOAPParamList->add($spSOAPParam);
831
+ }
832
+ else
833
+ {
834
+ $lspParamList = $this->m_lspSOAPParamList;
835
+
836
+ //complex
837
+ for ($nCount = 0; $nCount < $lszHierarchicalNames->getCount(); $nCount++)
838
+ {
839
+ // get the current tag name
840
+ $szString = (string)$lszHierarchicalNames->getAt($nCount);
841
+ //continuework
842
+ $szTagNameToFind = SharedFunctions::getArrayNameAndIndex($szString, $nCurrentIndex);
843
+
844
+ // first thing is to try to find the tag in the list
845
+ if ($boFound ||
846
+ $nCount == 0)
847
+ {
848
+ // try to find this tag name in the list
849
+ $spWorkingSOAPParam = $lspParamList->isSOAPParamInList($szTagNameToFind, $nCurrentIndex);
850
+
851
+ if ($spWorkingSOAPParam == null)
852
+ {
853
+ $boFound = false;
854
+ }
855
+ else
856
+ {
857
+ $boFound = true;
858
+
859
+ // is this the last item in the hierarchy?
860
+ if ($nCount == ($lszHierarchicalNames->getCount() - 1))
861
+ {
862
+ if ($boOverWriteValue)
863
+ {
864
+ // change the value
865
+ $spWorkingSOAPParam->setValue($spSOAPParam->getValue());
866
+ }
867
+
868
+ // add the attributes to the list
869
+ for ($nCount2 = 0; $nCount2 < $spSOAPParam->getSOAPParamAttributeList()->getCount(); $nCount2++)
870
+ {
871
+ //$spaAttribute = $spaSOAPParamAttributeList[$nCount2];
872
+ $spaAttribute = $spSOAPParam->getSOAPParamAttributeList()->getAt($nCount2);
873
+
874
+ if ($spaAttribute != null)
875
+ {
876
+ $spaNewAttribute = new SOAPParamAttribute($spaAttribute->getName(), $spaAttribute->getValue());
877
+
878
+ $spWorkingSOAPParam->getSOAPParamAttributeList()->add($spaNewAttribute);
879
+ }
880
+ }
881
+ }
882
+ $lspParamList = $spWorkingSOAPParam->getSOAPParamList();
883
+ }
884
+ }
885
+
886
+ if (!$boFound)
887
+ {
888
+ // is this the last tag?
889
+ if ($nCount == ($lszHierarchicalNames->getCount() - 1))
890
+ {
891
+ $lspaAttributeList = new SOAPParamAttributeList();
892
+
893
+ for ($nCount2 = 0; $nCount2 < $spSOAPParam->getSOAPParamAttributeList()->getCount(); $nCount2++)
894
+ {
895
+ $spaSOAPParamAttributeList = $spSOAPParam->getSOAPParamAttributeList();
896
+
897
+ $spaAttribute = $spaSOAPParamAttributeList->getAt( $nCount2);
898
+
899
+ if ($spaAttribute != null)
900
+ {
901
+ $spaNewAttribute = new SOAPParamAttribute($spaAttribute->getName(), $spaAttribute->getValue());
902
+ $lspaAttributeList->add($spaNewAttribute);
903
+ }
904
+ }
905
+
906
+ $spNewSOAPParam = new SOAPParameter($szTagNameToFind, $spSOAPParam->getValue(), $lspaAttributeList);
907
+
908
+ $lspParamList->add($spNewSOAPParam);
909
+ }
910
+ else
911
+ {
912
+ $spNewSOAPParam = new SOAPParameter($szTagNameToFind, "", null);
913
+ $lspParamList->add($spNewSOAPParam);
914
+ $lspParamList = $spNewSOAPParam->getSOAPParamList();
915
+ }
916
+ }
917
+ }
918
+ }
919
+
920
+ $this->m_boPacketBuilt = false;
921
+ }
922
+ /**
923
+ * @param string $szName
924
+ * @param string $szParamAttributeName
925
+ * @param string $szParamAttributeValue
926
+ * @throws Exception
927
+ */
928
+ public function addParamAttribute($szName, $szParamAttributeName, $szParamAttributeValue)
929
+ {
930
+ $spSOAPParam;
931
+ $lspaSOAPParamAttributeList;
932
+ $spaSOAPParamAttribute;
933
+
934
+ if (!is_string($szName) ||
935
+ !is_string($szParamAttributeName) ||
936
+ !is_string($szParamAttributeValue))
937
+ {
938
+ throw new Exception("Invalid parameter type");
939
+ }
940
+
941
+ $lspaSOAPParamAttributeList = new SOAPParamAttributeList();
942
+ $spaSOAPParamAttribute = new SOAPParamAttribute($szParamAttributeName, $szParamAttributeValue);
943
+ $lspaSOAPParamAttributeList->add($spaSOAPParamAttribute);
944
+
945
+ $spSOAPParam = new SOAPParameter($szName, "", $lspaSOAPParamAttributeList);
946
+
947
+ $this->addParam2($spSOAPParam, false);
948
+ }
949
+
950
+ //overloading constructors
951
+ /**
952
+ * @param string $szMethod
953
+ * @param string $szMethodURI
954
+ */
955
+ private function SOAP1($szMethod, $szMethodURI)
956
+ {
957
+ $this->SOAP3($szMethod, $szMethodURI, null, "http://schemas.xmlsoap.org/soap/encoding/", true, null);
958
+ }
959
+ /**
960
+ * @param string $szMethod
961
+ * @param string $szMethodURI
962
+ * @param string $szURL
963
+ */
964
+ private function SOAP2($szMethod, $szMethodURI, $szURL)
965
+ {
966
+ $this->SOAP3($szMethod, $szMethodURI, $szURL, "http://schemas.xmlsoap.org/soap/encoding/", true, null);
967
+ }
968
+ /**
969
+ * @param string $szMethod
970
+ * @param string $szMethodURI
971
+ * @param string $szURL
972
+ * @param string $szSOAPEncoding
973
+ * @param bool $boAddDefaultNamespaces
974
+ * @param SOAPNamespaceList $lsnSOAPNamespaceList
975
+ * @throws Exception
976
+ */
977
+ private function SOAP3($szMethod, $szMethodURI, $szURL, $szSOAPEncoding, $boAddDefaultNamespaces, SOAPNamespaceList $lsnSOAPNamespaceList = null)
978
+ {
979
+ $snSOAPNamespace;
980
+ $nCount = 0;
981
+
982
+ $this->m_szMethod = $szMethod;
983
+ $this->m_szMethodURI = $szMethodURI;
984
+ $this->m_szURL = $szURL;
985
+ $this->m_szSOAPEncoding = $szSOAPEncoding;
986
+
987
+ if ($this->m_szMethodURI != "" &&
988
+ $this->m_szMethod != "")
989
+ {
990
+ if ($this->m_szMethodURI[(strlen($this->m_szMethodURI) - 1)] == "/")
991
+ {
992
+ $this->m_szActionURI = $this->m_szMethodURI . $this->m_szMethod;
993
+ }
994
+ else
995
+ {
996
+ $this->m_szActionURI = $this->m_szMethodURI . "/" . $this->m_szMethod;
997
+ }
998
+ }
999
+
1000
+ $this->m_lsnSOAPNamespaceList = new SOAPNamespaceList();
1001
+
1002
+ if ($boAddDefaultNamespaces)
1003
+ {
1004
+ $snSOAPNamespace = new SOAPNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/");
1005
+ $this->m_lsnSOAPNamespaceList->add($snSOAPNamespace);
1006
+ $snSOAPNamespace = new SOAPNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
1007
+ $this->m_lsnSOAPNamespaceList->add($snSOAPNamespace);
1008
+ $snSOAPNamespace = new SOAPNamespace("xsd", "http://www.w3.org/2001/XMLSchema");
1009
+ $this->m_lsnSOAPNamespaceList->add($snSOAPNamespace);
1010
+ }
1011
+ if ($lsnSOAPNamespaceList != null)
1012
+ {
1013
+ for ($nCount = 0; $nCount < count($lsnSOAPNamespaceList); $nCount++)
1014
+ {
1015
+ $snSOAPNamespace = new SOAPNamespace($lsnSOAPNamespaceList->getAt($nCount)->getPrefix(), $lsnSOAPNamespaceList->getAt($nCount)->getNamespace());
1016
+ $this->m_lsnSOAPNamespaceList->add($snSOAPNamespace);
1017
+ }
1018
+ }
1019
+ $this->m_lspSOAPParamList = new SOAPParamList();
1020
+
1021
+ $this->m_boPacketBuilt = false;
1022
+ }
1023
+
1024
+ //constructor
1025
+ public function __construct()
1026
+ {
1027
+ $num_args = func_num_args();
1028
+ $args = func_get_args();
1029
+
1030
+ switch ($num_args)
1031
+ {
1032
+ case 2:
1033
+ $this->SOAP1($args[0], $args[1]);
1034
+ break;
1035
+ case 3:
1036
+ $this->SOAP2($args[0], $args[1], $args[2]);
1037
+ break;
1038
+ case 6:
1039
+ $this->SOAP3($args[0], $args[1], $args[2], $args[3], $args[4], $args[5]);
1040
+ break;
1041
+ default:
1042
+ throw new Exception("Invalid number of parameters for constructor SOAP");
1043
+ }
1044
+ }
1045
+ }
app/code/local/PayVector/Tpg/Model/Common/ThePaymentGateway/TPG_Common.php ADDED
@@ -0,0 +1,1884 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * XMLEntities
5
+ * @var XMLEntity[] $g_XMLEntities
6
+ */
7
+ $g_XMLEntities = array();
8
+ $g_XMLEntities[] = new XMLEntity(0x26, "&amp;");
9
+ $g_XMLEntities[] = new XMLEntity(0x22, "&quot;");
10
+ $g_XMLEntities[] = new XMLEntity(0x27, "&apos;");
11
+ $g_XMLEntities[] = new XMLEntity(0x3c, "&lt;");
12
+ $g_XMLEntities[] = new XMLEntity(0x3e, "&gt;");
13
+
14
+ abstract class Nullable
15
+ {
16
+ /**
17
+ * @var bool
18
+ */
19
+ protected $m_boHasValue;
20
+
21
+ /**
22
+ * @return bool
23
+ */
24
+ function getHasValue()
25
+ {
26
+ return $this -> m_boHasValue;
27
+ }
28
+
29
+ public function __construct()
30
+ {
31
+ $this -> m_boHasValue = false;
32
+ }
33
+
34
+ }
35
+ class NullableInt extends Nullable
36
+ {
37
+ /**
38
+ * @var int
39
+ */
40
+ private $m_nValue;
41
+
42
+ /**
43
+ * @return int
44
+ * @throws Exception
45
+ */
46
+ function getValue()
47
+ {
48
+ if ($this -> m_boHasValue == false)
49
+ {
50
+ throw new Exception("Object has no value");
51
+ }
52
+
53
+ return $this -> m_nValue;
54
+ }
55
+ /**
56
+ * @param int $nValue
57
+ */
58
+ function setValue($nValue)
59
+ {
60
+ if (!is_numeric($nValue))
61
+ {
62
+ $this -> m_boHasValue = false;
63
+ $this -> m_nValue = null;
64
+ }
65
+ else
66
+ {
67
+ $this -> m_boHasValue = true;
68
+ $this -> m_nValue = $nValue;
69
+ }
70
+ }
71
+
72
+ //constructor
73
+ /**
74
+ * @param int|null $nValue
75
+ */
76
+ public function __construct($nValue = null)
77
+ {
78
+ Nullable::__construct();
79
+
80
+ if (is_numeric($nValue))
81
+ {
82
+ $this -> setValue($nValue);
83
+ }
84
+ }
85
+
86
+ }
87
+ class NullableBool extends Nullable
88
+ {
89
+ /**
90
+ * @var bool
91
+ */
92
+ private $m_boValue;
93
+
94
+ /**
95
+ * @return bool
96
+ * @throws Exception
97
+ */
98
+ public function getValue()
99
+ {
100
+ if ($this -> m_boHasValue == false)
101
+ {
102
+ throw new Exception("Object has no value");
103
+ }
104
+
105
+ return ($this -> m_boValue);
106
+ }
107
+ /**
108
+ * @param bool $boValue
109
+ */
110
+ public function setValue($boValue)
111
+ {
112
+ if (!is_bool($boValue))
113
+ {
114
+ $this -> m_boHasValue = false;
115
+ $this -> m_boValue = null;
116
+ }
117
+ else
118
+ {
119
+ $this -> m_boHasValue = true;
120
+ $this -> m_boValue = $boValue;
121
+ }
122
+ }
123
+
124
+ //constructor
125
+ /**
126
+ * @param bool|null $boValue
127
+ */
128
+ public function __construct($boValue = null)
129
+ {
130
+ Nullable::__construct();
131
+
132
+ if (is_bool($boValue))
133
+ {
134
+ $this -> setValue($boValue);
135
+ }
136
+ }
137
+
138
+ }
139
+ /******************/
140
+ /* Common classes */
141
+ /******************/
142
+ class StringList
143
+ {
144
+ /**
145
+ * @var array
146
+ */
147
+ private $m_lszStrings;
148
+
149
+ /**
150
+ * @param int $nIndex
151
+ * @return string
152
+ * @throws Exception
153
+ */
154
+ public function getAt($nIndex)
155
+ {
156
+ if ($nIndex < 0 || $nIndex >= count($this -> m_lszStrings))
157
+ {
158
+ throw new Exception("Array index out of bounds");
159
+ }
160
+
161
+ return (string)($this -> m_lszStrings[$nIndex]);
162
+ }
163
+ /**
164
+ * @return int
165
+ */
166
+ function getCount()
167
+ {
168
+ return count($this -> m_lszStrings);
169
+ }
170
+ /**
171
+ * @param string $szString
172
+ * @return string
173
+ * @throws Exception
174
+ */
175
+ function add($szString)
176
+ {
177
+ if (!is_string($szString))
178
+ {
179
+ throw new Exception("Invalid parameter type");
180
+ }
181
+
182
+ return ($this -> m_lszStrings[] = $szString);
183
+ }
184
+
185
+ //constructor
186
+ function __construct()
187
+ {
188
+ $this -> m_lszStrings = array();
189
+ }
190
+
191
+ }
192
+ class ISOCountry
193
+ {
194
+ /**
195
+ * @var string
196
+ */
197
+ private $m_szCountryName;
198
+ /**
199
+ * @var string
200
+ */
201
+ private $m_szCountryShort2;
202
+ /**
203
+ * @var string
204
+ */
205
+ private $m_szCountryShort3;
206
+ /**
207
+ * @var int
208
+ */
209
+ private $m_nISOCode;
210
+ /**
211
+ * @var int
212
+ */
213
+ private $m_nListPriority;
214
+
215
+ /**
216
+ * @return string
217
+ */
218
+ public function getCountryName()
219
+ {
220
+ return $this -> m_szCountryName;
221
+ }
222
+ /**
223
+ * @return string
224
+ */
225
+ public function getCountryShort2()
226
+ {
227
+ return $this -> m_szCountryShort2;
228
+ }
229
+ /**
230
+ * @return string
231
+ */
232
+ public function getCountryShort3()
233
+ {
234
+ return $this -> m_szCountryShort3;
235
+ }
236
+ /**
237
+ * @return int
238
+ */
239
+ public function getISOCode()
240
+ {
241
+ return $this -> m_nISOCode;
242
+ }
243
+ /**
244
+ * @return int
245
+ */
246
+ public function getListPriority()
247
+ {
248
+ return $this -> m_nListPriority;
249
+ }
250
+
251
+ //constructor
252
+ /**
253
+ * @param int $nISOCode
254
+ * @param string $szCountryShort2
255
+ * @param string $szCountryShort3
256
+ * @param string $szCountryName
257
+ * @param int $nListPriority
258
+ * @throws Exception
259
+ */
260
+ public function __construct($nISOCode, $szCountryShort2, $szCountryShort3, $szCountryName, $nListPriority)
261
+ {
262
+ if (!is_int($nISOCode) || !is_string($szCountryName) || !is_string($szCountryShort2) || !is_string($szCountryShort3) || !is_int($nListPriority))
263
+ {
264
+ throw new Exception("Invalid parameter type");
265
+ }
266
+
267
+ $this -> m_nISOCode = $nISOCode;
268
+ $this -> m_szCountryShort2 = $szCountryShort2;
269
+ $this -> m_szCountryShort3 = $szCountryShort3;
270
+ $this -> m_szCountryName = $szCountryName;
271
+ $this -> m_nListPriority = $nListPriority;
272
+ }
273
+
274
+ }
275
+ class ISOCountryList
276
+ {
277
+ /**
278
+ * @var ISOCountry[]
279
+ */
280
+ private $m_licISOCountries;
281
+
282
+ /**
283
+ * @param string $szCountry
284
+ * @param ISOCountry $icISOCountry Passed by reference
285
+ * @return bool
286
+ */
287
+ public function getISOCountry($szCountry, &$icISOCountry)
288
+ {
289
+ $boFound = false;
290
+ $nCount = 0;
291
+ $icISOCountry2;
292
+
293
+ $icISOCountry = null;
294
+
295
+ while ($nCount < count($this -> m_licISOCountries))
296
+ {
297
+ $icISOCountry2 = $this -> m_licISOCountries[$nCount];
298
+
299
+ if (($szCountry == $icISOCountry2 -> getCountryShort2()) || ($szCountry == $icISOCountry2 -> getCountryShort3()) || ($szCountry == $icISOCountry2 -> getISOCode()))
300
+ {
301
+ $icISOCountry = new ISOCountry($icISOCountry2 -> getISOCode(), $icISOCountry2 -> getCountryShort2(), $icISOCountry2 -> getCountryShort3(), $icISOCountry2 -> getCountryName(), $icISOCountry2 -> getListPriority());
302
+ $boFound = true;
303
+ break;
304
+ }
305
+
306
+ $nCount++;
307
+ }
308
+
309
+ return $boFound;
310
+ }
311
+ /**
312
+ * @return int
313
+ */
314
+ public function getCount()
315
+ {
316
+ return count($this -> m_licISOCountries);
317
+ }
318
+ /**
319
+ * @param int $nIndex
320
+ * @return ISOCountry
321
+ * @throws Exception
322
+ */
323
+ public function getAt($nIndex)
324
+ {
325
+ if ($nIndex < 0 || $nIndex >= count($this -> m_licISOCountries))
326
+ {
327
+ throw new Exception("Array index out of bounds");
328
+ }
329
+
330
+ return $this -> m_licISOCountries[$nIndex];
331
+ }
332
+ /**
333
+ * @param int $nISOCode
334
+ * @param string $szCountryShort2
335
+ * @param string $szCountryShort3
336
+ * @param string $szCountryName
337
+ * @param int $nListPriority
338
+ */
339
+ public function add($nISOCode, $szCountryShort2, $szCountryShort3, $szCountryName, $nListPriority)
340
+ {
341
+ $newISOCountry = new ISOCountry($nISOCode, $szCountryShort2, $szCountryShort3, $szCountryName, $nListPriority);
342
+
343
+ $this -> m_licISOCountries[] = $newISOCountry;
344
+ }
345
+
346
+ //constructor
347
+ public function __construct()
348
+ {
349
+ $this -> m_licISOCountries = array();
350
+ }
351
+
352
+ }
353
+ class ISOCurrency
354
+ {
355
+ /**
356
+ * @var int
357
+ */
358
+ private $m_nExponent;
359
+ /**
360
+ * @var int
361
+ */
362
+ private $m_nISOCode;
363
+ /**
364
+ * @var string
365
+ */
366
+ private $m_szCurrency;
367
+ /**
368
+ * @var string
369
+ */
370
+ private $m_szCurrencyShort;
371
+
372
+ //public properties
373
+ /**
374
+ * @return int
375
+ */
376
+ public function getExponent()
377
+ {
378
+ return $this -> m_nExponent;
379
+ }
380
+ /**
381
+ * @return string
382
+ */
383
+ public function getCurrency()
384
+ {
385
+ return $this -> m_szCurrency;
386
+ }
387
+ /**
388
+ * @return string
389
+ */
390
+ public function getCurrencyShort()
391
+ {
392
+ return $this -> m_szCurrencyShort;
393
+ }
394
+ /**
395
+ * @return int
396
+ */
397
+ public function getISOCode()
398
+ {
399
+ return $this -> m_nISOCode;
400
+ }
401
+ /**
402
+ * @param int $nAmount
403
+ * @param bool $boAppendCurrencyShort
404
+ * @return string
405
+ */
406
+ public function getAmountCurrencyString($nAmount, $boAppendCurrencyShort = true)
407
+ {
408
+ $szReturnString = "";
409
+
410
+ $nDivideAmount = pow(10, $this -> m_nExponent);
411
+ $lfAmount = $nAmount / $nDivideAmount;
412
+
413
+ $szFormatString = "%." . $this -> m_nExponent . "f";
414
+ $szReturnString = sprintf($szFormatString, $lfAmount);
415
+
416
+ if ($boAppendCurrencyShort)
417
+ {
418
+ $szReturnString = $szReturnString . " " . $this -> m_szCurrencyShort;
419
+ }
420
+
421
+ return ($szReturnString);
422
+ }
423
+
424
+ //constructor
425
+ /**
426
+ * @param int $nISOCode
427
+ * @param string $szCurrency
428
+ * @param string $szCurrencyShort
429
+ * @param int $nExponent
430
+ */
431
+ public function __construct($nISOCode, $szCurrency, $szCurrencyShort, $nExponent)
432
+ {
433
+ $this -> m_nISOCode = $nISOCode;
434
+ $this -> m_nExponent = $nExponent;
435
+ $this -> m_szCurrency = $szCurrency;
436
+ $this -> m_szCurrencyShort = $szCurrencyShort;
437
+ }
438
+
439
+ }
440
+ class ISOCurrencyList
441
+ {
442
+ /**
443
+ * @var ISOCurrency[]
444
+ */
445
+ private $m_licISOCurrencies;
446
+
447
+ /**
448
+ * @param string $vCurrency Currency short or ISO code
449
+ * @param ISOCurrency &$icISOCurrency
450
+ * @return bool
451
+ */
452
+ public function getISOCurrency($vCurrency, &$icISOCurrency)
453
+ {
454
+ $boFound = false;
455
+ $nCount = 0;
456
+ $icISOCurrency2;
457
+
458
+ $icISOCurrency = null;
459
+
460
+ while (!$boFound && $nCount < count($this -> m_licISOCurrencies))
461
+ {
462
+ $icISOCurrency2 = $this -> m_licISOCurrencies[$nCount];
463
+
464
+ if ($vCurrency == $icISOCurrency2 -> getCurrencyShort() || $vCurrency == $icISOCurrency2 -> getISOCode())
465
+ {
466
+ $icISOCurrency = new ISOCurrency($icISOCurrency2 -> getISOCode(), $icISOCurrency2 -> getCurrency(), $icISOCurrency2 -> getCurrencyShort(), $icISOCurrency2 -> getExponent());
467
+ $boFound = true;
468
+ }
469
+
470
+ $nCount++;
471
+ }
472
+
473
+ return ($boFound);
474
+ }
475
+ /**
476
+ * @return int
477
+ */
478
+ public function getCount()
479
+ {
480
+ return count($this -> m_licISOCurrencies);
481
+ }
482
+ /**
483
+ * @param int $nIndex
484
+ * @return ISOCurrency
485
+ * @throws Exception
486
+ */
487
+ public function getAt($nIndex)
488
+ {
489
+ if ($nIndex < 0 || $nIndex >= count($this -> m_licISOCurrencies))
490
+ {
491
+ throw new Exception("Array index out of bounds");
492
+ }
493
+
494
+ return $this -> m_licISOCurrencies[$nIndex];
495
+ }
496
+ /**
497
+ * @param int $nISOCode
498
+ * @param string $szCurrency
499
+ * @param string $szCurrencyShort
500
+ * @param int $nExponent
501
+ */
502
+ public function add($nISOCode, $szCurrency, $szCurrencyShort, $nExponent)
503
+ {
504
+ $newISOCurrency = new ISOCurrency($nISOCode, $szCurrency, $szCurrencyShort, $nExponent);
505
+
506
+ $this -> m_licISOCurrencies[] = $newISOCurrency;
507
+ }
508
+
509
+ //constructor
510
+ public function __construct()
511
+ {
512
+ $this -> m_licISOCurrencies = array();
513
+ }
514
+
515
+ }
516
+ class XMLEntity
517
+ {
518
+ /**
519
+ * @var int
520
+ */
521
+ private $m_bCharCode;
522
+ /**
523
+ * @var string
524
+ */
525
+ private $m_szReplacement;
526
+
527
+ /**
528
+ * @return int
529
+ */
530
+ public function getCharCode()
531
+ {
532
+ return $this -> m_bCharCode;
533
+ }
534
+ /**
535
+ * @return string
536
+ */
537
+ public function getReplacement()
538
+ {
539
+ return $this -> m_szReplacement;
540
+ }
541
+
542
+ //constructor
543
+ /**
544
+ * @param int $bCharCode Hexadecimal character code
545
+ * @param string $szReplacement
546
+ */
547
+ public function __construct($bCharCode, $szReplacement)
548
+ {
549
+ $this -> m_bCharCode = $bCharCode;
550
+ $this -> m_szReplacement = $szReplacement;
551
+ }
552
+
553
+ }
554
+ class XmlAttribute2
555
+ {
556
+ /**
557
+ * @var string
558
+ */
559
+ private $m_szName;
560
+ /**
561
+ * @var string
562
+ */
563
+ private $m_szValue;
564
+
565
+ //public properties
566
+ /**
567
+ * @return string
568
+ */
569
+ public function getName()
570
+ {
571
+ return $this -> m_szName;
572
+ }
573
+ /**
574
+ * @param string $szName
575
+ */
576
+ public function setName($szName)
577
+ {
578
+ $this -> m_szName = $szName;
579
+ }
580
+ /**
581
+ * @return string
582
+ */
583
+ public function getValue()
584
+ {
585
+ return $this -> m_szValue;
586
+ }
587
+ /**
588
+ * @param string $szValue
589
+ */
590
+ public function setValue($szValue)
591
+ {
592
+ $this -> m_szValue = $szValue;
593
+ }
594
+ /**
595
+ * @return XmlAttribute
596
+ */
597
+ public function toXmlAttribute()
598
+ {
599
+ $xaXmlAttribute = new XmlAttribute($this -> m_szName, $this -> m_szValue);
600
+
601
+ return $xaXmlAttribute;
602
+ }
603
+
604
+ }
605
+ class XmlAttribute2List
606
+ {
607
+ /**
608
+ * @var XmlAttribute2[]
609
+ */
610
+ private $m_lxaXmlAttributeList;
611
+
612
+ /**
613
+ * @return int
614
+ */
615
+ public function getCount()
616
+ {
617
+ return count($this -> m_lxaXmlAttributeList);
618
+ }
619
+ /**
620
+ * @param int $nIndex
621
+ * @return XmlAttribute2
622
+ * @throws Exception
623
+ */
624
+ public function getAt($nIndex)
625
+ {
626
+ if ($nIndex < 0 || $nIndex >= count($this -> m_lxaXmlAttributeList))
627
+ {
628
+ throw new Exception("Array index out of bounds");
629
+ }
630
+
631
+ return $this -> m_lxaXmlAttributeList[$nIndex];
632
+ }
633
+ /**
634
+ * @param XmlAttribute2 $xaXmlAttribute
635
+ */
636
+ public function add(XmlAttribute2 $xaXmlAttribute)
637
+ {
638
+ if ($xaXmlAttribute != null)
639
+ {
640
+ $this -> m_lxaXmlAttributeList[] = $xaXmlAttribute;
641
+ }
642
+ }
643
+
644
+ //constructor
645
+ public function __construct()
646
+ {
647
+ $this -> m_lxaXmlAttributeList = array();
648
+ }
649
+
650
+ /**
651
+ * @return XmlAttribute2[]
652
+ */
653
+ public function toListOfXmlAttributeObjects()
654
+ {
655
+ $nCount = 0;
656
+ $lxaXmlAttributeList = array();
657
+
658
+ for ($nCount = 0; $nCount < count($this -> m_lxaXmlAttributeList); $nCount++)
659
+ {
660
+ $lxaXmlAttributeList[] = $this -> m_lxaXmlAttributeList[$nCount] -> toXmlAttribute();
661
+ }
662
+
663
+ return $lxaXmlAttributeList;
664
+ }
665
+
666
+ }
667
+ class XmlTag2
668
+ {
669
+ /**
670
+ * @var string
671
+ */
672
+ private $m_szName;
673
+ /**
674
+ * @var string
675
+ */
676
+ private $m_szContent;
677
+ /**
678
+ * @var XmlTag2List
679
+ */
680
+ private $m_xtlChildTags;
681
+ /**
682
+ * @var XmlAttribute2List
683
+ */
684
+ private $m_xalXmlAttributes;
685
+
686
+ //public properties
687
+ /**
688
+ * @return string
689
+ */
690
+ public function getName()
691
+ {
692
+ return $this -> m_szName;
693
+ }
694
+ /**
695
+ * @param $szName
696
+ */
697
+ public function setName($szName)
698
+ {
699
+ $this -> m_szName = $szName;
700
+ }
701
+ /**
702
+ * @return string
703
+ */
704
+ public function getContent()
705
+ {
706
+ return $this -> m_szContent;
707
+ }
708
+ /**
709
+ * @param string $szContent
710
+ */
711
+ public function setContent($szContent)
712
+ {
713
+ $this -> m_szContent = $szContent;
714
+ }
715
+ /**
716
+ * @return XmlAttribute2List
717
+ */
718
+ public function getXmlAttributes()
719
+ {
720
+ return $this -> m_xalXmlAttributes;
721
+ }
722
+ /**
723
+ * @return XmlTag2List
724
+ */
725
+ public function getChildTags()
726
+ {
727
+ return $this -> m_xtlChildTags;
728
+ }
729
+
730
+ //constructor
731
+ public function __construct()
732
+ {
733
+ $this -> m_xalXmlAttributes = new XmlAttribute2List();
734
+ $this -> m_xtlChildTags = new XmlTag2List();
735
+ }
736
+
737
+ /**
738
+ * @return XmlTag
739
+ */
740
+ public function toXmlTag()
741
+ {
742
+ $xtXmlTag = new XmlTag($this -> m_szName, $this -> m_szContent, $this -> m_xtlChildTags -> toListOfXmlTagObjects(), $this -> m_xalXmlAttributes -> toListOfXmlAttributeObjects());
743
+
744
+ return $xtXmlTag;
745
+ }
746
+
747
+ }
748
+ class XmlTag2List
749
+ {
750
+ /**
751
+ * @var XMLTag2[]
752
+ */
753
+ private $m_lxtXmlTagList;
754
+
755
+ /**
756
+ * @return int
757
+ */
758
+ public function getCount()
759
+ {
760
+ return count($this -> m_lxtXmlTagList);
761
+ }
762
+ /**
763
+ * @param int $nIndex
764
+ * @return XMLTag2
765
+ * @throws Exception
766
+ */
767
+ public function getAt($nIndex)
768
+ {
769
+ if ($nIndex < 0 || $nIndex >= count($this -> m_lxtXmlTagList))
770
+ {
771
+ throw new Exception("Array index out of bounds");
772
+ }
773
+
774
+ return $this -> m_lxtXmlTagList[$nIndex];
775
+ }
776
+ /**
777
+ * @param XmlTag2 $xtXmlTag
778
+ */
779
+ public function add(XmlTag2 $xtXmlTag)
780
+ {
781
+ if ($xtXmlTag != null)
782
+ {
783
+ $this -> m_lxtXmlTagList[] = $xtXmlTag;
784
+ }
785
+ }
786
+
787
+ //constructor
788
+ public function __construct()
789
+ {
790
+ $this -> m_lxtXmlTagList = array();
791
+ }
792
+
793
+ /**
794
+ * @return XMLTag[]
795
+ */
796
+ public function toListOfXmlTagObjects()
797
+ {
798
+ $nCount = 0;
799
+ $lxtXmlTagList = array();
800
+
801
+ for ($nCount = 0; $nCount < count($this -> m_lxtXmlTagList); $nCount++)
802
+ {
803
+ $lxtXmlTagList[] = $this -> m_lxtXmlTagList[$nCount] -> toXmlTag();
804
+ }
805
+
806
+ return $lxtXmlTagList;
807
+ }
808
+
809
+ }
810
+ class XmlAttribute
811
+ {
812
+ /**
813
+ * @var string
814
+ */
815
+ private $m_szName;
816
+ /**
817
+ * @var string
818
+ */
819
+ private $m_szValue;
820
+
821
+ //public properties
822
+ /**
823
+ * @return string
824
+ */
825
+ public function getName()
826
+ {
827
+ return $this -> m_szName;
828
+ }
829
+ /**
830
+ * @return string
831
+ */
832
+ public function getValue()
833
+ {
834
+ return $this -> m_szValue;
835
+ }
836
+
837
+ //constructor
838
+ /**
839
+ * @param string $szName
840
+ * @param string $szValue
841
+ * @throws Exception
842
+ */
843
+ public function __construct($szName, $szValue)
844
+ {
845
+ if (!is_string($szName) || !is_string($szValue))
846
+ {
847
+ throw new Exception("Invalid parameter type");
848
+ }
849
+
850
+ $this -> m_szName = $szName;
851
+ $this -> m_szValue = $szValue;
852
+ }
853
+
854
+ }
855
+ class XmlAttributeList
856
+ {
857
+ /**
858
+ * @var XmlAttribute2[]
859
+ */
860
+ private $m_lxaXmlAttributeList;
861
+
862
+ /**
863
+ * @param string $szName
864
+ * @return XmlAttribute2
865
+ */
866
+ public function getXmlAttribute($szName)
867
+ {
868
+ $boFound = false;
869
+ $nCount = 0;
870
+ $xaXmlAttribute = null;
871
+ $xaReturnXmlAttribute = null;
872
+
873
+ while (!$boFound && $nCount < count($this -> m_lxaXmlAttributeList))
874
+ {
875
+ $xaXmlAttribute = $this -> m_lxaXmlAttributeList[$nCount];
876
+
877
+ if ($szName == $xaXmlAttribute -> getName())
878
+ {
879
+ $xaReturnXmlAttribute = $xaXmlAttribute;
880
+ $boFound = true;
881
+ }
882
+
883
+ $nCount++;
884
+ }
885
+
886
+ return $xaReturnXmlAttribute;
887
+ }
888
+ /**
889
+ * @return int
890
+ */
891
+ public function getCount()
892
+ {
893
+ return count($this -> m_lxaXmlAttributeList);
894
+ }
895
+ /**
896
+ * @param int $nIndex
897
+ * @return XmlAttribute2
898
+ * @throws Exception
899
+ */
900
+ public function getAt($nIndex)
901
+ {
902
+ if ($nIndex < 0 || $nIndex >= count($this -> m_lxaXmlAttributeList))
903
+ {
904
+ throw new Exception("Array index out of bounds");
905
+ }
906
+
907
+ return $this -> m_lxaXmlAttributeList[$nIndex];
908
+ }
909
+
910
+ //constructor
911
+ /**
912
+ * @param XmlAttribute2[] $lxaXmlAttributeList
913
+ */
914
+ public function __construct($lxaXmlAttributeList)
915
+ {
916
+ $nCount = 0;
917
+
918
+ $this -> m_lxaXmlAttributeList = array();
919
+
920
+ if ($lxaXmlAttributeList != null)
921
+ {
922
+ try
923
+ {
924
+ for ($nCount = 0; $nCount < count($lxaXmlAttributeList); $nCount++)
925
+ {
926
+ $this -> m_lxaXmlAttributeList[] = $lxaXmlAttributeList[$nCount];
927
+ }
928
+ }
929
+ catch(Exception $e)
930
+ {
931
+ }
932
+ }
933
+ }
934
+
935
+ /**
936
+ * @return XmlAttribute2[]
937
+ */
938
+ public function getListOfXmlAttributeObjects()
939
+ {
940
+ $nCount = 0;
941
+ $lxaXmlAttributeList = array();
942
+
943
+ for ($nCount = 0; $nCount < count($this -> m_lxaXmlAttributeList); $nCount++)
944
+ {
945
+ $lxaXmlAttributeList[] = $this -> m_lxaXmlAttributeList[$nCount];
946
+ }
947
+
948
+ return $lxaXmlAttributeList;
949
+ }
950
+
951
+ }
952
+ class XmlTag
953
+ {
954
+ /**
955
+ * @var string
956
+ */
957
+ private $m_szName;
958
+ /**
959
+ * @var string
960
+ */
961
+ private $m_szContent;
962
+ /**
963
+ * @var XmlTagList
964
+ */
965
+ private $m_xtlChildTags;
966
+ /**
967
+ * @var XmlAttributeList
968
+ */
969
+ private $m_xalXmlAttributes;
970
+
971
+ //public properties
972
+ /**
973
+ * @return string
974
+ */
975
+ public function getName()
976
+ {
977
+ return $this -> m_szName;
978
+ }
979
+ /**
980
+ * @return string
981
+ */
982
+ public function getContent()
983
+ {
984
+ return $this -> m_szContent;
985
+ }
986
+ /**
987
+ * @return XmlAttributeList
988
+ */
989
+ public function getXmlAttributes()
990
+ {
991
+ return $this -> m_xalXmlAttributes;
992
+ }
993
+ /**
994
+ * @return XmlTagList
995
+ */
996
+ public function getChildTags()
997
+ {
998
+ return $this -> m_xtlChildTags;
999
+ }
1000
+ /**
1001
+ * @param string $szXMLVariable
1002
+ * @param string $szValue
1003
+ * @return bool
1004
+ */
1005
+ public function getStringValue($szXMLVariable, &$szValue)
1006
+ {
1007
+ $boReturnValue = false;
1008
+
1009
+ $szValue = "";
1010
+
1011
+ if ($this -> m_xtlChildTags != null)
1012
+ {
1013
+ $boReturnValue = $this -> m_xtlChildTags -> getValue($szXMLVariable, $szValue);
1014
+ }
1015
+
1016
+ return ($boReturnValue);
1017
+ }
1018
+ /**
1019
+ * @param string $szXMLVariable
1020
+ * @param int $nValue
1021
+ * @return bool
1022
+ */
1023
+ public function getIntegerValue($szXMLVariable, &$nValue)
1024
+ {
1025
+ $boReturnValue = false;
1026
+ $szValue = "";
1027
+
1028
+ $nValue = false;
1029
+ if ($this -> m_xtlChildTags != null)
1030
+ {
1031
+ $boReturnValue = $this -> m_xtlChildTags -> getValue($szXMLVariable, $szValue);
1032
+
1033
+ if ($boReturnValue)
1034
+ {
1035
+ if (!is_numeric($szValue))
1036
+ {
1037
+ $boReturnValue = false;
1038
+ }
1039
+ else
1040
+ {
1041
+ try
1042
+ {
1043
+ $nValue = intval($szValue);
1044
+ }
1045
+ catch (Exception $e)
1046
+ {
1047
+ $boReturnValue = false;
1048
+ }
1049
+ }
1050
+ }
1051
+ }
1052
+
1053
+ return ($boReturnValue);
1054
+ }
1055
+ /**
1056
+ * @param string $szXMLVariable
1057
+ * @param bool $boValue
1058
+ * @return bool
1059
+ */
1060
+ public function getBooleanValue($szXMLVariable, &$boValue)
1061
+ {
1062
+ $boReturnValue = false;
1063
+ $szValue = "";
1064
+
1065
+ $boValue = false;
1066
+ if ($this -> m_xtlChildTags != null)
1067
+ {
1068
+ $boReturnValue = $this -> m_xtlChildTags -> getValue($szXMLVariable, $szValue);
1069
+
1070
+ if ($boReturnValue)
1071
+ {
1072
+ if ($szValue != "0" && $szValue != "1" && strtoupper($szValue) != "FALSE" && strtoupper($szValue) != "TRUE")
1073
+ {
1074
+ $boReturnValue = false;
1075
+ }
1076
+ else
1077
+ {
1078
+ if (strtoupper($szValue) == "TRUE" || $szValue == "1")
1079
+ {
1080
+ $boValue = true;
1081
+ }
1082
+ }
1083
+ }
1084
+ }
1085
+
1086
+ return ($boReturnValue);
1087
+ }
1088
+
1089
+ //constructor
1090
+ /**
1091
+ * @param string $szName
1092
+ * @param string $szContent
1093
+ * @param XMLTag[] $lxtChildTags
1094
+ * @param XMLAttribute2[] $lxaXmlAttributes
1095
+ */
1096
+ public function __construct($szName, $szContent, $lxtChildTags, $lxaXmlAttributes)
1097
+ {
1098
+ $this -> m_szName = $szName;
1099
+ $this -> m_szContent = $szContent;
1100
+ $this -> m_xalXmlAttributes = new XmlAttributeList($lxaXmlAttributes);
1101
+ $this -> m_xtlChildTags = new XmlTagList($lxtChildTags);
1102
+ }
1103
+
1104
+ }
1105
+ class XmlTagList
1106
+ {
1107
+ /**
1108
+ * @var XMLTag[]
1109
+ */
1110
+ private $m_lxtXmlTagList;
1111
+
1112
+ /**
1113
+ * @return int
1114
+ */
1115
+ public function getCount()
1116
+ {
1117
+ return count($this -> m_lxtXmlTagList);
1118
+ }
1119
+ /**
1120
+ * @param int $nIndex
1121
+ * @return XmlTag
1122
+ * @throws Exception
1123
+ */
1124
+ public function getAt($nIndex)
1125
+ {
1126
+ if ($nIndex < 0 || $nIndex >= count($this -> m_lxtXmlTagList))
1127
+ {
1128
+ throw new Exception("Array index out of bounds");
1129
+ }
1130
+
1131
+ return $this -> m_lxtXmlTagList[$nIndex];
1132
+ }
1133
+ /**
1134
+ * @param string $szName
1135
+ * @return XmlTag
1136
+ * @throws Exception
1137
+ */
1138
+ public function getXmlTag($szName)
1139
+ {
1140
+ $lszHierarchicalNames = null;
1141
+ $nCount = 0;
1142
+ $boAbort = false;
1143
+ $boFound = false;
1144
+ $boLastNode = false;
1145
+ $szString;
1146
+ $szTagNameToFind;
1147
+ $nCurrentIndex = 0;
1148
+ $xtReturnTag = null;
1149
+ $xtCurrentTag = null;
1150
+ $nTagCount = 0;
1151
+ $xtlCurrentTagList = null;
1152
+ $nCount2 = 0;
1153
+
1154
+ if (count($this -> m_lxtXmlTagList) == 0)
1155
+ {
1156
+ return null;
1157
+ }
1158
+
1159
+ $lszHierarchicalNames = new StringList();
1160
+ $lszHierarchicalNames = SharedFunctions::getStringListFromCharSeparatedString($szName, '.');
1161
+
1162
+ $xtlCurrentTagList = $this;
1163
+
1164
+ // loop over the hierarchical list
1165
+ for ($nCount = 0; $nCount < $lszHierarchicalNames -> getCount() && !$boAbort; $nCount++)
1166
+ {
1167
+ if ($nCount == ($lszHierarchicalNames -> getCount() - 1))
1168
+ {
1169
+ $boLastNode = true;
1170
+ }
1171
+
1172
+ $szString = $lszHierarchicalNames -> getAt($nCount);
1173
+
1174
+ // look to see if this tag name has the special "[]" array chars
1175
+ $szTagNameToFind = SharedFunctions::getArrayNameAndIndex($szString, $nCurrentIndex);
1176
+
1177
+ $boFound = false;
1178
+ $nCount2 = 0;
1179
+
1180
+ for ($nTagCount = 0; $nTagCount < $xtlCurrentTagList -> getCount() && !$boFound; $nTagCount++)
1181
+ {
1182
+ $xtCurrentTag = $xtlCurrentTagList -> getAt($nTagCount);
1183
+
1184
+ // if this is the last node then check the attributes of the tag first
1185
+
1186
+ if ($xtCurrentTag -> getName() == $szTagNameToFind)
1187
+ {
1188
+ if ($nCount2 == $nCurrentIndex)
1189
+ {
1190
+ $boFound = true;
1191
+ }
1192
+ else
1193
+ {
1194
+ $nCount2++;
1195
+ }
1196
+ }
1197
+
1198
+ if ($boFound)
1199
+ {
1200
+ if (!$boLastNode)
1201
+ {
1202
+ $xtlCurrentTagList = $xtCurrentTag -> getChildTags();
1203
+ }
1204
+ else
1205
+ {
1206
+ // don't continue the search
1207
+ $xtReturnTag = $xtCurrentTag;
1208
+ }
1209
+ }
1210
+ }
1211
+
1212
+ if (!$boFound)
1213
+ {
1214
+ $boAbort = true;
1215
+ }
1216
+ }
1217
+
1218
+ return $xtReturnTag;
1219
+ }
1220
+ /**
1221
+ * @param string $szXMLVariable
1222
+ * @param string $szValue Passed by reference
1223
+ * @return bool
1224
+ * @throws Exception
1225
+ */
1226
+ public function getValue($szXMLVariable, &$szValue)
1227
+ {
1228
+ $boReturnValue = false;
1229
+ $lszHierarchicalNames;
1230
+ $szXMLTagName;
1231
+ $szLastXMLTagName;
1232
+ $nCount = 0;
1233
+ $xtCurrentTag = null;
1234
+ $xaXmlAttribute = null;
1235
+
1236
+ $lszHierarchicalNames = new StringList();
1237
+ $szValue = null;
1238
+ $lszHierarchicalNames = SharedFunctions::getStringListFromCharSeparatedString($szXMLVariable, '.');
1239
+
1240
+ if ($lszHierarchicalNames -> getCount() == 1)
1241
+ {
1242
+ $szXMLTagName = $lszHierarchicalNames -> getAt(0);
1243
+
1244
+ $xtCurrentTag = $this -> getXmlTag($szXMLTagName);
1245
+
1246
+ if ($xtCurrentTag != null)
1247
+ {
1248
+ $xaXmlAttribute = $xtCurrentTag -> getXmlAttributes() -> getXmlAttribute($szXMLTagName);
1249
+
1250
+ if ($xaXmlAttribute != null)
1251
+ {
1252
+ $szValue = SharedFunctions::replaceEntitiesInStringWithChars($xaXmlAttribute -> getValue());
1253
+ $boReturnValue = true;
1254
+ }
1255
+ else
1256
+ {
1257
+ $szValue = SharedFunctions::replaceEntitiesInStringWithChars($xtCurrentTag -> getContent());
1258
+ $boReturnValue = true;
1259
+ }
1260
+ }
1261
+ }
1262
+ else
1263
+ {
1264
+ if ($lszHierarchicalNames -> getCount() > 1)
1265
+ {
1266
+ $szXMLTagName = $lszHierarchicalNames -> getAt(0);
1267
+ $szLastXMLTagName = $lszHierarchicalNames -> getAt($lszHierarchicalNames -> getCount() - 1);
1268
+
1269
+ // need to remove the last variable from the passed name
1270
+ for ($nCount = 1; $nCount < ($lszHierarchicalNames -> getCount() - 1); $nCount++)
1271
+ {
1272
+ $szXMLTagName .= "." . $lszHierarchicalNames -> getAt($nCount);
1273
+ }
1274
+
1275
+ $xtCurrentTag = $this -> getXmlTag($szXMLTagName);
1276
+
1277
+ // first check the attributes of this tag
1278
+ if ($xtCurrentTag != null)
1279
+ {
1280
+ $xaXmlAttribute = $xtCurrentTag -> getXmlAttributes() -> getXmlAttribute($szLastXMLTagName);
1281
+
1282
+ if ($xaXmlAttribute != null)
1283
+ {
1284
+ $szValue = SharedFunctions::replaceEntitiesInStringWithChars($xaXmlAttribute -> getValue());
1285
+ $boReturnValue = true;
1286
+ }
1287
+ else
1288
+ {
1289
+ // check to see if it's actually a tag
1290
+ if ($xtCurrentTag -> getChildTags() != null)
1291
+ {
1292
+ $xtCurrentTag = $xtCurrentTag -> getChildTags() -> getXmlTag($szLastXMLTagName);
1293
+
1294
+ if ($xtCurrentTag != null)
1295
+ {
1296
+ $szValue = SharedFunctions::replaceEntitiesInStringWithChars($xtCurrentTag -> getContent());
1297
+ $boReturnValue = true;
1298
+ }
1299
+ }
1300
+ }
1301
+ }
1302
+ }
1303
+ }
1304
+
1305
+ return ($boReturnValue);
1306
+ }
1307
+
1308
+ //constructor
1309
+ /**
1310
+ * @param XMLTag[] $lxtXmlTagList
1311
+ */
1312
+ public function __construct($lxtXmlTagList)
1313
+ {
1314
+ $nCount = 0;
1315
+
1316
+ $this -> m_lxtXmlTagList = array();
1317
+
1318
+ if ($lxtXmlTagList != null)
1319
+ {
1320
+ try
1321
+ {
1322
+ for ($nCount = 0; $nCount < count($lxtXmlTagList); $nCount++)
1323
+ {
1324
+ $this -> m_lxtXmlTagList[] = $lxtXmlTagList[$nCount];
1325
+ }
1326
+ }
1327
+ catch(Exception $e)
1328
+ {
1329
+ }
1330
+ }
1331
+ }
1332
+
1333
+ /**
1334
+ * @return XMLTag[]
1335
+ */
1336
+ public function getListOfXmlTagObjects()
1337
+ {
1338
+ $nCount = 0;
1339
+ $lxtXmlTagList = array();
1340
+
1341
+ for ($nCount = 0; $nCount < count($this -> m_lxtXmlTagList); $nCount++)
1342
+ {
1343
+ $lxtXmlTagList[] = $this -> m_lxtXmlTagList[$nCount];
1344
+ }
1345
+
1346
+ return $lxtXmlTagList;
1347
+ }
1348
+
1349
+ }
1350
+ class XmlParser
1351
+ {
1352
+ /**
1353
+ * @var XmlTagList
1354
+ */
1355
+ private $m_xtlXmlTagList;
1356
+
1357
+ /**
1358
+ * @param string $szXMLVariable
1359
+ * @param string $szValue
1360
+ * @return bool
1361
+ */
1362
+ public function getStringValue($szXMLVariable, &$szValue)
1363
+ {
1364
+ $boReturnValue = false;
1365
+
1366
+ $szValue = "";
1367
+
1368
+ if ($this -> m_xtlXmlTagList != null)
1369
+ {
1370
+ $boReturnValue = $this -> m_xtlXmlTagList -> getValue($szXMLVariable, $szValue);
1371
+ }
1372
+
1373
+ return ($boReturnValue);
1374
+ }
1375
+ /**
1376
+ * @param string $szXMLVariable
1377
+ * @param int $nValue
1378
+ * @return bool
1379
+ */
1380
+ public function getIntegerValue($szXMLVariable, &$nValue)
1381
+ {
1382
+ $boReturnValue = false;
1383
+ $szValue = "";
1384
+
1385
+ $nValue = false;
1386
+ if ($this -> m_xtlXmlTagList != null)
1387
+ {
1388
+ $boReturnValue = $this -> m_xtlXmlTagList -> getValue($szXMLVariable, $szValue);
1389
+
1390
+ if ($boReturnValue)
1391
+ {
1392
+ if (!is_numeric($szValue))
1393
+ {
1394
+ $boReturnValue = false;
1395
+ }
1396
+ else
1397
+ {
1398
+ try
1399
+ {
1400
+ $nValue = intval($szValue);
1401
+ }
1402
+ catch (Exception $e)
1403
+ {
1404
+ $boReturnValue = false;
1405
+ }
1406
+ }
1407
+ }
1408
+ }
1409
+
1410
+ return ($boReturnValue);
1411
+ }
1412
+ /**
1413
+ * @param string $szXMLVariable
1414
+ * @param bool $boValue
1415
+ * @return bool
1416
+ */
1417
+ public function getBooleanValue($szXMLVariable, &$boValue)
1418
+ {
1419
+ $boReturnValue = false;
1420
+ $szValue = "";
1421
+
1422
+ $boValue = false;
1423
+ if ($this -> m_xtlXmlTagList != null)
1424
+ {
1425
+ $boReturnValue = $this -> m_xtlXmlTagList -> getValue($szXMLVariable, $szValue);
1426
+
1427
+ if ($boReturnValue)
1428
+ {
1429
+ if ($szValue != "0" && $szValue != "1" && strtoupper($szValue) != "FALSE" && strtoupper($szValue) != "TRUE")
1430
+ {
1431
+ $boReturnValue = false;
1432
+ }
1433
+ else
1434
+ {
1435
+ if (strtoupper($szValue) == "TRUE" || $szValue == "1")
1436
+ {
1437
+ $boValue = true;
1438
+ }
1439
+ }
1440
+ }
1441
+ }
1442
+
1443
+ return ($boReturnValue);
1444
+ }
1445
+ /**
1446
+ * @param string $szTagName
1447
+ * @return XMLTag
1448
+ */
1449
+ public function getTag($szTagName)
1450
+ {
1451
+ $xmlReturnTag = null;
1452
+
1453
+ if ($this -> m_xtlXmlTagList -> getCount() == 0)
1454
+ {
1455
+ return (null);
1456
+ }
1457
+
1458
+ $xmlReturnTag = $this -> m_xtlXmlTagList -> getXmlTag($szTagName);
1459
+
1460
+ return ($xmlReturnTag);
1461
+ }
1462
+ /**
1463
+ * @param string $szXmlString
1464
+ * @return bool
1465
+ */
1466
+ public function parseBuffer($szXmlString)
1467
+ {
1468
+ $boReturnValue = false;
1469
+
1470
+ try
1471
+ {
1472
+ $sxiSimpleXMLIterator = new SimpleXMLIterator($szXmlString);
1473
+
1474
+ $xtlXmlTagList = XmlParser::toXmlTagList($sxiSimpleXMLIterator);
1475
+ $this -> m_xtlXmlTagList = new XmlTagList($xtlXmlTagList -> toListOfXmlTagObjects());
1476
+
1477
+ $boReturnValue = true;
1478
+ }
1479
+ catch (Exception $e)
1480
+ {
1481
+ }
1482
+
1483
+ return $boReturnValue;
1484
+ }
1485
+ /**
1486
+ * @param SimpleXMLIterator $sxiSimpleXMLIterator
1487
+ * @return XmlTag2List
1488
+ * @throws Exception
1489
+ */
1490
+ private static function toXmlTagList(SimpleXMLIterator $sxiSimpleXMLIterator)
1491
+ {
1492
+ $xtlXmlTagList = new XmlTag2List();
1493
+
1494
+ for ($sxiSimpleXMLIterator -> rewind(); $sxiSimpleXMLIterator -> valid(); $sxiSimpleXMLIterator -> next())
1495
+ {
1496
+ $xtXmlTag = new XmlTag2();
1497
+ $xtlXmlTagList -> add($xtXmlTag);
1498
+ $xtXmlTag -> setName($sxiSimpleXMLIterator -> key());
1499
+
1500
+ if (strval($sxiSimpleXMLIterator -> current()) != "")
1501
+ {
1502
+ $xtXmlTag -> setContent(strval($sxiSimpleXMLIterator -> current()));
1503
+ }
1504
+
1505
+ // get the attributes
1506
+ foreach ($sxiSimpleXMLIterator->current()->attributes() as $szName => $szValue)
1507
+ {
1508
+ $xaXmlAttribute = new XmlAttribute2();
1509
+ $xaXmlAttribute -> setName($szName);
1510
+ $xaXmlAttribute -> setValue(strval($szValue));
1511
+ $xtXmlTag -> getXmlAttributes() -> add($xaXmlAttribute);
1512
+ }
1513
+
1514
+ // parse the child tags
1515
+ if ($sxiSimpleXMLIterator -> hasChildren())
1516
+ {
1517
+ $xtlChildXmlTagList = XmlParser::toXmlTagList($sxiSimpleXMLIterator -> current());
1518
+
1519
+ for ($nCount = 0; $nCount < $xtlChildXmlTagList -> getCount(); $nCount++)
1520
+ {
1521
+ $xtXmlTag -> getChildTags() -> add($xtlChildXmlTagList -> getAt($nCount));
1522
+ }
1523
+ }
1524
+ }
1525
+
1526
+ return $xtlXmlTagList;
1527
+ }
1528
+
1529
+ }
1530
+ class SharedFunctions
1531
+ {
1532
+ /**
1533
+ * @param string $szString
1534
+ * @param string $cDelimiter
1535
+ * @return StringList
1536
+ * @throws Exception
1537
+ */
1538
+ public static function getStringListFromCharSeparatedString($szString, $cDelimiter)
1539
+ {
1540
+ $nCount = 0;
1541
+ $nLastCount = -1;
1542
+ $szSubString;
1543
+ $nStringLength;
1544
+ $lszStringList;
1545
+
1546
+ if ($szString == null || $szString == "" || (string)$cDelimiter == "")
1547
+ {
1548
+ return null;
1549
+ }
1550
+
1551
+ $lszStringList = new StringList();
1552
+
1553
+ $nStringLength = strlen($szString);
1554
+
1555
+ for ($nCount = 0; $nCount < $nStringLength; $nCount++)
1556
+ {
1557
+ if ($szString[$nCount] == $cDelimiter)
1558
+ {
1559
+ $szSubString = substr($szString, ($nLastCount + 1), ($nCount - $nLastCount - 1));
1560
+ $nLastCount = $nCount;
1561
+ $lszStringList -> add($szSubString);
1562
+
1563
+ if ($nCount == $nStringLength)
1564
+ {
1565
+ $lszStringList -> add("");
1566
+ }
1567
+ }
1568
+ else
1569
+ {
1570
+ if ($nCount == ($nStringLength - 1))
1571
+ {
1572
+ $szSubString = substr($szString, ($nLastCount + 1), ($nCount - $nLastCount));
1573
+ $lszStringList -> add($szSubString);
1574
+ }
1575
+ }
1576
+ }
1577
+
1578
+ return $lszStringList;
1579
+ }
1580
+ /**
1581
+ * @param string $szName
1582
+ * @param int $nIndex Passed by reference
1583
+ * @return string
1584
+ */
1585
+ public static function getArrayNameAndIndex($szName, &$nIndex)
1586
+ {
1587
+ $szReturnString;
1588
+ $nCount = 0;
1589
+ $szSubString;
1590
+ $boFound = false;
1591
+ $boAbort = false;
1592
+ $boAtLeastOneDigitFound = false;
1593
+
1594
+ if ($szName == "")
1595
+ {
1596
+ $nIndex = 0;
1597
+ return $szName;
1598
+ }
1599
+
1600
+ $szReturnString = $szName;
1601
+ $nIndex = 0;
1602
+
1603
+ if ($szName[(strlen($szName) - 1)] == ']')
1604
+ {
1605
+ $nCount = strlen($szName) - 2;
1606
+
1607
+ while (!$boFound && !$boAbort && $nCount >= 0)
1608
+ {
1609
+ // if we've found the closing array brace
1610
+ if ($szName[$nCount] == '[')
1611
+ {
1612
+ $boFound = true;
1613
+ }
1614
+ else
1615
+ {
1616
+ if (!is_numeric($szName[$nCount]))
1617
+ {
1618
+ $boAbort = true;
1619
+ }
1620
+ else
1621
+ {
1622
+ $boAtLeastOneDigitFound = true;
1623
+ $nCount--;
1624
+ }
1625
+ }
1626
+ }
1627
+
1628
+ // did we finish successfully?
1629
+ if ($boFound && $boAtLeastOneDigitFound)
1630
+ {
1631
+ $szSubString = substr($szName, ($nCount + 1), (strlen($szName) - $nCount - 2));
1632
+ $szReturnString = substr($szName, 0, $nCount);
1633
+ $nIndex = (int)($szSubString);
1634
+ }
1635
+ }
1636
+
1637
+ return $szReturnString;
1638
+ }
1639
+ /**
1640
+ * @param string $str
1641
+ * @return string
1642
+ */
1643
+ public static function stringToByteArray($str)
1644
+ {
1645
+ $encoded;
1646
+
1647
+ $encoded = utf8_encode($str);
1648
+
1649
+ return $encoded;
1650
+ }
1651
+ /**
1652
+ * @param string $aByte
1653
+ * @return string
1654
+ */
1655
+ public static function byteArrayToString($aByte)
1656
+ {
1657
+ return utf8_decode($aByte);
1658
+ }
1659
+ /**
1660
+ * @param int $nNumber
1661
+ * @param int $nPaddingAmount
1662
+ * @param string $cPaddingChar
1663
+ * @return string
1664
+ */
1665
+ public static function forwardPaddedNumberString($nNumber, $nPaddingAmount, $cPaddingChar)
1666
+ {
1667
+ $szReturnString;
1668
+ $sbString;
1669
+ $nCount = 0;
1670
+
1671
+ $szReturnString = (string)$nNumber;
1672
+
1673
+ if (strlen($szReturnString) < $nPaddingAmount && $nPaddingAmount > 0)
1674
+ {
1675
+ $sbString = "";
1676
+
1677
+ for ($nCount = 0; $nCount < ($nPaddingAmount - strlen($szReturnString)); $nCount++)
1678
+ {
1679
+ $sbString .= $cPaddingChar;
1680
+ }
1681
+
1682
+ $sbString .= $szReturnString;
1683
+ $szReturnString = (string)$sbString;
1684
+ }
1685
+
1686
+ return $szReturnString;
1687
+ }
1688
+ /**
1689
+ * @param string $szString
1690
+ * @return string
1691
+ */
1692
+ public static function stripAllWhitespace($szString)
1693
+ {
1694
+ $sbReturnString;
1695
+ $nCount = 0;
1696
+
1697
+ if ($szString == null)
1698
+ {
1699
+ return (null);
1700
+ }
1701
+
1702
+ $sbReturnString = "";
1703
+
1704
+ for ($nCount = 0; $nCount < strlen($szString); $nCount++)
1705
+ {
1706
+ if ($szString[$nCount] != ' ' && $szString[$nCount] != '\t' && $szString[$nCount] != '\n' && $szString[$nCount] != '\r')
1707
+ {
1708
+ $sbReturnString .= $szString[$nCount];
1709
+ }
1710
+ }
1711
+
1712
+ return (string)$sbReturnString;
1713
+ }
1714
+ /**
1715
+ * @param string $szString
1716
+ * @return bool
1717
+ */
1718
+ public static function isStringNullOrEmpty($szString)
1719
+ {
1720
+ $boReturnValue = false;
1721
+
1722
+ if ($szString == null || $szString == "")
1723
+ {
1724
+ $boReturnValue = true;
1725
+ }
1726
+
1727
+ return ($boReturnValue);
1728
+ }
1729
+ /**
1730
+ * @param string $szString
1731
+ * @return null|string
1732
+ */
1733
+ public static function replaceCharsInStringWithEntities($szString)
1734
+ {
1735
+ //give access to enum like associated array
1736
+ global $g_XMLEntities;
1737
+
1738
+ $szReturnString;
1739
+ $nCount;
1740
+ $boFound;
1741
+ $nHTMLEntityCount;
1742
+
1743
+ $szReturnString = null;
1744
+
1745
+ for ($nCount = 0; $nCount < strlen($szString); $nCount++)
1746
+ {
1747
+ $boFound = false;
1748
+ $nHTMLEntityCount = 0;
1749
+
1750
+ while (!$boFound && $nHTMLEntityCount < count($g_XMLEntities))
1751
+ {
1752
+ //$test1 = htmlspecialchars('&');
1753
+
1754
+ if ($g_XMLEntities[$nHTMLEntityCount] -> getReplacement() == htmlspecialchars($szString[$nCount]))
1755
+ {
1756
+ $boFound = true;
1757
+ }
1758
+ else
1759
+ {
1760
+ $nHTMLEntityCount++;
1761
+ }
1762
+ }
1763
+
1764
+ if ($boFound)
1765
+ {
1766
+ $szReturnString .= $g_XMLEntities[$nHTMLEntityCount] -> getReplacement();
1767
+ }
1768
+ else
1769
+ {
1770
+ $szReturnString .= $szString[$nCount];
1771
+ }
1772
+ }
1773
+
1774
+ return $szReturnString;
1775
+ }
1776
+ /**
1777
+ * @param string $szString
1778
+ * @return null|string
1779
+ */
1780
+ public static function replaceEntitiesInStringWithChars($szString)
1781
+ {
1782
+ $szReturnString = null;
1783
+ $nCount;
1784
+ $boFound = false;
1785
+ $boFoundAmpersand = false;
1786
+ $nHTMLEntityCount;
1787
+ $szAmpersandBuffer = "";
1788
+ $nAmpersandBufferCount = 0;
1789
+
1790
+ for ($nCount = 0; $nCount < strlen($szString); $nCount++)
1791
+ {
1792
+ $boFound = false;
1793
+ $nHTMLEntityCount = 0;
1794
+
1795
+ if (!$boFoundAmpersand)
1796
+ {
1797
+ if ($szString[$nCount] == '&')
1798
+ {
1799
+ $boFoundAmpersand = true;
1800
+ $szAmpersandBuffer = (string)$szString[$nCount];
1801
+ $nAmpersandBufferCount = 0;
1802
+ }
1803
+ else
1804
+ {
1805
+ $szReturnString .= $szString[$nCount];
1806
+ }
1807
+ }
1808
+ else
1809
+ {
1810
+ $szAmpersandBuffer .= $szString[$nCount];
1811
+
1812
+ if ($nAmpersandBufferCount < (10 - 2))
1813
+ {
1814
+ if ($szString[$nCount] == ';')
1815
+ {
1816
+ $boFound = true;
1817
+ $boFoundAmpersand = false;
1818
+ }
1819
+ else
1820
+ {
1821
+ $nAmpersandBufferCount++;
1822
+ }
1823
+ }
1824
+ else
1825
+ {
1826
+ $szReturnString .= $szAmpersandBuffer;
1827
+ $boFoundAmpersand = false;
1828
+ }
1829
+ }
1830
+
1831
+ if ($boFound)
1832
+ {
1833
+ // need to find the entity in the list
1834
+ $boFoundEntity = false;
1835
+ $nXMLEntityCount = 0;
1836
+
1837
+ while (!$boFoundEntity && $nXMLEntityCount < count($g_XMLEntities))
1838
+ {
1839
+ if (strtoupper($g_XMLEntities[$nXMLEntityCount] -> getReplacement()) == strtoupper($szAmpersandBuffer))
1840
+ {
1841
+ $boFoundEntity = true;
1842
+ }
1843
+ else
1844
+ {
1845
+ $nXMLEntityCount++;
1846
+ }
1847
+ }
1848
+
1849
+ if ($boFoundEntity)
1850
+ {
1851
+ $szReturnString .= $g_XMLEntities[$nXMLEntityCount] -> getCharCode();
1852
+ }
1853
+ else
1854
+ {
1855
+ $szReturnString .= $szAmpersandBuffer;
1856
+ }
1857
+ $boFound = false;
1858
+ }
1859
+ }
1860
+
1861
+ if ($boFoundAmpersand && !$boFound)
1862
+ {
1863
+ $szReturnString .= $szAmpersandBuffer;
1864
+ }
1865
+
1866
+ return $szReturnString;
1867
+ }
1868
+ /**
1869
+ * @param bool $boValue
1870
+ * @return string
1871
+ */
1872
+ public static function boolToString($boValue)
1873
+ {
1874
+ if ($boValue == true)
1875
+ {
1876
+ return "true";
1877
+ }
1878
+ elseif ($boValue == false)
1879
+ {
1880
+ return "false";
1881
+ }
1882
+ }
1883
+
1884
+ }
app/code/local/PayVector/Tpg/Model/Common/ThePaymentGateway/cacert.pem ADDED
@@ -0,0 +1,3785 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ##
2
+ ## ca-bundle.crt -- Bundle of CA Root Certificates
3
+ ##
4
+ ## Certificate data from Mozilla as of: Tue Jan 28 09:38:07 2014
5
+ ##
6
+ ## This is a bundle of X.509 certificates of public Certificate Authorities
7
+ ## (CA). These were automatically extracted from Mozilla's root certificates
8
+ ## file (certdata.txt). This file can be found in the mozilla source tree:
9
+ ## http://mxr.mozilla.org/mozilla-release/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1
10
+ ##
11
+ ## It contains the certificates in PEM format and therefore
12
+ ## can be directly used with curl / libcurl / php_curl, or with
13
+ ## an Apache+mod_ssl webserver for SSL client authentication.
14
+ ## Just configure this file as the SSLCACertificateFile.
15
+ ##
16
+
17
+
18
+ GTE CyberTrust Global Root
19
+ ==========================
20
+ -----BEGIN CERTIFICATE-----
21
+ MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
22
+ Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG
23
+ A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz
24
+ MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL
25
+ Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0
26
+ IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u
27
+ sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql
28
+ HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID
29
+ AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW
30
+ M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF
31
+ NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
32
+ -----END CERTIFICATE-----
33
+
34
+ Thawte Server CA
35
+ ================
36
+ -----BEGIN CERTIFICATE-----
37
+ MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
38
+ DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
39
+ dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE
40
+ AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j
41
+ b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV
42
+ BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u
43
+ c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG
44
+ A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
45
+ ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
46
+ /Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7
47
+ 1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR
48
+ MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J
49
+ GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ
50
+ GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
51
+ -----END CERTIFICATE-----
52
+
53
+ Thawte Premium Server CA
54
+ ========================
55
+ -----BEGIN CERTIFICATE-----
56
+ MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
57
+ DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
58
+ dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
59
+ AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
60
+ ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
61
+ AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
62
+ VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
63
+ aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
64
+ cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
65
+ aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
66
+ Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
67
+ qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
68
+ SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
69
+ 8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
70
+ UCemDaYj+bvLpgcUQg==
71
+ -----END CERTIFICATE-----
72
+
73
+ Equifax Secure CA
74
+ =================
75
+ -----BEGIN CERTIFICATE-----
76
+ MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
77
+ ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
78
+ MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
79
+ B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
80
+ nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
81
+ fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
82
+ 8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
83
+ A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
84
+ CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
85
+ A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
86
+ spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
87
+ Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
88
+ zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
89
+ BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
90
+ 70+sB3c4
91
+ -----END CERTIFICATE-----
92
+
93
+ Verisign Class 3 Public Primary Certification Authority
94
+ =======================================================
95
+ -----BEGIN CERTIFICATE-----
96
+ MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
97
+ FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
98
+ IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
99
+ XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
100
+ IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
101
+ A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
102
+ f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
103
+ hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
104
+ TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
105
+ WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
106
+ Tqj/ZA1k
107
+ -----END CERTIFICATE-----
108
+
109
+ Verisign Class 3 Public Primary Certification Authority - G2
110
+ ============================================================
111
+ -----BEGIN CERTIFICATE-----
112
+ MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
113
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
114
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
115
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
116
+ dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
117
+ MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
118
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
119
+ biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
120
+ dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
121
+ FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
122
+ lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
123
+ MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
124
+ 1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
125
+ Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
126
+ -----END CERTIFICATE-----
127
+
128
+ GlobalSign Root CA
129
+ ==================
130
+ -----BEGIN CERTIFICATE-----
131
+ MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
132
+ GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
133
+ b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
134
+ BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
135
+ VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
136
+ DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
137
+ THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
138
+ Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
139
+ c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
140
+ gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
141
+ HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
142
+ AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
143
+ Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
144
+ j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
145
+ hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
146
+ X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
147
+ -----END CERTIFICATE-----
148
+
149
+ GlobalSign Root CA - R2
150
+ =======================
151
+ -----BEGIN CERTIFICATE-----
152
+ MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
153
+ YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
154
+ bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
155
+ aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
156
+ bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
157
+ ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
158
+ s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
159
+ S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
160
+ TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
161
+ ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
162
+ FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
163
+ YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
164
+ BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
165
+ 9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
166
+ 01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
167
+ 9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
168
+ TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
169
+ -----END CERTIFICATE-----
170
+
171
+ ValiCert Class 1 VA
172
+ ===================
173
+ -----BEGIN CERTIFICATE-----
174
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
175
+ b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
176
+ YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
177
+ bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy
178
+ MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
179
+ d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg
180
+ UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
181
+ LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
182
+ A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi
183
+ GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm
184
+ DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG
185
+ lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX
186
+ icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP
187
+ Orf1LXLI
188
+ -----END CERTIFICATE-----
189
+
190
+ ValiCert Class 2 VA
191
+ ===================
192
+ -----BEGIN CERTIFICATE-----
193
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
194
+ b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
195
+ YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
196
+ bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
197
+ MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
198
+ d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg
199
+ UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
200
+ LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
201
+ A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC
202
+ CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf
203
+ ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ
204
+ SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV
205
+ UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8
206
+ W9ViH0Pd
207
+ -----END CERTIFICATE-----
208
+
209
+ RSA Root Certificate 1
210
+ ======================
211
+ -----BEGIN CERTIFICATE-----
212
+ MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
213
+ b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
214
+ YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
215
+ bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
216
+ MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
217
+ d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg
218
+ UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
219
+ LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
220
+ A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td
221
+ 3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H
222
+ BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs
223
+ 3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF
224
+ V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r
225
+ on+jjBXu
226
+ -----END CERTIFICATE-----
227
+
228
+ Verisign Class 3 Public Primary Certification Authority - G3
229
+ ============================================================
230
+ -----BEGIN CERTIFICATE-----
231
+ MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
232
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
233
+ cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
234
+ IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
235
+ dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
236
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
237
+ dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
238
+ cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
239
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
240
+ ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
241
+ EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
242
+ cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
243
+ EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
244
+ 055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
245
+ ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
246
+ j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
247
+ /Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
248
+ xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
249
+ t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
250
+ -----END CERTIFICATE-----
251
+
252
+ Verisign Class 4 Public Primary Certification Authority - G3
253
+ ============================================================
254
+ -----BEGIN CERTIFICATE-----
255
+ MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
256
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
257
+ cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
258
+ IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
259
+ dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
260
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
261
+ dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
262
+ cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
263
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
264
+ ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
265
+ tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
266
+ 8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
267
+ Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
268
+ Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
269
+ j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
270
+ mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
271
+ fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
272
+ RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
273
+ UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
274
+ -----END CERTIFICATE-----
275
+
276
+ Entrust.net Secure Server CA
277
+ ============================
278
+ -----BEGIN CERTIFICATE-----
279
+ MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV
280
+ BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg
281
+ cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl
282
+ ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv
283
+ cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG
284
+ A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi
285
+ eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p
286
+ dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0
287
+ aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ
288
+ aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5
289
+ gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw
290
+ ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw
291
+ CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l
292
+ dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
293
+ bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
294
+ cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
295
+ dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw
296
+ NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow
297
+ HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
298
+ BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN
299
+ Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9
300
+ n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
301
+ -----END CERTIFICATE-----
302
+
303
+ Entrust.net Premium 2048 Secure Server CA
304
+ =========================================
305
+ -----BEGIN CERTIFICATE-----
306
+ MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
307
+ ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
308
+ bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
309
+ BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
310
+ NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
311
+ d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
312
+ MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
313
+ ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
314
+ MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
315
+ Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
316
+ hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
317
+ nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
318
+ VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E
319
+ BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ
320
+ KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy
321
+ T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
322
+ zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT
323
+ J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e
324
+ nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE=
325
+ -----END CERTIFICATE-----
326
+
327
+ Baltimore CyberTrust Root
328
+ =========================
329
+ -----BEGIN CERTIFICATE-----
330
+ MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
331
+ ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
332
+ ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
333
+ SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
334
+ dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
335
+ uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
336
+ UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
337
+ G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
338
+ XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
339
+ l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
340
+ VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
341
+ BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
342
+ cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
343
+ hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
344
+ Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
345
+ RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
346
+ -----END CERTIFICATE-----
347
+
348
+ Equifax Secure Global eBusiness CA
349
+ ==================================
350
+ -----BEGIN CERTIFICATE-----
351
+ MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
352
+ RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp
353
+ bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx
354
+ HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds
355
+ b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV
356
+ PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN
357
+ qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn
358
+ hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
359
+ BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs
360
+ MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN
361
+ I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY
362
+ NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
363
+ -----END CERTIFICATE-----
364
+
365
+ Equifax Secure eBusiness CA 1
366
+ =============================
367
+ -----BEGIN CERTIFICATE-----
368
+ MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
369
+ RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB
370
+ LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE
371
+ ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz
372
+ IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ
373
+ 1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a
374
+ IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk
375
+ MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW
376
+ Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF
377
+ AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5
378
+ lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+
379
+ KpYrtWKmpj29f5JZzVoqgrI3eQ==
380
+ -----END CERTIFICATE-----
381
+
382
+ AddTrust Low-Value Services Root
383
+ ================================
384
+ -----BEGIN CERTIFICATE-----
385
+ MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
386
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
387
+ cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
388
+ CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
389
+ ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
390
+ AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
391
+ 54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
392
+ oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
393
+ Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
394
+ GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
395
+ HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
396
+ AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
397
+ RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
398
+ HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
399
+ ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
400
+ iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
401
+ eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
402
+ mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
403
+ ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
404
+ -----END CERTIFICATE-----
405
+
406
+ AddTrust External Root
407
+ ======================
408
+ -----BEGIN CERTIFICATE-----
409
+ MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
410
+ QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
411
+ VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
412
+ NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
413
+ cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
414
+ Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
415
+ +iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
416
+ Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
417
+ aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
418
+ 2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
419
+ 7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
420
+ BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
421
+ VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
422
+ VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
423
+ IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
424
+ j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
425
+ 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
426
+ e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
427
+ G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
428
+ -----END CERTIFICATE-----
429
+
430
+ AddTrust Public Services Root
431
+ =============================
432
+ -----BEGIN CERTIFICATE-----
433
+ MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
434
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
435
+ cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
436
+ BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
437
+ dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
438
+ AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
439
+ nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
440
+ d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
441
+ Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
442
+ HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
443
+ A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
444
+ /zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
445
+ FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
446
+ A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
447
+ JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
448
+ +YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
449
+ GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
450
+ Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
451
+ EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
452
+ -----END CERTIFICATE-----
453
+
454
+ AddTrust Qualified Certificates Root
455
+ ====================================
456
+ -----BEGIN CERTIFICATE-----
457
+ MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
458
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
459
+ cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
460
+ CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
461
+ IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
462
+ 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
463
+ 64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
464
+ KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
465
+ L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
466
+ wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
467
+ MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
468
+ BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
469
+ BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
470
+ azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
471
+ ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
472
+ GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
473
+ dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
474
+ RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
475
+ iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
476
+ -----END CERTIFICATE-----
477
+
478
+ Entrust Root Certification Authority
479
+ ====================================
480
+ -----BEGIN CERTIFICATE-----
481
+ MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
482
+ BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
483
+ b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
484
+ A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
485
+ MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
486
+ MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
487
+ Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
488
+ dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
489
+ ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
490
+ A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
491
+ Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
492
+ j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
493
+ rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
494
+ DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
495
+ MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
496
+ hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
497
+ A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
498
+ Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
499
+ v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
500
+ W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
501
+ tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
502
+ -----END CERTIFICATE-----
503
+
504
+ RSA Security 2048 v3
505
+ ====================
506
+ -----BEGIN CERTIFICATE-----
507
+ MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
508
+ ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
509
+ MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
510
+ BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
511
+ AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
512
+ Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
513
+ WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
514
+ KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
515
+ +Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
516
+ MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
517
+ FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
518
+ v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
519
+ 0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
520
+ VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
521
+ nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
522
+ pKnXwiJPZ9d37CAFYd4=
523
+ -----END CERTIFICATE-----
524
+
525
+ GeoTrust Global CA
526
+ ==================
527
+ -----BEGIN CERTIFICATE-----
528
+ MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
529
+ Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
530
+ MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
531
+ LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
532
+ CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
533
+ BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
534
+ 8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
535
+ T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
536
+ vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
537
+ AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
538
+ DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
539
+ zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
540
+ d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
541
+ mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
542
+ XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
543
+ Mw==
544
+ -----END CERTIFICATE-----
545
+
546
+ GeoTrust Global CA 2
547
+ ====================
548
+ -----BEGIN CERTIFICATE-----
549
+ MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
550
+ R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
551
+ MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
552
+ LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
553
+ ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
554
+ NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
555
+ LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
556
+ Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
557
+ HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
558
+ MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
559
+ K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
560
+ srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
561
+ ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
562
+ OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
563
+ x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
564
+ H4z1Ir+rzoPz4iIprn2DQKi6bA==
565
+ -----END CERTIFICATE-----
566
+
567
+ GeoTrust Universal CA
568
+ =====================
569
+ -----BEGIN CERTIFICATE-----
570
+ MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
571
+ R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
572
+ MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
573
+ Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
574
+ ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
575
+ JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
576
+ RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
577
+ 7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
578
+ 8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
579
+ qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
580
+ Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
581
+ Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
582
+ KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
583
+ ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
584
+ XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
585
+ hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
586
+ aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
587
+ qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
588
+ oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
589
+ xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
590
+ KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
591
+ DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
592
+ xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
593
+ p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
594
+ P/rmMuGNG2+k5o7Y+SlIis5z/iw=
595
+ -----END CERTIFICATE-----
596
+
597
+ GeoTrust Universal CA 2
598
+ =======================
599
+ -----BEGIN CERTIFICATE-----
600
+ MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
601
+ R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
602
+ MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
603
+ SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
604
+ A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
605
+ DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
606
+ j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
607
+ JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
608
+ QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
609
+ WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
610
+ 20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
611
+ ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
612
+ SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
613
+ 8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
614
+ +/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
615
+ BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
616
+ dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
617
+ 4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
618
+ mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
619
+ A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
620
+ Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
621
+ pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
622
+ FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
623
+ gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
624
+ X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
625
+ -----END CERTIFICATE-----
626
+
627
+ America Online Root Certification Authority 1
628
+ =============================================
629
+ -----BEGIN CERTIFICATE-----
630
+ MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
631
+ QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
632
+ Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG
633
+ A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
634
+ T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD
635
+ ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG
636
+ v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z
637
+ DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh
638
+ sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP
639
+ 8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T
640
+ AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z
641
+ o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf
642
+ GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF
643
+ VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft
644
+ 3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g
645
+ Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
646
+ sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
647
+ -----END CERTIFICATE-----
648
+
649
+ America Online Root Certification Authority 2
650
+ =============================================
651
+ -----BEGIN CERTIFICATE-----
652
+ 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
677
+ cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk=
678
+ -----END CERTIFICATE-----
679
+
680
+ Visa eCommerce Root
681
+ ===================
682
+ -----BEGIN CERTIFICATE-----
683
+ MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
684
+ EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
685
+ QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
686
+ WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
687
+ VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
688
+ bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
689
+ F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
690
+ RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
691
+ TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
692
+ /k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
693
+ GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
694
+ MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
695
+ CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
696
+ YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
697
+ zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
698
+ YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
699
+ 398znM/jra6O1I7mT1GvFpLgXPYHDw==
700
+ -----END CERTIFICATE-----
701
+
702
+ Certum Root CA
703
+ ==============
704
+ -----BEGIN CERTIFICATE-----
705
+ MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
706
+ ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
707
+ Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
708
+ by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
709
+ wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
710
+ kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
711
+ 89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
712
+ Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
713
+ NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
714
+ hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
715
+ GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
716
+ GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
717
+ 0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
718
+ qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
719
+ -----END CERTIFICATE-----
720
+
721
+ Comodo AAA Services root
722
+ ========================
723
+ -----BEGIN CERTIFICATE-----
724
+ MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
725
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
726
+ TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
727
+ MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
728
+ c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
729
+ BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
730
+ ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
731
+ C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
732
+ i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
733
+ Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
734
+ Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
735
+ Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
736
+ BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
737
+ cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
738
+ LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
739
+ 7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
740
+ Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
741
+ 8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
742
+ 12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
743
+ -----END CERTIFICATE-----
744
+
745
+ Comodo Secure Services root
746
+ ===========================
747
+ -----BEGIN CERTIFICATE-----
748
+ MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
749
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
750
+ TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
751
+ MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
752
+ Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
753
+ BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
754
+ ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
755
+ 9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
756
+ rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
757
+ oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
758
+ p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
759
+ FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
760
+ gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
761
+ YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
762
+ aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
763
+ 4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
764
+ Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
765
+ DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
766
+ pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
767
+ RR3B7Hzs/Sk=
768
+ -----END CERTIFICATE-----
769
+
770
+ Comodo Trusted Services root
771
+ ============================
772
+ -----BEGIN CERTIFICATE-----
773
+ MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
774
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
775
+ TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
776
+ MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
777
+ bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
778
+ IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
779
+ AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
780
+ 3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
781
+ /9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
782
+ juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
783
+ ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
784
+ DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
785
+ /zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
786
+ ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
787
+ cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
788
+ uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
789
+ pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
790
+ BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
791
+ R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
792
+ 9y5Xt5hwXsjEeLBi
793
+ -----END CERTIFICATE-----
794
+
795
+ QuoVadis Root CA
796
+ ================
797
+ -----BEGIN CERTIFICATE-----
798
+ MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
799
+ ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
800
+ eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
801
+ MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
802
+ cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
803
+ EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
804
+ AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
805
+ J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
806
+ F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
807
+ YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
808
+ AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
809
+ PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
810
+ ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
811
+ MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
812
+ YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
813
+ ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
814
+ Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
815
+ Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
816
+ BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
817
+ FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
818
+ aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
819
+ tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
820
+ fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
821
+ LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
822
+ gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
823
+ 5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
824
+ 5nrQNiOKSnQ2+Q==
825
+ -----END CERTIFICATE-----
826
+
827
+ QuoVadis Root CA 2
828
+ ==================
829
+ -----BEGIN CERTIFICATE-----
830
+ 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
856
+ -----END CERTIFICATE-----
857
+
858
+ QuoVadis Root CA 3
859
+ ==================
860
+ -----BEGIN CERTIFICATE-----
861
+ MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
862
+ EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
863
+ OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
864
+ aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
865
+ DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
866
+ DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
867
+ KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
868
+ DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
869
+ BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
870
+ p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
871
+ nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
872
+ MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
873
+ Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
874
+ uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
875
+ BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
876
+ YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
877
+ aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
878
+ BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
879
+ VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
880
+ ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
881
+ AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
882
+ qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
883
+ hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
884
+ POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
885
+ Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
886
+ 8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
887
+ bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
888
+ g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
889
+ vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
890
+ qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
891
+ -----END CERTIFICATE-----
892
+
893
+ Security Communication Root CA
894
+ ==============================
895
+ -----BEGIN CERTIFICATE-----
896
+ MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
897
+ U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
898
+ HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
899
+ U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
900
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
901
+ 8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
902
+ DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
903
+ 5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
904
+ DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
905
+ JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
906
+ DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
907
+ 0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
908
+ mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
909
+ s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
910
+ 6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
911
+ FL39vmwLAw==
912
+ -----END CERTIFICATE-----
913
+
914
+ Sonera Class 2 Root CA
915
+ ======================
916
+ -----BEGIN CERTIFICATE-----
917
+ MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
918
+ U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
919
+ NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
920
+ IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
921
+ /Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
922
+ dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
923
+ f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
924
+ tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
925
+ nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
926
+ XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
927
+ 0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
928
+ cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
929
+ Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
930
+ EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
931
+ llpwrN9M
932
+ -----END CERTIFICATE-----
933
+
934
+ Staat der Nederlanden Root CA
935
+ =============================
936
+ -----BEGIN CERTIFICATE-----
937
+ MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
938
+ ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
939
+ Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
940
+ HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
941
+ bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
942
+ vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
943
+ jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
944
+ C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
945
+ vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
946
+ 22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
947
+ HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
948
+ dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
949
+ BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
950
+ EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
951
+ MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
952
+ nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
953
+ iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
954
+ -----END CERTIFICATE-----
955
+
956
+ TDC Internet Root CA
957
+ ====================
958
+ -----BEGIN CERTIFICATE-----
959
+ MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE
960
+ ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx
961
+ NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu
962
+ ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
963
+ MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j
964
+ xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL
965
+ znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc
966
+ 5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6
967
+ otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI
968
+ AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM
969
+ VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM
970
+ MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC
971
+ AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe
972
+ UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G
973
+ CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m
974
+ gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
975
+ 2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb
976
+ O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU
977
+ Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l
978
+ -----END CERTIFICATE-----
979
+
980
+ UTN DATACorp SGC Root CA
981
+ ========================
982
+ -----BEGIN CERTIFICATE-----
983
+ MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE
984
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
985
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ
986
+ BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa
987
+ MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
988
+ HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy
989
+ dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC
990
+ AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys
991
+ raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo
992
+ wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA
993
+ 9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv
994
+ 33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud
995
+ DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9
996
+ BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD
997
+ LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
998
+ DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
999
+ Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0
1000
+ I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx
1001
+ EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP
1002
+ DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
1003
+ -----END CERTIFICATE-----
1004
+
1005
+ UTN USERFirst Hardware Root CA
1006
+ ==============================
1007
+ -----BEGIN CERTIFICATE-----
1008
+ MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
1009
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
1010
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
1011
+ BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
1012
+ OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
1013
+ eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
1014
+ ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
1015
+ DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
1016
+ wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
1017
+ tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
1018
+ i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
1019
+ Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
1020
+ gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
1021
+ lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
1022
+ UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
1023
+ BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
1024
+ //bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
1025
+ XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
1026
+ lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
1027
+ iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
1028
+ nfhmqA==
1029
+ -----END CERTIFICATE-----
1030
+
1031
+ Camerfirma Chambers of Commerce Root
1032
+ ====================================
1033
+ -----BEGIN CERTIFICATE-----
1034
+ MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
1035
+ QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
1036
+ ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
1037
+ NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
1038
+ cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
1039
+ MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
1040
+ AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
1041
+ xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
1042
+ NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
1043
+ DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
1044
+ d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
1045
+ EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
1046
+ cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
1047
+ AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
1048
+ bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
1049
+ VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
1050
+ aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
1051
+ fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
1052
+ L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
1053
+ UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
1054
+ ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
1055
+ erfutGWaIZDgqtCYvDi1czyL+Nw=
1056
+ -----END CERTIFICATE-----
1057
+
1058
+ Camerfirma Global Chambersign Root
1059
+ ==================================
1060
+ -----BEGIN CERTIFICATE-----
1061
+ MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
1062
+ QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
1063
+ ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
1064
+ NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
1065
+ YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
1066
+ MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
1067
+ ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
1068
+ 1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
1069
+ by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
1070
+ 6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
1071
+ 8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
1072
+ BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
1073
+ aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
1074
+ Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
1075
+ aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
1076
+ ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
1077
+ bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
1078
+ PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
1079
+ gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
1080
+ PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
1081
+ IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
1082
+ t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
1083
+ -----END CERTIFICATE-----
1084
+
1085
+ NetLock Notary (Class A) Root
1086
+ =============================
1087
+ -----BEGIN CERTIFICATE-----
1088
+ MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
1089
+ EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
1090
+ dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
1091
+ ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
1092
+ DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
1093
+ EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
1094
+ VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
1095
+ cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
1096
+ D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
1097
+ z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
1098
+ /tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
1099
+ tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
1100
+ 4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
1101
+ A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
1102
+ Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
1103
+ bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
1104
+ IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
1105
+ LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
1106
+ ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
1107
+ IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
1108
+ IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
1109
+ b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
1110
+ bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
1111
+ Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
1112
+ bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
1113
+ ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
1114
+ ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
1115
+ CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
1116
+ KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
1117
+ 8CgHrTwXZoi1/baI
1118
+ -----END CERTIFICATE-----
1119
+
1120
+ NetLock Business (Class B) Root
1121
+ ===============================
1122
+ -----BEGIN CERTIFICATE-----
1123
+ MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
1124
+ CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
1125
+ BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg
1126
+ VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD
1127
+ VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv
1128
+ bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg
1129
+ VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
1130
+ iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S
1131
+ o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr
1132
+ 1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
1133
+ HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ
1134
+ RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh
1135
+ dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0
1136
+ ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv
1137
+ c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg
1138
+ YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
1139
+ c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz
1140
+ Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA
1141
+ bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl
1142
+ IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2
1143
+ YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj
1144
+ cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM
1145
+ 43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR
1146
+ stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI
1147
+ -----END CERTIFICATE-----
1148
+
1149
+ NetLock Express (Class C) Root
1150
+ ==============================
1151
+ -----BEGIN CERTIFICATE-----
1152
+ MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT
1153
+ CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
1154
+ BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD
1155
+ KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ
1156
+ BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
1157
+ dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j
1158
+ ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB
1159
+ jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z
1160
+ W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63
1161
+ euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw
1162
+ DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN
1163
+ RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn
1164
+ YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB
1165
+ IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i
1166
+ aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0
1167
+ ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
1168
+ ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo
1169
+ dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y
1170
+ emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k
1171
+ IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ
1172
+ UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg
1173
+ YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2
1174
+ xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW
1175
+ gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A==
1176
+ -----END CERTIFICATE-----
1177
+
1178
+ XRamp Global CA Root
1179
+ ====================
1180
+ -----BEGIN CERTIFICATE-----
1181
+ MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
1182
+ BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
1183
+ dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
1184
+ dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
1185
+ HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
1186
+ U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
1187
+ dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
1188
+ IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
1189
+ foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
1190
+ zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
1191
+ AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
1192
+ xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
1193
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
1194
+ oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
1195
+ AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
1196
+ /Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
1197
+ qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
1198
+ nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
1199
+ 8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
1200
+ -----END CERTIFICATE-----
1201
+
1202
+ Go Daddy Class 2 CA
1203
+ ===================
1204
+ -----BEGIN CERTIFICATE-----
1205
+ MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
1206
+ VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
1207
+ ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
1208
+ A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
1209
+ RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
1210
+ ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
1211
+ 2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
1212
+ qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
1213
+ YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
1214
+ vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
1215
+ BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
1216
+ atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
1217
+ MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
1218
+ A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
1219
+ PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
1220
+ I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
1221
+ HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
1222
+ Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
1223
+ vZ8=
1224
+ -----END CERTIFICATE-----
1225
+
1226
+ Starfield Class 2 CA
1227
+ ====================
1228
+ -----BEGIN CERTIFICATE-----
1229
+ MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
1230
+ U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
1231
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
1232
+ MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
1233
+ A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
1234
+ SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
1235
+ bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
1236
+ JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
1237
+ epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
1238
+ F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
1239
+ MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
1240
+ hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
1241
+ bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
1242
+ QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
1243
+ afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
1244
+ PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
1245
+ xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
1246
+ KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
1247
+ QBFGmh95DmK/D5fs4C8fF5Q=
1248
+ -----END CERTIFICATE-----
1249
+
1250
+ StartCom Certification Authority
1251
+ ================================
1252
+ -----BEGIN CERTIFICATE-----
1253
+ MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
1254
+ U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
1255
+ ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
1256
+ NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
1257
+ LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
1258
+ U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
1259
+ ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
1260
+ o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
1261
+ Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
1262
+ eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
1263
+ 2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
1264
+ 6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
1265
+ osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
1266
+ untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
1267
+ UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
1268
+ 37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
1269
+ FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
1270
+ Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
1271
+ YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
1272
+ AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
1273
+ Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
1274
+ U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
1275
+ LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
1276
+ cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
1277
+ cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
1278
+ dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
1279
+ AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
1280
+ 3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
1281
+ vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
1282
+ fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
1283
+ fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
1284
+ EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
1285
+ yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
1286
+ 1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
1287
+ lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
1288
+ g14=
1289
+ -----END CERTIFICATE-----
1290
+
1291
+ Taiwan GRCA
1292
+ ===========
1293
+ -----BEGIN CERTIFICATE-----
1294
+ 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
1319
+ -----END CERTIFICATE-----
1320
+
1321
+ Firmaprofesional Root CA
1322
+ ========================
1323
+ -----BEGIN CERTIFICATE-----
1324
+ MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT
1325
+ GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp
1326
+ Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA
1327
+ ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL
1328
+ MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT
1329
+ OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2
1330
+ ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB
1331
+ AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V
1332
+ j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH
1333
+ lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf
1334
+ 3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8
1335
+ NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww
1336
+ KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG
1337
+ AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud
1338
+ DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD
1339
+ ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
1340
+ u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf
1341
+ wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm
1342
+ 7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG
1343
+ VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA=
1344
+ -----END CERTIFICATE-----
1345
+
1346
+ Swisscom Root CA 1
1347
+ ==================
1348
+ -----BEGIN CERTIFICATE-----
1349
+ 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
1375
+ NY6E0F/6MBr1mmz0DlP5OlvRHA==
1376
+ -----END CERTIFICATE-----
1377
+
1378
+ DigiCert Assured ID Root CA
1379
+ ===========================
1380
+ -----BEGIN CERTIFICATE-----
1381
+ MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
1382
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
1383
+ IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
1384
+ MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
1385
+ ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
1386
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
1387
+ 9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
1388
+ UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
1389
+ /lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
1390
+ oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
1391
+ GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
1392
+ 66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
1393
+ hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
1394
+ EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
1395
+ SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
1396
+ 8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
1397
+ +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
1398
+ -----END CERTIFICATE-----
1399
+
1400
+ DigiCert Global Root CA
1401
+ =======================
1402
+ -----BEGIN CERTIFICATE-----
1403
+ MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
1404
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
1405
+ HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
1406
+ MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
1407
+ dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
1408
+ hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
1409
+ TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
1410
+ BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
1411
+ 4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
1412
+ 7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
1413
+ o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
1414
+ 8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
1415
+ BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
1416
+ EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
1417
+ tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
1418
+ UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
1419
+ CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
1420
+ -----END CERTIFICATE-----
1421
+
1422
+ DigiCert High Assurance EV Root CA
1423
+ ==================================
1424
+ -----BEGIN CERTIFICATE-----
1425
+ MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
1426
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
1427
+ KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
1428
+ MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
1429
+ MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
1430
+ Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
1431
+ Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
1432
+ OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
1433
+ MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
1434
+ NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
1435
+ h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
1436
+ Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
1437
+ JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
1438
+ V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
1439
+ myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
1440
+ mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
1441
+ vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
1442
+ -----END CERTIFICATE-----
1443
+
1444
+ Certplus Class 2 Primary CA
1445
+ ===========================
1446
+ -----BEGIN CERTIFICATE-----
1447
+ MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
1448
+ BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
1449
+ OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
1450
+ dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
1451
+ ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
1452
+ 5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
1453
+ Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
1454
+ YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
1455
+ e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
1456
+ CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
1457
+ YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
1458
+ L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
1459
+ P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
1460
+ TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
1461
+ 7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
1462
+ //1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
1463
+ l7+ijrRU
1464
+ -----END CERTIFICATE-----
1465
+
1466
+ DST Root CA X3
1467
+ ==============
1468
+ -----BEGIN CERTIFICATE-----
1469
+ MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
1470
+ ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
1471
+ DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
1472
+ cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
1473
+ ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
1474
+ rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
1475
+ UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
1476
+ xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
1477
+ utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
1478
+ AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
1479
+ MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
1480
+ dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
1481
+ GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
1482
+ RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
1483
+ fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
1484
+ -----END CERTIFICATE-----
1485
+
1486
+ DST ACES CA X6
1487
+ ==============
1488
+ -----BEGIN CERTIFICATE-----
1489
+ MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
1490
+ EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
1491
+ MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
1492
+ MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
1493
+ CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
1494
+ AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
1495
+ DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
1496
+ pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
1497
+ GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
1498
+ MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
1499
+ EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
1500
+ Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
1501
+ dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
1502
+ CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
1503
+ 5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
1504
+ Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
1505
+ nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
1506
+ vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
1507
+ oKfN5XozNmr6mis=
1508
+ -----END CERTIFICATE-----
1509
+
1510
+ TURKTRUST Certificate Services Provider Root 1
1511
+ ==============================================
1512
+ -----BEGIN CERTIFICATE-----
1513
+ MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
1514
+ bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP
1515
+ MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0
1516
+ acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx
1517
+ MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg
1518
+ U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB
1519
+ TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC
1520
+ aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC
1521
+ AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX
1522
+ yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i
1523
+ Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ
1524
+ 8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4
1525
+ W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME
1526
+ BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46
1527
+ sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE
1528
+ q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
1529
+ B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY
1530
+ nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H
1531
+ -----END CERTIFICATE-----
1532
+
1533
+ TURKTRUST Certificate Services Provider Root 2
1534
+ ==============================================
1535
+ -----BEGIN CERTIFICATE-----
1536
+ MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF
1537
+ bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
1538
+ MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
1539
+ QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN
1540
+ MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr
1541
+ dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G
1542
+ A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
1543
+ acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G
1544
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe
1545
+ LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI
1546
+ x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g
1547
+ QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr
1548
+ 5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB
1549
+ AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G
1550
+ A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt
1551
+ Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
1552
+ Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+
1553
+ hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P
1554
+ 9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5
1555
+ UrbnBEI=
1556
+ -----END CERTIFICATE-----
1557
+
1558
+ SwissSign Gold CA - G2
1559
+ ======================
1560
+ -----BEGIN CERTIFICATE-----
1561
+ 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
1587
+ -----END CERTIFICATE-----
1588
+
1589
+ SwissSign Silver CA - G2
1590
+ ========================
1591
+ -----BEGIN CERTIFICATE-----
1592
+ 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
1618
+ -----END CERTIFICATE-----
1619
+
1620
+ GeoTrust Primary Certification Authority
1621
+ ========================================
1622
+ -----BEGIN CERTIFICATE-----
1623
+ MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
1624
+ EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
1625
+ ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
1626
+ CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
1627
+ cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
1628
+ CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
1629
+ b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
1630
+ nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
1631
+ RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
1632
+ tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
1633
+ AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
1634
+ hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
1635
+ Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
1636
+ NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
1637
+ Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
1638
+ 1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
1639
+ -----END CERTIFICATE-----
1640
+
1641
+ thawte Primary Root CA
1642
+ ======================
1643
+ -----BEGIN CERTIFICATE-----
1644
+ MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
1645
+ BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
1646
+ aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
1647
+ cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
1648
+ MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
1649
+ SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
1650
+ KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
1651
+ FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
1652
+ oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
1653
+ 1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
1654
+ q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
1655
+ aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
1656
+ afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
1657
+ VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
1658
+ AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
1659
+ uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
1660
+ xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
1661
+ jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
1662
+ z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
1663
+ -----END CERTIFICATE-----
1664
+
1665
+ VeriSign Class 3 Public Primary Certification Authority - G5
1666
+ ============================================================
1667
+ -----BEGIN CERTIFICATE-----
1668
+ MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
1669
+ BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
1670
+ ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
1671
+ IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
1672
+ ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
1673
+ yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
1674
+ biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
1675
+ dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
1676
+ YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
1677
+ ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
1678
+ j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
1679
+ Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
1680
+ Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
1681
+ fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
1682
+ BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
1683
+ Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
1684
+ aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
1685
+ SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
1686
+ X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
1687
+ KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
1688
+ Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
1689
+ ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
1690
+ -----END CERTIFICATE-----
1691
+
1692
+ SecureTrust CA
1693
+ ==============
1694
+ -----BEGIN CERTIFICATE-----
1695
+ MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
1696
+ EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
1697
+ dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
1698
+ BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
1699
+ ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
1700
+ OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
1701
+ DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
1702
+ GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
1703
+ 01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
1704
+ ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
1705
+ BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
1706
+ aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
1707
+ KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
1708
+ SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
1709
+ mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
1710
+ nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
1711
+ 3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
1712
+ -----END CERTIFICATE-----
1713
+
1714
+ Secure Global CA
1715
+ ================
1716
+ -----BEGIN CERTIFICATE-----
1717
+ MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
1718
+ EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
1719
+ bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
1720
+ MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
1721
+ Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
1722
+ YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
1723
+ bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
1724
+ 8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
1725
+ HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
1726
+ 0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
1727
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
1728
+ oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
1729
+ MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
1730
+ OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
1731
+ CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
1732
+ 3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
1733
+ f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
1734
+ -----END CERTIFICATE-----
1735
+
1736
+ COMODO Certification Authority
1737
+ ==============================
1738
+ -----BEGIN CERTIFICATE-----
1739
+ MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
1740
+ BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
1741
+ A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
1742
+ dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
1743
+ MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
1744
+ T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
1745
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
1746
+ +7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
1747
+ xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
1748
+ 4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
1749
+ 1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
1750
+ rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
1751
+ BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
1752
+ b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
1753
+ AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
1754
+ OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
1755
+ RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
1756
+ IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
1757
+ +8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
1758
+ -----END CERTIFICATE-----
1759
+
1760
+ Network Solutions Certificate Authority
1761
+ =======================================
1762
+ -----BEGIN CERTIFICATE-----
1763
+ MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
1764
+ EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
1765
+ IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
1766
+ MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
1767
+ MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
1768
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
1769
+ jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
1770
+ aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
1771
+ crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
1772
+ /Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
1773
+ AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
1774
+ BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
1775
+ bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
1776
+ A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
1777
+ 4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
1778
+ GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
1779
+ wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
1780
+ ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
1781
+ -----END CERTIFICATE-----
1782
+
1783
+ WellsSecure Public Root Certificate Authority
1784
+ =============================================
1785
+ -----BEGIN CERTIFICATE-----
1786
+ MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
1787
+ F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
1788
+ NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
1789
+ MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
1790
+ bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
1791
+ VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
1792
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
1793
+ iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
1794
+ i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
1795
+ bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
1796
+ K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
1797
+ AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
1798
+ cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
1799
+ lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
1800
+ i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
1801
+ GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
1802
+ Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
1803
+ K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
1804
+ bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
1805
+ qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
1806
+ E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
1807
+ tylv2G0xffX8oRAHh84vWdw+WNs=
1808
+ -----END CERTIFICATE-----
1809
+
1810
+ COMODO ECC Certification Authority
1811
+ ==================================
1812
+ -----BEGIN CERTIFICATE-----
1813
+ MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
1814
+ R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
1815
+ ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
1816
+ dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
1817
+ GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
1818
+ Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
1819
+ b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
1820
+ 4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
1821
+ wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
1822
+ BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
1823
+ FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
1824
+ U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
1825
+ -----END CERTIFICATE-----
1826
+
1827
+ IGC/A
1828
+ =====
1829
+ -----BEGIN CERTIFICATE-----
1830
+ MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD
1831
+ VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE
1832
+ Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy
1833
+ MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI
1834
+ EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT
1835
+ STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB
1836
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2
1837
+ TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW
1838
+ So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy
1839
+ HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd
1840
+ frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ
1841
+ tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB
1842
+ egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC
1843
+ iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK
1844
+ q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q
1845
+ MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
1846
+ Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI
1847
+ lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF
1848
+ 0mBWWg==
1849
+ -----END CERTIFICATE-----
1850
+
1851
+ Security Communication EV RootCA1
1852
+ =================================
1853
+ -----BEGIN CERTIFICATE-----
1854
+ MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
1855
+ U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh
1856
+ dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE
1857
+ BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl
1858
+ Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
1859
+ AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO
1860
+ /VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX
1861
+ WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z
1862
+ ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4
1863
+ bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK
1864
+ 9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
1865
+ SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm
1866
+ iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG
1867
+ Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW
1868
+ mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW
1869
+ T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
1870
+ -----END CERTIFICATE-----
1871
+
1872
+ OISTE WISeKey Global Root GA CA
1873
+ ===============================
1874
+ -----BEGIN CERTIFICATE-----
1875
+ MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
1876
+ BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
1877
+ A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
1878
+ bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
1879
+ VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
1880
+ IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
1881
+ IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
1882
+ Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
1883
+ Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
1884
+ d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
1885
+ /yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
1886
+ LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
1887
+ AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
1888
+ KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
1889
+ MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
1890
+ +vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
1891
+ hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
1892
+ okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
1893
+ -----END CERTIFICATE-----
1894
+
1895
+ Microsec e-Szigno Root CA
1896
+ =========================
1897
+ -----BEGIN CERTIFICATE-----
1898
+ MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE
1899
+ BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL
1900
+ EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0
1901
+ MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz
1902
+ dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT
1903
+ GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
1904
+ AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG
1905
+ d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N
1906
+ oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc
1907
+ QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ
1908
+ PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb
1909
+ MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG
1910
+ IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD
1911
+ VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3
1912
+ LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A
1913
+ dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
1914
+ AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA
1915
+ 4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg
1916
+ AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA
1917
+ egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6
1918
+ Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO
1919
+ PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv
1920
+ c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h
1921
+ cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw
1922
+ IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT
1923
+ WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV
1924
+ MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER
1925
+ MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp
1926
+ Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal
1927
+ HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT
1928
+ nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE
1929
+ aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
1930
+ 86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK
1931
+ yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB
1932
+ S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
1933
+ -----END CERTIFICATE-----
1934
+
1935
+ Certigna
1936
+ ========
1937
+ -----BEGIN CERTIFICATE-----
1938
+ MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
1939
+ EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
1940
+ MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
1941
+ Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
1942
+ XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
1943
+ GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
1944
+ ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
1945
+ DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
1946
+ Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
1947
+ tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
1948
+ BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
1949
+ SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
1950
+ hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
1951
+ ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
1952
+ PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
1953
+ 1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
1954
+ WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
1955
+ -----END CERTIFICATE-----
1956
+
1957
+ AC Ra\xC3\xADz Certic\xC3\xA1mara S.A.
1958
+ ======================================
1959
+ -----BEGIN CERTIFICATE-----
1960
+ MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNVBAYT
1961
+ AkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRpZmljYWNpw7NuIERpZ2l0YWwg
1962
+ LSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwaQUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4w
1963
+ HhcNMDYxMTI3MjA0NjI5WhcNMzAwNDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+
1964
+ U29jaWVkYWQgQ2FtZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJh
1965
+ IFMuQS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkqhkiG9w0B
1966
+ AQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeGqentLhM0R7LQcNzJPNCN
1967
+ yu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzLfDe3fezTf3MZsGqy2IiKLUV0qPezuMDU
1968
+ 2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQY5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU3
1969
+ 4ojC2I+GdV75LaeHM/J4Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP
1970
+ 2yYe68yQ54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+bMMCm
1971
+ 8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48jilSH5L887uvDdUhf
1972
+ HjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++EjYfDIJss2yKHzMI+ko6Kh3VOz3vCa
1973
+ Mh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/ztA/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK
1974
+ 5lw1omdMEWux+IBkAC1vImHFrEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1b
1975
+ czwmPS9KvqfJpxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
1976
+ AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCBlTCBkgYEVR0g
1977
+ ADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFyYS5jb20vZHBjLzBaBggrBgEF
1978
+ BQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW507WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2Ug
1979
+ cHVlZGVuIGVuY29udHJhciBlbiBsYSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEf
1980
+ AygPU3zmpFmps4p6xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuX
1981
+ EpBcunvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/Jre7Ir5v
1982
+ /zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dpezy4ydV/NgIlqmjCMRW3
1983
+ MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42gzmRkBDI8ck1fj+404HGIGQatlDCIaR4
1984
+ 3NAvO2STdPCWkPHv+wlaNECW8DYSwaN0jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wk
1985
+ eZBWN7PGKX6jD/EpOe9+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f
1986
+ /RWmnkJDW2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/RL5h
1987
+ RqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35rMDOhYil/SrnhLecU
1988
+ Iw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxkBYn8eNZcLCZDqQ==
1989
+ -----END CERTIFICATE-----
1990
+
1991
+ TC TrustCenter Class 2 CA II
1992
+ ============================
1993
+ -----BEGIN CERTIFICATE-----
1994
+ MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
1995
+ REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
1996
+ IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw
1997
+ MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
1998
+ c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE
1999
+ AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
2000
+ AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw
2001
+ IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2
2002
+ xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ
2003
+ Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u
2004
+ SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB
2005
+ /wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB
2006
+ 7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
2007
+ Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
2008
+ cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
2009
+ SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
2010
+ TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G
2011
+ dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ
2012
+ KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj
2013
+ TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP
2014
+ JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk
2015
+ vQ==
2016
+ -----END CERTIFICATE-----
2017
+
2018
+ TC TrustCenter Class 3 CA II
2019
+ ============================
2020
+ -----BEGIN CERTIFICATE-----
2021
+ MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
2022
+ REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
2023
+ IENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYw
2024
+ MTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
2025
+ c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UE
2026
+ AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
2027
+ AQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJWHt4bNwcwIi9v8Qbxq63W
2028
+ yKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+QVl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo
2029
+ 6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZ
2030
+ uV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk
2031
+ 2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB
2032
+ /wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB
2033
+ 7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
2034
+ Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
2035
+ cnVzdENlbnRlciUyMENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
2036
+ SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
2037
+ TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzE
2038
+ O2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8
2039
+ yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9
2040
+ IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal
2041
+ 092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc
2042
+ 5A==
2043
+ -----END CERTIFICATE-----
2044
+
2045
+ TC TrustCenter Universal CA I
2046
+ =============================
2047
+ -----BEGIN CERTIFICATE-----
2048
+ MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC
2049
+ REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
2050
+ IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN
2051
+ MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg
2052
+ VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw
2053
+ JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD
2054
+ ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC
2055
+ qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv
2056
+ xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw
2057
+ ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O
2058
+ gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j
2059
+ BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
2060
+ AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG
2061
+ 1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy
2062
+ vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3
2063
+ ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
2064
+ ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a
2065
+ 7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
2066
+ -----END CERTIFICATE-----
2067
+
2068
+ Deutsche Telekom Root CA 2
2069
+ ==========================
2070
+ -----BEGIN CERTIFICATE-----
2071
+ MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
2072
+ RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
2073
+ A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
2074
+ MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
2075
+ A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
2076
+ b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
2077
+ bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
2078
+ KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
2079
+ AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
2080
+ Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
2081
+ jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
2082
+ HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
2083
+ E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
2084
+ zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
2085
+ rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
2086
+ dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
2087
+ Cm26OWMohpLzGITY+9HPBVZkVw==
2088
+ -----END CERTIFICATE-----
2089
+
2090
+ ComSign Secured CA
2091
+ ==================
2092
+ -----BEGIN CERTIFICATE-----
2093
+ MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE
2094
+ AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w
2095
+ NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD
2096
+ QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
2097
+ ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs
2098
+ 49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH
2099
+ 7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB
2100
+ kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1
2101
+ 9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw
2102
+ AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t
2103
+ U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA
2104
+ j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC
2105
+ AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a
2106
+ BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp
2107
+ FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP
2108
+ 51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
2109
+ OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
2110
+ -----END CERTIFICATE-----
2111
+
2112
+ Cybertrust Global Root
2113
+ ======================
2114
+ -----BEGIN CERTIFICATE-----
2115
+ MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
2116
+ ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
2117
+ MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
2118
+ ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
2119
+ +Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
2120
+ 0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
2121
+ AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
2122
+ 89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
2123
+ 8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
2124
+ BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
2125
+ MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
2126
+ A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
2127
+ lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
2128
+ 5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
2129
+ hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
2130
+ X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
2131
+ WL1WMRJOEcgh4LMRkWXbtKaIOM5V
2132
+ -----END CERTIFICATE-----
2133
+
2134
+ ePKI Root Certification Authority
2135
+ =================================
2136
+ -----BEGIN CERTIFICATE-----
2137
+ MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG
2138
+ EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg
2139
+ Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx
2140
+ MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq
2141
+ MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B
2142
+ AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs
2143
+ IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi
2144
+ lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv
2145
+ qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX
2146
+ 12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O
2147
+ WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+
2148
+ ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao
2149
+ lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/
2150
+ vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi
2151
+ Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi
2152
+ MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
2153
+ ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0
2154
+ 1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq
2155
+ KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV
2156
+ xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP
2157
+ NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r
2158
+ GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE
2159
+ xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx
2160
+ gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy
2161
+ sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD
2162
+ BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=
2163
+ -----END CERTIFICATE-----
2164
+
2165
+ T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3
2166
+ =============================================================================================================================
2167
+ -----BEGIN CERTIFICATE-----
2168
+ MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH
2169
+ DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q
2170
+ aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry
2171
+ b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV
2172
+ BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg
2173
+ S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4
2174
+ MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl
2175
+ IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF
2176
+ n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl
2177
+ IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft
2178
+ dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl
2179
+ cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B
2180
+ AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO
2181
+ Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1
2182
+ xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR
2183
+ 6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
2184
+ hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd
2185
+ BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
2186
+ MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4
2187
+ N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT
2188
+ y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh
2189
+ LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
2190
+ dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
2191
+ -----END CERTIFICATE-----
2192
+
2193
+ Buypass Class 2 CA 1
2194
+ ====================
2195
+ -----BEGIN CERTIFICATE-----
2196
+ MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
2197
+ QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2
2198
+ MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
2199
+ c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI
2200
+ hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M
2201
+ cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83
2202
+ 0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4
2203
+ 0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R
2204
+ uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC
2205
+ MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P
2206
+ AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV
2207
+ 1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt
2208
+ 7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2
2209
+ fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w
2210
+ wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
2211
+ -----END CERTIFICATE-----
2212
+
2213
+ Buypass Class 3 CA 1
2214
+ ====================
2215
+ -----BEGIN CERTIFICATE-----
2216
+ MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
2217
+ QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1
2218
+ MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
2219
+ c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI
2220
+ hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx
2221
+ ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0
2222
+ n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia
2223
+ AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c
2224
+ 1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC
2225
+ MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P
2226
+ AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7
2227
+ pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA
2228
+ EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5
2229
+ htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj
2230
+ el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
2231
+ -----END CERTIFICATE-----
2232
+
2233
+ EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
2234
+ ==========================================================================
2235
+ -----BEGIN CERTIFICATE-----
2236
+ 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
2263
+ -----END CERTIFICATE-----
2264
+
2265
+ certSIGN ROOT CA
2266
+ ================
2267
+ -----BEGIN CERTIFICATE-----
2268
+ MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
2269
+ VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
2270
+ Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
2271
+ CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
2272
+ JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
2273
+ rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
2274
+ ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
2275
+ 0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
2276
+ AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
2277
+ Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
2278
+ AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
2279
+ SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
2280
+ x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
2281
+ vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
2282
+ TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
2283
+ -----END CERTIFICATE-----
2284
+
2285
+ CNNIC ROOT
2286
+ ==========
2287
+ -----BEGIN CERTIFICATE-----
2288
+ MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE
2289
+ ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw
2290
+ OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw
2291
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD
2292
+ o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz
2293
+ VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT
2294
+ VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or
2295
+ czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK
2296
+ y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC
2297
+ wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S
2298
+ lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5
2299
+ Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM
2300
+ O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8
2301
+ BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2
2302
+ G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m
2303
+ mxE=
2304
+ -----END CERTIFICATE-----
2305
+
2306
+ ApplicationCA - Japanese Government
2307
+ ===================================
2308
+ -----BEGIN CERTIFICATE-----
2309
+ MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT
2310
+ SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw
2311
+ MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl
2312
+ cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
2313
+ CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4
2314
+ fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN
2315
+ wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE
2316
+ jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu
2317
+ nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU
2318
+ WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV
2319
+ BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD
2320
+ vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs
2321
+ o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g
2322
+ /DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD
2323
+ io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW
2324
+ dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
2325
+ rosot4LKGAfmt1t06SAZf7IbiVQ=
2326
+ -----END CERTIFICATE-----
2327
+
2328
+ GeoTrust Primary Certification Authority - G3
2329
+ =============================================
2330
+ -----BEGIN CERTIFICATE-----
2331
+ MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
2332
+ BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
2333
+ IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
2334
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
2335
+ NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
2336
+ YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
2337
+ LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
2338
+ hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
2339
+ K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
2340
+ c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
2341
+ IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
2342
+ dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
2343
+ MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
2344
+ 2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
2345
+ cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
2346
+ Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
2347
+ AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
2348
+ t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
2349
+ -----END CERTIFICATE-----
2350
+
2351
+ thawte Primary Root CA - G2
2352
+ ===========================
2353
+ -----BEGIN CERTIFICATE-----
2354
+ MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
2355
+ VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
2356
+ IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
2357
+ Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
2358
+ MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
2359
+ b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
2360
+ IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
2361
+ LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
2362
+ 8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
2363
+ mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
2364
+ G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
2365
+ rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
2366
+ -----END CERTIFICATE-----
2367
+
2368
+ thawte Primary Root CA - G3
2369
+ ===========================
2370
+ -----BEGIN CERTIFICATE-----
2371
+ MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
2372
+ BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
2373
+ aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
2374
+ cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
2375
+ ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
2376
+ d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
2377
+ VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
2378
+ A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
2379
+ MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
2380
+ P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
2381
+ +BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
2382
+ 7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
2383
+ vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
2384
+ BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
2385
+ KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
2386
+ A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
2387
+ t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
2388
+ 8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
2389
+ er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
2390
+ -----END CERTIFICATE-----
2391
+
2392
+ GeoTrust Primary Certification Authority - G2
2393
+ =============================================
2394
+ -----BEGIN CERTIFICATE-----
2395
+ MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
2396
+ VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
2397
+ Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
2398
+ ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
2399
+ OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
2400
+ MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
2401
+ b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
2402
+ BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
2403
+ KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
2404
+ VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
2405
+ EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
2406
+ ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
2407
+ npaqBA+K
2408
+ -----END CERTIFICATE-----
2409
+
2410
+ VeriSign Universal Root Certification Authority
2411
+ ===============================================
2412
+ -----BEGIN CERTIFICATE-----
2413
+ MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
2414
+ BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
2415
+ ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
2416
+ IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
2417
+ IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
2418
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
2419
+ cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
2420
+ IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
2421
+ aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
2422
+ 1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
2423
+ MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
2424
+ 9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
2425
+ AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
2426
+ tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
2427
+ CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
2428
+ a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
2429
+ DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
2430
+ Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
2431
+ Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
2432
+ P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
2433
+ wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
2434
+ mJO37M2CYfE45k+XmCpajQ==
2435
+ -----END CERTIFICATE-----
2436
+
2437
+ VeriSign Class 3 Public Primary Certification Authority - G4
2438
+ ============================================================
2439
+ -----BEGIN CERTIFICATE-----
2440
+ MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
2441
+ VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
2442
+ b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
2443
+ ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
2444
+ YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
2445
+ MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
2446
+ cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
2447
+ b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
2448
+ IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
2449
+ Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
2450
+ rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
2451
+ /zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
2452
+ HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
2453
+ Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
2454
+ A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
2455
+ AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
2456
+ -----END CERTIFICATE-----
2457
+
2458
+ NetLock Arany (Class Gold) Főtanúsítvány
2459
+ ============================================
2460
+ -----BEGIN CERTIFICATE-----
2461
+ MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
2462
+ A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
2463
+ dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
2464
+ cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
2465
+ MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
2466
+ ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
2467
+ biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
2468
+ c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
2469
+ 0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
2470
+ /HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
2471
+ H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
2472
+ fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
2473
+ neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
2474
+ BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
2475
+ qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
2476
+ YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
2477
+ bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
2478
+ NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
2479
+ dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
2480
+ -----END CERTIFICATE-----
2481
+
2482
+ Staat der Nederlanden Root CA - G2
2483
+ ==================================
2484
+ -----BEGIN CERTIFICATE-----
2485
+ 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
2511
+ 66+KAQ==
2512
+ -----END CERTIFICATE-----
2513
+
2514
+ CA Disig
2515
+ ========
2516
+ -----BEGIN CERTIFICATE-----
2517
+ MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK
2518
+ QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw
2519
+ MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz
2520
+ bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3
2521
+ DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm
2522
+ GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD
2523
+ Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo
2524
+ hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt
2525
+ ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w
2526
+ gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P
2527
+ AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz
2528
+ aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff
2529
+ ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa
2530
+ BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t
2531
+ WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3
2532
+ mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
2533
+ CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K
2534
+ ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA
2535
+ 4Z7CRneC9VkGjCFMhwnN5ag=
2536
+ -----END CERTIFICATE-----
2537
+
2538
+ Juur-SK
2539
+ =======
2540
+ -----BEGIN CERTIFICATE-----
2541
+ MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA
2542
+ c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw
2543
+ DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG
2544
+ SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy
2545
+ aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
2546
+ ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf
2547
+ TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC
2548
+ +Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw
2549
+ UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa
2550
+ Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF
2551
+ MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD
2552
+ HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh
2553
+ AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA
2554
+ cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr
2555
+ AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw
2556
+ cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
2557
+ FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G
2558
+ A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo
2559
+ ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL
2560
+ abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678
2561
+ IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh
2562
+ Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2
2563
+ yyqcjg==
2564
+ -----END CERTIFICATE-----
2565
+
2566
+ Hongkong Post Root CA 1
2567
+ =======================
2568
+ -----BEGIN CERTIFICATE-----
2569
+ MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
2570
+ DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
2571
+ NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
2572
+ IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
2573
+ AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
2574
+ ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
2575
+ auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
2576
+ qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
2577
+ V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
2578
+ HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
2579
+ h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
2580
+ l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
2581
+ IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
2582
+ T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
2583
+ c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
2584
+ -----END CERTIFICATE-----
2585
+
2586
+ SecureSign RootCA11
2587
+ ===================
2588
+ -----BEGIN CERTIFICATE-----
2589
+ MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
2590
+ SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
2591
+ b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
2592
+ KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
2593
+ cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
2594
+ TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
2595
+ wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
2596
+ g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
2597
+ O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
2598
+ bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
2599
+ t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
2600
+ OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
2601
+ bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
2602
+ Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
2603
+ y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
2604
+ lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
2605
+ -----END CERTIFICATE-----
2606
+
2607
+ ACEDICOM Root
2608
+ =============
2609
+ -----BEGIN CERTIFICATE-----
2610
+ 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
2636
+ -----END CERTIFICATE-----
2637
+
2638
+ Verisign Class 3 Public Primary Certification Authority
2639
+ =======================================================
2640
+ -----BEGIN CERTIFICATE-----
2641
+ MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
2642
+ FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
2643
+ IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
2644
+ XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
2645
+ IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
2646
+ A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
2647
+ f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
2648
+ hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky
2649
+ CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX
2650
+ bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/
2651
+ D/xwzoiQ
2652
+ -----END CERTIFICATE-----
2653
+
2654
+ Microsec e-Szigno Root CA 2009
2655
+ ==============================
2656
+ -----BEGIN CERTIFICATE-----
2657
+ MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
2658
+ MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
2659
+ c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
2660
+ dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
2661
+ BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
2662
+ U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
2663
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
2664
+ fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
2665
+ 0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
2666
+ pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
2667
+ 1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
2668
+ AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
2669
+ QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
2670
+ FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
2671
+ lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
2672
+ I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
2673
+ tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
2674
+ yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
2675
+ LXpUq3DDfSJlgnCW
2676
+ -----END CERTIFICATE-----
2677
+
2678
+ E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi
2679
+ ===================================================
2680
+ -----BEGIN CERTIFICATE-----
2681
+ MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
2682
+ EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz
2683
+ ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3
2684
+ MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0
2685
+ cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u
2686
+ aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
2687
+ AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY
2688
+ 8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y
2689
+ jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI
2690
+ JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk
2691
+ 9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD
2692
+ AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG
2693
+ SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d
2694
+ F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq
2695
+ D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4
2696
+ Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq
2697
+ fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
2698
+ -----END CERTIFICATE-----
2699
+
2700
+ GlobalSign Root CA - R3
2701
+ =======================
2702
+ -----BEGIN CERTIFICATE-----
2703
+ MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
2704
+ YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
2705
+ bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
2706
+ aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
2707
+ bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
2708
+ iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
2709
+ 0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
2710
+ rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
2711
+ OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
2712
+ xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
2713
+ FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
2714
+ lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
2715
+ EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
2716
+ bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
2717
+ YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
2718
+ kpeDMdmztcpHWD9f
2719
+ -----END CERTIFICATE-----
2720
+
2721
+ Autoridad de Certificacion Firmaprofesional CIF A62634068
2722
+ =========================================================
2723
+ -----BEGIN CERTIFICATE-----
2724
+ MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
2725
+ BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
2726
+ MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
2727
+ QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
2728
+ NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
2729
+ Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
2730
+ B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
2731
+ 7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
2732
+ ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
2733
+ plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
2734
+ MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
2735
+ LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
2736
+ bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
2737
+ vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
2738
+ EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
2739
+ DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
2740
+ cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
2741
+ bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
2742
+ ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
2743
+ 51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
2744
+ R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
2745
+ T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
2746
+ Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
2747
+ osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
2748
+ crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
2749
+ saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
2750
+ KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
2751
+ 6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
2752
+ -----END CERTIFICATE-----
2753
+
2754
+ Izenpe.com
2755
+ ==========
2756
+ -----BEGIN CERTIFICATE-----
2757
+ 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
2784
+ -----END CERTIFICATE-----
2785
+
2786
+ Chambers of Commerce Root - 2008
2787
+ ================================
2788
+ -----BEGIN CERTIFICATE-----
2789
+ MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
2790
+ MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
2791
+ bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
2792
+ QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
2793
+ Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
2794
+ ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
2795
+ EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
2796
+ cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
2797
+ AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
2798
+ XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
2799
+ h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
2800
+ ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
2801
+ NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
2802
+ D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
2803
+ lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
2804
+ 0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
2805
+ ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
2806
+ EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
2807
+ G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
2808
+ BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
2809
+ bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
2810
+ bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
2811
+ CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
2812
+ AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
2813
+ wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
2814
+ 3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
2815
+ RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
2816
+ M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
2817
+ YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
2818
+ 9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
2819
+ zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
2820
+ nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
2821
+ OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
2822
+ -----END CERTIFICATE-----
2823
+
2824
+ Global Chambersign Root - 2008
2825
+ ==============================
2826
+ -----BEGIN CERTIFICATE-----
2827
+ MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
2828
+ MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
2829
+ bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
2830
+ QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
2831
+ NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
2832
+ Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
2833
+ QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
2834
+ aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
2835
+ VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
2836
+ XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
2837
+ ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
2838
+ /gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
2839
+ TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
2840
+ H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
2841
+ Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
2842
+ HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
2843
+ wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
2844
+ AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
2845
+ BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
2846
+ BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
2847
+ aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
2848
+ aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
2849
+ 1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
2850
+ dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
2851
+ /5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
2852
+ ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
2853
+ dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
2854
+ 9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
2855
+ foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
2856
+ qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
2857
+ P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
2858
+ c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
2859
+ 09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
2860
+ -----END CERTIFICATE-----
2861
+
2862
+ Go Daddy Root Certificate Authority - G2
2863
+ ========================================
2864
+ -----BEGIN CERTIFICATE-----
2865
+ MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
2866
+ B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
2867
+ MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
2868
+ MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
2869
+ b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
2870
+ A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
2871
+ hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
2872
+ 9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
2873
+ +qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
2874
+ fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
2875
+ NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
2876
+ MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
2877
+ BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
2878
+ vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
2879
+ 5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
2880
+ N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
2881
+ LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
2882
+ -----END CERTIFICATE-----
2883
+
2884
+ Starfield Root Certificate Authority - G2
2885
+ =========================================
2886
+ -----BEGIN CERTIFICATE-----
2887
+ MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
2888
+ B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
2889
+ b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
2890
+ eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
2891
+ DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
2892
+ VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
2893
+ dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
2894
+ W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
2895
+ bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
2896
+ N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
2897
+ ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
2898
+ JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
2899
+ AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
2900
+ TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
2901
+ 4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
2902
+ F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
2903
+ pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
2904
+ c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
2905
+ -----END CERTIFICATE-----
2906
+
2907
+ Starfield Services Root Certificate Authority - G2
2908
+ ==================================================
2909
+ -----BEGIN CERTIFICATE-----
2910
+ MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
2911
+ B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
2912
+ b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
2913
+ IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
2914
+ BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
2915
+ dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
2916
+ Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
2917
+ AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
2918
+ h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
2919
+ hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
2920
+ LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
2921
+ rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
2922
+ AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
2923
+ SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
2924
+ E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
2925
+ xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
2926
+ iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
2927
+ YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
2928
+ -----END CERTIFICATE-----
2929
+
2930
+ AffirmTrust Commercial
2931
+ ======================
2932
+ -----BEGIN CERTIFICATE-----
2933
+ MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
2934
+ BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
2935
+ MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
2936
+ bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
2937
+ AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
2938
+ DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
2939
+ C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
2940
+ BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
2941
+ MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
2942
+ HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
2943
+ AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
2944
+ hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
2945
+ qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
2946
+ 0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
2947
+ sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
2948
+ -----END CERTIFICATE-----
2949
+
2950
+ AffirmTrust Networking
2951
+ ======================
2952
+ -----BEGIN CERTIFICATE-----
2953
+ MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
2954
+ BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
2955
+ MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
2956
+ bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
2957
+ AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
2958
+ Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
2959
+ dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
2960
+ /PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
2961
+ h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
2962
+ HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
2963
+ AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
2964
+ UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
2965
+ 12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
2966
+ WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
2967
+ /ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
2968
+ -----END CERTIFICATE-----
2969
+
2970
+ AffirmTrust Premium
2971
+ ===================
2972
+ -----BEGIN CERTIFICATE-----
2973
+ MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS
2974
+ BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy
2975
+ OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy
2976
+ dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
2977
+ MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn
2978
+ BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV
2979
+ 5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs
2980
+ +7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd
2981
+ GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R
2982
+ p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI
2983
+ S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04
2984
+ 6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5
2985
+ /bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo
2986
+ +Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB
2987
+ /wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv
2988
+ MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
2989
+ Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC
2990
+ 6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S
2991
+ L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK
2992
+ +4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV
2993
+ BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg
2994
+ IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60
2995
+ g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb
2996
+ zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw==
2997
+ -----END CERTIFICATE-----
2998
+
2999
+ AffirmTrust Premium ECC
3000
+ =======================
3001
+ -----BEGIN CERTIFICATE-----
3002
+ MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
3003
+ BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
3004
+ MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
3005
+ cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
3006
+ IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
3007
+ N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
3008
+ BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
3009
+ BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
3010
+ 57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
3011
+ eQ==
3012
+ -----END CERTIFICATE-----
3013
+
3014
+ Certum Trusted Network CA
3015
+ =========================
3016
+ -----BEGIN CERTIFICATE-----
3017
+ MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
3018
+ ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
3019
+ biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
3020
+ MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
3021
+ ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
3022
+ MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
3023
+ AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
3024
+ l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
3025
+ J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
3026
+ fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
3027
+ cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
3028
+ Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
3029
+ DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
3030
+ jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
3031
+ mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
3032
+ Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
3033
+ 03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
3034
+ -----END CERTIFICATE-----
3035
+
3036
+ Certinomis - Autorité Racine
3037
+ =============================
3038
+ -----BEGIN CERTIFICATE-----
3039
+ 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
3064
+ vgt2Fl43N+bYdJeimUV5
3065
+ -----END CERTIFICATE-----
3066
+
3067
+ Root CA Generalitat Valenciana
3068
+ ==============================
3069
+ -----BEGIN CERTIFICATE-----
3070
+ MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE
3071
+ ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290
3072
+ IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3
3073
+ WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE
3074
+ CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G
3075
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2
3076
+ F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B
3077
+ ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ
3078
+ D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte
3079
+ JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB
3080
+ AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n
3081
+ dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB
3082
+ ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl
3083
+ AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA
3084
+ YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy
3085
+ AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
3086
+ aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt
3087
+ AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA
3088
+ YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu
3089
+ AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA
3090
+ OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0
3091
+ dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV
3092
+ BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G
3093
+ A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S
3094
+ b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh
3095
+ TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz
3096
+ Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63
3097
+ NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH
3098
+ iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt
3099
+ +GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
3100
+ -----END CERTIFICATE-----
3101
+
3102
+ A-Trust-nQual-03
3103
+ ================
3104
+ -----BEGIN CERTIFICATE-----
3105
+ MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE
3106
+ Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy
3107
+ a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R
3108
+ dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw
3109
+ RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0
3110
+ ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1
3111
+ c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA
3112
+ zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n
3113
+ yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE
3114
+ SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4
3115
+ iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V
3116
+ cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV
3117
+ eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40
3118
+ ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr
3119
+ sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd
3120
+ JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
3121
+ mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6
3122
+ ahq97BvIxYSazQ==
3123
+ -----END CERTIFICATE-----
3124
+
3125
+ TWCA Root Certification Authority
3126
+ =================================
3127
+ -----BEGIN CERTIFICATE-----
3128
+ MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
3129
+ VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
3130
+ dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
3131
+ EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
3132
+ IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
3133
+ AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
3134
+ QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
3135
+ oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
3136
+ 4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
3137
+ y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
3138
+ BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
3139
+ 9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
3140
+ mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
3141
+ QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
3142
+ T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
3143
+ Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
3144
+ -----END CERTIFICATE-----
3145
+
3146
+ Security Communication RootCA2
3147
+ ==============================
3148
+ -----BEGIN CERTIFICATE-----
3149
+ MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
3150
+ U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
3151
+ dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
3152
+ SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
3153
+ aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
3154
+ ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
3155
+ +T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
3156
+ 3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
3157
+ spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
3158
+ EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
3159
+ QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
3160
+ CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
3161
+ u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
3162
+ 3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
3163
+ tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
3164
+ mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
3165
+ -----END CERTIFICATE-----
3166
+
3167
+ EC-ACC
3168
+ ======
3169
+ -----BEGIN CERTIFICATE-----
3170
+ MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
3171
+ BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
3172
+ ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
3173
+ VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
3174
+ CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
3175
+ BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
3176
+ MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
3177
+ SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
3178
+ Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
3179
+ cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
3180
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
3181
+ w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
3182
+ ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
3183
+ HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
3184
+ E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
3185
+ 0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
3186
+ BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
3187
+ VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
3188
+ Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
3189
+ dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
3190
+ lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
3191
+ Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
3192
+ l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
3193
+ E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
3194
+ 5EI=
3195
+ -----END CERTIFICATE-----
3196
+
3197
+ Hellenic Academic and Research Institutions RootCA 2011
3198
+ =======================================================
3199
+ -----BEGIN CERTIFICATE-----
3200
+ MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
3201
+ O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
3202
+ aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
3203
+ IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
3204
+ AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
3205
+ IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
3206
+ IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
3207
+ AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
3208
+ 1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
3209
+ 71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
3210
+ 8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
3211
+ 3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
3212
+ MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
3213
+ MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
3214
+ b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
3215
+ XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
3216
+ TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
3217
+ /md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
3218
+ 7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
3219
+ -----END CERTIFICATE-----
3220
+
3221
+ Actalis Authentication Root CA
3222
+ ==============================
3223
+ -----BEGIN CERTIFICATE-----
3224
+ MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM
3225
+ BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE
3226
+ AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky
3227
+ MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz
3228
+ IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
3229
+ IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ
3230
+ wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa
3231
+ by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6
3232
+ zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f
3233
+ YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2
3234
+ oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l
3235
+ EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7
3236
+ hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8
3237
+ EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5
3238
+ jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY
3239
+ iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
3240
+ ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI
3241
+ WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0
3242
+ JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx
3243
+ K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+
3244
+ Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC
3245
+ 4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo
3246
+ 2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz
3247
+ lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem
3248
+ OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
3249
+ vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
3250
+ -----END CERTIFICATE-----
3251
+
3252
+ Trustis FPS Root CA
3253
+ ===================
3254
+ -----BEGIN CERTIFICATE-----
3255
+ MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
3256
+ EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
3257
+ IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
3258
+ BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
3259
+ KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
3260
+ RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
3261
+ H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
3262
+ cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
3263
+ o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
3264
+ AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
3265
+ BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
3266
+ GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
3267
+ yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
3268
+ 8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
3269
+ l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
3270
+ iB6XzCGcKQENZetX2fNXlrtIzYE=
3271
+ -----END CERTIFICATE-----
3272
+
3273
+ StartCom Certification Authority
3274
+ ================================
3275
+ -----BEGIN CERTIFICATE-----
3276
+ MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
3277
+ U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
3278
+ ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
3279
+ NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
3280
+ LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
3281
+ U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
3282
+ ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
3283
+ o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
3284
+ Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
3285
+ eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
3286
+ 2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
3287
+ 6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
3288
+ osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
3289
+ untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
3290
+ UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
3291
+ 37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
3292
+ VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ
3293
+ Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0
3294
+ dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu
3295
+ c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv
3296
+ bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0
3297
+ aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0
3298
+ aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t
3299
+ L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG
3300
+ cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5
3301
+ fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm
3302
+ N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN
3303
+ Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T
3304
+ tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX
3305
+ e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA
3306
+ 2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs
3307
+ HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
3308
+ JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib
3309
+ D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8=
3310
+ -----END CERTIFICATE-----
3311
+
3312
+ StartCom Certification Authority G2
3313
+ ===================================
3314
+ -----BEGIN CERTIFICATE-----
3315
+ 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
3339
+ obp573PYtlNXLfbQ4ddI
3340
+ -----END CERTIFICATE-----
3341
+
3342
+ Buypass Class 2 Root CA
3343
+ =======================
3344
+ -----BEGIN CERTIFICATE-----
3345
+ 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
3369
+ rJgWVqA=
3370
+ -----END CERTIFICATE-----
3371
+
3372
+ Buypass Class 3 Root CA
3373
+ =======================
3374
+ -----BEGIN CERTIFICATE-----
3375
+ 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
3399
+ Cp/HuZc=
3400
+ -----END CERTIFICATE-----
3401
+
3402
+ T-TeleSec GlobalRoot Class 3
3403
+ ============================
3404
+ -----BEGIN CERTIFICATE-----
3405
+ MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
3406
+ IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
3407
+ cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx
3408
+ MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
3409
+ dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
3410
+ ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3
3411
+ DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK
3412
+ 9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU
3413
+ NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF
3414
+ iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W
3415
+ 0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA
3416
+ MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr
3417
+ AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb
3418
+ fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT
3419
+ ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h
3420
+ P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
3421
+ e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
3422
+ -----END CERTIFICATE-----
3423
+
3424
+ EE Certification Centre Root CA
3425
+ ===============================
3426
+ -----BEGIN CERTIFICATE-----
3427
+ MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
3428
+ EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy
3429
+ dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw
3430
+ MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB
3431
+ UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy
3432
+ ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
3433
+ DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM
3434
+ TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2
3435
+ rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw
3436
+ 93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN
3437
+ P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T
3438
+ AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ
3439
+ MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF
3440
+ BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj
3441
+ xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM
3442
+ lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
3443
+ uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU
3444
+ 3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM
3445
+ dcGWxZ0=
3446
+ -----END CERTIFICATE-----
3447
+
3448
+ TURKTRUST Certificate Services Provider Root 2007
3449
+ =================================================
3450
+ -----BEGIN CERTIFICATE-----
3451
+ MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
3452
+ bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
3453
+ MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
3454
+ QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X
3455
+ DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl
3456
+ a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN
3457
+ BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
3458
+ bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw
3459
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N
3460
+ YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv
3461
+ KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya
3462
+ KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT
3463
+ rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC
3464
+ AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP
3465
+ BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s
3466
+ Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I
3467
+ aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO
3468
+ Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb
3469
+ BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK
3470
+ poRq0Tl9
3471
+ -----END CERTIFICATE-----
3472
+
3473
+ D-TRUST Root Class 3 CA 2 2009
3474
+ ==============================
3475
+ -----BEGIN CERTIFICATE-----
3476
+ MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK
3477
+ DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe
3478
+ Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE
3479
+ LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw
3480
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD
3481
+ ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA
3482
+ BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv
3483
+ KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z
3484
+ p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC
3485
+ AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ
3486
+ 4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y
3487
+ eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw
3488
+ MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G
3489
+ PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw
3490
+ OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm
3491
+ 2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0
3492
+ o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV
3493
+ dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph
3494
+ X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I=
3495
+ -----END CERTIFICATE-----
3496
+
3497
+ D-TRUST Root Class 3 CA 2 EV 2009
3498
+ =================================
3499
+ -----BEGIN CERTIFICATE-----
3500
+ MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
3501
+ DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
3502
+ OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
3503
+ DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
3504
+ OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS
3505
+ egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh
3506
+ zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T
3507
+ 7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60
3508
+ sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35
3509
+ 11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv
3510
+ cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v
3511
+ ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El
3512
+ MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp
3513
+ b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh
3514
+ c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+
3515
+ PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05
3516
+ nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX
3517
+ ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA
3518
+ NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv
3519
+ w9y4AyHqnxbxLFS1
3520
+ -----END CERTIFICATE-----
3521
+
3522
+ PSCProcert
3523
+ ==========
3524
+ -----BEGIN CERTIFICATE-----
3525
+ MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRhZCBk
3526
+ ZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQGEwJWRTEQ
3527
+ MA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lz
3528
+ dGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBl
3529
+ cmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUw
3530
+ IwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEwMFoXDTIw
3531
+ MTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHByb2NlcnQubmV0LnZlMQ8w
3532
+ DQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGExKjAoBgNVBAsTIVByb3ZlZWRvciBkZSBD
3533
+ ZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZp
3534
+ Y2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIw
3535
+ DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVC
3536
+ wfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA
3537
+ 3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkoh
3538
+ RqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmO
3539
+ EO8GqQKJ/+MMbpfg353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG2
3540
+ 0qCZyFSTXai20b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH
3541
+ 0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqU
3542
+ td+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw
3543
+ Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvp
3544
+ r2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/
3545
+ AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAz
3546
+ Ni0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFDgBStuyId
3547
+ xuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRp
3548
+ ZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQH
3549
+ EwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5h
3550
+ Y2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5k
3551
+ ZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG
3552
+ 9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRG
3553
+ MESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklG
3554
+ LUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52
3555
+ ZS9sY3IvQ0VSVElGSUNBRE8tUkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNy
3556
+ YWl6LnN1c2NlcnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v
3557
+ Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5o
3558
+ dHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4Sq
3559
+ T96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmN
3560
+ g7+mvTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q
3561
+ uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1
3562
+ n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHmpHmJWhSn
3563
+ FFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FTvZLm8wyWuevo
3564
+ 5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq
3565
+ 3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5
3566
+ poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y
3567
+ eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km
3568
+ -----END CERTIFICATE-----
3569
+
3570
+ China Internet Network Information Center EV Certificates Root
3571
+ ==============================================================
3572
+ -----BEGIN CERTIFICATE-----
3573
+ MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ04xMjAwBgNV
3574
+ BAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyMUcwRQYDVQQDDD5D
3575
+ aGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMg
3576
+ Um9vdDAeFw0xMDA4MzEwNzExMjVaFw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAG
3577
+ A1UECgwpQ2hpbmEgSW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMM
3578
+ PkNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRpZmljYXRl
3579
+ cyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z7r07eKpkQ0H1UN+U8i6y
3580
+ jUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV
3581
+ 98YPjUesWgbdYavi7NifFy2cyjw1l1VxzUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2H
3582
+ klY0bBoQCxfVWhyXWIQ8hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23
3583
+ KzhmBsUs4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54ugQEC
3584
+ 7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oYNJKiyoOCWTAPBgNV
3585
+ HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUfHJLOcfA22KlT5uqGDSSosqD
3586
+ glkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd5
3587
+ 0XPFtQO3WKwMVC/GVhMPMdoG52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM
3588
+ 7+czV0I664zBechNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws
3589
+ ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrIzo9uoV1/A3U0
3590
+ 5K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATywy39FCqQmbkHzJ8=
3591
+ -----END CERTIFICATE-----
3592
+
3593
+ Swisscom Root CA 2
3594
+ ==================
3595
+ -----BEGIN CERTIFICATE-----
3596
+ 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
3622
+ 5OfNeOI5wSsSnqaeG8XmDtkx2Q==
3623
+ -----END CERTIFICATE-----
3624
+
3625
+ Swisscom Root EV CA 2
3626
+ =====================
3627
+ -----BEGIN CERTIFICATE-----
3628
+ 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
3654
+ l8PVP3wbI+2ksx0WckNLIOFZfsLorSa/ovc=
3655
+ -----END CERTIFICATE-----
3656
+
3657
+ CA Disig Root R1
3658
+ ================
3659
+ -----BEGIN CERTIFICATE-----
3660
+ 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
3684
+ a7+h89n07eLw4+1knj0vllJPgFOL
3685
+ -----END CERTIFICATE-----
3686
+
3687
+ CA Disig Root R2
3688
+ ================
3689
+ -----BEGIN CERTIFICATE-----
3690
+ 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
3714
+ 7+ZtsH8tZ/3zbBt1RqPlShfppNcL
3715
+ -----END CERTIFICATE-----
3716
+
3717
+ ACCVRAIZ1
3718
+ =========
3719
+ -----BEGIN CERTIFICATE-----
3720
+ MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB
3721
+ SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1
3722
+ MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH
3723
+ UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
3724
+ DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM
3725
+ jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0
3726
+ RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD
3727
+ aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ
3728
+ 0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG
3729
+ WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7
3730
+ 8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR
3731
+ 5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J
3732
+ 9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK
3733
+ Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw
3734
+ Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu
3735
+ Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2
3736
+ VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM
3737
+ Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA
3738
+ QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh
3739
+ AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA
3740
+ YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj
3741
+ AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA
3742
+ IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk
3743
+ aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0
3744
+ dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2
3745
+ MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI
3746
+ hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E
3747
+ R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN
3748
+ YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49
3749
+ nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ
3750
+ TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3
3751
+ sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h
3752
+ I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg
3753
+ Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd
3754
+ 3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p
3755
+ EfbRD0tVNEYqi4Y7
3756
+ -----END CERTIFICATE-----
3757
+
3758
+ TWCA Global Root CA
3759
+ ===================
3760
+ -----BEGIN CERTIFICATE-----
3761
+ MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT
3762
+ CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD
3763
+ QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK
3764
+ EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg
3765
+ Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C
3766
+ nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV
3767
+ r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR
3768
+ Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV
3769
+ tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W
3770
+ KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99
3771
+ sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p
3772
+ yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn
3773
+ kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI
3774
+ zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC
3775
+ AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g
3776
+ cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn
3777
+ LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M
3778
+ 8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg
3779
+ /eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg
3780
+ lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP
3781
+ A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m
3782
+ i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8
3783
+ EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3
3784
+ zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0=
3785
+ -----END CERTIFICATE-----
app/code/local/PayVector/Tpg/Model/Direct.php ADDED
@@ -0,0 +1,1536 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ include("Common/ThePaymentGateway/PaymentSystem.php");
4
+ include_once("Common/PaymentFormHelper.php");
5
+ include("Common/ISOCurrencies.php");
6
+ include("Common/ISOCountries.php");
7
+ include("Source/HashMethod.php");
8
+
9
+ class PayVector_Tpg_Model_Direct extends Mage_Payment_Model_Method_Abstract
10
+ {
11
+ /**
12
+ * unique internal payment method identifier
13
+ *
14
+ * @var string [a-z0-9_]
15
+ */
16
+ protected $_code = 'tpg';
17
+ protected $_formBlockType = 'tpg/form';
18
+ protected $_infoBlockType = 'tpg/info';
19
+
20
+ protected $_isGateway = true;
21
+ protected $_canAuthorize = true;
22
+ protected $_canCapture = true;
23
+ protected $_canCapturePartial = false;
24
+ protected $_canRefund = true;
25
+ protected $_canVoid = true;
26
+ protected $_canUseInternal = true;
27
+ protected $_canUseCheckout = true;
28
+ protected $_canUseForMultishipping = true;
29
+ protected $_canSaveCc = false;
30
+
31
+ /**
32
+ * Assign data to info model instance
33
+ *
34
+ * @param mixed $data
35
+ * @return Mage_Payment_Model_Info
36
+ */
37
+ public function assignData($data)
38
+ {
39
+ if(!($data instanceof Varien_Object))
40
+ {
41
+ $data = new Varien_Object($data);
42
+ }
43
+ $info = $this->getInfoInstance();
44
+ $info->setCcOwner($data->getCcOwner())
45
+ ->setCcLast4(substr($data->getCcNumber(), -4))
46
+ ->setCcNumber($data->getCcNumber())
47
+ ->setCcCid($data->getCcCid())
48
+ ->setCcExpMonth($data->getCcExpMonth())
49
+ ->setCcExpYear($data->getCcExpYear())
50
+ ->setCcSsStartMonth($data->getCcSsStartMonth())
51
+ ->setCcSsStartYear($data->getCcSsStartYear())
52
+ ->setCcSsIssue($data->getCcSsIssue());
53
+
54
+ return $this;
55
+ }
56
+
57
+ /**
58
+ * Validate payment method information object
59
+ *
60
+ * @param Mage_Payment_Model_Info $info
61
+ * @return Mage_Payment_Model_Method_Abstract
62
+ */
63
+ public function validate()
64
+ {
65
+ // NOTE : cancel out the core Magento validator functionality, the payment gateway will overtake this task
66
+ return $this;
67
+ }
68
+
69
+ /**
70
+ * Authorize - core Mage pre-authorization functionality
71
+ *
72
+ * @param Varien_Object $orderPayment
73
+ * @return Mage_Payment_Model_Method_Abstract
74
+ */
75
+ public function authorize(Varien_Object $payment, $amount)
76
+ {
77
+ $error = false;
78
+ //if this is a cross reference transaction then skip mode checking as it must be Direct/API
79
+ if(isset($_POST['payment']['payment_type']) && $_POST['payment']['payment_type'] === "stored_card")
80
+ {
81
+ $paymentAction = $this->getConfigData('payment_action');
82
+ if($paymentAction == Mage_Paygate_Model_Authorizenet::ACTION_AUTHORIZE_CAPTURE)
83
+ {
84
+ $szTransactionType = "SALE";
85
+ }
86
+ else if($paymentAction == Mage_Paygate_Model_Authorizenet::ACTION_AUTHORIZE)
87
+ {
88
+ $szTransactionType = "PREAUTH";
89
+ }
90
+ else
91
+ {
92
+ Mage::throwException('Unknown payment action: ' . $paymentAction);
93
+ }
94
+ $error = $this->_runCrossReferenceTransaction($payment, $szTransactionType, $amount, true);
95
+ }
96
+ else
97
+ {
98
+ $mode = $this->getConfigData('mode');
99
+ // TODO : need to finish for non Direct API methods
100
+ switch($mode)
101
+ {
102
+ case PayVector_Tpg_Model_Source_PaymentMode::PAYMENT_MODE_DIRECT_API:
103
+ $error = $this->_runTransaction($payment, $amount);
104
+ break;
105
+ case PayVector_Tpg_Model_Source_PaymentMode::PAYMENT_MODE_HOSTED_PAYMENT_FORM:
106
+ $error = $this->_runHostedPaymentTransaction($payment, $amount);
107
+ break;
108
+ case PayVector_Tpg_Model_Source_PaymentMode::PAYMENT_MODE_TRANSPARENT_REDIRECT:
109
+ $error = $this->_runTransparentRedirectTransaction($payment, $amount);
110
+ //Mage::throwException('TR not supported');
111
+ break;
112
+ default:
113
+ Mage::throwException('Invalid payment type: ' . $this->getConfigData('mode'));
114
+ break;
115
+ }
116
+ }
117
+ if($error)
118
+ {
119
+ Mage::throwException($error);
120
+ }
121
+
122
+ return $this;
123
+ }
124
+
125
+ /**
126
+ * Capture payment - immediate settlement payments
127
+ *
128
+ * @param Varien_Object $payment
129
+ * @return Mage_Payment_Model_Method_Abstract
130
+ */
131
+ public function capture(Varien_Object $payment, $amount)
132
+ {
133
+ $error = false;
134
+ $session = Mage::getSingleton('checkout/session');
135
+ $mode = $this->getConfigData('mode');
136
+ $nVersion = $this->getVersion();
137
+ if($amount <= 0)
138
+ {
139
+ Mage::throwException(Mage::helper('paygate')->__('Invalid amount for authorization.'));
140
+ }
141
+ else
142
+ {
143
+ if($session->getThreedsecurerequired())
144
+ {
145
+ $md = $session->getMd();
146
+ $pares = $session->getPares();
147
+ $session->setThreedsecurerequired(null);
148
+ $this->_run3DSecureTransaction($payment, $pares, $md);
149
+
150
+ return $this;
151
+ }
152
+ if($session->getRedirectedPayment())
153
+ {
154
+ $szStatusCode = $session->getStatuscode();
155
+ $szMessage = $session->getMessage();
156
+ $szPreviousStatusCode = $session->getPreviousstatuscode();
157
+ $szPreviousMessage = $session->getPreviousmessage();
158
+ $szOrderID = $session->getOrderid();
159
+ $szCrossReference = $session->getCrossReference();
160
+ // check whether it is a hosted payment or a transparent redirect action
161
+ $boIsHostedPaymentAction = $session->getIshostedpayment();
162
+ $session->setRedirectedPayment(null);
163
+ $session->setIshostedpayment(null);
164
+ $this->_runRedirectedPaymentComplete($payment, $boIsHostedPaymentAction, $szStatusCode, $szMessage, $szPreviousStatusCode, $szPreviousMessage, $szOrderID, $szCrossReference);
165
+
166
+ return $this;
167
+ }
168
+ if($session->getIsCollectionCrossReferenceTransaction())
169
+ {
170
+ // do a CrossReference transaction
171
+ $error = $this->_runCrossReferenceTransaction($payment, "COLLECTION", $amount);
172
+ }
173
+ else
174
+ {
175
+ // fresh payment request
176
+ $session->setThreedsecurerequired(null)
177
+ ->setRedirectedPayment(null)
178
+ ->setIshostedpayment(null)
179
+ ->setHostedPayment(null)
180
+ ->setMd(null)
181
+ ->setPareq(null)
182
+ ->setAcsurl(null)
183
+ ->setPaymentprocessorresponse(null);
184
+ $payment->setAmount($amount);
185
+ switch($mode)
186
+ {
187
+ case PayVector_Tpg_Model_Source_PaymentMode::PAYMENT_MODE_DIRECT_API:
188
+ $error = $this->_runTransaction($payment, $amount);
189
+ break;
190
+ case PayVector_Tpg_Model_Source_PaymentMode::PAYMENT_MODE_HOSTED_PAYMENT_FORM:
191
+ $error = $this->_runHostedPaymentTransaction($payment, $amount);
192
+ break;
193
+ case PayVector_Tpg_Model_Source_PaymentMode::PAYMENT_MODE_TRANSPARENT_REDIRECT:
194
+ $error = $this->_runTransparentRedirectTransaction($payment, $amount);
195
+ break;
196
+ default:
197
+ Mage::throwException('Invalid payment type: ' . $this->getConfigData('mode'));
198
+ break;
199
+ }
200
+ }
201
+ }
202
+ if($error)
203
+ {
204
+ Mage::throwException($error);
205
+ }
206
+ else
207
+ {
208
+ if($nVersion == 1324 || $nVersion == 1330)
209
+ {
210
+ $payment->setIsInvoicePaid(true);
211
+ }
212
+ }
213
+
214
+ return $this;
215
+ }
216
+
217
+ /**
218
+ * Processing the transaction using the direct integration
219
+ *
220
+ * @param Varien_Object $orderPayment
221
+ * @param float $amount
222
+ * @return bool
223
+ */
224
+ public function _runTransaction(Varien_Object $payment, $amount)
225
+ {
226
+ $MerchantID = $this->getConfigData('merchantid');
227
+ $Password = $this->getConfigData('password');
228
+ $SecretKey = $this->getConfigData('secretkey');
229
+ // assign payment form field values to variables
230
+ $order = $payment->getOrder();
231
+ $szOrderID = $payment->getOrder()->increment_id;
232
+ $szOrderDescription = '';
233
+ $szCardName = $payment->getCcOwner();
234
+ $szCardNumber = $payment->getCcNumber();
235
+ //save card last four to the session so that it persists through a redirect on 3DS
236
+ Mage::getModel('customer/session')->setData('payvector_card_last_four', substr($payment->getCcNumber(), -4));
237
+ $szIssueNumber = $payment->getCcSsIssue();
238
+ $szCV2 = $payment->getCcCid();
239
+ $szCurrencyShort = $order->getOrderCurrency()->getCurrencyCode();
240
+ // address details
241
+ $billingAddress = $order->getBillingAddress();
242
+ $szAddress1 = $billingAddress->getStreet1();
243
+ $szAddress2 = $billingAddress->getStreet2();
244
+ $szAddress3 = $billingAddress->getStreet3();
245
+ $szAddress4 = $billingAddress->getStreet4();
246
+ $szCity = $billingAddress->getCity();
247
+ $szState = $billingAddress->getRegion();
248
+ $szPostCode = $billingAddress->getPostcode();
249
+ $szISO2CountryCode = $billingAddress->getCountry();
250
+ $szEmailAddress = $billingAddress->getCustomerEmail();
251
+ $szPhoneNumber = $billingAddress->getTelephone();
252
+ $iclISOCurrencyList = ISOCurrencies::getISOCurrencyList();
253
+ $iclISOCountryList = ISOCountries::getISOCountryList();
254
+
255
+ $rgeplRequestGatewayEntryPointList = $this->_getGatewayEntryPointList();
256
+
257
+ $paymentAction = $this->getConfigData('payment_action');
258
+ if($paymentAction == Mage_Paygate_Model_Authorizenet::ACTION_AUTHORIZE_CAPTURE)
259
+ {
260
+ $szTransactionType = "SALE";
261
+ }
262
+ else if($paymentAction == Mage_Paygate_Model_Authorizenet::ACTION_AUTHORIZE)
263
+ {
264
+ $szTransactionType = "PREAUTH";
265
+ }
266
+ else
267
+ {
268
+ Mage::throwException('Unknown payment action: ' . $paymentAction);
269
+ }
270
+ $cdtCardDetailsTransaction = new CardDetailsTransaction($rgeplRequestGatewayEntryPointList);
271
+ $cdtCardDetailsTransaction->getMerchantAuthentication()->setMerchantID($MerchantID);
272
+ $cdtCardDetailsTransaction->getMerchantAuthentication()->setPassword($Password);
273
+ $cdtCardDetailsTransaction->getTransactionDetails()->getMessageDetails()->setTransactionType($szTransactionType);
274
+ if($szCurrencyShort != '' &&
275
+ $iclISOCurrencyList->getISOCurrency($szCurrencyShort, $icISOCurrency)
276
+ )
277
+ {
278
+ $cdtCardDetailsTransaction->getTransactionDetails()->getCurrencyCode()->setValue($icISOCurrency->getISOCode());
279
+ }
280
+ $nDecimalAmount = $this->_getRoundedAmount($amount, $icISOCurrency->getExponent());
281
+ $cdtCardDetailsTransaction->getTransactionDetails()->getAmount()->setValue($nDecimalAmount);
282
+ $cdtCardDetailsTransaction->getTransactionDetails()->setOrderID($szOrderID);
283
+ $cdtCardDetailsTransaction->getTransactionDetails()->setOrderDescription($szOrderDescription);
284
+ $cdtCardDetailsTransaction->getTransactionDetails()->getTransactionControl()->getEchoCardType()->setValue(true);
285
+ $cdtCardDetailsTransaction->getTransactionDetails()->getTransactionControl()->getEchoAmountReceived()->setValue(true);
286
+ $cdtCardDetailsTransaction->getTransactionDetails()->getTransactionControl()->getEchoAVSCheckResult()->setValue(true);
287
+ $cdtCardDetailsTransaction->getTransactionDetails()->getTransactionControl()->getEchoCV2CheckResult()->setValue(true);
288
+ $cdtCardDetailsTransaction->getTransactionDetails()->getTransactionControl()->getThreeDSecureOverridePolicy()->setValue(true);
289
+ $cdtCardDetailsTransaction->getTransactionDetails()->getTransactionControl()->getDuplicateDelay()->setValue(60);
290
+ $cdtCardDetailsTransaction->getTransactionDetails()->getThreeDSecureBrowserDetails()->getDeviceCategory()->setValue(0);
291
+ $cdtCardDetailsTransaction->getTransactionDetails()->getThreeDSecureBrowserDetails()->setAcceptHeaders("*/*");
292
+ $cdtCardDetailsTransaction->getTransactionDetails()->getThreeDSecureBrowserDetails()->setUserAgent($_SERVER["HTTP_USER_AGENT"]);
293
+ $cdtCardDetailsTransaction->getCardDetails()->setCardName($szCardName);
294
+ $cdtCardDetailsTransaction->getCardDetails()->setCardNumber($szCardNumber);
295
+ if($payment->getCcExpMonth() != "")
296
+ {
297
+ $cdtCardDetailsTransaction->getCardDetails()->getExpiryDate()->getMonth()->setValue($payment->getCcExpMonth());
298
+ }
299
+ if($payment->getCcExpYear() != "")
300
+ {
301
+ $cdtCardDetailsTransaction->getCardDetails()->getExpiryDate()->getYear()->setValue($payment->getCcExpYear());
302
+ }
303
+ if($payment->getCcSsStartMonth() != "")
304
+ {
305
+ $cdtCardDetailsTransaction->getCardDetails()->getStartDate()->getMonth()->setValue($payment->getCcSsStartMonth());
306
+ }
307
+ if($payment->getCcSsStartYear() != "")
308
+ {
309
+ $cdtCardDetailsTransaction->getCardDetails()->getStartDate()->getYear()->setValue($payment->getCcSsStartYear());
310
+ }
311
+ $cdtCardDetailsTransaction->getCardDetails()->setIssueNumber($szIssueNumber);
312
+ $cdtCardDetailsTransaction->getCardDetails()->setCV2($szCV2);
313
+ $cdtCardDetailsTransaction->getCustomerDetails()->getBillingAddress()->setAddress1($szAddress1);
314
+ $cdtCardDetailsTransaction->getCustomerDetails()->getBillingAddress()->setAddress2($szAddress2);
315
+ $cdtCardDetailsTransaction->getCustomerDetails()->getBillingAddress()->setAddress3($szAddress3);
316
+ $cdtCardDetailsTransaction->getCustomerDetails()->getBillingAddress()->setAddress4($szAddress4);
317
+ $cdtCardDetailsTransaction->getCustomerDetails()->getBillingAddress()->setCity($szCity);
318
+ $cdtCardDetailsTransaction->getCustomerDetails()->getBillingAddress()->setState($szState);
319
+ $cdtCardDetailsTransaction->getCustomerDetails()->getBillingAddress()->setPostCode($szPostCode);
320
+ $szCountryShort = $this->_getISO3Code($szISO2CountryCode);
321
+ if($iclISOCountryList->getISOCountry($szCountryShort, $icISOCountry))
322
+ {
323
+ $cdtCardDetailsTransaction->getCustomerDetails()->getBillingAddress()->getCountryCode()->setValue($icISOCountry->getISOCode());
324
+ }
325
+ $cdtCardDetailsTransaction->getCustomerDetails()->setEmailAddress($szEmailAddress);
326
+ $cdtCardDetailsTransaction->getCustomerDetails()->setPhoneNumber($szPhoneNumber);
327
+ $boTransactionProcessed = $cdtCardDetailsTransaction->processTransaction($cdtrCardDetailsTransactionResult, $todTransactionOutputData);
328
+ $error = $this->_handleTransactionResults($payment, $boTransactionProcessed, $cdtCardDetailsTransaction, $cdtrCardDetailsTransactionResult, $todTransactionOutputData);
329
+
330
+ return $error;
331
+ }
332
+
333
+ /**
334
+ * Processing the transaction using the hosted payment form integration
335
+ *
336
+ * @param Varien_Object $payment
337
+ * @param float $amount
338
+ */
339
+ public function _runHostedPaymentTransaction(Varien_Object $payment, $amount)
340
+ {
341
+ $session = Mage::getSingleton('checkout/session');
342
+ $nVersion = $this->getVersion();
343
+ $szMerchantID = $this->getConfigData('merchantid');
344
+ $szPassword = $this->getConfigData('password');
345
+ $szPreSharedKey = $this->getConfigData('presharedkey');
346
+ $hmHashMethod = $this->getConfigData('hashmethod');
347
+ $boCV2Mandatory = 'false';
348
+ $boAddress1Mandatory = 'false';
349
+ $boCityMandatory = 'false';
350
+ $boPostCodeMandatory = 'false';
351
+ $boStateMandatory = 'false';
352
+ $boCountryMandatory = 'false';
353
+ $szEchoCardType = 'true';
354
+ $rdmResultDeliveryMethod = $this->getConfigData('resultdeliverymethod');
355
+ $szServerResultURL = '';
356
+ // set to always true to display the result on the Hosted Payment Form
357
+ $boPaymentFormDisplaysResult = '';
358
+
359
+ //Set callback URL
360
+ if($rdmResultDeliveryMethod === PayVector_Tpg_Model_Source_ResultDeliveryMethod::RESULT_DELIVERY_METHOD_SERVER_PULL)
361
+ {
362
+ $szCallbackURL = Mage::getUrl('tpg/payment/serverpullresult', array('_secure' => true));
363
+ }
364
+ else
365
+ {
366
+ $szCallbackURL = Mage::getUrl('tpg/payment/callbackhostedpayment', array('_secure' => true));
367
+ }
368
+
369
+ //For SERVER method then set ServerResultURL
370
+ if($rdmResultDeliveryMethod === PayVector_Tpg_Model_Source_ResultDeliveryMethod::RESULT_DELIVERY_METHOD_SERVER)
371
+ {
372
+ $szServerResultURL = Mage::getUrl('tpg/payment/serverresult', array('_secure' => true));
373
+ $boPaymentFormDisplaysResult = 'true';
374
+ }
375
+
376
+ // switch($rdmResultDeliveryMethod)
377
+ // {
378
+ // case PayVector_Tpg_Model_Source_ResultDeliveryMethod::RESULT_DELIVERY_METHOD_POST:
379
+ // $szCallbackURL = Mage::getUrl('tpg/payment/callbackhostedpayment', array('_secure' => true));
380
+ // break;
381
+ // case PayVector_Tpg_Model_Source_ResultDeliveryMethod::RESULT_DELIVERY_METHOD_SERVER:
382
+ // $szCallbackURL = Mage::getUrl('tpg/payment/callbackhostedpayment', array('_secure' => true));
383
+ // $szServerResultURL = Mage::getUrl('tpg/payment/serverresult', array('_secure' => true));
384
+ // $boPaymentFormDisplaysResult = 'true';
385
+ // break;
386
+ // case PayVector_Tpg_Model_Source_ResultDeliveryMethod::RESULT_DELIVERY_METHOD_SERVER_PULL:
387
+ // $szCallbackURL = Mage::getUrl('tpg/payment/serverpullresult', array('_secure' => true));
388
+ // break;
389
+ // }
390
+
391
+ $order = $payment->getOrder();
392
+ $billingAddress = $order->getBillingAddress();
393
+ $iclISOCurrencyList = ISOCurrencies::getISOCurrencyList();
394
+ $iclISOCountryList = ISOCountries::getISOCountryList();
395
+ $cookie = Mage::getSingleton('core/cookie');
396
+ $arCookieArray = $cookie->get();
397
+ $arCookieKeysArray = array_keys($arCookieArray);
398
+ $nKeysArrayLength = count($arCookieKeysArray);
399
+ $szCookiePath = $cookie->getPath();
400
+ $szCookieDomain = $cookie->getDomain();
401
+ $szServerResultURLCookieVariables = '';
402
+ $szServerResultURLFormVariables = '';
403
+ $szServerResultURLQueryStringVariables = '';
404
+ //ServerResutlURLCookieVariables string format: cookie1=123&path=/&domain=www.domain.com@@cookie2=456&path=/&domain=www.domain.com
405
+ for($nCount = 0; $nCount < $nKeysArrayLength; $nCount++)
406
+ {
407
+ $szEncodedCookieValue = urlencode($arCookieArray[$arCookieKeysArray[$nCount]]);
408
+ $szServerResultURLCookieVariables .= $arCookieKeysArray[$nCount] . "=" . $szEncodedCookieValue . "&path=" . $szCookiePath . "&domain=" . $szCookieDomain;
409
+ if($nCount < $nKeysArrayLength - 1)
410
+ {
411
+ $szServerResultURLCookieVariables .= "@@";
412
+ }
413
+ }
414
+ $szCurrencyShort = $order->getOrderCurrency()->getCurrencyCode();
415
+ if($szCurrencyShort != '' &&
416
+ $iclISOCurrencyList->getISOCurrency($szCurrencyShort, $icISOCurrency)
417
+ )
418
+ {
419
+ $nCurrencyCode = $icISOCurrency->getISOCode();
420
+ }
421
+ $nAmount = $this->_getRoundedAmount($amount, $icISOCurrency->getExponent());
422
+ $szISO2CountryCode = $billingAddress->getCountry();
423
+ $szCountryShort = $this->_getISO3Code($szISO2CountryCode);
424
+ if($iclISOCountryList->getISOCountry($szCountryShort, $icISOCountry))
425
+ {
426
+ $nCountryCode = $icISOCountry->getISOCode();
427
+ }
428
+ $szOrderID = $payment->getOrder()->increment_id;
429
+ //date time with 2008-12-01 14:12:00 +01:00 format
430
+ $szTransactionDateTime = date('Y-m-d H:i:s P');
431
+ $szOrderDescription = '';
432
+ //$szTransactionType = "SALE";
433
+ $paymentAction = $this->getConfigData('payment_action');
434
+ if($paymentAction == Mage_Paygate_Model_Authorizenet::ACTION_AUTHORIZE_CAPTURE)
435
+ {
436
+ $szTransactionType = "SALE";
437
+ }
438
+ else if($paymentAction == Mage_Paygate_Model_Authorizenet::ACTION_AUTHORIZE)
439
+ {
440
+ $szTransactionType = "PREAUTH";
441
+ }
442
+ else
443
+ {
444
+ Mage::throwException('Unknown payment action: ' . $paymentAction);
445
+ }
446
+ $szCustomerName = $billingAddress->getfirstname();
447
+ if($billingAddress->getfirstname())
448
+ {
449
+ $szCustomerName = $szCustomerName . ' ' . $billingAddress->getlastname();
450
+ }
451
+ $szAddress1 = $billingAddress->getStreet1();
452
+ $szAddress2 = $billingAddress->getStreet2();
453
+ $szAddress3 = $billingAddress->getStreet3();
454
+ $szAddress4 = $billingAddress->getStreet4();
455
+ $szCity = $billingAddress->getCity();
456
+ $szState = $billingAddress->getRegion();
457
+ $szPostCode = $billingAddress->getPostcode();
458
+ if($this->getConfigData('cv2mandatory'))
459
+ {
460
+ $boCV2Mandatory = 'true';
461
+ }
462
+ if($this->getConfigData('address1mandatory'))
463
+ {
464
+ $boAddress1Mandatory = 'true';
465
+ }
466
+ if($this->getConfigData('citymandatory'))
467
+ {
468
+ $boCityMandatory = 'true';
469
+ }
470
+ if($this->getConfigData('postcodemandatory'))
471
+ {
472
+ $boPostCodeMandatory = 'true';
473
+ }
474
+ if($this->getConfigData('statemandatory'))
475
+ {
476
+ $boStateMandatory = 'true';
477
+ }
478
+ if($this->getConfigData('countrymandatory'))
479
+ {
480
+ $boCountryMandatory = 'true';
481
+ }
482
+ if($this->getConfigData('paymentformdisplaysresult'))
483
+ {
484
+ $boPaymentFormDisplaysResult = 'true';
485
+ }
486
+ $szHashDigest =
487
+ TPG_PaymentFormHelper::calculateHashDigest(
488
+ $szMerchantID,
489
+ $szPassword,
490
+ $hmHashMethod,
491
+ $szPreSharedKey,
492
+ $nAmount,
493
+ $nCurrencyCode,
494
+ $szEchoCardType,
495
+ $szOrderID,
496
+ $szTransactionType,
497
+ $szTransactionDateTime,
498
+ $szCallbackURL,
499
+ $szOrderDescription,
500
+ $szCustomerName,
501
+ $szAddress1,
502
+ $szAddress2,
503
+ $szAddress3,
504
+ $szAddress4,
505
+ $szCity,
506
+ $szState,
507
+ $szPostCode,
508
+ $nCountryCode,
509
+ $boCV2Mandatory,
510
+ $boAddress1Mandatory,
511
+ $boCityMandatory,
512
+ $boPostCodeMandatory,
513
+ $boStateMandatory,
514
+ $boCountryMandatory,
515
+ $rdmResultDeliveryMethod,
516
+ $szServerResultURL,
517
+ $boPaymentFormDisplaysResult,
518
+ $szServerResultURLCookieVariables,
519
+ $szServerResultURLFormVariables,
520
+ $szServerResultURLQueryStringVariables
521
+ );
522
+ $session->setHashdigest($szHashDigest)
523
+ ->setMerchantid($szMerchantID)
524
+ ->setAmount($nAmount)
525
+ ->setCurrencycode($nCurrencyCode)
526
+ ->setEchoCardType($szEchoCardType)
527
+ ->setOrderid($szOrderID)
528
+ ->setTransactiontype($szTransactionType)
529
+ ->setTransactiondatetime($szTransactionDateTime)
530
+ ->setCallbackurl($szCallbackURL)
531
+ ->setOrderdescription($szOrderDescription)
532
+ ->setCustomername($szCustomerName)
533
+ ->setAddress1($szAddress1)
534
+ ->setAddress2($szAddress2)
535
+ ->setAddress3($szAddress3)
536
+ ->setAddress4($szAddress4)
537
+ ->setCity($szCity)
538
+ ->setState($szState)
539
+ ->setPostcode($szPostCode)
540
+ ->setCountrycode($nCountryCode)
541
+ ->setCv2mandatory($boCV2Mandatory)
542
+ ->setAddress1mandatory($boAddress1Mandatory)
543
+ ->setCitymandatory($boCityMandatory)
544
+ ->setPostcodemandatory($boPostCodeMandatory)
545
+ ->setStatemandatory($boStateMandatory)
546
+ ->setCountrymandatory($boCountryMandatory)
547
+ ->setResultdeliverymethod($rdmResultDeliveryMethod)
548
+ ->setServerresulturl($szServerResultURL)
549
+ ->setPaymentformdisplaysresult($boPaymentFormDisplaysResult)
550
+ ->setServerresulturlcookievariables($szServerResultURLCookieVariables)
551
+ ->setServerresulturlformvariables($szServerResultURLFormVariables)
552
+ ->setServerresulturlquerystringvariables($szServerResultURLQueryStringVariables);
553
+ if($nVersion >= 1410)
554
+ {
555
+ $session->setRedirectionMethod('_runRedirectedPaymentComplete');
556
+ $payment->getOrder()->setIsHostedPaymentPending(true);
557
+ }
558
+ /* serve out a dummy CrossReference as the TransactionId - this need to be done to enable the "Refund" button
559
+ in the Magento CreditMemo internal refund mechanism */
560
+ $payment->setTransactionId($szOrderID . "_" . date('YmdHis'));
561
+ }
562
+
563
+ /**
564
+ * Processing the transaction using the transparent redirect integration
565
+ *
566
+ * @param Varien_Object $payment
567
+ * @param float $amount
568
+ */
569
+ public function _runTransparentRedirectTransaction(Varien_Object $payment, $amount)
570
+ {
571
+ $GLOBALS['m_boPayInvoice'] = false;
572
+ $payment->setIsTransactionPending(true);
573
+ $nVersion = $this->getVersion();
574
+ $szMerchantID = $this->getConfigData('merchantid');
575
+ $szPassword = $this->getConfigData('password');
576
+ $szPreSharedKey = $this->getConfigData('presharedkey');
577
+ $hmHashMethod = $this->getConfigData('hashmethod');
578
+ $szCallbackURL = Mage::getUrl('tpg/payment/callbacktransparentredirect', array('_secure' => true));
579
+ $order = $payment->getOrder();
580
+ $billingAddress = $order->getBillingAddress();
581
+ $iclISOCurrencyList = ISOCurrencies::getISOCurrencyList();
582
+ $iclISOCountryList = ISOCountries::getISOCountryList();
583
+ $szStartDateMonth = '';
584
+ $szStartDateYear = '';
585
+ $szCurrencyShort = $order->getOrderCurrency()->getCurrencyCode();
586
+ if($szCurrencyShort != '' &&
587
+ $iclISOCurrencyList->getISOCurrency($szCurrencyShort, $icISOCurrency)
588
+ )
589
+ {
590
+ $nCurrencyCode = $icISOCurrency->getISOCode();
591
+ }
592
+ $nAmount = $this->_getRoundedAmount($amount, $icISOCurrency->getExponent());
593
+ $szOrderID = $payment->getOrder()->increment_id;
594
+ //date time with 2008-12-01 14:12:00 +01:00 format
595
+ $szTransactionDateTime = date('Y-m-d H:i:s P');
596
+ $szOrderDescription = '';
597
+ //$szTransactionType = 'SALE';
598
+ $paymentAction = $this->getConfigData('payment_action');
599
+ if($paymentAction == Mage_Paygate_Model_Authorizenet::ACTION_AUTHORIZE_CAPTURE)
600
+ {
601
+ $szTransactionType = "SALE";
602
+ }
603
+ else if($paymentAction == Mage_Paygate_Model_Authorizenet::ACTION_AUTHORIZE)
604
+ {
605
+ $szTransactionType = "PREAUTH";
606
+ }
607
+ else
608
+ {
609
+ Mage::throwException('Unknown payment action: ' . $paymentAction);
610
+ }
611
+ $szAddress1 = $billingAddress->getStreet1();
612
+ $szAddress2 = $billingAddress->getStreet2();
613
+ $szAddress3 = $billingAddress->getStreet3();
614
+ $szAddress4 = $billingAddress->getStreet4();
615
+ $szCity = $billingAddress->getCity();
616
+ $szState = $billingAddress->getRegion();
617
+ $szPostCode = $billingAddress->getPostcode();
618
+ $szISO2CountryCode = $billingAddress->getCountry();
619
+ $szCountryShort = $this->_getISO3Code($szISO2CountryCode);
620
+ if($iclISOCountryList->getISOCountry($szCountryShort, $icISOCountry))
621
+ {
622
+ $nCountryCode = $icISOCountry->getISOCode();
623
+ }
624
+ $szCardName = $payment->getCcOwner();
625
+ $szCardNumber = $payment->getCcNumber();
626
+ $szExpiryDateMonth = $payment->getCcExpMonth();
627
+ $szExpiryDateYear = $payment->getCcExpYear();
628
+ if($payment->getCcSsStartMonth() != '')
629
+ {
630
+ $szStartDateMonth = $payment->getCcSsStartMonth();
631
+ }
632
+ if($payment->getCcSsStartYear() != '')
633
+ {
634
+ $szStartDateYear = $payment->getCcSsStartYear();
635
+ }
636
+ $szIssueNumber = $payment->getCcSsIssue();
637
+ $szCV2 = $payment->getCcCid();
638
+ $szHashDigest =
639
+ TPG_PaymentFormHelper::calculateTransparentRedirectHashDigest(
640
+ $szMerchantID,
641
+ $szPassword,
642
+ $hmHashMethod,
643
+ $szPreSharedKey,
644
+ $nAmount,
645
+ $nCurrencyCode,
646
+ $szOrderID,
647
+ $szTransactionType,
648
+ $szTransactionDateTime,
649
+ $szCallbackURL,
650
+ $szOrderDescription
651
+ );
652
+ Mage::getSingleton('checkout/session')->setHashdigest($szHashDigest)
653
+ ->setMerchantid($szMerchantID)
654
+ ->setAmount($nAmount)
655
+ ->setCurrencycode($nCurrencyCode)
656
+ ->setOrderid($szOrderID)
657
+ ->setTransactiontype($szTransactionType)
658
+ ->setTransactiondatetime($szTransactionDateTime)
659
+ ->setCallbackurl($szCallbackURL)
660
+ ->setOrderdescription($szOrderDescription)
661
+ ->setAddress1($szAddress1)
662
+ ->setAddress2($szAddress2)
663
+ ->setAddress3($szAddress3)
664
+ ->setAddress4($szAddress4)
665
+ ->setCity($szCity)
666
+ ->setState($szState)
667
+ ->setPostcode($szPostCode)
668
+ ->setCountrycode($nCountryCode)
669
+ ->setCardname($szCardName)
670
+ ->setCardnumber($szCardNumber)
671
+ ->setExpirydatemonth($szExpiryDateMonth)
672
+ ->setExpirydateyear($szExpiryDateYear)
673
+ ->setStartdatemonth($szStartDateMonth)
674
+ ->setStartdateyear($szStartDateYear)
675
+ ->setIssuenumber($szIssueNumber)
676
+ ->setCv2($szCV2);
677
+ if($nVersion >= 1410)
678
+ {
679
+ Mage::getSingleton('checkout/session')->setRedirectionMethod('_runRedirectedPaymentComplete');
680
+ $payment->getOrder()->setIsHostedPaymentPending(true);
681
+ }
682
+ /* serve out a dummy CrossReference as the TransactionId - this need to be done to enable the "Refund" button
683
+ in the Magento CreditMemo internal refund mechanism */
684
+ $payment->setTransactionId($szOrderID . "_" . date('YmdHis'));
685
+ }
686
+
687
+ /**
688
+ * Processing the 3D Secure transaction
689
+ *
690
+ * @param Varien_Object $payment
691
+ * @param int $amount
692
+ * @param string $szPaRes
693
+ * @param string $szMD
694
+ */
695
+ public function _run3DSecureTransaction(Varien_Object $payment, $szPaRes, $szMD)
696
+ {
697
+ $MerchantID = $this->getConfigData('merchantid');
698
+ $Password = $this->getConfigData('password');
699
+ $SecretKey = $this->getConfigData('secretkey');
700
+ $rgeplRequestGatewayEntryPointList = $this->_getGatewayEntryPointList();
701
+
702
+ $tdsaThreeDSecureAuthentication = new ThreeDSecureAuthentication($rgeplRequestGatewayEntryPointList);
703
+ $tdsaThreeDSecureAuthentication->getMerchantAuthentication()->setMerchantID($MerchantID);
704
+ $tdsaThreeDSecureAuthentication->getMerchantAuthentication()->setPassword($Password);
705
+ $tdsaThreeDSecureAuthentication->getThreeDSecureInputData()->setCrossReference($szMD);
706
+ $tdsaThreeDSecureAuthentication->getThreeDSecureInputData()->setPaRES($szPaRes);
707
+ $boTransactionProcessed = $tdsaThreeDSecureAuthentication->processTransaction($tdsarThreeDSecureAuthenticationResult, $todTransactionOutputData);
708
+ $error = $this->_handleTransactionResults($payment, $boTransactionProcessed, $tdsaThreeDSecureAuthentication, $tdsarThreeDSecureAuthenticationResult, $todTransactionOutputData);
709
+
710
+ if($error)
711
+ {
712
+ Mage::throwException($error);
713
+ }
714
+
715
+ return $this;
716
+ }
717
+
718
+ /**
719
+ * @param Varien_Object $payment
720
+ * @param bool $boIsHostedPaymentAction
721
+ * @param string $szStatusCode
722
+ * @param string $szMessage
723
+ * @param string $szPreviousStatusCode
724
+ * @param string $szPreviousMessage
725
+ * @param string $szOrderID
726
+ * @param string $szCrossReference
727
+ * @param string $szCardType
728
+ * @return PayVector_Tpg_Model_Direct
729
+ * @throws Mage_Core_Exception
730
+ */
731
+ public function _runRedirectedPaymentComplete(
732
+ Varien_Object $payment,
733
+ $boIsHostedPaymentAction,
734
+ $szStatusCode, $szMessage,
735
+ $szPreviousStatusCode,
736
+ $szPreviousMessage,
737
+ $szOrderID,
738
+ $szCrossReference,
739
+ $szCardType
740
+ )
741
+ {
742
+ $error = false;
743
+ $message = null;
744
+ $session = Mage::getSingleton('checkout/session');
745
+ $nVersion = $this->getVersion();
746
+ if($boIsHostedPaymentAction == true)
747
+ {
748
+ $szWording = "Hosted Payment Form ";
749
+ }
750
+ else
751
+ {
752
+ $szWording = "Transparent Redirect ";
753
+ }
754
+ $message = "Payment Processor Response: " . $szMessage;
755
+
756
+ //save cross reference so the user can use saved card functionality for future transactions
757
+ $payment->setTransactionId($szCrossReference);
758
+ $payment->setCcType($szCardType);
759
+
760
+ switch($szStatusCode)
761
+ {
762
+ case "0":
763
+ Mage::log($szWording . "transaction successfully completed. " . $message);
764
+ // need to store the new CrossReference and only store it against the payment object in the payment controller class
765
+ $session->setNewCrossReference($szCrossReference);
766
+ break;
767
+ case "20":
768
+ Mage::log("Duplicate " . $szWording . "transaction. " . $message);
769
+ $message =
770
+ $message .
771
+ ". A duplicate transaction means that a transaction with these details has already been processed by the payment provider. The details of the original transaction - Previous Transaction Response: " .
772
+ $szPreviousMessage;
773
+ if($szPreviousStatusCode != "0")
774
+ {
775
+ $error = true;
776
+ }
777
+ break;
778
+ case "5":
779
+ Mage::log($szWording . "transaction couldn't be completed. " . $message);
780
+ $error = true;
781
+ //$message = PayVector_Tpg_Model_Common_GlobalErrors::ERROR_183 . "<br />" . $message;
782
+ break;
783
+ case "30":
784
+ default:
785
+ Mage::log($szWording . "transaction couldn't be completed. " . $message);
786
+ $error = true;
787
+ break;
788
+ }
789
+ $session->setPaymentprocessorresponse($message);
790
+ // store the CrossReference and other data
791
+ $this->setPaymentAdditionalInformation($payment, $szCrossReference);
792
+ if($error == true)
793
+ {
794
+ $message = Mage::helper('tpg')->__($message);
795
+ Mage::throwException($message);
796
+ }
797
+ else
798
+ {
799
+ $payment->setStatus(self::STATUS_APPROVED);
800
+ if($nVersion == 1324 || $nVersion == 1330)
801
+ {
802
+ $payment->setIsInvoicePaid(true);
803
+ Mage::getSingleton('core/session')->addSuccess($message);
804
+ }
805
+ }
806
+
807
+ return $this;
808
+ }
809
+
810
+ /**
811
+ * Override the core Mage function to get the URL to be redirected from the Onepage
812
+ *
813
+ * @return string
814
+ */
815
+ public function getOrderPlaceRedirectUrl()
816
+ {
817
+ $result = false;
818
+ $session = Mage::getSingleton('checkout/session');
819
+ $nVersion = $this->getVersion();
820
+ $mode = $this->getConfigData('mode');
821
+ if($session->getMd() &&
822
+ $session->getAcsurl() &&
823
+ $session->getPareq()
824
+ )
825
+ {
826
+ // Direct (API) for 3D Secure payments
827
+ if($nVersion >= 1410)
828
+ {
829
+ // need to re-add the ordered item quantity to stock as per not completed 3DS transaction
830
+ if($mode != PayVector_Tpg_Model_Source_PaymentMode::PAYMENT_MODE_TRANSPARENT_REDIRECT)
831
+ {
832
+ $order = Mage::getModel('sales/order')->load(Mage::getSingleton('checkout/session')->getLastOrderId());
833
+ $this->addOrderedItemsToStock($order);
834
+ }
835
+ }
836
+ $result = Mage::getUrl('tpg/payment/threedsecure', array('_secure' => true));
837
+ }
838
+ if($session->getHashdigest())
839
+ {
840
+ // Hosted Payment Form and Transparent Redirect payments
841
+ if($nVersion >= 1410)
842
+ {
843
+ // need to re-add the ordered item quantity to stock as per not completed 3DS transaction
844
+ if(!Mage::getSingleton('checkout/session')->getPares())
845
+ {
846
+ $order = Mage::getModel('sales/order')->load(Mage::getSingleton('checkout/session')->getLastOrderId());
847
+ $this->addOrderedItemsToStock($order);
848
+ }
849
+ }
850
+ $result = Mage::getUrl('tpg/payment/redirect', array('_secure' => true));
851
+ }
852
+
853
+ return $result;
854
+ }
855
+
856
+ /**
857
+ * Get the correct payment processor domain
858
+ *
859
+ * @return string
860
+ */
861
+ private function _getPaymentProcessorFullDomain()
862
+ {
863
+ $szPaymentProcessorFullDomain = null;
864
+ // get the stored config setting
865
+ $szPaymentProcessorDomain = $this->getConfigData('paymentprocessordomain');
866
+ $szPaymentProcessorPort = $this->getConfigData('paymentprocessorport');
867
+ if($szPaymentProcessorPort == '443')
868
+ {
869
+ $szPaymentProcessorFullDomain = $szPaymentProcessorDomain . "/";
870
+ }
871
+ else
872
+ {
873
+ $szPaymentProcessorFullDomain = $szPaymentProcessorDomain . ":" . $szPaymentProcessorPort . "/";
874
+ }
875
+
876
+ return $szPaymentProcessorFullDomain;
877
+ }
878
+
879
+ /**
880
+ * Get the country ISO3 code from the ISO2 code
881
+ *
882
+ * @param ISO2Code
883
+ * @return string|null
884
+ */
885
+ private function _getISO3Code($szISO2Code)
886
+ {
887
+ $szISO3Code = null;
888
+ $collection = null;
889
+ $boFound = false;
890
+ $nCount = 1;
891
+ $collection = Mage::getModel('directory/country_api')->items();
892
+ while($boFound == false &&
893
+ $nCount < count($collection))
894
+ {
895
+ $item = $collection[$nCount];
896
+ if($item['iso2_code'] == $szISO2Code)
897
+ {
898
+ $boFound = true;
899
+ $szISO3Code = $item['iso3_code'];
900
+ }
901
+ $nCount++;
902
+ }
903
+
904
+ return $szISO3Code;
905
+ }
906
+
907
+ /**
908
+ * Transform the string Magento version number into an integer ready for comparison
909
+ *
910
+ * @return int
911
+ */
912
+ public function getVersion()
913
+ {
914
+ $magentoVersion = Mage::getVersion();
915
+ $pattern = '/[^\d]/';
916
+ $magentoVersion = preg_replace($pattern, '', $magentoVersion);
917
+ while(strlen($magentoVersion) < 4)
918
+ {
919
+ $magentoVersion .= '0';
920
+ }
921
+ $magentoVersion = (int) $magentoVersion;
922
+
923
+ return $magentoVersion;
924
+ }
925
+
926
+ /**
927
+ * @param float $amount
928
+ * @param int $nExponent
929
+ * @return float
930
+ */
931
+ private function _getRoundedAmount($amount, $nExponent)
932
+ {
933
+ // round the amount before use
934
+ $amount = round($amount, $nExponent);
935
+ $power = pow(10, $nExponent);
936
+ $nDecimalAmount = $amount * $power;
937
+
938
+ return $nDecimalAmount;
939
+ }
940
+
941
+ /**
942
+ * Depreciated function - sets the additional_information column data in the sales_flat_order_payment table
943
+ *
944
+ * @param Varien_Object $payment
945
+ * @param string $szCrossReference
946
+ * @param string $szTransactionType
947
+ * @param string $szTransactionDate
948
+ */
949
+ public function setPaymentAdditionalInformation($payment, $szCrossReference)
950
+ {
951
+ $arAdditionalInformationArray = array();
952
+ $paymentAction = $this->getConfigData('payment_action');
953
+ if($paymentAction == Mage_Paygate_Model_Authorizenet::ACTION_AUTHORIZE_CAPTURE)
954
+ {
955
+ $szTransactionType = "SALE";
956
+ }
957
+ else if($paymentAction == Mage_Paygate_Model_Authorizenet::ACTION_AUTHORIZE)
958
+ {
959
+ $szTransactionType = "PREAUTH";
960
+ }
961
+ else
962
+ {
963
+ Mage::throwException('Unknown payment action: ' . $paymentAction);
964
+ }
965
+ $szTransactionDate = date("Ymd");
966
+ $arAdditionalInformationArray["CrossReference"] = $szCrossReference;
967
+ $arAdditionalInformationArray["TransactionType"] = $szTransactionType;
968
+ $arAdditionalInformationArray["TransactionDateTime"] = $szTransactionDate;
969
+ $payment->setAdditionalInformation($arAdditionalInformationArray);
970
+ }
971
+
972
+ /**
973
+ * Deduct the order items from the stock
974
+ *
975
+ * @param unknown_type $order
976
+ */
977
+ public function subtractOrderedItemsFromStock($order)
978
+ {
979
+ $nVersion = Mage::getModel('tpg/direct')->getVersion();
980
+ $isCustomStockManagementEnabled = Mage::getModel('tpg/direct')->getConfigData('customstockmanagementenabled');
981
+ if($nVersion >= 1410 &&
982
+ $isCustomStockManagementEnabled
983
+ )
984
+ {
985
+ $items = $order->getAllItems();
986
+ foreach($items as $itemId => $item)
987
+ {
988
+ // ordered quantity of the item from stock
989
+ $quantity = $item->getQtyOrdered();
990
+ $productId = $item->getProductId();
991
+ $stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($productId);
992
+ $stockManagement = $stock->getManageStock();
993
+ if($stockManagement)
994
+ {
995
+ $stock->setQty($stock->getQty() - $quantity);
996
+ $stock->save();
997
+ }
998
+ }
999
+ }
1000
+ }
1001
+
1002
+ /**
1003
+ * Re-add the order items to the stock to balance the incorrect stock management before a payment is completed
1004
+ *
1005
+ * @param unknown_type $order
1006
+ */
1007
+ public function addOrderedItemsToStock($order)
1008
+ {
1009
+ $nVersion = Mage::getModel('tpg/direct')->getVersion();
1010
+ $isCustomStockManagementEnabled = Mage::getModel('tpg/direct')->getConfigData('customstockmanagementenabled');
1011
+ if($nVersion >= 1410 &&
1012
+ $isCustomStockManagementEnabled
1013
+ )
1014
+ {
1015
+ $items = $order->getAllItems();
1016
+ foreach($items as $itemId => $item)
1017
+ {
1018
+ // ordered quantity of the item from stock
1019
+ $quantity = $item->getQtyOrdered();
1020
+ $productId = $item->getProductId();
1021
+ $stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($productId);
1022
+ $stockManagement = $stock->getManageStock();
1023
+ if($stockManagement)
1024
+ {
1025
+ $stock->setQty($stock->getQty() + $quantity);
1026
+ $stock->save();
1027
+ }
1028
+ }
1029
+ }
1030
+ }
1031
+
1032
+ /**
1033
+ * Override the refund function to run a CrossReference transaction
1034
+ *
1035
+ * @param Varien_Object $payment
1036
+ * @param int $amount
1037
+ * @return PayVector_Tpg_Model_Direct
1038
+ */
1039
+ public function refund(Varien_Object $payment, $amount)
1040
+ {
1041
+ $error = false;
1042
+ $szTransactionType = "REFUND";
1043
+ $orderStatus = 'TPG_refunded';
1044
+ $szMessage = 'Payment refunded';
1045
+ if($amount > 0)
1046
+ {
1047
+ $error = $this->_runCrossReferenceTransaction($payment, $szTransactionType, $amount);
1048
+ }
1049
+ else
1050
+ {
1051
+ $error = 'Error in refunding the payment';
1052
+ }
1053
+ if($error === false)
1054
+ {
1055
+ $order = $payment->getOrder();
1056
+ $payment = $order->getPayment();
1057
+ $arAdditionalInformationArray = $payment->getAdditionalInformation();
1058
+ $arAdditionalInformationArray["Refunded"] = 1;
1059
+ $payment->setAdditionalInformation($arAdditionalInformationArray);
1060
+ $payment->save();
1061
+ $order->setState('canceled', $orderStatus, $szMessage, false);
1062
+ $order->save();
1063
+ }
1064
+ else
1065
+ {
1066
+ Mage::throwException($error);
1067
+ }
1068
+
1069
+ return $this;
1070
+ }
1071
+
1072
+ /**
1073
+ * PayVector VOID functionality
1074
+ * Note: if a transaction (payment) is once voided (canceled) it isn't possible to redo this action
1075
+ *
1076
+ * @param Varien_Object $payment
1077
+ * @return bool
1078
+ */
1079
+ public function ircVoid(Varien_Object $payment)
1080
+ {
1081
+ $error = false;
1082
+ $szTransactionType = "VOID";
1083
+ $orderStatus = "TPG_voided";
1084
+ // attempt a VOID and accordingly to the last saved transaction id (CrossReference) set the new message
1085
+ $szLastTransId = $payment->getLastTransId();
1086
+ $transaction = $payment->getTransaction($szLastTransId);
1087
+ $szMagentoTxnType = $transaction->getTxnType();
1088
+ $szMessage = "Payment voided";
1089
+ if($szMagentoTxnType == "capture")
1090
+ {
1091
+ $szMessage = "Payment voided";
1092
+ }
1093
+ else if($szMagentoTxnType == "authorization")
1094
+ {
1095
+ $szMessage = "PreAuthorization voided";
1096
+ }
1097
+ else if($szMagentoTxnType == "refund")
1098
+ {
1099
+ $szMessage = "Refund voided";
1100
+ }
1101
+ else
1102
+ {
1103
+ // general message
1104
+ $szMessage = "Payment voided";
1105
+ }
1106
+ $error = $this->_runCrossReferenceTransaction($payment, $szTransactionType);
1107
+ if($error === false)
1108
+ {
1109
+ $order = $payment->getOrder();
1110
+ $invoices = $order->getInvoiceCollection();
1111
+ $payment = $order->getPayment();
1112
+ $arAdditionalInformationArray = $payment->getAdditionalInformation();
1113
+ $arAdditionalInformationArray["Voided"] = 1;
1114
+ $payment->setAdditionalInformation($arAdditionalInformationArray);
1115
+ $payment->save();
1116
+ // cancel the invoices
1117
+ foreach($invoices as $invoice)
1118
+ {
1119
+ $invoice->cancel();
1120
+ $invoice->save();
1121
+ }
1122
+ // update the order
1123
+ $order->setActionBy($payment->getLggdInAdminUname())
1124
+ ->setActionDate(date('Y-m-d H:i:s'))
1125
+ ->setVoided(1)
1126
+ ->setState('canceled', $orderStatus, $szMessage, false);
1127
+ $order->save();
1128
+ $result = "0";
1129
+ }
1130
+ else
1131
+ {
1132
+ $result = $error;
1133
+ }
1134
+
1135
+ return $result;
1136
+ }
1137
+
1138
+ /**
1139
+ * PayVector COLLECTION functionality (capture called in Magento)
1140
+ *
1141
+ * @param Varien_Object $payment
1142
+ * @param string $szOrderID
1143
+ * @param string $szCrossReference
1144
+ * @return bool
1145
+ */
1146
+ public function ircCollection(Varien_Object $payment, $szOrderID, $szCrossReference)
1147
+ {
1148
+ $szTransactionType = "COLLECTION";
1149
+ $orderStatus = 'TPG_collected';
1150
+ $szMessage = 'Preauthorization successfully collected';
1151
+ $state = Mage_Sales_Model_Order::STATE_PROCESSING;
1152
+ $error = $this->_captureAuthorizedPayment($payment);
1153
+ if($error === false)
1154
+ {
1155
+ $order = $payment->getOrder();
1156
+ $invoices = $order->getInvoiceCollection();
1157
+ $payment = $order->getPayment();
1158
+ $arAdditionalInformationArray = $payment->getAdditionalInformation();
1159
+ $arAdditionalInformationArray["Collected"] = 1;
1160
+ $payment->setAdditionalInformation($arAdditionalInformationArray);
1161
+ $payment->save();
1162
+ // update the invoices to paid status
1163
+ foreach($invoices as $invoice)
1164
+ {
1165
+ $invoice->pay()->save();
1166
+ }
1167
+ $order->setActionBy($payment->getLggdInAdminUname())
1168
+ ->setActionDate(date('Y-m-d H:i:s'))
1169
+ ->setState($state, $orderStatus, $szMessage, false);
1170
+ $order->save();
1171
+ $result = "0";
1172
+ }
1173
+ else
1174
+ {
1175
+ $result = $error;
1176
+ }
1177
+
1178
+ return $result;
1179
+ }
1180
+
1181
+ /**
1182
+ * Private capture function for an authorized payment
1183
+ *
1184
+ * @param Varien_Object $payment
1185
+ * @return unknown
1186
+ */
1187
+ private function _captureAuthorizedPayment(Varien_Object $payment)
1188
+ {
1189
+ $error = false;
1190
+ $session = Mage::getSingleton('checkout/session');
1191
+ try
1192
+ {
1193
+ // set the COLLECTION variable to true
1194
+ $session->setIsCollectionCrossReferenceTransaction(true);
1195
+ $invoice = $payment->getOrder()->prepareInvoice();
1196
+ $invoice->register();
1197
+ if($this->_canCapture)
1198
+ {
1199
+ $invoice->capture();
1200
+ }
1201
+ $payment->getOrder()->addRelatedObject($invoice);
1202
+ $payment->setCreatedInvoice($invoice);
1203
+ }
1204
+ catch(Exception $exc)
1205
+ {
1206
+ $error = "Couldn't capture pre-authorized payment. Message: " . $exc->getMessage();
1207
+ Mage::log($exc->getMessage());
1208
+ }
1209
+ // remove the COLLECTION session variable once finished the COLLECTION attempt
1210
+ $session->setIsCollectionCrossReferenceTransaction(null);
1211
+
1212
+ return $error;
1213
+ }
1214
+
1215
+ /**
1216
+ * Internal CrossReference function for all VOID, REFUND, COLLECTION transaction types
1217
+ *
1218
+ * @param Varien_Object $payment
1219
+ * @param string $szTransactionType
1220
+ * @param float $amount
1221
+ * @param bool $threeDSecureOverridePolicy Whether 3DSecure should be run on this transaction
1222
+ * @return string|bool
1223
+ */
1224
+ private function _runCrossReferenceTransaction(Varien_Object $payment, $szTransactionType, $amount = false, $threeDSecureOverridePolicy = null)
1225
+ {
1226
+ $error = false;
1227
+ $boTransactionProcessed = false;
1228
+ $szMerchantID = $this->getConfigData('merchantid');
1229
+ $szPassword = $this->getConfigData('password');
1230
+ $iclISOCurrencyList = ISOCurrencies::getISOCurrencyList();
1231
+ $iclISOCurrencyList;
1232
+ $order = $payment->getOrder();
1233
+ $szOrderID = $order->getRealOrderId();;
1234
+ //$szCrossReference = $payment->getLastTransId();
1235
+ $additionalInformation = $payment->getAdditionalInformation();
1236
+ $szCrossReference = $additionalInformation["CrossReference"];
1237
+ $szCrossReference = $payment->getLastTransId();
1238
+ //if cross reference isn't found then look for the customers last transaction
1239
+ if(!isset($szCrossReference))
1240
+ {
1241
+ if(Mage::getSingleton('customer/session')->isLoggedIn())
1242
+ {
1243
+ $customer = Mage::getSingleton('customer/session')->getCustomer();
1244
+ $customerID = $customer->getId();
1245
+ $orderPaymentTableName = Mage::getSingleton('core/resource')->getTableName('sales/order_payment');
1246
+ $orderCollection = Mage::getModel('sales/order')->getCollection()
1247
+ ->addFilter('customer_id', $customerID);
1248
+ $orderCollection->getSelect()
1249
+ ->join(
1250
+ array("order_payment" => $orderPaymentTableName),
1251
+ "main_table.entity_id=order_payment.entity_id",
1252
+ "order_payment.last_trans_id"
1253
+ );
1254
+ //check if a cross reference was set in any of the previous transactions by this customer
1255
+ foreach($orderCollection as $order)
1256
+ {
1257
+ $szCrossReference = $order->getLastTransId();
1258
+ if(isset($szCrossReference))
1259
+ {
1260
+ break;
1261
+ }
1262
+ }
1263
+ }
1264
+ }
1265
+ // check the CrossReference and TransactionType parameters
1266
+ if(!$szCrossReference)
1267
+ {
1268
+ $error = 'Error occurred for ' . $szTransactionType . ': Missing Cross Reference';
1269
+ }
1270
+ if(!$szTransactionType)
1271
+ {
1272
+ $error = 'Error occurred for ' . $szTransactionType . ': Missing Transaction Type';
1273
+ }
1274
+ if($error === false)
1275
+ {
1276
+ $PaymentProcessorFullDomain = $this->_getPaymentProcessorFullDomain();
1277
+ $rgeplRequestGatewayEntryPointList = new RequestGatewayEntryPointList();
1278
+ $rgeplRequestGatewayEntryPointList->add("https://gw1." . $PaymentProcessorFullDomain, 100, 2);
1279
+ $rgeplRequestGatewayEntryPointList->add("https://gw2." . $PaymentProcessorFullDomain, 200, 2);
1280
+ $rgeplRequestGatewayEntryPointList->add("https://gw3." . $PaymentProcessorFullDomain, 300, 2);
1281
+
1282
+ $rgeplRequestGatewayEntryPointList = $this->_getGatewayEntryPointList();
1283
+
1284
+ $crtCrossReferenceTransaction = new CrossReferenceTransaction($rgeplRequestGatewayEntryPointList);
1285
+ $crtCrossReferenceTransaction->getMerchantAuthentication()->setMerchantID($szMerchantID);
1286
+ $crtCrossReferenceTransaction->getMerchantAuthentication()->setPassword($szPassword);
1287
+ // if no amount is specified get the grand total amount
1288
+ if($amount === false)
1289
+ {
1290
+ $nAmount = $order->getBaseGrandTotal();
1291
+ }
1292
+ else
1293
+ {
1294
+ $nAmount = $amount;
1295
+ }
1296
+ $szCurrencyShort = $order->getOrderCurrency()->getCurrencyCode();
1297
+ if($szCurrencyShort != '' && $iclISOCurrencyList->getISOCurrency($szCurrencyShort, $icISOCurrency))
1298
+ {
1299
+ $nCurrencyCode = new NullableInt($icISOCurrency->getISOCode());
1300
+ $crtCrossReferenceTransaction->getTransactionDetails()->getCurrencyCode()->setValue($icISOCurrency->getISOCode());
1301
+ }
1302
+ // round the amount before use
1303
+ $nAmount = round($nAmount, $icISOCurrency->getExponent());
1304
+ $power = pow(10, $icISOCurrency->getExponent());
1305
+ $nDecimalAmount = $nAmount * $power;
1306
+ $crtCrossReferenceTransaction->getTransactionDetails()->setOrderID($szOrderID);
1307
+ $crtCrossReferenceTransaction->getTransactionDetails()->getAmount()->setValue($nDecimalAmount);
1308
+ $crtCrossReferenceTransaction->getTransactionDetails()->getMessageDetails()->setCrossReference($szCrossReference);
1309
+ $crtCrossReferenceTransaction->getTransactionDetails()->getMessageDetails()->setTransactionType($szTransactionType);
1310
+ if(isset($threeDSecureOverridePolicy))
1311
+ {
1312
+ $crtCrossReferenceTransaction->getTransactionDetails()->getTransactionControl()->getThreeDSecureOverridePolicy()->setValue($threeDSecureOverridePolicy);
1313
+ }
1314
+ $crtCrossReferenceTransaction->getTransactionDetails()->getTransactionControl()->getEchoCardType()->setValue(true);
1315
+ try
1316
+ {
1317
+ $boTransactionProcessed = $crtCrossReferenceTransaction->processTransaction($crtrCrossReferenceTransactionResult, $todTransactionOutputData);
1318
+ }
1319
+ catch(Exception $exc)
1320
+ {
1321
+ Mage::log("exception: " . $exc->getMessage());
1322
+ }
1323
+ $error = $this->_handleTransactionResults($payment, $boTransactionProcessed, $crtCrossReferenceTransaction, $crtrCrossReferenceTransactionResult, $todTransactionOutputData);
1324
+ // if ($boTransactionProcessed == false)
1325
+ // {
1326
+ // // could not communicate with the payment gateway
1327
+ // $error = "Couldn't complete ".$szTransactionType." transaction. Details: ".$crtCrossReferenceTransaction->getLastException();
1328
+ // $szLogMessage = $error;
1329
+ // }
1330
+ // else
1331
+ // {
1332
+ // switch($crtrCrossReferenceTransactionResult->getStatusCode())
1333
+ // {
1334
+ // case 0:
1335
+ // $error = false;
1336
+ // $szNewCrossReference = $todTransactionOutputData->getCrossReference();
1337
+ // $szLogMessage = $szTransactionType . " CrossReference transaction successfully completed. Response object: ";
1338
+ //
1339
+ // $payment->setTransactionId($szNewCrossReference)
1340
+ // ->setParentTransactionId($szCrossReference)
1341
+ // ->setIsTransactionClosed(1);
1342
+ // $payment->save();
1343
+ // break;
1344
+ // default:
1345
+ // $szLogMessage = $crtrCrossReferenceTransactionResult->getMessage();
1346
+ // if ($crtrCrossReferenceTransactionResult->getErrorMessages()->getCount() > 0)
1347
+ // {
1348
+ // $szLogMessage = $szLogMessage.".";
1349
+ //
1350
+ // for ($LoopIndex = 0; $LoopIndex < $crtrCrossReferenceTransactionResult->getErrorMessages()->getCount(); $LoopIndex++)
1351
+ // {
1352
+ // $szLogMessage = $szLogMessage.$crtrCrossReferenceTransactionResult->getErrorMessages()->getAt($LoopIndex).";";
1353
+ // }
1354
+ // $szLogMessage = $szLogMessage." ";
1355
+ // }
1356
+ //
1357
+ // $error = "Couldn't complete ".$szTransactionType." transaction for CrossReference: " . $szCrossReference . ". Payment Response: ".$szLogMessage;
1358
+ // $szLogMessage = $szTransactionType . " CrossReference transaction failed. Response object: ";
1359
+ // break;
1360
+ // }
1361
+ //
1362
+ // $szLogMessage = $szLogMessage.print_r($crtrCrossReferenceTransactionResult, 1);
1363
+ // }
1364
+ //
1365
+ // Mage::log($szLogMessage);
1366
+ }
1367
+
1368
+ return $error;
1369
+ }
1370
+
1371
+ private function _getGatewayEntryPointList()
1372
+ {
1373
+ $rgeplRequestGatewayEntryPointList = new RequestGatewayEntryPointList();
1374
+
1375
+ /* @var PayVector_Tpg_Model_Gatewayentrypoints $gatewayEntryPointsTable */
1376
+ $gatewayEntryPointsTable = Mage::getModel('tpg/gatewayentrypoints');
1377
+ $geplGatewayEntryPointListXML = $gatewayEntryPointsTable->getEntryPoints();
1378
+
1379
+ if($geplGatewayEntryPointListXML !== null && $geplGatewayEntryPointListXML !== false)
1380
+ {
1381
+ $geplGatewayEntryPointList = GatewayEntryPointList::fromXmlString($geplGatewayEntryPointListXML);
1382
+ for($nCount = 0; $nCount < $geplGatewayEntryPointList->getCount(); $nCount++)
1383
+ {
1384
+ $geplGatewayEntryPoint = $geplGatewayEntryPointList->getAt($nCount);
1385
+ $rgeplRequestGatewayEntryPointList->add($geplGatewayEntryPoint->getEntryPointURL(), $geplGatewayEntryPoint->getMetric(), 1);
1386
+ }
1387
+ }
1388
+ else
1389
+ {
1390
+ // if we don't have a recent list in the database then just use blind processing
1391
+ $paymentProcessorFullDomain = $this->_getPaymentProcessorFullDomain();
1392
+ $rgeplRequestGatewayEntryPointList->add("https://gw1." . $paymentProcessorFullDomain, 100, 2);
1393
+ $rgeplRequestGatewayEntryPointList->add("https://gw2." . $paymentProcessorFullDomain, 200, 2);
1394
+ $rgeplRequestGatewayEntryPointList->add("https://gw3." . $paymentProcessorFullDomain, 300, 2);
1395
+ }
1396
+ return $rgeplRequestGatewayEntryPointList;
1397
+ }
1398
+
1399
+ /**
1400
+ * @param PayVector_Sales_Model_Order_Payment $payment
1401
+ * @param bool $boTransactionProcessed
1402
+ * @param GatewayTransaction $toTransactionObject
1403
+ * @param GatewayOutput $troTransactionResultObject
1404
+ * @param TransactionOutputData $todTransactionOutputData
1405
+ * @return string|bool
1406
+ */
1407
+ private function _handleTransactionResults($payment, $boTransactionProcessed, $toTransactionObject, $troTransactionResultObject, $todTransactionOutputData)
1408
+ {
1409
+ $order = $payment->getOrder();
1410
+ $szOrderID = $payment->increment_id;
1411
+ $nVersion = $this->getVersion();
1412
+ if($boTransactionProcessed === false)
1413
+ {
1414
+ // could not communicate with the payment gateway
1415
+ $error = PayVector_Tpg_Model_Common_GlobalErrors::ERROR_261;
1416
+ if($toTransactionObject->getLastException())
1417
+ {
1418
+ $error .= " [ " . $toTransactionObject->getLastException() . " ]";
1419
+ }
1420
+ $szLogMessage =
1421
+ "Couldn't complete transaction. Details: " . print_r($troTransactionResultObject, 1) . " " . print_r($todTransactionOutputData, 1); //Couldn't communicate with payment gateway.
1422
+ Mage::log($szLogMessage);
1423
+ Mage::log("Last exception: " . print_r($toTransactionObject->getLastException(), 1));
1424
+ }
1425
+ else
1426
+ {
1427
+ $currentTimestamp = Mage::getSingleton('core/date')->gmtDate();
1428
+ $gatewayEntryPointsListXML = $todTransactionOutputData->getGatewayEntryPoints()->toXmlString();
1429
+
1430
+ $gatewayEntryPointsTable = Mage::getResourceModel('tpg/gatewayentrypoints');
1431
+ $gatewayEntryPointsTable->saveEntryPoints($gatewayEntryPointsListXML, $currentTimestamp);
1432
+
1433
+ $szLogMessage = "Transaction could not be completed for OrderID: " . $szOrderID . ". Result details: ";
1434
+ $szNotificationMessage = 'Payment Processor Response: ' . $troTransactionResultObject->getMessage();
1435
+ $szCrossReference = $todTransactionOutputData->getCrossReference();
1436
+ /* serve out the CrossReference as the TransactionId - this need to be done to enable the "Refund" button
1437
+ in the Magento CreditMemo internal refund mechanism */
1438
+ $payment->setTransactionId($szCrossReference);
1439
+ switch($troTransactionResultObject->getStatusCode())
1440
+ {
1441
+ case 0:
1442
+ // status code of 0 - means transaction successful
1443
+ $szLogMessage = "Transaction successfully completed for OrderID: " . $szOrderID . ". Response object: ";
1444
+ // serve out the CrossReference as a TransactionId in the Magento system
1445
+ $order->setCustomerNote($szNotificationMessage);
1446
+ $this->setPaymentAdditionalInformation($payment, $szCrossReference);
1447
+ $payment->setCcType($todTransactionOutputData->getCardTypeData()->getCardType());
1448
+ $payment->setCcLast4(Mage::getModel('customer/session')->getData('payvector_card_last_four'));
1449
+ // deactivate the current quote - fixing the cart not emptied bug
1450
+ Mage::getSingleton('checkout/session')->getQuote()->setIsActive(false)->save();
1451
+ // add the success message
1452
+ Mage::getSingleton('core/session')->addSuccess($szNotificationMessage);
1453
+ break;
1454
+ case 3:
1455
+ // status code of 3 - means 3D Secure authentication required
1456
+ $szLogMessage = "3D Secure Authentication required for OrderID: " . $szOrderID . ". Response object: ";
1457
+ $szNotificationMessage = '';
1458
+ $szPaReq = $todTransactionOutputData->getThreeDSecureOutputData()->getPaREQ();
1459
+ $szACSURL = $todTransactionOutputData->getThreeDSecureOutputData()->getACSURL();
1460
+ Mage::getSingleton('checkout/session')->setMd($szCrossReference)
1461
+ ->setAcsurl($szACSURL)
1462
+ ->setPareq($szPaReq);
1463
+ if($nVersion >= 1410)
1464
+ {
1465
+ Mage::getSingleton('checkout/session')->setRedirectionMethod('_run3DSecureTransaction');
1466
+ $order->setIsThreeDSecurePending(true);
1467
+ }
1468
+ break;
1469
+ case 5:
1470
+ // status code of 5 - means transaction declined
1471
+ $error = PayVector_Tpg_Model_Common_GlobalErrors::ERROR_182;
1472
+ $error .= $szNotificationMessage;
1473
+ break;
1474
+ case 20:
1475
+ // status code of 20 - means duplicate transaction
1476
+ $szPreviousTransactionMessage = $troTransactionResultObject->getPreviousTransactionResult()->getMessage();
1477
+ $szLogMessage =
1478
+ "Duplicate transaction for OrderID: " .
1479
+ $szOrderID .
1480
+ ". A duplicate transaction means that a transaction with these details has already been processed by the payment provider. The details of the original transaction: " .
1481
+ $szPreviousTransactionMessage .
1482
+ ". Response object: ";
1483
+ $szNotificationMessage =
1484
+ $szNotificationMessage .
1485
+ ". A duplicate transaction means that a transaction with these details has already been processed by the payment provider. The details of the original transaction - Previous Transaction Response: " .
1486
+ $szPreviousTransactionMessage;
1487
+ if($troTransactionResultObject->getPreviousTransactionResult()->getStatusCode()->getValue() != 0)
1488
+ {
1489
+ $error = PayVector_Tpg_Model_Common_GlobalErrors::ERROR_182;
1490
+ $error .= $szNotificationMessage;
1491
+ }
1492
+ else
1493
+ {
1494
+ Mage::getSingleton('core/session')->addSuccess($szNotificationMessage);
1495
+ }
1496
+ break;
1497
+ case 30:
1498
+ // status code of 30 - means an error occurred
1499
+ $error = PayVector_Tpg_Model_Common_GlobalErrors::ERROR_183;
1500
+ $error .= $szNotificationMessage;
1501
+ $szLogMessage = "Transaction could not be completed for OrderID: " . $szOrderID . ". Error message: " . $troTransactionResultObject->getMessage();
1502
+ if($troTransactionResultObject->getErrorMessages()->getCount() > 0)
1503
+ {
1504
+ $szLogMessage = $szLogMessage . ".";
1505
+ for($LoopIndex = 0; $LoopIndex < $troTransactionResultObject->getErrorMessages()->getCount(); $LoopIndex++)
1506
+ {
1507
+ $szLogMessage = $szLogMessage . $troTransactionResultObject->getErrorMessages()->getAt($LoopIndex) . ";";
1508
+ }
1509
+ $szLogMessage = $szLogMessage . " ";
1510
+ }
1511
+ $szLogMessage = $szLogMessage . ' Response object: ';
1512
+ break;
1513
+ default:
1514
+ // unhandled status code
1515
+ $error = $szNotificationMessage;
1516
+ break;
1517
+ }
1518
+ $szLogMessage = $szLogMessage . print_r($troTransactionResultObject, 1);
1519
+ Mage::log($szLogMessage);
1520
+ }
1521
+ if($error)
1522
+ {
1523
+ $payment->setStatus('FAIL')
1524
+ ->setCcApproval('FAIL');
1525
+ }
1526
+ else
1527
+ {
1528
+ if($nVersion == 1324 || $nVersion == 1330)
1529
+ {
1530
+ $payment->setIsInvoicePaid(true);
1531
+ }
1532
+ }
1533
+
1534
+ return $error;
1535
+ }
1536
+ }
app/code/local/PayVector/Tpg/Model/Gatewayentrypoints.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PayVector_Tpg_Model_Gatewayentrypoints extends Mage_Core_Model_Mysql4_Abstract
4
+ {
5
+ protected function _construct()
6
+ {
7
+ $this->_init('tpg/gatewayentrypoints', 'gateway_entry_point_object');
8
+ }
9
+
10
+ public function saveEntryPoints($gatewayEntryPointListXML, $dateTimeProcessed)
11
+ {
12
+ $newData = array(
13
+ 'gateway_entry_point_object' => $gatewayEntryPointListXML,
14
+ 'date_time_processed' => $dateTimeProcessed
15
+ );
16
+
17
+ $this->_getWriteAdapter()->update($this->getMainTable(), $newData);
18
+ return $this;
19
+ }
20
+
21
+ /**
22
+ * @return null|string
23
+ */
24
+ public function getEntryPoints()
25
+ {
26
+ $offsetTimestamp = Mage::getSingleton('core/date')->gmtTimestamp() - 600;
27
+ $offsetDateTime = date('Y-m-d H:i:s', $offsetTimestamp);
28
+ $select = (string) $this->_getReadAdapter()->select()->from($this->getMainTable(), 'gateway_entry_point_object')->where('date_time_processed >= ?', $offsetDateTime);
29
+
30
+ $query = $this->_getReadAdapter()->query($select);
31
+ $query->execute();
32
+ return $query->fetchColumn();
33
+ }
34
+ }
app/code/local/PayVector/Tpg/Model/Request.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PayVector_Tpg_Model_Request extends Varien_Object
4
+ {
5
+ public function __call($method, $args)
6
+ {
7
+ switch (substr($method, 0, 3))
8
+ {
9
+ case 'get' :
10
+ $key = substr($method,3);
11
+ $data = $this->getData($key, isset($args[0]) ? $args[0] : null);
12
+ return $data;
13
+ case 'set' :
14
+ $key = substr($method,3);
15
+ $result = $this->setData($key, isset($args[0]) ? $args[0] : null);
16
+ return $result;
17
+ default:
18
+ return parent::__call($method, $args);
19
+ }
20
+ throw new Varien_Exception("Invalid method ".get_class($this)."::".$method."(".print_r($args,1).")");
21
+ }
22
+ }
app/code/local/PayVector/Tpg/Model/Resource/Eav/Mysql4/Setup.php ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PayVector_Tpg_Model_Resource_Eav_Mysql4_Setup extends Mage_Eav_Model_Entity_Setup
4
+ {
5
+
6
+ }
app/code/local/PayVector/Tpg/Model/Resource/Gatewayentrypoints.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PayVector_Tpg_Model_Resource_Gatewayentrypoints extends Mage_Core_Model_Resource_Db_Abstract
4
+ {
5
+ protected function _construct()
6
+ {
7
+ $this->_init('tpg/gatewayentrypoints', 'gateway_entry_point_object');
8
+ }
9
+ }
app/code/local/PayVector/Tpg/Model/Resource/Gatewayentrypoints/Collection.php ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PayVector_Tpg_Model_Resource_Gatewayentrypoints_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract {
4
+ protected function _construct()
5
+ {
6
+ $this->_init('tpg/gatewayentrypoints');
7
+ }
8
+ }
app/code/local/PayVector/Tpg/Model/Resource/Setup.php ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PayVector_Tpg_Model_Resource_Setup extends Mage_Core_Model_Resource_Setup
4
+ {
5
+
6
+ }
app/code/local/PayVector/Tpg/Model/Source/HashMethod.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PayVector_Tpg_Model_Source_HashMethod
4
+ {
5
+ // public enum for the payment types
6
+ const HASH_METHOD_MD5 = 'md5';
7
+ const HASH_METHOD_SHA1 = 'sha1';
8
+ const HASH_METHOD_HMACMD5 = 'hmacmd5';
9
+ const HASH_METHOD_HMACSHA1 = 'hmacsha1';
10
+
11
+ public function toOptionArray()
12
+ {
13
+ return array
14
+ (
15
+ array(
16
+ 'value' => self::HASH_METHOD_MD5,
17
+ 'label' => Mage::helper('tpg')->__('MD5')
18
+ ),
19
+ array(
20
+ 'value' => self::HASH_METHOD_SHA1,
21
+ 'label' => Mage::helper('tpg')->__('SHA1')
22
+ ),
23
+ array(
24
+ 'value' => self::HASH_METHOD_HMACMD5,
25
+ 'label' => Mage::helper('tpg')->__('HMACMD5')
26
+ ),
27
+ array(
28
+ 'value' => self::HASH_METHOD_HMACSHA1,
29
+ 'label' => Mage::helper('tpg')->__('HMACSHA1')
30
+ )
31
+ );
32
+ }
33
+ }
app/code/local/PayVector/Tpg/Model/Source/OrderStatus.php ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PayVector_Tpg_Model_Source_OrderStatus
4
+ {
5
+ public function toOptionArray()
6
+ {
7
+ return array(
8
+ // override the order status and ONLY offer "pending" by default
9
+ array(
10
+ 'value' => 'processing',
11
+ 'label' => Mage::helper('tpg')->__('Processing')
12
+ ),
13
+ );
14
+ }
15
+ }
app/code/local/PayVector/Tpg/Model/Source/PaymentAction.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PayVector_Tpg_Model_Source_PaymentAction extends Mage_Paygate_Model_Authorizenet_Source_PaymentAction
4
+ {
5
+ public function toOptionArray()
6
+ {
7
+ return array
8
+ (
9
+ // override the core class to ONLY allow capture transactions (immediate settlement)
10
+ array
11
+ (
12
+ 'value' => Mage_Paygate_Model_Authorizenet::ACTION_AUTHORIZE,
13
+ 'label' => Mage::helper('paygate')->__('PREAUTH')
14
+ ),
15
+ array
16
+ (
17
+ 'value' => Mage_Paygate_Model_Authorizenet::ACTION_AUTHORIZE_CAPTURE,
18
+ 'label' => Mage::helper('paygate')->__('SALE')
19
+ )
20
+ );
21
+ }
22
+ }
app/code/local/PayVector/Tpg/Model/Source/PaymentMode.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PayVector_Tpg_Model_Source_PaymentMode
4
+ {
5
+ // public enum for the payment types
6
+ const PAYMENT_MODE_DIRECT_API = 'direct';
7
+ const PAYMENT_MODE_HOSTED_PAYMENT_FORM = 'hosted';
8
+ const PAYMENT_MODE_TRANSPARENT_REDIRECT = 'transparent';
9
+
10
+ public function toOptionArray()
11
+ {
12
+ return array
13
+ (
14
+ array(
15
+ 'value' => self::PAYMENT_MODE_DIRECT_API,
16
+ 'label' => Mage::helper('tpg')->__('Direct (API)')
17
+ ),
18
+ array(
19
+ 'value' => self::PAYMENT_MODE_HOSTED_PAYMENT_FORM,
20
+ 'label' => Mage::helper('tpg')->__('Hosted Payment Form')
21
+ )
22
+ );
23
+ /*,
24
+ array(
25
+ 'value' => self::PAYMENT_MODE_TRANSPARENT_REDIRECT,
26
+ 'label' => Mage::helper('tpg')->__('Transparent Redirect')
27
+ ),
28
+ );*/
29
+ }
30
+ }
app/code/local/PayVector/Tpg/Model/Source/ResultDeliveryMethod.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PayVector_Tpg_Model_Source_ResultDeliveryMethod
4
+ {
5
+ // public enum for the payment types
6
+ const RESULT_DELIVERY_METHOD_POST = 'POST';
7
+ const RESULT_DELIVERY_METHOD_SERVER = 'SERVER';
8
+ const RESULT_DELIVERY_METHOD_SERVER_PULL = 'SERVER_PULL';
9
+
10
+ public function toOptionArray()
11
+ {
12
+ return array
13
+ (
14
+ array(
15
+ 'value' => self::RESULT_DELIVERY_METHOD_POST,
16
+ 'label' => Mage::helper('tpg')->__('Post')
17
+ ),
18
+ /*array(
19
+ 'value' => self::RESULT_DELIVERY_METHOD_SERVER,
20
+ 'label' => Mage::helper('tpg')->__('Server')
21
+ ),*/
22
+ array(
23
+ 'value' => self::RESULT_DELIVERY_METHOD_SERVER_PULL,
24
+ 'label' => Mage::helper('tpg')->__('Server Pull')
25
+ ),
26
+ );
27
+ }
28
+ }
app/code/local/PayVector/Tpg/controllers/PaymentController.php ADDED
@@ -0,0 +1,1027 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Standard Checkout Controller
5
+ *
6
+ */
7
+ class PayVector_Tpg_PaymentController extends Mage_Core_Controller_Front_Action
8
+ {
9
+ protected function _expireAjax()
10
+ {
11
+ if(!Mage::getSingleton('checkout/session')->getQuote()->hasItems())
12
+ {
13
+ $this->getResponse()->setHeader('HTTP/1.1', '403 Session Expired');
14
+ exit;
15
+ }
16
+ }
17
+
18
+ public function errorAction()
19
+ {
20
+ //$this->_redirect('checkout/cart');
21
+ $this->_redirect('checkout/onepage/failure');
22
+ #$this->loadLayout();
23
+ #$this->renderLayout();
24
+ }
25
+
26
+ /**
27
+ * When a customer cancel payment.
28
+ */
29
+ public function cancelAction()
30
+ {
31
+ $session = Mage::getSingleton('checkout/session');
32
+ $session->setQuoteId($session->getPaypalStandardQuoteId(true));
33
+ $this->_redirect('checkout/cart');
34
+ }
35
+
36
+ /**
37
+ * Action logic for Hosted Payment mode
38
+ *
39
+ */
40
+ public function redirectAction()
41
+ {
42
+ $this->getResponse()->setBody($this->getLayout()->createBlock('tpg/redirect')->toHtml());
43
+ }
44
+
45
+ /**
46
+ * Action logic for 3D Secure redirection
47
+ *
48
+ */
49
+ public function threedsecureAction()
50
+ {
51
+ $this->getResponse()->setBody($this->getLayout()->createBlock('tpg/threedsecure')->toHtml());
52
+ }
53
+
54
+ /**
55
+ * Action logic for handling the reception of the 3D Secure authentication result (PaRes)
56
+ *
57
+ * @return unknown
58
+ */
59
+ public function callback3dAction()
60
+ {
61
+ $boError = false;
62
+ $szMessage = '';
63
+ $checkout = Mage::getSingleton('checkout/type_onepage');
64
+ $session = Mage::getSingleton('checkout/session');
65
+ $szPaymentProcessorResponse = '';
66
+ $nVersion = Mage::getModel('tpg/direct')->getVersion();
67
+ $order = Mage::getModel('sales/order');
68
+ $order->load(Mage::getSingleton('checkout/session')->getLastOrderId());
69
+ $boCartIsEmpty = false;
70
+ try
71
+ {
72
+ $szPaRes = $this->getRequest()->getPost('PaRes');
73
+ $szMD = $this->getRequest()->getPost('MD');
74
+ // check if the cart is not empty, ie: after successful completion back button clicked in the browser
75
+ $payVectorOrderId = Mage::getSingleton('checkout/session')->getTpgOrderId();
76
+ $szOrderStatus = $order->getStatus();
77
+ if($szOrderStatus != 'irc_paid' &&
78
+ $szOrderStatus != 'irc_preauth'
79
+ )
80
+ {
81
+ // cart is not empty
82
+ // complete the 3D Secure transaction with the 3D Authorization result
83
+ $checkout->saveOrderAfter3dSecure($szPaRes, $szMD);
84
+ $szPaymentProcessorResponse = $session->getPaymentprocessorresponse();
85
+ }
86
+ else
87
+ {
88
+ // cart is empty
89
+ $boCartIsEmpty = true;
90
+ $szPaymentProcessorResponse = null;
91
+ }
92
+ }
93
+ catch(Exception $exc)
94
+ {
95
+ $boError = true;
96
+ Mage::logException($exc);
97
+ if(isset($_SESSION['tpg_message']))
98
+ {
99
+ $szMessage = $_SESSION['tpg_message'];
100
+ unset($_SESSION['tpg_message']);
101
+ }
102
+ else
103
+ {
104
+ $szMessage = PayVector_Tpg_Model_Common_GlobalErrors::ERROR_7655;
105
+ }
106
+ }
107
+ if($boError)
108
+ {
109
+ if($szPaymentProcessorResponse != null &&
110
+ $szPaymentProcessorResponse != ''
111
+ )
112
+ {
113
+ $szMessage .= '<br/>' . $szPaymentProcessorResponse;
114
+ }
115
+ if($nVersion >= 1410)
116
+ {
117
+ if($order)
118
+ {
119
+ $orderState = 'pending_payment';
120
+ $orderStatus = 'irc_failed_threed_secure';
121
+ $order->setCustomerNote(Mage::helper('tpg')->__('3D Secure Authentication Failed'));
122
+ $order->setState($orderState, $orderStatus, $szPaymentProcessorResponse, false);
123
+ $order->save();
124
+ }
125
+ }
126
+ if($nVersion == 1324 || $nVersion == 1330)
127
+ {
128
+ Mage::getSingleton('checkout/session')->addError($szMessage);
129
+ }
130
+ else
131
+ {
132
+ Mage::getSingleton('core/session')->addError($szMessage);
133
+ }
134
+ $this->_clearSessionVariables();
135
+ // report out an fatal error
136
+ $this->_redirect('checkout/onepage/failure');
137
+ }
138
+ else
139
+ {
140
+ // set the quote as inactive after back from paypal
141
+ Mage::getSingleton('checkout/session')->getQuote()->setIsActive(false)->save();
142
+ // if the cart is empty do not attempt to update the invoices
143
+ if($boCartIsEmpty == false)
144
+ {
145
+ // send confirmation email to customer
146
+ if($order->getId())
147
+ {
148
+ $order->sendNewOrderEmail();
149
+ }
150
+ if($nVersion >= 1410)
151
+ {
152
+ // TODO : no need to remove stock item as the system will do it in 1.6 version
153
+ if($nVersion < 1600)
154
+ {
155
+ Mage::getModel('tpg/direct')->subtractOrderedItemsFromStock($order);
156
+ }
157
+ $this->_updateInvoices($order, $szPaymentProcessorResponse);
158
+ }
159
+ if($nVersion != 1324 && $nVersion != 1330)
160
+ {
161
+ if($szPaymentProcessorResponse != '')
162
+ {
163
+ Mage::getSingleton('core/session')->addSuccess($szPaymentProcessorResponse);
164
+ }
165
+ }
166
+ }
167
+ $this->_redirect('checkout/onepage/success', array('_secure' => true));
168
+ }
169
+ }
170
+
171
+ /**
172
+ * Action logic for handling the result from the Hosted Payment page
173
+ *
174
+ */
175
+ public function callbackhostedpaymentAction()
176
+ {
177
+ $boError = false;
178
+ $formVariables = array();
179
+ $model = Mage::getModel('tpg/direct');
180
+ $szOrderID = $this->getRequest()->getPost('OrderID');
181
+ /* @var PayVector_Checkout_Model_Type_Onepage $checkout */
182
+ $checkout = Mage::getSingleton('checkout/type_onepage');
183
+ $session = Mage::getSingleton('checkout/session');
184
+ $szPaymentProcessorResponse = '';
185
+ $order = Mage::getModel('sales/order');
186
+ $order->load(Mage::getSingleton('checkout/session')->getLastOrderId());
187
+ $nVersion = Mage::getModel('tpg/direct')->getVersion();
188
+ $boCartIsEmpty = false;
189
+ try
190
+ {
191
+ $hmHashMethod = $model->getConfigData('hashmethod');
192
+ $szPassword = $model->getConfigData('password');
193
+ $szPreSharedKey = $model->getConfigData('presharedkey');
194
+ $formVariables['HashDigest'] = $this->getRequest()->getPost('HashDigest');
195
+ $formVariables['MerchantID'] = $this->getRequest()->getPost('MerchantID');
196
+ $formVariables['StatusCode'] = $this->getRequest()->getPost('StatusCode');
197
+ $formVariables['Message'] = $this->getRequest()->getPost('Message');
198
+ $formVariables['PreviousStatusCode'] = $this->getRequest()->getPost('PreviousStatusCode');
199
+ $formVariables['PreviousMessage'] = $this->getRequest()->getPost('PreviousMessage');
200
+ $formVariables['CrossReference'] = $this->getRequest()->getPost('CrossReference');
201
+ $formVariables['Amount'] = $this->getRequest()->getPost('Amount');
202
+ $formVariables['CurrencyCode'] = $this->getRequest()->getPost('CurrencyCode');
203
+ $formVariables['CardType'] = $this->getRequest()->getPost('CardType');
204
+ $formVariables['CardClass'] = $this->getRequest()->getPost('CardClass');
205
+ $formVariables['CardIssuer'] = $this->getRequest()->getPost('CardIssuer');
206
+ $formVariables['CardIssuerCountryCode'] = $this->getRequest()->getPost('CardIssuerCountryCode');
207
+ $formVariables['OrderID'] = $this->getRequest()->getPost('OrderID');
208
+ $formVariables['TransactionType'] = $this->getRequest()->getPost('TransactionType');
209
+ $formVariables['TransactionDateTime'] = $this->getRequest()->getPost('TransactionDateTime');
210
+ $formVariables['OrderDescription'] = $this->getRequest()->getPost('OrderDescription');
211
+ $formVariables['CustomerName'] = $this->getRequest()->getPost('CustomerName');
212
+ $formVariables['Address1'] = $this->getRequest()->getPost('Address1');
213
+ $formVariables['Address2'] = $this->getRequest()->getPost('Address2');
214
+ $formVariables['Address3'] = $this->getRequest()->getPost('Address3');
215
+ $formVariables['Address4'] = $this->getRequest()->getPost('Address4');
216
+ $formVariables['City'] = $this->getRequest()->getPost('City');
217
+ $formVariables['State'] = $this->getRequest()->getPost('State');
218
+ $formVariables['PostCode'] = $this->getRequest()->getPost('PostCode');
219
+ $formVariables['CountryCode'] = $this->getRequest()->getPost('CountryCode');
220
+ if(!TPG_PaymentFormHelper::compareHostedPaymentFormHashDigest($formVariables, $szPassword, $hmHashMethod, $szPreSharedKey))
221
+ {
222
+ $boError = true;
223
+ $szNotificationMessage = "The payment was rejected for a SECURITY reason: the incoming payment data was tampered with.";
224
+ Mage::log("The Hosted Payment Form transaction couldn't be completed for the following reason: [" . $szNotificationMessage . "]. Form variables: " . print_r($formVariables, 1));
225
+ }
226
+ else
227
+ {
228
+ $payVectorOrderId = Mage::getSingleton('checkout/session')->getTpgOrderId();
229
+ $szOrderStatus = $order->getStatus();
230
+ $szStatusCode = $formVariables['StatusCode'];
231
+ $szMessage = $formVariables['Message'];
232
+ $szPreviousStatusCode = $formVariables['PreviousStatusCode'];
233
+ $szPreviousMessage = $formVariables['PreviousMessage'];
234
+ $szOrderID = $formVariables['OrderID'];
235
+ $szCrossReference = $formVariables['CrossReference'];
236
+ $szCardType = $formVariables['CardType'];
237
+
238
+ if($szOrderStatus != 'irc_paid' && $szOrderStatus != 'irc_preauth')
239
+ {
240
+ $checkout->saveOrderAfterRedirectedPaymentAction(
241
+ true,
242
+ $szStatusCode,
243
+ $szMessage,
244
+ $szPreviousStatusCode,
245
+ $szPreviousMessage,
246
+ $szOrderID,
247
+ $szCrossReference,
248
+ $szCardType
249
+ );
250
+ }
251
+ else
252
+ {
253
+ // cart is empty
254
+ $boCartIsEmpty = true;
255
+ $szPaymentProcessorResponse = null;
256
+ // check the StatusCode as the customer might have just clicked the BACK button and re-submitted the card details
257
+ // which can cause a charge back to the merchant
258
+ $this->_fixBackButtonBug($szOrderID, $szStatusCode, $szMessage, $szPreviousStatusCode, $szPreviousMessage);
259
+ }
260
+ }
261
+ }
262
+ catch(Exception $exc)
263
+ {
264
+ $boError = true;
265
+ $szPaymentProcessorResponse = $exc->getMessage();
266
+ $szNotificationMessage = PayVector_Tpg_Model_Common_GlobalErrors::ERROR_183;
267
+ Mage::logException($exc);
268
+ }
269
+ $szPaymentProcessorResponse = $session->getPaymentprocessorresponse();
270
+ if($boError)
271
+ {
272
+ if($szPaymentProcessorResponse != null &&
273
+ $szPaymentProcessorResponse != ''
274
+ )
275
+ {
276
+ $szNotificationMessage .= '<br/>' . $szPaymentProcessorResponse;
277
+ }
278
+ $model->setPaymentAdditionalInformation($order->getPayment(), $this->getRequest()->getPost('CrossReference'));
279
+ //$order->getPayment()->setTransactionId($this->getRequest()->getPost('CrossReference'));
280
+ if($nVersion >= 1410)
281
+ {
282
+ if($order)
283
+ {
284
+ $orderState = 'pending_payment';
285
+ $orderStatus = 'irc_failed_hosted_payment';
286
+ $order->setCustomerNote(Mage::helper('tpg')->__('Hosted Payment Failed'));
287
+ $order->setState($orderState, $orderStatus, $szPaymentProcessorResponse, false);
288
+ $order->save();
289
+ }
290
+ }
291
+ if($nVersion == 1324 || $nVersion == 1330)
292
+ {
293
+ Mage::getSingleton('checkout/session')->addError($szNotificationMessage);
294
+ }
295
+ else
296
+ {
297
+ Mage::getSingleton('core/session')->addError($szNotificationMessage);
298
+ }
299
+ $order->save();
300
+ $this->_clearSessionVariables();
301
+ $this->_redirect('checkout/onepage/failure');
302
+ }
303
+ else
304
+ {
305
+ // set the quote as inactive after back from paypal
306
+ Mage::getSingleton('checkout/session')->getQuote()->setIsActive(false)->save();
307
+ if($boCartIsEmpty == false)
308
+ {
309
+ // send confirmation email to customer
310
+ if($order->getId())
311
+ {
312
+ $order->sendNewOrderEmail();
313
+ }
314
+ if($nVersion >= 1410)
315
+ {
316
+ // TODO : no need to remove stock item as the system will do it in 1.6 version
317
+ if($nVersion < 1600)
318
+ {
319
+ $model->subtractOrderedItemsFromStock($order);
320
+ }
321
+ $this->_updateInvoices($order, $szPaymentProcessorResponse);
322
+ }
323
+ if($nVersion != 1324 && $nVersion != 1330)
324
+ {
325
+ if($szPaymentProcessorResponse != '')
326
+ {
327
+ Mage::getSingleton('core/session')->addSuccess($szPaymentProcessorResponse);
328
+ }
329
+ }
330
+ }
331
+ $this->_redirect('checkout/onepage/success', array('_secure' => true));
332
+ }
333
+ }
334
+
335
+ /**
336
+ * Action logic for handling the server to server communication in case of Result Delivery Method = SERVER
337
+ *
338
+ */
339
+ public function serverresultAction()
340
+ {
341
+ $boError = false;
342
+ $model = Mage::getModel('tpg/direct');
343
+ $checkout = Mage::getSingleton('checkout/type_onepage');
344
+ $szOrderID = $this->getRequest()->getPost('OrderID');
345
+ $szMessage = $this->getRequest()->getPost('Message');
346
+ $nVersion = Mage::getModel('tpg/direct')->getVersion();
347
+ try
348
+ {
349
+ // finish off the transaction: if StatusCode = 0 create an order otherwise do nothing
350
+ $checkout->saveOrderAfterRedirectedPaymentAction(
351
+ true,
352
+ $this->getRequest()->getPost('StatusCode'),
353
+ $szMessage,
354
+ $this->getRequest()->getPost('PreviousStatusCode'),
355
+ $this->getRequest()->getPost('PreviousMessage'),
356
+ $this->getRequest()->getPost('OrderID'),
357
+ $this->getRequest()->getPost('CrossReference')
358
+ );
359
+ }
360
+ catch(Exception $exc)
361
+ {
362
+ $boError = true;
363
+ $szNotificationMessage = PayVector_Tpg_Model_Common_GlobalErrors::ERROR_183;
364
+ $szErrorMessage = $exc->getMessage();
365
+ Mage::logException($exc);
366
+ }
367
+ if($boError == true)
368
+ {
369
+ $this->getResponse()->setBody('StatusCode=30&Message=' . $szErrorMessage);
370
+ }
371
+ else
372
+ {
373
+ $order = Mage::getModel('sales/order');
374
+ $order->load(Mage::getSingleton('checkout/session')->getLastOrderId());
375
+ // set the quote as inactive after back from paypal
376
+ Mage::getSingleton('checkout/session')->getQuote()->setIsActive(false)->save();
377
+ // send confirmation email to customer
378
+ if($order->getId())
379
+ {
380
+ $order->sendNewOrderEmail();
381
+ }
382
+ // if the payment was successful clear the session so that if the customer navigates back to the Magento store
383
+ // the shopping cart will be emptied rather than 'uncomplete'
384
+ if($this->getRequest()->getPost('StatusCode') == '0')
385
+ {
386
+ Mage::getSingleton('checkout/session')->clear();
387
+ if($nVersion >= 1410)
388
+ {
389
+ if($nVersion < 1600)
390
+ {
391
+ $model->subtractOrderedItemsFromStock($order);
392
+ }
393
+ $this->_updateInvoices($order, $szMessage);
394
+ }
395
+ }
396
+ $this->getResponse()->setBody('StatusCode=0');
397
+ }
398
+ }
399
+
400
+ /*
401
+ * Action logic to handle the SERVER_PUSH web request to the PaymentFormResultHandler.ashx to get the transaction result details
402
+ */
403
+ public function serverpullresultAction()
404
+ {
405
+ $boError = false;
406
+ $nStartIndex = false;
407
+ //
408
+ $szHashDigest = false;
409
+ $szMerchantID = false;
410
+ $szCrossReference = false;
411
+ $szOrderID = false;
412
+ //
413
+ $nErrorNumber = false;
414
+ $szErrorMessage = false;
415
+ $model = Mage::getModel('tpg/direct');
416
+ $checkout = Mage::getSingleton('checkout/type_onepage');
417
+ $szServerPullURL = $model->getConfigData('serverpullresultactionurl');
418
+ $szMerchantID = $model->getConfigData('merchantid');
419
+ $szPassword = $model->getConfigData('password');
420
+ $hmHashMethod = $model->getConfigData('hashmethod');
421
+ $szPreSharedKey = $model->getConfigData('presharedkey');
422
+ $szURLVariableString = $this->getRequest()->getRequestUri();
423
+ $nStartIndex = strpos($szURLVariableString, "?");
424
+ $order = Mage::getModel('sales/order');
425
+ $order->load(Mage::getSingleton('checkout/session')->getLastOrderId());
426
+ $nVersion = Mage::getModel('tpg/direct')->getVersion();
427
+ if(!is_int($nStartIndex))
428
+ {
429
+ $szErrorMessage = PayVector_Tpg_Model_Common_GlobalErrors::ERROR_309;
430
+ Mage::log(PayVector_Tpg_Model_Common_GlobalErrors::ERROR_309 . " Request URI: " . $szURLVariableString);
431
+ }
432
+ else
433
+ {
434
+ $szURLVariableString = substr($szURLVariableString, $nStartIndex + 1);
435
+ $arFormVariables = TPG_PaymentFormHelper::getVariableCollectionFromString($szURLVariableString);
436
+ if(!TPG_PaymentFormHelper::compareServerHashDigest($arFormVariables, $szPassword, $hmHashMethod, $szPreSharedKey))
437
+ {
438
+ // report an error message
439
+ $szErrorMessage = PayVector_Tpg_Model_Common_GlobalErrors::ERROR_304;
440
+ }
441
+ else
442
+ {
443
+ $szOrderID = $arFormVariables["OrderID"];
444
+ $szCrossReference = $arFormVariables["CrossReference"];
445
+ $szPostFields = "MerchantID=" . urlencode($szMerchantID) . "&Password=" . urlencode($szPassword) . "&CrossReference=" . urlencode($szCrossReference);
446
+ //$szPostFields = "MerchantID=".$szMerchantID."&Password=".$szPassword."&CrossReference=".$szCrossReference;
447
+ $cCurl = curl_init();
448
+ curl_setopt($cCurl, CURLOPT_URL, $szServerPullURL);
449
+ curl_setopt($cCurl, CURLOPT_POST, true);
450
+ curl_setopt($cCurl, CURLOPT_POSTFIELDS, $szPostFields);
451
+ curl_setopt($cCurl, CURLOPT_RETURNTRANSFER, true);
452
+ curl_setopt($cCurl, CURLOPT_ENCODING, "UTF-8");
453
+ curl_setopt($cCurl, CURLOPT_SSL_VERIFYPEER, false);
454
+ curl_setopt($cCurl, CURLOPT_SSL_VERIFYHOST, false);
455
+ $response = curl_exec($cCurl);
456
+ $nErrorNumber = curl_errno($cCurl);
457
+ $szErrorMessage = curl_error($cCurl);
458
+ curl_close($cCurl);
459
+ if(is_int($nErrorNumber) &&
460
+ $nErrorNumber > 0
461
+ )
462
+ {
463
+ Mage::log(
464
+ "Error happened while trying to retrieve the transaction result details for a SERVER_PULL method for CrossReference: " .
465
+ $szCrossReference .
466
+ ". Error code: " .
467
+ $nErrorNumber .
468
+ ", message: " .
469
+ $szErrorMessage
470
+ );
471
+ // suppress the message and use customer friendly instead
472
+ $szErrorMessage = PayVector_Tpg_Model_Common_GlobalErrors::ERROR_329 . " Message: " . $szErrorMessage;
473
+ }
474
+ else
475
+ {
476
+ // synchronize of the Magento backend with the transcation result
477
+ try
478
+ {
479
+ // get the response items
480
+ $responseItems = TPG_PaymentFormHelper::getVariableCollectionFromString($response);
481
+ $szStatusCode = $responseItems["StatusCode"];
482
+ $szMessage = $responseItems["Message"];
483
+ $transactionResult = $responseItems["TransactionResult"];
484
+ if($szStatusCode !== '0')
485
+ {
486
+ $szErrorMessage = PayVector_Tpg_Model_Common_GlobalErrors::ERROR_381;
487
+ $szErrorMessage .= " Message: " . $szMessage;
488
+ }
489
+ else
490
+ {
491
+ // URL decode the transaction result variable and get the transaction result sub variables
492
+ $transactionResult = urldecode($transactionResult);
493
+ $transactionResult = TPG_PaymentFormHelper::getVariableCollectionFromString($transactionResult);
494
+ // create the order item in the Magento backend
495
+ $szStatusCode = isset($transactionResult["StatusCode"]) ? $transactionResult["StatusCode"] : false;
496
+ $szMessage = isset($transactionResult["Message"]) ? $transactionResult["Message"] : false;
497
+ $szPreviousStatusCode = $szStatusCode;
498
+ $szPreviousMessage = $szMessage;
499
+ $checkout->saveOrderAfterRedirectedPaymentAction(
500
+ true,
501
+ $szStatusCode,
502
+ $szMessage,
503
+ $szPreviousStatusCode,
504
+ $szPreviousMessage,
505
+ $szOrderID,
506
+ $szCrossReference
507
+ );
508
+ }
509
+ }
510
+ catch(Exception $exc)
511
+ {
512
+ $boError = true;
513
+ $szPaymentProcessorResponse = $exc->getMessage();
514
+ $szErrorMessage = PayVector_Tpg_Model_Common_GlobalErrors::ERROR_183;
515
+ Mage::logException($exc);
516
+ }
517
+ }
518
+ }
519
+ }
520
+ if($boError)
521
+ {
522
+ if($szPaymentProcessorResponse != null &&
523
+ $szPaymentProcessorResponse != ''
524
+ )
525
+ {
526
+ $szErrorMessage .= '<br/>' . $szPaymentProcessorResponse;
527
+ }
528
+ $model->setPaymentAdditionalInformation($order->getPayment(), $szCrossReference);
529
+ //$order->getPayment()->setTransactionId($szCrossReference);
530
+ if($nVersion >= 1410)
531
+ {
532
+ if($order)
533
+ {
534
+ $orderState = 'pending_payment';
535
+ $orderStatus = 'irc_failed_hosted_payment';
536
+ $order->setCustomerNote(Mage::helper('tpg')->__('Hosted Payment Failed'));
537
+ $order->setState($orderState, $orderStatus, $szErrorMessage, false);
538
+ $order->save();
539
+ }
540
+ }
541
+ if($nVersion == 1324 || $nVersion == 1330)
542
+ {
543
+ Mage::getSingleton('checkout/session')->addError($szErrorMessage);
544
+ }
545
+ else
546
+ {
547
+ Mage::getSingleton('core/session')->addError($szErrorMessage);
548
+ }
549
+ $order->save();
550
+ $this->_clearSessionVariables();
551
+ $this->_redirect('checkout/onepage/failure');
552
+ }
553
+ else
554
+ {
555
+ // set the quote as inactive after back from paypal
556
+ Mage::getSingleton('checkout/session')->getQuote()->setIsActive(false)->save();
557
+ // send confirmation email to customer
558
+ if($order->getId())
559
+ {
560
+ $order->sendNewOrderEmail();
561
+ }
562
+ if($nVersion >= 1410)
563
+ {
564
+ if($nVersion < 1600)
565
+ {
566
+ $model->subtractOrderedItemsFromStock($order);
567
+ }
568
+ $this->_updateInvoices($order, $szMessage);
569
+ }
570
+ if($nVersion != 1324 && $nVersion != 1330)
571
+ {
572
+ Mage::getSingleton('core/session')->addSuccess('Payment Processor Response: ' . $szMessage);
573
+ }
574
+ $this->_redirect('checkout/onepage/success', array('_secure' => true));
575
+ }
576
+ }
577
+
578
+ /**
579
+ * Action logic for handling the result set from the Transparent Redirect page
580
+ *
581
+ */
582
+ public function callbacktransparentredirectAction()
583
+ {
584
+ $model = Mage::getModel('tpg/direct');
585
+ $order = Mage::getModel('sales/order');
586
+ $order->load(Mage::getSingleton('checkout/session')->getLastOrderId());
587
+ $nVersion = Mage::getModel('tpg/direct')->getVersion();
588
+ try
589
+ {
590
+ $hmHashMethod = $model->getConfigData('hashmethod');
591
+ $szPassword = $model->getConfigData('password');
592
+ $szPreSharedKey = $model->getConfigData('presharedkey');
593
+ $szPaREQ = $this->getRequest()->getPost('PaREQ');
594
+ $szPaRES = $this->getRequest()->getPost('PaRes');
595
+ $nStatusCode = $this->getRequest()->getPost('StatusCode');
596
+ if(isset($szPaREQ))
597
+ {
598
+ // 3D Secure authentication required
599
+ self::_threeDSecureAuthenticationRequired($szPassword, $hmHashMethod, $szPreSharedKey);
600
+ }
601
+ else if(isset($szPaRES))
602
+ {
603
+ // 3D Secure post authentication
604
+ self::_postThreeDSecureAuthentication($szPassword, $hmHashMethod, $szPreSharedKey);
605
+ }
606
+ else
607
+ {
608
+ // payment complete
609
+ self::_paymentComplete($szPassword, $hmHashMethod, $szPreSharedKey);
610
+ }
611
+ }
612
+ catch(Exception $exc)
613
+ {
614
+ $error = PayVector_Tpg_Model_Common_GlobalErrors::ERROR_260;
615
+ Mage::logException($exc);
616
+ if($nVersion >= 1410)
617
+ {
618
+ if($order)
619
+ {
620
+ $orderState = 'pending_payment';
621
+ $orderStatus = 'irc_failed_hosted_payment';
622
+ $order->setCustomerNote(Mage::helper('tpg')->__('Transparent Redirect Payment Failed'));
623
+ $order->setState($orderState, $orderStatus, $exc->getMessage(), false);
624
+ $order->save();
625
+ }
626
+ }
627
+ if($nVersion == 1324 || $nVersion == 1330)
628
+ {
629
+ Mage::getSingleton('checkout/session')->addError($error);
630
+ }
631
+ else
632
+ {
633
+ Mage::getSingleton('core/session')->addError($error);
634
+ }
635
+ $this->_clearSessionVariables();
636
+ $this->_redirect('checkout/onepage/failure');
637
+ }
638
+ }
639
+
640
+ private function _threeDSecureAuthenticationRequired($szPassword, $hmHashMethod, $szPreSharedKey)
641
+ {
642
+ $error = false;
643
+ $formVariables = array();
644
+ $formVariables['HashDigest'] = $this->getRequest()->getPost('HashDigest');
645
+ $formVariables['MerchantID'] = $this->getRequest()->getPost('MerchantID');
646
+ $formVariables['StatusCode'] = $this->getRequest()->getPost('StatusCode');
647
+ $formVariables['Message'] = $this->getRequest()->getPost('Message');
648
+ $formVariables['CrossReference'] = $this->getRequest()->getPost('CrossReference');
649
+ $formVariables['OrderID'] = $this->getRequest()->getPost('OrderID');
650
+ $formVariables['TransactionDateTime'] = $this->getRequest()->getPost('TransactionDateTime');
651
+ $formVariables['ACSURL'] = $this->getRequest()->getPost('ACSURL');
652
+ $formVariables['PaREQ'] = $this->getRequest()->getPost('PaREQ');
653
+ if(!TPG_PaymentFormHelper::compareThreeDSecureAuthenticationRequiredHashDigest($formVariables, $szPassword, $hmHashMethod, $szPreSharedKey))
654
+ {
655
+ $error = "The payment was rejected for a SECURITY reason: the incoming payment data was tampered with.";
656
+ Mage::log("The Transparent Redirect transaction couldn't be completed for the following reason: " . $error . " Form variables: " . print_r($formVariables, 1));
657
+ }
658
+ if($error)
659
+ {
660
+ $this->_clearSessionVariables();
661
+ //Mage::getSingleton('core/session')->addError($error);
662
+ //$this->_redirect('checkout/onepage/failure');
663
+ Mage::throwException($error);
664
+ }
665
+ else
666
+ {
667
+ // redirect to a secure 3DS authentication page
668
+ Mage::getSingleton('checkout/session')->setMd($formVariables['CrossReference'])
669
+ ->setAcsurl($formVariables['ACSURL'])
670
+ ->setPareq($formVariables['PaREQ'])
671
+ ->setTermurl('tpg/payment/callbacktransparentredirect');
672
+ // redirect to a 3D Secure page
673
+ $this->_redirect('tpg/payment/threedsecure');
674
+ }
675
+ }
676
+
677
+ private function _postThreeDSecureAuthentication($szPassword, $hmHashMethod, $szPreSharedKey)
678
+ {
679
+ $error = false;
680
+ $formVariables = array();
681
+ $model = Mage::getModel('tpg/direct');
682
+ $szPaRES = $this->getRequest()->getPost('PaRes');
683
+ $szCrossReference = $this->getRequest()->getPost('MD');
684
+ $szMerchantID = $model->getConfigData('merchantid');
685
+ $szTransactionDateTime = date('Y-m-d H:i:s P');
686
+ $szCallbackURL = Mage::getUrl('tpg/payment/callbacktransparentredirect', array('_secure' => true));
687
+ $szHashDigest =
688
+ TPG_PaymentFormHelper::calculatePostThreeDSecureAuthenticationHashDigest(
689
+ $szMerchantID,
690
+ $szPassword,
691
+ $hmHashMethod,
692
+ $szPreSharedKey,
693
+ $szPaRES,
694
+ $szCrossReference,
695
+ $szTransactionDateTime,
696
+ $szCallbackURL
697
+ );
698
+ Mage::getSingleton('checkout/session')->setHashdigest($szHashDigest)
699
+ ->setMerchantid($szMerchantID)
700
+ ->setCrossreference($szCrossReference)
701
+ ->setTransactiondatetime($szTransactionDateTime)
702
+ ->setCallbackurl($szCallbackURL)
703
+ ->setPares($szPaRES);
704
+ // redirect to the redirection bridge page
705
+ $this->_redirect('tpg/payment/redirect');
706
+ }
707
+
708
+ private function _paymentComplete($szPassword, $hmHashMethod, $szPreSharedKey)
709
+ {
710
+ $boError = false;
711
+ $formVariables = array();
712
+ $model = Mage::getModel('tpg/direct');
713
+ $szOrderID = $this->getRequest()->getPost('OrderID');
714
+ $checkout = Mage::getSingleton('checkout/type_onepage');
715
+ $session = Mage::getSingleton('checkout/session');
716
+ $szPaymentProcessorResponse = '';
717
+ $order = Mage::getModel('sales/order');
718
+ $order->load(Mage::getSingleton('checkout/session')->getLastOrderId());
719
+ $nVersion = Mage::getModel('tpg/direct')->getVersion();
720
+ $boCartIsEmpty = false;
721
+ try
722
+ {
723
+ $formVariables['HashDigest'] = $this->getRequest()->getPost('HashDigest');
724
+ $formVariables['MerchantID'] = $this->getRequest()->getPost('MerchantID');
725
+ $formVariables['StatusCode'] = $this->getRequest()->getPost('StatusCode');
726
+ $formVariables['Message'] = $this->getRequest()->getPost('Message');
727
+ $formVariables['PreviousStatusCode'] = $this->getRequest()->getPost('PreviousStatusCode');
728
+ $formVariables['PreviousMessage'] = $this->getRequest()->getPost('PreviousMessage');
729
+ $formVariables['CrossReference'] = $this->getRequest()->getPost('CrossReference');
730
+ $formVariables['AddressNumericCheckResult'] = $this->getRequest()->getPost('AddressNumericCheckResult');
731
+ $formVariables['PostCodeCheckResult'] = $this->getRequest()->getPost('PostCodeCheckResult');
732
+ $formVariables['CV2CheckResult'] = $this->getRequest()->getPost('CV2CheckResult');
733
+ $formVariables['ThreeDSecureAuthenticationCheckResult'] = $this->getRequest()->getPost('ThreeDSecureAuthenticationCheckResult');
734
+ $formVariables['CardType'] = $this->getRequest()->getPost('CardType');
735
+ $formVariables['CardClass'] = $this->getRequest()->getPost('CardClass');
736
+ $formVariables['CardIssuer'] = $this->getRequest()->getPost('CardIssuer');
737
+ $formVariables['CardIssuerCountryCode'] = $this->getRequest()->getPost('CardIssuerCountryCode');
738
+ $formVariables['Amount'] = $this->getRequest()->getPost('Amount');
739
+ $formVariables['CurrencyCode'] = $this->getRequest()->getPost('CurrencyCode');
740
+ $formVariables['OrderID'] = $this->getRequest()->getPost('OrderID');
741
+ $formVariables['TransactionType'] = $this->getRequest()->getPost('TransactionType');
742
+ $formVariables['TransactionDateTime'] = $this->getRequest()->getPost('TransactionDateTime');
743
+ $formVariables['OrderDescription'] = $this->getRequest()->getPost('OrderDescription');
744
+ $formVariables['Address1'] = $this->getRequest()->getPost('Address1');
745
+ $formVariables['Address2'] = $this->getRequest()->getPost('Address2');
746
+ $formVariables['Address3'] = $this->getRequest()->getPost('Address3');
747
+ $formVariables['Address4'] = $this->getRequest()->getPost('Address4');
748
+ $formVariables['City'] = $this->getRequest()->getPost('City');
749
+ $formVariables['State'] = $this->getRequest()->getPost('State');
750
+ $formVariables['PostCode'] = $this->getRequest()->getPost('PostCode');
751
+ $formVariables['CountryCode'] = $this->getRequest()->getPost('CountryCode');
752
+ $formVariables['EmailAddress'] = $this->getRequest()->getPost('EmailAddress');
753
+ $formVariables['PhoneNumber'] = $this->getRequest()->getPost('PhoneNumber');
754
+ if(!TPG_PaymentFormHelper::comparePaymentCompleteHashDigest($formVariables, $szPassword, $hmHashMethod, $szPreSharedKey))
755
+ {
756
+ $boError = true;
757
+ $szNotificationMessage = "The payment was rejected for a SECURITY reason: the incoming payment data was tampered with.";
758
+ Mage::log("The Transparent Redirect transaction couldn't be completed for the following reason: [" . $szNotificationMessage . "] Form variables: " . print_r($formVariables, 1));
759
+ }
760
+ else
761
+ {
762
+ $payVectorOrderId = Mage::getSingleton('checkout/session')->getTpgOrderId();
763
+ $szOrderStatus = $order->getStatus();
764
+ if($szOrderStatus != 'irc_paid' &&
765
+ $szOrderStatus != 'irc_preauth'
766
+ )
767
+ {
768
+ $checkout->saveOrderAfterRedirectedPaymentAction(
769
+ false,
770
+ $this->getRequest()->getPost('StatusCode'),
771
+ $this->getRequest()->getPost('Message'),
772
+ $this->getRequest()->getPost('PreviousStatusCode'),
773
+ $this->getRequest()->getPost('PreviousMessage'),
774
+ $this->getRequest()->getPost('OrderID'),
775
+ $this->getRequest()->getPost('CrossReference')
776
+ );
777
+ }
778
+ else
779
+ {
780
+ $boCartIsEmpty = true;
781
+ $szPaymentProcessorResponse = null;
782
+ // chek the StatusCode as the customer might have just clicked the BACK button and re-submitted the card details
783
+ // which can cause a charge back to the merchant
784
+ $szStatusCode = $this->getRequest()->getPost('StatusCode');
785
+ $szMessage = $this->getRequest()->getPost('Message');
786
+ $szPreviousStatusCode = $this->getRequest()->getPost('PreviousStatusCode');
787
+ $szPreviousMessage = $this->getRequest()->getPost('PreviousMessage');
788
+ $szOrderID = $this->getRequest()->getPost('OrderID');
789
+ $this->_fixBackButtonBug($szOrderID, $szStatusCode, $szMessage, $szPreviousStatusCode, $szPreviousMessage);
790
+ }
791
+ }
792
+ }
793
+ catch(Exception $exc)
794
+ {
795
+ $boError = true;
796
+ $szNotificationMessage = PayVector_Tpg_Model_Common_GlobalErrors::ERROR_183;
797
+ Mage::logException($exc);
798
+ }
799
+ $szPaymentProcessorResponse = $session->getPaymentprocessorresponse();
800
+ if($boError == true)
801
+ {
802
+ if($szPaymentProcessorResponse != null &&
803
+ $szPaymentProcessorResponse != ''
804
+ )
805
+ {
806
+ $szNotificationMessage = $szNotificationMessage . '<br/>' . $szPaymentProcessorResponse;
807
+ }
808
+ $model->setPaymentAdditionalInformation($order->getPayment(), $this->getRequest()->getPost('CrossReference'));
809
+ //$order->getPayment()->setTransactionId($this->getRequest()->getPost('CrossReference'));
810
+ if($nVersion >= 1410)
811
+ {
812
+ if($order)
813
+ {
814
+ $orderState = 'pending_payment';
815
+ $orderStatus = 'irc_failed_hosted_payment';
816
+ $order->setCustomerNote(Mage::helper('tpg')->__('Transparent Redirect Payment Failed'));
817
+ $order->setState($orderState, $orderStatus, $szPaymentProcessorResponse, false);
818
+ }
819
+ }
820
+ $order->save();
821
+ if($nVersion == 1324 || $nVersion == 1330)
822
+ {
823
+ Mage::getSingleton('checkout/session')->addError($szNotificationMessage);
824
+ }
825
+ else
826
+ {
827
+ Mage::getSingleton('core/session')->addError($szNotificationMessage);
828
+ }
829
+ $this->_clearSessionVariables();
830
+ $this->_redirect('checkout/onepage/failure');
831
+ }
832
+ else
833
+ {
834
+ // set the quote as inactive after back from paypal
835
+ Mage::getSingleton('checkout/session')->getQuote()->setIsActive(false)->save();
836
+ if($boCartIsEmpty == false)
837
+ {
838
+ // send confirmation email to customer
839
+ if($order->getId())
840
+ {
841
+ $order->sendNewOrderEmail();
842
+ }
843
+ if($nVersion >= 1410)
844
+ {
845
+ // TODO : no need to remove stock item as the system will do it in 1.6 version
846
+ if($nVersion < 1600)
847
+ {
848
+ $model->subtractOrderedItemsFromStock($order);
849
+ }
850
+ $this->_updateInvoices($order, $szPaymentProcessorResponse);
851
+ }
852
+ if($nVersion != 1324 && $nVersion != 1330)
853
+ {
854
+ if($szPaymentProcessorResponse != '')
855
+ {
856
+ Mage::getSingleton('core/session')->addSuccess($szPaymentProcessorResponse);
857
+ }
858
+ }
859
+ }
860
+ $this->_redirect('checkout/onepage/success', array('_secure' => true));
861
+ }
862
+ }
863
+
864
+ private function _clearSessionVariables()
865
+ {
866
+ // clear all the custom session variables used in the payment module in case of a failed payment
867
+ Mage::getSingleton('checkout/session')->setHashdigest(null)
868
+ ->setMerchantid(null)
869
+ ->setCrossreference(null)
870
+ ->setTransactiondatetime(null)
871
+ ->setCallbackurl(null)
872
+ ->setPareq(null)
873
+ ->setPares(null)
874
+ ->setMd(null)
875
+ ->setAcsurl(null)
876
+ ->setTermurl(null)
877
+ ->setThreedsecurerequired(null)
878
+ ->setIshostedpayment(null)
879
+ ->setStatuscode(null)
880
+ ->setMessage(null)
881
+ ->setPreviousstatuscode(null)
882
+ ->setPreviousmessage(null)
883
+ ->setOrderid(null)
884
+ ->setRedirectedPayment(null);
885
+ // do not clear the order id as after the a failed payment the customer still might want to repeat the payment attempt
886
+ //->setTpgOrderId(null);
887
+ }
888
+
889
+ /**
890
+ * Set the invoice status to "Paid" after a successful payment
891
+ *
892
+ * @param Mage_Core_Model_Abstract $order
893
+ * @param string $message
894
+ */
895
+ private function _updateInvoices($order, $message)
896
+ {
897
+ $invoices = $order->getInvoiceCollection();
898
+ $state = Mage_Sales_Model_Order::STATE_PROCESSING;
899
+ $payment = $order->getPayment();
900
+ $session = Mage::getSingleton('checkout/session');
901
+ $transactionId = $payment->getLastTransId();
902
+ $transaction = $payment->getTransaction($transactionId);
903
+ $transactionType = $transaction->getTxnType();
904
+
905
+ if($session->getNewCrossReference())
906
+ {
907
+ $szNewCrossReference = $session->getNewCrossReference();
908
+ $value = $transaction->setTxnId($szNewCrossReference);
909
+ $transaction->save();
910
+ $payment->setLastTransId($szNewCrossReference);
911
+ $session->setNewCrossReference(null);
912
+ }
913
+ foreach($invoices as $invoice)
914
+ {
915
+ // set the invoice state to be "Paid"
916
+ $invoice->pay()->save();
917
+ }
918
+ // add a comment to the order comments
919
+ if($transactionType == 'authorization')
920
+ {
921
+ $order->setState($state, 'irc_preauth', $message, true);
922
+ }
923
+ else if($transactionType == 'capture')
924
+ {
925
+ $order->setState($state, 'irc_paid', $message, true);
926
+ }
927
+ else
928
+ {
929
+ Mage::throwException('invalid transaction type [' . $transactionType . '] for invoice updating');
930
+ }
931
+ $order->save();
932
+ }
933
+
934
+ private function _fixBackButtonBug($szOrderID, $szStatusCode, $szMessage, $szPreviousStatusCode, $szPreviousMessage)
935
+ {
936
+ // check the payment type as hitting the BACK button in the browser for Transparent Redirect payment method only redirects back the client side result and
937
+ // not letting the customer to change the card details or re-submitting the payment
938
+ $mode = Mage::getModel('tpg/direct')->getConfigData('mode');
939
+ $boIgnoreDuplicateMessage = false;
940
+ if($mode == PayVector_Tpg_Model_Source_PaymentMode::PAYMENT_MODE_TRANSPARENT_REDIRECT)
941
+ {
942
+ $boIgnoreDuplicateMessage = true;
943
+ }
944
+ if($boIgnoreDuplicateMessage)
945
+ {
946
+ Mage::getSingleton('core/session')->addError(
947
+ 'ERROR - Order ID: ' .
948
+ $szOrderID .
949
+ ' has already been successfully paid and processed. Payment Processor Response: ' .
950
+ $szMessage .
951
+ '. <br/> IMPORTANT: please do not attempt to click the back button in your browser as it could cause duplicate charges to your bank account.'
952
+ );
953
+ }
954
+ else
955
+ {
956
+ if($szStatusCode == '0')
957
+ {
958
+ Mage::getSingleton('core/session')->addError(
959
+ 'ERROR - Duplicate payment for Order ID: ' .
960
+ $szOrderID .
961
+ ' with Payment Processor Response: ' .
962
+ $szMessage .
963
+ '. This order has already been successfully paid and processed. Please contact us immediately to avoid duplicate charges to your bank account.'
964
+ );
965
+ }
966
+ else if($szStatusCode == '20')
967
+ {
968
+ Mage::getSingleton('core/session')->addError(
969
+ 'Duplicate payment attempted for Order ID: ' .
970
+ $szOrderID .
971
+ '. Previous Payment Processor Response: ' .
972
+ $szPreviousMessage .
973
+ '. This order has already been successfully paid and processed. </br/>IMPORTANT: please do not attempt to click the back button in your browser and re-submit the payment for this order as it could cause duplicate charges to your bank account.'
974
+ );
975
+ }
976
+ else
977
+ {
978
+ Mage::getSingleton('core/session')->addError(
979
+ 'ERROR: Order ID: ' .
980
+ $szOrderID .
981
+ ' has already been successfully paid and processed. Payment Processor Response: ' .
982
+ $szMessage .
983
+ '. Please contact us immediately to avoid duplicate charges to your bank account.'
984
+ );
985
+ }
986
+ }
987
+ }
988
+
989
+ /**
990
+ * Refund actioned when the user clicks the VOID button in the admin backend
991
+ *
992
+ * @return Zend_Controller_Response_Abstract
993
+ */
994
+ public function voidAction()
995
+ {
996
+ $model = Mage::getSingleton('tpg/direct');
997
+ $parameters = $this->getRequest()->getParams();
998
+ $szOrderID = $parameters['OrderID'];
999
+ $szCrossReference = $parameters['CrossReference'];
1000
+ $order = Mage::getModel('sales/order')->loadByIncrementId((int) $szOrderID);
1001
+ $payment = $order->getPayment();
1002
+ $result = Mage::getModel('tpg/direct')->ircVoid($payment);
1003
+ if($result == "0")
1004
+ {
1005
+ $model->addOrderedItemsToStock($order);
1006
+ }
1007
+
1008
+ return $this->getResponse()->setBody($result);
1009
+ }
1010
+
1011
+ /**
1012
+ * Refund actioned when the user clicks the COLLECT button in the admin backend
1013
+ *
1014
+ * @return Zend_Controller_Response_Abstract
1015
+ */
1016
+ public function collectionAction()
1017
+ {
1018
+ $parameters = $this->getRequest()->getParams();
1019
+ $szOrderID = $parameters['OrderID'];
1020
+ $szCrossReference = $parameters['CrossReference'];
1021
+ $order = Mage::getModel('sales/order')->loadByIncrementId((int) $szOrderID);
1022
+ $payment = $order->getPayment();
1023
+ $result = Mage::getModel('tpg/direct')->ircCollection($payment, $szOrderID, $szCrossReference);
1024
+
1025
+ return $this->getResponse()->setBody($result);
1026
+ }
1027
+ }
app/code/local/PayVector/Tpg/etc/config.xml ADDED
@@ -0,0 +1,138 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <PayVector_Tpg>
5
+ <version>0.1.0</version>
6
+ </PayVector_Tpg>
7
+ </modules>
8
+
9
+ <global>
10
+
11
+ <blocks>
12
+ <tpg>
13
+ <class>PayVector_Tpg_Block</class>
14
+ </tpg>
15
+ <payment>
16
+ <rewrite>
17
+ <info_cc>PayVector_Tpg_Block_Payment_Info_Cc</info_cc>
18
+ </rewrite>
19
+ </payment>
20
+ <adminhtml>
21
+ <rewrite>
22
+ <sales_order_payment>PayVector_Tpg_Block_Adminhtml_Sales_Order_Payment</sales_order_payment>
23
+ </rewrite>
24
+ </adminhtml>
25
+ </blocks>
26
+
27
+ <models>
28
+ <tpg>
29
+ <class>PayVector_Tpg_Model</class>
30
+ <resourceModel>tpg</resourceModel>
31
+ </tpg>
32
+ <tpg>
33
+ <class>PayVector_Tpg_Model</class>
34
+ <entities>
35
+ <gatewayentrypoints>
36
+ <table>payvector_gatewayentrypoints</table>
37
+ </gatewayentrypoints>
38
+ </entities>
39
+ </tpg>
40
+ </models>
41
+
42
+ <resources>
43
+ <tpg_setup>
44
+ <setup>
45
+ <module>PayVector_Tpg</module>
46
+ <class>PayVector_Tpg_Model_Resource_Eav_Mysql4_Setup</class>
47
+ <class>PayVector_Tpg_Model_Resource_Setup</class>
48
+ </setup>
49
+ <connection>
50
+ <use>core_setup</use>
51
+ </connection>
52
+ </tpg_setup>
53
+ <tpg_write>
54
+ <connection>
55
+ <use>core_write</use>
56
+ </connection>
57
+ </tpg_write>
58
+ <tpg_read>
59
+ <connection>
60
+ <use>core_read</use>
61
+ </connection>
62
+ </tpg_read>
63
+ </resources>
64
+
65
+ <!-- Define the helper class type -->
66
+ <helpers>
67
+ <Tpg>
68
+ <class>PayVector_Tpg_Helper</class>
69
+ </Tpg>
70
+ <tpg>
71
+ <rewrite>
72
+ <data>PayVector_Tpg_Helper_Data</data>
73
+ </rewrite>
74
+ </tpg>
75
+ </helpers>
76
+ </global>
77
+
78
+ <adminhtml>
79
+ <layout>
80
+ <updates>
81
+ <tpg>
82
+ <file>tpg.xml</file>
83
+ </tpg>
84
+ </updates>
85
+ </layout>
86
+ </adminhtml>
87
+ <frontend>
88
+ <secure_url>
89
+ <tpg>/tpg/standard</tpg>
90
+ </secure_url>
91
+ <routers>
92
+ <tpg>
93
+ <use>standard</use>
94
+ <args>
95
+ <module>PayVector_Tpg</module>
96
+ <frontName>tpg</frontName>
97
+ </args>
98
+ </tpg>
99
+ </routers>
100
+ <translate>
101
+ <modules>
102
+ <PayVector_Tpg>
103
+ <files>
104
+ <default>PayVector_Tpg.csv</default>
105
+ </files>
106
+ </PayVector_Tpg>
107
+ </modules>
108
+ </translate>
109
+ </frontend>
110
+
111
+ <!-- declare default configuration values for this module -->
112
+ <default>
113
+ <payment>
114
+ <tpg>
115
+ <active>1</active>
116
+ <model>tpg/direct</model>
117
+ <title>PayVector Corporation</title>
118
+ <hashmethod>sha1</hashmethod>
119
+ <paymentprocessordomain>payvector.net</paymentprocessordomain>
120
+ <paymentprocessorport>443</paymentprocessorport>
121
+ <hostedpaymentactionurl>https://mms.payvector.net/Pages/PublicPages/PaymentForm.aspx</hostedpaymentactionurl>
122
+ <transparentredirectactionurl>https://mms.payvector.net/Pages/PublicPages/TransparentRedirect.aspx</transparentredirectactionurl>
123
+ <serverpullresultactionurl>https://mms.payvector.net/Pages/PublicPages/PaymentFormResultHandler.ashx</serverpullresultactionurl>
124
+ <payment_action>capture</payment_action>
125
+ <mode>direct</mode>
126
+ <cv2mandatory>1</cv2mandatory>
127
+ <address1mandatory>1</address1mandatory>
128
+ <citymandatory>1</citymandatory>
129
+ <statemandatory>1</statemandatory>
130
+ <postcodemandatory>1</postcodemandatory>
131
+ <countrymandatory>1</countrymandatory>
132
+ <resultdeliverymethod>SERVER_PULL</resultdeliverymethod>
133
+ <allowspecific>0</allowspecific>
134
+ <customstockmanagementenabled>1</customstockmanagementenabled>
135
+ </tpg>
136
+ </payment>
137
+ </default>
138
+ </config>
app/code/local/PayVector/Tpg/etc/system.xml ADDED
@@ -0,0 +1,246 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <sections>
4
+ <payment>
5
+ <groups>
6
+ <tpg translate="label">
7
+ <label>PayVector Corporation</label>
8
+ <comment>
9
+ <![CDATA[
10
+ <div style="color:Blue;font-weight:bold;">
11
+ Merchant Management System (MMS) <a href="https://mms.payvector.net" target="_blank">login</a>
12
+ </div>
13
+ ]]>
14
+ </comment>
15
+ <sort_order>670</sort_order>
16
+ <show_in_default>1</show_in_default>
17
+ <show_in_website>1</show_in_website>
18
+ <show_in_store>1</show_in_store>
19
+ <fields>
20
+ <title translate="label">
21
+ <label>Title</label>
22
+ <frontend_type>text</frontend_type>
23
+ <sort_order>10</sort_order>
24
+ <show_in_default>1</show_in_default>
25
+ <show_in_website>1</show_in_website>
26
+ <show_in_store>0</show_in_store>
27
+ </title>
28
+ <active translate="label">
29
+ <label>Enabled</label>
30
+ <sort_order>20</sort_order>
31
+ <frontend_type>select</frontend_type>
32
+ <source_model>adminhtml/system_config_source_yesno</source_model>
33
+ <show_in_default>1</show_in_default>
34
+ <show_in_website>1</show_in_website>
35
+ <show_in_store>0</show_in_store>
36
+ </active>
37
+ <debug translate="label">
38
+ <label>Debug</label>
39
+ <frontend_type>select</frontend_type>
40
+ <source_model>adminhtml/system_config_source_yesno</source_model>
41
+ <sort_order>30</sort_order>
42
+ <show_in_default>1</show_in_default>
43
+ <show_in_website>1</show_in_website>
44
+ <show_in_store>0</show_in_store>
45
+ </debug>
46
+ <order_status translate="label">
47
+ <label>New order status</label>
48
+ <sort_order>40</sort_order>
49
+ <frontend_type>select</frontend_type>
50
+ <source_model>tpg/source_orderStatus</source_model>
51
+ <sort_order>50</sort_order>
52
+ <show_in_default>1</show_in_default>
53
+ <show_in_website>1</show_in_website>
54
+ <show_in_store>0</show_in_store>
55
+ </order_status>
56
+ <merchantid translate="label">
57
+ <label>Merchant ID</label>
58
+ <frontend_type>text</frontend_type>
59
+ <sort_order>60</sort_order>
60
+ <show_in_default>1</show_in_default>
61
+ <show_in_website>1</show_in_website>
62
+ <show_in_store>0</show_in_store>
63
+ </merchantid>
64
+ <password translate="label">
65
+ <label>Password</label>
66
+ <frontend_type>password</frontend_type>
67
+ <sort_order>70</sort_order>
68
+ <show_in_default>1</show_in_default>
69
+ <show_in_website>1</show_in_website>
70
+ <show_in_store>0</show_in_store>
71
+ </password>
72
+ <presharedkey translate="label">
73
+ <label>Pre Shared Key</label>
74
+ <frontend_type>text</frontend_type>
75
+ <sort_order>80</sort_order>
76
+ <show_in_default>1</show_in_default>
77
+ <show_in_website>1</show_in_website>
78
+ <show_in_store>0</show_in_store>
79
+ </presharedkey>
80
+ <hashmethod translate="label">
81
+ <label>Hash Method</label>
82
+ <frontend_type>select</frontend_type>
83
+ <sort_order>81</sort_order>
84
+ <source_model>tpg/source_hashMethod</source_model>
85
+ <show_in_default>1</show_in_default>
86
+ <show_in_website>1</show_in_website>
87
+ <show_in_store>0</show_in_store>
88
+ </hashmethod>
89
+ <paymentprocessordomain translate="label">
90
+ <label>Payment Processor Domain</label>
91
+ <frontend_type>label</frontend_type>
92
+ <sort_order>100</sort_order>
93
+ <show_in_default>0</show_in_default>
94
+ <show_in_website>0</show_in_website>
95
+ <show_in_store>0</show_in_store>
96
+ </paymentprocessordomain>
97
+ <paymentprocessorport translate="label">
98
+ <label>Payment Processor Port</label>
99
+ <frontend_type>label</frontend_type>
100
+ <sort_order>110</sort_order>
101
+ <show_in_default>0</show_in_default>
102
+ <show_in_website>0</show_in_website>
103
+ <show_in_store>0</show_in_store>
104
+ </paymentprocessorport>
105
+ <payment_action translate="label">
106
+ <label>Payment Action</label>
107
+ <sort_order>120</sort_order>
108
+ <frontend_type>select</frontend_type>
109
+ <source_model>tpg/source_paymentAction</source_model>
110
+ <show_in_default>1</show_in_default>
111
+ <show_in_website>1</show_in_website>
112
+ <show_in_store>0</show_in_store>
113
+ </payment_action>
114
+ <mode translate="label">
115
+ <label>Payment Integration Method</label>
116
+ <sort_order>130</sort_order>
117
+ <frontend_type>select</frontend_type>
118
+ <source_model>tpg/source_paymentMode</source_model>
119
+ <show_in_default>1</show_in_default>
120
+ <show_in_website>1</show_in_website>
121
+ <show_in_store>0</show_in_store>
122
+ </mode>
123
+ <hostedpaymentactionurl>
124
+ <label>Hosted Payment Form Action URL</label>
125
+ <frontend_type>label</frontend_type>
126
+ <sort_order>131</sort_order>
127
+ <show_in_default>0</show_in_default>
128
+ <show_in_website>0</show_in_website>
129
+ <show_in_store>0</show_in_store>
130
+ </hostedpaymentactionurl>
131
+ <resultdeliverymethod>
132
+ <label>Result Delivery Method</label>
133
+ <sort_order>200</sort_order>
134
+ <frontend_type>select</frontend_type>
135
+ <source_model>tpg/source_resultDeliveryMethod</source_model>
136
+ <show_in_default>1</show_in_default>
137
+ <show_in_website>1</show_in_website>
138
+ <show_in_store>0</show_in_store>
139
+ <comment>
140
+ <![CDATA[<strong>Please note</strong>: The above value is only applicable to Hosted Payment Form payment mode]]>
141
+ </comment>
142
+ </resultdeliverymethod>
143
+ <!-- <transparentredirectactionurl>
144
+ <label>Transparent Redirect Action URL</label>
145
+ <frontend_type>label</frontend_type>
146
+ <sort_order>132</sort_order>
147
+ <show_in_default>1</show_in_default>
148
+ <show_in_website>1</show_in_website>
149
+ <show_in_store>0</show_in_store>
150
+ </transparentredirectactionurl> -->
151
+ <serverpullresultactionurl>
152
+ <label>Server Pull Result Action URL</label>
153
+ <frontend_type>label</frontend_type>
154
+ <sort_order>133</sort_order>
155
+ <show_in_default>0</show_in_default>
156
+ <show_in_website>0</show_in_website>
157
+ <show_in_store>0</show_in_store>
158
+ </serverpullresultactionurl>
159
+ <cv2mandatory>
160
+ <label>CV2 Mandatory <![CDATA[<span style="color:Red;font-weight:bold;font-size:12px;">(ON FORM ONLY)</span>]]></label>
161
+ <sort_order>140</sort_order>
162
+ <frontend_type>select</frontend_type>
163
+ <source_model>adminhtml/system_config_source_yesno</source_model>
164
+ <show_in_default>1</show_in_default>
165
+ <show_in_website>1</show_in_website>
166
+ <show_in_store>0</show_in_store>
167
+ <comment><![CDATA[<strong>Please note HERE</strong>: The above value is only applicable to Hosted Payment Form payment mode. If you want to change the CV2 behaviour, please log into the <span style="font-weight:bold;color:Blue;">MMS</span> and update your Account Settings]]></comment>
168
+ </cv2mandatory>
169
+ <address1mandatory>
170
+ <label>Address1 Mandatory</label>
171
+ <sort_order>150</sort_order>
172
+ <frontend_type>select</frontend_type>
173
+ <source_model>adminhtml/system_config_source_yesno</source_model>
174
+ <show_in_default>1</show_in_default>
175
+ <show_in_website>1</show_in_website>
176
+ <show_in_store>0</show_in_store>
177
+ <comment>
178
+ <![CDATA[<strong>Please note</strong>: The above value is only applicable to Hosted Payment Form payment mode]]>
179
+ </comment>
180
+ </address1mandatory>
181
+ <citymandatory>
182
+ <label>City Mandatory</label>
183
+ <sort_order>160</sort_order>
184
+ <frontend_type>select</frontend_type>
185
+ <source_model>adminhtml/system_config_source_yesno</source_model>
186
+ <show_in_default>1</show_in_default>
187
+ <show_in_website>1</show_in_website>
188
+ <show_in_store>0</show_in_store>
189
+ <comment>
190
+ <![CDATA[<strong>Please note</strong>: The above value is only applicable to Hosted Payment Form payment mode]]>
191
+ </comment>
192
+ </citymandatory>
193
+ <postcodemandatory>
194
+ <label>PostCode Mandatory</label>
195
+ <sort_order>170</sort_order>
196
+ <frontend_type>select</frontend_type>
197
+ <source_model>adminhtml/system_config_source_yesno</source_model>
198
+ <show_in_default>1</show_in_default>
199
+ <show_in_website>1</show_in_website>
200
+ <show_in_store>0</show_in_store>
201
+ <comment>
202
+ <![CDATA[<strong>Please note</strong>: The above value is only applicable to Hosted Payment Form payment mode]]>
203
+ </comment>
204
+ </postcodemandatory>
205
+ <statemandatory>
206
+ <label>State Mandatory</label>
207
+ <sort_order>180</sort_order>
208
+ <frontend_type>select</frontend_type>
209
+ <source_model>adminhtml/system_config_source_yesno</source_model>
210
+ <show_in_default>1</show_in_default>
211
+ <show_in_website>1</show_in_website>
212
+ <show_in_store>0</show_in_store>
213
+ <comment>
214
+ <![CDATA[<strong>Please note</strong>: The above value is only applicable to Hosted Payment Form payment mode]]>
215
+ </comment>
216
+ </statemandatory>
217
+ <countrymandatory>
218
+ <label>Country Mandatory</label>
219
+ <sort_order>190</sort_order>
220
+ <frontend_type>select</frontend_type>
221
+ <source_model>adminhtml/system_config_source_yesno</source_model>
222
+ <show_in_default>1</show_in_default>
223
+ <show_in_website>1</show_in_website>
224
+ <show_in_store>0</show_in_store>
225
+ <comment>
226
+ <![CDATA[<strong>Please note</strong>: The above value is only applicable to Hosted Payment Form payment mode]]>
227
+ </comment>
228
+ </countrymandatory>
229
+ <customstockmanagementenabled>
230
+ <label>Custom Stock Management Enabled</label>
231
+ <sort_order>210</sort_order>
232
+ <frontend_type>select</frontend_type>
233
+ <source_model>adminhtml/system_config_source_yesno</source_model>
234
+ <show_in_default>1</show_in_default>
235
+ <show_in_website>1</show_in_website>
236
+ <show_in_store>0</show_in_store>
237
+ <comment>
238
+ <![CDATA[<strong>Please note</strong>: The above setting is only applicable to Magento version 1.4.1.0 and above]]>
239
+ </comment>
240
+ </customstockmanagementenabled>
241
+ </fields>
242
+ </tpg>
243
+ </groups>
244
+ </payment>
245
+ </sections>
246
+ </config>
app/code/local/PayVector/Tpg/sql/tpg_setup/install-0.1.0.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $installer = $this;
4
+ $installer->startSetup();
5
+
6
+ $table = $installer->getConnection()->newTable($installer->getTable('tpg/gatewayentrypoints'))
7
+ ->addColumn('gateway_entry_point_object', Varien_Db_Ddl_Table::TYPE_TEXT, null, array(
8
+ 'nullable' => false,
9
+ 'primary' => true
10
+ ))
11
+ ->addColumn('date_time_processed', Varien_Db_Ddl_Table::TYPE_TIMESTAMP, null, array(
12
+ 'nullable' => false
13
+ ));
14
+
15
+ $installer->getConnection()->createTable($table);
16
+ $installer->endSetup();
app/code/local/PayVector/Tpg/sql/tpg_setup/mysql4-install-0.1.0.php ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $installer = $this;
4
+ /* @var $installer Mage_Core_Model_Resource_Setup */
5
+ $installer->startSetup();
6
+
7
+ Mage::log('PayVector installer script started');
8
+
9
+ try
10
+ {
11
+ // try to run the installation script
12
+ $installer->run("
13
+ DELETE FROM `{$installer->getTable('sales_order_status')}` WHERE (`status`='irc_failed_hosted_payment');
14
+ DELETE FROM `{$installer->getTable('sales_order_status')}` WHERE (`status`='irc_failed_threed_secure');
15
+ DELETE FROM `{$installer->getTable('sales_order_status')}` WHERE (`status`='irc_paid');
16
+ DELETE FROM `{$installer->getTable('sales_order_status')}` WHERE (`status`='irc_pending');
17
+ DELETE FROM `{$installer->getTable('sales_order_status')}` WHERE (`status`='irc_pending_hosted_payment');
18
+ DELETE FROM `{$installer->getTable('sales_order_status')}` WHERE (`status`='irc_pending_threed_secure');
19
+ DELETE FROM `{$installer->getTable('sales_order_status')}` WHERE (`status`='irc_refunded');
20
+ DELETE FROM `{$installer->getTable('sales_order_status')}` WHERE (`status`='irc_voided');
21
+ DELETE FROM `{$installer->getTable('sales_order_status')}` WHERE (`status`='irc_preauth');
22
+ DELETE FROM `{$installer->getTable('sales_order_status')}` WHERE (`status`='irc_collected');
23
+
24
+ INSERT INTO `{$installer->getTable('sales_order_status')}` (`status`, `label`) VALUES ('irc_failed_hosted_payment', 'PayVector - Failed Payment');
25
+ INSERT INTO `{$installer->getTable('sales_order_status')}` (`status`, `label`) VALUES ('irc_failed_threed_secure', 'PayVector - Failed 3D Secure');
26
+ INSERT INTO `{$installer->getTable('sales_order_status')}` (`status`, `label`) VALUES ('irc_paid', 'PayVector - Successful Payment');
27
+ INSERT INTO `{$installer->getTable('sales_order_status')}` (`status`, `label`) VALUES ('irc_pending', 'PayVector - Pending Hosted Payment');
28
+ INSERT INTO `{$installer->getTable('sales_order_status')}` (`status`, `label`) VALUES ('irc_pending_hosted_payment', 'PayVector - Pending Hosted Payment');
29
+ INSERT INTO `{$installer->getTable('sales_order_status')}` (`status`, `label`) VALUES ('irc_pending_threed_secure', 'PayVector - Pending 3D Secure');
30
+ INSERT INTO `{$installer->getTable('sales_order_status')}` (`status`, `label`) VALUES ('irc_refunded', 'PayVector - Payment Refunded');
31
+ INSERT INTO `{$installer->getTable('sales_order_status')}` (`status`, `label`) VALUES ('irc_voided', 'PayVector - Payment Voided');
32
+ INSERT INTO `{$installer->getTable('sales_order_status')}` (`status`, `label`) VALUES ('irc_preauth', 'PayVector - PreAuthorized');
33
+ INSERT INTO `{$installer->getTable('sales_order_status')}` (`status`, `label`) VALUES ('irc_collected', 'PayVector - Payment Collected');
34
+ ");
35
+
36
+ $installer->run("
37
+ DROP TABLE IF EXISTS {$installer->getTable('tpg/gatewayentrypoints')};
38
+ CREATE TABLE {$installer->getTable('tpg/gatewayentrypoints')} (
39
+ `gateway_entry_point_object` LONGTEXT NOT NULL DEFAULT '',
40
+ `date_time_processed` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
41
+ )
42
+ ");
43
+
44
+ $installer->run("
45
+ INSERT INTO {$installer->getTable('tpg/gatewayentrypoints')} VALUES(
46
+ 'PlaceHolder',
47
+ 0
48
+ );
49
+ ");
50
+ }
51
+ catch(Exception $exc)
52
+ {
53
+ Mage::log("Error during script installation: ". $exc->__toString());
54
+ }
55
+
56
+ Mage::log('PayVector installer script ended');
57
+
58
+ $installer->endSetup();
app/design/adminhtml/base/default/template/tpg/form.phtml ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php $direct = Mage::getModel('tpg/direct'); ?>
2
+ <?php $_code = $this->getMethodCode() ?>
3
+ <?php $route = $this->getRequest()->getRequestedRouteName(); if($route == 'onestepcheckout'){ $fieldCode = '['.$_code.']'; } else { $fieldCode = ''; }?>
4
+
5
+ <?php if ($direct->getConfigData('mode') == PayVector_Tpg_Model_Source_PaymentMode::PAYMENT_MODE_HOSTED_PAYMENT_FORM) {?>
6
+ <fieldset class="form-list">
7
+ <ul id="payment_form_<?php echo $_code ?>" style="display:none">
8
+ <li>
9
+ <?php echo $this->__('You will be redirected to a secure page where you can complete your payment.') ?>
10
+ </li>
11
+ </ul>
12
+ </fieldset>
13
+ <?php } else {?>
14
+ <fieldset class="form-list">
15
+ <ul id="payment_form_<?php echo $_code; ?>" style="display:none">
16
+ <li>
17
+ <div class="input-box">
18
+ <label for="<?php echo $_code; ?>_cc_owner"><?php echo $this->__('Name On Card') ?> <span class="required">*</span></label><br/>
19
+ <input type="text" title="<?php echo $this->__('Name On Card') ?>" class="input-text required-entry validate-length maximum-length-100" id="<?php echo $_code; ?>_cc_owner" name="payment<?php echo $fieldCode; ?>[cc_owner]" value="<?php echo $this->htmlEscape($this->getInfoData('cc_owner')) ?>"/>
20
+ </div>
21
+ </li>
22
+ <li>
23
+ <div class="input-box">
24
+ <label for="<?php echo $_code; ?>_cc_number"><?php echo $this->__('Card Number') ?> <span class="required">*</span></label><br/>
25
+ <input type="text" id="<?php echo $_code; ?>_cc_number" name="payment<?php echo $fieldCode; ?>[cc_number]" title="<?php echo $this->__('Card Number') ?>" class="input-text required-entry validate-digits validate-length maximum-length-20" value=""/>
26
+ </div>
27
+ </li>
28
+ <li>
29
+ <label for="<?php echo $_code; ?>_expiration"><?php echo $this->__('Expiration Date') ?> <span class="required">*</span></label><br/>
30
+ <div class="input-box">
31
+ <div class="v-fix">
32
+ <select id="<?php echo $_code; ?>_expiration" name="payment<?php echo $fieldCode; ?>[cc_exp_month]" class="month validate-cc-exp required-entry">
33
+ <?php $_ccExpMonth = $this->getInfoData('cc_exp_month') ?>
34
+ <?php foreach ($this->getCcMonths() as $k=>$v): ?>
35
+ <option value="<?php echo $k?$k:'' ?>"<?php if($k==$_ccExpMonth): ?> selected="selected"<?php endif ?>><?php echo $v ?></option>
36
+ <?php endforeach ?>
37
+ </select>
38
+ </div>
39
+
40
+ <div class="v-fix">
41
+ <?php $_ccExpYear = $this->getInfoData('cc_exp_year') ?>
42
+ <select id="<?php echo $_code; ?>_expiration_yr" name="payment<?php echo $fieldCode; ?>[cc_exp_year]" class="year required-entry">
43
+ <?php foreach ($this->getCcYears() as $k=>$v): ?>
44
+ <option value="<?php echo $k?$k:'' ?>"<?php if($k==$_ccExpYear): ?> selected="selected"<?php endif ?>><?php echo $v ?></option>
45
+ <?php endforeach ?>
46
+ </select>
47
+ </div>
48
+ </div>
49
+ </li>
50
+ <li>
51
+ <label for="<?php echo $_code; ?>_cc_ss_start_month"><?php echo $this->__('Start Date') ?></label><br />
52
+ <div class="input-box">
53
+ <div class="v-fix">
54
+ <select id="<?php echo $_code; ?>_cc_ss_start_month" name="payment<?php echo $fieldCode; ?>[cc_ss_start_month]" class="month">
55
+ <?php $_ccStartMonth = $this->getInfoData('cc_ss_start_month') ?>
56
+ <?php foreach ($this->getCcStartMonths() as $k=>$v): ?>
57
+ <option value="<?php echo $k?$k:'' ?>"<?php if($k==$_ccStartMonth): ?> selected="selected"<?php endif ?>><?php echo $v ?></option>
58
+ <?php endforeach ?>
59
+ </select>
60
+ </div>
61
+ <div class="v-fix">
62
+ <?php $_ccStartYear = $this->getInfoData('cc_ss_start_year') ?>
63
+ <select id="<?php echo $_code ?>_cc_ss_start_year" name="payment<?php echo $fieldCode; ?>[cc_ss_start_year]" class="year">
64
+ <?php foreach ($this->getCcStartYears() as $k=>$v): ?>
65
+ <option value="<?php echo $k?$k:'' ?>"<?php if($k==$_ccStartYear): ?> selected="selected"<?php endif ?>><?php echo $v ?></option>
66
+ <?php endforeach ?>
67
+ </select>
68
+ </div>
69
+ </div>
70
+ </li>
71
+ <li>
72
+ <div class="input-box">
73
+ <label for="<?php echo $_code; ?>_cc_ss_issue"><?php echo $this->__('Issue Number') ?></label><br />
74
+ <div class="v-fix"><input type="text" title="<?php echo $this->__('Issue Number') ?>" class="input-text validate-digits validate-length maximum-length-2" style="width:50px;" id="<?php echo $_code ?>_cc_ss_issue" name="payment<?php echo $fieldCode; ?>[cc_ss_issue]" value="" /></div>
75
+ </div>
76
+ </li>
77
+ <li>
78
+ <div class="input-box">
79
+ <label for="<?php echo $_code; ?>_cc_cid"><?php echo $this->__('CV2') ?> <span class="required">*</span></label><br/>
80
+ <div class="v-fix"><input type="text" title="<?php echo $this->__('CV2') ?>" class="input-text required-entry validate-digits validate-length minimum-length-3 maximum-length-4" id="<?php echo $_code; ?>_cc_cid" name="payment<?php echo $fieldCode; ?>[cc_cid]" style="width:50px;" value=""/></div>
81
+ &nbsp;
82
+ <a href="#" class="cvv-what-is-this"><?php echo $this->__('What is this?') ?></a>
83
+ </div>
84
+ </li>
85
+ </ul>
86
+ </fieldset>
87
+ <?php }?>
app/design/adminhtml/base/default/template/tpg/info.phtml ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php $direct = Mage::getModel('tpg/direct'); ?>
2
+ <?php if ($direct->getConfigData('mode') != PayVector_Tpg_Model_Source_PaymentMode::PAYMENT_MODE_DIRECT_API) {?>
3
+ <?php if ($direct->getConfigData('mode') == PayVector_Tpg_Model_Source_PaymentMode::PAYMENT_MODE_HOSTED_PAYMENT_FORM) {?>
4
+ <?php echo $this->__('PayVector Hosted Payment'); ?>
5
+ <?php } else {?>
6
+ <?php echo $this->__('PayVector Transparent Redirect'); ?>
7
+ <?php }?>
8
+ <?php } else {?>
9
+ <?php if($_info = $this->getInfo()): ?>
10
+ <?php echo $this->__('Name on the Card: %s', $this->htmlEscape($this->getInfo()->getCcOwner())) ?>
11
+ <br/>
12
+ <?php echo $this->__('Card Number: %s', $this->htmlEscape($this->getCcNumber())) ?>
13
+ <br/>
14
+ <?php echo $this->__('Expiration Date: %s/%s', $this->htmlEscape($this->getInfo()->getCcExpMonth()), $this->htmlEscape($this->getInfo()->getCcExpYear())) ?>
15
+ <br />
16
+ <?php else: ?>
17
+ <?php endif; ?>
18
+ <?php }?>
app/design/adminhtml/default/default/layout/tpg.xml ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout>
3
+ <adminhtml_sales_order_view>
4
+ <reference name="head">
5
+ <action method="addItem">
6
+ <type>skin_js</type>
7
+ <name>tpg.js</name>
8
+ </action>
9
+ </reference>
10
+ </adminhtml_sales_order_view>
11
+ </layout>
app/design/adminhtml/default/default/template/payment/info/cc_tpg.phtml ADDED
@@ -0,0 +1,172 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $m_boTransactionAuthorised = false;
3
+ $m_boValidCrossReference = false;
4
+ $m_boExtensionVersionWithCrossReferenceFeature = true;
5
+
6
+ $m_order = $this->getInfo()->getOrder();
7
+ $m_payment = $m_order->getPayment();
8
+ $m_szOrderID = $m_order->getRealOrderId();
9
+ $m_szOrderStatus = $m_order->getStatus();
10
+ $m_szAmount = $m_order->getBaseGrandTotal();
11
+ $m_nPaymentVoided = 0;//(int)$m_order->getVoided();
12
+ $m_nPaymentRefunded = 0;
13
+ $m_nPaymentCollected = 0;
14
+ $m_boCanVoid = false;
15
+ $m_boCanCollect = false;
16
+
17
+ // get the additional information column data for a Magento payment
18
+ $additional_info = $m_payment->getAdditionalInformation();
19
+ $szToday = date("Ymd");
20
+
21
+ // for redirected transactions the TransactionId can't be updated with a new CrossReference (ie: 3DS transaction), need to revert back to additional_info
22
+ //$szCrossReference = $m_payment->getLastTransId();
23
+ $additionalInfo = $m_payment->getAdditionalInformation();
24
+ if(!key_exists("CrossReference", $additionalInfo))
25
+ {
26
+ $szCrossReference = false;
27
+ }
28
+ else
29
+ {
30
+ $szCrossReference = $additional_info["CrossReference"];
31
+ }
32
+
33
+ if(!key_exists("TransactionDateTime", $additionalInfo))
34
+ {
35
+ $szTransactionDateTime = false;
36
+ }
37
+ else
38
+ {
39
+ $szTransactionDateTime = $additional_info["TransactionDateTime"];
40
+ }
41
+
42
+ if(!key_exists("TransactionType", $additionalInfo))
43
+ {
44
+ $szTransactionType = false;
45
+ }
46
+ else
47
+ {
48
+ $szTransactionType = $additional_info["TransactionType"];
49
+ }
50
+
51
+ if(key_exists("Voided", $additionalInfo))
52
+ {
53
+ $m_nPaymentVoided = (int)$additional_info["Voided"];
54
+ }
55
+ if(key_exists("Refunded", $additionalInfo))
56
+ {
57
+ $m_nPaymentRefunded = (int)$additional_info["Refunded"];
58
+ }
59
+ if(key_exists("Collected", $additionalInfo))
60
+ {
61
+ $m_nPaymentCollected = (int)$additional_info["Collected"];
62
+ }
63
+
64
+ if(!$szCrossReference ||
65
+ !$szTransactionDateTime ||
66
+ !$szTransactionType)
67
+ {
68
+ $m_boExtensionVersionWithCrossReferenceFeature = false;
69
+ }
70
+ else
71
+ {
72
+ if($szTransactionType == 'PREAUTH')
73
+ {
74
+ $m_szTransactionType = "PREAUTH";
75
+
76
+ // check if payment can be voided
77
+ if (!$m_nPaymentVoided &&
78
+ !$m_nPaymentRefunded &&
79
+ // payment must be successful
80
+ $m_szOrderStatus == "irc_preauth")
81
+ {
82
+ if (strtotime($szToday) == strtotime($szTransactionDateTime))
83
+ {
84
+ $m_boCanVoid = true;
85
+ }
86
+ }
87
+
88
+ // check if payment can be collected
89
+ if(!$m_nPaymentVoided &&
90
+ !$m_nPaymentCollected &&
91
+ // payment must be successful
92
+ $m_szOrderStatus == "irc_preauth")
93
+ {
94
+ $m_boCanCollect = true;
95
+ }
96
+ }
97
+ else if($szTransactionType == 'SALE')
98
+ {
99
+ $m_szTransactionType = "SALE";
100
+
101
+ // check if payment can be voided
102
+ if(!$m_nPaymentVoided &&
103
+ !$m_nPaymentRefunded &&
104
+ // payment must be successful
105
+ $m_szOrderStatus == "irc_paid")
106
+ {
107
+ if(strtotime($szToday) == strtotime($szTransactionDateTime) &&
108
+ // for the time being only allow to execute a root VOID
109
+ $m_szOrderStatus == "irc_paid")
110
+ {
111
+ $m_boCanVoid = true;
112
+ }
113
+ }
114
+
115
+ // check if it can be collected - only preauth can be collected
116
+ $m_nPaymentCollected = 0;
117
+ }
118
+ else
119
+ {
120
+ Mage::log('Order info error: transaction type: '.$szTransactionType.' is not supported by the PayVector/Tpg extension');
121
+ }
122
+ }
123
+ ?>
124
+
125
+ <div>
126
+ CrossReference:
127
+ <?php
128
+ if(!$m_boExtensionVersionWithCrossReferenceFeature)
129
+ {
130
+ echo "<span style=\"font-weight:bold;color:Red;\">Missing data*</span>";
131
+ }
132
+ else
133
+ {
134
+ echo "<span style=\"font-weight:bold;\">".$szCrossReference."</span>";
135
+ }
136
+ ?>
137
+ </div>
138
+ <div>
139
+ Transaction Type:
140
+ <?php
141
+ if(!$m_boExtensionVersionWithCrossReferenceFeature)
142
+ {
143
+ echo "<span style=\"font-weight:bold;color:Red;\">Missing data*</span>";
144
+ }
145
+ else
146
+ {
147
+ echo "<span style=\"font-weight:bold;\">".$m_szTransactionType."</span>";
148
+ }
149
+ ?>
150
+ </div>
151
+ <div>
152
+ Amount: <?php echo "<span style=\"font-weight:bold\">".$m_szAmount."</span>"; ?>
153
+ </div>
154
+
155
+ <?php if(!$m_boExtensionVersionWithCrossReferenceFeature): ?>
156
+ <div>
157
+ <span style="font-weight:bold;color:Red;">* Incomplete orders and orders processed through an older payment extension will not have all the data necessary for CrossReference payments</span>
158
+ </div>
159
+ <?php else: ?>
160
+ <div>
161
+ <?php if($m_boCanVoid): ?>
162
+ <button type="button" id="voidButton" onclick="IRC_runCrossReferenceTransaction('<?php echo $this->getUrl('tpg/payment/void', array('_secure' => true)); ?>', '<?php echo $m_szOrderID; ?>', '<?php echo $szCrossReference; ?>', 'VOID');">
163
+ <span>VOID</span>
164
+ </button>
165
+ <?php endif; ?>
166
+ <?php if($m_boCanCollect): ?>
167
+ <button type="button" id="collectionButton" onclick="IRC_runCrossReferenceTransaction('<?php echo $this->getUrl('tpg/payment/collection', array('_secure' => true)); ?>', '<?php echo $m_szOrderID; ?>', '<?php echo $szCrossReference; ?>', 'COLLECTION');">
168
+ <span>COLLECT</span>
169
+ </button>
170
+ <?php endif; ?>
171
+ </div>
172
+ <?php endif; ?>
app/design/adminhtml/default/default/template/tpg/form.phtml ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php $direct = Mage::getModel('tpg/direct'); ?>
2
+ <?php $_code = $this->getMethodCode() ?>
3
+ <?php $route = $this->getRequest()->getRequestedRouteName(); if($route == 'onestepcheckout'){ $fieldCode = '['.$_code.']'; } else { $fieldCode = ''; }?>
4
+
5
+ <?php if ($direct->getConfigData('mode') == PayVector_Tpg_Model_Source_PaymentMode::PAYMENT_MODE_HOSTED_PAYMENT_FORM) {?>
6
+ <fieldset class="form-list">
7
+ <ul id="payment_form_<?php echo $_code ?>" style="display:none">
8
+ <li>
9
+ <?php echo $this->__('You will be redirected to a secure page where you can complete your payment.') ?>
10
+ </li>
11
+ </ul>
12
+ </fieldset>
13
+ <?php } else {?>
14
+ <fieldset class="form-list">
15
+ <ul id="payment_form_<?php echo $_code; ?>" style="display:none">
16
+ <li>
17
+ <div class="input-box">
18
+ <label for="<?php echo $_code; ?>_cc_owner"><?php echo $this->__('Name On Card') ?> <span class="required">*</span></label><br/>
19
+ <input type="text" title="<?php echo $this->__('Name On Card') ?>" class="input-text required-entry validate-length maximum-length-100" id="<?php echo $_code; ?>_cc_owner" name="payment<?php echo $fieldCode; ?>[cc_owner]" value="<?php echo $this->htmlEscape($this->getInfoData('cc_owner')) ?>"/>
20
+ </div>
21
+ </li>
22
+ <li>
23
+ <div class="input-box">
24
+ <label for="<?php echo $_code; ?>_cc_number"><?php echo $this->__('Card Number') ?> <span class="required">*</span></label><br/>
25
+ <input type="text" id="<?php echo $_code; ?>_cc_number" name="payment<?php echo $fieldCode; ?>[cc_number]" title="<?php echo $this->__('Card Number') ?>" class="input-text required-entry validate-digits validate-length maximum-length-20" value=""/>
26
+ </div>
27
+ </li>
28
+ <li>
29
+ <label for="<?php echo $_code; ?>_expiration"><?php echo $this->__('Expiration Date') ?> <span class="required">*</span></label><br/>
30
+ <div class="input-box">
31
+ <div class="v-fix">
32
+ <select id="<?php echo $_code; ?>_expiration" name="payment<?php echo $fieldCode; ?>[cc_exp_month]" class="month validate-cc-exp required-entry">
33
+ <?php $_ccExpMonth = $this->getInfoData('cc_exp_month') ?>
34
+ <?php foreach ($this->getCcMonths() as $k=>$v): ?>
35
+ <option value="<?php echo $k?$k:'' ?>"<?php if($k==$_ccExpMonth): ?> selected="selected"<?php endif ?>><?php echo $v ?></option>
36
+ <?php endforeach ?>
37
+ </select>
38
+ </div>
39
+
40
+ <div class="v-fix">
41
+ <?php $_ccExpYear = $this->getInfoData('cc_exp_year') ?>
42
+ <select id="<?php echo $_code; ?>_expiration_yr" name="payment<?php echo $fieldCode; ?>[cc_exp_year]" class="year required-entry">
43
+ <?php foreach ($this->getCcYears() as $k=>$v): ?>
44
+ <option value="<?php echo $k?$k:'' ?>"<?php if($k==$_ccExpYear): ?> selected="selected"<?php endif ?>><?php echo $v ?></option>
45
+ <?php endforeach ?>
46
+ </select>
47
+ </div>
48
+ </div>
49
+ </li>
50
+ <li>
51
+ <label for="<?php echo $_code; ?>_cc_ss_start_month"><?php echo $this->__('Start Date') ?></label><br />
52
+ <div class="input-box">
53
+ <div class="v-fix">
54
+ <select id="<?php echo $_code; ?>_cc_ss_start_month" name="payment<?php echo $fieldCode; ?>[cc_ss_start_month]" class="month">
55
+ <?php $_ccStartMonth = $this->getInfoData('cc_ss_start_month') ?>
56
+ <?php foreach ($this->getCcStartMonths() as $k=>$v): ?>
57
+ <option value="<?php echo $k?$k:'' ?>"<?php if($k==$_ccStartMonth): ?> selected="selected"<?php endif ?>><?php echo $v ?></option>
58
+ <?php endforeach ?>
59
+ </select>
60
+ </div>
61
+ <div class="v-fix">
62
+ <?php $_ccStartYear = $this->getInfoData('cc_ss_start_year') ?>
63
+ <select id="<?php echo $_code ?>_cc_ss_start_year" name="payment<?php echo $fieldCode; ?>[cc_ss_start_year]" class="year">
64
+ <?php foreach ($this->getCcStartYears() as $k=>$v): ?>
65
+ <option value="<?php echo $k?$k:'' ?>"<?php if($k==$_ccStartYear): ?> selected="selected"<?php endif ?>><?php echo $v ?></option>
66
+ <?php endforeach ?>
67
+ </select>
68
+ </div>
69
+ </div>
70
+ </li>
71
+ <li>
72
+ <div class="input-box">
73
+ <label for="<?php echo $_code; ?>_cc_ss_issue"><?php echo $this->__('Issue Number') ?></label><br />
74
+ <div class="v-fix"><input type="text" title="<?php echo $this->__('Issue Number') ?>" class="input-text validate-digits validate-length maximum-length-2" id="<?php echo $_code ?>_cc_ss_issue" name="payment<?php echo $fieldCode; ?>[cc_ss_issue]" style="width:50px;" value="" /></div>
75
+ </div>
76
+ </li>
77
+ <li>
78
+ <div class="input-box">
79
+ <label for="<?php echo $_code; ?>_cc_cid"><?php echo $this->__('CV2') ?> <span class="required">*</span></label><br/>
80
+ <div class="v-fix"><input type="text" title="<?php echo $this->__('CV2') ?>" class="input-text required-entry validate-digits validate-length minimum-length-3 maximum-length-4" id="<?php echo $_code; ?>_cc_cid" name="payment<?php echo $fieldCode; ?>[cc_cid]" style="width:50px;" value=""/></div>
81
+ &nbsp;
82
+ <a href="#" class="cvv-what-is-this"><?php echo $this->__('What is this?') ?></a>
83
+ </div>
84
+ </li>
85
+ </ul>
86
+ </fieldset>
87
+ <?php }?>
app/design/adminhtml/default/default/template/tpg/info.phtml ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php $direct = Mage::getModel('tpg/direct'); ?>
2
+ <?php if ($direct->getConfigData('mode') != PayVector_Tpg_Model_Source_PaymentMode::PAYMENT_MODE_DIRECT_API) {?>
3
+ <?php if ($direct->getConfigData('mode') == PayVector_Tpg_Model_Source_PaymentMode::PAYMENT_MODE_HOSTED_PAYMENT_FORM) {?>
4
+ <?php echo $this->__('PayVector Hosted Payment'); ?>
5
+ <?php } else {?>
6
+ <?php echo $this->__('PayVector Transparent Redirect'); ?>
7
+ <?php }?>
8
+ <?php } else {?>
9
+ <?php if($_info = $this->getInfo()): ?>
10
+ <?php echo $this->__('Name on the Card: %s', $this->htmlEscape($this->getInfo()->getCcOwner())) ?>
11
+ <br/>
12
+ <?php echo $this->__('Card Number: %s', $this->htmlEscape($this->getCcNumber())) ?>
13
+ <br/>
14
+ <?php echo $this->__('Expiration Date: %s/%s', $this->htmlEscape($this->getInfo()->getCcExpMonth()), $this->htmlEscape($this->getInfo()->getCcExpYear())) ?>
15
+ <br />
16
+ <?php else: ?>
17
+ <?php endif; ?>
18
+ <?php }?>
app/design/frontend/base/default/template/tpg/form.phtml ADDED
@@ -0,0 +1,198 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php $direct = Mage::getModel('tpg/direct'); ?>
2
+ <?php $_code = $this->getMethodCode() ?>
3
+ <?php $route = $this->getRequest()->getRequestedRouteName(); if($route == 'onestepcheckout'){ $fieldCode = '['.$_code.']'; } else { $fieldCode = ''; } ?>
4
+
5
+ <?php
6
+
7
+ if(Mage::getSingleton('customer/session')->isLoggedIn()) {
8
+ $customer = Mage::getSingleton('customer/session')->getCustomer();
9
+ $customerID = $customer->getId();
10
+
11
+ $orderPaymentTableName = Mage::getSingleton('core/resource')->getTableName('sales/order_payment');
12
+
13
+ $orderCollection = Mage::getModel('sales/order')->getCollection()
14
+ ->addFilter('customer_id', $customerID)
15
+ ->setOrder('entity_id', 'DESC');
16
+ $orderCollection->getSelect()
17
+ ->join(
18
+ array("order_payment" => $orderPaymentTableName),
19
+ "main_table.entity_id=order_payment.entity_id"
20
+ );
21
+
22
+ //check if a cross reference was set in any of the previous transactions by this customer
23
+ foreach($orderCollection as $order)
24
+ {
25
+ $crossReference = $order->getLastTransId();
26
+ if(isset($crossReference))
27
+ {
28
+ $cardLastFour = $order->getCcLast4();
29
+ $cardType = $order->getCcType();
30
+ break;
31
+ }
32
+ }
33
+ }
34
+
35
+ ?>
36
+
37
+ <fieldset class="form-list">
38
+ <ul id="payment_form_<?php echo $_code ?>" style="display:none">
39
+ <li>
40
+ <img alt="<?php echo $this->__('PayVector Corporation Logo'); ?>" src="<?php echo $this->getSkinUrl('images/payvector.png'); ?>">
41
+ </li>
42
+ <?php
43
+ //check if cross reference is set - if so show the choice to use the saved card
44
+ if(isset($crossReference)):
45
+ ?>
46
+ <li>
47
+ <?php if(isset($cardLastFour)): ?>
48
+ <label for="<?php echo $_code; ?>_payment_type_stored"><?php echo $this->__('Use Saved ' . $cardType . ' Card: xxxx-'.$cardLastFour) ?> <span class="required">*</span></label><br/>
49
+ <?php else: ?>
50
+ <label for="<?php echo $_code; ?>_payment_type_stored"><?php echo $this->__('Use Saved ' . $cardType . ' Card') ?> <span class="required">*</span></label><br/>
51
+ <?php endif; ?>
52
+ <input type="radio" title="<?php echo $this->__('Use Saved Card') ?>" id="<?php echo $_code; ?>_payment_type_stored" name="payment<?php echo $fieldCode; ?>[payment_type]" value="stored_card" checked/>
53
+ </li>
54
+ <li>
55
+ <label for="<?php echo $_code; ?>_payment_type_new"><?php echo $this->__('Or enter new card details') ?> <span class="required">*</span></label><br/>
56
+ <input type="radio" title="<?php echo $this->__('Or enter new card details') ?>" id="<?php echo $_code; ?>_payment_type_new" name="payment<?php echo $fieldCode; ?>[payment_type]" value="new_card"/>
57
+ </li>
58
+ <?php else: ?>
59
+ <input type="hidden" id="<?php echo $_code; ?>_payment_type" name="payment<?php echo $fieldCode; ?>[payment_type]" value="new_card"/>
60
+ <?php endif; ?>
61
+
62
+ <?php
63
+ //check if we're using the hosted payment form - if so then inform the user they will be transferred to input their card details
64
+ if ($direct->getConfigData('mode') == PayVector_Tpg_Model_Source_PaymentMode::PAYMENT_MODE_HOSTED_PAYMENT_FORM):
65
+ ?>
66
+ <li class="new_card">
67
+ <?php echo $this->__('You will be redirected to a secure page where you can complete your payment.') ?>
68
+ </li>
69
+ <li class='new_card notice-msg'>
70
+ <?php echo $this->__('Please do not attempt to click the "BACK" button in your browser once you were redirected to the secure payment page to complete your payment. If you need to change your order you can do it before placing your order.') ?>
71
+ </li>
72
+ <?php
73
+ //else if we're using the Direct/API method then take card details here
74
+ else:
75
+ ?>
76
+ <li class="new_card">
77
+ <div class="input-box">
78
+ <label for="<?php echo $_code; ?>_cc_owner"><?php echo $this->__('Name On Card') ?> <span class="required">*</span></label><br/>
79
+ <input type="text" title="<?php echo $this->__('Name On Card') ?>" class="input-text required-entry validate-length maximum-length-100" id="<?php echo $_code; ?>_cc_owner" name="payment<?php echo $fieldCode; ?>[cc_owner]" value="<?php echo $this->htmlEscape($this->getInfoData('cc_owner')) ?>"/>
80
+ </div>
81
+ </li>
82
+ <li class="new_card">
83
+ <div class="input-box">
84
+ <label for="<?php echo $_code; ?>_cc_number"><?php echo $this->__('Card Number') ?> <span class="required">*</span></label><br/>
85
+ <input type="text" id="<?php echo $_code; ?>_cc_number" name="payment<?php echo $fieldCode; ?>[cc_number]" title="<?php echo $this->__('Card Number') ?>" class="input-text required-entry validate-digits validate-length maximum-length-20 validate-cc-number" value=""/>
86
+ </div>
87
+ </li>
88
+ <li class="new_card">
89
+ <label for="<?php echo $_code; ?>_expiration"><?php echo $this->__('Expiry Date') ?> <span class="required">*</span></label><br/>
90
+ <div class="input-box">
91
+ <div class="v-fix">
92
+ <select id="<?php echo $_code; ?>_expiration" name="payment<?php echo $fieldCode; ?>[cc_exp_month]" class="month validate-cc-exp required-entry">
93
+ <?php $_ccExpMonth = $this->getInfoData('cc_exp_month') ?>
94
+ <?php foreach ($this->getCcMonths() as $k=>$v): ?>
95
+ <option value="<?php echo $k?$k:'' ?>" <?php if($k==$_ccExpMonth): ?> selected="selected"<?php endif ?>><?php echo $v ?></option>
96
+ <?php endforeach ?>
97
+ </select>
98
+ </div>
99
+
100
+ <div class="v-fix" style="padding-left:5px;">
101
+ <?php $_ccExpYear = $this->getInfoData('cc_exp_year') ?>
102
+ <select id="<?php echo $_code; ?>_expiration_yr" name="payment<?php echo $fieldCode; ?>[cc_exp_year]" class="year required-entry">
103
+ <?php foreach ($this->getCcYears() as $k=>$v): ?>
104
+ <option value="<?php echo $k?$k:'' ?>" <?php if($k==$_ccExpYear): ?> selected="selected"<?php endif ?>><?php echo $v ?></option>
105
+ <?php endforeach ?>
106
+ </select>
107
+ </div>
108
+ </div>
109
+ </li>
110
+ <li class="new_card">
111
+ <label for="<?php echo $_code; ?>_cc_ss_start_month"><?php echo $this->__('Start Date') ?></label><br />
112
+ <div class="input-box">
113
+ <div class="v-fix">
114
+ <select id="<?php echo $_code; ?>_cc_ss_start_month" name="payment<?php echo $fieldCode; ?>[cc_ss_start_month]" class="month">
115
+ <?php $_ccStartMonth = $this->getInfoData('cc_ss_start_month') ?>
116
+ <?php foreach ($this->getCcStartMonths() as $k=>$v): ?>
117
+ <option value="<?php echo $k?$k:'' ?>"<?php if($k==$_ccStartMonth): ?> selected="selected"<?php endif ?>><?php echo $v ?></option>
118
+ <?php endforeach ?>
119
+ </select>
120
+ </div>
121
+ <div class="v-fix" style="padding-left:5px;">
122
+ <?php $_ccStartYear = $this->getInfoData('cc_ss_start_year') ?>
123
+ <select id="<?php echo $_code ?>_cc_ss_start_year" name="payment<?php echo $fieldCode; ?>[cc_ss_start_year]" class="year">
124
+ <?php foreach ($this->getCcStartYears() as $k=>$v): ?>
125
+ <option value="<?php echo $k?$k:'' ?>"<?php if($k==$_ccStartYear): ?> selected="selected"<?php endif ?>><?php echo $v ?></option>
126
+ <?php endforeach ?>
127
+ </select>
128
+ </div>
129
+ </div>
130
+ </li>
131
+ <li class="new_card">
132
+ <div class="input-box">
133
+ <label for="<?php echo $_code; ?>_cc_ss_issue"><?php echo $this->__('Issue Number') ?></label><br />
134
+ <div class="v-fix"><input type="text" title="<?php echo $this->__('Issue Number') ?>" class="input-text validate-digits validate-length maximum-length-2" style="width:50px;" id="<?php echo $_code ?>_cc_ss_issue" name="payment<?php echo $fieldCode; ?>[cc_ss_issue]" value="" /></div>
135
+ </div>
136
+ </li>
137
+ <?php endif; ?>
138
+ <li class="cvv">
139
+ <div class="input-box">
140
+ <label for="<?php echo $_code; ?>_cc_cid"><?php echo $this->__('CV2') ?> <span class="required">*</span></label><br/>
141
+ <div class="v-fix"><input type="text" title="<?php echo $this->__('CV2') ?>" class="input-text required-entry validate-digits validate-length minimum-length-3 maximum-length-4" style="width:50px;" id="<?php echo $_code; ?>_cc_cid" name="payment<?php echo $fieldCode; ?>[cc_cid]" value=""/></div>
142
+ &nbsp;
143
+ <a href="#" class="cvv-what-is-this"><?php echo $this->__('What is this?') ?></a>
144
+ </div>
145
+ </li>
146
+ </ul>
147
+ </fieldset>
148
+
149
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
150
+ <script>
151
+ //<![CDATA[
152
+ //ensure jQuery.noConflict is only run once
153
+ if(typeof ranNoConflict === 'undefined' || ranNoConflict !== true)
154
+ {
155
+ jQuery_1_11 = jQuery.noConflict(true);
156
+ }
157
+ ranNoConflict = true;
158
+
159
+ jQuery_1_11(document).ready(function()
160
+ {
161
+ var paymentType = "HPF";
162
+ if (jQuery_1_11('#<?php echo $_code; ?>_cc_number').length > 0) {
163
+ //input for taking cc number exists therefore we're using the direct method
164
+ paymentType = "DIRECT";
165
+ }
166
+
167
+ var $paymentType = jQuery_1_11('input[name="payment<?php echo $fieldCode; ?>[payment_type]"]');
168
+ var $newCardRadio = jQuery_1_11('#<?php echo $_code; ?>_payment_type_new');
169
+ var $newCardInput = jQuery_1_11('.new_card');
170
+ var $cvvInput = jQuery_1_11('.cvv');
171
+
172
+ if(jQuery_1_11('input[name="payment<?php echo $fieldCode; ?>[payment_type]"]:checked').val() === "stored_card")
173
+ {
174
+ $newCardInput.hide();
175
+ }
176
+
177
+ $paymentType.click(function()
178
+ {
179
+ if($newCardRadio.is(':checked'))
180
+ {
181
+ $newCardInput.show();
182
+ if(paymentType === "HPF")
183
+ {
184
+ $cvvInput.hide();
185
+ }
186
+ }
187
+ else
188
+ {
189
+ $newCardInput.hide();
190
+ if(paymentType === "HPF")
191
+ {
192
+ $cvvInput.show();
193
+ }
194
+ }
195
+ });
196
+ });
197
+ //]]>
198
+ </script>
app/design/frontend/base/default/template/tpg/info.phtml ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php $direct = Mage::getModel('tpg/direct'); ?>
2
+ <?php if ($direct->getConfigData('mode') != PayVector_Tpg_Model_Source_PaymentMode::PAYMENT_MODE_DIRECT_API) {?>
3
+ <?php if ($direct->getConfigData('mode') == PayVector_Tpg_Model_Source_PaymentMode::PAYMENT_MODE_HOSTED_PAYMENT_FORM) {?>
4
+ <?php echo $this->__('PayVector Hosted Payment'); ?>
5
+ <?php } else {?>
6
+ <?php echo $this->__('PayVector Transparent Redirect'); ?>
7
+ <?php }?>
8
+ <?php } else {?>
9
+ <?php if($_info = $this->getInfo()): ?>
10
+ <?php echo $this->__('Name on the Card: %s', $this->htmlEscape($this->getInfo()->getCcOwner())) ?>
11
+ <br/>
12
+ <?php echo $this->__('Card Number: xxxx-%s', $this->htmlEscape($this->getInfo()->getCcLast4())) ?>
13
+ <br/>
14
+ <?php echo $this->__('Expiration Date: %s/%s', $this->htmlEscape($this->getInfo()->getCcExpMonth()), $this->htmlEscape($this->getInfo()->getCcExpYear())) ?>
15
+ <?php else: ?>
16
+ <?php endif; ?>
17
+ <?php }?>
18
+ $orderCollection
app/design/frontend/default/default/template/tpg/form.phtml ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php $direct = Mage::getModel('tpg/direct'); ?>
2
+ <?php $_code=$this->getMethodCode(); ?>
3
+ <?php $route = $this->getRequest()->getRequestedRouteName(); if($route == 'onestepcheckout'){ $fieldCode = '['.$_code.']'; } else { $fieldCode = ''; }?>
4
+
5
+ <?php if ($direct->getConfigData('mode') == PayVector_Tpg_Model_Source_PaymentMode::PAYMENT_MODE_HOSTED_PAYMENT_FORM) {?>
6
+ <fieldset class="form-list">
7
+ <ul id="payment_form_<?php echo $_code ?>" style="display:none">
8
+ <li>
9
+ <img alt="<?php echo $this->__('PayVector Corporation Logo'); ?>" src="<?php echo $this->getSkinUrl('images/payvector.png'); ?>">
10
+ </li>
11
+ <li>
12
+ <?php echo $this->__('You will be redirected to a secure page where you can complete your payment.') ?>
13
+ </li>
14
+ <li class='notice-msg'>
15
+ <?php echo $this->__('Please do not attempt to click the "BACK" button in your browser once you were redirected to the secure payment page to complete your payment. If you need to change your order you can do it before placing your order.') ?>
16
+ </li>
17
+ </ul>
18
+ </fieldset>
19
+ <?php } else {?>
20
+ <fieldset class="form-list">
21
+ <ul id="payment_form_<?php echo $_code; ?>" style="display:none">
22
+ <li>
23
+ <div class="input-box">
24
+ <label for="<?php echo $_code; ?>_cc_owner"><?php echo $this->__('Name On Card') ?> <span class="required">*</span></label><br/>
25
+ <input type="text" title="<?php echo $this->__('Name On Card') ?>" class="input-text required-entry validate-length maximum-length-100" id="<?php echo $_code; ?>_cc_owner" name="payment<?php echo $fieldCode; ?>[cc_owner]" value="<?php echo $this->htmlEscape($this->getInfoData('cc_owner')) ?>"/>
26
+ </div>
27
+ </li>
28
+ <li>
29
+ <div class="input-box">
30
+ <label for="<?php echo $_code; ?>_cc_number"><?php echo $this->__('Card Number') ?> <span class="required">*</span></label><br/>
31
+ <input type="text" id="<?php echo $_code; ?>_cc_number" name="payment<?php echo $fieldCode; ?>[cc_number]" title="<?php echo $this->__('Card Number') ?>" class="input-text required-entry validate-digits validate-length maximum-length-20 validate-cc-number" value=""/>
32
+ </div>
33
+ </li>
34
+ <li>
35
+ <label for="<?php echo $_code; ?>_expiration"><?php echo $this->__('Expiry Date') ?> <span class="required">*</span></label><br/>
36
+ <div class="input-box">
37
+ <div class="v-fix">
38
+ <select id="<?php echo $_code; ?>_expiration" name="payment<?php echo $fieldCode; ?>[cc_exp_month]" class="month validate-cc-exp required-entry">
39
+ <?php $_ccExpMonth = $this->getInfoData('cc_exp_month') ?>
40
+ <?php foreach ($this->getCcMonths() as $k=>$v): ?>
41
+ <option value="<?php echo $k?$k:'' ?>" <?php if($k==$_ccExpMonth): ?> selected="selected"<?php endif ?>><?php echo $v ?></option>
42
+ <?php endforeach ?>
43
+ </select>
44
+ </div>
45
+
46
+ <div class="v-fix">
47
+ <?php $_ccExpYear = $this->getInfoData('cc_exp_year') ?>
48
+ <select id="<?php echo $_code; ?>_expiration_yr" name="payment<?php echo $fieldCode; ?>[cc_exp_year]" class="year required-entry">
49
+ <?php foreach ($this->getCcYears() as $k=>$v): ?>
50
+ <option value="<?php echo $k?$k:'' ?>" <?php if($k==$_ccExpYear): ?> selected="selected"<?php endif ?>><?php echo $v ?></option>
51
+ <?php endforeach ?>
52
+ </select>
53
+ </div>
54
+ </div>
55
+ </li>
56
+ <li>
57
+ <label for="<?php echo $_code; ?>_cc_ss_start_month"><?php echo $this->__('Start Date') ?></label><br />
58
+ <div class="input-box">
59
+ <div class="v-fix">
60
+ <select id="<?php echo $_code; ?>_cc_ss_start_month" name="payment<?php echo $fieldCode; ?>[cc_ss_start_month]" class="month">
61
+ <?php $_ccStartMonth = $this->getInfoData('cc_ss_start_month') ?>
62
+ <?php foreach ($this->getCcStartMonths() as $k=>$v): ?>
63
+ <option value="<?php echo $k?$k:'' ?>"<?php if($k==$_ccStartMonth): ?> selected="selected"<?php endif ?>><?php echo $v ?></option>
64
+ <?php endforeach ?>
65
+ </select>
66
+ </div>
67
+ <div class="v-fix">
68
+ <?php $_ccStartYear = $this->getInfoData('cc_ss_start_year') ?>
69
+ <select id="<?php echo $_code ?>_cc_ss_start_year" name="payment<?php echo $fieldCode; ?>[cc_ss_start_year]" class="year">
70
+ <?php foreach ($this->getCcStartYears() as $k=>$v): ?>
71
+ <option value="<?php echo $k?$k:'' ?>"<?php if($k==$_ccStartYear): ?> selected="selected"<?php endif ?>><?php echo $v ?></option>
72
+ <?php endforeach ?>
73
+ </select>
74
+ </div>
75
+ </div>
76
+ </li>
77
+ <li>
78
+ <div class="input-box">
79
+ <label for="<?php echo $_code; ?>_cc_ss_issue"><?php echo $this->__('Issue Number') ?></label><br />
80
+ <div class="v-fix"><input type="text" title="<?php echo $this->__('Issue Number') ?>" class="input-text validate-digits validate-length maximum-length-2" style="width:50px;" id="<?php echo $_code ?>_cc_ss_issue" name="payment<?php echo $fieldCode; ?>[cc_ss_issue]" value="" /></div>
81
+ </div>
82
+ </li>
83
+ <li>
84
+ <div class="input-box">
85
+ <label for="<?php echo $_code; ?>_cc_cid"><?php echo $this->__('CV2') ?> <span class="required">*</span></label><br/>
86
+ <div class="v-fix"><input type="text" title="<?php echo $this->__('CV2') ?>" class="input-text required-entry validate-digits validate-length minimum-length-3 maximum-length-4" style="width:50px;" id="<?php echo $_code; ?>_cc_cid" name="payment<?php echo $fieldCode; ?>[cc_cid]" value=""/></div>
87
+ &nbsp;
88
+ <a href="#" class="cvv-what-is-this"><?php echo $this->__('What is this?') ?></a>
89
+ </div>
90
+ </li>
91
+ </ul>
92
+ </fieldset>
93
+ <?php }?>
app/design/frontend/default/default/template/tpg/info.phtml ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php $direct = Mage::getModel('tpg/direct'); ?>
2
+ <?php if ($direct->getConfigData('mode') != PayVector_Tpg_Model_Source_PaymentMode::PAYMENT_MODE_DIRECT_API) {?>
3
+ <?php if ($direct->getConfigData('mode') == PayVector_Tpg_Model_Source_PaymentMode::PAYMENT_MODE_HOSTED_PAYMENT_FORM) {?>
4
+ <?php echo $this->__('PayVector Hosted Payment'); ?>
5
+ <?php } else {?>
6
+ <?php echo $this->__('PayVector Transparent Redirect'); ?>
7
+ <?php }?>
8
+ <?php } else {?>
9
+ <?php if($_info = $this->getInfo()): ?>
10
+ <?php echo $this->__('Name on the Card: %s', $this->htmlEscape($this->getInfo()->getCcOwner())) ?>
11
+ <br/>
12
+ <?php echo $this->__('Card Number: xxxx-%s', $this->htmlEscape($this->getInfo()->getCcLast4())) ?>
13
+ <br/>
14
+ <?php echo $this->__('Expiration Date: %s/%s', $this->htmlEscape($this->getInfo()->getCcExpMonth()), $this->htmlEscape($this->getInfo()->getCcExpYear())) ?>
15
+ <?php else: ?>
16
+ <?php endif; ?>
17
+ <?php }?>
package.xml ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>PayVector_Tpg</name>
4
+ <version>1.0.0</version>
5
+ <stability>stable</stability>
6
+ <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>PayVector payment extension compatible with Magento v 1.3, 1.4, 1.5, 1.6, 1.7, 1.8 and 1.9</summary>
10
+ <description>Fully supports 3D secure and CrossReference transactions. Also supports all of the integration methods provided by PayVector.</description>
11
+ <notes>First release based on IridiumCorp module v1.16.2</notes>
12
+ <authors><author><name>Iridium Corporation</name><user>IridiumCorp</user><email>support@payvector.net</email></author></authors>
13
+ <date>2014-06-11</date>
14
+ <time>10:54:49</time>
15
+ <contents><target name="magelocal"><dir name="PayVector"><dir name="Checkout"><dir name="Block"><dir name="Onepage"><dir name="Payment"><file name="Methods.php" hash="13be37e32795a710327ada3dfc91a22f"/></dir></dir></dir><dir name="Model"><dir name="Type"><file name="Onepage.php" hash="7c7c4a2ec9004b142f7094d93a456ba7"/></dir></dir><dir name="etc"><file name="config.xml" hash="2a388d8d243e5e9ed3954bd268ec084f"/></dir></dir><dir name="Sales"><dir name="Model"><dir name="Order"><file name="Invoice.php" hash="de5bb58bbb153c63cc60169f23461f6b"/><file name="Payment.php" hash="6cee2578e3d43006f8cad756e4ef43ce"/></dir><file name="Order.php" hash="c7d5bc41ac7e9e59d6fdb725acda4f58"/><dir name="Service"><file name="Quote.php" hash="b4a316a007255d8c3a4752daaf38b725"/></dir></dir><dir name="etc"><file name="config.xml" hash="bc7c6ba07a063b64cbc7917d0611b5e0"/></dir></dir><dir name="Tpg"><dir name="Block"><dir name="Adminhtml"><dir name="Sales"><dir name="Order"><file name="Payment.php" hash="eaff6b529038745549a714edb92ea1df"/></dir></dir></dir><file name="Error.php" hash="a1e3040eb95d6fcdf3855d77f42fbde6"/><file name="Form.php" hash="4f537f6a45a1a95f7cf27c45739ee9ba"/><file name="Info.php" hash="0eac4e7b36a800224852f2a445ba7ae6"/><file name="Redirect.php" hash="9e1577b80807592f56e62db6f21cfe3f"/><file name="Threedsecure.php" hash="2b25adce59c4ea485caa7b49499bfc32"/></dir><dir name="Helper"><file name="Data.php" hash="bae2102ea62785f6145ecfd00a5f2fb4"/></dir><dir name="Model"><dir name="Common"><file name="GlobalErrors.php" hash="09dd5e1cc01a6e4265d85cc903b91284"/><file name="ISOCountries.php" hash="2b6447781fb33853dd7447916fd98829"/><file name="ISOCurrencies.php" hash="4450b69c528863b95206bbcbd1360ede"/><file name="PaymentFormHelper.php" hash="24048b009ff8ea6382ea2bb12e622867"/><dir name="ThePaymentGateway"><file name="PaymentSystem.php" hash="246422bf2e2e0d20fb0f35532f8896d3"/><file name="SOAP.php" hash="860646be97216087262b11c5818fcec3"/><file name="TPG_Common.php" hash="4ef394ae6384e015e8c197a58106f2c7"/><file name="cacert.pem" hash="36c2e174ffa1e4739e5ce879d660dd6a"/></dir></dir><file name="Direct.php" hash="190c461d20361992baaa8b0b41c18124"/><file name="Gatewayentrypoints.php" hash="f32d905a9b6c9ba8b742e340fc86049f"/><file name="Request.php" hash="75a23ed2d447674c823cfd3cc3602f68"/><dir name="Resource"><dir name="Eav"><dir name="Mysql4"><file name="Setup.php" hash="410116bc6a8d327a2232512c13561c8a"/></dir></dir><dir name="Gatewayentrypoints"><file name="Collection.php" hash="79bb8b43312451d7577c58bf60428366"/></dir><file name="Gatewayentrypoints.php" hash="a5033400ece4a661f0416c577df827b9"/><file name="Setup.php" hash="9a8cbc132f29cd61b82c36aac9d51407"/></dir><dir name="Source"><file name="HashMethod.php" hash="3077605f52458e6c6d88dc773a228c38"/><file name="OrderStatus.php" hash="95d343f1c2419edbf63847a357ae4076"/><file name="PaymentAction.php" hash="f3444cbbf95ffbcd5bc845110fd8ac0c"/><file name="PaymentMode.php" hash="671768ed91f1ca1178b67b8afd269ca9"/><file name="ResultDeliveryMethod.php" hash="7b6088293650fcf8bcb9aa23b2be1671"/></dir></dir><dir name="controllers"><file name="PaymentController.php" hash="cd40b0031ab96704f1316637045176e0"/></dir><dir name="etc"><file name="config.xml" hash="e563ec1c6df680deb91e4508e8ffe7cb"/><file name="system.xml" hash="0d1f30630d84daba413e4f2c8dd4edc0"/></dir><dir name="sql"><dir name="tpg_setup"><file name="install-0.1.0.php" hash="767431a50e2a891fe7d4adb930df2953"/><file name="mysql4-install-0.1.0.php" hash="9b478c72f89b327866ec12e7054bcc85"/></dir></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="default"><dir name="default"><dir name="images"><file name="payvector.png" hash="e61e1555ca69863a79afb59382e3d16f"/></dir></dir></dir><dir name="base"><dir name="default"><dir name="images"><file name="payvector.png" hash="e61e1555ca69863a79afb59382e3d16f"/></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><file name="tpg.js" hash="11194666936eda1fd7cead21dd819780"/></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="tpg"><file name="form.phtml" hash="46d8d1f3c6532641e9429a64f9e8c55b"/><file name="info.phtml" hash="990a20f78e5085db5fcc792028b75d99"/></dir><dir name="payment"><dir name="info"><file name="cc_tpg.phtml" hash="f0182a45341820f6ce2d1738e67f5399"/></dir></dir></dir><dir name="layout"><file name="tpg.xml" hash="5327d6e72f7bd8aee9bc460cc9550b21"/></dir></dir></dir><dir name="base"><dir name="default"><dir name="template"><dir name="tpg"><file name="form.phtml" hash="5afb18fa16cdf8602ddc21486b3ddaaf"/><file name="info.phtml" hash="990a20f78e5085db5fcc792028b75d99"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="default"><dir name="default"><dir name="template"><dir name="tpg"><file name="form.phtml" hash="56f482c967ab3568af6b56b17c0b1c9a"/><file name="info.phtml" hash="b64d8592a41455f2c5fd011db6d15a21"/></dir></dir></dir></dir><dir name="base"><dir name="default"><dir name="template"><dir name="tpg"><file name="form.phtml" hash="6f683fb5e9ab2a6a6275df122bbc416a"/><file name="info.phtml" hash="512b9cee213170fb226cd2bf59daa761"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Iridiumcorp_All.xml" hash=""/></dir></target></contents>
16
+ <compatible/>
17
+ <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><extension><name>SimpleXML</name><min></min><max></max></extension><extension><name>curl</name><min></min><max></max></extension></required></dependencies>
18
+ </package>
skin/adminhtml/default/default/tpg.js ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ function IRC_runCrossReferenceTransaction(szActionURL, szOrderID, szCrossReference, szTransactionType)
2
+ {
3
+ var szConfirmMessage;
4
+ var szText;
5
+
6
+ if (szActionURL == "")
7
+ {
8
+ alert("Error: Invalid action URL");
9
+ }
10
+
11
+ if (szTransactionType == "VOID")
12
+ {
13
+ szConfirmMessage = "Are you sure you would like to void this payment?";
14
+ szText = "<ul class='messages'><li class='success-msg'><ul><li>Payment successfully voided</li></ul></li></ul>";
15
+ }
16
+ else if (szTransactionType == "COLLECTION")
17
+ {
18
+ szConfirmMessage = "Are you sure you would like to collect this authorized payment?";
19
+ szText = "<ul class='messages'><li class='success-msg'><ul><li>Authorized payment successfully collected</li></ul></li></ul>";
20
+ }
21
+ else
22
+ {
23
+ alert("Error: Unknown transaction type to run for this action: " + szTransactionType);
24
+ return;
25
+ }
26
+
27
+ if (confirm(szConfirmMessage))
28
+ {
29
+ new Ajax.Request(szActionURL,
30
+ { method: "post",
31
+ parameters: { OrderID: szOrderID, CrossReference: szCrossReference },
32
+ onSuccess: function (result) { var szMessage = result.responseText; if (szMessage == "0") { location.href = location.href; /* cheating with displaying a success message before the page is refreshed */ $('messages').update(szText); } else { alert(szMessage); } }
33
+ });
34
+ }
35
+ }
skin/frontend/base/default/images/payvector.png ADDED
Binary file
skin/frontend/default/default/images/payvector.png ADDED
Binary file