MailMunch – Grow your Email List - Version 1.3.9

Version Description

Download this release

Release Info

Developer mailmunch
Plugin Icon 128x128 MailMunch – Grow your Email List
Version 1.3.9
Comparing to
See all releases

Code changes from version 1.3.4 to 1.3.9

Files changed (101) hide show
  1. css/admin.css +18 -1
  2. inc/Requests/.coveralls.yml +0 -4
  3. inc/Requests/.travis.yml +0 -27
  4. inc/Requests/CHANGELOG.md +0 -48
  5. inc/Requests/LICENSE +0 -49
  6. inc/Requests/README.md +0 -143
  7. inc/Requests/bin/create_pear_package.php +0 -55
  8. inc/Requests/composer.json +0 -24
  9. inc/Requests/docs/README.md +0 -28
  10. inc/Requests/docs/authentication-custom.md +0 -44
  11. inc/Requests/docs/authentication.md +0 -31
  12. inc/Requests/docs/goals.md +0 -29
  13. inc/Requests/docs/hooks.md +0 -92
  14. inc/Requests/docs/proxy.md +0 -23
  15. inc/Requests/docs/usage-advanced.md +0 -74
  16. inc/Requests/docs/usage.md +0 -154
  17. inc/Requests/docs/why-requests.md +0 -192
  18. inc/Requests/examples/basic-auth.php +0 -16
  19. inc/Requests/examples/get.php +0 -13
  20. inc/Requests/examples/multiple.php +0 -45
  21. inc/Requests/examples/post.php +0 -13
  22. inc/Requests/examples/proxy.php +0 -18
  23. inc/Requests/examples/session.php +0 -24
  24. inc/Requests/examples/timeout.php +0 -17
  25. inc/Requests/library/Requests.php +0 -869
  26. inc/Requests/library/Requests/Auth.php +0 -33
  27. inc/Requests/library/Requests/Auth/Basic.php +0 -88
  28. inc/Requests/library/Requests/Cookie.php +0 -374
  29. inc/Requests/library/Requests/Cookie/Jar.php +0 -158
  30. inc/Requests/library/Requests/Exception.php +0 -62
  31. inc/Requests/library/Requests/Exception/HTTP.php +0 -67
  32. inc/Requests/library/Requests/Exception/HTTP/400.php +0 -27
  33. inc/Requests/library/Requests/Exception/HTTP/401.php +0 -27
  34. inc/Requests/library/Requests/Exception/HTTP/402.php +0 -27
  35. inc/Requests/library/Requests/Exception/HTTP/403.php +0 -27
  36. inc/Requests/library/Requests/Exception/HTTP/404.php +0 -27
  37. inc/Requests/library/Requests/Exception/HTTP/405.php +0 -27
  38. inc/Requests/library/Requests/Exception/HTTP/406.php +0 -27
  39. inc/Requests/library/Requests/Exception/HTTP/407.php +0 -27
  40. inc/Requests/library/Requests/Exception/HTTP/408.php +0 -27
  41. inc/Requests/library/Requests/Exception/HTTP/409.php +0 -27
  42. inc/Requests/library/Requests/Exception/HTTP/410.php +0 -27
  43. inc/Requests/library/Requests/Exception/HTTP/411.php +0 -27
  44. inc/Requests/library/Requests/Exception/HTTP/412.php +0 -27
  45. inc/Requests/library/Requests/Exception/HTTP/413.php +0 -27
  46. inc/Requests/library/Requests/Exception/HTTP/414.php +0 -27
  47. inc/Requests/library/Requests/Exception/HTTP/415.php +0 -27
  48. inc/Requests/library/Requests/Exception/HTTP/416.php +0 -27
  49. inc/Requests/library/Requests/Exception/HTTP/417.php +0 -27
  50. inc/Requests/library/Requests/Exception/HTTP/418.php +0 -29
  51. inc/Requests/library/Requests/Exception/HTTP/428.php +0 -29
  52. inc/Requests/library/Requests/Exception/HTTP/429.php +0 -29
  53. inc/Requests/library/Requests/Exception/HTTP/431.php +0 -29
  54. inc/Requests/library/Requests/Exception/HTTP/500.php +0 -27
  55. inc/Requests/library/Requests/Exception/HTTP/501.php +0 -27
  56. inc/Requests/library/Requests/Exception/HTTP/502.php +0 -27
  57. inc/Requests/library/Requests/Exception/HTTP/503.php +0 -27
  58. inc/Requests/library/Requests/Exception/HTTP/504.php +0 -27
  59. inc/Requests/library/Requests/Exception/HTTP/505.php +0 -27
  60. inc/Requests/library/Requests/Exception/HTTP/511.php +0 -29
  61. inc/Requests/library/Requests/Exception/HTTP/Unknown.php +0 -44
  62. inc/Requests/library/Requests/Hooker.php +0 -33
  63. inc/Requests/library/Requests/Hooks.php +0 -61
  64. inc/Requests/library/Requests/IDNAEncoder.php +0 -390
  65. inc/Requests/library/Requests/IPv6.php +0 -221
  66. inc/Requests/library/Requests/IRI.php +0 -1220
  67. inc/Requests/library/Requests/Proxy.php +0 -35
  68. inc/Requests/library/Requests/Proxy/HTTP.php +0 -150
  69. inc/Requests/library/Requests/Response.php +0 -95
  70. inc/Requests/library/Requests/Response/Headers.php +0 -95
  71. inc/Requests/library/Requests/SSL.php +0 -151
  72. inc/Requests/library/Requests/Session.php +0 -258
  73. inc/Requests/library/Requests/Transport.php +0 -41
  74. inc/Requests/library/Requests/Transport/cURL.php +0 -372
  75. inc/Requests/library/Requests/Transport/cacert.pem +0 -3554
  76. inc/Requests/library/Requests/Transport/fsockopen.php +0 -404
  77. inc/Requests/library/Requests/Utility/CaseInsensitiveDictionary.php +0 -91
  78. inc/Requests/library/Requests/Utility/FilteredIterator.php +0 -38
  79. inc/Requests/package.xml.tpl +0 -60
  80. inc/Requests/tests/Auth/Basic.php +0 -87
  81. inc/Requests/tests/ChunkedEncoding.php +0 -68
  82. inc/Requests/tests/Cookies.php +0 -346
  83. inc/Requests/tests/Encoding.php +0 -94
  84. inc/Requests/tests/IDNAEncoder.php +0 -102
  85. inc/Requests/tests/IRI.php +0 -418
  86. inc/Requests/tests/Requests.php +0 -148
  87. inc/Requests/tests/Response/Headers.php +0 -55
  88. inc/Requests/tests/SSL.php +0 -108
  89. inc/Requests/tests/Session.php +0 -86
  90. inc/Requests/tests/Transport/Base.php +0 -683
  91. inc/Requests/tests/Transport/cURL.php +0 -5
  92. inc/Requests/tests/Transport/fsockopen.php +0 -5
  93. inc/Requests/tests/bootstrap.php +0 -139
  94. inc/Requests/tests/phpunit.xml.dist +0 -35
  95. inc/common.php +56 -34
  96. inc/mailmunchapi.php +89 -20
  97. inc/sidebar_widget.php +131 -0
  98. js/admin.js +11 -0
  99. mailmunch.php +209 -141
  100. readme.txt +8 -2
  101. uninstall.php +9 -0
css/admin.css CHANGED
@@ -11,6 +11,23 @@
11
  text-decoration: underline;
12
  }
13
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  #mailmunch_frame {
15
  width: 720px;
16
  height: 650px;
@@ -82,7 +99,7 @@
82
  border: 1px solid transparent;
83
  border-radius: 4px;
84
  }
85
- .alert h4 {
86
  margin-top: 0;
87
  color: inherit;
88
  }
11
  text-decoration: underline;
12
  }
13
 
14
+ #why-account-btn {
15
+ cursor: pointer;
16
+ }
17
+
18
+ #why-account h4 {
19
+ margin-top: 0px;
20
+ margin-bottom: 0px;
21
+ }
22
+
23
+ #why-account p {
24
+ margin-top: 0px;
25
+ }
26
+
27
+ .create-account-btn {
28
+ cursor: pointer;
29
+ }
30
+
31
  #mailmunch_frame {
32
  width: 720px;
33
  height: 650px;
99
  border: 1px solid transparent;
100
  border-radius: 4px;
101
  }
102
+ .alert h4, .alert h3 {
103
  margin-top: 0;
104
  color: inherit;
105
  }
inc/Requests/.coveralls.yml DELETED
@@ -1,4 +0,0 @@
1
- src_dir: library
2
- coverage_clover: tests/clover.xml
3
- json_path: tests/coveralls.json
4
- service_name: travis-ci
 
 
 
 
inc/Requests/.travis.yml DELETED
@@ -1,27 +0,0 @@
1
- language: php
2
- before_script:
3
- # Setup Coveralls and httpbin-php
4
- - phpenv local 5.5
5
- - composer install --dev --no-interaction
6
-
7
- - TESTPHPBIN=$(phpenv which php)
8
- - sudo PHPBIN=$TESTPHPBIN vendor/bin/start.sh
9
- - export REQUESTS_TEST_HOST_HTTP=localhost
10
- - phpenv local --unset
11
-
12
- # Work out of the tests directory
13
- - cd tests
14
- script:
15
- - phpunit --coverage-clover clover.xml
16
- after_script:
17
- - cd ..
18
- - phpenv local 5.5
19
- - sudo PATH=$PATH vendor/bin/stop.sh
20
- - php vendor/bin/coveralls -v
21
- - phpenv local --unset
22
- php:
23
- - 5.2
24
- - 5.3
25
- - 5.4
26
- - 5.5
27
- - hhvm
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/CHANGELOG.md DELETED
@@ -1,48 +0,0 @@
1
- Changelog
2
- =========
3
-
4
- 1.6.0
5
- -----
6
- - [Add multiple request support][#23] - Send multiple HTTP requests with both
7
- fsockopen and cURL, transparently falling back to synchronous when
8
- not supported.
9
-
10
- - [Add proxy support][#70] - HTTP proxies are now natively supported via a
11
- [high-level API][docs/proxy]. Major props to Ozh for his fantastic work
12
- on this.
13
-
14
- - [Verify host name for SSL requests][#63] - Requests is now the first and only
15
- standalone HTTP library to fully verify SSL hostnames even with socket
16
- connections. Thanks to Michael Adams, Dion Hulse, Jon Cave, and Pádraic Brady
17
- for reviewing the crucial code behind this.
18
-
19
- - [Add cookie support][#64] - Adds built-in support for cookies (built entirely
20
- as a high-level API)
21
-
22
- - [Add sessions][#62] - To compliment cookies, [sessions][docs/usage-advanced]
23
- can be created with a base URL and default options, plus a shared cookie jar.
24
-
25
- - Add [PUT][#1], [DELETE][#3], and [PATCH][#2] request support
26
-
27
- - [Add Composer support][#6] - You can now install Requests via the
28
- `rmccue/requests` package on Composer
29
-
30
- [docs/proxy]: http://requests.ryanmccue.info/docs/proxy.html
31
- [docs/usage-advanced]: http://requests.ryanmccue.info/docs/usage-advanced.html
32
-
33
- [#1]: https://github.com/rmccue/Requests/issues/1
34
- [#2]: https://github.com/rmccue/Requests/issues/2
35
- [#3]: https://github.com/rmccue/Requests/issues/3
36
- [#6]: https://github.com/rmccue/Requests/issues/6
37
- [#9]: https://github.com/rmccue/Requests/issues/9
38
- [#23]: https://github.com/rmccue/Requests/issues/23
39
- [#62]: https://github.com/rmccue/Requests/issues/62
40
- [#63]: https://github.com/rmccue/Requests/issues/63
41
- [#64]: https://github.com/rmccue/Requests/issues/64
42
- [#70]: https://github.com/rmccue/Requests/issues/70
43
-
44
- [View all changes][https://github.com/rmccue/Requests/compare/v1.5.0...v1.6.0]
45
-
46
- 1.5.0
47
- -----
48
- Initial release!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/LICENSE DELETED
@@ -1,49 +0,0 @@
1
- Requests
2
- ========
3
-
4
- Copyright (c) 2010-2012 Ryan McCue and contributors
5
-
6
- Permission to use, copy, modify, and/or distribute this software for any
7
- purpose with or without fee is hereby granted, provided that the above
8
- copyright notice and this permission notice appear in all copies.
9
-
10
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11
- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12
- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13
- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14
- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15
- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16
- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17
-
18
-
19
- ComplexPie IRI Parser
20
- =====================
21
-
22
- Copyright (c) 2007-2010, Geoffrey Sneddon and Steve Minutillo.
23
- All rights reserved.
24
-
25
- Redistribution and use in source and binary forms, with or without
26
- modification, are permitted provided that the following conditions are met:
27
-
28
- * Redistributions of source code must retain the above copyright notice,
29
- this list of conditions and the following disclaimer.
30
-
31
- * Redistributions in binary form must reproduce the above copyright notice,
32
- this list of conditions and the following disclaimer in the documentation
33
- and/or other materials provided with the distribution.
34
-
35
- * Neither the name of the SimplePie Team nor the names of its contributors
36
- may be used to endorse or promote products derived from this software
37
- without specific prior written permission.
38
-
39
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
40
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
42
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
43
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
44
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
45
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
46
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
47
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
48
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
49
- POSSIBILITY OF SUCH DAMAGE.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/README.md DELETED
@@ -1,143 +0,0 @@
1
- Requests for PHP
2
- ================
3
-
4
- Requests is a HTTP library written in PHP, for human beings. It is roughly
5
- based on the API from the excellent [Requests Python
6
- library](http://python-requests.org/). Requests is [ISC
7
- Licensed](https://github.com/rmccue/Requests/blob/master/LICENSE) (similar to
8
- the new BSD license) and has no dependencies, except for PHP 5.2+.
9
-
10
- Despite PHP's use as a language for the web, its tools for sending HTTP requests
11
- are severely lacking. cURL has an
12
- [interesting API](http://php.net/manual/en/function.curl-setopt.php), to say the
13
- least, and you can't always rely on it being available. Sockets provide only low
14
- level access, and require you to build most of the HTTP response parsing
15
- yourself.
16
-
17
- We all have better things to do. That's why Requests was born.
18
-
19
- ```php
20
- $headers = array('Accept' => 'application/json');
21
- $options = array('auth' => array('user', 'pass'));
22
- $request = Requests::get('https://api.github.com/gists', $headers, $options);
23
-
24
- var_dump($request->status_code);
25
- // int(200)
26
-
27
- var_dump($request->headers['content-type']);
28
- // string(31) "application/json; charset=utf-8"
29
-
30
- var_dump($request->body);
31
- // string(26891) "[...]"
32
- ```
33
-
34
- Requests allows you to send **HEAD**, **GET**, **POST**, **PUT**, **DELETE**,
35
- and **PATCH** HTTP requests. You can add headers, form data, multipart files,
36
- and parameters with simple arrays, and access the response data in the same way.
37
- Requests uses cURL and fsockopen, depending on what your system has available,
38
- but abstracts all the nasty stuff out of your way, providing a consistent API.
39
-
40
-
41
- Features
42
- --------
43
-
44
- - International Domains and URLs
45
- - Browser-style SSL Verification
46
- - Basic/Digest Authentication
47
- - Automatic Decompression
48
- - Connection Timeouts
49
-
50
-
51
- Installation
52
- ------------
53
-
54
- ### Install with Composer
55
- If you're using [Composer](https://github.com/composer/composer) to manage
56
- dependencies, you can add Requests with it.
57
-
58
- {
59
- "require": {
60
- "rmccue/requests": ">=1.0"
61
- }
62
- }
63
-
64
- ### Install source from GitHub
65
- To install the source code:
66
-
67
- $ git clone git://github.com/rmccue/Requests.git
68
-
69
- And include it in your scripts:
70
-
71
- require_once '/path/to/Requests/library/Requests.php';
72
-
73
- You'll probably also want to register an autoloader:
74
-
75
- Requests::register_autoloader();
76
-
77
-
78
- ### Install source from zip/tarball
79
- Alternatively, you can fetch a [tarball][] or [zipball][]:
80
-
81
- $ curl -L https://github.com/rmccue/Requests/tarball/master | tar xzv
82
- (or)
83
- $ wget https://github.com/rmccue/Requests/tarball/master -O - | tar xzv
84
-
85
- [tarball]: https://github.com/rmccue/Requests/tarball/master
86
- [zipball]: https://github.com/rmccue/Requests/zipball/master
87
-
88
-
89
- ### Using a Class Loader
90
- If you're using a class loader (e.g., [Symfony Class Loader][]) for
91
- [PSR-0][]-style class loading:
92
-
93
- $loader->registerPrefix('Requests', 'path/to/vendor/Requests/library');
94
-
95
- [Symfony Class Loader]: https://github.com/symfony/ClassLoader
96
- [PSR-0]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
97
-
98
-
99
- Documentation
100
- -------------
101
- The best place to start is our [prose-based documentation][], which will guide
102
- you through using Requests.
103
-
104
- After that, take a look at [the documentation for
105
- `Requests::request()`][request_method], where all the parameters are fully
106
- documented.
107
-
108
- Requests is [100% documented with PHPDoc](http://requests.ryanmccue.info/api/).
109
- If you find any problems with it, [create a new
110
- issue](https://github.com/rmccue/Requests/issues/new)!
111
-
112
- [prose-based documentation]: https://github.com/rmccue/Requests/blob/master/docs/README.md
113
- [request_method]: http://requests.ryanmccue.info/api/class-Requests.html#_request
114
-
115
- Testing
116
- -------
117
- [![Build Status](https://secure.travis-ci.org/rmccue/Requests.png?branch=master)](http://travis-ci.org/rmccue/Requests)
118
- [![Coverage Status](https://coveralls.io/repos/rmccue/Requests/badge.png?branch=master)][coveralls]
119
-
120
- Requests strives to have 100% code-coverage of the library with an extensive
121
- set of tests. We're not quite there yet, but [we're getting close][coveralls].
122
-
123
- [coveralls]: https://coveralls.io/r/rmccue/Requests?branch=master
124
-
125
- To run the test suite, simply:
126
-
127
- $ cd tests
128
- $ phpunit
129
-
130
- If you'd like to run a single set of tests, specify just the name:
131
-
132
- $ phpunit Transport/cURL
133
-
134
- Contribute
135
- ----------
136
-
137
- 1. Check for open issues or open a new issue for a feature request or a bug
138
- 2. Fork [the repository][] on Github to start making your changes to the
139
- `master` branch (or branch off of it)
140
- 3. Write a test which shows that the bug was fixed or that the feature works as expected
141
- 4. Send a pull request and bug me until I merge it
142
-
143
- [the repository]: https://github.com/rmccue/Requests
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/bin/create_pear_package.php DELETED
@@ -1,55 +0,0 @@
1
- <?php
2
- /**
3
- * PEAR package builder
4
- *
5
- * Inspired by Twig's create_pear_package.php.
6
- * @link https://raw.github.com/fabpot/Twig/master/bin/create_pear_package.php
7
- * @author Twig Team
8
- * @license BSD license
9
- */
10
-
11
- if (!isset($argv[1]) || $argv[1] === '-h' || $argv[1] === '--help') {
12
- echo 'usage: php ' . $argv[0] . ' <version> <stability>' . PHP_EOL;
13
- echo PHP_EOL;
14
- echo ' version:' . PHP_EOL;
15
- echo ' Version of the package, in the form of major.minor.bug' . PHP_EOL;
16
- echo PHP_EOL;
17
- echo ' stability:' . PHP_EOL;
18
- echo ' One of alpha, beta, stable' . PHP_EOL;
19
- die();
20
- }
21
-
22
- if (!isset($argv[2])) {
23
- die('You must provide the stability (alpha, beta, or stable)');
24
- }
25
-
26
- $context = array(
27
- 'date' => gmdate('Y-m-d'),
28
- 'time' => gmdate('H:m:00'),
29
- 'version' => $argv[1],
30
- 'api_version' => $argv[1],
31
- 'stability' => $argv[2],
32
- 'api_stability' => $argv[2],
33
- );
34
-
35
- $context['files'] = '';
36
- $path = realpath(dirname(__FILE__).'/../library/Requests');
37
- foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::LEAVES_ONLY) as $file) {
38
- if (preg_match('/\.php$/', $file)) {
39
- $name = str_replace($path . DIRECTORY_SEPARATOR, '', $file);
40
- $name = str_replace(DIRECTORY_SEPARATOR, '/', $name);
41
- $context['files'][] = "\t\t\t\t\t" . '<file install-as="Requests/' . $name . '" name="' . $name . '" role="php" />';
42
- }
43
- }
44
-
45
- $context['files'] = implode("\n", $context['files']);
46
-
47
- $template = file_get_contents(dirname(__FILE__).'/../package.xml.tpl');
48
- $content = preg_replace_callback('/\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/', 'replace_parameters', $template);
49
- file_put_contents(dirname(__FILE__).'/../package.xml', $content);
50
-
51
- function replace_parameters($matches) {
52
- global $context;
53
-
54
- return isset($context[$matches[1]]) ? $context[$matches[1]] : null;
55
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/composer.json DELETED
@@ -1,24 +0,0 @@
1
- {
2
- "name": "rmccue/requests",
3
- "description": "A HTTP library written in PHP, for human beings.",
4
- "homepage": "http://github.com/rmccue/Requests",
5
- "license": "ISC",
6
- "keywords": ["http", "idna", "iri", "ipv6", "curl", "sockets", "fsockopen"],
7
- "authors": [
8
- {
9
- "name": "Ryan McCue",
10
- "homepage": "http://ryanmccue.info"
11
- }
12
- ],
13
- "require": {
14
- "php": ">=5.2"
15
- },
16
- "require-dev": {
17
- "satooshi/php-coveralls": "dev-master",
18
- "requests/test-server": "dev-master"
19
- },
20
- "type": "library",
21
- "autoload": {
22
- "psr-0": {"Requests": "library/"}
23
- }
24
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/docs/README.md DELETED
@@ -1,28 +0,0 @@
1
- Documentation
2
- =============
3
-
4
- If you're here, you're looking for documentation for Requests! The documents
5
- here are prose; you might also want to check out the [API documentation][].
6
-
7
- [API documentation]: http://requests.ryanmccue.info/api/
8
-
9
- * Introduction
10
- * [Goals][goals]
11
- * [Why should I use Requests instead of X?][why-requests]
12
- * Usage
13
- * [Making a request][usage]
14
- * [Advanced usage][usage-advanced]
15
- * [Authenticating your request][authentication]
16
- * Advanced Usage
17
- * [Custom authentication][authentication-custom]
18
- * [Requests through proxy][proxy]
19
- * [Hooking system][hooks]
20
-
21
- [goals]: goals.md
22
- [why-requests]: why-requests.md
23
- [usage]: usage.md
24
- [usage-advanced]: usage-advanced.md
25
- [authentication]: authentication.md
26
- [authentication-custom]: authentication-custom.md
27
- [hooks]: hooks.md
28
- [proxy]: proxy.md
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/docs/authentication-custom.md DELETED
@@ -1,44 +0,0 @@
1
- Custom Authentication
2
- =====================
3
- Custom authentication handlers are designed to be extremely simple to write.
4
- In order to write a handler, you'll need to implement the `Requests_Auth`
5
- interface.
6
-
7
- An instance of this handler is then passed in by the user via the `auth`
8
- option, just like for normal authentication.
9
-
10
- Let's say we have a HTTP endpoint that checks for the `Hotdog` header and
11
- authenticates you if said header is set to `Yummy`. (I don't know of any
12
- services that do this; perhaps this is a market waiting to be tapped?)
13
-
14
- ```php
15
- class MySoftware_Auth_Hotdog implements Requests_Auth {
16
- protected $password;
17
-
18
- public function __construct($password) {
19
- $this->password = $password;
20
- }
21
-
22
- public function register(Requests_Hooks &$hooks) {
23
- $hooks->register('requests.before_request', array(&$this, 'before_request'));
24
- }
25
-
26
- public function before_request(&$url, &$headers, &$data, &$type, &$options) {
27
- $headers['Hotdog'] = $this->password;
28
- }
29
- }
30
- ```
31
-
32
- We then use this in our request calls:
33
-
34
- ```
35
- $options = array(
36
- 'auth' => new MySoftware_Auth_Hotdog('yummy')
37
- );
38
- $response = Requests::get('http://hotdogbin.org/admin', array(), $options);
39
- ```
40
-
41
- (For more information on how to register and use hooks, see the [hooking
42
- system documentation][hooks])
43
-
44
- [hooks]: hooks.md
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/docs/authentication.md DELETED
@@ -1,31 +0,0 @@
1
- Authentication
2
- ==============
3
- Many requests that you make will require authentication of some type. Requests
4
- includes support out of the box for HTTP Basic authentication, with more
5
- built-ins coming soon.
6
-
7
- Making a Basic authenticated call is ridiculously easy:
8
-
9
- ```php
10
- $options = array(
11
- 'auth' => new Requests_Auth_Basic(array('user', 'password'))
12
- );
13
- Requests::get('http://httpbin.org/basic-auth/user/password', array(), $options);
14
- ```
15
-
16
- As Basic authentication is usually what you want when you specify a username
17
- and password, you can also just pass in an array as a shorthand:
18
-
19
- ```php
20
- $options = array(
21
- 'auth' => array('user', 'password')
22
- );
23
- Requests::get('http://httpbin.org/basic-auth/user/password', array(), $options);
24
- ```
25
-
26
- Note that POST/PUT can also take a data parameter, so you also need that
27
- before `$options`:
28
-
29
- ```php
30
- Requests::post('http://httpbin.org/basic-auth/user/password', array(), null, $options);
31
- ```
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/docs/goals.md DELETED
@@ -1,29 +0,0 @@
1
- Goals
2
- =====
3
-
4
- 1. **Simple interface**
5
-
6
- Requests is designed to provide a simple, unified interface to making
7
- requests, regardless of what is available on the system. This means not worrying.
8
-
9
- 2. **Fully tested code**
10
-
11
- Requests strives to have 90%+ code coverage from the unit tests, aiming for
12
- the ideal 100%. Introducing new features always means introducing new tests
13
-
14
- (Note: some parts of the code are not covered by design. These sections are
15
- marked with `@codeCoverageIgnore` tags)
16
-
17
- 3. **Maximum compatibility**
18
-
19
- No matter what you have installed on your system, you should be able to run
20
- Requests. We use cURL if it's available, and fallback to sockets otherwise.
21
- We require only a baseline of PHP 5.2, leaving the choice of PHP minimum
22
- requirement fully in your hands, and giving you the ability to support many
23
- more hosts.
24
-
25
- 4. **No dependencies**
26
-
27
- Requests is designed to be entirely self-contained and doesn't require
28
- anything else at all. You can run Requests on an entirely stock PHP build
29
- without any additional extensions outside the standard library.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/docs/hooks.md DELETED
@@ -1,92 +0,0 @@
1
- Hooks
2
- =====
3
- Requests has a hook system that you can use to manipulate parts of the request
4
- process along with internal transport hooks.
5
-
6
- Check out the [API documentation for `Requests_Hooks`][requests_hooks] for more
7
- information on how to use the hook system.
8
-
9
- Available Hooks
10
- ---------------
11
-
12
- * `requests.before_request`
13
-
14
- Alter the request before it's sent to the transport.
15
-
16
- Parameters: `string &$url`, `array &$headers`, `array|string &$data`,
17
- `string &$type`, `array &$options`
18
-
19
- * `requests.before_parse`
20
-
21
- Alter the raw HTTP response before parsing
22
-
23
- Parameters: `string &$response`
24
-
25
- * `requests.after_request`
26
-
27
- Alter the response object before it's returned to the user
28
-
29
- Parameters: `Requests_Response &$return`
30
-
31
- * `curl.before_request`
32
-
33
- Set cURL options before the transport sets any (note that Requests may
34
- override these)
35
-
36
- Parameters: `cURL resource &$fp`
37
-
38
- * `curl.before_send`
39
-
40
- Set cURL options just before the request is actually sent via `curl_exec`
41
-
42
- Parameters: `cURL resource &$fp`
43
-
44
- * `curl.after_request`
45
-
46
- Alter the raw HTTP response before returning for parsing
47
-
48
- Parameters: `string &$response`
49
-
50
- * `fsockopen.before_request`
51
-
52
- Run events before the transport does anything
53
-
54
- * `fsockopen.after_headers`
55
-
56
- Add extra headers before the body begins (i.e. before `\r\n\r\n`)
57
-
58
- Parameters: `string &$out`
59
-
60
- * `fsockopen.before_send`
61
-
62
- Add body data before sending the request
63
-
64
- Parameters: `string &$out`
65
-
66
- * `fsockopen.after_send`
67
-
68
- Run events after writing the data to the socket
69
-
70
- * `fsockopen.after_request`
71
-
72
- Alter the raw HTTP response before returning for parsing
73
-
74
- Parameters: `string &$response`
75
-
76
-
77
- Registering Hooks
78
- -----------------
79
- Note: if you're doing this in an authentication handler, see the [Custom
80
- Authentication guide][authentication-custom] instead.
81
-
82
- [authentication-custom]: authentication-custom.md
83
-
84
- In order to register your own hooks, you need to instantiate `Requests_hooks`
85
- and pass this in via the 'hooks' option.
86
-
87
- ```php
88
- $hooks = new Requests_Hooks();
89
- $hooks->register('requests.after_request', 'mycallback');
90
-
91
- $request = Requests::get('http://httpbin.org/get', array(), array('hooks' => $hooks));
92
- ```
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/docs/proxy.md DELETED
@@ -1,23 +0,0 @@
1
- Proxy Support
2
- =============
3
-
4
- You can easily make requests through HTTP proxies.
5
-
6
- To make requests through an open proxy, specify the following options:
7
-
8
- ```php
9
- $options = array(
10
- 'proxy' => '127.0.0.1:3128'
11
- );
12
- Requests::get('http://httpbin.org/ip', array(), $options);
13
- ```
14
-
15
- If your proxy needs you to authenticate, the option will become an array like
16
- the following:
17
-
18
- ```php
19
- $options = array(
20
- 'proxy' => array( '127.0.0.1:3128', 'my_username', 'my_password' )
21
- );
22
- Requests::get('http://httpbin.org/ip', array(), $options);
23
- ```
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/docs/usage-advanced.md DELETED
@@ -1,74 +0,0 @@
1
- Advanced Usage
2
- ==============
3
-
4
- Session Handling
5
- ----------------
6
- Making multiple requests to the same site with similar options can be a pain,
7
- since you end up repeating yourself. The Session object can be used to set
8
- default parameters for these.
9
-
10
- Let's simulate communicating with GitHub.
11
-
12
- ```php
13
- $session = new Requests_Session('https://api.github.com/');
14
- $session->headers['X-ContactAuthor'] = 'rmccue';
15
- $session->useragent = 'My-Awesome-App';
16
-
17
- $response = $session->get('/zen');
18
- ```
19
-
20
- You can use the `url`, `headers`, `data` and `options` properties of the Session
21
- object to set the defaults for this session, and the constructor also takes
22
- parameters in the same order as `Requests::request()`. Accessing any other
23
- properties will set the corresponding key in the options array; that is:
24
-
25
- ```php
26
- // Setting the property...
27
- $session->useragent = 'My-Awesome-App';
28
-
29
- // ...is the same as setting the option
30
- $session->options['useragent'] = 'My-Awesome-App';
31
- ```
32
-
33
-
34
- Secure Requests with SSL
35
- ------------------------
36
- By default, HTTPS requests will use the most secure options available:
37
-
38
- ```php
39
- $response = Requests::get('https://httpbin.org/');
40
- ```
41
-
42
- Requests bundles certificates from the [Mozilla certificate authority list][],
43
- which is the same list of root certificates used in most browsers. If you're
44
- accessing sites with certificates from other CAs, or self-signed certificates,
45
- you can point Requests to a custom CA list in PEM form (the same format
46
- accepted by cURL and OpenSSL):
47
-
48
- ```php
49
- $options = array(
50
- 'verify' => '/path/to/cacert.pem'
51
- );
52
- $response = Requests::get('https://httpbin.org/', array(), $options);
53
- ```
54
-
55
- Alternatively, if you want to disable verification completely, this is possible
56
- with `'verify' => false`, but note that this is extremely insecure and should be
57
- avoided.
58
-
59
- ### Security Note
60
- Requests supports SSL across both cURL and fsockopen in a transparent manner.
61
- Unlike other PHP HTTP libraries, support for verifying the certificate name is
62
- built-in; that is, a request for `https://github.com/` will actually verify the
63
- certificate's name even with the fsockopen transport. This makes Requests the
64
- first and currently only PHP HTTP library that supports full SSL verification.
65
-
66
- (Note that WordPress now also supports this verification, thanks to efforts by
67
- the Requests development team.)
68
-
69
- (See also the [related PHP][php-bug-47030] and [OpenSSL-related][php-bug-55820]
70
- bugs in PHP for more information on Subject Alternate Name field.)
71
-
72
- [Mozilla certificate authority list]: http://www.mozilla.org/projects/security/certs/
73
- [php-bug-47030]: https://bugs.php.net/bug.php?id=47030
74
- [php-bug-55820]:https://bugs.php.net/bug.php?id=55820
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/docs/usage.md DELETED
@@ -1,154 +0,0 @@
1
- Usage
2
- =====
3
-
4
- Ready to go? Make sure you have Requests installed before attempting any of the
5
- steps in this guide.
6
-
7
-
8
- Loading Requests
9
- ----------------
10
- Before we can load Requests up, we'll need to make sure it's loaded. This is a
11
- simple two-step:
12
-
13
- ```php
14
- // First, include Requests
15
- include('/path/to/library/Requests.php');
16
-
17
- // Next, make sure Requests can load internal classes
18
- Requests::register_autoloader();
19
- ```
20
-
21
- If you'd like to bring along your own autoloader, you can forget about this
22
- completely.
23
-
24
-
25
- Make a GET Request
26
- ------------------
27
- One of the most basic things you can do with HTTP is make a GET request.
28
-
29
- Let's grab GitHub's public timeline:
30
-
31
- ```php
32
- $response = Requests::get('https://github.com/timeline.json');
33
- ```
34
-
35
- `$response` is now a **Requests_Response** object. Response objects are what
36
- you'll be working with whenever you want to get data back from your request.
37
-
38
-
39
- Using the Response Object
40
- -------------------------
41
- Now that we have the response from GitHub, let's get the body of the response.
42
-
43
- ```php
44
- var_dump($response->body);
45
- // string(42865) "[{"repository":{"url":"...
46
- ```
47
-
48
-
49
- Custom Headers
50
- --------------
51
- If you want to add custom headers to the request, simply pass them in as an
52
- associative array as the second parameter:
53
-
54
- ```php
55
- $response = Requests::get('https://github.com/timeline.json', array('X-Requests' => 'Is Awesome!'));
56
- ```
57
-
58
-
59
- Make a POST Request
60
- -------------------
61
- Making a POST request is very similar to making a GET:
62
-
63
- ```php
64
- $response = Requests::post('http://httpbin.org/post');
65
- ```
66
-
67
- You'll probably also want to pass in some data. You can pass in either a
68
- string, an array or an object (Requests uses [`http_build_query`][build_query]
69
- internally) as the third parameter (after the URL and headers):
70
-
71
- [build_query]: http://php.net/http_build_query
72
-
73
- ```php
74
- $data = array('key1' => 'value1', 'key2' => 'value2');
75
- $response = Requests::post('http://httpbin.org/post', array(), $data);
76
- var_dump($response->body);
77
- ```
78
-
79
- This gives the output:
80
-
81
- string(503) "{
82
- "origin": "124.191.162.147",
83
- "files": {},
84
- "form": {
85
- "key2": "value2",
86
- "key1": "value1"
87
- },
88
- "headers": {
89
- "Content-Length": "23",
90
- "Accept-Encoding": "deflate;q=1.0, compress;q=0.5, gzip;q=0.5",
91
- "X-Forwarded-Port": "80",
92
- "Connection": "keep-alive",
93
- "User-Agent": "php-requests/1.6-dev",
94
- "Host": "httpbin.org",
95
- "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
96
- },
97
- "url": "http://httpbin.org/post",
98
- "args": {},
99
- "data": ""
100
- }"
101
-
102
- To send raw data, simply pass in a string instead. You'll probably also want to
103
- set the Content-Type header to ensure the remote server knows what you're
104
- sending it:
105
-
106
- ```php
107
- $url = 'https://api.github.com/some/endpoint';
108
- $headers = array('Content-Type' => 'application/json');
109
- $data = array('some' => 'data');
110
- $response = Requests::post($url, $headers, json_encode($data));
111
- ```
112
-
113
- Note that if you don't manually specify a Content-Type header, Requests has
114
- undefined behaviour for the header. It may be set to various values depending
115
- on the internal execution path, so it's recommended to set this explicitly if
116
- you need to.
117
-
118
-
119
- Status Codes
120
- ------------
121
- The Response object also gives you access to the status code:
122
-
123
- ```php
124
- var_dump($response->status_code);
125
- // int(200)
126
- ```
127
-
128
- You can also easily check if this status code is a success code, or if it's an
129
- error:
130
-
131
- ```php
132
- var_dump($response->success);
133
- // bool(true)
134
- ```
135
-
136
-
137
- Response Headers
138
- ----------------
139
- We can also grab headers pretty easily:
140
-
141
- ```php
142
- var_dump($response->headers['Date']);
143
- // string(29) "Thu, 09 Feb 2012 15:22:06 GMT"
144
- ```
145
-
146
- Note that this is case-insensitive, so the following are all equivalent:
147
-
148
- * `$response->headers['Date']`
149
- * `$response->headers['date']`
150
- * `$response->headers['DATE']`
151
- * `$response->headers['dAtE']`
152
-
153
- If a header isn't set, this will give `null`. You can also check with
154
- `isset($response->headers['date'])`
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/docs/why-requests.md DELETED
@@ -1,192 +0,0 @@
1
- Why Requests Instead of X?
2
- ==========================
3
- This is a quick look at why you should use Requests instead of another
4
- solution. Keep in mind though that these are my point of view, and they may not
5
- be issues for you.
6
-
7
- As always with software, you should choose what you think is best.
8
-
9
-
10
- Why should I use Requests?
11
- --------------------------
12
- 1. **Designed for maximum compatibility**
13
-
14
- The realities of working with widely deployable software mean that awesome
15
- PHP features aren't always available. PHP 5.3, cURL, OpenSSL and more are not
16
- necessarily going to be available on every system. While you're welcome to
17
- require PHP 5.3, 5.4 or even 5.5, it's not our job to force you to use those.
18
-
19
- (The WordPress project estimates [about 60%][wpstats] of hosts are running
20
- PHP 5.2, so this is a serious issue for developers working on large
21
- deployable projects.)
22
-
23
- Don't worry though, Requests will automatically use better features where
24
- possible, giving you an extra speed boost with cURL.
25
-
26
- 2. **Simple API**
27
-
28
- Requests' API is designed to be able to be learnt in 10 minutes. Everything
29
- from basic requests all the way up to advanced usage involving custom SSL
30
- certificates and stored cookies is handled by a simple API.
31
-
32
- Other HTTP libraries optimize for the library developer's time; **Requests
33
- optimizes for your time**.
34
-
35
- 3. **Thoroughly tested**
36
-
37
- Requests is [continuously integrated with Travis][travis] and test coverage
38
- is [constantly monitored with Coveralls][coveralls] to give you confidence in
39
- the library. We aim for test coverage **over 90%** at all times, and new
40
- features require new tests to go along with them. This ensures that you can
41
- be confident in the quality of the code, as well as being able to update to
42
- the latest version of Requests without worrying about compatibility.
43
-
44
- 4. **Secure by default**
45
-
46
- Unlike other HTTP libraries, Requests is secure by default. Requests is the
47
- **first and currently only** standalone HTTP library to
48
- **[fully verify][requests_ssl] all HTTPS requests** even without cURL. We
49
- also bundle the latest root certificate authorities to ensure that your
50
- secure requests are actually secure.
51
-
52
- (Of note is that WordPress as of version 3.7 also supports full checking of
53
- the certificates, thanks to [evangelism efforts on our behalf][wpssl].
54
- Together, we are the only HTTP libraries in PHP to fully verify certificates
55
- to the same level as browsers.)
56
-
57
- 5. **Extensible from the core**
58
-
59
- If you need low-level access to Requests' internals, simply plug your
60
- callbacks in via the built-in [hooking system][] and mess around as much as
61
- you want. Requests' simple hooking system is so powerful that both
62
- authentication handlers and cookie support is actually handled internally
63
- with hooks.
64
-
65
- [coveralls]: https://coveralls.io/r/rmccue/Requests
66
- [hooking system]: hooks.md
67
- [requests_ssl]: https://github.com/rmccue/Requests/blob/master/library/Requests/SSL.php
68
- [travis]: https://travis-ci.org/rmccue/Requests
69
- [wpssl]: http://core.trac.wordpress.org/ticket/25007
70
-
71
-
72
- Why shouldn't I use...
73
- ----------------------
74
- Requests isn't the first or only HTTP library in PHP and it's important to
75
- acknowledge the other solutions out there. Here's why you should use Requests
76
- instead of something else, in our opinion.
77
-
78
-
79
- ### cURL
80
-
81
- 1. **Not every host has cURL installed**
82
-
83
- cURL is far from being ubiquitous, so you can't rely on it always being
84
- available when distributing software. Anecdotal data collected from various
85
- projects indicates that cURL is available on roughly 90% of hosts, but that
86
- leaves 10% of hosts without it.
87
-
88
- 2. **cURL's interface sucks**
89
-
90
- cURL's interface was designed for PHP 4, and hence uses resources with
91
- horrible functions such as `curl_setopt()`. Combined with that, it uses 229
92
- global constants, polluting the global namespace horribly.
93
-
94
- Requests, on the other hand, exposes only a handful of classes to the
95
- global namespace, most of which are for internal use. You can learn to use
96
- the `Requests::request()` method and the `Requests_Response` object in the
97
- space of 10 minutes and you already know how to use Requests.
98
-
99
-
100
- ### Guzzle
101
-
102
- 1. **Requires cURL and PHP 5.3+**
103
-
104
- Guzzle is designed to be a client to fit a large number of installations, but
105
- as a result of optimizing for Guzzle developer time, it uses cURL as an
106
- underlying transport. As noted above, this is a majority of systems, but
107
- far from all.
108
-
109
- The same is true for PHP 5.3+. While we'd all love to rely on PHP's newer
110
- features, the fact is that a huge percentage of hosts are still running on
111
- PHP 5.2. (The WordPress project estimates [about 60%][wpstats] of hosts are
112
- running PHP 5.2.)
113
-
114
- 2. **Not just a HTTP client**
115
-
116
- Guzzle is not intended to just be a HTTP client, but rather to be a
117
- full-featured REST client. Requests is just a HTTP client, intentionally. Our
118
- development strategy is to act as a low-level library that REST clients can
119
- easily be built on, not to provide the whole kitchen sink for you.
120
-
121
- If you want to rapidly develop a web service client using a framework, Guzzle
122
- will suit you perfectly. On the other hand, if you want a HTTP client without
123
- all the rest, Requests is the way to go.
124
-
125
- [wpstats]: http://wordpress.org/about/stats/
126
-
127
-
128
- ### Buzz
129
-
130
- 1. **Requires PHP 5.3+**
131
-
132
- As with Guzzle, while PHP 5.3+ is awesome, you can't always rely on it being
133
- on a host. With widely distributable software, this is a huge problem.
134
-
135
- 2. **Not transport-transparent**
136
-
137
- For making certain types of requests, such as multi-requests, you can't rely
138
- on a high-level abstraction and instead have to use the low-level transports.
139
- This really gains nothing (other than a fancy interface) over just using the
140
- methods directly and means that you can't rely on features to be available.
141
-
142
-
143
- ### fsockopen
144
-
145
- 1. **Very low-level**
146
-
147
- fsockopen is used for working with sockets directly, so it only knows about
148
- the transport layer (TCP in our case), not anything higher (i.e. HTTP on the
149
- application layer). To be able to use fsockopen as a HTTP client, you need
150
- to write all the HTTP code yourself, and once you're done, you'll end up
151
- with something that is almost exactly like Requests.
152
-
153
-
154
- ### PEAR HTTP_Request2
155
-
156
- 1. **Requires PEAR**
157
-
158
- PEAR is (in theory) a great distribution system (with a less than wonderful
159
- implementation), however it is not ubiquitous, as many hosts disable it to
160
- save on space that most people aren't going to use anyway.
161
-
162
- PEAR is also a pain for users. Users want to be able to download a zip of
163
- your project without needing to install anything else from PEAR.
164
-
165
- (If you really want though, Requests is available via PEAR. Check the README
166
- to see how to grab it.)
167
-
168
- 2. **Depends on other PEAR utilities**
169
-
170
- HTTP\_Request2 requires Net_URL2 in order to function, locking you in to
171
- using PEAR for your project.
172
-
173
- Requests is entirely self-contained, and includes all the libraries it needs
174
- (for example, Requests\_IRI is based on ComplexPie\_IRI by Geoffrey Sneddon).
175
-
176
-
177
- ### PECL HttpRequest
178
-
179
- 1. **Requires a PECL extension**
180
-
181
- Similar to PEAR, users aren't big fans of installing extra libraries. Unlike
182
- PEAR though, PECL extensions require compiling, which end users will be
183
- unfamiliar with. In addition, on systems where users do not have full
184
- control over PHP, they will be unable to install custom extensions.
185
-
186
-
187
- ### Zend Framework's Zend\_Http\_Client
188
-
189
- 1. **Requires other parts of the Zend Framework**
190
-
191
- Similar to HTTP_Request2, Zend's client is not fully self-contained and
192
- requires other components from the framework.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/examples/basic-auth.php DELETED
@@ -1,16 +0,0 @@
1
- <?php
2
-
3
- // First, include Requests
4
- include('../library/Requests.php');
5
-
6
- // Next, make sure Requests can load internal classes
7
- Requests::register_autoloader();
8
-
9
- // Now let's make a request!
10
- $options = array(
11
- 'auth' => array('someuser', 'password')
12
- );
13
- $request = Requests::get('http://httpbin.org/basic-auth/someuser/password', array(), $options);
14
-
15
- // Check what we received
16
- var_dump($request);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/examples/get.php DELETED
@@ -1,13 +0,0 @@
1
- <?php
2
-
3
- // First, include Requests
4
- include('../library/Requests.php');
5
-
6
- // Next, make sure Requests can load internal classes
7
- Requests::register_autoloader();
8
-
9
- // Now let's make a request!
10
- $request = Requests::get('http://httpbin.org/get', array('Accept' => 'application/json'));
11
-
12
- // Check what we received
13
- var_dump($request);
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/examples/multiple.php DELETED
@@ -1,45 +0,0 @@
1
- <?php
2
-
3
- // First, include Requests
4
- include('../library/Requests.php');
5
-
6
- // Next, make sure Requests can load internal classes
7
- Requests::register_autoloader();
8
-
9
- // Setup what we want to request
10
- $requests = array(
11
- array(
12
- 'url' => 'http://httpbin.org/get',
13
- 'headers' => array('Accept' => 'application/javascript'),
14
- ),
15
- 'post' => array(
16
- 'url' => 'http://httpbin.org/post',
17
- 'data' => array('mydata' => 'something'),
18
- ),
19
- 'delayed' => array(
20
- 'url' => 'http://httpbin.org/delay/10',
21
- 'options' => array(
22
- 'timeout' => 20,
23
- ),
24
- ),
25
- );
26
-
27
- // Setup a callback
28
- function my_callback(&$request, $id) {
29
- var_dump($id, $request);
30
- }
31
-
32
- // Tell Requests to use the callback
33
- $options = array(
34
- 'complete' => 'my_callback',
35
- );
36
-
37
- // Send the request!
38
- $responses = Requests::request_multiple($requests, $options);
39
-
40
- // Note: the response from the above call will be an associative array matching
41
- // $requests with the response data, however we've already handled it in
42
- // my_callback() anyway!
43
- //
44
- // If you don't believe me, uncomment this:
45
- # var_dump($responses);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/examples/post.php DELETED
@@ -1,13 +0,0 @@
1
- <?php
2
-
3
- // First, include Requests
4
- include('../library/Requests.php');
5
-
6
- // Next, make sure Requests can load internal classes
7
- Requests::register_autoloader();
8
-
9
- // Now let's make a request!
10
- $request = Requests::post('http://httpbin.org/post', array(), array('mydata' => 'something'));
11
-
12
- // Check what we received
13
- var_dump($request);
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/examples/proxy.php DELETED
@@ -1,18 +0,0 @@
1
- <?php
2
-
3
- // First, include Requests
4
- include('../library/Requests.php');
5
-
6
- // Next, make sure Requests can load internal classes
7
- Requests::register_autoloader();
8
-
9
- // Now let's make a request via a proxy.
10
- $options = array(
11
- 'proxy' => '127.0.0.1:8080', // syntax: host:port, eg 12.13.14.14:8080 or someproxy.com:3128
12
- // If you need to authenticate, use the following syntax:
13
- // 'proxy' => array( '127.0.0.1:8080', 'username', 'password' ),
14
- );
15
- $request = Requests::get('http://httpbin.org/ip', array(), $options );
16
-
17
- // See result
18
- var_dump($request->body);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/examples/session.php DELETED
@@ -1,24 +0,0 @@
1
- <?php
2
-
3
- // First, include Requests
4
- include('../library/Requests.php');
5
-
6
- // Next, make sure Requests can load internal classes
7
- Requests::register_autoloader();
8
-
9
- // Set up our session
10
- $session = new Requests_Session('http://httpbin.org/');
11
- $session->headers['Accept'] = 'application/json';
12
- $session->useragent = 'Awesomesauce';
13
-
14
- // Now let's make a request!
15
- $request = $session->get('/get');
16
-
17
- // Check what we received
18
- var_dump($request);
19
-
20
- // Let's check our user agent!
21
- $request = $session->get('/user-agent');
22
-
23
- // And check again
24
- var_dump($request);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/examples/timeout.php DELETED
@@ -1,17 +0,0 @@
1
- <?php
2
-
3
- // First, include Requests
4
- include('../library/Requests.php');
5
-
6
- // Next, make sure Requests can load internal classes
7
- Requests::register_autoloader();
8
-
9
- // Define a timeout of 2.5 seconds
10
- $options = array(
11
- 'timeout' => 2.5,
12
- );
13
-
14
- // Now let's make a request to a page that will delay its response by 3 seconds
15
- $request = Requests::get('http://httpbin.org/delay/3', array(), $options);
16
-
17
- // An exception will be thrown, stating a timeout of the request !
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests.php DELETED
@@ -1,869 +0,0 @@
1
- <?php
2
- /**
3
- * Requests for PHP
4
- *
5
- * Inspired by Requests for Python.
6
- *
7
- * Based on concepts from SimplePie_File, RequestCore and WP_Http.
8
- *
9
- * @package Requests
10
- */
11
-
12
- /**
13
- * Requests for PHP
14
- *
15
- * Inspired by Requests for Python.
16
- *
17
- * Based on concepts from SimplePie_File, RequestCore and WP_Http.
18
- *
19
- * @package Requests
20
- */
21
- class Requests {
22
- /**
23
- * POST method
24
- *
25
- * @var string
26
- */
27
- const POST = 'POST';
28
-
29
- /**
30
- * PUT method
31
- *
32
- * @var string
33
- */
34
- const PUT = 'PUT';
35
-
36
- /**
37
- * GET method
38
- *
39
- * @var string
40
- */
41
- const GET = 'GET';
42
-
43
- /**
44
- * HEAD method
45
- *
46
- * @var string
47
- */
48
- const HEAD = 'HEAD';
49
-
50
- /**
51
- * DELETE method
52
- *
53
- * @var string
54
- */
55
- const DELETE = 'DELETE';
56
-
57
- /**
58
- * PATCH method
59
- *
60
- * @link http://tools.ietf.org/html/rfc5789
61
- * @var string
62
- */
63
- const PATCH = 'PATCH';
64
-
65
- /**
66
- * Current version of Requests
67
- *
68
- * @var string
69
- */
70
- const VERSION = '1.6';
71
-
72
- /**
73
- * Registered transport classes
74
- *
75
- * @var array
76
- */
77
- protected static $transports = array();
78
-
79
- /**
80
- * Selected transport name
81
- *
82
- * Use {@see get_transport()} instead
83
- *
84
- * @var array
85
- */
86
- public static $transport = array();
87
-
88
- /**
89
- * This is a static class, do not instantiate it
90
- *
91
- * @codeCoverageIgnore
92
- */
93
- private function __construct() {}
94
-
95
- /**
96
- * Autoloader for Requests
97
- *
98
- * Register this with {@see register_autoloader()} if you'd like to avoid
99
- * having to create your own.
100
- *
101
- * (You can also use `spl_autoload_register` directly if you'd prefer.)
102
- *
103
- * @codeCoverageIgnore
104
- *
105
- * @param string $class Class name to load
106
- */
107
- public static function autoloader($class) {
108
- // Check that the class starts with "Requests"
109
- if (strpos($class, 'Requests') !== 0) {
110
- return;
111
- }
112
-
113
- $file = str_replace('_', '/', $class);
114
- if (file_exists(dirname(__FILE__) . '/' . $file . '.php')) {
115
- require_once(dirname(__FILE__) . '/' . $file . '.php');
116
- }
117
- }
118
-
119
- /**
120
- * Register the built-in autoloader
121
- *
122
- * @codeCoverageIgnore
123
- */
124
- public static function register_autoloader() {
125
- spl_autoload_register(array('Requests', 'autoloader'));
126
- }
127
-
128
- /**
129
- * Register a transport
130
- *
131
- * @param string $transport Transport class to add, must support the Requests_Transport interface
132
- */
133
- public static function add_transport($transport) {
134
- if (empty(self::$transports)) {
135
- self::$transports = array(
136
- 'Requests_Transport_cURL',
137
- 'Requests_Transport_fsockopen',
138
- );
139
- }
140
-
141
- self::$transports = array_merge(self::$transports, array($transport));
142
- }
143
-
144
- /**
145
- * Get a working transport
146
- *
147
- * @throws Requests_Exception If no valid transport is found (`notransport`)
148
- * @return Requests_Transport
149
- */
150
- protected static function get_transport($capabilities = array()) {
151
- // Caching code, don't bother testing coverage
152
- // @codeCoverageIgnoreStart
153
- // array of capabilities as a string to be used as an array key
154
- ksort($capabilities);
155
- $cap_string = serialize($capabilities);
156
-
157
- // Don't search for a transport if it's already been done for these $capabilities
158
- if (isset(self::$transport[$cap_string]) && self::$transport[$cap_string] !== null) {
159
- return new self::$transport[$cap_string]();
160
- }
161
- // @codeCoverageIgnoreEnd
162
-
163
- if (empty(self::$transports)) {
164
- self::$transports = array(
165
- 'Requests_Transport_cURL',
166
- 'Requests_Transport_fsockopen',
167
- );
168
- }
169
-
170
- // Find us a working transport
171
- foreach (self::$transports as $class) {
172
- if (!class_exists($class))
173
- continue;
174
-
175
- $result = call_user_func(array($class, 'test'), $capabilities);
176
- if ($result) {
177
- self::$transport[$cap_string] = $class;
178
- break;
179
- }
180
- }
181
- if (self::$transport[$cap_string] === null) {
182
- throw new Requests_Exception('No working transports found', 'notransport', self::$transports);
183
- }
184
-
185
- return new self::$transport[$cap_string]();
186
- }
187
-
188
- /**#@+
189
- * @see request()
190
- * @param string $url
191
- * @param array $headers
192
- * @param array $options
193
- * @return Requests_Response
194
- */
195
- /**
196
- * Send a GET request
197
- */
198
- public static function get($url, $headers = array(), $options = array()) {
199
- return self::request($url, $headers, null, self::GET, $options);
200
- }
201
-
202
- /**
203
- * Send a HEAD request
204
- */
205
- public static function head($url, $headers = array(), $options = array()) {
206
- return self::request($url, $headers, null, self::HEAD, $options);
207
- }
208
-
209
- /**
210
- * Send a DELETE request
211
- */
212
- public static function delete($url, $headers = array(), $options = array()) {
213
- return self::request($url, $headers, null, self::DELETE, $options);
214
- }
215
- /**#@-*/
216
-
217
- /**#@+
218
- * @see request()
219
- * @param string $url
220
- * @param array $headers
221
- * @param array $data
222
- * @param array $options
223
- * @return Requests_Response
224
- */
225
- /**
226
- * Send a POST request
227
- */
228
- public static function post($url, $headers = array(), $data = array(), $options = array()) {
229
- return self::request($url, $headers, $data, self::POST, $options);
230
- }
231
- /**
232
- * Send a PUT request
233
- */
234
- public static function put($url, $headers = array(), $data = array(), $options = array()) {
235
- return self::request($url, $headers, $data, self::PUT, $options);
236
- }
237
-
238
- /**
239
- * Send a PATCH request
240
- *
241
- * Note: Unlike {@see post} and {@see put}, `$headers` is required, as the
242
- * specification recommends that should send an ETag
243
- *
244
- * @link http://tools.ietf.org/html/rfc5789
245
- */
246
- public static function patch($url, $headers, $data = array(), $options = array()) {
247
- return self::request($url, $headers, $data, self::PATCH, $options);
248
- }
249
- /**#@-*/
250
-
251
- /**
252
- * Main interface for HTTP requests
253
- *
254
- * This method initiates a request and sends it via a transport before
255
- * parsing.
256
- *
257
- * The `$options` parameter takes an associative array with the following
258
- * options:
259
- *
260
- * - `timeout`: How long should we wait for a response?
261
- * (float, seconds with a millisecond precision, default: 10, example: 0.01)
262
- * - `connect_timeout`: How long should we wait while trying to connect?
263
- * (float, seconds with a millisecond precision, default: 10, example: 0.01)
264
- * - `useragent`: Useragent to send to the server
265
- * (string, default: php-requests/$version)
266
- * - `follow_redirects`: Should we follow 3xx redirects?
267
- * (boolean, default: true)
268
- * - `redirects`: How many times should we redirect before erroring?
269
- * (integer, default: 10)
270
- * - `blocking`: Should we block processing on this request?
271
- * (boolean, default: true)
272
- * - `filename`: File to stream the body to instead.
273
- * (string|boolean, default: false)
274
- * - `auth`: Authentication handler or array of user/password details to use
275
- * for Basic authentication
276
- * (Requests_Auth|array|boolean, default: false)
277
- * - `proxy`: Proxy details to use for proxy by-passing and authentication
278
- * (Requests_Proxy|array|boolean, default: false)
279
- * - `idn`: Enable IDN parsing
280
- * (boolean, default: true)
281
- * - `transport`: Custom transport. Either a class name, or a
282
- * transport object. Defaults to the first working transport from
283
- * {@see getTransport()}
284
- * (string|Requests_Transport, default: {@see getTransport()})
285
- * - `hooks`: Hooks handler.
286
- * (Requests_Hooker, default: new Requests_Hooks())
287
- * - `verify`: Should we verify SSL certificates? Allows passing in a custom
288
- * certificate file as a string. (Using true uses the system-wide root
289
- * certificate store instead, but this may have different behaviour
290
- * across transports.)
291
- * (string|boolean, default: library/Requests/Transport/cacert.pem)
292
- * - `verifyname`: Should we verify the common name in the SSL certificate?
293
- * (boolean: default, true)
294
- *
295
- * @throws Requests_Exception On invalid URLs (`nonhttp`)
296
- *
297
- * @param string $url URL to request
298
- * @param array $headers Extra headers to send with the request
299
- * @param array $data Data to send either as a query string for GET/HEAD requests, or in the body for POST requests
300
- * @param string $type HTTP request type (use Requests constants)
301
- * @param array $options Options for the request (see description for more information)
302
- * @return Requests_Response
303
- */
304
- public static function request($url, $headers = array(), $data = array(), $type = self::GET, $options = array()) {
305
- if (empty($options['type'])) {
306
- $options['type'] = $type;
307
- }
308
- $options = array_merge(self::get_default_options(), $options);
309
-
310
- self::set_defaults($url, $headers, $data, $type, $options);
311
-
312
- $options['hooks']->dispatch('requests.before_request', array(&$url, &$headers, &$data, &$type, &$options));
313
-
314
- if (!empty($options['transport'])) {
315
- $transport = $options['transport'];
316
-
317
- if (is_string($options['transport'])) {
318
- $transport = new $transport();
319
- }
320
- } else {
321
- $need_ssl = (0 === stripos($url, 'https://'));
322
- $capabilities = array('ssl' => $need_ssl);
323
- $transport = self::get_transport($capabilities);
324
- }
325
- $response = $transport->request($url, $headers, $data, $options);
326
-
327
- $options['hooks']->dispatch('requests.before_parse', array(&$response, $url, $headers, $data, $type, $options));
328
-
329
- return self::parse_response($response, $url, $headers, $data, $options);
330
- }
331
-
332
- /**
333
- * Send multiple HTTP requests simultaneously
334
- *
335
- * The `$requests` parameter takes an associative or indexed array of
336
- * request fields. The key of each request can be used to match up the
337
- * request with the returned data, or with the request passed into your
338
- * `multiple.request.complete` callback.
339
- *
340
- * The request fields value is an associative array with the following keys:
341
- *
342
- * - `url`: Request URL Same as the `$url` parameter to
343
- * {@see Requests::request}
344
- * (string, required)
345
- * - `headers`: Associative array of header fields. Same as the `$headers`
346
- * parameter to {@see Requests::request}
347
- * (array, default: `array()`)
348
- * - `data`: Associative array of data fields or a string. Same as the
349
- * `$data` parameter to {@see Requests::request}
350
- * (array|string, default: `array()`)
351
- * - `type`: HTTP request type (use Requests constants). Same as the `$type`
352
- * parameter to {@see Requests::request}
353
- * (string, default: `Requests::GET`)
354
- * - `cookies`: Associative array of cookie name to value, or cookie jar.
355
- * (array|Requests_Cookie_Jar)
356
- *
357
- * If the `$options` parameter is specified, individual requests will
358
- * inherit options from it. This can be used to use a single hooking system,
359
- * or set all the types to `Requests::POST`, for example.
360
- *
361
- * In addition, the `$options` parameter takes the following global options:
362
- *
363
- * - `complete`: A callback for when a request is complete. Takes two
364
- * parameters, a Requests_Response/Requests_Exception reference, and the
365
- * ID from the request array (Note: this can also be overridden on a
366
- * per-request basis, although that's a little silly)
367
- * (callback)
368
- *
369
- * @param array $requests Requests data (see description for more information)
370
- * @param array $options Global and default options (see {@see Requests::request})
371
- * @return array Responses (either Requests_Response or a Requests_Exception object)
372
- */
373
- public static function request_multiple($requests, $options = array()) {
374
- $options = array_merge(self::get_default_options(true), $options);
375
-
376
- if (!empty($options['hooks'])) {
377
- $options['hooks']->register('transport.internal.parse_response', array('Requests', 'parse_multiple'));
378
- if (!empty($options['complete'])) {
379
- $options['hooks']->register('multiple.request.complete', $options['complete']);
380
- }
381
- }
382
-
383
- foreach ($requests as $id => &$request) {
384
- if (!isset($request['headers'])) {
385
- $request['headers'] = array();
386
- }
387
- if (!isset($request['data'])) {
388
- $request['data'] = array();
389
- }
390
- if (!isset($request['type'])) {
391
- $request['type'] = self::GET;
392
- }
393
- if (!isset($request['options'])) {
394
- $request['options'] = $options;
395
- $request['options']['type'] = $request['type'];
396
- }
397
- else {
398
- if (empty($request['options']['type'])) {
399
- $request['options']['type'] = $request['type'];
400
- }
401
- $request['options'] = array_merge($options, $request['options']);
402
- }
403
-
404
- self::set_defaults($request['url'], $request['headers'], $request['data'], $request['type'], $request['options']);
405
-
406
- // Ensure we only hook in once
407
- if ($request['options']['hooks'] !== $options['hooks']) {
408
- $request['options']['hooks']->register('transport.internal.parse_response', array('Requests', 'parse_multiple'));
409
- if (!empty($request['options']['complete'])) {
410
- $request['options']['hooks']->register('multiple.request.complete', $request['options']['complete']);
411
- }
412
- }
413
- }
414
- unset($request);
415
-
416
- if (!empty($options['transport'])) {
417
- $transport = $options['transport'];
418
-
419
- if (is_string($options['transport'])) {
420
- $transport = new $transport();
421
- }
422
- }
423
- else {
424
- $transport = self::get_transport();
425
- }
426
- $responses = $transport->request_multiple($requests, $options);
427
-
428
- foreach ($responses as $id => &$response) {
429
- // If our hook got messed with somehow, ensure we end up with the
430
- // correct response
431
- if (is_string($response)) {
432
- $request = $requests[$id];
433
- self::parse_multiple($response, $request);
434
- $request['options']['hooks']->dispatch('multiple.request.complete', array(&$response, $id));
435
- }
436
- }
437
-
438
- return $responses;
439
- }
440
-
441
- /**
442
- * Get the default options
443
- *
444
- * @see Requests::request() for values returned by this method
445
- * @param boolean $multirequest Is this a multirequest?
446
- * @return array Default option values
447
- */
448
- protected static function get_default_options($multirequest = false) {
449
- $defaults = array(
450
- 'timeout' => 10,
451
- 'connect_timeout' => 10,
452
- 'useragent' => 'php-requests/' . self::VERSION,
453
- 'redirected' => 0,
454
- 'redirects' => 10,
455
- 'follow_redirects' => true,
456
- 'blocking' => true,
457
- 'type' => self::GET,
458
- 'filename' => false,
459
- 'auth' => false,
460
- 'proxy' => false,
461
- 'cookies' => false,
462
- 'idn' => true,
463
- 'hooks' => null,
464
- 'transport' => null,
465
- 'verify' => dirname( __FILE__ ) . '/Requests/Transport/cacert.pem',
466
- 'verifyname' => true,
467
- );
468
- if ($multirequest !== false) {
469
- $defaults['complete'] = null;
470
- }
471
- return $defaults;
472
- }
473
-
474
- /**
475
- * Set the default values
476
- *
477
- * @param string $url URL to request
478
- * @param array $headers Extra headers to send with the request
479
- * @param array $data Data to send either as a query string for GET/HEAD requests, or in the body for POST requests
480
- * @param string $type HTTP request type
481
- * @param array $options Options for the request
482
- * @return array $options
483
- */
484
- protected static function set_defaults(&$url, &$headers, &$data, &$type, &$options) {
485
- if (!preg_match('/^http(s)?:\/\//i', $url, $matches)) {
486
- throw new Requests_Exception('Only HTTP requests are handled.', 'nonhttp', $url);
487
- }
488
-
489
- if (empty($options['hooks'])) {
490
- $options['hooks'] = new Requests_Hooks();
491
- }
492
-
493
- if (is_array($options['auth'])) {
494
- $options['auth'] = new Requests_Auth_Basic($options['auth']);
495
- }
496
- if ($options['auth'] !== false) {
497
- $options['auth']->register($options['hooks']);
498
- }
499
-
500
- if (!empty($options['proxy'])) {
501
- $options['proxy'] = new Requests_Proxy_HTTP($options['proxy']);
502
- }
503
- if ($options['proxy'] !== false) {
504
- $options['proxy']->register($options['hooks']);
505
- }
506
-
507
- if (is_array($options['cookies'])) {
508
- $options['cookies'] = new Requests_Cookie_Jar($options['cookies']);
509
- }
510
- elseif (empty($options['cookies'])) {
511
- $options['cookies'] = new Requests_Cookie_Jar();
512
- }
513
- if ($options['cookies'] !== false) {
514
- $options['cookies']->register($options['hooks']);
515
- }
516
-
517
- if ($options['idn'] !== false) {
518
- $iri = new Requests_IRI($url);
519
- $iri->host = Requests_IDNAEncoder::encode($iri->ihost);
520
- $url = $iri->uri;
521
- }
522
- }
523
-
524
- /**
525
- * HTTP response parser
526
- *
527
- * @throws Requests_Exception On missing head/body separator (`requests.no_crlf_separator`)
528
- * @throws Requests_Exception On missing head/body separator (`noversion`)
529
- * @throws Requests_Exception On missing head/body separator (`toomanyredirects`)
530
- *
531
- * @param string $headers Full response text including headers and body
532
- * @param string $url Original request URL
533
- * @param array $req_headers Original $headers array passed to {@link request()}, in case we need to follow redirects
534
- * @param array $req_data Original $data array passed to {@link request()}, in case we need to follow redirects
535
- * @param array $options Original $options array passed to {@link request()}, in case we need to follow redirects
536
- * @return Requests_Response
537
- */
538
- protected static function parse_response($headers, $url, $req_headers, $req_data, $options) {
539
- $return = new Requests_Response();
540
- if (!$options['blocking']) {
541
- return $return;
542
- }
543
-
544
- $return->raw = $headers;
545
- $return->url = $url;
546
-
547
- if (!$options['filename']) {
548
- if (($pos = strpos($headers, "\r\n\r\n")) === false) {
549
- // Crap!
550
- throw new Requests_Exception('Missing header/body separator', 'requests.no_crlf_separator');
551
- }
552
-
553
- $headers = substr($return->raw, 0, $pos);
554
- $return->body = substr($return->raw, $pos + strlen("\n\r\n\r"));
555
- }
556
- else {
557
- $return->body = '';
558
- }
559
- // Pretend CRLF = LF for compatibility (RFC 2616, section 19.3)
560
- $headers = str_replace("\r\n", "\n", $headers);
561
- // Unfold headers (replace [CRLF] 1*( SP | HT ) with SP) as per RFC 2616 (section 2.2)
562
- $headers = preg_replace('/\n[ \t]/', ' ', $headers);
563
- $headers = explode("\n", $headers);
564
- preg_match('#^HTTP/1\.\d[ \t]+(\d+)#i', array_shift($headers), $matches);
565
- if (empty($matches)) {
566
- throw new Requests_Exception('Response could not be parsed', 'noversion', $headers);
567
- }
568
- $return->status_code = (int) $matches[1];
569
- if ($return->status_code >= 200 && $return->status_code < 300) {
570
- $return->success = true;
571
- }
572
-
573
- foreach ($headers as $header) {
574
- list($key, $value) = explode(':', $header, 2);
575
- $value = trim($value);
576
- preg_replace('#(\s+)#i', ' ', $value);
577
- $return->headers[$key] = $value;
578
- }
579
- if (isset($return->headers['transfer-encoding'])) {
580
- $return->body = self::decode_chunked($return->body);
581
- unset($return->headers['transfer-encoding']);
582
- }
583
- if (isset($return->headers['content-encoding'])) {
584
- $return->body = self::decompress($return->body);
585
- }
586
-
587
- //fsockopen and cURL compatibility
588
- if (isset($return->headers['connection'])) {
589
- unset($return->headers['connection']);
590
- }
591
-
592
- $options['hooks']->dispatch('requests.before_redirect_check', array(&$return, $req_headers, $req_data, $options));
593
-
594
- if ((in_array($return->status_code, array(300, 301, 302, 303, 307)) || $return->status_code > 307 && $return->status_code < 400) && $options['follow_redirects'] === true) {
595
- if (isset($return->headers['location']) && $options['redirected'] < $options['redirects']) {
596
- if ($return->status_code === 303) {
597
- $options['type'] = Requests::GET;
598
- }
599
- $options['redirected']++;
600
- $location = $return->headers['location'];
601
- if (strpos ($location, 'http://') !== 0 && strpos ($location, 'https://') !== 0) {
602
- // relative redirect, for compatibility make it absolute
603
- $location = Requests_IRI::absolutize($url, $location);
604
- $location = $location->uri;
605
- }
606
- $redirected = self::request($location, $req_headers, $req_data, false, $options);
607
- $redirected->history[] = $return;
608
- return $redirected;
609
- }
610
- elseif ($options['redirected'] >= $options['redirects']) {
611
- throw new Requests_Exception('Too many redirects', 'toomanyredirects', $return);
612
- }
613
- }
614
-
615
- $return->redirects = $options['redirected'];
616
-
617
- $options['hooks']->dispatch('requests.after_request', array(&$return, $req_headers, $req_data, $options));
618
- return $return;
619
- }
620
-
621
- /**
622
- * Callback for `transport.internal.parse_response`
623
- *
624
- * Internal use only. Converts a raw HTTP response to a Requests_Response
625
- * while still executing a multiple request.
626
- *
627
- * @param string $headers Full response text including headers and body
628
- * @param array $request Request data as passed into {@see Requests::request_multiple()}
629
- * @return null `$response` is either set to a Requests_Response instance, or a Requests_Exception object
630
- */
631
- public static function parse_multiple(&$response, $request) {
632
- try {
633
- $response = self::parse_response($response, $request['url'], $request['headers'], $request['data'], $request['options']);
634
- }
635
- catch (Requests_Exception $e) {
636
- $response = $e;
637
- }
638
- }
639
-
640
- /**
641
- * Decoded a chunked body as per RFC 2616
642
- *
643
- * @see http://tools.ietf.org/html/rfc2616#section-3.6.1
644
- * @param string $data Chunked body
645
- * @return string Decoded body
646
- */
647
- protected static function decode_chunked($data) {
648
- if (!preg_match('/^([0-9a-f]+)[^\r\n]*\r\n/i', trim($data))) {
649
- return $data;
650
- }
651
-
652
- $decoded = '';
653
- $encoded = $data;
654
-
655
- while (true) {
656
- $is_chunked = (bool) preg_match( '/^([0-9a-f]+)[^\r\n]*\r\n/i', $encoded, $matches );
657
- if (!$is_chunked) {
658
- // Looks like it's not chunked after all
659
- return $data;
660
- }
661
-
662
- $length = hexdec(trim($matches[1]));
663
- if ($length === 0) {
664
- // Ignore trailer headers
665
- return $decoded;
666
- }
667
-
668
- $chunk_length = strlen($matches[0]);
669
- $decoded .= $part = substr($encoded, $chunk_length, $length);
670
- $encoded = substr($encoded, $chunk_length + $length + 2);
671
-
672
- if (trim($encoded) === '0' || empty($encoded)) {
673
- return $decoded;
674
- }
675
- }
676
-
677
- // We'll never actually get down here
678
- // @codeCoverageIgnoreStart
679
- }
680
- // @codeCoverageIgnoreEnd
681
-
682
- /**
683
- * Convert a key => value array to a 'key: value' array for headers
684
- *
685
- * @param array $array Dictionary of header values
686
- * @return array List of headers
687
- */
688
- public static function flatten($array) {
689
- $return = array();
690
- foreach ($array as $key => $value) {
691
- $return[] = "$key: $value";
692
- }
693
- return $return;
694
- }
695
-
696
- /**
697
- * Convert a key => value array to a 'key: value' array for headers
698
- *
699
- * @deprecated Misspelling of {@see Requests::flatten}
700
- * @param array $array Dictionary of header values
701
- * @return array List of headers
702
- */
703
- public static function flattern($array) {
704
- return self::flatten($array);
705
- }
706
-
707
- /**
708
- * Decompress an encoded body
709
- *
710
- * Implements gzip, compress and deflate. Guesses which it is by attempting
711
- * to decode.
712
- *
713
- * @todo Make this smarter by defaulting to whatever the headers say first
714
- * @param string $data Compressed data in one of the above formats
715
- * @return string Decompressed string
716
- */
717
- public static function decompress($data) {
718
- if (substr($data, 0, 2) !== "\x1f\x8b" && substr($data, 0, 2) !== "\x78\x9c") {
719
- // Not actually compressed. Probably cURL ruining this for us.
720
- return $data;
721
- }
722
-
723
- if (function_exists('gzdecode') && ($decoded = @gzdecode($data)) !== false) {
724
- return $decoded;
725
- }
726
- elseif (function_exists('gzinflate') && ($decoded = @gzinflate($data)) !== false) {
727
- return $decoded;
728
- }
729
- elseif (($decoded = self::compatible_gzinflate($data)) !== false) {
730
- return $decoded;
731
- }
732
- elseif (function_exists('gzuncompress') && ($decoded = @gzuncompress($data)) !== false) {
733
- return $decoded;
734
- }
735
-
736
- return $data;
737
- }
738
-
739
- /**
740
- * Decompression of deflated string while staying compatible with the majority of servers.
741
- *
742
- * Certain Servers will return deflated data with headers which PHP's gzinflate()
743
- * function cannot handle out of the box. The following function has been created from
744
- * various snippets on the gzinflate() PHP documentation.
745
- *
746
- * Warning: Magic numbers within. Due to the potential different formats that the compressed
747
- * data may be returned in, some "magic offsets" are needed to ensure proper decompression
748
- * takes place. For a simple progmatic way to determine the magic offset in use, see:
749
- * http://core.trac.wordpress.org/ticket/18273
750
- *
751
- * @since 2.8.1
752
- * @link http://core.trac.wordpress.org/ticket/18273
753
- * @link http://au2.php.net/manual/en/function.gzinflate.php#70875
754
- * @link http://au2.php.net/manual/en/function.gzinflate.php#77336
755
- *
756
- * @param string $gzData String to decompress.
757
- * @return string|bool False on failure.
758
- */
759
- public static function compatible_gzinflate($gzData) {
760
- // Compressed data might contain a full zlib header, if so strip it for
761
- // gzinflate()
762
- if ( substr($gzData, 0, 3) == "\x1f\x8b\x08" ) {
763
- $i = 10;
764
- $flg = ord( substr($gzData, 3, 1) );
765
- if ( $flg > 0 ) {
766
- if ( $flg & 4 ) {
767
- list($xlen) = unpack('v', substr($gzData, $i, 2) );
768
- $i = $i + 2 + $xlen;
769
- }
770
- if ( $flg & 8 )
771
- $i = strpos($gzData, "\0", $i) + 1;
772
- if ( $flg & 16 )
773
- $i = strpos($gzData, "\0", $i) + 1;
774
- if ( $flg & 2 )
775
- $i = $i + 2;
776
- }
777
- $decompressed = self::compatible_gzinflate( substr( $gzData, $i ) );
778
- if ( false !== $decompressed ) {
779
- return $decompressed;
780
- }
781
- }
782
-
783
- // If the data is Huffman Encoded, we must first strip the leading 2
784
- // byte Huffman marker for gzinflate()
785
- // The response is Huffman coded by many compressors such as
786
- // java.util.zip.Deflater, Ruby’s Zlib::Deflate, and .NET's
787
- // System.IO.Compression.DeflateStream.
788
- //
789
- // See http://decompres.blogspot.com/ for a quick explanation of this
790
- // data type
791
- $huffman_encoded = false;
792
-
793
- // low nibble of first byte should be 0x08
794
- list( , $first_nibble ) = unpack( 'h', $gzData );
795
-
796
- // First 2 bytes should be divisible by 0x1F
797
- list( , $first_two_bytes ) = unpack( 'n', $gzData );
798
-
799
- if ( 0x08 == $first_nibble && 0 == ( $first_two_bytes % 0x1F ) )
800
- $huffman_encoded = true;
801
-
802
- if ( $huffman_encoded ) {
803
- if ( false !== ( $decompressed = @gzinflate( substr( $gzData, 2 ) ) ) )
804
- return $decompressed;
805
- }
806
-
807
- if ( "\x50\x4b\x03\x04" == substr( $gzData, 0, 4 ) ) {
808
- // ZIP file format header
809
- // Offset 6: 2 bytes, General-purpose field
810
- // Offset 26: 2 bytes, filename length
811
- // Offset 28: 2 bytes, optional field length
812
- // Offset 30: Filename field, followed by optional field, followed
813
- // immediately by data
814
- list( , $general_purpose_flag ) = unpack( 'v', substr( $gzData, 6, 2 ) );
815
-
816
- // If the file has been compressed on the fly, 0x08 bit is set of
817
- // the general purpose field. We can use this to differentiate
818
- // between a compressed document, and a ZIP file
819
- $zip_compressed_on_the_fly = ( 0x08 == (0x08 & $general_purpose_flag ) );
820
-
821
- if ( ! $zip_compressed_on_the_fly ) {
822
- // Don't attempt to decode a compressed zip file
823
- return $gzData;
824
- }
825
-
826
- // Determine the first byte of data, based on the above ZIP header
827
- // offsets:
828
- $first_file_start = array_sum( unpack( 'v2', substr( $gzData, 26, 4 ) ) );
829
- if ( false !== ( $decompressed = @gzinflate( substr( $gzData, 30 + $first_file_start ) ) ) ) {
830
- return $decompressed;
831
- }
832
- return false;
833
- }
834
-
835
- // Finally fall back to straight gzinflate
836
- if ( false !== ( $decompressed = @gzinflate( $gzData ) ) ) {
837
- return $decompressed;
838
- }
839
-
840
- // Fallback for all above failing, not expected, but included for
841
- // debugging and preventing regressions and to track stats
842
- if ( false !== ( $decompressed = @gzinflate( substr( $gzData, 2 ) ) ) ) {
843
- return $decompressed;
844
- }
845
-
846
- return false;
847
- }
848
-
849
- public static function match_domain($host, $reference) {
850
- // Check for a direct match
851
- if ($host === $reference) {
852
- return true;
853
- }
854
-
855
- // Calculate the valid wildcard match if the host is not an IP address
856
- // Also validates that the host has 3 parts or more, as per Firefox's
857
- // ruleset.
858
- $parts = explode('.', $host);
859
- if (ip2long($host) === false && count($parts) >= 3) {
860
- $parts[0] = '*';
861
- $wildcard = implode('.', $parts);
862
- if ($wildcard === $reference) {
863
- return true;
864
- }
865
- }
866
-
867
- return false;
868
- }
869
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Auth.php DELETED
@@ -1,33 +0,0 @@
1
- <?php
2
- /**
3
- * Authentication provider interface
4
- *
5
- * @package Requests
6
- * @subpackage Authentication
7
- */
8
-
9
- /**
10
- * Authentication provider interface
11
- *
12
- * Implement this interface to act as an authentication provider.
13
- *
14
- * Parameters should be passed via the constructor where possible, as this
15
- * makes it much easier for users to use your provider.
16
- *
17
- * @see Requests_Hooks
18
- * @package Requests
19
- * @subpackage Authentication
20
- */
21
- interface Requests_Auth {
22
- /**
23
- * Register hooks as needed
24
- *
25
- * This method is called in {@see Requests::request} when the user has set
26
- * an instance as the 'auth' option. Use this callback to register all the
27
- * hooks you'll need.
28
- *
29
- * @see Requests_Hooks::register
30
- * @param Requests_Hooks $hooks Hook system
31
- */
32
- public function register(Requests_Hooks &$hooks);
33
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Auth/Basic.php DELETED
@@ -1,88 +0,0 @@
1
- <?php
2
- /**
3
- * Basic Authentication provider
4
- *
5
- * @package Requests
6
- * @subpackage Authentication
7
- */
8
-
9
- /**
10
- * Basic Authentication provider
11
- *
12
- * Provides a handler for Basic HTTP authentication via the Authorization
13
- * header.
14
- *
15
- * @package Requests
16
- * @subpackage Authentication
17
- */
18
- class Requests_Auth_Basic implements Requests_Auth {
19
- /**
20
- * Username
21
- *
22
- * @var string
23
- */
24
- public $user;
25
-
26
- /**
27
- * Password
28
- *
29
- * @var string
30
- */
31
- public $pass;
32
-
33
- /**
34
- * Constructor
35
- *
36
- * @throws Requests_Exception On incorrect number of arguments (`authbasicbadargs`)
37
- * @param array|null $args Array of user and password. Must have exactly two elements
38
- */
39
- public function __construct($args = null) {
40
- if (is_array($args)) {
41
- if (count($args) !== 2) {
42
- throw new Requests_Exception('Invalid number of arguments', 'authbasicbadargs');
43
- }
44
-
45
- list($this->user, $this->pass) = $args;
46
- }
47
- }
48
-
49
- /**
50
- * Register the necessary callbacks
51
- *
52
- * @see curl_before_send
53
- * @see fsockopen_header
54
- * @param Requests_Hooks $hooks Hook system
55
- */
56
- public function register(Requests_Hooks &$hooks) {
57
- $hooks->register('curl.before_send', array(&$this, 'curl_before_send'));
58
- $hooks->register('fsockopen.after_headers', array(&$this, 'fsockopen_header'));
59
- }
60
-
61
- /**
62
- * Set cURL parameters before the data is sent
63
- *
64
- * @param resource $handle cURL resource
65
- */
66
- public function curl_before_send(&$handle) {
67
- curl_setopt($handle, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
68
- curl_setopt($handle, CURLOPT_USERPWD, $this->getAuthString());
69
- }
70
-
71
- /**
72
- * Add extra headers to the request before sending
73
- *
74
- * @param string $out HTTP header string
75
- */
76
- public function fsockopen_header(&$out) {
77
- $out .= "Authorization: Basic " . base64_encode($this->getAuthString()) . "\r\n";
78
- }
79
-
80
- /**
81
- * Get the authentication string (user:pass)
82
- *
83
- * @return string
84
- */
85
- public function getAuthString() {
86
- return $this->user . ':' . $this->pass;
87
- }
88
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Cookie.php DELETED
@@ -1,374 +0,0 @@
1
- <?php
2
- /**
3
- * Cookie storage object
4
- *
5
- * @package Requests
6
- * @subpackage Cookies
7
- */
8
-
9
- /**
10
- * Cookie storage object
11
- *
12
- * @package Requests
13
- * @subpackage Cookies
14
- */
15
- class Requests_Cookie {
16
- /**
17
- *
18
- * @var string
19
- */
20
- public $name;
21
-
22
- /**
23
- * @var string
24
- */
25
- public $value;
26
-
27
- /**
28
- * Cookie attributes
29
- *
30
- * Valid keys are (currently) path, domain, expires, max-age, secure and
31
- * httponly.
32
- *
33
- * @var array
34
- */
35
- public $attributes = array();
36
-
37
- /**
38
- * Cookie flags
39
- *
40
- * Valid keys are (currently) creation, last-access, persistent and
41
- * host-only.
42
- *
43
- * @var array
44
- */
45
- public $flags = array();
46
-
47
- /**
48
- * Create a new cookie object
49
- *
50
- * @param string $name
51
- * @param string $value
52
- * @param array $attributes Associative array of attribute data
53
- */
54
- public function __construct($name, $value, $attributes = array(), $flags = array()) {
55
- $this->name = $name;
56
- $this->value = $value;
57
- $this->attributes = $attributes;
58
- $default_flags = array(
59
- 'creation' => time(),
60
- 'last-access' => time(),
61
- 'persistent' => false,
62
- 'host-only' => true,
63
- );
64
- $this->flags = array_merge($default_flags, $flags);
65
-
66
- $this->normalize();
67
- }
68
-
69
- /**
70
- * Check if a cookie is valid for a given URI
71
- *
72
- * @param Requests_IRI $uri URI to check
73
- * @return boolean Whether the cookie is valid for the given URI
74
- */
75
- public function uriMatches(Requests_IRI $uri) {
76
- if (!$this->domainMatches($uri->host)) {
77
- return false;
78
- }
79
-
80
- if (!$this->pathMatches($uri->path)) {
81
- return false;
82
- }
83
-
84
- if (!empty($this->attributes['secure']) && $uri->scheme !== 'https') {
85
- return false;
86
- }
87
-
88
- return true;
89
- }
90
-
91
- /**
92
- * Check if a cookie is valid for a given domain
93
- *
94
- * @param string $string Domain to check
95
- * @return boolean Whether the cookie is valid for the given domain
96
- */
97
- public function domainMatches($string) {
98
- if (!isset($this->attributes['domain'])) {
99
- // Cookies created manually; cookies created by Requests will set
100
- // the domain to the requested domain
101
- return true;
102
- }
103
-
104
- $domain_string = $this->attributes['domain'];
105
- if ($domain_string === $string) {
106
- // The domain string and the string are identical.
107
- return true;
108
- }
109
-
110
- // If the cookie is marked as host-only and we don't have an exact
111
- // match, reject the cookie
112
- if ($this->flags['host-only'] === true) {
113
- return false;
114
- }
115
-
116
- if (strlen($string) <= $domain_string) {
117
- // For obvious reasons, the string cannot be a suffix if the domain
118
- // is shorter than the domain string
119
- return false;
120
- }
121
-
122
- if (substr($string, -1 * strlen($domain_string)) !== $domain_string) {
123
- // The domain string should be a suffix of the string.
124
- return false;
125
- }
126
-
127
- $prefix = substr($string, 0, strlen($string) - strlen($domain_string));
128
- if (substr($prefix, -1) !== '.') {
129
- // The last character of the string that is not included in the
130
- // domain string should be a %x2E (".") character.
131
- return false;
132
- }
133
-
134
- if (preg_match('#^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$#', $string)) {
135
- // The string should be a host name (i.e., not an IP address).
136
- return false;
137
- }
138
-
139
- return true;
140
- }
141
-
142
- /**
143
- * Check if a cookie is valid for a given path
144
- *
145
- * From the path-match check in RFC 6265 section 5.1.4
146
- *
147
- * @param string $request_path Path to check
148
- * @return boolean Whether the cookie is valid for the given path
149
- */
150
- public function pathMatches($request_path) {
151
- if (empty($request_path)) {
152
- // Normalize empty path to root
153
- $request_path = '/';
154
- }
155
-
156
- if (!isset($this->attributes['path'])) {
157
- // Cookies created manually; cookies created by Requests will set
158
- // the path to the requested path
159
- return true;
160
- }
161
-
162
- $cookie_path = $this->attributes['path'];
163
-
164
- if ($cookie_path === $request_path) {
165
- // The cookie-path and the request-path are identical.
166
- return true;
167
- }
168
-
169
- if (strlen($request_path) > strlen($cookie_path) && substr($request_path, 0, strlen($cookie_path)) === $cookie_path) {
170
- if (substr($cookie_path, -1) === '/') {
171
- // The cookie-path is a prefix of the request-path, and the last
172
- // character of the cookie-path is %x2F ("/").
173
- return true;
174
- }
175
-
176
- if (substr($request_path, strlen($cookie_path), 1) === '/') {
177
- // The cookie-path is a prefix of the request-path, and the
178
- // first character of the request-path that is not included in
179
- // the cookie-path is a %x2F ("/") character.
180
- return true;
181
- }
182
- }
183
-
184
- return false;
185
- }
186
-
187
- /**
188
- * Normalize cookie and attributes
189
- *
190
- * @return boolean Whether the cookie was successfully normalized
191
- */
192
- public function normalize() {
193
- foreach ($this->attributes as $key => $value) {
194
- $orig_value = $value;
195
- switch ($key) {
196
- case 'domain':
197
- // Domain normalization, as per RFC 6265 section 5.2.3
198
- if ($value[0] === '.') {
199
- $value = substr($value, 1);
200
- }
201
- break;
202
- }
203
-
204
- if ($value !== $orig_value) {
205
- $this->attributes[$key] = $value;
206
- }
207
- }
208
-
209
- return true;
210
- }
211
-
212
- /**
213
- * Format a cookie for a Cookie header
214
- *
215
- * This is used when sending cookies to a server.
216
- *
217
- * @return string Cookie formatted for Cookie header
218
- */
219
- public function formatForHeader() {
220
- return sprintf('%s=%s', $this->name, $this->value);
221
- }
222
-
223
- /**
224
- * Format a cookie for a Set-Cookie header
225
- *
226
- * This is used when sending cookies to clients. This isn't really
227
- * applicable to client-side usage, but might be handy for debugging.
228
- *
229
- * @return string Cookie formatted for Set-Cookie header
230
- */
231
- public function formatForSetCookie() {
232
- $header_value = $this->formatForHeader();
233
- if (!empty($this->attributes)) {
234
- $parts = array();
235
- foreach ($this->attributes as $key => $value) {
236
- // Ignore non-associative attributes
237
- if (is_numeric($key)) {
238
- $parts[] = $value;
239
- }
240
- else {
241
- $parts[] = sprintf('%s=%s', $key, $value);
242
- }
243
- }
244
-
245
- $header_value .= '; ' . implode('; ', $parts);
246
- }
247
- return $header_value;
248
- }
249
-
250
- /**
251
- * Get the cookie value
252
- *
253
- * Attributes and other data can be accessed via methods.
254
- */
255
- public function __toString() {
256
- return $this->value;
257
- }
258
-
259
- /**
260
- * Parse a cookie string into a cookie object
261
- *
262
- * Based on Mozilla's parsing code in Firefox and related projects, which
263
- * is an intentional deviation from RFC 2109 and RFC 2616. RFC 6265
264
- * specifies some of this handling, but not in a thorough manner.
265
- *
266
- * @param string Cookie header value (from a Set-Cookie header)
267
- * @return Requests_Cookie Parsed cookie object
268
- */
269
- public static function parse($string, $name = '') {
270
- $parts = explode(';', $string);
271
- $kvparts = array_shift($parts);
272
-
273
- if (!empty($name)) {
274
- $value = $string;
275
- }
276
- elseif (strpos($kvparts, '=') === false) {
277
- // Some sites might only have a value without the equals separator.
278
- // Deviate from RFC 6265 and pretend it was actually a blank name
279
- // (`=foo`)
280
- //
281
- // https://bugzilla.mozilla.org/show_bug.cgi?id=169091
282
- $name = '';
283
- $value = $kvparts;
284
- }
285
- else {
286
- list($name, $value) = explode('=', $kvparts, 2);
287
- }
288
- $name = trim($name);
289
- $value = trim($value);
290
-
291
- // Attribute key are handled case-insensitively
292
- $attributes = new Requests_Utility_CaseInsensitiveDictionary();
293
-
294
- if (!empty($parts)) {
295
- foreach ($parts as $part) {
296
- if (strpos($part, '=') === false) {
297
- $part_key = $part;
298
- $part_value = true;
299
- }
300
- else {
301
- list($part_key, $part_value) = explode('=', $part, 2);
302
- $part_value = trim($part_value);
303
- }
304
-
305
- $part_key = trim($part_key);
306
- $attributes[$part_key] = $part_value;
307
- }
308
- }
309
-
310
- return new Requests_Cookie($name, $value, $attributes);
311
- }
312
-
313
- /**
314
- * Parse all Set-Cookie headers from request headers
315
- *
316
- * @param Requests_Response_Headers $headers
317
- * @return array
318
- */
319
- public static function parseFromHeaders(Requests_Response_Headers $headers, Requests_IRI $origin = null) {
320
- $cookie_headers = $headers->getValues('Set-Cookie');
321
- if (empty($cookie_headers)) {
322
- return array();
323
- }
324
-
325
- $cookies = array();
326
- foreach ($cookie_headers as $header) {
327
- $parsed = self::parse($header);
328
-
329
- // Default domain/path attributes
330
- if (empty($parsed->attributes['domain']) && !empty($origin)) {
331
- $parsed->attributes['domain'] = $origin->host;
332
- $parsed->flags['host-only'] = false;
333
- }
334
- else {
335
- $parsed->flags['host-only'] = true;
336
- }
337
-
338
- $path_is_valid = (!empty($parsed->attributes['path']) && $parsed->attributes['path'][0] === '/');
339
- if (!$path_is_valid && !empty($origin)) {
340
- $path = $origin->path;
341
-
342
- // Default path normalization as per RFC 6265 section 5.1.4
343
- if (substr($path, 0, 1) !== '/') {
344
- // If the uri-path is empty or if the first character of
345
- // the uri-path is not a %x2F ("/") character, output
346
- // %x2F ("/") and skip the remaining steps.
347
- $path = '/';
348
- }
349
- elseif (substr_count($path, '/') === 1) {
350
- // If the uri-path contains no more than one %x2F ("/")
351
- // character, output %x2F ("/") and skip the remaining
352
- // step.
353
- $path = '/';
354
- }
355
- else {
356
- // Output the characters of the uri-path from the first
357
- // character up to, but not including, the right-most
358
- // %x2F ("/").
359
- $path = substr($path, 0, strrpos($path, '/'));
360
- }
361
- $parsed->attributes['path'] = $path;
362
- }
363
-
364
- // Reject invalid cookie domains
365
- if (!$parsed->domainMatches($origin->host)) {
366
- continue;
367
- }
368
-
369
- $cookies[$parsed->name] = $parsed;
370
- }
371
-
372
- return $cookies;
373
- }
374
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Cookie/Jar.php DELETED
@@ -1,158 +0,0 @@
1
- <?php
2
- /**
3
- * Cookie holder object
4
- *
5
- * @package Requests
6
- * @subpackage Cookies
7
- */
8
-
9
- /**
10
- * Cookie holder object
11
- *
12
- * @package Requests
13
- * @subpackage Cookies
14
- */
15
- class Requests_Cookie_Jar implements ArrayAccess, IteratorAggregate {
16
- /**
17
- * Actual item data
18
- *
19
- * @var array
20
- */
21
- protected $cookies = array();
22
-
23
- /**
24
- * Create a new jar
25
- *
26
- * @param array $cookies Existing cookie values
27
- */
28
- public function __construct($cookies = array()) {
29
- $this->cookies = $cookies;
30
- }
31
-
32
- /**
33
- * Normalise cookie data into a Requests_Cookie
34
- *
35
- * @param string|Requests_Cookie $cookie
36
- * @return Requests_Cookie
37
- */
38
- public function normalizeCookie($cookie, $key = null) {
39
- if ($cookie instanceof Requests_Cookie) {
40
- return $cookie;
41
- }
42
-
43
- return Requests_Cookie::parse($cookie, $key);
44
- }
45
-
46
- /**
47
- * Check if the given item exists
48
- *
49
- * @param string $key Item key
50
- * @return boolean Does the item exist?
51
- */
52
- public function offsetExists($key) {
53
- return isset($this->cookies[$key]);
54
- }
55
-
56
- /**
57
- * Get the value for the item
58
- *
59
- * @param string $key Item key
60
- * @return string Item value
61
- */
62
- public function offsetGet($key) {
63
- if (!isset($this->cookies[$key]))
64
- return null;
65
-
66
- return $this->cookies[$key];
67
- }
68
-
69
- /**
70
- * Set the given item
71
- *
72
- * @throws Requests_Exception On attempting to use dictionary as list (`invalidset`)
73
- *
74
- * @param string $key Item name
75
- * @param string $value Item value
76
- */
77
- public function offsetSet($key, $value) {
78
- if ($key === null) {
79
- throw new Requests_Exception('Object is a dictionary, not a list', 'invalidset');
80
- }
81
-
82
- $this->cookies[$key] = $value;
83
- }
84
-
85
- /**
86
- * Unset the given header
87
- *
88
- * @param string $key
89
- */
90
- public function offsetUnset($key) {
91
- unset($this->cookies[$key]);
92
- }
93
-
94
- /**
95
- * Get an iterator for the data
96
- *
97
- * @return ArrayIterator
98
- */
99
- public function getIterator() {
100
- return new ArrayIterator($this->cookies);
101
- }
102
-
103
- /**
104
- * Register the cookie handler with the request's hooking system
105
- *
106
- * @param Requests_Hooker $hooks Hooking system
107
- */
108
- public function register(Requests_Hooker $hooks) {
109
- $hooks->register('requests.before_request', array($this, 'before_request'));
110
- $hooks->register('requests.before_redirect_check', array($this, 'before_redirect_check'));
111
- }
112
-
113
- /**
114
- * Add Cookie header to a request if we have any
115
- *
116
- * As per RFC 6265, cookies are separated by '; '
117
- *
118
- * @param string $url
119
- * @param array $headers
120
- * @param array $data
121
- * @param string $type
122
- * @param array $options
123
- */
124
- public function before_request($url, &$headers, &$data, &$type, &$options) {
125
- if ( ! $url instanceof Requests_IRI ) {
126
- $url = new Requests_IRI($url);
127
- }
128
-
129
- if (!empty($this->cookies)) {
130
- $cookies = array();
131
- foreach ($this->cookies as $key => $cookie) {
132
- $cookie = $this->normalizeCookie($cookie, $key);
133
-
134
- if ( $cookie->domainMatches( $url->host ) ) {
135
- $cookies[] = $cookie->formatForHeader();
136
- }
137
- }
138
-
139
- $headers['Cookie'] = implode('; ', $cookies);
140
- }
141
- }
142
-
143
- /**
144
- * Parse all cookies from a response and attach them to the response
145
- *
146
- * @var Requests_Response $response
147
- */
148
- public function before_redirect_check(Requests_Response &$return) {
149
- $url = $return->url;
150
- if ( ! $url instanceof Requests_IRI ) {
151
- $url = new Requests_IRI($url);
152
- }
153
-
154
- $cookies = Requests_Cookie::parseFromHeaders($return->headers, $url);
155
- $this->cookies = array_merge($this->cookies, $cookies);
156
- $return->cookies = $this;
157
- }
158
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception.php DELETED
@@ -1,62 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for HTTP requests
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for HTTP requests
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception extends Exception {
14
- /**
15
- * Type of exception
16
- *
17
- * @var string
18
- */
19
- protected $type;
20
-
21
- /**
22
- * Data associated with the exception
23
- *
24
- * @var mixed
25
- */
26
- protected $data;
27
-
28
- /**
29
- * Create a new exception
30
- *
31
- * @param string $message Exception message
32
- * @param string $type Exception type
33
- * @param mixed $data Associated data
34
- * @param integer $code Exception numerical code, if applicable
35
- */
36
- public function __construct($message, $type, $data = null, $code = 0) {
37
- parent::__construct($message, $code);
38
-
39
- $this->type = $type;
40
- $this->data = $data;
41
- }
42
-
43
- /**
44
- * Like {@see getCode()}, but a string code.
45
- *
46
- * @codeCoverageIgnore
47
- * @return string
48
- */
49
- public function getType() {
50
- return $this->type;
51
- }
52
-
53
- /**
54
- * Gives any relevant data
55
- *
56
- * @codeCoverageIgnore
57
- * @return mixed
58
- */
59
- public function getData() {
60
- return $this->data;
61
- }
62
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP.php DELETED
@@ -1,67 +0,0 @@
1
- <?php
2
- /**
3
- * Exception based on HTTP response
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception based on HTTP response
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP extends Requests_Exception {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 0;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'Unknown';
27
-
28
- /**
29
- * Create a new exception
30
- *
31
- * There is no mechanism to pass in the status code, as this is set by the
32
- * subclass used. Reason phrases can vary, however.
33
- *
34
- * @param string $reason Reason phrase
35
- * @param mixed $data Associated data
36
- */
37
- public function __construct($reason = null, $data = null) {
38
- if ($reason !== null) {
39
- $this->reason = $reason;
40
- }
41
-
42
- $message = sprintf('%d %s', $this->code, $this->reason);
43
- parent::__construct($message, 'httpresponse', $data, $this->code);
44
- }
45
-
46
- /**
47
- * Get the status message
48
- */
49
- public function getReason() {
50
- return $this->reason;
51
- }
52
-
53
- /**
54
- * Get the correct exception class for a given error code
55
- *
56
- * @param int $code HTTP status code
57
- * @return string Exception class name to use
58
- */
59
- public static function get_class($code) {
60
- $class = sprintf('Requests_Exception_HTTP_%d', $code);
61
- if (class_exists($class)) {
62
- return $class;
63
- }
64
-
65
- return 'Requests_Exception_HTTP_Unknown';
66
- }
67
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/400.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 400 Bad Request responses
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for 400 Bad Request responses
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP_400 extends Requests_Exception_HTTP {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 400;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'Bad Request';
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/401.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 401 Unauthorized responses
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for 401 Unauthorized responses
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP_401 extends Requests_Exception_HTTP {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 401;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'Unauthorized';
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/402.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 402 Payment Required responses
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for 402 Payment Required responses
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP_402 extends Requests_Exception_HTTP {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 402;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'Payment Required';
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/403.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 403 Forbidden responses
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for 403 Forbidden responses
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP_403 extends Requests_Exception_HTTP {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 403;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'Forbidden';
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/404.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 404 Not Found responses
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for 404 Not Found responses
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP_404 extends Requests_Exception_HTTP {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 404;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'Not Found';
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/405.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 405 Method Not Allowed responses
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for 405 Method Not Allowed responses
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP_405 extends Requests_Exception_HTTP {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 405;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'Method Not Allowed';
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/406.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 406 Not Acceptable responses
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for 406 Not Acceptable responses
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP_406 extends Requests_Exception_HTTP {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 406;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'Not Acceptable';
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/407.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 407 Proxy Authentication Required responses
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for 407 Proxy Authentication Required responses
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP_407 extends Requests_Exception_HTTP {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 407;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'Proxy Authentication Required';
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/408.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 408 Request Timeout responses
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for 408 Request Timeout responses
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP_408 extends Requests_Exception_HTTP {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 408;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'Request Timeout';
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/409.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 409 Conflict responses
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for 409 Conflict responses
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP_409 extends Requests_Exception_HTTP {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 409;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'Conflict';
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/410.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 410 Gone responses
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for 410 Gone responses
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP_410 extends Requests_Exception_HTTP {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 410;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'Gone';
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/411.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 411 Length Required responses
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for 411 Length Required responses
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP_411 extends Requests_Exception_HTTP {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 411;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'Length Required';
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/412.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 412 Precondition Failed responses
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for 412 Precondition Failed responses
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP_412 extends Requests_Exception_HTTP {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 412;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'Precondition Failed';
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/413.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 413 Request Entity Too Large responses
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for 413 Request Entity Too Large responses
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP_413 extends Requests_Exception_HTTP {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 413;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'Request Entity Too Large';
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/414.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 414 Request-URI Too Large responses
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for 414 Request-URI Too Large responses
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP_414 extends Requests_Exception_HTTP {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 414;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'Request-URI Too Large';
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/415.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 415 Unsupported Media Type responses
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for 415 Unsupported Media Type responses
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP_415 extends Requests_Exception_HTTP {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 415;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'Unsupported Media Type';
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/416.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 416 Requested Range Not Satisfiable responses
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for 416 Requested Range Not Satisfiable responses
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP_416 extends Requests_Exception_HTTP {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 416;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'Requested Range Not Satisfiable';
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/417.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 417 Expectation Failed responses
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for 417 Expectation Failed responses
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP_417 extends Requests_Exception_HTTP {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 417;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'Expectation Failed';
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/418.php DELETED
@@ -1,29 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 418 I'm A Teapot responses
4
- *
5
- * @see http://tools.ietf.org/html/rfc2324
6
- * @package Requests
7
- */
8
-
9
- /**
10
- * Exception for 418 I'm A Teapot responses
11
- *
12
- * @see http://tools.ietf.org/html/rfc2324
13
- * @package Requests
14
- */
15
- class Requests_Exception_HTTP_418 extends Requests_Exception_HTTP {
16
- /**
17
- * HTTP status code
18
- *
19
- * @var integer
20
- */
21
- protected $code = 418;
22
-
23
- /**
24
- * Reason phrase
25
- *
26
- * @var string
27
- */
28
- protected $reason = "I'm A Teapot";
29
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/428.php DELETED
@@ -1,29 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 428 Precondition Required responses
4
- *
5
- * @see http://tools.ietf.org/html/rfc6585
6
- * @package Requests
7
- */
8
-
9
- /**
10
- * Exception for 428 Precondition Required responses
11
- *
12
- * @see http://tools.ietf.org/html/rfc6585
13
- * @package Requests
14
- */
15
- class Requests_Exception_HTTP_428 extends Requests_Exception_HTTP {
16
- /**
17
- * HTTP status code
18
- *
19
- * @var integer
20
- */
21
- protected $code = 428;
22
-
23
- /**
24
- * Reason phrase
25
- *
26
- * @var string
27
- */
28
- protected $reason = 'Precondition Required';
29
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/429.php DELETED
@@ -1,29 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 429 Too Many Requests responses
4
- *
5
- * @see http://tools.ietf.org/html/draft-nottingham-http-new-status-04
6
- * @package Requests
7
- */
8
-
9
- /**
10
- * Exception for 429 Too Many Requests responses
11
- *
12
- * @see http://tools.ietf.org/html/draft-nottingham-http-new-status-04
13
- * @package Requests
14
- */
15
- class Requests_Exception_HTTP_429 extends Requests_Exception_HTTP {
16
- /**
17
- * HTTP status code
18
- *
19
- * @var integer
20
- */
21
- protected $code = 429;
22
-
23
- /**
24
- * Reason phrase
25
- *
26
- * @var string
27
- */
28
- protected $reason = 'Too Many Requests';
29
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/431.php DELETED
@@ -1,29 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 431 Request Header Fields Too Large responses
4
- *
5
- * @see http://tools.ietf.org/html/rfc6585
6
- * @package Requests
7
- */
8
-
9
- /**
10
- * Exception for 431 Request Header Fields Too Large responses
11
- *
12
- * @see http://tools.ietf.org/html/rfc6585
13
- * @package Requests
14
- */
15
- class Requests_Exception_HTTP_431 extends Requests_Exception_HTTP {
16
- /**
17
- * HTTP status code
18
- *
19
- * @var integer
20
- */
21
- protected $code = 431;
22
-
23
- /**
24
- * Reason phrase
25
- *
26
- * @var string
27
- */
28
- protected $reason = 'Request Header Fields Too Large';
29
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/500.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 500 Internal Server Error responses
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for 500 Internal Server Error responses
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP_500 extends Requests_Exception_HTTP {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 500;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'Internal Server Error';
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/501.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 501 Not Implemented responses
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for 501 Not Implemented responses
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP_501 extends Requests_Exception_HTTP {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 501;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'Not Implemented';
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/502.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 502 Bad Gateway responses
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for 502 Bad Gateway responses
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP_502 extends Requests_Exception_HTTP {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 502;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'Bad Gateway';
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/503.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 503 Service Unavailable responses
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for 503 Service Unavailable responses
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP_503 extends Requests_Exception_HTTP {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 503;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'Service Unavailable';
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/504.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 504 Gateway Timeout responses
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for 504 Gateway Timeout responses
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP_504 extends Requests_Exception_HTTP {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 504;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'Gateway Timeout';
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/505.php DELETED
@@ -1,27 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 505 HTTP Version Not Supported responses
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for 505 HTTP Version Not Supported responses
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP_505 extends Requests_Exception_HTTP {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 505;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'HTTP Version Not Supported';
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/511.php DELETED
@@ -1,29 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for 511 Network Authentication Required responses
4
- *
5
- * @see http://tools.ietf.org/html/rfc6585
6
- * @package Requests
7
- */
8
-
9
- /**
10
- * Exception for 511 Network Authentication Required responses
11
- *
12
- * @see http://tools.ietf.org/html/rfc6585
13
- * @package Requests
14
- */
15
- class Requests_Exception_HTTP_511 extends Requests_Exception_HTTP {
16
- /**
17
- * HTTP status code
18
- *
19
- * @var integer
20
- */
21
- protected $code = 511;
22
-
23
- /**
24
- * Reason phrase
25
- *
26
- * @var string
27
- */
28
- protected $reason = 'Network Authentication Required';
29
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Exception/HTTP/Unknown.php DELETED
@@ -1,44 +0,0 @@
1
- <?php
2
- /**
3
- * Exception for unknown status responses
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Exception for unknown status responses
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Exception_HTTP_Unknown extends Requests_Exception_HTTP {
14
- /**
15
- * HTTP status code
16
- *
17
- * @var integer
18
- */
19
- protected $code = 0;
20
-
21
- /**
22
- * Reason phrase
23
- *
24
- * @var string
25
- */
26
- protected $reason = 'Unknown';
27
-
28
- /**
29
- * Create a new exception
30
- *
31
- * If `$data` is an instance of {@see Requests_Response}, uses the status
32
- * code from it. Otherwise, sets as 0
33
- *
34
- * @param string $reason Reason phrase
35
- * @param mixed $data Associated data
36
- */
37
- public function __construct($reason = null, $data = null) {
38
- if ($data instanceof Requests_Response) {
39
- $this->code = $data->status_code;
40
- }
41
-
42
- parent::__construct($reason, $data);
43
- }
44
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Hooker.php DELETED
@@ -1,33 +0,0 @@
1
- <?php
2
- /**
3
- * Event dispatcher
4
- *
5
- * @package Requests
6
- * @subpackage Utilities
7
- */
8
-
9
- /**
10
- * Event dispatcher
11
- *
12
- * @package Requests
13
- * @subpackage Utilities
14
- */
15
- interface Requests_Hooker {
16
- /**
17
- * Register a callback for a hook
18
- *
19
- * @param string $hook Hook name
20
- * @param callback $callback Function/method to call on event
21
- * @param int $priority Priority number. <0 is executed earlier, >0 is executed later
22
- */
23
- public function register($hook, $callback, $priority = 0);
24
-
25
- /**
26
- * Dispatch a message
27
- *
28
- * @param string $hook Hook name
29
- * @param array $parameters Parameters to pass to callbacks
30
- * @return boolean Successfulness
31
- */
32
- public function dispatch($hook, $parameters = array());
33
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Hooks.php DELETED
@@ -1,61 +0,0 @@
1
- <?php
2
- /**
3
- * Handles adding and dispatching events
4
- *
5
- * @package Requests
6
- * @subpackage Utilities
7
- */
8
-
9
- /**
10
- * Handles adding and dispatching events
11
- *
12
- * @package Requests
13
- * @subpackage Utilities
14
- */
15
- class Requests_Hooks implements Requests_Hooker {
16
- /**
17
- * Constructor
18
- */
19
- public function __construct() {
20
- // pass
21
- }
22
-
23
- /**
24
- * Register a callback for a hook
25
- *
26
- * @param string $hook Hook name
27
- * @param callback $callback Function/method to call on event
28
- * @param int $priority Priority number. <0 is executed earlier, >0 is executed later
29
- */
30
- public function register($hook, $callback, $priority = 0) {
31
- if (!isset($this->hooks[$hook])) {
32
- $this->hooks[$hook] = array();
33
- }
34
- if (!isset($this->hooks[$hook][$priority])) {
35
- $this->hooks[$hook][$priority] = array();
36
- }
37
-
38
- $this->hooks[$hook][$priority][] = $callback;
39
- }
40
-
41
- /**
42
- * Dispatch a message
43
- *
44
- * @param string $hook Hook name
45
- * @param array $parameters Parameters to pass to callbacks
46
- * @return boolean Successfulness
47
- */
48
- public function dispatch($hook, $parameters = array()) {
49
- if (empty($this->hooks[$hook])) {
50
- return false;
51
- }
52
-
53
- foreach ($this->hooks[$hook] as $priority => $hooked) {
54
- foreach ($hooked as $callback) {
55
- call_user_func_array($callback, $parameters);
56
- }
57
- }
58
-
59
- return true;
60
- }
61
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/IDNAEncoder.php DELETED
@@ -1,390 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * IDNA URL encoder
5
- *
6
- * Note: Not fully compliant, as nameprep does nothing yet.
7
- *
8
- * @package Requests
9
- * @subpackage Utilities
10
- * @see http://tools.ietf.org/html/rfc3490 IDNA specification
11
- * @see http://tools.ietf.org/html/rfc3492 Punycode/Bootstrap specification
12
- */
13
- class Requests_IDNAEncoder {
14
- /**
15
- * ACE prefix used for IDNA
16
- *
17
- * @see http://tools.ietf.org/html/rfc3490#section-5
18
- * @var string
19
- */
20
- const ACE_PREFIX = 'xn--';
21
-
22
- /**#@+
23
- * Bootstrap constant for Punycode
24
- *
25
- * @see http://tools.ietf.org/html/rfc3492#section-5
26
- * @var int
27
- */
28
- const BOOTSTRAP_BASE = 36;
29
- const BOOTSTRAP_TMIN = 1;
30
- const BOOTSTRAP_TMAX = 26;
31
- const BOOTSTRAP_SKEW = 38;
32
- const BOOTSTRAP_DAMP = 700;
33
- const BOOTSTRAP_INITIAL_BIAS = 72;
34
- const BOOTSTRAP_INITIAL_N = 128;
35
- /**#@-*/
36
-
37
- /**
38
- * Encode a hostname using Punycode
39
- *
40
- * @param string $string Hostname
41
- * @return string Punycode-encoded hostname
42
- */
43
- public static function encode($string) {
44
- $parts = explode('.', $string);
45
- foreach ($parts as &$part) {
46
- $part = self::to_ascii($part);
47
- }
48
- return implode('.', $parts);
49
- }
50
-
51
- /**
52
- * Convert a UTF-8 string to an ASCII string using Punycode
53
- *
54
- * @throws Requests_Exception Provided string longer than 64 ASCII characters (`idna.provided_too_long`)
55
- * @throws Requests_Exception Prepared string longer than 64 ASCII characters (`idna.prepared_too_long`)
56
- * @throws Requests_Exception Provided string already begins with xn-- (`idna.provided_is_prefixed`)
57
- * @throws Requests_Exception Encoded string longer than 64 ASCII characters (`idna.encoded_too_long`)
58
- *
59
- * @param string $string ASCII or UTF-8 string (max length 64 characters)
60
- * @return string ASCII string
61
- */
62
- public static function to_ascii($string) {
63
- // Step 1: Check if the string is already ASCII
64
- if (self::is_ascii($string)) {
65
- // Skip to step 7
66
- if (strlen($string) < 64) {
67
- return $string;
68
- }
69
-
70
- throw new Requests_Exception('Provided string is too long', 'idna.provided_too_long', $string);
71
- }
72
-
73
- // Step 2: nameprep
74
- $string = self::nameprep($string);
75
-
76
- // Step 3: UseSTD3ASCIIRules is false, continue
77
- // Step 4: Check if it's ASCII now
78
- if (self::is_ascii($string)) {
79
- // Skip to step 7
80
- if (strlen($string) < 64) {
81
- return $string;
82
- }
83
-
84
- throw new Requests_Exception('Prepared string is too long', 'idna.prepared_too_long', $string);
85
- }
86
-
87
- // Step 5: Check ACE prefix
88
- if (strpos($string, self::ACE_PREFIX) === 0) {
89
- throw new Requests_Exception('Provided string begins with ACE prefix', 'idna.provided_is_prefixed', $string);
90
- }
91
-
92
- // Step 6: Encode with Punycode
93
- $string = self::punycode_encode($string);
94
-
95
- // Step 7: Prepend ACE prefix
96
- $string = self::ACE_PREFIX . $string;
97
-
98
- // Step 8: Check size
99
- if (strlen($string) < 64) {
100
- return $string;
101
- }
102
-
103
- throw new Requests_Exception('Encoded string is too long', 'idna.encoded_too_long', $string);
104
- }
105
-
106
- /**
107
- * Check whether a given string contains only ASCII characters
108
- *
109
- * @internal (Testing found regex was the fastest implementation)
110
- *
111
- * @param string $string
112
- * @return bool Is the string ASCII-only?
113
- */
114
- protected static function is_ascii($string) {
115
- return (preg_match('/(?:[^\x00-\x7F])/', $string) !== 1);
116
- }
117
-
118
- /**
119
- * Prepare a string for use as an IDNA name
120
- *
121
- * @todo Implement this based on RFC 3491 and the newer 5891
122
- * @param string $string
123
- * @return string Prepared string
124
- */
125
- protected static function nameprep($string) {
126
- return $string;
127
- }
128
-
129
- /**
130
- * Convert a UTF-8 string to a UCS-4 codepoint array
131
- *
132
- * Based on Requests_IRI::replace_invalid_with_pct_encoding()
133
- *
134
- * @throws Requests_Exception Invalid UTF-8 codepoint (`idna.invalidcodepoint`)
135
- * @param string $input
136
- * @return array Unicode code points
137
- */
138
- protected static function utf8_to_codepoints($input) {
139
- $codepoints = array();
140
-
141
- // Get number of bytes
142
- $strlen = strlen($input);
143
-
144
- for ($position = 0; $position < $strlen; $position++) {
145
- $value = ord($input[$position]);
146
-
147
- // One byte sequence:
148
- if ((~$value & 0x80) === 0x80) {
149
- $character = $value;
150
- $length = 1;
151
- $remaining = 0;
152
- }
153
- // Two byte sequence:
154
- elseif (($value & 0xE0) === 0xC0) {
155
- $character = ($value & 0x1F) << 6;
156
- $length = 2;
157
- $remaining = 1;
158
- }
159
- // Three byte sequence:
160
- elseif (($value & 0xF0) === 0xE0) {
161
- $character = ($value & 0x0F) << 12;
162
- $length = 3;
163
- $remaining = 2;
164
- }
165
- // Four byte sequence:
166
- elseif (($value & 0xF8) === 0xF0) {
167
- $character = ($value & 0x07) << 18;
168
- $length = 4;
169
- $remaining = 3;
170
- }
171
- // Invalid byte:
172
- else {
173
- throw new Requests_Exception('Invalid Unicode codepoint', 'idna.invalidcodepoint', $value);
174
- }
175
-
176
- if ($remaining > 0) {
177
- if ($position + $length > $strlen) {
178
- throw new Requests_Exception('Invalid Unicode codepoint', 'idna.invalidcodepoint', $character);
179
- }
180
- for ($position++; $remaining > 0; $position++) {
181
- $value = ord($input[$position]);
182
-
183
- // If it is invalid, count the sequence as invalid and reprocess the current byte:
184
- if (($value & 0xC0) !== 0x80) {
185
- throw new Requests_Exception('Invalid Unicode codepoint', 'idna.invalidcodepoint', $character);
186
- }
187
-
188
- $character |= ($value & 0x3F) << (--$remaining * 6);
189
- }
190
- $position--;
191
- }
192
-
193
- if (
194
- // Non-shortest form sequences are invalid
195
- $length > 1 && $character <= 0x7F
196
- || $length > 2 && $character <= 0x7FF
197
- || $length > 3 && $character <= 0xFFFF
198
- // Outside of range of ucschar codepoints
199
- // Noncharacters
200
- || ($character & 0xFFFE) === 0xFFFE
201
- || $character >= 0xFDD0 && $character <= 0xFDEF
202
- || (
203
- // Everything else not in ucschar
204
- $character > 0xD7FF && $character < 0xF900
205
- || $character < 0x20
206
- || $character > 0x7E && $character < 0xA0
207
- || $character > 0xEFFFD
208
- )
209
- ) {
210
- throw new Requests_Exception('Invalid Unicode codepoint', 'idna.invalidcodepoint', $character);
211
- }
212
-
213
- $codepoints[] = $character;
214
- }
215
-
216
- return $codepoints;
217
- }
218
-
219
- /**
220
- * RFC3492-compliant encoder
221
- *
222
- * @internal Pseudo-code from Section 6.3 is commented with "#" next to relevant code
223
- * @throws Requests_Exception On character outside of the domain (never happens with Punycode) (`idna.character_outside_domain`)
224
- *
225
- * @param string $input UTF-8 encoded string to encode
226
- * @return string Punycode-encoded string
227
- */
228
- public static function punycode_encode($input) {
229
- $output = '';
230
- # let n = initial_n
231
- $n = self::BOOTSTRAP_INITIAL_N;
232
- # let delta = 0
233
- $delta = 0;
234
- # let bias = initial_bias
235
- $bias = self::BOOTSTRAP_INITIAL_BIAS;
236
- # let h = b = the number of basic code points in the input
237
- $h = $b = 0; // see loop
238
- # copy them to the output in order
239
- $codepoints = self::utf8_to_codepoints($input);
240
-
241
- foreach ($codepoints as $char) {
242
- if ($char < 128) {
243
- // Character is valid ASCII
244
- // TODO: this should also check if it's valid for a URL
245
- $output .= chr($char);
246
- $h++;
247
- }
248
- // Check if the character is non-ASCII, but below initial n
249
- // This never occurs for Punycode, so ignore in coverage
250
- // @codeCoverageIgnoreStart
251
- elseif ($char < $n) {
252
- throw new Requests_Exception('Invalid character', 'idna.character_outside_domain', $char);
253
- }
254
- // @codeCoverageIgnoreEnd
255
- else {
256
- $extended[$char] = true;
257
- }
258
- }
259
- $extended = array_keys($extended);
260
- sort($extended);
261
- $b = $h;
262
- # [copy them] followed by a delimiter if b > 0
263
- if (strlen($output) > 0) {
264
- $output .= '-';
265
- }
266
- # {if the input contains a non-basic code point < n then fail}
267
- # while h < length(input) do begin
268
- while ($h < count($codepoints)) {
269
- # let m = the minimum code point >= n in the input
270
- $m = array_shift($extended);
271
- //printf('next code point to insert is %s' . PHP_EOL, dechex($m));
272
- # let delta = delta + (m - n) * (h + 1), fail on overflow
273
- $delta += ($m - $n) * ($h + 1);
274
- # let n = m
275
- $n = $m;
276
- # for each code point c in the input (in order) do begin
277
- for ($num = 0; $num < count($codepoints); $num++) {
278
- $c = $codepoints[$num];
279
- # if c < n then increment delta, fail on overflow
280
- if ($c < $n) {
281
- $delta++;
282
- }
283
- # if c == n then begin
284
- elseif ($c === $n) {
285
- # let q = delta
286
- $q = $delta;
287
- # for k = base to infinity in steps of base do begin
288
- for ($k = self::BOOTSTRAP_BASE; ; $k += self::BOOTSTRAP_BASE) {
289
- # let t = tmin if k <= bias {+ tmin}, or
290
- # tmax if k >= bias + tmax, or k - bias otherwise
291
- if ($k <= ($bias + self::BOOTSTRAP_TMIN)) {
292
- $t = self::BOOTSTRAP_TMIN;
293
- }
294
- elseif ($k >= ($bias + self::BOOTSTRAP_TMAX)) {
295
- $t = self::BOOTSTRAP_TMAX;
296
- }
297
- else {
298
- $t = $k - $bias;
299
- }
300
- # if q < t then break
301
- if ($q < $t) {
302
- break;
303
- }
304
- # output the code point for digit t + ((q - t) mod (base - t))
305
- $digit = $t + (($q - $t) % (self::BOOTSTRAP_BASE - $t));
306
- //printf('needed delta is %d, encodes as "%s"' . PHP_EOL, $delta, self::digit_to_char($digit));
307
- $output .= self::digit_to_char($digit);
308
- # let q = (q - t) div (base - t)
309
- $q = floor(($q - $t) / (self::BOOTSTRAP_BASE - $t));
310
- # end
311
- }
312
- # output the code point for digit q
313
- $output .= self::digit_to_char($q);
314
- //printf('needed delta is %d, encodes as "%s"' . PHP_EOL, $delta, self::digit_to_char($q));
315
- # let bias = adapt(delta, h + 1, test h equals b?)
316
- $bias = self::adapt($delta, $h + 1, $h === $b);
317
- //printf('bias becomes %d' . PHP_EOL, $bias);
318
- # let delta = 0
319
- $delta = 0;
320
- # increment h
321
- $h++;
322
- # end
323
- }
324
- # end
325
- }
326
- # increment delta and n
327
- $delta++;
328
- $n++;
329
- # end
330
- }
331
-
332
- return $output;
333
- }
334
-
335
- /**
336
- * Convert a digit to its respective character
337
- *
338
- * @see http://tools.ietf.org/html/rfc3492#section-5
339
- * @throws Requests_Exception On invalid digit (`idna.invalid_digit`)
340
- *
341
- * @param int $digit Digit in the range 0-35
342
- * @return string Single character corresponding to digit
343
- */
344
- protected static function digit_to_char($digit) {
345
- // @codeCoverageIgnoreStart
346
- // As far as I know, this never happens, but still good to be sure.
347
- if ($digit < 0 || $digit > 35) {
348
- throw new Requests_Exception(sprintf('Invalid digit %d', $digit), 'idna.invalid_digit', $digit);
349
- }
350
- // @codeCoverageIgnoreEnd
351
- $digits = 'abcdefghijklmnopqrstuvwxyz0123456789';
352
- return substr($digits, $digit, 1);
353
- }
354
-
355
- /**
356
- * Adapt the bias
357
- *
358
- * @see http://tools.ietf.org/html/rfc3492#section-6.1
359
- * @param int $delta
360
- * @param int $numpoints
361
- * @param bool $firsttime
362
- * @return int New bias
363
- */
364
- protected static function adapt($delta, $numpoints, $firsttime) {
365
- # function adapt(delta,numpoints,firsttime):
366
- # if firsttime then let delta = delta div damp
367
- if ($firsttime) {
368
- $delta = floor($delta / self::BOOTSTRAP_DAMP);
369
- }
370
- # else let delta = delta div 2
371
- else {
372
- $delta = floor($delta / 2);
373
- }
374
- # let delta = delta + (delta div numpoints)
375
- $delta += floor($delta / $numpoints);
376
- # let k = 0
377
- $k = 0;
378
- # while delta > ((base - tmin) * tmax) div 2 do begin
379
- $max = floor(((self::BOOTSTRAP_BASE - self::BOOTSTRAP_TMIN) * self::BOOTSTRAP_TMAX) / 2);
380
- while ($delta > $max) {
381
- # let delta = delta div (base - tmin)
382
- $delta = floor($delta / (self::BOOTSTRAP_BASE - self::BOOTSTRAP_TMIN));
383
- # let k = k + base
384
- $k += self::BOOTSTRAP_BASE;
385
- # end
386
- }
387
- # return k + (((base - tmin + 1) * delta) div (delta + skew))
388
- return $k + floor(((self::BOOTSTRAP_BASE - self::BOOTSTRAP_TMIN + 1) * $delta) / ($delta + self::BOOTSTRAP_SKEW));
389
- }
390
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/IPv6.php DELETED
@@ -1,221 +0,0 @@
1
- <?php
2
- /**
3
- * Class to validate and to work with IPv6 addresses
4
- *
5
- * @package Requests
6
- * @subpackage Utilities
7
- */
8
-
9
- /**
10
- * Class to validate and to work with IPv6 addresses
11
- *
12
- * This was originally based on the PEAR class of the same name, but has been
13
- * entirely rewritten.
14
- *
15
- * @package Requests
16
- * @subpackage Utilities
17
- */
18
- class Requests_IPv6
19
- {
20
- /**
21
- * Uncompresses an IPv6 address
22
- *
23
- * RFC 4291 allows you to compress consecutive zero pieces in an address to
24
- * '::'. This method expects a valid IPv6 address and expands the '::' to
25
- * the required number of zero pieces.
26
- *
27
- * Example: FF01::101 -> FF01:0:0:0:0:0:0:101
28
- * ::1 -> 0:0:0:0:0:0:0:1
29
- *
30
- * @author Alexander Merz <alexander.merz@web.de>
31
- * @author elfrink at introweb dot nl
32
- * @author Josh Peck <jmp at joshpeck dot org>
33
- * @copyright 2003-2005 The PHP Group
34
- * @license http://www.opensource.org/licenses/bsd-license.php
35
- * @param string $ip An IPv6 address
36
- * @return string The uncompressed IPv6 address
37
- */
38
- public static function uncompress($ip)
39
- {
40
- $c1 = -1;
41
- $c2 = -1;
42
- if (substr_count($ip, '::') === 1)
43
- {
44
- list($ip1, $ip2) = explode('::', $ip);
45
- if ($ip1 === '')
46
- {
47
- $c1 = -1;
48
- }
49
- else
50
- {
51
- $c1 = substr_count($ip1, ':');
52
- }
53
- if ($ip2 === '')
54
- {
55
- $c2 = -1;
56
- }
57
- else
58
- {
59
- $c2 = substr_count($ip2, ':');
60
- }
61
- if (strpos($ip2, '.') !== false)
62
- {
63
- $c2++;
64
- }
65
- // ::
66
- if ($c1 === -1 && $c2 === -1)
67
- {
68
- $ip = '0:0:0:0:0:0:0:0';
69
- }
70
- // ::xxx
71
- else if ($c1 === -1)
72
- {
73
- $fill = str_repeat('0:', 7 - $c2);
74
- $ip = str_replace('::', $fill, $ip);
75
- }
76
- // xxx::
77
- else if ($c2 === -1)
78
- {
79
- $fill = str_repeat(':0', 7 - $c1);
80
- $ip = str_replace('::', $fill, $ip);
81
- }
82
- // xxx::xxx
83
- else
84
- {
85
- $fill = ':' . str_repeat('0:', 6 - $c2 - $c1);
86
- $ip = str_replace('::', $fill, $ip);
87
- }
88
- }
89
- return $ip;
90
- }
91
-
92
- /**
93
- * Compresses an IPv6 address
94
- *
95
- * RFC 4291 allows you to compress consecutive zero pieces in an address to
96
- * '::'. This method expects a valid IPv6 address and compresses consecutive
97
- * zero pieces to '::'.
98
- *
99
- * Example: FF01:0:0:0:0:0:0:101 -> FF01::101
100
- * 0:0:0:0:0:0:0:1 -> ::1
101
- *
102
- * @see uncompress()
103
- * @param string $ip An IPv6 address
104
- * @return string The compressed IPv6 address
105
- */
106
- public static function compress($ip)
107
- {
108
- // Prepare the IP to be compressed
109
- $ip = self::uncompress($ip);
110
- $ip_parts = self::split_v6_v4($ip);
111
-
112
- // Replace all leading zeros
113
- $ip_parts[0] = preg_replace('/(^|:)0+([0-9])/', '\1\2', $ip_parts[0]);
114
-
115
- // Find bunches of zeros
116
- if (preg_match_all('/(?:^|:)(?:0(?::|$))+/', $ip_parts[0], $matches, PREG_OFFSET_CAPTURE))
117
- {
118
- $max = 0;
119
- $pos = null;
120
- foreach ($matches[0] as $match)
121
- {
122
- if (strlen($match[0]) > $max)
123
- {
124
- $max = strlen($match[0]);
125
- $pos = $match[1];
126
- }
127
- }
128
-
129
- $ip_parts[0] = substr_replace($ip_parts[0], '::', $pos, $max);
130
- }
131
-
132
- if ($ip_parts[1] !== '')
133
- {
134
- return implode(':', $ip_parts);
135
- }
136
- else
137
- {
138
- return $ip_parts[0];
139
- }
140
- }
141
-
142
- /**
143
- * Splits an IPv6 address into the IPv6 and IPv4 representation parts
144
- *
145
- * RFC 4291 allows you to represent the last two parts of an IPv6 address
146
- * using the standard IPv4 representation
147
- *
148
- * Example: 0:0:0:0:0:0:13.1.68.3
149
- * 0:0:0:0:0:FFFF:129.144.52.38
150
- *
151
- * @param string $ip An IPv6 address
152
- * @return array [0] contains the IPv6 represented part, and [1] the IPv4 represented part
153
- */
154
- private static function split_v6_v4($ip)
155
- {
156
- if (strpos($ip, '.') !== false)
157
- {
158
- $pos = strrpos($ip, ':');
159
- $ipv6_part = substr($ip, 0, $pos);
160
- $ipv4_part = substr($ip, $pos + 1);
161
- return array($ipv6_part, $ipv4_part);
162
- }
163
- else
164
- {
165
- return array($ip, '');
166
- }
167
- }
168
-
169
- /**
170
- * Checks an IPv6 address
171
- *
172
- * Checks if the given IP is a valid IPv6 address
173
- *
174
- * @param string $ip An IPv6 address
175
- * @return bool true if $ip is a valid IPv6 address
176
- */
177
- public static function check_ipv6($ip)
178
- {
179
- $ip = self::uncompress($ip);
180
- list($ipv6, $ipv4) = self::split_v6_v4($ip);
181
- $ipv6 = explode(':', $ipv6);
182
- $ipv4 = explode('.', $ipv4);
183
- if (count($ipv6) === 8 && count($ipv4) === 1 || count($ipv6) === 6 && count($ipv4) === 4)
184
- {
185
- foreach ($ipv6 as $ipv6_part)
186
- {
187
- // The section can't be empty
188
- if ($ipv6_part === '')
189
- return false;
190
-
191
- // Nor can it be over four characters
192
- if (strlen($ipv6_part) > 4)
193
- return false;
194
-
195
- // Remove leading zeros (this is safe because of the above)
196
- $ipv6_part = ltrim($ipv6_part, '0');
197
- if ($ipv6_part === '')
198
- $ipv6_part = '0';
199
-
200
- // Check the value is valid
201
- $value = hexdec($ipv6_part);
202
- if (dechex($value) !== strtolower($ipv6_part) || $value < 0 || $value > 0xFFFF)
203
- return false;
204
- }
205
- if (count($ipv4) === 4)
206
- {
207
- foreach ($ipv4 as $ipv4_part)
208
- {
209
- $value = (int) $ipv4_part;
210
- if ((string) $value !== $ipv4_part || $value < 0 || $value > 0xFF)
211
- return false;
212
- }
213
- }
214
- return true;
215
- }
216
- else
217
- {
218
- return false;
219
- }
220
- }
221
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/IRI.php DELETED
@@ -1,1220 +0,0 @@
1
- <?php
2
- /**
3
- * IRI parser/serialiser/normaliser
4
- *
5
- * @package Requests
6
- * @subpackage Utilities
7
- */
8
-
9
- /**
10
- * IRI parser/serialiser/normaliser
11
- *
12
- * Copyright (c) 2007-2010, Geoffrey Sneddon and Steve Minutillo.
13
- * All rights reserved.
14
- *
15
- * Redistribution and use in source and binary forms, with or without
16
- * modification, are permitted provided that the following conditions are met:
17
- *
18
- * * Redistributions of source code must retain the above copyright notice,
19
- * this list of conditions and the following disclaimer.
20
- *
21
- * * Redistributions in binary form must reproduce the above copyright notice,
22
- * this list of conditions and the following disclaimer in the documentation
23
- * and/or other materials provided with the distribution.
24
- *
25
- * * Neither the name of the SimplePie Team nor the names of its contributors
26
- * may be used to endorse or promote products derived from this software
27
- * without specific prior written permission.
28
- *
29
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
30
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
31
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
32
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
33
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
34
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
35
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
36
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
37
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
38
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
39
- * POSSIBILITY OF SUCH DAMAGE.
40
- *
41
- * @package Requests
42
- * @subpackage Utilities
43
- * @author Geoffrey Sneddon
44
- * @author Steve Minutillo
45
- * @copyright 2007-2009 Geoffrey Sneddon and Steve Minutillo
46
- * @license http://www.opensource.org/licenses/bsd-license.php
47
- * @link http://hg.gsnedders.com/iri/
48
- */
49
- class Requests_IRI
50
- {
51
- /**
52
- * Scheme
53
- *
54
- * @var string
55
- */
56
- protected $scheme = null;
57
-
58
- /**
59
- * User Information
60
- *
61
- * @var string
62
- */
63
- protected $iuserinfo = null;
64
-
65
- /**
66
- * ihost
67
- *
68
- * @var string
69
- */
70
- protected $ihost = null;
71
-
72
- /**
73
- * Port
74
- *
75
- * @var string
76
- */
77
- protected $port = null;
78
-
79
- /**
80
- * ipath
81
- *
82
- * @var string
83
- */
84
- protected $ipath = '';
85
-
86
- /**
87
- * iquery
88
- *
89
- * @var string
90
- */
91
- protected $iquery = null;
92
-
93
- /**
94
- * ifragment
95
- *
96
- * @var string
97
- */
98
- protected $ifragment = null;
99
-
100
- /**
101
- * Normalization database
102
- *
103
- * Each key is the scheme, each value is an array with each key as the IRI
104
- * part and value as the default value for that part.
105
- */
106
- protected $normalization = array(
107
- 'acap' => array(
108
- 'port' => 674
109
- ),
110
- 'dict' => array(
111
- 'port' => 2628
112
- ),
113
- 'file' => array(
114
- 'ihost' => 'localhost'
115
- ),
116
- 'http' => array(
117
- 'port' => 80,
118
- 'ipath' => '/'
119
- ),
120
- 'https' => array(
121
- 'port' => 443,
122
- 'ipath' => '/'
123
- ),
124
- );
125
-
126
- /**
127
- * Return the entire IRI when you try and read the object as a string
128
- *
129
- * @return string
130
- */
131
- public function __toString()
132
- {
133
- return $this->get_iri();
134
- }
135
-
136
- /**
137
- * Overload __set() to provide access via properties
138
- *
139
- * @param string $name Property name
140
- * @param mixed $value Property value
141
- */
142
- public function __set($name, $value)
143
- {
144
- if (method_exists($this, 'set_' . $name))
145
- {
146
- call_user_func(array($this, 'set_' . $name), $value);
147
- }
148
- elseif (
149
- $name === 'iauthority'
150
- || $name === 'iuserinfo'
151
- || $name === 'ihost'
152
- || $name === 'ipath'
153
- || $name === 'iquery'
154
- || $name === 'ifragment'
155
- )
156
- {
157
- call_user_func(array($this, 'set_' . substr($name, 1)), $value);
158
- }
159
- }
160
-
161
- /**
162
- * Overload __get() to provide access via properties
163
- *
164
- * @param string $name Property name
165
- * @return mixed
166
- */
167
- public function __get($name)
168
- {
169
- // isset() returns false for null, we don't want to do that
170
- // Also why we use array_key_exists below instead of isset()
171
- $props = get_object_vars($this);
172
-
173
- if (
174
- $name === 'iri' ||
175
- $name === 'uri' ||
176
- $name === 'iauthority' ||
177
- $name === 'authority'
178
- )
179
- {
180
- $return = $this->{"get_$name"}();
181
- }
182
- elseif (array_key_exists($name, $props))
183
- {
184
- $return = $this->$name;
185
- }
186
- // host -> ihost
187
- elseif (($prop = 'i' . $name) && array_key_exists($prop, $props))
188
- {
189
- $name = $prop;
190
- $return = $this->$prop;
191
- }
192
- // ischeme -> scheme
193
- elseif (($prop = substr($name, 1)) && array_key_exists($prop, $props))
194
- {
195
- $name = $prop;
196
- $return = $this->$prop;
197
- }
198
- else
199
- {
200
- trigger_error('Undefined property: ' . get_class($this) . '::' . $name, E_USER_NOTICE);
201
- $return = null;
202
- }
203
-
204
- if ($return === null && isset($this->normalization[$this->scheme][$name]))
205
- {
206
- return $this->normalization[$this->scheme][$name];
207
- }
208
- else
209
- {
210
- return $return;
211
- }
212
- }
213
-
214
- /**
215
- * Overload __isset() to provide access via properties
216
- *
217
- * @param string $name Property name
218
- * @return bool
219
- */
220
- public function __isset($name)
221
- {
222
- if (method_exists($this, 'get_' . $name) || isset($this->$name))
223
- {
224
- return true;
225
- }
226
- else
227
- {
228
- return false;
229
- }
230
- }
231
-
232
- /**
233
- * Overload __unset() to provide access via properties
234
- *
235
- * @param string $name Property name
236
- */
237
- public function __unset($name)
238
- {
239
- if (method_exists($this, 'set_' . $name))
240
- {
241
- call_user_func(array($this, 'set_' . $name), '');
242
- }
243
- }
244
-
245
- /**
246
- * Create a new IRI object, from a specified string
247
- *
248
- * @param string $iri
249
- */
250
- public function __construct($iri = null)
251
- {
252
- $this->set_iri($iri);
253
- }
254
-
255
- /**
256
- * Create a new IRI object by resolving a relative IRI
257
- *
258
- * Returns false if $base is not absolute, otherwise an IRI.
259
- *
260
- * @param IRI|string $base (Absolute) Base IRI
261
- * @param IRI|string $relative Relative IRI
262
- * @return IRI|false
263
- */
264
- public static function absolutize($base, $relative)
265
- {
266
- if (!($relative instanceof Requests_IRI))
267
- {
268
- $relative = new Requests_IRI($relative);
269
- }
270
- if (!$relative->is_valid())
271
- {
272
- return false;
273
- }
274
- elseif ($relative->scheme !== null)
275
- {
276
- return clone $relative;
277
- }
278
- else
279
- {
280
- if (!($base instanceof Requests_IRI))
281
- {
282
- $base = new Requests_IRI($base);
283
- }
284
- if ($base->scheme !== null && $base->is_valid())
285
- {
286
- if ($relative->get_iri() !== '')
287
- {
288
- if ($relative->iuserinfo !== null || $relative->ihost !== null || $relative->port !== null)
289
- {
290
- $target = clone $relative;
291
- $target->scheme = $base->scheme;
292
- }
293
- else
294
- {
295
- $target = new Requests_IRI;
296
- $target->scheme = $base->scheme;
297
- $target->iuserinfo = $base->iuserinfo;
298
- $target->ihost = $base->ihost;
299
- $target->port = $base->port;
300
- if ($relative->ipath !== '')
301
- {
302
- if ($relative->ipath[0] === '/')
303
- {
304
- $target->ipath = $relative->ipath;
305
- }
306
- elseif (($base->iuserinfo !== null || $base->ihost !== null || $base->port !== null) && $base->ipath === '')
307
- {
308
- $target->ipath = '/' . $relative->ipath;
309
- }
310
- elseif (($last_segment = strrpos($base->ipath, '/')) !== false)
311
- {
312
- $target->ipath = substr($base->ipath, 0, $last_segment + 1) . $relative->ipath;
313
- }
314
- else
315
- {
316
- $target->ipath = $relative->ipath;
317
- }
318
- $target->ipath = $target->remove_dot_segments($target->ipath);
319
- $target->iquery = $relative->iquery;
320
- }
321
- else
322
- {
323
- $target->ipath = $base->ipath;
324
- if ($relative->iquery !== null)
325
- {
326
- $target->iquery = $relative->iquery;
327
- }
328
- elseif ($base->iquery !== null)
329
- {
330
- $target->iquery = $base->iquery;
331
- }
332
- }
333
- $target->ifragment = $relative->ifragment;
334
- }
335
- }
336
- else
337
- {
338
- $target = clone $base;
339
- $target->ifragment = null;
340
- }
341
- $target->scheme_normalization();
342
- return $target;
343
- }
344
- else
345
- {
346
- return false;
347
- }
348
- }
349
- }
350
-
351
- /**
352
- * Parse an IRI into scheme/authority/path/query/fragment segments
353
- *
354
- * @param string $iri
355
- * @return array
356
- */
357
- protected function parse_iri($iri)
358
- {
359
- $iri = trim($iri, "\x20\x09\x0A\x0C\x0D");
360
- if (preg_match('/^((?P<scheme>[^:\/?#]+):)?(\/\/(?P<authority>[^\/?#]*))?(?P<path>[^?#]*)(\?(?P<query>[^#]*))?(#(?P<fragment>.*))?$/', $iri, $match))
361
- {
362
- if ($match[1] === '')
363
- {
364
- $match['scheme'] = null;
365
- }
366
- if (!isset($match[3]) || $match[3] === '')
367
- {
368
- $match['authority'] = null;
369
- }
370
- if (!isset($match[5]))
371
- {
372
- $match['path'] = '';
373
- }
374
- if (!isset($match[6]) || $match[6] === '')
375
- {
376
- $match['query'] = null;
377
- }
378
- if (!isset($match[8]) || $match[8] === '')
379
- {
380
- $match['fragment'] = null;
381
- }
382
- return $match;
383
- }
384
- else
385
- {
386
- trigger_error('This should never happen', E_USER_ERROR);
387
- die;
388
- }
389
- }
390
-
391
- /**
392
- * Remove dot segments from a path
393
- *
394
- * @param string $input
395
- * @return string
396
- */
397
- protected function remove_dot_segments($input)
398
- {
399
- $output = '';
400
- while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input === '.' || $input === '..')
401
- {
402
- // A: If the input buffer begins with a prefix of "../" or "./", then remove that prefix from the input buffer; otherwise,
403
- if (strpos($input, '../') === 0)
404
- {
405
- $input = substr($input, 3);
406
- }
407
- elseif (strpos($input, './') === 0)
408
- {
409
- $input = substr($input, 2);
410
- }
411
- // B: if the input buffer begins with a prefix of "/./" or "/.", where "." is a complete path segment, then replace that prefix with "/" in the input buffer; otherwise,
412
- elseif (strpos($input, '/./') === 0)
413
- {
414
- $input = substr($input, 2);
415
- }
416
- elseif ($input === '/.')
417
- {
418
- $input = '/';
419
- }
420
- // C: if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and remove the last segment and its preceding "/" (if any) from the output buffer; otherwise,
421
- elseif (strpos($input, '/../') === 0)
422
- {
423
- $input = substr($input, 3);
424
- $output = substr_replace($output, '', strrpos($output, '/'));
425
- }
426
- elseif ($input === '/..')
427
- {
428
- $input = '/';
429
- $output = substr_replace($output, '', strrpos($output, '/'));
430
- }
431
- // D: if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise,
432
- elseif ($input === '.' || $input === '..')
433
- {
434
- $input = '';
435
- }
436
- // E: move the first path segment in the input buffer to the end of the output buffer, including the initial "/" character (if any) and any subsequent characters up to, but not including, the next "/" character or the end of the input buffer
437
- elseif (($pos = strpos($input, '/', 1)) !== false)
438
- {
439
- $output .= substr($input, 0, $pos);
440
- $input = substr_replace($input, '', 0, $pos);
441
- }
442
- else
443
- {
444
- $output .= $input;
445
- $input = '';
446
- }
447
- }
448
- return $output . $input;
449
- }
450
-
451
- /**
452
- * Replace invalid character with percent encoding
453
- *
454
- * @param string $string Input string
455
- * @param string $extra_chars Valid characters not in iunreserved or
456
- * iprivate (this is ASCII-only)
457
- * @param bool $iprivate Allow iprivate
458
- * @return string
459
- */
460
- protected function replace_invalid_with_pct_encoding($string, $extra_chars, $iprivate = false)
461
- {
462
- // Normalize as many pct-encoded sections as possible
463
- $string = preg_replace_callback('/(?:%[A-Fa-f0-9]{2})+/', array(&$this, 'remove_iunreserved_percent_encoded'), $string);
464
-
465
- // Replace invalid percent characters
466
- $string = preg_replace('/%(?![A-Fa-f0-9]{2})/', '%25', $string);
467
-
468
- // Add unreserved and % to $extra_chars (the latter is safe because all
469
- // pct-encoded sections are now valid).
470
- $extra_chars .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~%';
471
-
472
- // Now replace any bytes that aren't allowed with their pct-encoded versions
473
- $position = 0;
474
- $strlen = strlen($string);
475
- while (($position += strspn($string, $extra_chars, $position)) < $strlen)
476
- {
477
- $value = ord($string[$position]);
478
-
479
- // Start position
480
- $start = $position;
481
-
482
- // By default we are valid
483
- $valid = true;
484
-
485
- // No one byte sequences are valid due to the while.
486
- // Two byte sequence:
487
- if (($value & 0xE0) === 0xC0)
488
- {
489
- $character = ($value & 0x1F) << 6;
490
- $length = 2;
491
- $remaining = 1;
492
- }
493
- // Three byte sequence:
494
- elseif (($value & 0xF0) === 0xE0)
495
- {
496
- $character = ($value & 0x0F) << 12;
497
- $length = 3;
498
- $remaining = 2;
499
- }
500
- // Four byte sequence:
501
- elseif (($value & 0xF8) === 0xF0)
502
- {
503
- $character = ($value & 0x07) << 18;
504
- $length = 4;
505
- $remaining = 3;
506
- }
507
- // Invalid byte:
508
- else
509
- {
510
- $valid = false;
511
- $length = 1;
512
- $remaining = 0;
513
- }
514
-
515
- if ($remaining)
516
- {
517
- if ($position + $length <= $strlen)
518
- {
519
- for ($position++; $remaining; $position++)
520
- {
521
- $value = ord($string[$position]);
522
-
523
- // Check that the byte is valid, then add it to the character:
524
- if (($value & 0xC0) === 0x80)
525
- {
526
- $character |= ($value & 0x3F) << (--$remaining * 6);
527
- }
528
- // If it is invalid, count the sequence as invalid and reprocess the current byte:
529
- else
530
- {
531
- $valid = false;
532
- $position--;
533
- break;
534
- }
535
- }
536
- }
537
- else
538
- {
539
- $position = $strlen - 1;
540
- $valid = false;
541
- }
542
- }
543
-
544
- // Percent encode anything invalid or not in ucschar
545
- if (
546
- // Invalid sequences
547
- !$valid
548
- // Non-shortest form sequences are invalid
549
- || $length > 1 && $character <= 0x7F
550
- || $length > 2 && $character <= 0x7FF
551
- || $length > 3 && $character <= 0xFFFF
552
- // Outside of range of ucschar codepoints
553
- // Noncharacters
554
- || ($character & 0xFFFE) === 0xFFFE
555
- || $character >= 0xFDD0 && $character <= 0xFDEF
556
- || (
557
- // Everything else not in ucschar
558
- $character > 0xD7FF && $character < 0xF900
559
- || $character < 0xA0
560
- || $character > 0xEFFFD
561
- )
562
- && (
563
- // Everything not in iprivate, if it applies
564
- !$iprivate
565
- || $character < 0xE000
566
- || $character > 0x10FFFD
567
- )
568
- )
569
- {
570
- // If we were a character, pretend we weren't, but rather an error.
571
- if ($valid)
572
- $position--;
573
-
574
- for ($j = $start; $j <= $position; $j++)
575
- {
576
- $string = substr_replace($string, sprintf('%%%02X', ord($string[$j])), $j, 1);
577
- $j += 2;
578
- $position += 2;
579
- $strlen += 2;
580
- }
581
- }
582
- }
583
-
584
- return $string;
585
- }
586
-
587
- /**
588
- * Callback function for preg_replace_callback.
589
- *
590
- * Removes sequences of percent encoded bytes that represent UTF-8
591
- * encoded characters in iunreserved
592
- *
593
- * @param array $match PCRE match
594
- * @return string Replacement
595
- */
596
- protected function remove_iunreserved_percent_encoded($match)
597
- {
598
- // As we just have valid percent encoded sequences we can just explode
599
- // and ignore the first member of the returned array (an empty string).
600
- $bytes = explode('%', $match[0]);
601
-
602
- // Initialize the new string (this is what will be returned) and that
603
- // there are no bytes remaining in the current sequence (unsurprising
604
- // at the first byte!).
605
- $string = '';
606
- $remaining = 0;
607
-
608
- // Loop over each and every byte, and set $value to its value
609
- for ($i = 1, $len = count($bytes); $i < $len; $i++)
610
- {
611
- $value = hexdec($bytes[$i]);
612
-
613
- // If we're the first byte of sequence:
614
- if (!$remaining)
615
- {
616
- // Start position
617
- $start = $i;
618
-
619
- // By default we are valid
620
- $valid = true;
621
-
622
- // One byte sequence:
623
- if ($value <= 0x7F)
624
- {
625
- $character = $value;
626
- $length = 1;
627
- }
628
- // Two byte sequence:
629
- elseif (($value & 0xE0) === 0xC0)
630
- {
631
- $character = ($value & 0x1F) << 6;
632
- $length = 2;
633
- $remaining = 1;
634
- }
635
- // Three byte sequence:
636
- elseif (($value & 0xF0) === 0xE0)
637
- {
638
- $character = ($value & 0x0F) << 12;
639
- $length = 3;
640
- $remaining = 2;
641
- }
642
- // Four byte sequence:
643
- elseif (($value & 0xF8) === 0xF0)
644
- {
645
- $character = ($value & 0x07) << 18;
646
- $length = 4;
647
- $remaining = 3;
648
- }
649
- // Invalid byte:
650
- else
651
- {
652
- $valid = false;
653
- $remaining = 0;
654
- }
655
- }
656
- // Continuation byte:
657
- else
658
- {
659
- // Check that the byte is valid, then add it to the character:
660
- if (($value & 0xC0) === 0x80)
661
- {
662
- $remaining--;
663
- $character |= ($value & 0x3F) << ($remaining * 6);
664
- }
665
- // If it is invalid, count the sequence as invalid and reprocess the current byte as the start of a sequence:
666
- else
667
- {
668
- $valid = false;
669
- $remaining = 0;
670
- $i--;
671
- }
672
- }
673
-
674
- // If we've reached the end of the current byte sequence, append it to Unicode::$data
675
- if (!$remaining)
676
- {
677
- // Percent encode anything invalid or not in iunreserved
678
- if (
679
- // Invalid sequences
680
- !$valid
681
- // Non-shortest form sequences are invalid
682
- || $length > 1 && $character <= 0x7F
683
- || $length > 2 && $character <= 0x7FF
684
- || $length > 3 && $character <= 0xFFFF
685
- // Outside of range of iunreserved codepoints
686
- || $character < 0x2D
687
- || $character > 0xEFFFD
688
- // Noncharacters
689
- || ($character & 0xFFFE) === 0xFFFE
690
- || $character >= 0xFDD0 && $character <= 0xFDEF
691
- // Everything else not in iunreserved (this is all BMP)
692
- || $character === 0x2F
693
- || $character > 0x39 && $character < 0x41
694
- || $character > 0x5A && $character < 0x61
695
- || $character > 0x7A && $character < 0x7E
696
- || $character > 0x7E && $character < 0xA0
697
- || $character > 0xD7FF && $character < 0xF900
698
- )
699
- {
700
- for ($j = $start; $j <= $i; $j++)
701
- {
702
- $string .= '%' . strtoupper($bytes[$j]);
703
- }
704
- }
705
- else
706
- {
707
- for ($j = $start; $j <= $i; $j++)
708
- {
709
- $string .= chr(hexdec($bytes[$j]));
710
- }
711
- }
712
- }
713
- }
714
-
715
- // If we have any bytes left over they are invalid (i.e., we are
716
- // mid-way through a multi-byte sequence)
717
- if ($remaining)
718
- {
719
- for ($j = $start; $j < $len; $j++)
720
- {
721
- $string .= '%' . strtoupper($bytes[$j]);
722
- }
723
- }
724
-
725
- return $string;
726
- }
727
-
728
- protected function scheme_normalization()
729
- {
730
- if (isset($this->normalization[$this->scheme]['iuserinfo']) && $this->iuserinfo === $this->normalization[$this->scheme]['iuserinfo'])
731
- {
732
- $this->iuserinfo = null;
733
- }
734
- if (isset($this->normalization[$this->scheme]['ihost']) && $this->ihost === $this->normalization[$this->scheme]['ihost'])
735
- {
736
- $this->ihost = null;
737
- }
738
- if (isset($this->normalization[$this->scheme]['port']) && $this->port === $this->normalization[$this->scheme]['port'])
739
- {
740
- $this->port = null;
741
- }
742
- if (isset($this->normalization[$this->scheme]['ipath']) && $this->ipath === $this->normalization[$this->scheme]['ipath'])
743
- {
744
- $this->ipath = '';
745
- }
746
- if (isset($this->normalization[$this->scheme]['iquery']) && $this->iquery === $this->normalization[$this->scheme]['iquery'])
747
- {
748
- $this->iquery = null;
749
- }
750
- if (isset($this->normalization[$this->scheme]['ifragment']) && $this->ifragment === $this->normalization[$this->scheme]['ifragment'])
751
- {
752
- $this->ifragment = null;
753
- }
754
- }
755
-
756
- /**
757
- * Check if the object represents a valid IRI. This needs to be done on each
758
- * call as some things change depending on another part of the IRI.
759
- *
760
- * @return bool
761
- */
762
- public function is_valid()
763
- {
764
- $isauthority = $this->iuserinfo !== null || $this->ihost !== null || $this->port !== null;
765
- if ($this->ipath !== '' &&
766
- (
767
- $isauthority && (
768
- $this->ipath[0] !== '/' ||
769
- substr($this->ipath, 0, 2) === '//'
770
- ) ||
771
- (
772
- $this->scheme === null &&
773
- !$isauthority &&
774
- strpos($this->ipath, ':') !== false &&
775
- (strpos($this->ipath, '/') === false ? true : strpos($this->ipath, ':') < strpos($this->ipath, '/'))
776
- )
777
- )
778
- )
779
- {
780
- return false;
781
- }
782
-
783
- return true;
784
- }
785
-
786
- /**
787
- * Set the entire IRI. Returns true on success, false on failure (if there
788
- * are any invalid characters).
789
- *
790
- * @param string $iri
791
- * @return bool
792
- */
793
- protected function set_iri($iri)
794
- {
795
- static $cache;
796
- if (!$cache)
797
- {
798
- $cache = array();
799
- }
800
-
801
- if ($iri === null)
802
- {
803
- return true;
804
- }
805
- elseif (isset($cache[$iri]))
806
- {
807
- list($this->scheme,
808
- $this->iuserinfo,
809
- $this->ihost,
810
- $this->port,
811
- $this->ipath,
812
- $this->iquery,
813
- $this->ifragment,
814
- $return) = $cache[$iri];
815
- return $return;
816
- }
817
- else
818
- {
819
- $parsed = $this->parse_iri((string) $iri);
820
-
821
- $return = $this->set_scheme($parsed['scheme'])
822
- && $this->set_authority($parsed['authority'])
823
- && $this->set_path($parsed['path'])
824
- && $this->set_query($parsed['query'])
825
- && $this->set_fragment($parsed['fragment']);
826
-
827
- $cache[$iri] = array($this->scheme,
828
- $this->iuserinfo,
829
- $this->ihost,
830
- $this->port,
831
- $this->ipath,
832
- $this->iquery,
833
- $this->ifragment,
834
- $return);
835
- return $return;
836
- }
837
- }
838
-
839
- /**
840
- * Set the scheme. Returns true on success, false on failure (if there are
841
- * any invalid characters).
842
- *
843
- * @param string $scheme
844
- * @return bool
845
- */
846
- protected function set_scheme($scheme)
847
- {
848
- if ($scheme === null)
849
- {
850
- $this->scheme = null;
851
- }
852
- elseif (!preg_match('/^[A-Za-z][0-9A-Za-z+\-.]*$/', $scheme))
853
- {
854
- $this->scheme = null;
855
- return false;
856
- }
857
- else
858
- {
859
- $this->scheme = strtolower($scheme);
860
- }
861
- return true;
862
- }
863
-
864
- /**
865
- * Set the authority. Returns true on success, false on failure (if there are
866
- * any invalid characters).
867
- *
868
- * @param string $authority
869
- * @return bool
870
- */
871
- protected function set_authority($authority)
872
- {
873
- static $cache;
874
- if (!$cache)
875
- $cache = array();
876
-
877
- if ($authority === null)
878
- {
879
- $this->iuserinfo = null;
880
- $this->ihost = null;
881
- $this->port = null;
882
- return true;
883
- }
884
- elseif (isset($cache[$authority]))
885
- {
886
- list($this->iuserinfo,
887
- $this->ihost,
888
- $this->port,
889
- $return) = $cache[$authority];
890
-
891
- return $return;
892
- }
893
- else
894
- {
895
- $remaining = $authority;
896
- if (($iuserinfo_end = strrpos($remaining, '@')) !== false)
897
- {
898
- $iuserinfo = substr($remaining, 0, $iuserinfo_end);
899
- $remaining = substr($remaining, $iuserinfo_end + 1);
900
- }
901
- else
902
- {
903
- $iuserinfo = null;
904
- }
905
- if (($port_start = strpos($remaining, ':', strpos($remaining, ']'))) !== false)
906
- {
907
- if (($port = substr($remaining, $port_start + 1)) === false)
908
- {
909
- $port = null;
910
- }
911
- $remaining = substr($remaining, 0, $port_start);
912
- }
913
- else
914
- {
915
- $port = null;
916
- }
917
-
918
- $return = $this->set_userinfo($iuserinfo) &&
919
- $this->set_host($remaining) &&
920
- $this->set_port($port);
921
-
922
- $cache[$authority] = array($this->iuserinfo,
923
- $this->ihost,
924
- $this->port,
925
- $return);
926
-
927
- return $return;
928
- }
929
- }
930
-
931
- /**
932
- * Set the iuserinfo.
933
- *
934
- * @param string $iuserinfo
935
- * @return bool
936
- */
937
- protected function set_userinfo($iuserinfo)
938
- {
939
- if ($iuserinfo === null)
940
- {
941
- $this->iuserinfo = null;
942
- }
943
- else
944
- {
945
- $this->iuserinfo = $this->replace_invalid_with_pct_encoding($iuserinfo, '!$&\'()*+,;=:');
946
- $this->scheme_normalization();
947
- }
948
-
949
- return true;
950
- }
951
-
952
- /**
953
- * Set the ihost. Returns true on success, false on failure (if there are
954
- * any invalid characters).
955
- *
956
- * @param string $ihost
957
- * @return bool
958
- */
959
- protected function set_host($ihost)
960
- {
961
- if ($ihost === null)
962
- {
963
- $this->ihost = null;
964
- return true;
965
- }
966
- elseif (substr($ihost, 0, 1) === '[' && substr($ihost, -1) === ']')
967
- {
968
- if (Requests_IPv6::check_ipv6(substr($ihost, 1, -1)))
969
- {
970
- $this->ihost = '[' . Requests_IPv6::compress(substr($ihost, 1, -1)) . ']';
971
- }
972
- else
973
- {
974
- $this->ihost = null;
975
- return false;
976
- }
977
- }
978
- else
979
- {
980
- $ihost = $this->replace_invalid_with_pct_encoding($ihost, '!$&\'()*+,;=');
981
-
982
- // Lowercase, but ignore pct-encoded sections (as they should
983
- // remain uppercase). This must be done after the previous step
984
- // as that can add unescaped characters.
985
- $position = 0;
986
- $strlen = strlen($ihost);
987
- while (($position += strcspn($ihost, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ%', $position)) < $strlen)
988
- {
989
- if ($ihost[$position] === '%')
990
- {
991
- $position += 3;
992
- }
993
- else
994
- {
995
- $ihost[$position] = strtolower($ihost[$position]);
996
- $position++;
997
- }
998
- }
999
-
1000
- $this->ihost = $ihost;
1001
- }
1002
-
1003
- $this->scheme_normalization();
1004
-
1005
- return true;
1006
- }
1007
-
1008
- /**
1009
- * Set the port. Returns true on success, false on failure (if there are
1010
- * any invalid characters).
1011
- *
1012
- * @param string $port
1013
- * @return bool
1014
- */
1015
- protected function set_port($port)
1016
- {
1017
- if ($port === null)
1018
- {
1019
- $this->port = null;
1020
- return true;
1021
- }
1022
- elseif (strspn($port, '0123456789') === strlen($port))
1023
- {
1024
- $this->port = (int) $port;
1025
- $this->scheme_normalization();
1026
- return true;
1027
- }
1028
- else
1029
- {
1030
- $this->port = null;
1031
- return false;
1032
- }
1033
- }
1034
-
1035
- /**
1036
- * Set the ipath.
1037
- *
1038
- * @param string $ipath
1039
- * @return bool
1040
- */
1041
- protected function set_path($ipath)
1042
- {
1043
- static $cache;
1044
- if (!$cache)
1045
- {
1046
- $cache = array();
1047
- }
1048
-
1049
- $ipath = (string) $ipath;
1050
-
1051
- if (isset($cache[$ipath]))
1052
- {
1053
- $this->ipath = $cache[$ipath][(int) ($this->scheme !== null)];
1054
- }
1055
- else
1056
- {
1057
- $valid = $this->replace_invalid_with_pct_encoding($ipath, '!$&\'()*+,;=@:/');
1058
- $removed = $this->remove_dot_segments($valid);
1059
-
1060
- $cache[$ipath] = array($valid, $removed);
1061
- $this->ipath = ($this->scheme !== null) ? $removed : $valid;
1062
- }
1063
-
1064
- $this->scheme_normalization();
1065
- return true;
1066
- }
1067
-
1068
- /**
1069
- * Set the iquery.
1070
- *
1071
- * @param string $iquery
1072
- * @return bool
1073
- */
1074
- protected function set_query($iquery)
1075
- {
1076
- if ($iquery === null)
1077
- {
1078
- $this->iquery = null;
1079
- }
1080
- else
1081
- {
1082
- $this->iquery = $this->replace_invalid_with_pct_encoding($iquery, '!$&\'()*+,;=:@/?', true);
1083
- $this->scheme_normalization();
1084
- }
1085
- return true;
1086
- }
1087
-
1088
- /**
1089
- * Set the ifragment.
1090
- *
1091
- * @param string $ifragment
1092
- * @return bool
1093
- */
1094
- protected function set_fragment($ifragment)
1095
- {
1096
- if ($ifragment === null)
1097
- {
1098
- $this->ifragment = null;
1099
- }
1100
- else
1101
- {
1102
- $this->ifragment = $this->replace_invalid_with_pct_encoding($ifragment, '!$&\'()*+,;=:@/?');
1103
- $this->scheme_normalization();
1104
- }
1105
- return true;
1106
- }
1107
-
1108
- /**
1109
- * Convert an IRI to a URI (or parts thereof)
1110
- *
1111
- * @return string
1112
- */
1113
- protected function to_uri($string)
1114
- {
1115
- static $non_ascii;
1116
- if (!$non_ascii)
1117
- {
1118
- $non_ascii = implode('', range("\x80", "\xFF"));
1119
- }
1120
-
1121
- $position = 0;
1122
- $strlen = strlen($string);
1123
- while (($position += strcspn($string, $non_ascii, $position)) < $strlen)
1124
- {
1125
- $string = substr_replace($string, sprintf('%%%02X', ord($string[$position])), $position, 1);
1126
- $position += 3;
1127
- $strlen += 2;
1128
- }
1129
-
1130
- return $string;
1131
- }
1132
-
1133
- /**
1134
- * Get the complete IRI
1135
- *
1136
- * @return string
1137
- */
1138
- protected function get_iri()
1139
- {
1140
- if (!$this->is_valid())
1141
- {
1142
- return false;
1143
- }
1144
-
1145
- $iri = '';
1146
- if ($this->scheme !== null)
1147
- {
1148
- $iri .= $this->scheme . ':';
1149
- }
1150
- if (($iauthority = $this->get_iauthority()) !== null)
1151
- {
1152
- $iri .= '//' . $iauthority;
1153
- }
1154
- $iri .= $this->ipath;
1155
- if ($this->iquery !== null)
1156
- {
1157
- $iri .= '?' . $this->iquery;
1158
- }
1159
- if ($this->ifragment !== null)
1160
- {
1161
- $iri .= '#' . $this->ifragment;
1162
- }
1163
-
1164
- return $iri;
1165
- }
1166
-
1167
- /**
1168
- * Get the complete URI
1169
- *
1170
- * @return string
1171
- */
1172
- protected function get_uri()
1173
- {
1174
- return $this->to_uri($this->get_iri());
1175
- }
1176
-
1177
- /**
1178
- * Get the complete iauthority
1179
- *
1180
- * @return string
1181
- */
1182
- protected function get_iauthority()
1183
- {
1184
- if ($this->iuserinfo !== null || $this->ihost !== null || $this->port !== null)
1185
- {
1186
- $iauthority = '';
1187
- if ($this->iuserinfo !== null)
1188
- {
1189
- $iauthority .= $this->iuserinfo . '@';
1190
- }
1191
- if ($this->ihost !== null)
1192
- {
1193
- $iauthority .= $this->ihost;
1194
- }
1195
- if ($this->port !== null)
1196
- {
1197
- $iauthority .= ':' . $this->port;
1198
- }
1199
- return $iauthority;
1200
- }
1201
- else
1202
- {
1203
- return null;
1204
- }
1205
- }
1206
-
1207
- /**
1208
- * Get the complete authority
1209
- *
1210
- * @return string
1211
- */
1212
- protected function get_authority()
1213
- {
1214
- $iauthority = $this->get_iauthority();
1215
- if (is_string($iauthority))
1216
- return $this->to_uri($iauthority);
1217
- else
1218
- return $iauthority;
1219
- }
1220
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Proxy.php DELETED
@@ -1,35 +0,0 @@
1
- <?php
2
- /**
3
- * Proxy connection interface
4
- *
5
- * @package Requests
6
- * @subpackage Proxy
7
- * @since 1.6
8
- */
9
-
10
- /**
11
- * Proxy connection interface
12
- *
13
- * Implement this interface to handle proxy settings and authentication
14
- *
15
- * Parameters should be passed via the constructor where possible, as this
16
- * makes it much easier for users to use your provider.
17
- *
18
- * @see Requests_Hooks
19
- * @package Requests
20
- * @subpackage Proxy
21
- * @since 1.6
22
- */
23
- interface Requests_Proxy {
24
- /**
25
- * Register hooks as needed
26
- *
27
- * This method is called in {@see Requests::request} when the user has set
28
- * an instance as the 'auth' option. Use this callback to register all the
29
- * hooks you'll need.
30
- *
31
- * @see Requests_Hooks::register
32
- * @param Requests_Hooks $hooks Hook system
33
- */
34
- public function register(Requests_Hooks &$hooks);
35
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Proxy/HTTP.php DELETED
@@ -1,150 +0,0 @@
1
- <?php
2
- /**
3
- * HTTP Proxy connection interface
4
- *
5
- * @package Requests
6
- * @subpackage Proxy
7
- * @since 1.6
8
- */
9
-
10
- /**
11
- * HTTP Proxy connection interface
12
- *
13
- * Provides a handler for connection via an HTTP proxy
14
- *
15
- * @package Requests
16
- * @subpackage Proxy
17
- * @since 1.6
18
- */
19
- class Requests_Proxy_HTTP implements Requests_Proxy {
20
- /**
21
- * Proxy host and port
22
- *
23
- * Notation: "host:port" (eg 127.0.0.1:8080 or someproxy.com:3128)
24
- *
25
- * @var string
26
- */
27
- public $proxy;
28
-
29
- /**
30
- * Username
31
- *
32
- * @var string
33
- */
34
- public $user;
35
-
36
- /**
37
- * Password
38
- *
39
- * @var string
40
- */
41
- public $pass;
42
-
43
- /**
44
- * Do we need to authenticate? (ie username & password have been provided)
45
- *
46
- * @var boolean
47
- */
48
- public $use_authentication;
49
-
50
- /**
51
- * Constructor
52
- *
53
- * @since 1.6
54
- * @throws Requests_Exception On incorrect number of arguments (`authbasicbadargs`)
55
- * @param array|null $args Array of user and password. Must have exactly two elements
56
- */
57
- public function __construct($args = null) {
58
- if (is_string($args)) {
59
- $this->proxy = $args;
60
- }
61
- elseif (is_array($args)) {
62
- if (count($args) == 1) {
63
- list($this->proxy) = $args;
64
- }
65
- elseif (count($args) == 3) {
66
- list($this->proxy, $this->user, $this->pass) = $args;
67
- $this->use_authentication = true;
68
- }
69
- else {
70
- throw new Requests_Exception( 'Invalid number of arguments', 'proxyhttpbadargs');
71
- }
72
- }
73
- }
74
-
75
- /**
76
- * Register the necessary callbacks
77
- *
78
- * @since 1.6
79
- * @see curl_before_send
80
- * @see fsockopen_remote_socket
81
- * @see fsockopen_remote_host_path
82
- * @see fsockopen_header
83
- * @param Requests_Hooks $hooks Hook system
84
- */
85
- public function register(Requests_Hooks &$hooks) {
86
- $hooks->register('curl.before_send', array(&$this, 'curl_before_send'));
87
-
88
- $hooks->register('fsockopen.remote_socket', array(&$this, 'fsockopen_remote_socket'));
89
- $hooks->register('fsockopen.remote_host_path', array(&$this, 'fsockopen_remote_host_path'));
90
- if( $this->use_authentication ) {
91
- $hooks->register('fsockopen.after_headers', array(&$this, 'fsockopen_header'));
92
- }
93
- }
94
-
95
- /**
96
- * Set cURL parameters before the data is sent
97
- *
98
- * @since 1.6
99
- * @param resource $handle cURL resource
100
- */
101
- public function curl_before_send(&$handle) {
102
- curl_setopt($handle, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
103
- curl_setopt($handle, CURLOPT_PROXY, $this->proxy);
104
-
105
- if ($this->use_authentication) {
106
- curl_setopt($handle, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
107
- curl_setopt($handle, CURLOPT_PROXYUSERPWD, $this->get_auth_string());
108
- }
109
- }
110
-
111
- /**
112
- * Alter remote socket information before opening socket connection
113
- *
114
- * @since 1.6
115
- * @param string $out HTTP header string
116
- */
117
- public function fsockopen_remote_socket( &$remote_socket ) {
118
- $remote_socket = $this->proxy;
119
- }
120
-
121
- /**
122
- * Alter remote path before getting stream data
123
- *
124
- * @since 1.6
125
- * @param string $out HTTP header string
126
- */
127
- public function fsockopen_remote_host_path( &$path, $url ) {
128
- $path = $url;
129
- }
130
-
131
- /**
132
- * Add extra headers to the request before sending
133
- *
134
- * @since 1.6
135
- * @param string $out HTTP header string
136
- */
137
- public function fsockopen_header( &$out ) {
138
- $out .= "Proxy-Authorization: Basic " . base64_encode($this->get_auth_string()) . "\r\n";
139
- }
140
-
141
- /**
142
- * Get the authentication string (user:pass)
143
- *
144
- * @since 1.6
145
- * @return string
146
- */
147
- public function get_auth_string() {
148
- return $this->user . ':' . $this->pass;
149
- }
150
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Response.php DELETED
@@ -1,95 +0,0 @@
1
- <?php
2
- /**
3
- * HTTP response class
4
- *
5
- * Contains a response from Requests::request()
6
- * @package Requests
7
- */
8
-
9
- /**
10
- * HTTP response class
11
- *
12
- * Contains a response from Requests::request()
13
- * @package Requests
14
- */
15
- class Requests_Response {
16
- /**
17
- * Constructor
18
- */
19
- public function __construct() {
20
- $this->headers = new Requests_Response_Headers();
21
- }
22
-
23
- /**
24
- * Response body
25
- * @var string
26
- */
27
- public $body = '';
28
-
29
- /**
30
- * Raw HTTP data from the transport
31
- * @var string
32
- */
33
- public $raw = '';
34
-
35
- /**
36
- * Headers, as an associative array
37
- * @var array
38
- */
39
- public $headers = array();
40
-
41
- /**
42
- * Status code, false if non-blocking
43
- * @var integer|boolean
44
- */
45
- public $status_code = false;
46
-
47
- /**
48
- * Whether the request succeeded or not
49
- * @var boolean
50
- */
51
- public $success = false;
52
-
53
- /**
54
- * Number of redirects the request used
55
- * @var integer
56
- */
57
- public $redirects = 0;
58
-
59
- /**
60
- * URL requested
61
- * @var string
62
- */
63
- public $url = '';
64
-
65
- /**
66
- * Previous requests (from redirects)
67
- * @var array Array of Requests_Response objects
68
- */
69
- public $history = array();
70
-
71
- /**
72
- * Cookies from the request
73
- */
74
- public $cookies = array();
75
-
76
- /**
77
- * Throws an exception if the request was not successful
78
- *
79
- * @throws Requests_Exception If `$allow_redirects` is false, and code is 3xx (`response.no_redirects`)
80
- * @throws Requests_Exception_HTTP On non-successful status code. Exception class corresponds to code (e.g. {@see Requests_Exception_HTTP_404})
81
- * @param boolean $allow_redirects Set to false to throw on a 3xx as well
82
- */
83
- public function throw_for_status($allow_redirects = true) {
84
- if ($this->status_code >= 300 && $this->status_code < 400) {
85
- if (!$allow_redirects) {
86
- throw new Requests_Exception('Redirection not allowed', 'response.no_redirects', $this);
87
- }
88
- }
89
-
90
- elseif (!$this->success) {
91
- $exception = Requests_Exception_HTTP::get_class($this->status_code);
92
- throw new $exception(null, $this);
93
- }
94
- }
95
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Response/Headers.php DELETED
@@ -1,95 +0,0 @@
1
- <?php
2
- /**
3
- * Case-insensitive dictionary, suitable for HTTP headers
4
- *
5
- * @package Requests
6
- */
7
-
8
- /**
9
- * Case-insensitive dictionary, suitable for HTTP headers
10
- *
11
- * @package Requests
12
- */
13
- class Requests_Response_Headers extends Requests_Utility_CaseInsensitiveDictionary {
14
- /**
15
- * Get the given header
16
- *
17
- * Unlike {@see self::getValues()}, this returns a string. If there are
18
- * multiple values, it concatenates them with a comma as per RFC2616.
19
- *
20
- * Avoid using this where commas may be used unquoted in values, such as
21
- * Set-Cookie headers.
22
- *
23
- * @param string $key
24
- * @return string Header value
25
- */
26
- public function offsetGet($key) {
27
- $key = strtolower($key);
28
- if (!isset($this->data[$key]))
29
- return null;
30
-
31
- return $this->flatten($this->data[$key]);
32
- }
33
-
34
- /**
35
- * Set the given item
36
- *
37
- * @throws Requests_Exception On attempting to use dictionary as list (`invalidset`)
38
- *
39
- * @param string $key Item name
40
- * @param string $value Item value
41
- */
42
- public function offsetSet($key, $value) {
43
- if ($key === null) {
44
- throw new Requests_Exception('Object is a dictionary, not a list', 'invalidset');
45
- }
46
-
47
- $key = strtolower($key);
48
-
49
- if (!isset($this->data[$key])) {
50
- $this->data[$key] = array();
51
- }
52
-
53
- $this->data[$key][] = $value;
54
- }
55
-
56
- /**
57
- * Get all values for a given header
58
- *
59
- * @param string $key
60
- * @return array Header values
61
- */
62
- public function getValues($key) {
63
- $key = strtolower($key);
64
- if (!isset($this->data[$key]))
65
- return null;
66
-
67
- return $this->data[$key];
68
- }
69
-
70
- /**
71
- * Flattens a value into a string
72
- *
73
- * Converts an array into a string by imploding values with a comma, as per
74
- * RFC2616's rules for folding headers.
75
- *
76
- * @param string|array $value Value to flatten
77
- * @return string Flattened value
78
- */
79
- public function flatten($value) {
80
- if (is_array($value))
81
- $value = implode(',', $value);
82
-
83
- return $value;
84
- }
85
-
86
- /**
87
- * Get an iterator for the data
88
- *
89
- * Converts the internal
90
- * @return ArrayIterator
91
- */
92
- public function getIterator() {
93
- return new Requests_Utility_FilteredIterator($this->data, array($this, 'flatten'));
94
- }
95
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/SSL.php DELETED
@@ -1,151 +0,0 @@
1
- <?php
2
- /**
3
- * SSL utilities for Requests
4
- *
5
- * @package Requests
6
- * @subpackage Utilities
7
- */
8
-
9
- /**
10
- * SSL utilities for Requests
11
- *
12
- * Collection of utilities for working with and verifying SSL certificates.
13
- *
14
- * @package Requests
15
- * @subpackage Utilities
16
- */
17
- class Requests_SSL {
18
- /**
19
- * Verify the certificate against common name and subject alternative names
20
- *
21
- * Unfortunately, PHP doesn't check the certificate against the alternative
22
- * names, leading things like 'https://www.github.com/' to be invalid.
23
- * Instead
24
- *
25
- * @see http://tools.ietf.org/html/rfc2818#section-3.1 RFC2818, Section 3.1
26
- *
27
- * @throws Requests_Exception On not obtaining a match for the host (`fsockopen.ssl.no_match`)
28
- * @param string $host Host name to verify against
29
- * @param resource $context Stream context
30
- * @return bool
31
- */
32
- public static function verify_certificate($host, $cert) {
33
- // Calculate the valid wildcard match if the host is not an IP address
34
- $parts = explode('.', $host);
35
- if (ip2long($host) === false) {
36
- $parts[0] = '*';
37
- }
38
- $wildcard = implode('.', $parts);
39
-
40
- $has_dns_alt = false;
41
-
42
- // Check the subjectAltName
43
- if (!empty($cert['extensions']) && !empty($cert['extensions']['subjectAltName'])) {
44
- $altnames = explode(',', $cert['extensions']['subjectAltName']);
45
- foreach ($altnames as $altname) {
46
- $altname = trim($altname);
47
- if (strpos($altname, 'DNS:') !== 0)
48
- continue;
49
-
50
- $has_dns_alt = true;
51
-
52
- // Strip the 'DNS:' prefix and trim whitespace
53
- $altname = trim(substr($altname, 4));
54
-
55
- // Check for a match
56
- if (self::match_domain($host, $altname) === true) {
57
- return true;
58
- }
59
- }
60
- }
61
-
62
- // Fall back to checking the common name if we didn't get any dNSName
63
- // alt names, as per RFC2818
64
- if (!$has_dns_alt && !empty($cert['subject']['CN'])) {
65
- // Check for a match
66
- if (self::match_domain($host, $cert['subject']['CN']) === true) {
67
- return true;
68
- }
69
- }
70
-
71
- return false;
72
- }
73
-
74
- /**
75
- * Verify that a reference name is valid
76
- *
77
- * Verifies a dNSName for HTTPS usage, (almost) as per Firefox's rules:
78
- * - Wildcards can only occur in a name with more than 3 components
79
- * - Wildcards can only occur as the last character in the first
80
- * component
81
- * - Wildcards may be preceded by additional characters
82
- *
83
- * We modify these rules to be a bit stricter and only allow the wildcard
84
- * character to be the full first component; that is, with the exclusion of
85
- * the third rule.
86
- *
87
- * @param string $reference Reference dNSName
88
- * @return boolean Is the name valid?
89
- */
90
- public static function verify_reference_name($reference) {
91
- $parts = explode('.', $reference);
92
-
93
- // Check the first part of the name
94
- $first = array_shift($parts);
95
-
96
- if (strpos($first, '*') !== false) {
97
- // Check that the wildcard is the full part
98
- if ($first !== '*') {
99
- return false;
100
- }
101
-
102
- // Check that we have at least 3 components (including first)
103
- if (count($parts) < 2) {
104
- return false;
105
- }
106
- }
107
-
108
- // Check the remaining parts
109
- foreach ($parts as $part) {
110
- if (strpos($part, '*') !== false) {
111
- return false;
112
- }
113
- }
114
-
115
- // Nothing found, verified!
116
- return true;
117
- }
118
-
119
- /**
120
- * Match a hostname against a dNSName reference
121
- *
122
- * @param string $host Requested host
123
- * @param string $reference dNSName to match against
124
- * @return boolean Does the domain match?
125
- */
126
- public static function match_domain($host, $reference) {
127
- // Check if the reference is blacklisted first
128
- if (self::verify_reference_name($reference) !== true) {
129
- return false;
130
- }
131
-
132
- // Check for a direct match
133
- if ($host === $reference) {
134
- return true;
135
- }
136
-
137
- // Calculate the valid wildcard match if the host is not an IP address
138
- // Also validates that the host has 3 parts or more, as per Firefox's
139
- // ruleset.
140
- if (ip2long($host) === false) {
141
- $parts = explode('.', $host);
142
- $parts[0] = '*';
143
- $wildcard = implode('.', $parts);
144
- if ($wildcard === $reference) {
145
- return true;
146
- }
147
- }
148
-
149
- return false;
150
- }
151
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Session.php DELETED
@@ -1,258 +0,0 @@
1
- <?php
2
- /**
3
- * Session handler for persistent requests and default parameters
4
- *
5
- * @package Requests
6
- * @subpackage Session Handler
7
- */
8
-
9
- /**
10
- * Session handler for persistent requests and default parameters
11
- *
12
- * Allows various options to be set as default values, and merges both the
13
- * options and URL properties together. A base URL can be set for all requests,
14
- * with all subrequests resolved from this. Base options can be set (including
15
- * a shared cookie jar), then overridden for individual requests.
16
- *
17
- * @package Requests
18
- * @subpackage Session Handler
19
- */
20
- class Requests_Session {
21
- /**
22
- * Base URL for requests
23
- *
24
- * URLs will be made absolute using this as the base
25
- * @var string|null
26
- */
27
- public $url = null;
28
-
29
- /**
30
- * Base headers for requests
31
- * @var array
32
- */
33
- public $headers = array();
34
-
35
- /**
36
- * Base data for requests
37
- *
38
- * If both the base data and the per-request data are arrays, the data will
39
- * be merged before sending the request.
40
- *
41
- * @var array
42
- */
43
- public $data = array();
44
-
45
- /**
46
- * Base options for requests
47
- *
48
- * The base options are merged with the per-request data for each request.
49
- * The only default option is a shared cookie jar between requests.
50
- *
51
- * Values here can also be set directly via properties on the Session
52
- * object, e.g. `$session->useragent = 'X';`
53
- *
54
- * @var array
55
- */
56
- public $options = array();
57
-
58
- /**
59
- * Create a new session
60
- *
61
- * @param string|null $url Base URL for requests
62
- * @param array $headers Default headers for requests
63
- * @param array $data Default data for requests
64
- * @param array $options Default options for requests
65
- */
66
- public function __construct($url = null, $headers = array(), $data = array(), $options = array()) {
67
- $this->url = $url;
68
- $this->headers = $headers;
69
- $this->data = $data;
70
- $this->options = $options;
71
-
72
- if (empty($this->options['cookies'])) {
73
- $this->options['cookies'] = new Requests_Cookie_Jar();
74
- }
75
- }
76
-
77
- /**
78
- * Get a property's value
79
- *
80
- * @param string $key Property key
81
- * @return mixed|null Property value, null if none found
82
- */
83
- public function __get($key) {
84
- if (isset($this->options[$key])) {
85
- return $this->options[$key];
86
- }
87
-
88
- return null;
89
- }
90
-
91
- /**
92
- * Set a property's value
93
- *
94
- * @param string $key Property key
95
- * @param mixed $value Property value
96
- */
97
- public function __set($key, $value) {
98
- $this->options[$key] = $value;
99
- }
100
-
101
- /**
102
- * Remove a property's value
103
- *
104
- * @param string $key Property key
105
- */
106
- public function __isset($key) {
107
- return isset($this->options[$key]);
108
- }
109
-
110
- /**
111
- * Remove a property's value
112
- *
113
- * @param string $key Property key
114
- */
115
- public function __unset($key) {
116
- if (isset($this->options[$key])) {
117
- unset($this->options[$key]);
118
- }
119
- }
120
-
121
- /**#@+
122
- * @see request()
123
- * @param string $url
124
- * @param array $headers
125
- * @param array $options
126
- * @return Requests_Response
127
- */
128
- /**
129
- * Send a GET request
130
- */
131
- public function get($url, $headers = array(), $options = array()) {
132
- return $this->request($url, $headers, null, Requests::GET, $options);
133
- }
134
-
135
- /**
136
- * Send a HEAD request
137
- */
138
- public function head($url, $headers = array(), $options = array()) {
139
- return $this->request($url, $headers, null, Requests::HEAD, $options);
140
- }
141
-
142
- /**
143
- * Send a DELETE request
144
- */
145
- public function delete($url, $headers = array(), $options = array()) {
146
- return $this->request($url, $headers, null, Requests::DELETE, $options);
147
- }
148
- /**#@-*/
149
-
150
- /**#@+
151
- * @see request()
152
- * @param string $url
153
- * @param array $headers
154
- * @param array $data
155
- * @param array $options
156
- * @return Requests_Response
157
- */
158
- /**
159
- * Send a POST request
160
- */
161
- public function post($url, $headers = array(), $data = array(), $options = array()) {
162
- return $this->request($url, $headers, $data, Requests::POST, $options);
163
- }
164
-
165
- /**
166
- * Send a PUT request
167
- */
168
- public function put($url, $headers = array(), $data = array(), $options = array()) {
169
- return $this->request($url, $headers, $data, Requests::PUT, $options);
170
- }
171
-
172
- /**
173
- * Send a PATCH request
174
- *
175
- * Note: Unlike {@see post} and {@see put}, `$headers` is required, as the
176
- * specification recommends that should send an ETag
177
- *
178
- * @link http://tools.ietf.org/html/rfc5789
179
- */
180
- public function patch($url, $headers, $data = array(), $options = array()) {
181
- return $this->request($url, $headers, $data, Requests::PATCH, $options);
182
- }
183
- /**#@-*/
184
-
185
- /**
186
- * Main interface for HTTP requests
187
- *
188
- * This method initiates a request and sends it via a transport before
189
- * parsing.
190
- *
191
- * @see Requests::request()
192
- *
193
- * @throws Requests_Exception On invalid URLs (`nonhttp`)
194
- *
195
- * @param string $url URL to request
196
- * @param array $headers Extra headers to send with the request
197
- * @param array $data Data to send either as a query string for GET/HEAD requests, or in the body for POST requests
198
- * @param string $type HTTP request type (use Requests constants)
199
- * @param array $options Options for the request (see {@see Requests::request})
200
- * @return Requests_Response
201
- */
202
- public function request($url, $headers = array(), $data = array(), $type = Requests::GET, $options = array()) {
203
- $request = $this->merge_request(compact('url', 'headers', 'data', 'options'));
204
-
205
- return Requests::request($request['url'], $request['headers'], $request['data'], $type, $request['options']);
206
- }
207
-
208
- /**
209
- * Send multiple HTTP requests simultaneously
210
- *
211
- * @see Requests::request_multiple()
212
- *
213
- * @param array $requests Requests data (see {@see Requests::request_multiple})
214
- * @param array $options Global and default options (see {@see Requests::request})
215
- * @return array Responses (either Requests_Response or a Requests_Exception object)
216
- */
217
- public function request_multiple($requests, $options = array()) {
218
- foreach ($requests as $key => $request) {
219
- $requests[$key] = $this->merge_request($request, false);
220
- }
221
-
222
- $options = array_merge($this->options, $options);
223
-
224
- // Disallow forcing the type, as that's a per request setting
225
- unset($options['type']);
226
-
227
- return Requests::request_multiple($requests, $options);
228
- }
229
-
230
- /**
231
- * Merge a request's data with the default data
232
- *
233
- * @param array $request Request data (same form as {@see request_multiple})
234
- * @param boolean $merge_options Should we merge options as well?
235
- * @return array Request data
236
- */
237
- protected function merge_request($request, $merge_options = true) {
238
- if ($this->url !== null) {
239
- $request['url'] = Requests_IRI::absolutize($this->url, $request['url']);
240
- $request['url'] = $request['url']->uri;
241
- }
242
-
243
- $request['headers'] = array_merge($this->headers, $request['headers']);
244
-
245
- if (is_array($request['data']) && is_array($this->data)) {
246
- $request['data'] = array_merge($this->data, $request['data']);
247
- }
248
-
249
- if ($merge_options !== false) {
250
- $request['options'] = array_merge($this->options, $request['options']);
251
-
252
- // Disallow forcing the type, as that's a per request setting
253
- unset($request['options']['type']);
254
- }
255
-
256
- return $request;
257
- }
258
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Transport.php DELETED
@@ -1,41 +0,0 @@
1
- <?php
2
- /**
3
- * Base HTTP transport
4
- *
5
- * @package Requests
6
- * @subpackage Transport
7
- */
8
-
9
- /**
10
- * Base HTTP transport
11
- *
12
- * @package Requests
13
- * @subpackage Transport
14
- */
15
- interface Requests_Transport {
16
- /**
17
- * Perform a request
18
- *
19
- * @param string $url URL to request
20
- * @param array $headers Associative array of request headers
21
- * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
22
- * @param array $options Request options, see {@see Requests::response()} for documentation
23
- * @return string Raw HTTP result
24
- */
25
- public function request($url, $headers = array(), $data = array(), $options = array());
26
-
27
- /**
28
- * Send multiple requests simultaneously
29
- *
30
- * @param array $requests Request data (array of 'url', 'headers', 'data', 'options') as per {@see Requests_Transport::request}
31
- * @param array $options Global options, see {@see Requests::response()} for documentation
32
- * @return array Array of Requests_Response objects (may contain Requests_Exception or string responses as well)
33
- */
34
- public function request_multiple($requests, $options);
35
-
36
- /**
37
- * Self-test whether the transport can be used
38
- * @return bool
39
- */
40
- public static function test();
41
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Transport/cURL.php DELETED
@@ -1,372 +0,0 @@
1
- <?php
2
- /**
3
- * cURL HTTP transport
4
- *
5
- * @package Requests
6
- * @subpackage Transport
7
- */
8
-
9
- /**
10
- * cURL HTTP transport
11
- *
12
- * @package Requests
13
- * @subpackage Transport
14
- */
15
- class Requests_Transport_cURL implements Requests_Transport {
16
- const CURL_7_10_5 = 0x070A05;
17
- const CURL_7_16_2 = 0x071002;
18
-
19
- /**
20
- * Raw HTTP data
21
- *
22
- * @var string
23
- */
24
- public $headers = '';
25
-
26
- /**
27
- * Information on the current request
28
- *
29
- * @var array cURL information array, see {@see http://php.net/curl_getinfo}
30
- */
31
- public $info;
32
-
33
- /**
34
- * Version string
35
- *
36
- * @var long
37
- */
38
- public $version;
39
-
40
- /**
41
- * cURL handle
42
- *
43
- * @var resource
44
- */
45
- protected $fp;
46
-
47
- /**
48
- * Have we finished the headers yet?
49
- *
50
- * @var boolean
51
- */
52
- protected $done_headers = false;
53
-
54
- /**
55
- * If streaming to a file, keep the file pointer
56
- *
57
- * @var resource
58
- */
59
- protected $stream_handle;
60
-
61
- /**
62
- * Constructor
63
- */
64
- public function __construct() {
65
- $curl = curl_version();
66
- $this->version = $curl['version_number'];
67
- $this->fp = curl_init();
68
-
69
- curl_setopt($this->fp, CURLOPT_HEADER, false);
70
- curl_setopt($this->fp, CURLOPT_RETURNTRANSFER, 1);
71
- if ($this->version >= self::CURL_7_10_5) {
72
- curl_setopt($this->fp, CURLOPT_ENCODING, '');
73
- }
74
- if (defined('CURLOPT_PROTOCOLS')) {
75
- curl_setopt($this->fp, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
76
- }
77
- if (defined('CURLOPT_REDIR_PROTOCOLS')) {
78
- curl_setopt($this->fp, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
79
- }
80
- }
81
-
82
- /**
83
- * Perform a request
84
- *
85
- * @throws Requests_Exception On a cURL error (`curlerror`)
86
- *
87
- * @param string $url URL to request
88
- * @param array $headers Associative array of request headers
89
- * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
90
- * @param array $options Request options, see {@see Requests::response()} for documentation
91
- * @return string Raw HTTP result
92
- */
93
- public function request($url, $headers = array(), $data = array(), $options = array()) {
94
- $this->setup_handle($url, $headers, $data, $options);
95
-
96
- $options['hooks']->dispatch('curl.before_send', array(&$this->fp));
97
-
98
- if ($options['filename'] !== false) {
99
- $this->stream_handle = fopen($options['filename'], 'wb');
100
- curl_setopt($this->fp, CURLOPT_FILE, $this->stream_handle);
101
- }
102
-
103
- if (isset($options['verify'])) {
104
- if ($options['verify'] === false) {
105
- curl_setopt($this->fp, CURLOPT_SSL_VERIFYHOST, 0);
106
- curl_setopt($this->fp, CURLOPT_SSL_VERIFYPEER, 0);
107
-
108
- } elseif (is_string($options['verify'])) {
109
- curl_setopt($this->fp, CURLOPT_CAINFO, $options['verify']);
110
- }
111
- }
112
-
113
- if (isset($options['verifyname']) && $options['verifyname'] === false) {
114
- curl_setopt($this->fp, CURLOPT_SSL_VERIFYHOST, 0);
115
- }
116
-
117
- $response = curl_exec($this->fp);
118
-
119
- $options['hooks']->dispatch('curl.after_send', array(&$fake_headers));
120
-
121
- if (curl_errno($this->fp) === 23 || curl_errno($this->fp) === 61) {
122
- curl_setopt($this->fp, CURLOPT_ENCODING, 'none');
123
- $response = curl_exec($this->fp);
124
- }
125
-
126
- $this->process_response($response, $options);
127
- curl_close($this->fp);
128
- return $this->headers;
129
- }
130
-
131
- /**
132
- * Send multiple requests simultaneously
133
- *
134
- * @param array $requests Request data
135
- * @param array $options Global options
136
- * @return array Array of Requests_Response objects (may contain Requests_Exception or string responses as well)
137
- */
138
- public function request_multiple($requests, $options) {
139
- $multihandle = curl_multi_init();
140
- $subrequests = array();
141
- $subhandles = array();
142
-
143
- $class = get_class($this);
144
- foreach ($requests as $id => $request) {
145
- $subrequests[$id] = new $class();
146
- $subhandles[$id] = $subrequests[$id]->get_subrequest_handle($request['url'], $request['headers'], $request['data'], $request['options']);
147
- $request['options']['hooks']->dispatch('curl.before_multi_add', array(&$subhandles[$id]));
148
- curl_multi_add_handle($multihandle, $subhandles[$id]);
149
- }
150
-
151
- $completed = 0;
152
- $responses = array();
153
-
154
- $request['options']['hooks']->dispatch('curl.before_multi_exec', array(&$multihandle));
155
-
156
- do {
157
- $active = false;
158
-
159
- do {
160
- $status = curl_multi_exec($multihandle, $active);
161
- }
162
- while ($status === CURLM_CALL_MULTI_PERFORM);
163
-
164
- $to_process = array();
165
-
166
- // Read the information as needed
167
- while ($done = curl_multi_info_read($multihandle)) {
168
- $key = array_search($done['handle'], $subhandles, true);
169
- if (!isset($to_process[$key])) {
170
- $to_process[$key] = $done;
171
- }
172
- }
173
-
174
- // Parse the finished requests before we start getting the new ones
175
- foreach ($to_process as $key => $done) {
176
- $options = $requests[$key]['options'];
177
- $responses[$key] = $subrequests[$key]->process_response(curl_multi_getcontent($done['handle']), $options);
178
-
179
- $options['hooks']->dispatch('transport.internal.parse_response', array(&$responses[$key], $requests[$key]));
180
-
181
- curl_multi_remove_handle($multihandle, $done['handle']);
182
- curl_close($done['handle']);
183
-
184
- if (!is_string($responses[$key])) {
185
- $options['hooks']->dispatch('multiple.request.complete', array(&$responses[$key], $key));
186
- }
187
- $completed++;
188
- }
189
- }
190
- while ($active || $completed < count($subrequests));
191
-
192
- $request['options']['hooks']->dispatch('curl.after_multi_exec', array(&$multihandle));
193
-
194
- curl_multi_close($multihandle);
195
-
196
- return $responses;
197
- }
198
-
199
- /**
200
- * Get the cURL handle for use in a multi-request
201
- *
202
- * @param string $url URL to request
203
- * @param array $headers Associative array of request headers
204
- * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
205
- * @param array $options Request options, see {@see Requests::response()} for documentation
206
- * @return resource Subrequest's cURL handle
207
- */
208
- public function &get_subrequest_handle($url, $headers, $data, $options) {
209
- $this->setup_handle($url, $headers, $data, $options);
210
-
211
- if ($options['filename'] !== false) {
212
- $this->stream_handle = fopen($options['filename'], 'wb');
213
- curl_setopt($this->fp, CURLOPT_FILE, $this->stream_handle);
214
- }
215
-
216
- return $this->fp;
217
- }
218
-
219
- /**
220
- * Setup the cURL handle for the given data
221
- *
222
- * @param string $url URL to request
223
- * @param array $headers Associative array of request headers
224
- * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
225
- * @param array $options Request options, see {@see Requests::response()} for documentation
226
- */
227
- protected function setup_handle($url, $headers, $data, $options) {
228
- $options['hooks']->dispatch('curl.before_request', array(&$this->fp));
229
-
230
- $headers = Requests::flatten($headers);
231
- if (in_array($options['type'], array(Requests::HEAD, Requests::GET, Requests::DELETE)) & !empty($data)) {
232
- $url = self::format_get($url, $data);
233
- }
234
- elseif (!empty($data) && !is_string($data)) {
235
- $data = http_build_query($data, null, '&');
236
- }
237
-
238
- switch ($options['type']) {
239
- case Requests::POST:
240
- curl_setopt($this->fp, CURLOPT_POST, true);
241
- curl_setopt($this->fp, CURLOPT_POSTFIELDS, $data);
242
- break;
243
- case Requests::PATCH:
244
- case Requests::PUT:
245
- curl_setopt($this->fp, CURLOPT_CUSTOMREQUEST, $options['type']);
246
- curl_setopt($this->fp, CURLOPT_POSTFIELDS, $data);
247
- break;
248
- case Requests::DELETE:
249
- curl_setopt($this->fp, CURLOPT_CUSTOMREQUEST, 'DELETE');
250
- break;
251
- case Requests::HEAD:
252
- curl_setopt($this->fp, CURLOPT_NOBODY, true);
253
- break;
254
- }
255
-
256
- if( is_int($options['timeout']) or $this->version < self::CURL_7_16_2 ) {
257
- curl_setopt($this->fp, CURLOPT_TIMEOUT, ceil($options['timeout']));
258
- } else {
259
- curl_setopt($this->fp, CURLOPT_TIMEOUT_MS, round($options['timeout'] * 1000) );
260
- }
261
- if( is_int($options['connect_timeout']) or $this->version < self::CURL_7_16_2 ) {
262
- curl_setopt($this->fp, CURLOPT_CONNECTTIMEOUT, ceil($options['connect_timeout']));
263
- } else {
264
- curl_setopt($this->fp, CURLOPT_CONNECTTIMEOUT_MS, round($options['connect_timeout'] * 1000));
265
- }
266
- curl_setopt($this->fp, CURLOPT_URL, $url);
267
- curl_setopt($this->fp, CURLOPT_REFERER, $url);
268
- curl_setopt($this->fp, CURLOPT_USERAGENT, $options['useragent']);
269
- curl_setopt($this->fp, CURLOPT_HTTPHEADER, $headers);
270
-
271
- if (true === $options['blocking']) {
272
- curl_setopt($this->fp, CURLOPT_HEADERFUNCTION, array(&$this, 'stream_headers'));
273
- }
274
- }
275
-
276
- public function process_response($response, $options) {
277
- if ($options['blocking'] === false) {
278
- $fake_headers = '';
279
- $options['hooks']->dispatch('curl.after_request', array(&$fake_headers));
280
- return false;
281
- }
282
- if ($options['filename'] !== false) {
283
- fclose($this->stream_handle);
284
- $this->headers = trim($this->headers);
285
- }
286
- else {
287
- $this->headers .= $response;
288
- }
289
-
290
- if (curl_errno($this->fp)) {
291
- throw new Requests_Exception('cURL error ' . curl_errno($this->fp) . ': ' . curl_error($this->fp), 'curlerror', $this->fp);
292
- return;
293
- }
294
- $this->info = curl_getinfo($this->fp);
295
-
296
- $options['hooks']->dispatch('curl.after_request', array(&$this->headers));
297
- return $this->headers;
298
- }
299
-
300
- /**
301
- * Collect the headers as they are received
302
- *
303
- * @param resource $handle cURL resource
304
- * @param string $headers Header string
305
- * @return integer Length of provided header
306
- */
307
- protected function stream_headers($handle, $headers) {
308
- // Why do we do this? cURL will send both the final response and any
309
- // interim responses, such as a 100 Continue. We don't need that.
310
- // (We may want to keep this somewhere just in case)
311
- if ($this->done_headers) {
312
- $this->headers = '';
313
- $this->done_headers = false;
314
- }
315
- $this->headers .= $headers;
316
-
317
- if ($headers === "\r\n") {
318
- $this->done_headers = true;
319
- }
320
- return strlen($headers);
321
- }
322
-
323
- /**
324
- * Format a URL given GET data
325
- *
326
- * @param string $url
327
- * @param array|object $data Data to build query using, see {@see http://php.net/http_build_query}
328
- * @return string URL with data
329
- */
330
- protected static function format_get($url, $data) {
331
- if (!empty($data)) {
332
- $url_parts = parse_url($url);
333
- if (empty($url_parts['query'])) {
334
- $query = $url_parts['query'] = '';
335
- }
336
- else {
337
- $query = $url_parts['query'];
338
- }
339
-
340
- $query .= '&' . http_build_query($data, null, '&');
341
- $query = trim($query, '&');
342
-
343
- if (empty($url_parts['query'])) {
344
- $url .= '?' . $query;
345
- }
346
- else {
347
- $url = str_replace($url_parts['query'], $query, $url);
348
- }
349
- }
350
- return $url;
351
- }
352
-
353
- /**
354
- * Whether this transport is valid
355
- *
356
- * @codeCoverageIgnore
357
- * @return boolean True if the transport is valid, false otherwise.
358
- */
359
- public static function test($capabilities = array()) {
360
- if (!function_exists('curl_init') && !function_exists('curl_exec'))
361
- return false;
362
-
363
- // If needed, check that our installed curl version supports SSL
364
- if (isset( $capabilities['ssl'] ) && $capabilities['ssl']) {
365
- $curl_version = curl_version();
366
- if (!(CURL_VERSION_SSL & $curl_version['features']))
367
- return false;
368
- }
369
-
370
- return true;
371
- }
372
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Transport/cacert.pem DELETED
@@ -1,3554 +0,0 @@
1
- ##
2
- ## ca-bundle.crt -- Bundle of CA Root Certificates
3
- ##
4
- ## Certificate data from Mozilla as of: Sat Dec 29 20:03:40 2012
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/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
- # @(#) $RCSfile: certdata.txt,v $ $Revision: 1.87 $ $Date: 2012/12/29 16:32:45 $
18
-
19
- EE Certification Centre Root CA
20
- ===============================
21
- -----BEGIN CERTIFICATE-----
22
- MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
23
- EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy
24
- dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw
25
- MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB
26
- UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy
27
- ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
28
- DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM
29
- TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2
30
- rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw
31
- 93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN
32
- P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T
33
- AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ
34
- MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF
35
- BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj
36
- xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM
37
- lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
38
- uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU
39
- 3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM
40
- dcGWxZ0=
41
- -----END CERTIFICATE-----
42
-
43
- GTE CyberTrust Global Root
44
- ==========================
45
- -----BEGIN CERTIFICATE-----
46
- MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
47
- Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG
48
- A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz
49
- MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL
50
- Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0
51
- IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u
52
- sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql
53
- HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID
54
- AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW
55
- M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF
56
- NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
57
- -----END CERTIFICATE-----
58
-
59
- Thawte Server CA
60
- ================
61
- -----BEGIN CERTIFICATE-----
62
- MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
63
- DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
64
- dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE
65
- AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j
66
- b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV
67
- BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u
68
- c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG
69
- A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
70
- ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
71
- /Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7
72
- 1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR
73
- MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J
74
- GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ
75
- GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
76
- -----END CERTIFICATE-----
77
-
78
- Thawte Premium Server CA
79
- ========================
80
- -----BEGIN CERTIFICATE-----
81
- MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
82
- DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
83
- dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
84
- AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
85
- ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
86
- AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
87
- VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
88
- aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
89
- cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
90
- aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
91
- Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
92
- qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
93
- SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
94
- 8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
95
- UCemDaYj+bvLpgcUQg==
96
- -----END CERTIFICATE-----
97
-
98
- Equifax Secure CA
99
- =================
100
- -----BEGIN CERTIFICATE-----
101
- MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
102
- ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
103
- MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
104
- B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
105
- nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
106
- fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
107
- 8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
108
- A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
109
- CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
110
- A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
111
- spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
112
- Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
113
- zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
114
- BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
115
- 70+sB3c4
116
- -----END CERTIFICATE-----
117
-
118
- Digital Signature Trust Co. Global CA 1
119
- =======================================
120
- -----BEGIN CERTIFICATE-----
121
- MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
122
- ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy
123
- MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
124
- IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA
125
- A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE
126
- NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i
127
- o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
128
- BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
129
- dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
130
- IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY
131
- MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM
132
- BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
133
- ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq
134
- kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4
135
- RbyhkwS7hp86W0N6w4pl
136
- -----END CERTIFICATE-----
137
-
138
- Digital Signature Trust Co. Global CA 3
139
- =======================================
140
- -----BEGIN CERTIFICATE-----
141
- MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
142
- ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy
143
- MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
144
- IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA
145
- A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD
146
- VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS
147
- xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
148
- BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
149
- dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
150
- IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
151
- MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM
152
- BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
153
- AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi
154
- up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1
155
- mPnHfxsb1gYgAlihw6ID
156
- -----END CERTIFICATE-----
157
-
158
- Verisign Class 3 Public Primary Certification Authority
159
- =======================================================
160
- -----BEGIN CERTIFICATE-----
161
- MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
162
- FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
163
- IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
164
- XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
165
- IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
166
- A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
167
- f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
168
- hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
169
- TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
170
- WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
171
- Tqj/ZA1k
172
- -----END CERTIFICATE-----
173
-
174
- Verisign Class 3 Public Primary Certification Authority - G2
175
- ============================================================
176
- -----BEGIN CERTIFICATE-----
177
- MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
178
- MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
179
- eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
180
- biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
181
- dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
182
- MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
183
- eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
184
- biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
185
- dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
186
- FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
187
- lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
188
- MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
189
- 1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
190
- Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
191
- -----END CERTIFICATE-----
192
-
193
- GlobalSign Root CA
194
- ==================
195
- -----BEGIN CERTIFICATE-----
196
- MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
197
- GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
198
- b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
199
- BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
200
- VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
201
- DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
202
- THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
203
- Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
204
- c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
205
- gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
206
- HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
207
- AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
208
- Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
209
- j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
210
- hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
211
- X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
212
- -----END CERTIFICATE-----
213
-
214
- GlobalSign Root CA - R2
215
- =======================
216
- -----BEGIN CERTIFICATE-----
217
- MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
218
- YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
219
- bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
220
- aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
221
- bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
222
- ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
223
- s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
224
- S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
225
- TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
226
- ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
227
- FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
228
- YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
229
- BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
230
- 9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
231
- 01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
232
- 9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
233
- TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
234
- -----END CERTIFICATE-----
235
-
236
- ValiCert Class 1 VA
237
- ===================
238
- -----BEGIN CERTIFICATE-----
239
- MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
240
- b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
241
- YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
242
- bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy
243
- MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
244
- d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg
245
- UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
246
- LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
247
- A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi
248
- GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm
249
- DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG
250
- lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX
251
- icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP
252
- Orf1LXLI
253
- -----END CERTIFICATE-----
254
-
255
- ValiCert Class 2 VA
256
- ===================
257
- -----BEGIN CERTIFICATE-----
258
- MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
259
- b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
260
- YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
261
- bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
262
- MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
263
- d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg
264
- UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
265
- LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
266
- A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC
267
- CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf
268
- ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ
269
- SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV
270
- UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8
271
- W9ViH0Pd
272
- -----END CERTIFICATE-----
273
-
274
- RSA Root Certificate 1
275
- ======================
276
- -----BEGIN CERTIFICATE-----
277
- MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
278
- b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
279
- YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
280
- bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
281
- MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
282
- d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg
283
- UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
284
- LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
285
- A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td
286
- 3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H
287
- BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs
288
- 3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF
289
- V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r
290
- on+jjBXu
291
- -----END CERTIFICATE-----
292
-
293
- Verisign Class 3 Public Primary Certification Authority - G3
294
- ============================================================
295
- -----BEGIN CERTIFICATE-----
296
- MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
297
- UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
298
- cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
299
- IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
300
- dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
301
- CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
302
- dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
303
- cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
304
- Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
305
- ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
306
- EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
307
- cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
308
- EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
309
- 055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
310
- ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
311
- j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
312
- /Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
313
- xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
314
- t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
315
- -----END CERTIFICATE-----
316
-
317
- Verisign Class 4 Public Primary Certification Authority - G3
318
- ============================================================
319
- -----BEGIN CERTIFICATE-----
320
- MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
321
- UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
322
- cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
323
- IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
324
- dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
325
- CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
326
- dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
327
- cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
328
- Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
329
- ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
330
- tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
331
- 8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
332
- Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
333
- Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
334
- j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
335
- mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
336
- fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
337
- RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
338
- UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
339
- -----END CERTIFICATE-----
340
-
341
- Entrust.net Secure Server CA
342
- ============================
343
- -----BEGIN CERTIFICATE-----
344
- MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV
345
- BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg
346
- cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl
347
- ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv
348
- cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG
349
- A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi
350
- eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p
351
- dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0
352
- aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ
353
- aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5
354
- gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw
355
- ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw
356
- CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l
357
- dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
358
- bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
359
- cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
360
- dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw
361
- NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow
362
- HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
363
- BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN
364
- Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9
365
- n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
366
- -----END CERTIFICATE-----
367
-
368
- Entrust.net Premium 2048 Secure Server CA
369
- =========================================
370
- -----BEGIN CERTIFICATE-----
371
- MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
372
- ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
373
- bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
374
- BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
375
- NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
376
- d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
377
- MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
378
- ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
379
- MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
380
- Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
381
- hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
382
- nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
383
- VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC
384
- AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER
385
- gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B
386
- AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
387
- oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS
388
- o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z
389
- 2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX
390
- OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ==
391
- -----END CERTIFICATE-----
392
-
393
- Baltimore CyberTrust Root
394
- =========================
395
- -----BEGIN CERTIFICATE-----
396
- MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
397
- ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
398
- ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
399
- SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
400
- dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
401
- uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
402
- UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
403
- G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
404
- XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
405
- l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
406
- VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
407
- BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
408
- cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
409
- hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
410
- Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
411
- RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
412
- -----END CERTIFICATE-----
413
-
414
- Equifax Secure Global eBusiness CA
415
- ==================================
416
- -----BEGIN CERTIFICATE-----
417
- MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
418
- RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp
419
- bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx
420
- HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds
421
- b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV
422
- PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN
423
- qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn
424
- hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
425
- BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs
426
- MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN
427
- I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY
428
- NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
429
- -----END CERTIFICATE-----
430
-
431
- Equifax Secure eBusiness CA 1
432
- =============================
433
- -----BEGIN CERTIFICATE-----
434
- MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
435
- RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB
436
- LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE
437
- ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz
438
- IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ
439
- 1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a
440
- IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk
441
- MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW
442
- Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF
443
- AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5
444
- lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+
445
- KpYrtWKmpj29f5JZzVoqgrI3eQ==
446
- -----END CERTIFICATE-----
447
-
448
- Equifax Secure eBusiness CA 2
449
- =============================
450
- -----BEGIN CERTIFICATE-----
451
- MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE
452
- ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y
453
- MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT
454
- DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB
455
- nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn
456
- 2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5
457
- BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG
458
- A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx
459
- JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG
460
- A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e
461
- uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB
462
- Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1
463
- jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia
464
- 78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm
465
- V+GRMOrN
466
- -----END CERTIFICATE-----
467
-
468
- AddTrust Low-Value Services Root
469
- ================================
470
- -----BEGIN CERTIFICATE-----
471
- MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
472
- QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
473
- cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
474
- CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
475
- ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
476
- AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
477
- 54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
478
- oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
479
- Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
480
- GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
481
- HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
482
- AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
483
- RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
484
- HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
485
- ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
486
- iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
487
- eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
488
- mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
489
- ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
490
- -----END CERTIFICATE-----
491
-
492
- AddTrust External Root
493
- ======================
494
- -----BEGIN CERTIFICATE-----
495
- MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
496
- QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
497
- VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
498
- NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
499
- cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
500
- Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
501
- +iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
502
- Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
503
- aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
504
- 2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
505
- 7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
506
- BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
507
- VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
508
- VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
509
- IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
510
- j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
511
- 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
512
- e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
513
- G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
514
- -----END CERTIFICATE-----
515
-
516
- AddTrust Public Services Root
517
- =============================
518
- -----BEGIN CERTIFICATE-----
519
- MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
520
- QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
521
- cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
522
- BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
523
- dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
524
- AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
525
- nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
526
- d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
527
- Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
528
- HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
529
- A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
530
- /zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
531
- FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
532
- A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
533
- JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
534
- +YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
535
- GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
536
- Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
537
- EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
538
- -----END CERTIFICATE-----
539
-
540
- AddTrust Qualified Certificates Root
541
- ====================================
542
- -----BEGIN CERTIFICATE-----
543
- MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
544
- QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
545
- cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
546
- CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
547
- IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
548
- 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
549
- 64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
550
- KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
551
- L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
552
- wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
553
- MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
554
- BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
555
- BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
556
- azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
557
- ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
558
- GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
559
- dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
560
- RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
561
- iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
562
- -----END CERTIFICATE-----
563
-
564
- Entrust Root Certification Authority
565
- ====================================
566
- -----BEGIN CERTIFICATE-----
567
- MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
568
- BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
569
- b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
570
- A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
571
- MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
572
- MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
573
- Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
574
- dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
575
- ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
576
- A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
577
- Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
578
- j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
579
- rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
580
- DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
581
- MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
582
- hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
583
- A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
584
- Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
585
- v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
586
- W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
587
- tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
588
- -----END CERTIFICATE-----
589
-
590
- RSA Security 2048 v3
591
- ====================
592
- -----BEGIN CERTIFICATE-----
593
- MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
594
- ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
595
- MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
596
- BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
597
- AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
598
- Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
599
- WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
600
- KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
601
- +Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
602
- MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
603
- FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
604
- v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
605
- 0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
606
- VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
607
- nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
608
- pKnXwiJPZ9d37CAFYd4=
609
- -----END CERTIFICATE-----
610
-
611
- GeoTrust Global CA
612
- ==================
613
- -----BEGIN CERTIFICATE-----
614
- MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
615
- Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
616
- MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
617
- LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
618
- CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
619
- BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
620
- 8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
621
- T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
622
- vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
623
- AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
624
- DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
625
- zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
626
- d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
627
- mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
628
- XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
629
- Mw==
630
- -----END CERTIFICATE-----
631
-
632
- GeoTrust Global CA 2
633
- ====================
634
- -----BEGIN CERTIFICATE-----
635
- MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
636
- R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
637
- MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
638
- LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
639
- ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
640
- NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
641
- LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
642
- Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
643
- HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
644
- MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
645
- K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
646
- srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
647
- ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
648
- OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
649
- x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
650
- H4z1Ir+rzoPz4iIprn2DQKi6bA==
651
- -----END CERTIFICATE-----
652
-
653
- GeoTrust Universal CA
654
- =====================
655
- -----BEGIN CERTIFICATE-----
656
- MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
657
- R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
658
- MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
659
- Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
660
- ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
661
- JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
662
- RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
663
- 7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
664
- 8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
665
- qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
666
- Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
667
- Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
668
- KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
669
- ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
670
- XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
671
- hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
672
- aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
673
- qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
674
- oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
675
- xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
676
- KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
677
- DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
678
- xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
679
- p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
680
- P/rmMuGNG2+k5o7Y+SlIis5z/iw=
681
- -----END CERTIFICATE-----
682
-
683
- GeoTrust Universal CA 2
684
- =======================
685
- -----BEGIN CERTIFICATE-----
686
- MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
687
- R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
688
- MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
689
- SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
690
- A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
691
- DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
692
- j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
693
- JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
694
- QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
695
- WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
696
- 20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
697
- ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
698
- SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
699
- 8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
700
- +/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
701
- BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
702
- dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
703
- 4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
704
- mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
705
- A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
706
- Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
707
- pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
708
- FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
709
- gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
710
- X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
711
- -----END CERTIFICATE-----
712
-
713
- America Online Root Certification Authority 1
714
- =============================================
715
- -----BEGIN CERTIFICATE-----
716
- MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
717
- QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
718
- Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG
719
- A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
720
- T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD
721
- ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG
722
- v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z
723
- DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh
724
- sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP
725
- 8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T
726
- AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z
727
- o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf
728
- GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF
729
- VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft
730
- 3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g
731
- Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
732
- sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
733
- -----END CERTIFICATE-----
734
-
735
- America Online Root Certification Authority 2
736
- =============================================
737
- -----BEGIN CERTIFICATE-----
738
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO
746
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- +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
- 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
- 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
- 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
- 1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf
761
- 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
- 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
763
- cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk=
764
- -----END CERTIFICATE-----
765
-
766
- Visa eCommerce Root
767
- ===================
768
- -----BEGIN CERTIFICATE-----
769
- MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
770
- EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
771
- QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
772
- WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
773
- VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
774
- bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
775
- F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
776
- RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
777
- TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
778
- /k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
779
- GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
780
- MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
781
- CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
782
- YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
783
- zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
784
- YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
785
- 398znM/jra6O1I7mT1GvFpLgXPYHDw==
786
- -----END CERTIFICATE-----
787
-
788
- Certum Root CA
789
- ==============
790
- -----BEGIN CERTIFICATE-----
791
- MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
792
- ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
793
- Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
794
- by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
795
- wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
796
- kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
797
- 89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
798
- Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
799
- NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
800
- hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
801
- GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
802
- GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
803
- 0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
804
- qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
805
- -----END CERTIFICATE-----
806
-
807
- Comodo AAA Services root
808
- ========================
809
- -----BEGIN CERTIFICATE-----
810
- MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
811
- R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
812
- TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
813
- MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
814
- c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
815
- BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
816
- ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
817
- C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
818
- i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
819
- Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
820
- Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
821
- Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
822
- BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
823
- cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
824
- LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
825
- 7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
826
- Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
827
- 8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
828
- 12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
829
- -----END CERTIFICATE-----
830
-
831
- Comodo Secure Services root
832
- ===========================
833
- -----BEGIN CERTIFICATE-----
834
- MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
835
- R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
836
- TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
837
- MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
838
- Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
839
- BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
840
- ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
841
- 9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
842
- rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
843
- oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
844
- p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
845
- FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
846
- gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
847
- YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
848
- aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
849
- 4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
850
- Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
851
- DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
852
- pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
853
- RR3B7Hzs/Sk=
854
- -----END CERTIFICATE-----
855
-
856
- Comodo Trusted Services root
857
- ============================
858
- -----BEGIN CERTIFICATE-----
859
- MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
860
- R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
861
- TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
862
- MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
863
- bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
864
- IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
865
- AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
866
- 3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
867
- /9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
868
- juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
869
- ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
870
- DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
871
- /zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
872
- ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
873
- cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
874
- uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
875
- pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
876
- BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
877
- R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
878
- 9y5Xt5hwXsjEeLBi
879
- -----END CERTIFICATE-----
880
-
881
- QuoVadis Root CA
882
- ================
883
- -----BEGIN CERTIFICATE-----
884
- MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
885
- ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
886
- eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
887
- MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
888
- cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
889
- EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
890
- AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
891
- J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
892
- F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
893
- YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
894
- AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
895
- PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
896
- ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
897
- MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
898
- YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
899
- ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
900
- Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
901
- Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
902
- BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
903
- FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
904
- aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
905
- tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
906
- fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
907
- LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
908
- gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
909
- 5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
910
- 5nrQNiOKSnQ2+Q==
911
- -----END CERTIFICATE-----
912
-
913
- QuoVadis Root CA 2
914
- ==================
915
- -----BEGIN CERTIFICATE-----
916
- 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
- EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
918
- 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
- aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
920
- DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
921
- 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
- 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
- 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
- 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
- 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
- wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
927
- 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
- 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
- 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
- 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
- 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
- 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
- Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
934
- 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
- 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
- +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
- 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
- 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
- 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
- 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
- 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
942
- -----END CERTIFICATE-----
943
-
944
- QuoVadis Root CA 3
945
- ==================
946
- -----BEGIN CERTIFICATE-----
947
- MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
948
- EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
949
- OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
950
- aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
951
- DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
952
- DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
953
- KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
954
- DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
955
- BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
956
- p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
957
- nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
958
- MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
959
- Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
960
- uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
961
- BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
962
- YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
963
- aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
964
- BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
965
- VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
966
- ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
967
- AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
968
- qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
969
- hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
970
- POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
971
- Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
972
- 8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
973
- bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
974
- g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
975
- vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
976
- qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
977
- -----END CERTIFICATE-----
978
-
979
- Security Communication Root CA
980
- ==============================
981
- -----BEGIN CERTIFICATE-----
982
- MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
983
- U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
984
- HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
985
- U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
986
- ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
987
- 8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
988
- DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
989
- 5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
990
- DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
991
- JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
992
- DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
993
- 0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
994
- mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
995
- s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
996
- 6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
997
- FL39vmwLAw==
998
- -----END CERTIFICATE-----
999
-
1000
- Sonera Class 2 Root CA
1001
- ======================
1002
- -----BEGIN CERTIFICATE-----
1003
- MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
1004
- U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
1005
- NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
1006
- IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
1007
- /Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
1008
- dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
1009
- f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
1010
- tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
1011
- nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
1012
- XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
1013
- 0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
1014
- cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
1015
- Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
1016
- EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
1017
- llpwrN9M
1018
- -----END CERTIFICATE-----
1019
-
1020
- Staat der Nederlanden Root CA
1021
- =============================
1022
- -----BEGIN CERTIFICATE-----
1023
- MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
1024
- ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
1025
- Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
1026
- HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
1027
- bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
1028
- vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
1029
- jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
1030
- C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
1031
- vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
1032
- 22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
1033
- HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
1034
- dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
1035
- BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
1036
- EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
1037
- MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
1038
- nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
1039
- iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
1040
- -----END CERTIFICATE-----
1041
-
1042
- TDC Internet Root CA
1043
- ====================
1044
- -----BEGIN CERTIFICATE-----
1045
- MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE
1046
- ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx
1047
- NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu
1048
- ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
1049
- MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j
1050
- xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL
1051
- znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc
1052
- 5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6
1053
- otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI
1054
- AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM
1055
- VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM
1056
- MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC
1057
- AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe
1058
- UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G
1059
- CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m
1060
- gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
1061
- 2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb
1062
- O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU
1063
- Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l
1064
- -----END CERTIFICATE-----
1065
-
1066
- UTN DATACorp SGC Root CA
1067
- ========================
1068
- -----BEGIN CERTIFICATE-----
1069
- MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE
1070
- BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
1071
- IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ
1072
- BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa
1073
- MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
1074
- HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy
1075
- dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC
1076
- AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys
1077
- raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo
1078
- wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA
1079
- 9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv
1080
- 33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud
1081
- DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9
1082
- BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD
1083
- LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
1084
- DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
1085
- Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0
1086
- I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx
1087
- EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP
1088
- DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
1089
- -----END CERTIFICATE-----
1090
-
1091
- UTN USERFirst Hardware Root CA
1092
- ==============================
1093
- -----BEGIN CERTIFICATE-----
1094
- MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
1095
- BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
1096
- IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
1097
- BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
1098
- OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
1099
- eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
1100
- ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
1101
- DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
1102
- wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
1103
- tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
1104
- i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
1105
- Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
1106
- gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
1107
- lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
1108
- UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
1109
- BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
1110
- //bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
1111
- XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
1112
- lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
1113
- iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
1114
- nfhmqA==
1115
- -----END CERTIFICATE-----
1116
-
1117
- Camerfirma Chambers of Commerce Root
1118
- ====================================
1119
- -----BEGIN CERTIFICATE-----
1120
- MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
1121
- QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
1122
- ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
1123
- NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
1124
- cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
1125
- MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
1126
- AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
1127
- xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
1128
- NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
1129
- DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
1130
- d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
1131
- EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
1132
- cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
1133
- AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
1134
- bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
1135
- VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
1136
- aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
1137
- fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
1138
- L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
1139
- UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
1140
- ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
1141
- erfutGWaIZDgqtCYvDi1czyL+Nw=
1142
- -----END CERTIFICATE-----
1143
-
1144
- Camerfirma Global Chambersign Root
1145
- ==================================
1146
- -----BEGIN CERTIFICATE-----
1147
- MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
1148
- QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
1149
- ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
1150
- NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
1151
- YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
1152
- MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
1153
- ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
1154
- 1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
1155
- by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
1156
- 6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
1157
- 8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
1158
- BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
1159
- aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
1160
- Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
1161
- aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
1162
- ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
1163
- bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
1164
- PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
1165
- gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
1166
- PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
1167
- IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
1168
- t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
1169
- -----END CERTIFICATE-----
1170
-
1171
- NetLock Notary (Class A) Root
1172
- =============================
1173
- -----BEGIN CERTIFICATE-----
1174
- MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
1175
- EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
1176
- dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
1177
- ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
1178
- DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
1179
- EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
1180
- VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
1181
- cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
1182
- D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
1183
- z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
1184
- /tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
1185
- tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
1186
- 4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
1187
- A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
1188
- Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
1189
- bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
1190
- IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
1191
- LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
1192
- ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
1193
- IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
1194
- IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
1195
- b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
1196
- bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
1197
- Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
1198
- bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
1199
- ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
1200
- ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
1201
- CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
1202
- KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
1203
- 8CgHrTwXZoi1/baI
1204
- -----END CERTIFICATE-----
1205
-
1206
- NetLock Business (Class B) Root
1207
- ===============================
1208
- -----BEGIN CERTIFICATE-----
1209
- MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
1210
- CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
1211
- BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg
1212
- VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD
1213
- VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv
1214
- bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg
1215
- VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
1216
- iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S
1217
- o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr
1218
- 1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
1219
- HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ
1220
- RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh
1221
- dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0
1222
- ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv
1223
- c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg
1224
- YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
1225
- c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz
1226
- Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA
1227
- bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl
1228
- IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2
1229
- YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj
1230
- cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM
1231
- 43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR
1232
- stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI
1233
- -----END CERTIFICATE-----
1234
-
1235
- NetLock Express (Class C) Root
1236
- ==============================
1237
- -----BEGIN CERTIFICATE-----
1238
- MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT
1239
- CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
1240
- BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD
1241
- KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ
1242
- BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
1243
- dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j
1244
- ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB
1245
- jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z
1246
- W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63
1247
- euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw
1248
- DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN
1249
- RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn
1250
- YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB
1251
- IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i
1252
- aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0
1253
- ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
1254
- ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo
1255
- dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y
1256
- emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k
1257
- IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ
1258
- UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg
1259
- YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2
1260
- xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW
1261
- gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A==
1262
- -----END CERTIFICATE-----
1263
-
1264
- XRamp Global CA Root
1265
- ====================
1266
- -----BEGIN CERTIFICATE-----
1267
- MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
1268
- BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
1269
- dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
1270
- dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
1271
- HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
1272
- U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
1273
- dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
1274
- IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
1275
- foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
1276
- zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
1277
- AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
1278
- xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
1279
- EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
1280
- oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
1281
- AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
1282
- /Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
1283
- qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
1284
- nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
1285
- 8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
1286
- -----END CERTIFICATE-----
1287
-
1288
- Go Daddy Class 2 CA
1289
- ===================
1290
- -----BEGIN CERTIFICATE-----
1291
- MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
1292
- VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
1293
- ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
1294
- A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
1295
- RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
1296
- ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
1297
- 2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
1298
- qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
1299
- YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
1300
- vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
1301
- BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
1302
- atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
1303
- MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
1304
- A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
1305
- PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
1306
- I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
1307
- HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
1308
- Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
1309
- vZ8=
1310
- -----END CERTIFICATE-----
1311
-
1312
- Starfield Class 2 CA
1313
- ====================
1314
- -----BEGIN CERTIFICATE-----
1315
- MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
1316
- U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
1317
- Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
1318
- MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
1319
- A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
1320
- SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
1321
- bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
1322
- JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
1323
- epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
1324
- F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
1325
- MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
1326
- hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
1327
- bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
1328
- QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
1329
- afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
1330
- PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
1331
- xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
1332
- KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
1333
- QBFGmh95DmK/D5fs4C8fF5Q=
1334
- -----END CERTIFICATE-----
1335
-
1336
- StartCom Certification Authority
1337
- ================================
1338
- -----BEGIN CERTIFICATE-----
1339
- MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
1340
- U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
1341
- ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
1342
- NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
1343
- LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
1344
- U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
1345
- ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
1346
- o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
1347
- Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
1348
- eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
1349
- 2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
1350
- 6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
1351
- osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
1352
- untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
1353
- UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
1354
- 37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
1355
- FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
1356
- Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
1357
- YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
1358
- AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
1359
- Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
1360
- U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
1361
- LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
1362
- cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
1363
- cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
1364
- dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
1365
- AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
1366
- 3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
1367
- vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
1368
- fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
1369
- fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
1370
- EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
1371
- yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
1372
- 1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
1373
- lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
1374
- g14=
1375
- -----END CERTIFICATE-----
1376
-
1377
- Taiwan GRCA
1378
- ===========
1379
- -----BEGIN CERTIFICATE-----
1380
- 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
- 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
- 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
- dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD
1384
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8
1393
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- +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
1405
- -----END CERTIFICATE-----
1406
-
1407
- Firmaprofesional Root CA
1408
- ========================
1409
- -----BEGIN CERTIFICATE-----
1410
- MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT
1411
- GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp
1412
- Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA
1413
- ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL
1414
- MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT
1415
- OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2
1416
- ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB
1417
- AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V
1418
- j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH
1419
- lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf
1420
- 3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8
1421
- NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww
1422
- KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG
1423
- AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud
1424
- DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD
1425
- ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
1426
- u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf
1427
- wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm
1428
- 7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG
1429
- VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA=
1430
- -----END CERTIFICATE-----
1431
-
1432
- Wells Fargo Root CA
1433
- ===================
1434
- -----BEGIN CERTIFICATE-----
1435
- MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV
1436
- BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv
1437
- cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
1438
- MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl
1439
- bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv
1440
- MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
1441
- SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX
1442
- x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3
1443
- E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5
1444
- OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j
1445
- sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj
1446
- YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF
1447
- BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD
1448
- ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv
1449
- m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R
1450
- OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
1451
- x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023
1452
- tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
1453
- -----END CERTIFICATE-----
1454
-
1455
- Swisscom Root CA 1
1456
- ==================
1457
- -----BEGIN CERTIFICATE-----
1458
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ
1477
- 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
- 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
- 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
- OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3
1481
- 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
- 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
- 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
1484
- NY6E0F/6MBr1mmz0DlP5OlvRHA==
1485
- -----END CERTIFICATE-----
1486
-
1487
- DigiCert Assured ID Root CA
1488
- ===========================
1489
- -----BEGIN CERTIFICATE-----
1490
- MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
1491
- EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
1492
- IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
1493
- MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
1494
- ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
1495
- ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
1496
- 9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
1497
- UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
1498
- /lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
1499
- oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
1500
- GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
1501
- 66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
1502
- hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
1503
- EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
1504
- SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
1505
- 8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
1506
- +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
1507
- -----END CERTIFICATE-----
1508
-
1509
- DigiCert Global Root CA
1510
- =======================
1511
- -----BEGIN CERTIFICATE-----
1512
- MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
1513
- EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
1514
- HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
1515
- MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
1516
- dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
1517
- hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
1518
- TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
1519
- BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
1520
- 4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
1521
- 7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
1522
- o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
1523
- 8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
1524
- BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
1525
- EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
1526
- tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
1527
- UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
1528
- CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
1529
- -----END CERTIFICATE-----
1530
-
1531
- DigiCert High Assurance EV Root CA
1532
- ==================================
1533
- -----BEGIN CERTIFICATE-----
1534
- MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
1535
- EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
1536
- KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
1537
- MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
1538
- MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
1539
- Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
1540
- Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
1541
- OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
1542
- MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
1543
- NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
1544
- h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
1545
- Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
1546
- JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
1547
- V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
1548
- myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
1549
- mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
1550
- vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
1551
- -----END CERTIFICATE-----
1552
-
1553
- Certplus Class 2 Primary CA
1554
- ===========================
1555
- -----BEGIN CERTIFICATE-----
1556
- MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
1557
- BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
1558
- OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
1559
- dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
1560
- ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
1561
- 5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
1562
- Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
1563
- YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
1564
- e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
1565
- CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
1566
- YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
1567
- L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
1568
- P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
1569
- TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
1570
- 7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
1571
- //1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
1572
- l7+ijrRU
1573
- -----END CERTIFICATE-----
1574
-
1575
- DST Root CA X3
1576
- ==============
1577
- -----BEGIN CERTIFICATE-----
1578
- MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
1579
- ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
1580
- DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
1581
- cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
1582
- ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
1583
- rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
1584
- UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
1585
- xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
1586
- utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
1587
- AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
1588
- MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
1589
- dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
1590
- GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
1591
- RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
1592
- fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
1593
- -----END CERTIFICATE-----
1594
-
1595
- DST ACES CA X6
1596
- ==============
1597
- -----BEGIN CERTIFICATE-----
1598
- MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
1599
- EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
1600
- MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
1601
- MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
1602
- CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
1603
- AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
1604
- DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
1605
- pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
1606
- GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
1607
- MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
1608
- EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
1609
- Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
1610
- dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
1611
- CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
1612
- 5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
1613
- Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
1614
- nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
1615
- vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
1616
- oKfN5XozNmr6mis=
1617
- -----END CERTIFICATE-----
1618
-
1619
- TURKTRUST Certificate Services Provider Root 1
1620
- ==============================================
1621
- -----BEGIN CERTIFICATE-----
1622
- MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
1623
- bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP
1624
- MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0
1625
- acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx
1626
- MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg
1627
- U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB
1628
- TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC
1629
- aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC
1630
- AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX
1631
- yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i
1632
- Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ
1633
- 8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4
1634
- W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME
1635
- BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46
1636
- sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE
1637
- q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
1638
- B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY
1639
- nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H
1640
- -----END CERTIFICATE-----
1641
-
1642
- TURKTRUST Certificate Services Provider Root 2
1643
- ==============================================
1644
- -----BEGIN CERTIFICATE-----
1645
- MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF
1646
- bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
1647
- MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
1648
- QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN
1649
- MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr
1650
- dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G
1651
- A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
1652
- acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G
1653
- CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe
1654
- LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI
1655
- x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g
1656
- QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr
1657
- 5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB
1658
- AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G
1659
- A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt
1660
- Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
1661
- Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+
1662
- hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P
1663
- 9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5
1664
- UrbnBEI=
1665
- -----END CERTIFICATE-----
1666
-
1667
- SwissSign Gold CA - G2
1668
- ======================
1669
- -----BEGIN CERTIFICATE-----
1670
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
1696
- -----END CERTIFICATE-----
1697
-
1698
- SwissSign Silver CA - G2
1699
- ========================
1700
- -----BEGIN CERTIFICATE-----
1701
- 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
- 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
- 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
- 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
- 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
- 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
- +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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
1727
- -----END CERTIFICATE-----
1728
-
1729
- GeoTrust Primary Certification Authority
1730
- ========================================
1731
- -----BEGIN CERTIFICATE-----
1732
- MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
1733
- EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
1734
- ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
1735
- CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
1736
- cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
1737
- CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
1738
- b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
1739
- nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
1740
- RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
1741
- tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
1742
- AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
1743
- hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
1744
- Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
1745
- NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
1746
- Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
1747
- 1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
1748
- -----END CERTIFICATE-----
1749
-
1750
- thawte Primary Root CA
1751
- ======================
1752
- -----BEGIN CERTIFICATE-----
1753
- MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
1754
- BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
1755
- aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
1756
- cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
1757
- MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
1758
- SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
1759
- KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
1760
- FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
1761
- oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
1762
- 1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
1763
- q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
1764
- aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
1765
- afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
1766
- VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
1767
- AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
1768
- uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
1769
- xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
1770
- jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
1771
- z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
1772
- -----END CERTIFICATE-----
1773
-
1774
- VeriSign Class 3 Public Primary Certification Authority - G5
1775
- ============================================================
1776
- -----BEGIN CERTIFICATE-----
1777
- MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
1778
- BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
1779
- ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
1780
- IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
1781
- ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
1782
- yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
1783
- biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
1784
- dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
1785
- YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
1786
- ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
1787
- j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
1788
- Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
1789
- Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
1790
- fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
1791
- BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
1792
- Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
1793
- aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
1794
- SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
1795
- X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
1796
- KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
1797
- Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
1798
- ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
1799
- -----END CERTIFICATE-----
1800
-
1801
- SecureTrust CA
1802
- ==============
1803
- -----BEGIN CERTIFICATE-----
1804
- MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
1805
- EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
1806
- dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
1807
- BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
1808
- ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
1809
- OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
1810
- DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
1811
- GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
1812
- 01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
1813
- ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
1814
- BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
1815
- aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
1816
- KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
1817
- SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
1818
- mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
1819
- nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
1820
- 3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
1821
- -----END CERTIFICATE-----
1822
-
1823
- Secure Global CA
1824
- ================
1825
- -----BEGIN CERTIFICATE-----
1826
- MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
1827
- EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
1828
- bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
1829
- MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
1830
- Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
1831
- YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
1832
- bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
1833
- 8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
1834
- HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
1835
- 0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
1836
- EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
1837
- oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
1838
- MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
1839
- OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
1840
- CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
1841
- 3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
1842
- f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
1843
- -----END CERTIFICATE-----
1844
-
1845
- COMODO Certification Authority
1846
- ==============================
1847
- -----BEGIN CERTIFICATE-----
1848
- MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
1849
- BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
1850
- A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
1851
- dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
1852
- MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
1853
- T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
1854
- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
1855
- +7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
1856
- xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
1857
- 4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
1858
- 1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
1859
- rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
1860
- BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
1861
- b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
1862
- AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
1863
- OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
1864
- RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
1865
- IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
1866
- +8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
1867
- -----END CERTIFICATE-----
1868
-
1869
- Network Solutions Certificate Authority
1870
- =======================================
1871
- -----BEGIN CERTIFICATE-----
1872
- MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
1873
- EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
1874
- IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
1875
- MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
1876
- MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
1877
- CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
1878
- jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
1879
- aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
1880
- crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
1881
- /Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
1882
- AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
1883
- BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
1884
- bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
1885
- A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
1886
- 4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
1887
- GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
1888
- wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
1889
- ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
1890
- -----END CERTIFICATE-----
1891
-
1892
- WellsSecure Public Root Certificate Authority
1893
- =============================================
1894
- -----BEGIN CERTIFICATE-----
1895
- MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
1896
- F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
1897
- NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
1898
- MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
1899
- bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
1900
- VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
1901
- CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
1902
- iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
1903
- i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
1904
- bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
1905
- K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
1906
- AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
1907
- cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
1908
- lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
1909
- i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
1910
- GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
1911
- Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
1912
- K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
1913
- bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
1914
- qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
1915
- E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
1916
- tylv2G0xffX8oRAHh84vWdw+WNs=
1917
- -----END CERTIFICATE-----
1918
-
1919
- COMODO ECC Certification Authority
1920
- ==================================
1921
- -----BEGIN CERTIFICATE-----
1922
- MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
1923
- R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
1924
- ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
1925
- dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
1926
- GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
1927
- Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
1928
- b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
1929
- 4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
1930
- wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
1931
- BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
1932
- FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
1933
- U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
1934
- -----END CERTIFICATE-----
1935
-
1936
- IGC/A
1937
- =====
1938
- -----BEGIN CERTIFICATE-----
1939
- MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD
1940
- VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE
1941
- Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy
1942
- MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI
1943
- EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT
1944
- STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB
1945
- IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2
1946
- TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW
1947
- So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy
1948
- HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd
1949
- frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ
1950
- tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB
1951
- egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC
1952
- iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK
1953
- q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q
1954
- MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
1955
- Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI
1956
- lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF
1957
- 0mBWWg==
1958
- -----END CERTIFICATE-----
1959
-
1960
- Security Communication EV RootCA1
1961
- =================================
1962
- -----BEGIN CERTIFICATE-----
1963
- MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
1964
- U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh
1965
- dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE
1966
- BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl
1967
- Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
1968
- AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO
1969
- /VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX
1970
- WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z
1971
- ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4
1972
- bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK
1973
- 9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
1974
- SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm
1975
- iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG
1976
- Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW
1977
- mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW
1978
- T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
1979
- -----END CERTIFICATE-----
1980
-
1981
- OISTE WISeKey Global Root GA CA
1982
- ===============================
1983
- -----BEGIN CERTIFICATE-----
1984
- MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
1985
- BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
1986
- A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
1987
- bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
1988
- VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
1989
- IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
1990
- IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
1991
- Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
1992
- Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
1993
- d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
1994
- /yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
1995
- LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
1996
- AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
1997
- KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
1998
- MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
1999
- +vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
2000
- hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
2001
- okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
2002
- -----END CERTIFICATE-----
2003
-
2004
- Microsec e-Szigno Root CA
2005
- =========================
2006
- -----BEGIN CERTIFICATE-----
2007
- MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE
2008
- BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL
2009
- EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0
2010
- MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz
2011
- dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT
2012
- GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
2013
- AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG
2014
- d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N
2015
- oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc
2016
- QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ
2017
- PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb
2018
- MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG
2019
- IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD
2020
- VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3
2021
- LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A
2022
- dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
2023
- AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA
2024
- 4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg
2025
- AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA
2026
- egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6
2027
- Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO
2028
- PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv
2029
- c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h
2030
- cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw
2031
- IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT
2032
- WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV
2033
- MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER
2034
- MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp
2035
- Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal
2036
- HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT
2037
- nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE
2038
- aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
2039
- 86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK
2040
- yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB
2041
- S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
2042
- -----END CERTIFICATE-----
2043
-
2044
- Certigna
2045
- ========
2046
- -----BEGIN CERTIFICATE-----
2047
- MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
2048
- EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
2049
- MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
2050
- Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
2051
- XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
2052
- GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
2053
- ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
2054
- DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
2055
- Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
2056
- tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
2057
- BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
2058
- SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
2059
- hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
2060
- ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
2061
- PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
2062
- 1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
2063
- WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
2064
- -----END CERTIFICATE-----
2065
-
2066
- AC Ra\xC3\xADz Certic\xC3\xA1mara S.A.
2067
- ======================================
2068
- -----BEGIN CERTIFICATE-----
2069
- MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNVBAYT
2070
- AkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRpZmljYWNpw7NuIERpZ2l0YWwg
2071
- LSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwaQUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4w
2072
- HhcNMDYxMTI3MjA0NjI5WhcNMzAwNDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+
2073
- U29jaWVkYWQgQ2FtZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJh
2074
- IFMuQS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkqhkiG9w0B
2075
- AQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeGqentLhM0R7LQcNzJPNCN
2076
- yu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzLfDe3fezTf3MZsGqy2IiKLUV0qPezuMDU
2077
- 2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQY5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU3
2078
- 4ojC2I+GdV75LaeHM/J4Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP
2079
- 2yYe68yQ54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+bMMCm
2080
- 8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48jilSH5L887uvDdUhf
2081
- HjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++EjYfDIJss2yKHzMI+ko6Kh3VOz3vCa
2082
- Mh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/ztA/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK
2083
- 5lw1omdMEWux+IBkAC1vImHFrEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1b
2084
- czwmPS9KvqfJpxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
2085
- AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCBlTCBkgYEVR0g
2086
- ADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFyYS5jb20vZHBjLzBaBggrBgEF
2087
- BQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW507WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2Ug
2088
- cHVlZGVuIGVuY29udHJhciBlbiBsYSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEf
2089
- AygPU3zmpFmps4p6xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuX
2090
- EpBcunvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/Jre7Ir5v
2091
- /zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dpezy4ydV/NgIlqmjCMRW3
2092
- MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42gzmRkBDI8ck1fj+404HGIGQatlDCIaR4
2093
- 3NAvO2STdPCWkPHv+wlaNECW8DYSwaN0jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wk
2094
- eZBWN7PGKX6jD/EpOe9+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f
2095
- /RWmnkJDW2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/RL5h
2096
- RqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35rMDOhYil/SrnhLecU
2097
- Iw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxkBYn8eNZcLCZDqQ==
2098
- -----END CERTIFICATE-----
2099
-
2100
- TC TrustCenter Class 2 CA II
2101
- ============================
2102
- -----BEGIN CERTIFICATE-----
2103
- MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
2104
- REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
2105
- IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw
2106
- MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
2107
- c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE
2108
- AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
2109
- AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw
2110
- IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2
2111
- xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ
2112
- Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u
2113
- SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB
2114
- /wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB
2115
- 7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
2116
- Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
2117
- cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
2118
- SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
2119
- TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G
2120
- dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ
2121
- KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj
2122
- TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP
2123
- JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk
2124
- vQ==
2125
- -----END CERTIFICATE-----
2126
-
2127
- TC TrustCenter Class 3 CA II
2128
- ============================
2129
- -----BEGIN CERTIFICATE-----
2130
- MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
2131
- REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
2132
- IENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYw
2133
- MTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
2134
- c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UE
2135
- AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
2136
- AQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJWHt4bNwcwIi9v8Qbxq63W
2137
- yKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+QVl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo
2138
- 6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZ
2139
- uV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk
2140
- 2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB
2141
- /wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB
2142
- 7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
2143
- Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
2144
- cnVzdENlbnRlciUyMENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
2145
- SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
2146
- TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzE
2147
- O2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8
2148
- yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9
2149
- IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal
2150
- 092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc
2151
- 5A==
2152
- -----END CERTIFICATE-----
2153
-
2154
- TC TrustCenter Universal CA I
2155
- =============================
2156
- -----BEGIN CERTIFICATE-----
2157
- MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC
2158
- REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
2159
- IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN
2160
- MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg
2161
- VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw
2162
- JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD
2163
- ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC
2164
- qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv
2165
- xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw
2166
- ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O
2167
- gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j
2168
- BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
2169
- AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG
2170
- 1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy
2171
- vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3
2172
- ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
2173
- ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a
2174
- 7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
2175
- -----END CERTIFICATE-----
2176
-
2177
- Deutsche Telekom Root CA 2
2178
- ==========================
2179
- -----BEGIN CERTIFICATE-----
2180
- MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
2181
- RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
2182
- A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
2183
- MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
2184
- A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
2185
- b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
2186
- bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
2187
- KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
2188
- AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
2189
- Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
2190
- jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
2191
- HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
2192
- E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
2193
- zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
2194
- rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
2195
- dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
2196
- Cm26OWMohpLzGITY+9HPBVZkVw==
2197
- -----END CERTIFICATE-----
2198
-
2199
- ComSign Secured CA
2200
- ==================
2201
- -----BEGIN CERTIFICATE-----
2202
- MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE
2203
- AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w
2204
- NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD
2205
- QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
2206
- ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs
2207
- 49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH
2208
- 7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB
2209
- kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1
2210
- 9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw
2211
- AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t
2212
- U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA
2213
- j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC
2214
- AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a
2215
- BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp
2216
- FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP
2217
- 51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
2218
- OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
2219
- -----END CERTIFICATE-----
2220
-
2221
- Cybertrust Global Root
2222
- ======================
2223
- -----BEGIN CERTIFICATE-----
2224
- MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
2225
- ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
2226
- MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
2227
- ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
2228
- +Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
2229
- 0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
2230
- AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
2231
- 89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
2232
- 8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
2233
- BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
2234
- MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
2235
- A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
2236
- lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
2237
- 5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
2238
- hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
2239
- X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
2240
- WL1WMRJOEcgh4LMRkWXbtKaIOM5V
2241
- -----END CERTIFICATE-----
2242
-
2243
- ePKI Root Certification Authority
2244
- =================================
2245
- -----BEGIN CERTIFICATE-----
2246
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
2272
- -----END CERTIFICATE-----
2273
-
2274
- 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
2275
- =============================================================================================================================
2276
- -----BEGIN CERTIFICATE-----
2277
- MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH
2278
- DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q
2279
- aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry
2280
- b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV
2281
- BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg
2282
- S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4
2283
- MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl
2284
- IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF
2285
- n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl
2286
- IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft
2287
- dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl
2288
- cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B
2289
- AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO
2290
- Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1
2291
- xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR
2292
- 6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
2293
- hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd
2294
- BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
2295
- MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4
2296
- N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT
2297
- y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh
2298
- LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
2299
- dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
2300
- -----END CERTIFICATE-----
2301
-
2302
- Buypass Class 2 CA 1
2303
- ====================
2304
- -----BEGIN CERTIFICATE-----
2305
- MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
2306
- QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2
2307
- MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
2308
- c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI
2309
- hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M
2310
- cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83
2311
- 0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4
2312
- 0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R
2313
- uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC
2314
- MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P
2315
- AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV
2316
- 1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt
2317
- 7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2
2318
- fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w
2319
- wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
2320
- -----END CERTIFICATE-----
2321
-
2322
- Buypass Class 3 CA 1
2323
- ====================
2324
- -----BEGIN CERTIFICATE-----
2325
- MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
2326
- QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1
2327
- MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
2328
- c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI
2329
- hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx
2330
- ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0
2331
- n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia
2332
- AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c
2333
- 1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC
2334
- MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P
2335
- AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7
2336
- pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA
2337
- EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5
2338
- htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj
2339
- el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
2340
- -----END CERTIFICATE-----
2341
-
2342
- EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
2343
- ==========================================================================
2344
- -----BEGIN CERTIFICATE-----
2345
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
2372
- -----END CERTIFICATE-----
2373
-
2374
- certSIGN ROOT CA
2375
- ================
2376
- -----BEGIN CERTIFICATE-----
2377
- MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
2378
- VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
2379
- Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
2380
- CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
2381
- JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
2382
- rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
2383
- ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
2384
- 0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
2385
- AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
2386
- Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
2387
- AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
2388
- SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
2389
- x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
2390
- vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
2391
- TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
2392
- -----END CERTIFICATE-----
2393
-
2394
- CNNIC ROOT
2395
- ==========
2396
- -----BEGIN CERTIFICATE-----
2397
- MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE
2398
- ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw
2399
- OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw
2400
- ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD
2401
- o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz
2402
- VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT
2403
- VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or
2404
- czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK
2405
- y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC
2406
- wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S
2407
- lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5
2408
- Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM
2409
- O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8
2410
- BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2
2411
- G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m
2412
- mxE=
2413
- -----END CERTIFICATE-----
2414
-
2415
- ApplicationCA - Japanese Government
2416
- ===================================
2417
- -----BEGIN CERTIFICATE-----
2418
- MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT
2419
- SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw
2420
- MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl
2421
- cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
2422
- CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4
2423
- fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN
2424
- wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE
2425
- jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu
2426
- nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU
2427
- WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV
2428
- BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD
2429
- vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs
2430
- o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g
2431
- /DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD
2432
- io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW
2433
- dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
2434
- rosot4LKGAfmt1t06SAZf7IbiVQ=
2435
- -----END CERTIFICATE-----
2436
-
2437
- GeoTrust Primary Certification Authority - G3
2438
- =============================================
2439
- -----BEGIN CERTIFICATE-----
2440
- MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
2441
- BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
2442
- IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
2443
- eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
2444
- NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
2445
- YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
2446
- LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
2447
- hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
2448
- K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
2449
- c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
2450
- IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
2451
- dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
2452
- MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
2453
- 2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
2454
- cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
2455
- Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
2456
- AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
2457
- t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
2458
- -----END CERTIFICATE-----
2459
-
2460
- thawte Primary Root CA - G2
2461
- ===========================
2462
- -----BEGIN CERTIFICATE-----
2463
- MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
2464
- VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
2465
- IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
2466
- Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
2467
- MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
2468
- b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
2469
- IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
2470
- LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
2471
- 8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
2472
- mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
2473
- G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
2474
- rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
2475
- -----END CERTIFICATE-----
2476
-
2477
- thawte Primary Root CA - G3
2478
- ===========================
2479
- -----BEGIN CERTIFICATE-----
2480
- MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
2481
- BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
2482
- aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
2483
- cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
2484
- ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
2485
- d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
2486
- VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
2487
- A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
2488
- MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
2489
- P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
2490
- +BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
2491
- 7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
2492
- vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
2493
- BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
2494
- KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
2495
- A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
2496
- t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
2497
- 8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
2498
- er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
2499
- -----END CERTIFICATE-----
2500
-
2501
- GeoTrust Primary Certification Authority - G2
2502
- =============================================
2503
- -----BEGIN CERTIFICATE-----
2504
- MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
2505
- VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
2506
- Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
2507
- ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
2508
- OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
2509
- MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
2510
- b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
2511
- BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
2512
- KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
2513
- VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
2514
- EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
2515
- ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
2516
- npaqBA+K
2517
- -----END CERTIFICATE-----
2518
-
2519
- VeriSign Universal Root Certification Authority
2520
- ===============================================
2521
- -----BEGIN CERTIFICATE-----
2522
- MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
2523
- BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
2524
- ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
2525
- IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
2526
- IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
2527
- UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
2528
- cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
2529
- IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
2530
- aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
2531
- 1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
2532
- MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
2533
- 9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
2534
- AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
2535
- tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
2536
- CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
2537
- a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
2538
- DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
2539
- Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
2540
- Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
2541
- P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
2542
- wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
2543
- mJO37M2CYfE45k+XmCpajQ==
2544
- -----END CERTIFICATE-----
2545
-
2546
- VeriSign Class 3 Public Primary Certification Authority - G4
2547
- ============================================================
2548
- -----BEGIN CERTIFICATE-----
2549
- MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
2550
- VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
2551
- b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
2552
- ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
2553
- YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
2554
- MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
2555
- cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
2556
- b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
2557
- IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
2558
- Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
2559
- rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
2560
- /zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
2561
- HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
2562
- Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
2563
- A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
2564
- AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
2565
- -----END CERTIFICATE-----
2566
-
2567
- NetLock Arany (Class Gold) Főtanúsítvány
2568
- ============================================
2569
- -----BEGIN CERTIFICATE-----
2570
- MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
2571
- A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
2572
- dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
2573
- cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
2574
- MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
2575
- ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
2576
- biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
2577
- c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
2578
- 0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
2579
- /HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
2580
- H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
2581
- fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
2582
- neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
2583
- BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
2584
- qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
2585
- YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
2586
- bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
2587
- NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
2588
- dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
2589
- -----END CERTIFICATE-----
2590
-
2591
- Staat der Nederlanden Root CA - G2
2592
- ==================================
2593
- -----BEGIN CERTIFICATE-----
2594
- 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
- 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
- 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
- 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
- ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ
2599
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA
2611
- 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
- +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
- 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
- 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
- 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
- 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
- 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
- oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV
2619
- 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
2620
- 66+KAQ==
2621
- -----END CERTIFICATE-----
2622
-
2623
- CA Disig
2624
- ========
2625
- -----BEGIN CERTIFICATE-----
2626
- MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK
2627
- QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw
2628
- MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz
2629
- bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3
2630
- DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm
2631
- GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD
2632
- Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo
2633
- hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt
2634
- ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w
2635
- gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P
2636
- AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz
2637
- aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff
2638
- ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa
2639
- BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t
2640
- WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3
2641
- mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
2642
- CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K
2643
- ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA
2644
- 4Z7CRneC9VkGjCFMhwnN5ag=
2645
- -----END CERTIFICATE-----
2646
-
2647
- Juur-SK
2648
- =======
2649
- -----BEGIN CERTIFICATE-----
2650
- MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA
2651
- c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw
2652
- DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG
2653
- SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy
2654
- aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
2655
- ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf
2656
- TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC
2657
- +Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw
2658
- UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa
2659
- Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF
2660
- MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD
2661
- HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh
2662
- AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA
2663
- cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr
2664
- AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw
2665
- cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
2666
- FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G
2667
- A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo
2668
- ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL
2669
- abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678
2670
- IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh
2671
- Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2
2672
- yyqcjg==
2673
- -----END CERTIFICATE-----
2674
-
2675
- Hongkong Post Root CA 1
2676
- =======================
2677
- -----BEGIN CERTIFICATE-----
2678
- MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
2679
- DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
2680
- NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
2681
- IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
2682
- AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
2683
- ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
2684
- auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
2685
- qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
2686
- V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
2687
- HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
2688
- h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
2689
- l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
2690
- IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
2691
- T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
2692
- c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
2693
- -----END CERTIFICATE-----
2694
-
2695
- SecureSign RootCA11
2696
- ===================
2697
- -----BEGIN CERTIFICATE-----
2698
- MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
2699
- SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
2700
- b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
2701
- KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
2702
- cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
2703
- TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
2704
- wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
2705
- g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
2706
- O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
2707
- bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
2708
- t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
2709
- OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
2710
- bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
2711
- Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
2712
- y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
2713
- lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
2714
- -----END CERTIFICATE-----
2715
-
2716
- ACEDICOM Root
2717
- =============
2718
- -----BEGIN CERTIFICATE-----
2719
- MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD
2720
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq
2732
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq
2741
- 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
- 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
- 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
- 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
2745
- -----END CERTIFICATE-----
2746
-
2747
- Verisign Class 3 Public Primary Certification Authority
2748
- =======================================================
2749
- -----BEGIN CERTIFICATE-----
2750
- MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
2751
- FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
2752
- IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
2753
- XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
2754
- IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
2755
- A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
2756
- f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
2757
- hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky
2758
- CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX
2759
- bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/
2760
- D/xwzoiQ
2761
- -----END CERTIFICATE-----
2762
-
2763
- Microsec e-Szigno Root CA 2009
2764
- ==============================
2765
- -----BEGIN CERTIFICATE-----
2766
- MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
2767
- MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
2768
- c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
2769
- dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
2770
- BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
2771
- U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
2772
- DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
2773
- fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
2774
- 0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
2775
- pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
2776
- 1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
2777
- AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
2778
- QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
2779
- FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
2780
- lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
2781
- I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
2782
- tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
2783
- yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
2784
- LXpUq3DDfSJlgnCW
2785
- -----END CERTIFICATE-----
2786
-
2787
- E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi
2788
- ===================================================
2789
- -----BEGIN CERTIFICATE-----
2790
- MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
2791
- EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz
2792
- ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3
2793
- MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0
2794
- cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u
2795
- aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
2796
- AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY
2797
- 8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y
2798
- jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI
2799
- JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk
2800
- 9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD
2801
- AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG
2802
- SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d
2803
- F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq
2804
- D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4
2805
- Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq
2806
- fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
2807
- -----END CERTIFICATE-----
2808
-
2809
- GlobalSign Root CA - R3
2810
- =======================
2811
- -----BEGIN CERTIFICATE-----
2812
- MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
2813
- YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
2814
- bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
2815
- aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
2816
- bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
2817
- iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
2818
- 0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
2819
- rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
2820
- OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
2821
- xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
2822
- FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
2823
- lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
2824
- EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
2825
- bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
2826
- YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
2827
- kpeDMdmztcpHWD9f
2828
- -----END CERTIFICATE-----
2829
-
2830
- TC TrustCenter Universal CA III
2831
- ===============================
2832
- -----BEGIN CERTIFICATE-----
2833
- MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMC
2834
- REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
2835
- IFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAe
2836
- Fw0wOTA5MDkwODE1MjdaFw0yOTEyMzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNU
2837
- QyBUcnVzdENlbnRlciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0Ex
2838
- KDAmBgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqGSIb3DQEB
2839
- AQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF5+cvAqBNLaT6hdqbJYUt
2840
- QCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYvDIRlzg9uwliT6CwLOunBjvvya8o84pxO
2841
- juT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8vzArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+Eut
2842
- CHnNaYlAJ/Uqwa1D7KRTyGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1
2843
- M4BDj5yjdipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBhMB8G
2844
- A1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
2845
- BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI4jANBgkqhkiG9w0BAQUFAAOCAQEA
2846
- g8ev6n9NCjw5sWi+e22JLumzCecYV42FmhfzdkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+
2847
- KGwWaODIl0YgoGhnYIg5IFHYaAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhK
2848
- BgePxLcHsU0GDeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV
2849
- CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPHLQNjO9Po5KIq
2850
- woIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg==
2851
- -----END CERTIFICATE-----
2852
-
2853
- Autoridad de Certificacion Firmaprofesional CIF A62634068
2854
- =========================================================
2855
- -----BEGIN CERTIFICATE-----
2856
- MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
2857
- BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
2858
- MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
2859
- QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
2860
- NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
2861
- Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
2862
- B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
2863
- 7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
2864
- ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
2865
- plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
2866
- MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
2867
- LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
2868
- bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
2869
- vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
2870
- EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
2871
- DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
2872
- cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
2873
- bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
2874
- ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
2875
- 51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
2876
- R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
2877
- T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
2878
- Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
2879
- osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
2880
- crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
2881
- saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
2882
- KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
2883
- 6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
2884
- -----END CERTIFICATE-----
2885
-
2886
- Izenpe.com
2887
- ==========
2888
- -----BEGIN CERTIFICATE-----
2889
- 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
- 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
- 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
- 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
- 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
- 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
- +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
- PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT
2897
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
2916
- -----END CERTIFICATE-----
2917
-
2918
- Chambers of Commerce Root - 2008
2919
- ================================
2920
- -----BEGIN CERTIFICATE-----
2921
- MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
2922
- MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
2923
- bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
2924
- QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
2925
- Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
2926
- ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
2927
- EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
2928
- cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
2929
- AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
2930
- XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
2931
- h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
2932
- ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
2933
- NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
2934
- D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
2935
- lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
2936
- 0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
2937
- ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
2938
- EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
2939
- G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
2940
- BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
2941
- bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
2942
- bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
2943
- CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
2944
- AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
2945
- wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
2946
- 3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
2947
- RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
2948
- M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
2949
- YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
2950
- 9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
2951
- zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
2952
- nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
2953
- OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
2954
- -----END CERTIFICATE-----
2955
-
2956
- Global Chambersign Root - 2008
2957
- ==============================
2958
- -----BEGIN CERTIFICATE-----
2959
- MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
2960
- MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
2961
- bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
2962
- QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
2963
- NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
2964
- Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
2965
- QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
2966
- aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
2967
- VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
2968
- XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
2969
- ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
2970
- /gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
2971
- TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
2972
- H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
2973
- Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
2974
- HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
2975
- wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
2976
- AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
2977
- BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
2978
- BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
2979
- aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
2980
- aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
2981
- 1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
2982
- dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
2983
- /5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
2984
- ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
2985
- dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
2986
- 9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
2987
- foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
2988
- qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
2989
- P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
2990
- c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
2991
- 09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
2992
- -----END CERTIFICATE-----
2993
-
2994
- Go Daddy Root Certificate Authority - G2
2995
- ========================================
2996
- -----BEGIN CERTIFICATE-----
2997
- MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
2998
- B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
2999
- MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
3000
- MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
3001
- b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
3002
- A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
3003
- hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
3004
- 9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
3005
- +qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
3006
- fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
3007
- NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
3008
- MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
3009
- BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
3010
- vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
3011
- 5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
3012
- N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
3013
- LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
3014
- -----END CERTIFICATE-----
3015
-
3016
- Starfield Root Certificate Authority - G2
3017
- =========================================
3018
- -----BEGIN CERTIFICATE-----
3019
- MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
3020
- B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
3021
- b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
3022
- eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
3023
- DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
3024
- VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
3025
- dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
3026
- W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
3027
- bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
3028
- N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
3029
- ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
3030
- JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
3031
- AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
3032
- TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
3033
- 4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
3034
- F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
3035
- pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
3036
- c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
3037
- -----END CERTIFICATE-----
3038
-
3039
- Starfield Services Root Certificate Authority - G2
3040
- ==================================================
3041
- -----BEGIN CERTIFICATE-----
3042
- MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
3043
- B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
3044
- b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
3045
- IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
3046
- BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
3047
- dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
3048
- Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
3049
- AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
3050
- h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
3051
- hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
3052
- LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
3053
- rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
3054
- AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
3055
- SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
3056
- E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
3057
- xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
3058
- iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
3059
- YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
3060
- -----END CERTIFICATE-----
3061
-
3062
- AffirmTrust Commercial
3063
- ======================
3064
- -----BEGIN CERTIFICATE-----
3065
- MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
3066
- BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
3067
- MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
3068
- bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
3069
- AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
3070
- DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
3071
- C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
3072
- BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
3073
- MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
3074
- HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
3075
- AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
3076
- hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
3077
- qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
3078
- 0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
3079
- sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
3080
- -----END CERTIFICATE-----
3081
-
3082
- AffirmTrust Networking
3083
- ======================
3084
- -----BEGIN CERTIFICATE-----
3085
- MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
3086
- BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
3087
- MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
3088
- bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
3089
- AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
3090
- Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
3091
- dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
3092
- /PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
3093
- h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
3094
- HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
3095
- AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
3096
- UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
3097
- 12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
3098
- WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
3099
- /ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
3100
- -----END CERTIFICATE-----
3101
-
3102
- AffirmTrust Premium
3103
- ===================
3104
- -----BEGIN CERTIFICATE-----
3105
- MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS
3106
- BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy
3107
- OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy
3108
- dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
3109
- MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn
3110
- BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV
3111
- 5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs
3112
- +7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd
3113
- GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R
3114
- p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI
3115
- S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04
3116
- 6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5
3117
- /bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo
3118
- +Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB
3119
- /wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv
3120
- MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
3121
- Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC
3122
- 6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S
3123
- L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK
3124
- +4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV
3125
- BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg
3126
- IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60
3127
- g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb
3128
- zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw==
3129
- -----END CERTIFICATE-----
3130
-
3131
- AffirmTrust Premium ECC
3132
- =======================
3133
- -----BEGIN CERTIFICATE-----
3134
- MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
3135
- BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
3136
- MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
3137
- cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
3138
- IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
3139
- N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
3140
- BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
3141
- BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
3142
- 57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
3143
- eQ==
3144
- -----END CERTIFICATE-----
3145
-
3146
- Certum Trusted Network CA
3147
- =========================
3148
- -----BEGIN CERTIFICATE-----
3149
- MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
3150
- ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
3151
- biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
3152
- MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
3153
- ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
3154
- MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
3155
- AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
3156
- l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
3157
- J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
3158
- fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
3159
- cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
3160
- Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
3161
- DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
3162
- jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
3163
- mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
3164
- Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
3165
- 03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
3166
- -----END CERTIFICATE-----
3167
-
3168
- Certinomis - Autorité Racine
3169
- =============================
3170
- -----BEGIN CERTIFICATE-----
3171
- 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
- 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
- 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
- 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
- JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD
3176
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE
3193
- 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
- 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
- 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
3196
- vgt2Fl43N+bYdJeimUV5
3197
- -----END CERTIFICATE-----
3198
-
3199
- Root CA Generalitat Valenciana
3200
- ==============================
3201
- -----BEGIN CERTIFICATE-----
3202
- MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE
3203
- ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290
3204
- IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3
3205
- WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE
3206
- CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G
3207
- CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2
3208
- F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B
3209
- ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ
3210
- D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte
3211
- JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB
3212
- AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n
3213
- dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB
3214
- ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl
3215
- AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA
3216
- YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy
3217
- AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
3218
- aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt
3219
- AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA
3220
- YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu
3221
- AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA
3222
- OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0
3223
- dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV
3224
- BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G
3225
- A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S
3226
- b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh
3227
- TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz
3228
- Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63
3229
- NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH
3230
- iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt
3231
- +GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
3232
- -----END CERTIFICATE-----
3233
-
3234
- A-Trust-nQual-03
3235
- ================
3236
- -----BEGIN CERTIFICATE-----
3237
- MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE
3238
- Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy
3239
- a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R
3240
- dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw
3241
- RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0
3242
- ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1
3243
- c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA
3244
- zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n
3245
- yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE
3246
- SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4
3247
- iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V
3248
- cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV
3249
- eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40
3250
- ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr
3251
- sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd
3252
- JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
3253
- mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6
3254
- ahq97BvIxYSazQ==
3255
- -----END CERTIFICATE-----
3256
-
3257
- TWCA Root Certification Authority
3258
- =================================
3259
- -----BEGIN CERTIFICATE-----
3260
- MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
3261
- VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
3262
- dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
3263
- EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
3264
- IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
3265
- AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
3266
- QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
3267
- oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
3268
- 4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
3269
- y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
3270
- BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
3271
- 9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
3272
- mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
3273
- QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
3274
- T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
3275
- Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
3276
- -----END CERTIFICATE-----
3277
-
3278
- Security Communication RootCA2
3279
- ==============================
3280
- -----BEGIN CERTIFICATE-----
3281
- MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
3282
- U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
3283
- dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
3284
- SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
3285
- aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
3286
- ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
3287
- +T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
3288
- 3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
3289
- spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
3290
- EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
3291
- QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
3292
- CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
3293
- u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
3294
- 3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
3295
- tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
3296
- mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
3297
- -----END CERTIFICATE-----
3298
-
3299
- EC-ACC
3300
- ======
3301
- -----BEGIN CERTIFICATE-----
3302
- MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
3303
- BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
3304
- ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
3305
- VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
3306
- CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
3307
- BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
3308
- MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
3309
- SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
3310
- Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
3311
- cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
3312
- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
3313
- w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
3314
- ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
3315
- HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
3316
- E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
3317
- 0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
3318
- BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
3319
- VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
3320
- Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
3321
- dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
3322
- lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
3323
- Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
3324
- l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
3325
- E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
3326
- 5EI=
3327
- -----END CERTIFICATE-----
3328
-
3329
- Hellenic Academic and Research Institutions RootCA 2011
3330
- =======================================================
3331
- -----BEGIN CERTIFICATE-----
3332
- MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
3333
- O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
3334
- aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
3335
- IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
3336
- AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
3337
- IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
3338
- IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
3339
- AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
3340
- 1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
3341
- 71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
3342
- 8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
3343
- 3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
3344
- MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
3345
- MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
3346
- b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
3347
- XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
3348
- TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
3349
- /md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
3350
- 7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
3351
- -----END CERTIFICATE-----
3352
-
3353
- Actalis Authentication Root CA
3354
- ==============================
3355
- -----BEGIN CERTIFICATE-----
3356
- MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM
3357
- BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE
3358
- AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky
3359
- MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz
3360
- IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
3361
- IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ
3362
- wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa
3363
- by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6
3364
- zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f
3365
- YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2
3366
- oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l
3367
- EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7
3368
- hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8
3369
- EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5
3370
- jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY
3371
- iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
3372
- ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI
3373
- WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0
3374
- JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx
3375
- K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+
3376
- Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC
3377
- 4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo
3378
- 2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz
3379
- lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem
3380
- OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
3381
- vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
3382
- -----END CERTIFICATE-----
3383
-
3384
- Trustis FPS Root CA
3385
- ===================
3386
- -----BEGIN CERTIFICATE-----
3387
- MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
3388
- EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
3389
- IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
3390
- BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
3391
- KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
3392
- RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
3393
- H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
3394
- cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
3395
- o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
3396
- AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
3397
- BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
3398
- GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
3399
- yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
3400
- 8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
3401
- l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
3402
- iB6XzCGcKQENZetX2fNXlrtIzYE=
3403
- -----END CERTIFICATE-----
3404
-
3405
- StartCom Certification Authority
3406
- ================================
3407
- -----BEGIN CERTIFICATE-----
3408
- MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
3409
- U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
3410
- ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
3411
- NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
3412
- LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
3413
- U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
3414
- ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
3415
- o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
3416
- Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
3417
- eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
3418
- 2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
3419
- 6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
3420
- osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
3421
- untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
3422
- UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
3423
- 37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
3424
- VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ
3425
- Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0
3426
- dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu
3427
- c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv
3428
- bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0
3429
- aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0
3430
- aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t
3431
- L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG
3432
- cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5
3433
- fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm
3434
- N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN
3435
- Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T
3436
- tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX
3437
- e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA
3438
- 2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs
3439
- HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
3440
- JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib
3441
- D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8=
3442
- -----END CERTIFICATE-----
3443
-
3444
- StartCom Certification Authority G2
3445
- ===================================
3446
- -----BEGIN CERTIFICATE-----
3447
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs
3456
- 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
- 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
- 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
- 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
- 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
- BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ
3462
- 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
- 2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk
3464
- 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
- JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG
3466
- 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
- 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
- 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
- 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
- 7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm
3471
- obp573PYtlNXLfbQ4ddI
3472
- -----END CERTIFICATE-----
3473
-
3474
- Buypass Class 2 Root CA
3475
- =======================
3476
- -----BEGIN CERTIFICATE-----
3477
- MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
3478
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC
3499
- 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
- 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
3501
- rJgWVqA=
3502
- -----END CERTIFICATE-----
3503
-
3504
- Buypass Class 3 Root CA
3505
- =======================
3506
- -----BEGIN CERTIFICATE-----
3507
- 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
- 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
- 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
- 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
- DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH
3512
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
3531
- Cp/HuZc=
3532
- -----END CERTIFICATE-----
3533
-
3534
- T-TeleSec GlobalRoot Class 3
3535
- ============================
3536
- -----BEGIN CERTIFICATE-----
3537
- MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
3538
- IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
3539
- cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx
3540
- MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
3541
- dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
3542
- ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3
3543
- DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK
3544
- 9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU
3545
- NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF
3546
- iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W
3547
- 0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA
3548
- MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr
3549
- AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb
3550
- fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT
3551
- ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h
3552
- P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
3553
- e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
3554
- -----END CERTIFICATE-----
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Transport/fsockopen.php DELETED
@@ -1,404 +0,0 @@
1
- <?php
2
- /**
3
- * fsockopen HTTP transport
4
- *
5
- * @package Requests
6
- * @subpackage Transport
7
- */
8
-
9
- /**
10
- * fsockopen HTTP transport
11
- *
12
- * @package Requests
13
- * @subpackage Transport
14
- */
15
- class Requests_Transport_fsockopen implements Requests_Transport {
16
- /**
17
- * Second to microsecond conversion
18
- *
19
- * @var integer
20
- */
21
- const SECOND_IN_MICROSECONDS = 1000000;
22
-
23
- /**
24
- * Raw HTTP data
25
- *
26
- * @var string
27
- */
28
- public $headers = '';
29
-
30
- /**
31
- * Stream metadata
32
- *
33
- * @var array Associative array of properties, see {@see http://php.net/stream_get_meta_data}
34
- */
35
- public $info;
36
-
37
- protected $connect_error = '';
38
-
39
- /**
40
- * Perform a request
41
- *
42
- * @throws Requests_Exception On failure to connect to socket (`fsockopenerror`)
43
- * @throws Requests_Exception On socket timeout (`timeout`)
44
- *
45
- * @param string $url URL to request
46
- * @param array $headers Associative array of request headers
47
- * @param string|array $data Data to send either as the POST body, or as parameters in the URL for a GET/HEAD
48
- * @param array $options Request options, see {@see Requests::response()} for documentation
49
- * @return string Raw HTTP result
50
- */
51
- public function request($url, $headers = array(), $data = array(), $options = array()) {
52
- $options['hooks']->dispatch('fsockopen.before_request');
53
-
54
- $url_parts = parse_url($url);
55
- $host = $url_parts['host'];
56
- $context = stream_context_create();
57
- $verifyname = false;
58
-
59
- // HTTPS support
60
- if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) === 'https') {
61
- $remote_socket = 'ssl://' . $host;
62
- $url_parts['port'] = 443;
63
-
64
- $context_options = array(
65
- 'verify_peer' => true,
66
- // 'CN_match' => $host,
67
- 'capture_peer_cert' => true
68
- );
69
- $verifyname = true;
70
-
71
- // SNI, if enabled (OpenSSL >=0.9.8j)
72
- if (defined('OPENSSL_TLSEXT_SERVER_NAME') && OPENSSL_TLSEXT_SERVER_NAME) {
73
- $context_options['SNI_enabled'] = true;
74
- if (isset($options['verifyname']) && $options['verifyname'] === false) {
75
- $context_options['SNI_enabled'] = false;
76
- }
77
- }
78
-
79
- if (isset($options['verify'])) {
80
- if ($options['verify'] === false) {
81
- $context_options['verify_peer'] = false;
82
- } elseif (is_string($options['verify'])) {
83
- $context_options['cafile'] = $options['verify'];
84
- }
85
- }
86
-
87
- if (isset($options['verifyname']) && $options['verifyname'] === false) {
88
- $verifyname = false;
89
- }
90
-
91
- stream_context_set_option($context, array('ssl' => $context_options));
92
- }
93
- else {
94
- $remote_socket = 'tcp://' . $host;
95
- }
96
-
97
- $proxy = isset( $options['proxy'] );
98
- $proxy_auth = $proxy && isset( $options['proxy_username'] ) && isset( $options['proxy_password'] );
99
-
100
- if (!isset($url_parts['port'])) {
101
- $url_parts['port'] = 80;
102
- }
103
- $remote_socket .= ':' . $url_parts['port'];
104
-
105
- set_error_handler(array($this, 'connect_error_handler'), E_WARNING | E_NOTICE);
106
-
107
- $options['hooks']->dispatch('fsockopen.remote_socket', array(&$remote_socket));
108
-
109
- $fp = stream_socket_client($remote_socket, $errno, $errstr, ceil($options['connect_timeout']), STREAM_CLIENT_CONNECT, $context);
110
-
111
- restore_error_handler();
112
-
113
- if ($verifyname) {
114
- if (!$this->verify_certificate_from_context($host, $context)) {
115
- throw new Requests_Exception('SSL certificate did not match the requested domain name', 'ssl.no_match');
116
- }
117
- }
118
-
119
- if (!$fp) {
120
- if ($errno === 0) {
121
- // Connection issue
122
- throw new Requests_Exception(rtrim($this->connect_error), 'fsockopen.connect_error');
123
- }
124
- else {
125
- throw new Requests_Exception($errstr, 'fsockopenerror');
126
- return;
127
- }
128
- }
129
-
130
- $request_body = '';
131
- $out = '';
132
- switch ($options['type']) {
133
- case Requests::POST:
134
- case Requests::PUT:
135
- case Requests::PATCH:
136
- if (isset($url_parts['path'])) {
137
- $path = $url_parts['path'];
138
- if (isset($url_parts['query'])) {
139
- $path .= '?' . $url_parts['query'];
140
- }
141
- }
142
- else {
143
- $path = '/';
144
- }
145
-
146
- $options['hooks']->dispatch( 'fsockopen.remote_host_path', array( &$path, $url ) );
147
- $out = $options['type'] . " $path HTTP/1.0\r\n";
148
-
149
- if (is_array($data)) {
150
- $request_body = http_build_query($data, null, '&');
151
- }
152
- else {
153
- $request_body = $data;
154
- }
155
- if (empty($headers['Content-Length'])) {
156
- $headers['Content-Length'] = strlen($request_body);
157
- }
158
- if (empty($headers['Content-Type'])) {
159
- $headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
160
- }
161
- break;
162
- case Requests::HEAD:
163
- case Requests::GET:
164
- case Requests::DELETE:
165
- $path = self::format_get($url_parts, $data);
166
- $options['hooks']->dispatch('fsockopen.remote_host_path', array(&$path, $url));
167
- $out = $options['type'] . " $path HTTP/1.0\r\n";
168
- break;
169
- }
170
- $out .= "Host: {$url_parts['host']}";
171
-
172
- if ($url_parts['port'] !== 80) {
173
- $out .= ":{$url_parts['port']}";
174
- }
175
- $out .= "\r\n";
176
-
177
- $out .= "User-Agent: {$options['useragent']}\r\n";
178
- $accept_encoding = $this->accept_encoding();
179
- if (!empty($accept_encoding)) {
180
- $out .= "Accept-Encoding: $accept_encoding\r\n";
181
- }
182
-
183
- $headers = Requests::flatten($headers);
184
-
185
- if (!empty($headers)) {
186
- $out .= implode($headers, "\r\n") . "\r\n";
187
- }
188
-
189
- $options['hooks']->dispatch('fsockopen.after_headers', array(&$out));
190
-
191
- if (substr($out, -2) !== "\r\n") {
192
- $out .= "\r\n";
193
- }
194
-
195
- $out .= "Connection: Close\r\n\r\n" . $request_body;
196
-
197
- $options['hooks']->dispatch('fsockopen.before_send', array(&$out));
198
-
199
- fwrite($fp, $out);
200
- $options['hooks']->dispatch('fsockopen.after_send', array(&$fake_headers));
201
-
202
- if (!$options['blocking']) {
203
- fclose($fp);
204
- $fake_headers = '';
205
- $options['hooks']->dispatch('fsockopen.after_request', array(&$fake_headers));
206
- return '';
207
- }
208
-
209
- $timeout_sec = (int) floor($options['timeout']);
210
- $timeout_msec = $timeout_sec == $options['timeout'] ? 0 : self::SECOND_IN_MICROSECONDS * $options['timeout'] % self::SECOND_IN_MICROSECONDS;
211
- stream_set_timeout($fp, $timeout_sec, $timeout_msec);
212
-
213
- $this->info = stream_get_meta_data($fp);
214
-
215
- $this->headers = '';
216
- $this->info = stream_get_meta_data($fp);
217
- if (!$options['filename']) {
218
- while (!feof($fp)) {
219
- $this->info = stream_get_meta_data($fp);
220
- if ($this->info['timed_out']) {
221
- throw new Requests_Exception('fsocket timed out', 'timeout');
222
- }
223
-
224
- $this->headers .= fread($fp, 1160);
225
- }
226
- }
227
- else {
228
- $download = fopen($options['filename'], 'wb');
229
- $doingbody = false;
230
- $response = '';
231
- while (!feof($fp)) {
232
- $this->info = stream_get_meta_data($fp);
233
- if ($this->info['timed_out']) {
234
- throw new Requests_Exception('fsocket timed out', 'timeout');
235
- }
236
-
237
- $block = fread($fp, 1160);
238
- if ($doingbody) {
239
- fwrite($download, $block);
240
- }
241
- else {
242
- $response .= $block;
243
- if (strpos($response, "\r\n\r\n")) {
244
- list($this->headers, $block) = explode("\r\n\r\n", $response, 2);
245
- $doingbody = true;
246
- fwrite($download, $block);
247
- }
248
- }
249
- }
250
- fclose($download);
251
- }
252
- fclose($fp);
253
-
254
- $options['hooks']->dispatch('fsockopen.after_request', array(&$this->headers));
255
- return $this->headers;
256
- }
257
-
258
- /**
259
- * Send multiple requests simultaneously
260
- *
261
- * @param array $requests Request data (array of 'url', 'headers', 'data', 'options') as per {@see Requests_Transport::request}
262
- * @param array $options Global options, see {@see Requests::response()} for documentation
263
- * @return array Array of Requests_Response objects (may contain Requests_Exception or string responses as well)
264
- */
265
- public function request_multiple($requests, $options) {
266
- $responses = array();
267
- $class = get_class($this);
268
- foreach ($requests as $id => $request) {
269
- try {
270
- $handler = new $class();
271
- $responses[$id] = $handler->request($request['url'], $request['headers'], $request['data'], $request['options']);
272
-
273
- $request['options']['hooks']->dispatch('transport.internal.parse_response', array(&$responses[$id], $request));
274
- }
275
- catch (Requests_Exception $e) {
276
- $responses[$id] = $e;
277
- }
278
-
279
- if (!is_string($responses[$id])) {
280
- $request['options']['hooks']->dispatch('multiple.request.complete', array(&$responses[$id], $id));
281
- }
282
- }
283
-
284
- return $responses;
285
- }
286
-
287
- /**
288
- * Retrieve the encodings we can accept
289
- *
290
- * @return string Accept-Encoding header value
291
- */
292
- protected static function accept_encoding() {
293
- $type = array();
294
- if (function_exists('gzinflate')) {
295
- $type[] = 'deflate;q=1.0';
296
- }
297
-
298
- if (function_exists('gzuncompress')) {
299
- $type[] = 'compress;q=0.5';
300
- }
301
-
302
- $type[] = 'gzip;q=0.5';
303
-
304
- return implode(', ', $type);
305
- }
306
-
307
- /**
308
- * Format a URL given GET data
309
- *
310
- * @param array $url_parts
311
- * @param array|object $data Data to build query using, see {@see http://php.net/http_build_query}
312
- * @return string URL with data
313
- */
314
- protected static function format_get($url_parts, $data) {
315
- if (!empty($data)) {
316
- if (empty($url_parts['query']))
317
- $url_parts['query'] = '';
318
-
319
- $url_parts['query'] .= '&' . http_build_query($data, null, '&');
320
- $url_parts['query'] = trim($url_parts['query'], '&');
321
- }
322
- if (isset($url_parts['path'])) {
323
- if (isset($url_parts['query'])) {
324
- $get = $url_parts['path'] . '?' . $url_parts['query'];
325
- }
326
- else {
327
- $get = $url_parts['path'];
328
- }
329
- }
330
- else {
331
- $get = '/';
332
- }
333
- return $get;
334
- }
335
-
336
- /**
337
- * Error handler for stream_socket_client()
338
- *
339
- * @param int $errno Error number (e.g. E_WARNING)
340
- * @param string $errstr Error message
341
- */
342
- public function connect_error_handler($errno, $errstr) {
343
- // Double-check we can handle it
344
- if (($errno & E_WARNING) === 0 && ($errno & E_NOTICE) === 0) {
345
- // Return false to indicate the default error handler should engage
346
- return false;
347
- }
348
-
349
- $this->connect_error .= $errstr . "\n";
350
- return true;
351
- }
352
-
353
- /**
354
- * Verify the certificate against common name and subject alternative names
355
- *
356
- * Unfortunately, PHP doesn't check the certificate against the alternative
357
- * names, leading things like 'https://www.github.com/' to be invalid.
358
- * Instead
359
- *
360
- * @see http://tools.ietf.org/html/rfc2818#section-3.1 RFC2818, Section 3.1
361
- *
362
- * @throws Requests_Exception On failure to connect via TLS (`fsockopen.ssl.connect_error`)
363
- * @throws Requests_Exception On not obtaining a match for the host (`fsockopen.ssl.no_match`)
364
- * @param string $host Host name to verify against
365
- * @param resource $context Stream context
366
- * @return bool
367
- */
368
- public function verify_certificate_from_context($host, $context) {
369
- $meta = stream_context_get_options($context);
370
-
371
- // If we don't have SSL options, then we couldn't make the connection at
372
- // all
373
- if (empty($meta) || empty($meta['ssl']) || empty($meta['ssl']['peer_certificate'])) {
374
- throw new Requests_Exception(rtrim($this->connect_error), 'ssl.connect_error');
375
- }
376
-
377
- $cert = openssl_x509_parse($meta['ssl']['peer_certificate']);
378
-
379
- return Requests_SSL::verify_certificate($host, $cert);
380
- }
381
-
382
- /**
383
- * Whether this transport is valid
384
- *
385
- * @codeCoverageIgnore
386
- * @return boolean True if the transport is valid, false otherwise.
387
- */
388
- public static function test($capabilities = array()) {
389
- if (!function_exists('fsockopen'))
390
- return false;
391
-
392
- // If needed, check that streams support SSL
393
- if (isset( $capabilities['ssl'] ) && $capabilities['ssl']) {
394
- if (!extension_loaded('openssl') || !function_exists('openssl_x509_parse'))
395
- return false;
396
-
397
- // Currently broken, thanks to https://github.com/facebook/hhvm/issues/2156
398
- if (defined('HHVM_VERSION'))
399
- return false;
400
- }
401
-
402
- return true;
403
- }
404
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Utility/CaseInsensitiveDictionary.php DELETED
@@ -1,91 +0,0 @@
1
- <?php
2
- /**
3
- * Case-insensitive dictionary, suitable for HTTP headers
4
- *
5
- * @package Requests
6
- * @subpackage Utilities
7
- */
8
-
9
- /**
10
- * Case-insensitive dictionary, suitable for HTTP headers
11
- *
12
- * @package Requests
13
- * @subpackage Utilities
14
- */
15
- class Requests_Utility_CaseInsensitiveDictionary implements ArrayAccess, IteratorAggregate {
16
- /**
17
- * Actual item data
18
- *
19
- * @var array
20
- */
21
- protected $data = array();
22
-
23
- /**
24
- * Check if the given item exists
25
- *
26
- * @param string $key Item key
27
- * @return boolean Does the item exist?
28
- */
29
- public function offsetExists($key) {
30
- $key = strtolower($key);
31
- return isset($this->data[$key]);
32
- }
33
-
34
- /**
35
- * Get the value for the item
36
- *
37
- * @param string $key Item key
38
- * @return string Item value
39
- */
40
- public function offsetGet($key) {
41
- $key = strtolower($key);
42
- if (!isset($this->data[$key]))
43
- return null;
44
-
45
- return $this->data[$key];
46
- }
47
-
48
- /**
49
- * Set the given item
50
- *
51
- * @throws Requests_Exception On attempting to use dictionary as list (`invalidset`)
52
- *
53
- * @param string $key Item name
54
- * @param string $value Item value
55
- */
56
- public function offsetSet($key, $value) {
57
- if ($key === null) {
58
- throw new Requests_Exception('Object is a dictionary, not a list', 'invalidset');
59
- }
60
-
61
- $key = strtolower($key);
62
- $this->data[$key] = $value;
63
- }
64
-
65
- /**
66
- * Unset the given header
67
- *
68
- * @param string $key
69
- */
70
- public function offsetUnset($key) {
71
- unset($this->data[strtolower($key)]);
72
- }
73
-
74
- /**
75
- * Get an iterator for the data
76
- *
77
- * @return ArrayIterator
78
- */
79
- public function getIterator() {
80
- return new ArrayIterator($this->data);
81
- }
82
-
83
- /**
84
- * Get the headers as an array
85
- *
86
- * @return array Header data
87
- */
88
- public function getAll() {
89
- return $this->data;
90
- }
91
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/library/Requests/Utility/FilteredIterator.php DELETED
@@ -1,38 +0,0 @@
1
- <?php
2
- /**
3
- * Iterator for arrays requiring filtered values
4
- *
5
- * @package Requests
6
- * @subpackage Utilities
7
- */
8
-
9
- /**
10
- * Iterator for arrays requiring filtered values
11
- *
12
- * @package Requests
13
- * @subpackage Utilities
14
- */
15
- class Requests_Utility_FilteredIterator extends ArrayIterator {
16
- /**
17
- * Create a new iterator
18
- *
19
- * @param array $data
20
- * @param callable $callback Callback to be called on each value
21
- */
22
- public function __construct($data, $callback) {
23
- parent::__construct($data);
24
-
25
- $this->callback = $callback;
26
- }
27
-
28
- /**
29
- * Get the current item's value after filtering
30
- *
31
- * @return string
32
- */
33
- public function current() {
34
- $value = parent::current();
35
- $value = call_user_func($this->callback, $value);
36
- return $value;
37
- }
38
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/package.xml.tpl DELETED
@@ -1,60 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <package packagerversion="1.8.0" version="2.0"
3
- xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
- xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0
5
- http://pear.php.net/dtd/tasks-1.0.xsd
6
- http://pear.php.net/dtd/package-2.0
7
- http://pear.php.net/dtd/package-2.0.xsd">
8
- <name>Requests</name>
9
- <channel>pear.ryanmccue.info</channel>
10
- <summary>A HTTP library written in PHP, for human beings.</summary>
11
- <description>
12
- Requests is a HTTP library written in PHP, for human beings. It is
13
- roughly based on the API from the excellent Requests Python library.
14
- Requests is ISC Licensed (similar to the new BSD license) and has
15
- no dependencies.
16
- </description>
17
- <lead>
18
- <name>Ryan McCue</name>
19
- <user>rmccue</user>
20
- <email>me+pear@ryanmccue dot info</email>
21
- <active>yes</active>
22
- </lead>
23
- <date>{{ date }}</date>
24
- <time>{{ time }}</time>
25
- <version>
26
- <release>{{ version }}</release>
27
- <api>{{ api_version }}</api>
28
- </version>
29
- <stability>
30
- <release>{{ stability }}</release>
31
- <api>{{ stability }}</api>
32
- </stability>
33
- <license uri="https://github.com/rmccue/Requests/blob/master/LICENSE" filesource="LICENSE">ISC</license>
34
- <notes>-</notes>
35
- <contents>
36
- <dir name="/">
37
- <file name="CHANGELOG.md" role="doc" />
38
- <file name="LICENSE" role="doc" />
39
- <file name="README.md" role="doc" />
40
- <dir name="library">
41
- <file install-as="Requests.php" name="Requests.php" role="php" />
42
- <dir name="Requests">
43
- {{ files }}
44
- </dir>
45
- </dir>
46
- <file name="library/Requests/Transport/cacert.pem" install-as="library/Requests/Transport/cacert.pem" role="data" />
47
- </dir>
48
- </contents>
49
- <dependencies>
50
- <required>
51
- <php>
52
- <min>5.2.0</min>
53
- </php>
54
- <pearinstaller>
55
- <min>1.4.0</min>
56
- </pearinstaller>
57
- </required>
58
- </dependencies>
59
- <phprelease />
60
- </package>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/tests/Auth/Basic.php DELETED
@@ -1,87 +0,0 @@
1
- <?php
2
-
3
- class RequestsTest_Auth_Basic extends PHPUnit_Framework_TestCase {
4
- public static function transportProvider() {
5
- $transports = array(
6
- array('Requests_Transport_fsockopen'),
7
- array('Requests_Transport_cURL'),
8
- );
9
- return $transports;
10
- }
11
-
12
- /**
13
- * @dataProvider transportProvider
14
- */
15
- public function testUsingArray($transport) {
16
- if (!call_user_func(array($transport, 'test'))) {
17
- $this->markTestSkipped($transport . ' is not available');
18
- return;
19
- }
20
-
21
- $options = array(
22
- 'auth' => array('user', 'passwd'),
23
- 'transport' => $transport,
24
- );
25
- $request = Requests::get(httpbin('/basic-auth/user/passwd'), array(), $options);
26
- $this->assertEquals(200, $request->status_code);
27
-
28
- $result = json_decode($request->body);
29
- $this->assertEquals(true, $result->authenticated);
30
- $this->assertEquals('user', $result->user);
31
- }
32
-
33
- /**
34
- * @dataProvider transportProvider
35
- */
36
- public function testUsingInstantiation($transport) {
37
- if (!call_user_func(array($transport, 'test'))) {
38
- $this->markTestSkipped($transport . ' is not available');
39
- return;
40
- }
41
-
42
- $options = array(
43
- 'auth' => new Requests_Auth_Basic(array('user', 'passwd')),
44
- 'transport' => $transport,
45
- );
46
- $request = Requests::get(httpbin('/basic-auth/user/passwd'), array(), $options);
47
- $this->assertEquals(200, $request->status_code);
48
-
49
- $result = json_decode($request->body);
50
- $this->assertEquals(true, $result->authenticated);
51
- $this->assertEquals('user', $result->user);
52
- }
53
-
54
- /**
55
- * @dataProvider transportProvider
56
- */
57
- public function testPOSTUsingInstantiation($transport) {
58
- if (!call_user_func(array($transport, 'test'))) {
59
- $this->markTestSkipped($transport . ' is not available');
60
- return;
61
- }
62
-
63
- $options = array(
64
- 'auth' => new Requests_Auth_Basic(array('user', 'passwd')),
65
- 'transport' => $transport,
66
- );
67
- $data = 'test';
68
- $request = Requests::post(httpbin('/post'), array(), $data, $options);
69
- $this->assertEquals(200, $request->status_code);
70
-
71
- $result = json_decode($request->body);
72
-
73
- $auth = $result->headers->Authorization;
74
- $auth = explode(' ', $auth);
75
-
76
- $this->assertEquals(base64_encode('user:passwd'), $auth[1]);
77
- $this->assertEquals('test', $result->data);
78
- }
79
-
80
- /**
81
- * @expectedException Requests_Exception
82
- */
83
- public function testMissingPassword() {
84
- $auth = new Requests_Auth_Basic(array('user'));
85
- }
86
-
87
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/tests/ChunkedEncoding.php DELETED
@@ -1,68 +0,0 @@
1
- <?php
2
-
3
- class RequestsTest_ChunkedDecoding extends PHPUnit_Framework_TestCase {
4
- public static function chunkedProvider() {
5
- return array(
6
- array(
7
- "25\r\nThis is the data in the first chunk\r\n\r\n1A\r\nand this is the second one\r\n0\r\n",
8
- "This is the data in the first chunk\r\nand this is the second one"
9
- ),
10
- array(
11
- "02\r\nab\r\n04\r\nra\nc\r\n06\r\nadabra\r\n0\r\nnothing\n",
12
- "abra\ncadabra"
13
- ),
14
- array(
15
- "02\r\nab\r\n04\r\nra\nc\r\n06\r\nadabra\r\n0c\r\n\nall we got\n",
16
- "abra\ncadabra\nall we got\n"
17
- ),
18
- );
19
- }
20
-
21
- /**
22
- * @dataProvider chunkedProvider
23
- */
24
- public function testChunked($body, $expected){
25
- $transport = new MockTransport();
26
- $transport->body = $body;
27
- $transport->chunked = true;
28
-
29
- $options = array(
30
- 'transport' => $transport
31
- );
32
- $response = Requests::get('http://example.com/', array(), $options);
33
-
34
- $this->assertEquals($expected, $response->body);
35
- }
36
-
37
- /**
38
- * Response says it's chunked, but actually isn't
39
- */
40
- public function testNotActuallyChunked() {
41
- $transport = new MockTransport();
42
- $transport->body = 'Hello! This is a non-chunked response!';
43
- $transport->chunked = true;
44
-
45
- $options = array(
46
- 'transport' => $transport
47
- );
48
- $response = Requests::get('http://example.com/', array(), $options);
49
-
50
- $this->assertEquals($transport->body, $response->body);
51
- }
52
-
53
- /**
54
- * Response says it's chunked and starts looking like it is, but turns out
55
- * that they're lying to us
56
- */
57
- public function testMixedChunkiness() {
58
- $transport = new MockTransport();
59
- $transport->body = "02\r\nab\r\nNot actually chunked!";
60
- $transport->chunked = true;
61
-
62
- $options = array(
63
- 'transport' => $transport
64
- );
65
- $response = Requests::get('http://example.com/', array(), $options);
66
- $this->assertEquals($transport->body, $response->body);
67
- }
68
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/tests/Cookies.php DELETED
@@ -1,346 +0,0 @@
1
- <?php
2
-
3
- class RequestsTest_Cookies extends PHPUnit_Framework_TestCase {
4
- public function testBasicCookie() {
5
- $cookie = new Requests_Cookie('requests-testcookie', 'testvalue');
6
-
7
- $this->assertEquals('requests-testcookie', $cookie->name);
8
- $this->assertEquals('testvalue', $cookie->value);
9
- $this->assertEquals('testvalue', (string) $cookie);
10
-
11
- $this->assertEquals('requests-testcookie=testvalue', $cookie->formatForHeader());
12
- $this->assertEquals('requests-testcookie=testvalue', $cookie->formatForSetCookie());
13
- }
14
-
15
- public function testCookieWithAttributes() {
16
- $attributes = array(
17
- 'httponly',
18
- 'path' => '/'
19
- );
20
- $cookie = new Requests_Cookie('requests-testcookie', 'testvalue', $attributes);
21
-
22
- $this->assertEquals('requests-testcookie=testvalue', $cookie->formatForHeader());
23
- $this->assertEquals('requests-testcookie=testvalue; httponly; path=/', $cookie->formatForSetCookie());
24
- }
25
-
26
- public function testEmptyCookieName() {
27
- $cookie = Requests_Cookie::parse('test');
28
- $this->assertEquals('', $cookie->name);
29
- $this->assertEquals('test', $cookie->value);
30
- }
31
-
32
- public function testEmptyAttributes() {
33
- $cookie = Requests_Cookie::parse('foo=bar; HttpOnly');
34
- $this->assertTrue($cookie->attributes['httponly']);
35
- }
36
-
37
- public function testCookieJarSetter() {
38
- $jar1 = new Requests_Cookie_Jar();
39
- $jar1['requests-testcookie'] = 'testvalue';
40
-
41
- $jar2 = new Requests_Cookie_Jar(array(
42
- 'requests-testcookie' => 'testvalue',
43
- ));
44
- $this->assertEquals($jar1, $jar2);
45
- }
46
-
47
- public function testCookieJarUnsetter() {
48
- $jar = new Requests_Cookie_Jar();
49
- $jar['requests-testcookie'] = 'testvalue';
50
-
51
- $this->assertEquals('testvalue', $jar['requests-testcookie']);
52
-
53
- unset($jar['requests-testcookie']);
54
- $this->assertEmpty($jar['requests-testcookie']);
55
- $this->assertFalse(isset($jar['requests-testcookie']));
56
- }
57
-
58
- /**
59
- * @expectedException Requests_Exception
60
- */
61
- public function testCookieJarAsList() {
62
- $cookies = new Requests_Cookie_Jar();
63
- $cookies[] = 'requests-testcookie1=testvalue1';
64
- }
65
-
66
- public function testCookieJarIterator() {
67
- $cookies = array(
68
- 'requests-testcookie1' => 'testvalue1',
69
- 'requests-testcookie2' => 'testvalue2',
70
- );
71
- $jar = new Requests_Cookie_Jar($cookies);
72
-
73
- foreach ($jar as $key => $value) {
74
- $this->assertEquals($cookies[$key], $value);
75
- }
76
- }
77
-
78
- public function testReceivingCookies() {
79
- $options = array(
80
- 'follow_redirects' => false,
81
- );
82
- $url = httpbin('/cookies/set?requests-testcookie=testvalue');
83
-
84
- $response = Requests::get($url, array(), $options);
85
-
86
- $cookie = $response->cookies['requests-testcookie'];
87
- $this->assertNotEmpty( $cookie );
88
- $this->assertEquals( 'testvalue', $cookie->value );
89
- }
90
-
91
- public function testPersistenceOnRedirect() {
92
- $options = array(
93
- 'follow_redirects' => true,
94
- );
95
- $url = httpbin('/cookies/set?requests-testcookie=testvalue');
96
-
97
- $response = Requests::get($url, array(), $options);
98
-
99
- $cookie = $response->cookies['requests-testcookie'];
100
- $this->assertNotEmpty( $cookie );
101
- $this->assertEquals( 'testvalue', $cookie->value );
102
- }
103
-
104
- protected function setCookieRequest($cookies) {
105
- $options = array(
106
- 'cookies' => $cookies,
107
- );
108
- $response = Requests::get(httpbin('/cookies/set'), array(), $options);
109
-
110
- $data = json_decode($response->body, true);
111
- $this->assertInternalType('array', $data);
112
- $this->assertArrayHasKey('cookies', $data);
113
- return $data['cookies'];
114
- }
115
-
116
- public function testSendingCookie() {
117
- $cookies = array(
118
- 'requests-testcookie1' => 'testvalue1',
119
- );
120
-
121
- $data = $this->setCookieRequest($cookies);
122
-
123
- $this->assertArrayHasKey('requests-testcookie1', $data);
124
- $this->assertEquals('testvalue1', $data['requests-testcookie1']);
125
- }
126
-
127
- public function testSendingCookieWithJar() {
128
- $cookies = new Requests_Cookie_Jar(array(
129
- 'requests-testcookie1' => 'testvalue1',
130
- ));
131
- $data = $this->setCookieRequest($cookies);
132
-
133
- $this->assertArrayHasKey('requests-testcookie1', $data);
134
- $this->assertEquals('testvalue1', $data['requests-testcookie1']);
135
- }
136
-
137
- public function testSendingMultipleCookies() {
138
- $cookies = array(
139
- 'requests-testcookie1' => 'testvalue1',
140
- 'requests-testcookie2' => 'testvalue2',
141
- );
142
- $data = $this->setCookieRequest($cookies);
143
-
144
- $this->assertArrayHasKey('requests-testcookie1', $data);
145
- $this->assertEquals('testvalue1', $data['requests-testcookie1']);
146
-
147
- $this->assertArrayHasKey('requests-testcookie2', $data);
148
- $this->assertEquals('testvalue2', $data['requests-testcookie2']);
149
- }
150
-
151
- public function testSendingMultipleCookiesWithJar() {
152
- $cookies = new Requests_Cookie_Jar(array(
153
- 'requests-testcookie1' => 'testvalue1',
154
- 'requests-testcookie2' => 'testvalue2',
155
- ));
156
- $data = $this->setCookieRequest($cookies);
157
-
158
- $this->assertArrayHasKey('requests-testcookie1', $data);
159
- $this->assertEquals('testvalue1', $data['requests-testcookie1']);
160
-
161
- $this->assertArrayHasKey('requests-testcookie2', $data);
162
- $this->assertEquals('testvalue2', $data['requests-testcookie2']);
163
- }
164
-
165
- public function testSendingPrebakedCookie() {
166
- $cookies = new Requests_Cookie_Jar(array(
167
- new Requests_Cookie('requests-testcookie', 'testvalue'),
168
- ));
169
- $data = $this->setCookieRequest($cookies);
170
-
171
- $this->assertArrayHasKey('requests-testcookie', $data);
172
- $this->assertEquals('testvalue', $data['requests-testcookie']);
173
- }
174
-
175
- public function domainMatchProvider() {
176
- return array(
177
- array('example.com', 'example.com', true, true),
178
- array('example.com', 'www.example.com', false, true),
179
- array('example.com', 'example.net', false, false),
180
-
181
- // Leading period
182
- array('.example.com', 'example.com', true, true),
183
- array('.example.com', 'www.example.com', false, true),
184
- array('.example.com', 'example.net', false, false),
185
-
186
- // Prefix, but not subdomain
187
- array('example.com', 'notexample.com', false, false),
188
- array('example.com', 'notexample.net', false, false),
189
-
190
- // Reject IP address prefixes
191
- array('127.0.0.1', '127.0.0.1', true, true),
192
- array('127.0.0.1', 'abc.127.0.0.1', false, false),
193
- array('127.0.0.1', 'example.com', false, false),
194
- );
195
- }
196
-
197
- /**
198
- * @dataProvider domainMatchProvider
199
- */
200
- public function testDomainExactMatch($original, $check, $matches, $domain_matches) {
201
- $attributes = new Requests_Utility_CaseInsensitiveDictionary();
202
- $attributes['domain'] = $original;
203
- $cookie = new Requests_Cookie('requests-testcookie', 'testvalue', $attributes);
204
- $this->assertEquals($matches, $cookie->domainMatches($check));
205
- }
206
-
207
- /**
208
- * @dataProvider domainMatchProvider
209
- */
210
- public function testDomainMatch($original, $check, $matches, $domain_matches) {
211
- $attributes = new Requests_Utility_CaseInsensitiveDictionary();
212
- $attributes['domain'] = $original;
213
- $flags = array(
214
- 'host-only' => false
215
- );
216
- $cookie = new Requests_Cookie('requests-testcookie', 'testvalue', $attributes, $flags);
217
- $this->assertEquals($domain_matches, $cookie->domainMatches($check));
218
- }
219
-
220
- public function pathMatchProvider() {
221
- return array(
222
- array('/', '/', true),
223
-
224
- array('/', '/test', true),
225
- array('/', '/test/', true),
226
-
227
- array('/test', '/', false),
228
- array('/test', '/test', true),
229
- array('/test', '/testing', false),
230
- array('/test', '/test/', true),
231
- array('/test', '/test/ing', true),
232
- array('/test', '/test/ing/', true),
233
-
234
- array('/test/', '/test/', true),
235
- array('/test/', '/', false),
236
- );
237
- }
238
-
239
- /**
240
- * @dataProvider pathMatchProvider
241
- */
242
- public function testPathMatch($original, $check, $matches) {
243
- $attributes = new Requests_Utility_CaseInsensitiveDictionary();
244
- $attributes['path'] = $original;
245
- $cookie = new Requests_Cookie('requests-testcookie', 'testvalue', $attributes);
246
- $this->assertEquals($matches, $cookie->pathMatches($check));
247
- }
248
-
249
- public function urlMatchProvider() {
250
- return array(
251
- // Domain handling
252
- array( 'example.com', '/', 'http://example.com/', true, true ),
253
- array( 'example.com', '/', 'http://www.example.com/', false, true ),
254
- array( 'example.com', '/', 'http://example.net/', false, false ),
255
- array( 'example.com', '/', 'http://www.example.net/', false, false ),
256
-
257
- // /test
258
- array( 'example.com', '/test', 'http://example.com/', false, false ),
259
- array( 'example.com', '/test', 'http://www.example.com/', false, false ),
260
-
261
- array( 'example.com', '/test', 'http://example.com/test', true, true ),
262
- array( 'example.com', '/test', 'http://www.example.com/test', false, true ),
263
-
264
- array( 'example.com', '/test', 'http://example.com/testing', false, false ),
265
- array( 'example.com', '/test', 'http://www.example.com/testing', false, false ),
266
-
267
- array( 'example.com', '/test', 'http://example.com/test/', true, true ),
268
- array( 'example.com', '/test', 'http://www.example.com/test/', false, true ),
269
-
270
- // /test/
271
- array( 'example.com', '/test/', 'http://example.com/', false, false ),
272
- array( 'example.com', '/test/', 'http://www.example.com/', false, false ),
273
- );
274
- }
275
-
276
- /**
277
- * @depends testDomainExactMatch
278
- * @depends testPathMatch
279
- * @dataProvider urlMatchProvider
280
- */
281
- public function testUrlExactMatch($domain, $path, $check, $matches, $domain_matches) {
282
- $attributes = new Requests_Utility_CaseInsensitiveDictionary();
283
- $attributes['domain'] = $domain;
284
- $attributes['path'] = $path;
285
- $check = new Requests_IRI($check);
286
- $cookie = new Requests_Cookie('requests-testcookie', 'testvalue', $attributes);
287
- $this->assertEquals($matches, $cookie->uriMatches($check));
288
- }
289
-
290
- /**
291
- * @depends testDomainMatch
292
- * @depends testPathMatch
293
- * @dataProvider urlMatchProvider
294
- */
295
- public function testUrlMatch($domain, $path, $check, $matches, $domain_matches) {
296
- $attributes = new Requests_Utility_CaseInsensitiveDictionary();
297
- $attributes['domain'] = $domain;
298
- $attributes['path'] = $path;
299
- $flags = array(
300
- 'host-only' => false
301
- );
302
- $check = new Requests_IRI($check);
303
- $cookie = new Requests_Cookie('requests-testcookie', 'testvalue', $attributes, $flags);
304
- $this->assertEquals($domain_matches, $cookie->uriMatches($check));
305
- }
306
-
307
- public function testUrlMatchSecure() {
308
- $attributes = new Requests_Utility_CaseInsensitiveDictionary();
309
- $attributes['domain'] = 'example.com';
310
- $attributes['path'] = '/';
311
- $attributes['secure'] = true;
312
- $flags = array(
313
- 'host-only' => false,
314
- );
315
- $cookie = new Requests_Cookie('requests-testcookie', 'testvalue', $attributes, $flags);
316
-
317
- $this->assertTrue($cookie->uriMatches(new Requests_IRI('https://example.com/')));
318
- $this->assertFalse($cookie->uriMatches(new Requests_IRI('http://example.com/')));
319
-
320
- // Double-check host-only
321
- $this->assertTrue($cookie->uriMatches(new Requests_IRI('https://www.example.com/')));
322
- $this->assertFalse($cookie->uriMatches(new Requests_IRI('http://www.example.com/')));
323
- }
324
-
325
- /**
326
- * Manually set cookies without a domain/path set should always be valid
327
- *
328
- * Cookies parsed from headers internally in Requests will always have a
329
- * domain/path set, but those created manually will not. Manual cookies
330
- * should be regarded as "global" cookies (that is, set for `.`)
331
- */
332
- public function testUrlMatchManuallySet() {
333
- $cookie = new Requests_Cookie('requests-testcookie', 'testvalue');
334
- $this->assertTrue($cookie->domainMatches('example.com'));
335
- $this->assertTrue($cookie->domainMatches('example.net'));
336
- $this->assertTrue($cookie->pathMatches('/'));
337
- $this->assertTrue($cookie->pathMatches('/test'));
338
- $this->assertTrue($cookie->pathMatches('/test/'));
339
- $this->assertTrue($cookie->uriMatches(new Requests_IRI('http://example.com/')));
340
- $this->assertTrue($cookie->uriMatches(new Requests_IRI('http://example.com/test')));
341
- $this->assertTrue($cookie->uriMatches(new Requests_IRI('http://example.com/test/')));
342
- $this->assertTrue($cookie->uriMatches(new Requests_IRI('http://example.net/')));
343
- $this->assertTrue($cookie->uriMatches(new Requests_IRI('http://example.net/test')));
344
- $this->assertTrue($cookie->uriMatches(new Requests_IRI('http://example.net/test/')));
345
- }
346
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/tests/Encoding.php DELETED
@@ -1,94 +0,0 @@
1
- <?php
2
-
3
- class RequestsTests_Encoding extends PHPUnit_Framework_TestCase {
4
- protected static function mapData($type, $data) {
5
- $real_data = array();
6
- foreach ($data as $value) {
7
- $key = $type . ': ' . $value[0];
8
- $real_data[$key] = $value;
9
- }
10
- return $real_data;
11
- }
12
-
13
- public static function gzipData() {
14
- return array(
15
- array(
16
- 'foobar',
17
- "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\x4b\xcb\xcf\x4f\x4a"
18
- . "\x2c\x02\x00\x95\x1f\xf6\x9e\x06\x00\x00\x00",
19
- ),
20
- array(
21
- 'Requests for PHP',
22
- "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\x0b\x4a\x2d\x2c\x4d"
23
- . "\x2d\x2e\x29\x56\x48\xcb\x2f\x52\x08\xf0\x08\x00\x00\x58\x35"
24
- . "\x18\x17\x10\x00\x00\x00",
25
- ),
26
- );
27
- }
28
-
29
- public static function deflateData() {
30
- return array(
31
- array(
32
- 'foobar',
33
- "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\x78\x9c\x4b\xcb\xcf"
34
- . "\x4f\x4a\x2c\x02\x00\x08\xab\x02\x7a"
35
- ),
36
- array(
37
- 'Requests for PHP',
38
- "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\x78\x9c\x0b\x4a\x2d"
39
- . "\x2c\x4d\x2d\x2e\x29\x56\x48\xcb\x2f\x52\x08\xf0\x08\x00\x00"
40
- . "\x34\x68\x05\xcc"
41
- )
42
- );
43
- }
44
- public static function deflateWithoutHeadersData() {
45
- return array(
46
- array(
47
- 'foobar',
48
- "\x78\x9c\x4b\xcb\xcf\x4f\x4a\x2c\x02\x00\x08\xab\x02\x7a"
49
- ),
50
- array(
51
- 'Requests for PHP',
52
- "\x78\x9c\x0b\x4a\x2d\x2c\x4d\x2d\x2e\x29\x56\x48\xcb\x2f\x52"
53
- . "\x08\xf0\x08\x00\x00\x34\x68\x05\xcc"
54
- )
55
- );
56
- }
57
-
58
- public static function encodedData() {
59
- $datasets = array();
60
- $datasets['gzip'] = self::gzipData();
61
- $datasets['deflate'] = self::deflateData();
62
- $datasets['deflate without zlib headers'] = self::deflateWithoutHeadersData();
63
-
64
- $data = array();
65
- foreach ($datasets as $key => $set) {
66
- $real_set = self::mapData($key, $set);
67
- $data = array_merge($data, $real_set);
68
- }
69
- return $data;
70
- }
71
-
72
- /**
73
- * @dataProvider encodedData
74
- */
75
- public function testDecompress($original, $encoded) {
76
- $decoded = Requests::decompress($encoded);
77
- $this->assertEquals($original, $decoded);
78
- }
79
-
80
- /**
81
- * @dataProvider encodedData
82
- */
83
- public function testCompatibleInflate($original, $encoded) {
84
- $decoded = Requests::compatible_gzinflate($encoded);
85
- $this->assertEquals($original, $decoded);
86
- }
87
-
88
- protected function bin2hex($field) {
89
- $field = bin2hex($field);
90
- $field = chunk_split($field,2,"\\x");
91
- $field = "\\x" . substr($field,0,-2);
92
- return $field;
93
- }
94
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/tests/IDNAEncoder.php DELETED
@@ -1,102 +0,0 @@
1
- <?php
2
-
3
- class RequestsTest_IDNAEncoder extends PHPUnit_Framework_TestCase {
4
- public static function specExamples() {
5
- return array(
6
- array(
7
- "\xe4\xbb\x96\xe4\xbb\xac\xe4\xb8\xba\xe4\xbb\x80\xe4\xb9\x88\xe4\xb8\x8d\xe8\xaf\xb4\xe4\xb8\xad\xe6\x96\x87",
8
- "xn--ihqwcrb4cv8a8dqg056pqjye"
9
- ),
10
- array(
11
- "\x33\xe5\xb9\xb4\x42\xe7\xb5\x84\xe9\x87\x91\xe5\x85\xab\xe5\x85\x88\xe7\x94\x9f",
12
- "xn--3B-ww4c5e180e575a65lsy2b",
13
- )
14
- );
15
- }
16
-
17
- /**
18
- * @dataProvider specExamples
19
- */
20
- public function testEncoding($data, $expected) {
21
- $result = Requests_IDNAEncoder::encode($data);
22
- $this->assertEquals($expected, $result);
23
- }
24
-
25
- /**
26
- * @expectedException Requests_Exception
27
- */
28
- public function testASCIITooLong() {
29
- $data = str_repeat("abcd", 20);
30
- $result = Requests_IDNAEncoder::encode($data);
31
- }
32
-
33
- /**
34
- * @expectedException Requests_Exception
35
- */
36
- public function testEncodedTooLong() {
37
- $data = str_repeat("\xe4\xbb\x96", 60);
38
- $result = Requests_IDNAEncoder::encode($data);
39
- }
40
-
41
- /**
42
- * @expectedException Requests_Exception
43
- */
44
- public function testAlreadyPrefixed() {
45
- $result = Requests_IDNAEncoder::encode("xn--\xe4\xbb\x96");
46
- }
47
-
48
- public function testASCIICharacter() {
49
- $result = Requests_IDNAEncoder::encode("a");
50
- $this->assertEquals('a', $result);
51
- }
52
-
53
- public function testTwoByteCharacter() {
54
- $result = Requests_IDNAEncoder::encode("\xc2\xb6"); // Pilcrow character
55
- $this->assertEquals('xn--tba', $result);
56
- }
57
-
58
- public function testThreeByteCharacter() {
59
- $result = Requests_IDNAEncoder::encode("\xe2\x82\xac"); // Euro symbol
60
- $this->assertEquals('xn--lzg', $result);
61
- }
62
-
63
- public function testFourByteCharacter() {
64
- $result = Requests_IDNAEncoder::encode("\xf0\xa4\xad\xa2"); // Chinese symbol?
65
- $this->assertEquals('xn--ww6j', $result);
66
- }
67
-
68
- /**
69
- * @expectedException Requests_Exception
70
- */
71
- public function testFiveByteCharacter() {
72
- $result = Requests_IDNAEncoder::encode("\xfb\xb6\xb6\xb6\xb6");
73
- }
74
-
75
- /**
76
- * @expectedException Requests_Exception
77
- */
78
- public function testSixByteCharacter() {
79
- $result = Requests_IDNAEncoder::encode("\xfd\xb6\xb6\xb6\xb6\xb6");
80
- }
81
-
82
- /**
83
- * @expectedException Requests_Exception
84
- */
85
- public function testInvalidASCIICharacterWithMultibyte() {
86
- $result = Requests_IDNAEncoder::encode("\0\xc2\xb6");
87
- }
88
-
89
- /**
90
- * @expectedException Requests_Exception
91
- */
92
- public function testUnfinishedMultibyte() {
93
- $result = Requests_IDNAEncoder::encode("\xc2");
94
- }
95
-
96
- /**
97
- * @expectedException Requests_Exception
98
- */
99
- public function testPartialMultibyte() {
100
- $result = Requests_IDNAEncoder::encode("\xc2\xc2\xb6");
101
- }
102
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/tests/IRI.php DELETED
@@ -1,418 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * IRI test cases
5
- *
6
- * Copyright (c) 2008-2010 Geoffrey Sneddon.
7
- * All rights reserved.
8
- *
9
- * Redistribution and use in source and binary forms, with or without
10
- * modification, are permitted provided that the following conditions are met:
11
- *
12
- * * Redistributions of source code must retain the above copyright notice,
13
- * this list of conditions and the following disclaimer.
14
- *
15
- * * Redistributions in binary form must reproduce the above copyright notice,
16
- * this list of conditions and the following disclaimer in the documentation
17
- * and/or other materials provided with the distribution.
18
- *
19
- * * Neither the name of the SimplePie Team nor the names of its contributors
20
- * may be used to endorse or promote products derived from this software
21
- * without specific prior written permission.
22
- *
23
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
24
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
27
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
- * POSSIBILITY OF SUCH DAMAGE.
34
- *
35
- * @package IRI
36
- * @author Geoffrey Sneddon
37
- * @copyright 2008-2010 Geoffrey Sneddon
38
- * @license http://www.opensource.org/licenses/bsd-license.php
39
- * @link http://hg.gsnedders.com/iri/
40
- *
41
- */
42
-
43
- class RequestsTest_IRI extends PHPUnit_Framework_TestCase
44
- {
45
- public static function rfc3986_tests()
46
- {
47
- return array(
48
- // Normal
49
- array('g:h', 'g:h'),
50
- array('g', 'http://a/b/c/g'),
51
- array('./g', 'http://a/b/c/g'),
52
- array('g/', 'http://a/b/c/g/'),
53
- array('/g', 'http://a/g'),
54
- array('//g', 'http://g'),
55
- array('?y', 'http://a/b/c/d;p?y'),
56
- array('g?y', 'http://a/b/c/g?y'),
57
- array('#s', 'http://a/b/c/d;p?q#s'),
58
- array('g#s', 'http://a/b/c/g#s'),
59
- array('g?y#s', 'http://a/b/c/g?y#s'),
60
- array(';x', 'http://a/b/c/;x'),
61
- array('g;x', 'http://a/b/c/g;x'),
62
- array('g;x?y#s', 'http://a/b/c/g;x?y#s'),
63
- array('', 'http://a/b/c/d;p?q'),
64
- array('.', 'http://a/b/c/'),
65
- array('./', 'http://a/b/c/'),
66
- array('..', 'http://a/b/'),
67
- array('../', 'http://a/b/'),
68
- array('../g', 'http://a/b/g'),
69
- array('../..', 'http://a'),
70
- array('../../', 'http://a'),
71
- array('../../g', 'http://a/g'),
72
- // Abnormal
73
- array('../../../g', 'http://a/g'),
74
- array('../../../../g', 'http://a/g'),
75
- array('/./g', 'http://a/g'),
76
- array('/../g', 'http://a/g'),
77
- array('g.', 'http://a/b/c/g.'),
78
- array('.g', 'http://a/b/c/.g'),
79
- array('g..', 'http://a/b/c/g..'),
80
- array('..g', 'http://a/b/c/..g'),
81
- array('./../g', 'http://a/b/g'),
82
- array('./g/.', 'http://a/b/c/g/'),
83
- array('g/./h', 'http://a/b/c/g/h'),
84
- array('g/../h', 'http://a/b/c/h'),
85
- array('g;x=1/./y', 'http://a/b/c/g;x=1/y'),
86
- array('g;x=1/../y', 'http://a/b/c/y'),
87
- array('g?y/./x', 'http://a/b/c/g?y/./x'),
88
- array('g?y/../x', 'http://a/b/c/g?y/../x'),
89
- array('g#s/./x', 'http://a/b/c/g#s/./x'),
90
- array('g#s/../x', 'http://a/b/c/g#s/../x'),
91
- array('http:g', 'http:g'),
92
- );
93
- }
94
-
95
- /**
96
- * @dataProvider rfc3986_tests
97
- */
98
- public function testStringRFC3986($relative, $expected)
99
- {
100
- $base = new Requests_IRI('http://a/b/c/d;p?q');
101
- $this->assertEquals($expected, Requests_IRI::absolutize($base, $relative)->iri);
102
- $this->assertEquals($expected, (string) Requests_IRI::absolutize($base, $relative));
103
- }
104
-
105
- /**
106
- * @dataProvider rfc3986_tests
107
- */
108
- public function testBothStringRFC3986($relative, $expected)
109
- {
110
- $base = 'http://a/b/c/d;p?q';
111
- $this->assertEquals($expected, Requests_IRI::absolutize($base, $relative)->iri);
112
- $this->assertEquals($expected, (string) Requests_IRI::absolutize($base, $relative));
113
- }
114
-
115
- /**
116
- * @dataProvider rfc3986_tests
117
- */
118
- public function testObjectRFC3986($relative, $expected)
119
- {
120
- $base = new Requests_IRI('http://a/b/c/d;p?q');
121
- $expected = new Requests_IRI($expected);
122
- $this->assertEquals($expected, Requests_IRI::absolutize($base, $relative));
123
- }
124
-
125
- public static function sp_tests()
126
- {
127
- return array(
128
- array('http://a/b/c/d', 'f%0o', 'http://a/b/c/f%250o'),
129
- array('http://a/b/', 'c', 'http://a/b/c'),
130
- array('http://a/', 'b', 'http://a/b'),
131
- array('http://a/', '/b', 'http://a/b'),
132
- array('http://a/b', 'c', 'http://a/c'),
133
- array('http://a/b/', "c\x0Ad", 'http://a/b/c%0Ad'),
134
- array('http://a/b/', "c\x0A\x0B", 'http://a/b/c%0A%0B'),
135
- array('http://a/b/c', '//0', 'http://0'),
136
- array('http://a/b/c', '0', 'http://a/b/0'),
137
- array('http://a/b/c', '?0', 'http://a/b/c?0'),
138
- array('http://a/b/c', '#0', 'http://a/b/c#0'),
139
- array('http://0/b/c', 'd', 'http://0/b/d'),
140
- array('http://a/b/c?0', 'd', 'http://a/b/d'),
141
- array('http://a/b/c#0', 'd', 'http://a/b/d'),
142
- array('http://example.com', '//example.net', 'http://example.net'),
143
- array('http:g', 'a', 'http:a'),
144
- );
145
- }
146
-
147
- /**
148
- * @dataProvider sp_tests
149
- */
150
- public function testStringSP($base, $relative, $expected)
151
- {
152
- $base = new Requests_IRI($base);
153
- $this->assertEquals($expected, Requests_IRI::absolutize($base, $relative)->iri);
154
- $this->assertEquals($expected, (string) Requests_IRI::absolutize($base, $relative));
155
- }
156
-
157
- /**
158
- * @dataProvider sp_tests
159
- */
160
- public function testObjectSP($base, $relative, $expected)
161
- {
162
- $base = new Requests_IRI($base);
163
- $expected = new Requests_IRI($expected);
164
- $this->assertEquals($expected, Requests_IRI::absolutize($base, $relative));
165
- }
166
-
167
- public static function absolutize_tests()
168
- {
169
- return array(
170
- array('http://example.com/', 'foo/111:bar', 'http://example.com/foo/111:bar'),
171
- array('http://example.com/#foo', '', 'http://example.com'),
172
- );
173
- }
174
-
175
- /**
176
- * @dataProvider absolutize_tests
177
- */
178
- public function testAbsolutizeString($base, $relative, $expected)
179
- {
180
- $base = new Requests_IRI($base);
181
- $this->assertEquals($expected, Requests_IRI::absolutize($base, $relative)->iri);
182
- }
183
-
184
- /**
185
- * @dataProvider absolutize_tests
186
- */
187
- public function testAbsolutizeObject($base, $relative, $expected)
188
- {
189
- $base = new Requests_IRI($base);
190
- $expected = new Requests_IRI($expected);
191
- $this->assertEquals($expected, Requests_IRI::absolutize($base, $relative));
192
- }
193
-
194
- public static function normalization_tests()
195
- {
196
- return array(
197
- array('example://a/b/c/%7Bfoo%7D', 'example://a/b/c/%7Bfoo%7D'),
198
- array('eXAMPLE://a/./b/../b/%63/%7bfoo%7d', 'example://a/b/c/%7Bfoo%7D'),
199
- array('example://%61/', 'example://a/'),
200
- array('example://%41/', 'example://a/'),
201
- array('example://A/', 'example://a/'),
202
- array('example://a/', 'example://a/'),
203
- array('example://%25A/', 'example://%25a/'),
204
- array('HTTP://EXAMPLE.com/', 'http://example.com'),
205
- array('http://example.com/', 'http://example.com'),
206
- array('http://example.com:', 'http://example.com'),
207
- array('http://example.com:80', 'http://example.com'),
208
- array('http://@example.com', 'http://@example.com'),
209
- array('http://', 'http://'),
210
- array('http://example.com?', 'http://example.com?'),
211
- array('http://example.com#', 'http://example.com#'),
212
- array('https://example.com/', 'https://example.com'),
213
- array('https://example.com:', 'https://example.com'),
214
- array('https://@example.com', 'https://@example.com'),
215
- array('https://example.com?', 'https://example.com?'),
216
- array('https://example.com#', 'https://example.com#'),
217
- array('file://localhost/foobar', 'file:/foobar'),
218
- array('http://[0:0:0:0:0:0:0:1]', 'http://[::1]'),
219
- array('http://[2001:db8:85a3:0000:0000:8a2e:370:7334]', 'http://[2001:db8:85a3::8a2e:370:7334]'),
220
- array('http://[0:0:0:0:0:ffff:c0a8:a01]', 'http://[::ffff:c0a8:a01]'),
221
- array('http://[ffff:0:0:0:0:0:0:0]', 'http://[ffff::]'),
222
- array('http://[::ffff:192.0.2.128]', 'http://[::ffff:192.0.2.128]'),
223
- array('http://[invalid]', 'http:'),
224
- array('http://[0:0:0:0:0:0:0:1]:', 'http://[::1]'),
225
- array('http://[0:0:0:0:0:0:0:1]:80', 'http://[::1]'),
226
- array('http://[0:0:0:0:0:0:0:1]:1234', 'http://[::1]:1234'),
227
- // Punycode decoding helps with normalisation of IRIs, but is not
228
- // needed for URIs, so we don't really care about it for Requests
229
- //array('http://xn--tdali-d8a8w.lv', 'http://tūdaliņ.lv'),
230
- //array('http://t%C5%ABdali%C5%86.lv', 'http://tūdaliņ.lv'),
231
- array('http://Aa@example.com', 'http://Aa@example.com'),
232
- array('http://example.com?Aa', 'http://example.com?Aa'),
233
- array('http://example.com/Aa', 'http://example.com/Aa'),
234
- array('http://example.com#Aa', 'http://example.com#Aa'),
235
- array('http://[0:0:0:0:0:0:0:0]', 'http://[::]'),
236
- array('http:.', 'http:'),
237
- array('http:..', 'http:'),
238
- array('http:./', 'http:'),
239
- array('http:../', 'http:'),
240
- array('http://example.com/%3A', 'http://example.com/%3A'),
241
- array('http://example.com/:', 'http://example.com/:'),
242
- array('http://example.com/%C2', 'http://example.com/%C2'),
243
- array('http://example.com/%C2a', 'http://example.com/%C2a'),
244
- array('http://example.com/%C2%00', 'http://example.com/%C2%00'),
245
- array('http://example.com/%C3%A9', 'http://example.com/é'),
246
- array('http://example.com/%C3%A9%00', 'http://example.com/é%00'),
247
- array('http://example.com/%C3%A9cole', 'http://example.com/école'),
248
- array('http://example.com/%FF', 'http://example.com/%FF'),
249
- array("http://example.com/\xF3\xB0\x80\x80", 'http://example.com/%F3%B0%80%80'),
250
- array("http://example.com/\xF3\xB0\x80\x80%00", 'http://example.com/%F3%B0%80%80%00'),
251
- array("http://example.com/\xF3\xB0\x80\x80a", 'http://example.com/%F3%B0%80%80a'),
252
- array("http://example.com?\xF3\xB0\x80\x80", "http://example.com?\xF3\xB0\x80\x80"),
253
- array("http://example.com?\xF3\xB0\x80\x80%00", "http://example.com?\xF3\xB0\x80\x80%00"),
254
- array("http://example.com?\xF3\xB0\x80\x80a", "http://example.com?\xF3\xB0\x80\x80a"),
255
- array("http://example.com/\xEE\x80\x80", 'http://example.com/%EE%80%80'),
256
- array("http://example.com/\xEE\x80\x80%00", 'http://example.com/%EE%80%80%00'),
257
- array("http://example.com/\xEE\x80\x80a", 'http://example.com/%EE%80%80a'),
258
- array("http://example.com?\xEE\x80\x80", "http://example.com?\xEE\x80\x80"),
259
- array("http://example.com?\xEE\x80\x80%00", "http://example.com?\xEE\x80\x80%00"),
260
- array("http://example.com?\xEE\x80\x80a", "http://example.com?\xEE\x80\x80a"),
261
- array("http://example.com/\xC2", 'http://example.com/%C2'),
262
- array("http://example.com/\xC2a", 'http://example.com/%C2a'),
263
- array("http://example.com/\xC2\x00", 'http://example.com/%C2%00'),
264
- array("http://example.com/\xC3\xA9", 'http://example.com/é'),
265
- array("http://example.com/\xC3\xA9\x00", 'http://example.com/é%00'),
266
- array("http://example.com/\xC3\xA9cole", 'http://example.com/école'),
267
- array("http://example.com/\xFF", 'http://example.com/%FF'),
268
- array("http://example.com/\xFF%00", 'http://example.com/%FF%00'),
269
- array("http://example.com/\xFFa", 'http://example.com/%FFa'),
270
- array('http://example.com/%61', 'http://example.com/a'),
271
- array('http://example.com?%26', 'http://example.com?%26'),
272
- array('http://example.com?%61', 'http://example.com?a'),
273
- array('///', '///'),
274
- );
275
- }
276
-
277
- /**
278
- * @dataProvider normalization_tests
279
- */
280
- public function testStringNormalization($input, $output)
281
- {
282
- $input = new Requests_IRI($input);
283
- $this->assertEquals($output, $input->iri);
284
- $this->assertEquals($output, (string) $input);
285
- }
286
-
287
- /**
288
- * @dataProvider normalization_tests
289
- */
290
- public function testObjectNormalization($input, $output)
291
- {
292
- $input = new Requests_IRI($input);
293
- $output = new Requests_IRI($output);
294
- $this->assertEquals($output, $input);
295
- }
296
-
297
- public static function equivalence_tests()
298
- {
299
- return array(
300
- array('http://É.com', 'http://%C3%89.com'),
301
- );
302
- }
303
-
304
- /**
305
- * @dataProvider equivalence_tests
306
- */
307
- public function testObjectEquivalence($input, $output)
308
- {
309
- $input = new Requests_IRI($input);
310
- $output = new Requests_IRI($output);
311
- $this->assertEquals($output, $input);
312
- }
313
-
314
- public static function not_equivalence_tests()
315
- {
316
- return array(
317
- array('http://example.com/foo/bar', 'http://example.com/foo%2Fbar'),
318
- );
319
- }
320
-
321
- /**
322
- * @dataProvider not_equivalence_tests
323
- */
324
- public function testObjectNotEquivalence($input, $output)
325
- {
326
- $input = new Requests_IRI($input);
327
- $output = new Requests_IRI($output);
328
- $this->assertNotEquals($output, $input);
329
- }
330
-
331
- public function testInvalidAbsolutizeBase()
332
- {
333
- $this->assertFalse(Requests_IRI::absolutize('://not a URL', '../'));
334
- }
335
-
336
- public function testInvalidAbsolutizeRelative()
337
- {
338
- $this->assertFalse(Requests_IRI::absolutize('http://example.com/', 'http://example.com//not a URL'));
339
- }
340
-
341
- public function testFullGamut()
342
- {
343
- $iri = new Requests_IRI();
344
- $iri->scheme = 'http';
345
- $iri->userinfo = 'user:password';
346
- $iri->host = 'example.com';
347
- $iri->path = '/test/';
348
- $iri->fragment = 'test';
349
-
350
- $this->assertEquals('http', $iri->scheme);
351
- $this->assertEquals('user:password', $iri->userinfo);
352
- $this->assertEquals('example.com', $iri->host);
353
- $this->assertEquals(80, $iri->port);
354
- $this->assertEquals('/test/', $iri->path);
355
- $this->assertEquals('test', $iri->fragment);
356
- }
357
-
358
- public function testReadAliased()
359
- {
360
- $iri = new Requests_IRI();
361
- $iri->scheme = 'http';
362
- $iri->userinfo = 'user:password';
363
- $iri->host = 'example.com';
364
- $iri->path = '/test/';
365
- $iri->fragment = 'test';
366
-
367
- $this->assertEquals('http', $iri->ischeme);
368
- $this->assertEquals('user:password', $iri->iuserinfo);
369
- $this->assertEquals('example.com', $iri->ihost);
370
- $this->assertEquals(80, $iri->iport);
371
- $this->assertEquals('/test/', $iri->ipath);
372
- $this->assertEquals('test', $iri->ifragment);
373
- }
374
-
375
- public function testWriteAliased()
376
- {
377
- $iri = new Requests_IRI();
378
- $iri->scheme = 'http';
379
- $iri->iuserinfo = 'user:password';
380
- $iri->ihost = 'example.com';
381
- $iri->ipath = '/test/';
382
- $iri->ifragment = 'test';
383
-
384
- $this->assertEquals('http', $iri->scheme);
385
- $this->assertEquals('user:password', $iri->userinfo);
386
- $this->assertEquals('example.com', $iri->host);
387
- $this->assertEquals(80, $iri->port);
388
- $this->assertEquals('/test/', $iri->path);
389
- $this->assertEquals('test', $iri->fragment);
390
- }
391
-
392
- /**
393
- * @expectedException PHPUnit_Framework_Error_Notice
394
- */
395
- public function testNonexistantProperty()
396
- {
397
- $iri = new Requests_IRI();
398
- $this->assertFalse(isset($iri->nonexistant_prop));
399
- $should_fail = $iri->nonexistant_prop;
400
- }
401
-
402
- public function testBlankHost()
403
- {
404
- $iri = new Requests_IRI('http://example.com/a/?b=c#d');
405
- $iri->host = null;
406
-
407
- $this->assertEquals(null, $iri->host);
408
- $this->assertEquals('http:/a/?b=c#d', (string) $iri);
409
- }
410
-
411
- public function testBadPort()
412
- {
413
- $iri = new Requests_IRI();
414
- $iri->port = 'example';
415
-
416
- $this->assertEquals(null, $iri->port);
417
- }
418
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/tests/Requests.php DELETED
@@ -1,148 +0,0 @@
1
- <?php
2
-
3
- class RequestsTest_Requests extends PHPUnit_Framework_TestCase {
4
- /**
5
- * @expectedException Requests_Exception
6
- */
7
- public function testInvalidProtocol() {
8
- $request = Requests::request('ftp://128.0.0.1/');
9
- }
10
-
11
- public function testDefaultTransport() {
12
- $request = Requests::get(httpbin('/get'));
13
- $this->assertEquals(200, $request->status_code);
14
- }
15
-
16
- /**
17
- * Standard response header parsing
18
- */
19
- public function testHeaderParsing() {
20
- $transport = new RawTransport();
21
- $transport->data =
22
- "HTTP/1.0 200 OK\r\n".
23
- "Host: localhost\r\n".
24
- "Host: ambiguous\r\n".
25
- "Nospace:here\r\n".
26
- "Muchspace: there \r\n".
27
- "Empty:\r\n".
28
- "Empty2: \r\n".
29
- "Folded: one\r\n".
30
- "\ttwo\r\n".
31
- " three\r\n\r\n".
32
- "stop\r\n";
33
-
34
- $options = array(
35
- 'transport' => $transport
36
- );
37
- $response = Requests::get('http://example.com/', array(), $options);
38
- $expected = new Requests_Response_Headers();
39
- $expected['host'] = 'localhost,ambiguous';
40
- $expected['nospace'] = 'here';
41
- $expected['muchspace'] = 'there';
42
- $expected['empty'] = '';
43
- $expected['empty2'] = '';
44
- $expected['folded'] = 'one two three';
45
- foreach ($expected as $key => $value) {
46
- $this->assertEquals($value, $response->headers[$key]);
47
- }
48
-
49
- foreach ($response->headers as $key => $value) {
50
- $this->assertEquals($value, $expected[$key]);
51
- }
52
- }
53
-
54
- public function testRawAccess() {
55
- $transport = new RawTransport();
56
- $transport->data =
57
- "HTTP/1.0 200 OK\r\n".
58
- "Host: localhost\r\n\r\n".
59
- "Test";
60
-
61
- $options = array(
62
- 'transport' => $transport
63
- );
64
- $response = Requests::get('http://example.com/', array(), $options);
65
- $this->assertEquals($transport->data, $response->raw);
66
- }
67
-
68
- /**
69
- * Headers with only \n delimiting should be treated as if they're \r\n
70
- */
71
- public function testHeaderOnlyLF() {
72
- $transport = new RawTransport();
73
- $transport->data = "HTTP/1.0 200 OK\r\nTest: value\nAnother-Test: value\r\n\r\n";
74
-
75
- $options = array(
76
- 'transport' => $transport
77
- );
78
- $response = Requests::get('http://example.com/', array(), $options);
79
- $this->assertEquals('value', $response->headers['test']);
80
- $this->assertEquals('value', $response->headers['another-test']);
81
- }
82
-
83
- /**
84
- * Check that invalid protocols are not accepted
85
- *
86
- * We do not support HTTP/0.9. If this is really an issue for you, file a
87
- * new issue, and update your server/proxy to support a proper protocol.
88
- *
89
- * @expectedException Requests_Exception
90
- */
91
- public function testInvalidProtocolVersion() {
92
- $transport = new RawTransport();
93
- $transport->data = "HTTP/0.9 200 OK\r\n\r\n<p>Test";
94
-
95
- $options = array(
96
- 'transport' => $transport
97
- );
98
- $response = Requests::get('http://example.com/', array(), $options);
99
- }
100
-
101
- /**
102
- * HTTP/0.9 also appears to use a single CRLF instead of two
103
- *
104
- * @expectedException Requests_Exception
105
- */
106
- public function testSingleCRLFSeparator() {
107
- $transport = new RawTransport();
108
- $transport->data = "HTTP/0.9 200 OK\r\n<p>Test";
109
-
110
- $options = array(
111
- 'transport' => $transport
112
- );
113
- $response = Requests::get('http://example.com/', array(), $options);
114
- }
115
-
116
- /**
117
- * @expectedException Requests_Exception
118
- */
119
- public function testInvalidStatus() {
120
- $transport = new RawTransport();
121
- $transport->data = "HTTP/1.1 OK\r\nTest: value\nAnother-Test: value\r\n\r\nTest";
122
-
123
- $options = array(
124
- 'transport' => $transport
125
- );
126
- $response = Requests::get('http://example.com/', array(), $options);
127
- }
128
-
129
- public function test30xWithoutLocation() {
130
- $transport = new MockTransport();
131
- $transport->code = 302;
132
-
133
- $options = array(
134
- 'transport' => $transport
135
- );
136
- $response = Requests::get('http://example.com/', array(), $options);
137
- $this->assertEquals(302, $response->status_code);
138
- $this->assertEquals(0, $response->redirects);
139
- }
140
-
141
- /**
142
- * @expectedException Requests_Exception
143
- */
144
- public function testTimeoutException() {
145
- $options = array('timeout' => 0.5);
146
- $response = Requests::get(httpbin('/delay/3'), array(), $options);
147
- }
148
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/tests/Response/Headers.php DELETED
@@ -1,55 +0,0 @@
1
- <?php
2
-
3
- class RequestsTest_Response_Headers extends PHPUnit_Framework_TestCase {
4
- public function testArrayAccess() {
5
- $headers = new Requests_Response_Headers();
6
- $headers['Content-Type'] = 'text/plain';
7
-
8
- $this->assertEquals('text/plain', $headers['Content-Type']);
9
- }
10
- public function testCaseInsensitiveArrayAccess() {
11
- $headers = new Requests_Response_Headers();
12
- $headers['Content-Type'] = 'text/plain';
13
-
14
- $this->assertEquals('text/plain', $headers['CONTENT-TYPE']);
15
- $this->assertEquals('text/plain', $headers['content-type']);
16
- }
17
-
18
- /**
19
- * @depends testArrayAccess
20
- */
21
- public function testIteration() {
22
- $headers = new Requests_Response_Headers();
23
- $headers['Content-Type'] = 'text/plain';
24
- $headers['Content-Length'] = 10;
25
-
26
- foreach ($headers as $name => $value) {
27
- switch (strtolower($name)) {
28
- case 'content-type':
29
- $this->assertEquals('text/plain', $value);
30
- break;
31
- case 'content-length':
32
- $this->assertEquals(10, $value);
33
- break;
34
- default:
35
- throw new Exception('Invalid name: ' . $name);
36
- }
37
- }
38
- }
39
-
40
- /**
41
- * @expectedException Requests_Exception
42
- */
43
- public function testInvalidKey() {
44
- $headers = new Requests_Response_Headers();
45
- $headers[] = 'text/plain';
46
- }
47
-
48
- public function testMultipleHeaders() {
49
- $headers = new Requests_Response_Headers();
50
- $headers['Accept'] = 'text/html;q=1.0';
51
- $headers['Accept'] = '*/*;q=0.1';
52
-
53
- $this->assertEquals('text/html;q=1.0,*/*;q=0.1', $headers['Accept']);
54
- }
55
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/tests/SSL.php DELETED
@@ -1,108 +0,0 @@
1
- <?php
2
-
3
- class RequestsTest_SSL extends PHPUnit_Framework_TestCase {
4
- public static function domainMatchProvider() {
5
- return array(
6
- array('example.com', 'example.com'),
7
- array('test.example.com', 'test.example.com'),
8
- array('test.example.com', '*.example.com'),
9
- );
10
- }
11
-
12
- public static function domainNoMatchProvider() {
13
- return array(
14
- // Check that we need at least 3 components
15
- array('com', '*'),
16
- array('example.com', '*.com'),
17
-
18
- // Check that double wildcards don't work
19
- array('abc.def.example.com', '*.*.example.com'),
20
-
21
- // Check that we only match with the correct number of components
22
- array('abc.def.example.com', 'def.example.com'),
23
- array('abc.def.example.com', '*.example.com'),
24
-
25
- // Check that the wildcard only works as the full first component
26
- array('abc.def.example.com', 'a*.def.example.com'),
27
-
28
- // Check that wildcards are not allowed for IPs
29
- array('192.168.0.1', '*.168.0.1'),
30
- array('192.168.0.1', '192.168.0.*'),
31
- );
32
- }
33
-
34
- /**
35
- * @dataProvider domainMatchProvider
36
- */
37
- public function testMatch($base, $dnsname) {
38
- $this->assertTrue(Requests_SSL::match_domain($base, $dnsname));
39
- }
40
-
41
- /**
42
- * @dataProvider domainNoMatchProvider
43
- */
44
- public function testNoMatch($base, $dnsname) {
45
- $this->assertFalse(Requests_SSL::match_domain($base, $dnsname));
46
- }
47
-
48
- protected function fakeCertificate($dnsname, $with_san = true) {
49
- $certificate = array(
50
- 'subject' => array(
51
- 'CN' => $dnsname
52
- ),
53
- );
54
-
55
- if ($with_san !== false) {
56
- // If SAN is set to true, default it to the dNSName
57
- if ($with_san === true) {
58
- $with_san = $dnsname;
59
- }
60
- $certificate['extensions'] = array(
61
- 'subjectAltName' => 'DNS: ' . $with_san,
62
- );
63
- }
64
-
65
- return $certificate;
66
- }
67
-
68
- /**
69
- * @dataProvider domainMatchProvider
70
- */
71
- public function testMatchViaCertificate($base, $dnsname) {
72
- $certificate = $this->fakeCertificate($dnsname);
73
- $this->assertTrue(Requests_SSL::verify_certificate($base, $certificate));
74
- }
75
-
76
- /**
77
- * @dataProvider domainNoMatchProvider
78
- */
79
- public function testNoMatchViaCertificate($base, $dnsname) {
80
- $certificate = $this->fakeCertificate($dnsname);
81
- $this->assertFalse(Requests_SSL::verify_certificate($base, $certificate));
82
- }
83
-
84
- public function testCNFallback() {
85
- $certificate = $this->fakeCertificate('example.com', false);
86
- $this->assertTrue(Requests_SSL::verify_certificate('example.com', $certificate));
87
- }
88
-
89
- public function testInvalidCNFallback() {
90
- $certificate = $this->fakeCertificate('example.com', false);
91
- $this->assertFalse(Requests_SSL::verify_certificate('example.net', $certificate));
92
- }
93
-
94
- /**
95
- * Test a certificate with both CN and SAN fields
96
- *
97
- * As per RFC2818, if the SAN field exists, we should parse that and ignore
98
- * the value of the CN field.
99
- *
100
- * @link http://tools.ietf.org/html/rfc2818#section-3.1
101
- */
102
- public function testIgnoreCNWithSAN() {
103
- $certificate = $this->fakeCertificate('example.net', 'example.com');
104
-
105
- $this->assertTrue(Requests_SSL::verify_certificate('example.com', $certificate), 'Checking SAN validation');
106
- $this->assertFalse(Requests_SSL::verify_certificate('example.net', $certificate), 'Checking CN non-validation');
107
- }
108
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/tests/Session.php DELETED
@@ -1,86 +0,0 @@
1
- <?php
2
-
3
- class RequestsTest_Session extends PHPUnit_Framework_TestCase {
4
- public function testPropertyUsage() {
5
- $headers = array(
6
- 'X-TestHeader' => 'testing',
7
- 'X-TestHeader2' => 'requests-test'
8
- );
9
- $data = array(
10
- 'testdata' => 'value1',
11
- 'test2' => 'value2',
12
- 'test3' => array(
13
- 'foo' => 'bar',
14
- 'abc' => 'xyz'
15
- )
16
- );
17
- $options = array(
18
- 'testoption' => 'test',
19
- 'foo' => 'bar'
20
- );
21
-
22
- $session = new Requests_Session('http://example.com/', $headers, $data, $options);
23
- $this->assertEquals('http://example.com/', $session->url);
24
- $this->assertEquals($headers, $session->headers);
25
- $this->assertEquals($data, $session->data);
26
- $this->assertEquals($options['testoption'], $session->options['testoption']);
27
-
28
- // Test via property access
29
- $this->assertEquals($options['testoption'], $session->testoption);
30
-
31
- // Test setting new property
32
- $session->newoption = 'foobar';
33
- $options['newoption'] = 'foobar';
34
- $this->assertEquals($options['newoption'], $session->options['newoption']);
35
-
36
- // Test unsetting property
37
- unset($session->newoption);
38
- $this->assertFalse(isset($session->newoption));
39
-
40
- // Update property
41
- $session->testoption = 'foobar';
42
- $options['testoption'] = 'foobar';
43
- $this->assertEquals($options['testoption'], $session->testoption);
44
-
45
- // Test getting invalid property
46
- $this->assertNull($session->invalidoption);
47
- }
48
-
49
- public function testURLResolution() {
50
- $session = new Requests_Session(httpbin('/'));
51
-
52
- // Set the cookies up
53
- $response = $session->get('/get');
54
- $this->assertTrue($response->success);
55
- $this->assertEquals(httpbin('/get'), $response->url);
56
-
57
- $data = json_decode($response->body, true);
58
- $this->assertNotNull($data);
59
- $this->assertArrayHasKey('url', $data);
60
- $this->assertEquals(httpbin('/get'), $data['url']);
61
- }
62
-
63
- public function testSharedCookies() {
64
- $session = new Requests_Session(httpbin('/'));
65
-
66
- $options = array(
67
- 'follow_redirects' => false
68
- );
69
- $response = $session->get('/cookies/set?requests-testcookie=testvalue', array(), $options);
70
- $this->assertEquals(302, $response->status_code);
71
-
72
- // Check the cookies
73
- $response = $session->get('/cookies');
74
- $this->assertTrue($response->success);
75
-
76
- // Check the response
77
- $data = json_decode($response->body, true);
78
- $this->assertNotNull($data);
79
- $this->assertArrayHasKey('cookies', $data);
80
-
81
- $cookies = array(
82
- 'requests-testcookie' => 'testvalue'
83
- );
84
- $this->assertEquals($cookies, $data['cookies']);
85
- }
86
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/tests/Transport/Base.php DELETED
@@ -1,683 +0,0 @@
1
- <?php
2
-
3
- abstract class RequestsTest_Transport_Base extends PHPUnit_Framework_TestCase {
4
- public function setUp() {
5
- $callback = array($this->transport, 'test');
6
- $supported = call_user_func($callback);
7
-
8
- if (!$supported) {
9
- $this->markTestSkipped($this->transport . ' is not available');
10
- return;
11
- }
12
-
13
- $ssl_supported = call_user_func($callback, array('ssl' => true));
14
- if (!$ssl_supported) {
15
- $this->skip_https = true;
16
- }
17
- }
18
- protected $skip_https = false;
19
-
20
- protected function getOptions($other = array()) {
21
- $options = array(
22
- 'transport' => $this->transport
23
- );
24
- $options = array_merge($options, $other);
25
- return $options;
26
- }
27
-
28
- public function testSimpleGET() {
29
- $request = Requests::get(httpbin('/get'), array(), $this->getOptions());
30
- $this->assertEquals(200, $request->status_code);
31
-
32
- $result = json_decode($request->body, true);
33
- $this->assertEquals(httpbin('/get'), $result['url']);
34
- $this->assertEmpty($result['args']);
35
- }
36
-
37
- public function testGETWithArgs() {
38
- $request = Requests::get(httpbin('/get?test=true&test2=test'), array(), $this->getOptions());
39
- $this->assertEquals(200, $request->status_code);
40
-
41
- $result = json_decode($request->body, true);
42
- $this->assertEquals(httpbin('/get?test=true&test2=test'), $result['url']);
43
- $this->assertEquals(array('test' => 'true', 'test2' => 'test'), $result['args']);
44
- }
45
-
46
- public function testGETWithData() {
47
- $data = array(
48
- 'test' => 'true',
49
- 'test2' => 'test',
50
- );
51
- $request = Requests::request(httpbin('/get'), array(), $data, Requests::GET, $this->getOptions());
52
- $this->assertEquals(200, $request->status_code);
53
-
54
- $result = json_decode($request->body, true);
55
- $this->assertEquals(httpbin('/get?test=true&test2=test'), $result['url']);
56
- $this->assertEquals(array('test' => 'true', 'test2' => 'test'), $result['args']);
57
- }
58
-
59
- public function testGETWithNestedData() {
60
- $data = array(
61
- 'test' => 'true',
62
- 'test2' => array(
63
- 'test3' => 'test',
64
- 'test4' => 'test-too',
65
- ),
66
- );
67
- $request = Requests::request(httpbin('/get'), array(), $data, Requests::GET, $this->getOptions());
68
- $this->assertEquals(200, $request->status_code);
69
-
70
- $result = json_decode($request->body, true);
71
- $this->assertEquals(httpbin('/get?test=true&test2%5Btest3%5D=test&test2%5Btest4%5D=test-too'), $result['url']);
72
- $this->assertEquals(array('test' => 'true', 'test2[test3]' => 'test', 'test2[test4]' => 'test-too'), $result['args']);
73
- }
74
-
75
- public function testGETWithDataAndQuery() {
76
- $data = array(
77
- 'test2' => 'test',
78
- );
79
- $request = Requests::request(httpbin('/get?test=true'), array(), $data, Requests::GET, $this->getOptions());
80
- $this->assertEquals(200, $request->status_code);
81
-
82
- $result = json_decode($request->body, true);
83
- $this->assertEquals(httpbin('/get?test=true&test2=test'), $result['url']);
84
- $this->assertEquals(array('test' => 'true', 'test2' => 'test'), $result['args']);
85
- }
86
-
87
- public function testGETWithHeaders() {
88
- $headers = array(
89
- 'Requested-At' => time(),
90
- );
91
- $request = Requests::get(httpbin('/get'), $headers, $this->getOptions());
92
- $this->assertEquals(200, $request->status_code);
93
-
94
- $result = json_decode($request->body, true);
95
- $this->assertEquals($headers['Requested-At'], $result['headers']['Requested-At']);
96
- }
97
-
98
- public function testChunked() {
99
- $request = Requests::get(httpbin('/stream/1'), array(), $this->getOptions());
100
- $this->assertEquals(200, $request->status_code);
101
-
102
- $result = json_decode($request->body, true);
103
- $this->assertEquals(httpbin('/stream/1'), $result['url']);
104
- $this->assertEmpty($result['args']);
105
- }
106
-
107
- public function testHEAD() {
108
- $request = Requests::head(httpbin('/get'), array(), $this->getOptions());
109
- $this->assertEquals(200, $request->status_code);
110
- $this->assertEquals('', $request->body);
111
- }
112
-
113
- public function testRawPOST() {
114
- $data = 'test';
115
- $request = Requests::post(httpbin('/post'), array(), $data, $this->getOptions());
116
- $this->assertEquals(200, $request->status_code);
117
-
118
- $result = json_decode($request->body, true);
119
- $this->assertEquals('test', $result['data']);
120
- }
121
-
122
- public function testFormPost() {
123
- $data = 'test=true&test2=test';
124
- $request = Requests::post(httpbin('/post'), array(), $data, $this->getOptions());
125
- $this->assertEquals(200, $request->status_code);
126
-
127
- $result = json_decode($request->body, true);
128
- $this->assertEquals(array('test' => 'true', 'test2' => 'test'), $result['form']);
129
- }
130
-
131
- public function testPOSTWithArray() {
132
- $data = array(
133
- 'test' => 'true',
134
- 'test2' => 'test',
135
- );
136
- $request = Requests::post(httpbin('/post'), array(), $data, $this->getOptions());
137
- $this->assertEquals(200, $request->status_code);
138
-
139
- $result = json_decode($request->body, true);
140
- $this->assertEquals(array('test' => 'true', 'test2' => 'test'), $result['form']);
141
- }
142
-
143
- public function testPOSTWithNestedData() {
144
- $data = array(
145
- 'test' => 'true',
146
- 'test2' => array(
147
- 'test3' => 'test',
148
- 'test4' => 'test-too',
149
- ),
150
- );
151
- $request = Requests::post(httpbin('/post'), array(), $data, $this->getOptions());
152
- $this->assertEquals(200, $request->status_code);
153
-
154
- $result = json_decode($request->body, true);
155
- $this->assertEquals(array('test' => 'true', 'test2[test3]' => 'test', 'test2[test4]' => 'test-too'), $result['form']);
156
- }
157
-
158
- public function testRawPUT() {
159
- $data = 'test';
160
- $request = Requests::put(httpbin('/put'), array(), $data, $this->getOptions());
161
- $this->assertEquals(200, $request->status_code);
162
-
163
- $result = json_decode($request->body, true);
164
- $this->assertEquals('test', $result['data']);
165
- }
166
-
167
- public function testFormPUT() {
168
- $data = 'test=true&test2=test';
169
- $request = Requests::put(httpbin('/put'), array(), $data, $this->getOptions());
170
- $this->assertEquals(200, $request->status_code);
171
-
172
- $result = json_decode($request->body, true);
173
- $this->assertEquals(array('test' => 'true', 'test2' => 'test'), $result['form']);
174
- }
175
-
176
- public function testPUTWithArray() {
177
- $data = array(
178
- 'test' => 'true',
179
- 'test2' => 'test',
180
- );
181
- $request = Requests::put(httpbin('/put'), array(), $data, $this->getOptions());
182
- $this->assertEquals(200, $request->status_code);
183
-
184
- $result = json_decode($request->body, true);
185
- $this->assertEquals(array('test' => 'true', 'test2' => 'test'), $result['form']);
186
- }
187
-
188
- public function testRawPATCH() {
189
- $data = 'test';
190
- $request = Requests::patch(httpbin('/patch'), array(), $data, $this->getOptions());
191
- $this->assertEquals(200, $request->status_code);
192
-
193
- $result = json_decode($request->body, true);
194
- $this->assertEquals('test', $result['data']);
195
- }
196
-
197
- public function testFormPATCH() {
198
- $data = 'test=true&test2=test';
199
- $request = Requests::patch(httpbin('/patch'), array(), $data, $this->getOptions());
200
- $this->assertEquals(200, $request->status_code, $request->body);
201
-
202
- $result = json_decode($request->body, true);
203
- $this->assertEquals(array('test' => 'true', 'test2' => 'test'), $result['form']);
204
- }
205
-
206
- public function testPATCHWithArray() {
207
- $data = array(
208
- 'test' => 'true',
209
- 'test2' => 'test',
210
- );
211
- $request = Requests::patch(httpbin('/patch'), array(), $data, $this->getOptions());
212
- $this->assertEquals(200, $request->status_code);
213
-
214
- $result = json_decode($request->body, true);
215
- $this->assertEquals(array('test' => 'true', 'test2' => 'test'), $result['form']);
216
- }
217
-
218
- public function testDELETE() {
219
- $request = Requests::delete(httpbin('/delete'), array(), $this->getOptions());
220
- $this->assertEquals(200, $request->status_code);
221
-
222
- $result = json_decode($request->body, true);
223
- $this->assertEquals(httpbin('/delete'), $result['url']);
224
- $this->assertEmpty($result['args']);
225
- }
226
-
227
- public function testDELETEWithData() {
228
- $data = array(
229
- 'test' => 'true',
230
- 'test2' => 'test',
231
- );
232
- $request = Requests::request(httpbin('/delete'), array(), $data, Requests::DELETE, $this->getOptions());
233
- $this->assertEquals(200, $request->status_code);
234
-
235
- $result = json_decode($request->body, true);
236
- $this->assertEquals(httpbin('/delete?test=true&test2=test'), $result['url']);
237
- $this->assertEquals(array('test' => 'true', 'test2' => 'test'), $result['args']);
238
- }
239
-
240
- public function testRedirects() {
241
- $request = Requests::get(httpbin('/redirect/6'), array(), $this->getOptions());
242
- $this->assertEquals(200, $request->status_code);
243
-
244
- $this->assertEquals(6, $request->redirects);
245
- }
246
-
247
- public function testRelativeRedirects() {
248
- $request = Requests::get(httpbin('/relative-redirect/6'), array(), $this->getOptions());
249
- $this->assertEquals(200, $request->status_code);
250
-
251
- $this->assertEquals(6, $request->redirects);
252
- }
253
-
254
- /**
255
- * @expectedException Requests_Exception
256
- * @todo This should also check that the type is "toomanyredirects"
257
- */
258
- public function testTooManyRedirects() {
259
- $options = array(
260
- 'redirects' => 10, // default, but force just in case
261
- );
262
- $request = Requests::get(httpbin('/redirect/11'), array(), $this->getOptions($options));
263
- }
264
-
265
- public static function statusCodeSuccessProvider() {
266
- return array(
267
- array(200, true),
268
- array(201, true),
269
- array(202, true),
270
- array(203, true),
271
- array(204, true),
272
- array(205, true),
273
- array(206, true),
274
- array(300, false),
275
- array(301, false),
276
- array(302, false),
277
- array(303, false),
278
- array(304, false),
279
- array(305, false),
280
- array(306, false),
281
- array(307, false),
282
- array(400, false),
283
- array(401, false),
284
- array(402, false),
285
- array(403, false),
286
- array(404, false),
287
- array(405, false),
288
- array(406, false),
289
- array(407, false),
290
- array(408, false),
291
- array(409, false),
292
- array(410, false),
293
- array(411, false),
294
- array(412, false),
295
- array(413, false),
296
- array(414, false),
297
- array(415, false),
298
- array(416, false),
299
- array(417, false),
300
- array(418, false), // RFC 2324
301
- array(428, false), // RFC 6585
302
- array(429, false), // RFC 6585
303
- array(431, false), // RFC 6585
304
- array(500, false),
305
- array(501, false),
306
- array(502, false),
307
- array(503, false),
308
- array(504, false),
309
- array(505, false),
310
- array(511, false), // RFC 6585
311
- );
312
- }
313
-
314
- /**
315
- * @dataProvider statusCodeSuccessProvider
316
- */
317
- public function testStatusCode($code, $success) {
318
- $url = sprintf(httpbin('/status/%d'), $code);
319
- $options = array(
320
- 'follow_redirects' => false,
321
- );
322
- $request = Requests::get($url, array(), $this->getOptions($options));
323
- $this->assertEquals($code, $request->status_code);
324
- $this->assertEquals($success, $request->success);
325
- }
326
-
327
- /**
328
- * @dataProvider statusCodeSuccessProvider
329
- */
330
- public function testStatusCodeThrow($code, $success) {
331
- $url = sprintf(httpbin('/status/%d'), $code);
332
- $options = array(
333
- 'follow_redirects' => false,
334
- );
335
-
336
- if (!$success) {
337
- if ($code >= 400) {
338
- $this->setExpectedException('Requests_Exception_HTTP_' . $code, $code);
339
- }
340
- elseif ($code >= 300 && $code < 400) {
341
- $this->setExpectedException('Requests_Exception');
342
- }
343
- }
344
- $request = Requests::get($url, array(), $this->getOptions($options));
345
- $request->throw_for_status(false);
346
- }
347
-
348
- /**
349
- * @dataProvider statusCodeSuccessProvider
350
- */
351
- public function testStatusCodeThrowAllowRedirects($code, $success) {
352
- $url = sprintf(httpbin('/status/%d'), $code);
353
- $options = array(
354
- 'follow_redirects' => false,
355
- );
356
-
357
- if (!$success) {
358
- if ($code >= 400) {
359
- $this->setExpectedException('Requests_Exception_HTTP_' . $code, $code);
360
- }
361
- }
362
- $request = Requests::get($url, array(), $this->getOptions($options));
363
- $request->throw_for_status(true);
364
- }
365
-
366
- public function testStatusCodeUnknown(){
367
- $request = Requests::get(httpbin('/status/599'), array(), $this->getOptions());
368
- $this->assertEquals(599, $request->status_code);
369
- $this->assertEquals(false, $request->success);
370
- }
371
-
372
- /**
373
- * @expectedException Requests_Exception_HTTP_Unknown
374
- */
375
- public function testStatusCodeThrowUnknown(){
376
- $request = Requests::get(httpbin('/status/599'), array(), $this->getOptions());
377
- $request->throw_for_status(true);
378
- }
379
-
380
- public function testGzipped() {
381
- $request = Requests::get(httpbin('/gzip'), array(), $this->getOptions());
382
- $this->assertEquals(200, $request->status_code);
383
-
384
- $result = json_decode($request->body);
385
- $this->assertEquals(true, $result->gzipped);
386
- }
387
-
388
- public function testStreamToFile() {
389
- $options = array(
390
- 'filename' => tempnam(sys_get_temp_dir(), 'RLT') // RequestsLibraryTest
391
- );
392
- $request = Requests::get(httpbin('/get'), array(), $this->getOptions($options));
393
- $this->assertEquals(200, $request->status_code);
394
- $this->assertEmpty($request->body);
395
-
396
- $contents = file_get_contents($options['filename']);
397
- $result = json_decode($contents, true);
398
- $this->assertEquals(httpbin('/get'), $result['url']);
399
- $this->assertEmpty($result['args']);
400
-
401
- unlink($options['filename']);
402
- }
403
-
404
- public function testNonblocking() {
405
- $options = array(
406
- 'blocking' => false
407
- );
408
- $request = Requests::get(httpbin('/get'), array(), $this->getOptions($options));
409
- $empty = new Requests_Response();
410
- $this->assertEquals($empty, $request);
411
- }
412
-
413
- /**
414
- * @expectedException Requests_Exception
415
- */
416
- public function testBadIP() {
417
- $request = Requests::get('http://256.256.256.0/', array(), $this->getOptions());
418
- }
419
-
420
- public function testHTTPS() {
421
- if ($this->skip_https) {
422
- $this->markTestSkipped('SSL support is not available.');
423
- return;
424
- }
425
-
426
- $request = Requests::get(httpbin('/get', true), array(), $this->getOptions());
427
- $this->assertEquals(200, $request->status_code);
428
-
429
- $result = json_decode($request->body, true);
430
- // Disable, since httpbin always returns http
431
- // $this->assertEquals(httpbin('/get', true), $result['url']);
432
- $this->assertEmpty($result['args']);
433
- }
434
-
435
- /**
436
- * @expectedException Requests_Exception
437
- */
438
- public function testExpiredHTTPS() {
439
- if ($this->skip_https) {
440
- $this->markTestSkipped('SSL support is not available.');
441
- return;
442
- }
443
-
444
- $request = Requests::get('https://testssl-expire.disig.sk/index.en.html', array(), $this->getOptions());
445
- }
446
-
447
- /**
448
- * @expectedException Requests_Exception
449
- */
450
- public function testRevokedHTTPS() {
451
- if ($this->skip_https) {
452
- $this->markTestSkipped('SSL support is not available.');
453
- return;
454
- }
455
-
456
- $request = Requests::get('https://testssl-revoked.disig.sk/index.en.html', array(), $this->getOptions());
457
- }
458
-
459
- /**
460
- * Test that SSL fails with a bad certificate
461
- *
462
- * This is defined as invalid by
463
- * https://onlinessl.netlock.hu/en/test-center/invalid-ssl-certificate.html
464
- * and is used in testing in PhantomJS. That said, expect this to break.
465
- *
466
- * @expectedException Requests_Exception
467
- */
468
- public function testBadDomain() {
469
- if ($this->skip_https) {
470
- $this->markTestSkipped('SSL support is not available.');
471
- return;
472
- }
473
-
474
- $request = Requests::get('https://tv.eurosport.com/', array(), $this->getOptions());
475
- }
476
-
477
- /**
478
- * Test that the transport supports Server Name Indication with HTTPS
479
- *
480
- * sni.velox.ch is used for SNI testing, and the common name is set to
481
- * `*.sni.velox.ch` as such. Without alternate name support, this will fail
482
- * as `sni.velox.ch` is only in the alternate name
483
- */
484
- public function testAlternateNameSupport() {
485
- if ($this->skip_https) {
486
- $this->markTestSkipped('SSL support is not available.');
487
- return;
488
- }
489
-
490
- $request = Requests::get('https://sni.velox.ch/', array(), $this->getOptions());
491
- $this->assertEquals(200, $request->status_code);
492
- }
493
-
494
- /**
495
- * Test that the transport supports Server Name Indication with HTTPS
496
- *
497
- * sni.velox.ch is used for SNI testing, and the common name is set to
498
- * `*.sni.velox.ch` as such. Without SNI support, this will fail. Also tests
499
- * our wildcard support.
500
- */
501
- public function testSNISupport() {
502
- if ($this->skip_https) {
503
- $this->markTestSkipped('SSL support is not available.');
504
- return;
505
- }
506
-
507
- $request = Requests::get('https://abc.sni.velox.ch/', array(), $this->getOptions());
508
- $this->assertEquals(200, $request->status_code);
509
- }
510
-
511
- /**
512
- * @expectedException Requests_Exception
513
- */
514
- public function testTimeout() {
515
- $options = array(
516
- 'timeout' => 1,
517
- );
518
- $request = Requests::get(httpbin('/delay/10'), array(), $this->getOptions($options));
519
- var_dump($request);
520
- }
521
-
522
- public function testMultiple() {
523
- $requests = array(
524
- 'test1' => array(
525
- 'url' => httpbin('/get')
526
- ),
527
- 'test2' => array(
528
- 'url' => httpbin('/get')
529
- ),
530
- );
531
- $responses = Requests::request_multiple($requests, $this->getOptions());
532
-
533
- // test1
534
- $this->assertNotEmpty($responses['test1']);
535
- $this->assertInstanceOf('Requests_Response', $responses['test1']);
536
- $this->assertEquals(200, $responses['test1']->status_code);
537
-
538
- $result = json_decode($responses['test1']->body, true);
539
- $this->assertEquals(httpbin('/get'), $result['url']);
540
- $this->assertEmpty($result['args']);
541
-
542
- // test2
543
- $this->assertNotEmpty($responses['test2']);
544
- $this->assertInstanceOf('Requests_Response', $responses['test2']);
545
- $this->assertEquals(200, $responses['test2']->status_code);
546
-
547
- $result = json_decode($responses['test2']->body, true);
548
- $this->assertEquals(httpbin('/get'), $result['url']);
549
- $this->assertEmpty($result['args']);
550
- }
551
-
552
- public function testMultipleWithDifferingMethods() {
553
- $requests = array(
554
- 'get' => array(
555
- 'url' => httpbin('/get'),
556
- ),
557
- 'post' => array(
558
- 'url' => httpbin('/post'),
559
- 'type' => Requests::POST,
560
- 'data' => 'test',
561
- ),
562
- );
563
- $responses = Requests::request_multiple($requests, $this->getOptions());
564
-
565
- // get
566
- $this->assertEquals(200, $responses['get']->status_code);
567
-
568
- // post
569
- $this->assertEquals(200, $responses['post']->status_code);
570
- $result = json_decode($responses['post']->body, true);
571
- $this->assertEquals('test', $result['data']);
572
- }
573
-
574
- /**
575
- * @depends testTimeout
576
- */
577
- public function testMultipleWithFailure() {
578
- $requests = array(
579
- 'success' => array(
580
- 'url' => httpbin('/get'),
581
- ),
582
- 'timeout' => array(
583
- 'url' => httpbin('/delay/10'),
584
- 'options' => array(
585
- 'timeout' => 1,
586
- ),
587
- ),
588
- );
589
- $responses = Requests::request_multiple($requests, $this->getOptions());
590
- $this->assertEquals(200, $responses['success']->status_code);
591
- $this->assertInstanceOf('Requests_Exception', $responses['timeout']);
592
- }
593
-
594
- public function testMultipleUsingCallback() {
595
- $requests = array(
596
- 'get' => array(
597
- 'url' => httpbin('/get'),
598
- ),
599
- 'post' => array(
600
- 'url' => httpbin('/post'),
601
- 'type' => Requests::POST,
602
- 'data' => 'test',
603
- ),
604
- );
605
- $this->completed = array();
606
- $options = array(
607
- 'complete' => array($this, 'completeCallback'),
608
- );
609
- $responses = Requests::request_multiple($requests, $this->getOptions($options));
610
-
611
- $this->assertEquals($this->completed, $responses);
612
- $this->completed = array();
613
- }
614
-
615
- public function testMultipleUsingCallbackAndFailure() {
616
- $requests = array(
617
- 'success' => array(
618
- 'url' => httpbin('/get'),
619
- ),
620
- 'timeout' => array(
621
- 'url' => httpbin('/delay/10'),
622
- 'options' => array(
623
- 'timeout' => 1,
624
- ),
625
- ),
626
- );
627
- $this->completed = array();
628
- $options = array(
629
- 'complete' => array($this, 'completeCallback'),
630
- );
631
- $responses = Requests::request_multiple($requests, $this->getOptions($options));
632
-
633
- $this->assertEquals($this->completed, $responses);
634
- $this->completed = array();
635
- }
636
-
637
- public function completeCallback($response, $key) {
638
- $this->completed[$key] = $response;
639
- }
640
-
641
- public function testMultipleToFile() {
642
- $requests = array(
643
- 'get' => array(
644
- 'url' => httpbin('/get'),
645
- 'options' => array(
646
- 'filename' => tempnam(sys_get_temp_dir(), 'RLT') // RequestsLibraryTest
647
- ),
648
- ),
649
- 'post' => array(
650
- 'url' => httpbin('/post'),
651
- 'type' => Requests::POST,
652
- 'data' => 'test',
653
- 'options' => array(
654
- 'filename' => tempnam(sys_get_temp_dir(), 'RLT') // RequestsLibraryTest
655
- ),
656
- ),
657
- );
658
- $responses = Requests::request_multiple($requests, $this->getOptions());
659
-
660
- // GET request
661
- $contents = file_get_contents($requests['get']['options']['filename']);
662
- $result = json_decode($contents, true);
663
- $this->assertEquals(httpbin('/get'), $result['url']);
664
- $this->assertEmpty($result['args']);
665
- unlink($requests['get']['options']['filename']);
666
-
667
- // POST request
668
- $contents = file_get_contents($requests['post']['options']['filename']);
669
- $result = json_decode($contents, true);
670
- $this->assertEquals(httpbin('/post'), $result['url']);
671
- $this->assertEquals('test', $result['data']);
672
- unlink($requests['post']['options']['filename']);
673
- }
674
-
675
- public function testHostHeader() {
676
- $request = Requests::get('http://portquiz.positon.org:8080/', array(), $this->getOptions());
677
- $responseDoc = new DOMDocument;
678
- $responseDoc->loadHTML($request->body);
679
- $portXpath = new DOMXPath($responseDoc);
680
- $portXpathMatches = $portXpath->query('//p/b');
681
- $this->assertEquals(8080, $portXpathMatches->item(0)->nodeValue);
682
- }
683
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/tests/Transport/cURL.php DELETED
@@ -1,5 +0,0 @@
1
- <?php
2
-
3
- class RequestsTest_Transport_cURL extends RequestsTest_Transport_Base {
4
- protected $transport = 'Requests_Transport_cURL';
5
- }
 
 
 
 
 
inc/Requests/tests/Transport/fsockopen.php DELETED
@@ -1,5 +0,0 @@
1
- <?php
2
-
3
- class RequestsTest_Transport_fsockopen extends RequestsTest_Transport_Base {
4
- protected $transport = 'Requests_Transport_fsockopen';
5
- }
 
 
 
 
 
inc/Requests/tests/bootstrap.php DELETED
@@ -1,139 +0,0 @@
1
- <?php
2
-
3
- date_default_timezone_set('UTC');
4
-
5
- $host = getenv('REQUESTS_TEST_HOST');
6
- if (empty($host)) {
7
- $host = 'httpbin.org';
8
- }
9
- define('REQUESTS_TEST_HOST', getenv('REQUESTS_TEST_HOST') ? getenv('REQUESTS_TEST_HOST') : 'httpbin.org');
10
- define('REQUESTS_TEST_HOST_HTTP', getenv('REQUESTS_TEST_HOST_HTTP') ? getenv('REQUESTS_TEST_HOST_HTTP') : REQUESTS_TEST_HOST);
11
- define('REQUESTS_TEST_HOST_HTTPS', getenv('REQUESTS_TEST_HOST_HTTPS') ? getenv('REQUESTS_TEST_HOST_HTTPS'): REQUESTS_TEST_HOST);
12
-
13
- include(dirname(dirname(__FILE__)) . '/library/Requests.php');
14
- Requests::register_autoloader();
15
-
16
- function autoload_tests($class) {
17
- if (strpos($class, 'RequestsTest_') !== 0) {
18
- return;
19
- }
20
-
21
- $class = substr($class, 13);
22
- $file = str_replace('_', '/', $class);
23
- if (file_exists(dirname(__FILE__) . '/' . $file . '.php')) {
24
- require_once(dirname(__FILE__) . '/' . $file . '.php');
25
- }
26
- }
27
-
28
- spl_autoload_register('autoload_tests');
29
-
30
- function httpbin($suffix = '', $ssl = false) {
31
- $host = $ssl ? 'https://' . REQUESTS_TEST_HOST_HTTPS : 'http://' . REQUESTS_TEST_HOST_HTTP;
32
- return rtrim( $host, '/' ) . '/' . ltrim( $suffix, '/' );
33
- }
34
-
35
- class MockTransport implements Requests_Transport {
36
- public $code = 200;
37
- public $chunked = false;
38
- public $body = 'Test Body';
39
- public $raw_headers = '';
40
-
41
- private static $messages = array(
42
- 100 => '100 Continue',
43
- 101 => '101 Switching Protocols',
44
- 200 => '200 OK',
45
- 201 => '201 Created',
46
- 202 => '202 Accepted',
47
- 203 => '203 Non-Authoritative Information',
48
- 204 => '204 No Content',
49
- 205 => '205 Reset Content',
50
- 206 => '206 Partial Content',
51
- 300 => '300 Multiple Choices',
52
- 301 => '301 Moved Permanently',
53
- 302 => '302 Found',
54
- 303 => '303 See Other',
55
- 304 => '304 Not Modified',
56
- 305 => '305 Use Proxy',
57
- 306 => '306 (Unused)',
58
- 307 => '307 Temporary Redirect',
59
- 400 => '400 Bad Request',
60
- 401 => '401 Unauthorized',
61
- 402 => '402 Payment Required',
62
- 403 => '403 Forbidden',
63
- 404 => '404 Not Found',
64
- 405 => '405 Method Not Allowed',
65
- 406 => '406 Not Acceptable',
66
- 407 => '407 Proxy Authentication Required',
67
- 408 => '408 Request Timeout',
68
- 409 => '409 Conflict',
69
- 410 => '410 Gone',
70
- 411 => '411 Length Required',
71
- 412 => '412 Precondition Failed',
72
- 413 => '413 Request Entity Too Large',
73
- 414 => '414 Request-URI Too Long',
74
- 415 => '415 Unsupported Media Type',
75
- 416 => '416 Requested Range Not Satisfiable',
76
- 417 => '417 Expectation Failed',
77
- 500 => '500 Internal Server Error',
78
- 501 => '501 Not Implemented',
79
- 502 => '502 Bad Gateway',
80
- 503 => '503 Service Unavailable',
81
- 504 => '504 Gateway Timeout',
82
- 505 => '505 HTTP Version Not Supported',
83
- );
84
-
85
- public function request($url, $headers = array(), $data = array(), $options = array()) {
86
- $status = self::$messages[$this->code];
87
- $response = "HTTP/1.0 $status\r\n";
88
- $response .= "Content-Type: text/plain\r\n";
89
- if ($this->chunked) {
90
- $response .= "Transfer-Encoding: chunked\r\n";
91
- }
92
- $response .= $this->raw_headers;
93
- $response .= "Connection: close\r\n\r\n";
94
- $response .= $this->body;
95
- return $response;
96
- }
97
-
98
- public function request_multiple($requests, $options) {
99
- $responses = array();
100
- foreach ($requests as $id => $request) {
101
- $handler = new MockTransport();
102
- $handler->code = $request['options']['mock.code'];
103
- $handler->chunked = $request['options']['mock.chunked'];
104
- $handler->body = $request['options']['mock.body'];
105
- $handler->raw_headers = $request['options']['mock.raw_headers'];
106
- $responses[$id] = $handler->request($request['url'], $request['headers'], $request['data'], $request['options']);
107
-
108
- if (!empty($options['mock.parse'])) {
109
- $request['options']['hooks']->dispatch('transport.internal.parse_response', array(&$responses[$id], $request));
110
- $request['options']['hooks']->dispatch('multiple.request.complete', array(&$responses[$id], $id));
111
- }
112
- }
113
-
114
- return $responses;
115
- }
116
-
117
- public static function test() {
118
- return true;
119
- }
120
- }
121
-
122
- class RawTransport implements Requests_Transport {
123
- public $data = '';
124
- public function request($url, $headers = array(), $data = array(), $options = array()) {
125
- return $this->data;
126
- }
127
- public function request_multiple($requests, $options) {
128
- foreach ($requests as $id => &$request) {
129
- $handler = new RawTransport();
130
- $handler->data = $request['options']['raw.data'];
131
- $request = $handler->request($request['url'], $request['headers'], $request['data'], $request['options']);
132
- }
133
-
134
- return $requests;
135
- }
136
- public static function test() {
137
- return true;
138
- }
139
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/Requests/tests/phpunit.xml.dist DELETED
@@ -1,35 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <phpunit bootstrap="bootstrap.php">
3
- <testsuites>
4
- <testsuite name="Authentication">
5
- <directory suffix=".php">Auth</directory>
6
- </testsuite>
7
- <testsuite name="Transports">
8
- <directory suffix=".php">Transport</directory>
9
- </testsuite>
10
- <testsuite name="General">
11
- <file>ChunkedEncoding.php</file>
12
- <file>Cookies.php</file>
13
- <file>IDNAEncoder.php</file>
14
- <file>IRI.php</file>
15
- <file>Requests.php</file>
16
- <file>Response/Headers.php</file>
17
- <file>SSL.php</file>
18
- </testsuite>
19
- </testsuites>
20
-
21
- <logging>
22
- <log type="coverage-html" target="coverage" title="PHPUnit"
23
- charset="UTF-8" yui="true" highlight="true"
24
- lowUpperBound="35" highLowerBound="90"/>
25
- </logging>
26
-
27
- <filter>
28
- <blacklist>
29
- <directory suffix=".php">.</directory>
30
- </blacklist>
31
- <whitelist>
32
- <directory suffix=".php">../library</directory>
33
- </whitelist>
34
- </filter>
35
- </phpunit>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/common.php CHANGED
@@ -1,51 +1,73 @@
1
  <?php
 
 
 
2
 
3
- function getEmailPassword() {
4
- $mailmunch_email = get_option("mailmunch_user_email");
5
- $mailmunch_password = get_option("mailmunch_user_password");
6
 
7
- if (empty($mailmunch_email)) {
8
- $current_user = wp_get_current_user();
9
- update_option("mailmunch_user_email", $current_user->user_email);
10
- }
11
 
12
- if (empty($mailmunch_password)) {
13
- update_option("mailmunch_user_password", uniqid());
14
- }
15
 
16
- $mailmunch_email = get_option("mailmunch_user_email");
17
- $mailmunch_password = get_option("mailmunch_user_password");
18
 
19
- return array('email' => $mailmunch_email, 'password' => $mailmunch_password);
20
- }
21
 
22
- function getSite($sites, $site_id) {
23
- foreach ($sites as $s) {
24
- if ($s->id == intval($site_id)) {
25
- $site = $s;
26
- break;
 
27
  }
 
 
28
  }
29
 
30
- return $site;
31
- }
 
32
 
33
- function createAndGetSites($mm) {
34
- $site_url = home_url();
35
- $site_name = get_bloginfo();
 
 
 
36
 
37
- if (!$mm->hasSite()) {
38
- $mm->createSite($site_name, $site_url);
 
 
 
39
  }
40
- $request = $mm->sites();
41
- if ($request->status_code == 200){
42
- $sites = $request->body;
43
 
44
- return json_decode($sites);
45
- }
46
- else {
47
- return array();
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  }
49
  }
50
-
51
  ?>
1
  <?php
2
+ class MailmunchHelpers {
3
+ function __construct() {
4
+ }
5
 
6
+ function getEmailPassword() {
7
+ $mailmunch_email = get_option("mailmunch_user_email");
8
+ $mailmunch_password = get_option("mailmunch_user_password");
9
 
10
+ if (empty($mailmunch_email)) {
11
+ $current_user = wp_get_current_user();
12
+ update_option("mailmunch_user_email", $current_user->user_email);
13
+ }
14
 
15
+ if (empty($mailmunch_password)) {
16
+ update_option("mailmunch_user_password", uniqid());
17
+ }
18
 
19
+ $mailmunch_email = get_option("mailmunch_user_email");
20
+ $mailmunch_password = get_option("mailmunch_user_password");
21
 
22
+ return array('email' => $mailmunch_email, 'password' => $mailmunch_password);
23
+ }
24
 
25
+ function getSite($sites, $site_id) {
26
+ foreach ($sites as $s) {
27
+ if ($s->id == intval($site_id)) {
28
+ $site = $s;
29
+ break;
30
+ }
31
  }
32
+
33
+ return $site;
34
  }
35
 
36
+ function createAndGetSites($mm) {
37
+ $site_url = home_url();
38
+ $site_name = get_bloginfo();
39
 
40
+ if (!$mm->hasSite()) {
41
+ $mm->createSite($site_name, $site_url);
42
+ }
43
+ $request = $mm->sites();
44
+ if ($request['response']['code'] == 200){
45
+ $sites = $request['body'];
46
 
47
+ return json_decode($sites);
48
+ }
49
+ else {
50
+ return array();
51
+ }
52
  }
 
 
 
53
 
54
+ function createAndGetGuestSites($mm) {
55
+ // This is for GUEST users. Do NOT collect any user data.
56
+ $site_url = "";
57
+ $site_name = "WordPress";
58
+
59
+ if (!$mm->hasSite()) {
60
+ $mm->createSite($site_name, $site_url);
61
+ }
62
+ $request = $mm->sites();
63
+ if ($request['response']['code'] == 200){
64
+ $sites = $request['body'];
65
+
66
+ return json_decode($sites);
67
+ }
68
+ else {
69
+ return array();
70
+ }
71
  }
72
  }
 
73
  ?>
inc/mailmunchapi.php CHANGED
@@ -1,7 +1,4 @@
1
  <?php
2
- require_once( plugin_dir_path( __FILE__ ) . 'Requests/library/Requests.php' );
3
- Requests::register_autoloader();
4
-
5
  class MailmunchApi {
6
  protected $base_url = '';
7
  protected $email = '';
@@ -20,9 +17,13 @@
20
  return $this->ping('/sites');
21
  }
22
 
23
- function widgets($site_id) {
24
  $this->requestType = 'get';
25
- return $this->ping('/sites/'.$site_id.'/widgets');
 
 
 
 
26
  }
27
 
28
  function getWidgetsHtml($site_id) {
@@ -31,13 +32,24 @@
31
  }
32
 
33
  function deleteWidget($site_id, $widget_id) {
34
- $this->requestType = 'delete';
35
- return $this->ping('/sites/'.$site_id.'/widgets/'.$widget_id);
 
 
 
 
 
 
 
 
 
 
 
36
  }
37
 
38
  function hasSite() {
39
  $request = $this->sites();
40
- $sites = $request->body;
41
  $result = json_decode($sites);
42
 
43
  return (sizeof($result) > 0);
@@ -46,6 +58,19 @@
46
  function createSite($sitename, $domain) {
47
  $this->requestType = 'post';
48
  return $this->ping('/sites', array(
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  'site' => array(
50
  'name' => $sitename,
51
  'domain' => $domain
@@ -53,6 +78,18 @@
53
  ));
54
  }
55
 
 
 
 
 
 
 
 
 
 
 
 
 
56
  function signUp() {
57
  $this->requestType = 'post';
58
  return $this->ping('/users', array(
@@ -64,37 +101,69 @@
64
  ), true);
65
  }
66
 
 
 
 
 
 
 
 
 
 
 
67
  function signIn() {
68
  $this->requestType = 'post';
69
  return $this->ping('/users/sign_in');
70
  }
71
 
72
  function validPassword() {
73
- $this->requestType = 'get';
74
- $request = $this->ping('/sites');
 
 
 
75
 
76
- if ($request->status_code == 200){
77
- return true;
78
- }
79
- else {
80
- return false;
81
- }
82
  }
83
 
84
- function isNewUser() {
 
 
 
85
  $this->requestType = 'get';
86
- return $this->ping('/users/exists?user[email]='. $this->email, array(), true)->body == 'false';
 
87
  }
88
 
89
  function ping($path, $options=array(), $skipAuth=false) {
90
  $auth = array('auth' => array($this->email, $this->password));
91
  $type = $this->requestType;
 
 
 
 
 
 
 
 
 
92
  if ($type != 'post') {
93
- $request = Requests::$type($this->base_url. $path, $this->headers, $skipAuth ? $options : array_merge($options, $auth));
94
  }
95
  else {
96
- $request = Requests::$type($this->base_url. $path, $this->headers, $options, $skipAuth ? array() : $auth);
 
97
  }
 
 
 
 
 
98
  return $request;
99
  }
100
  }
1
  <?php
 
 
 
2
  class MailmunchApi {
3
  protected $base_url = '';
4
  protected $email = '';
17
  return $this->ping('/sites');
18
  }
19
 
20
+ function widgets($site_id, $widget_type_name) {
21
  $this->requestType = 'get';
22
+ if (!empty($widget_type_name)) {
23
+ return $this->ping('/sites/'.$site_id.'/widgets?widget_type_name='.$widget_type_name);
24
+ } else {
25
+ return $this->ping('/sites/'.$site_id.'/widgets');
26
+ }
27
  }
28
 
29
  function getWidgetsHtml($site_id) {
32
  }
33
 
34
  function deleteWidget($site_id, $widget_id) {
35
+ $this->requestType = 'post';
36
+ return $this->ping('/sites/'.$site_id.'/widgets/'.$widget_id.'/delete');
37
+ }
38
+
39
+ function importWidgets($new_user_email, $new_user_password) {
40
+ $this->requestType = 'post';
41
+ return $this->ping('/wordpress/import_widgets', array(
42
+ 'external_id' => get_option("mailmunch_wordpress_instance_id"),
43
+ 'new_user_email' => $new_user_email,
44
+ 'new_user_password' => $new_user_password,
45
+ 'site_url' => home_url(),
46
+ 'site_name' => get_bloginfo()
47
+ ));
48
  }
49
 
50
  function hasSite() {
51
  $request = $this->sites();
52
+ $sites = $request['body'];
53
  $result = json_decode($sites);
54
 
55
  return (sizeof($result) > 0);
58
  function createSite($sitename, $domain) {
59
  $this->requestType = 'post';
60
  return $this->ping('/sites', array(
61
+ 'site' => array(
62
+ 'name' => $sitename,
63
+ 'domain' => $domain,
64
+ 'wordpress' => true,
65
+ 'external_id' => get_option("mailmunch_wordpress_instance_id")
66
+ )
67
+ ));
68
+ }
69
+
70
+ function updateSite($sitename, $domain) {
71
+ $this->requestType = 'post';
72
+ return $this->ping('/wordpress/update_site', array(
73
+ 'external_id' => get_option("mailmunch_wordpress_instance_id"),
74
  'site' => array(
75
  'name' => $sitename,
76
  'domain' => $domain
78
  ));
79
  }
80
 
81
+ function createGuestUser() {
82
+ $this->requestType = 'post';
83
+ return $this->ping('/users', array(
84
+ 'user' => array(
85
+ 'email' => $this->email,
86
+ 'password' => $this->password,
87
+ 'guest_user' => true,
88
+ 'referral' => "wordpress-plugin"
89
+ )
90
+ ), true);
91
+ }
92
+
93
  function signUp() {
94
  $this->requestType = 'post';
95
  return $this->ping('/users', array(
101
  ), true);
102
  }
103
 
104
+ function updateGuest($new_email) {
105
+ $this->requestType = 'post';
106
+ return $this->ping('/wordpress/update_guest', array(
107
+ 'user' => array(
108
+ 'email' => $new_email,
109
+ 'guest_user' => false
110
+ )
111
+ ), true);
112
+ }
113
+
114
  function signIn() {
115
  $this->requestType = 'post';
116
  return $this->ping('/users/sign_in');
117
  }
118
 
119
  function validPassword() {
120
+ $this->requestType = 'get';
121
+ $request = $this->ping('/sites');
122
+ if( is_wp_error( $request ) ) {
123
+ return new WP_Error( 'broke', "Unable to connect to MailMunch. Please try again later." );
124
+ }
125
 
126
+ if ($request['response']['code'] == 200){
127
+ return true;
128
+ }
129
+ else {
130
+ return false;
131
+ }
132
  }
133
 
134
+ function isNewUser($email) {
135
+ if (empty($email)) {
136
+ $email = $this->email;
137
+ }
138
  $this->requestType = 'get';
139
+ $result = $this->ping('/users/exists?user[email]='. $email, array(), true);
140
+ return $result['body'] == 'false';
141
  }
142
 
143
  function ping($path, $options=array(), $skipAuth=false) {
144
  $auth = array('auth' => array($this->email, $this->password));
145
  $type = $this->requestType;
146
+ $url = $this->base_url. $path;
147
+ $args = array(
148
+ 'headers' => array_merge($this->headers, array(
149
+ 'Authorization' => 'Basic ' . base64_encode( $this->email . ':' . $this->password )
150
+ )
151
+ ),
152
+ 'timeout' => 120
153
+ );
154
+
155
  if ($type != 'post') {
156
+ $request = wp_remote_get($url, $args);
157
  }
158
  else {
159
+ $args = array_merge($args, array('method' => 'POST', 'body' => $options));
160
+ $request = wp_remote_post($url, $args);
161
  }
162
+
163
+ if ( !is_wp_error( $request ) && $request['response']['code'] == 500 ) {
164
+ return new WP_Error( 'broke', "Internal Server Error" );
165
+ }
166
+
167
  return $request;
168
  }
169
  }
inc/sidebar_widget.php ADDED
@@ -0,0 +1,131 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Mailmunch_Sidebar_Widget extends WP_Widget {
3
+
4
+ /**
5
+ * Register widget with WordPress.
6
+ */
7
+ function __construct() {
8
+ parent::__construct(
9
+ 'mailmunch_widget', // Base ID
10
+ __('Sidebar MailMunch Form', 'text_domain'), // Name
11
+ array( 'description' => __( 'Displays a MailMunch optin form in Sidebar', 'text_domain' ), ) // Args
12
+ );
13
+ }
14
+
15
+ /**
16
+ * Front-end display of widget.
17
+ *
18
+ * @see WP_Widget::widget()
19
+ *
20
+ * @param array $args Widget arguments.
21
+ * @param array $instance Saved values from database.
22
+ */
23
+ public function widget( $args, $instance ) {
24
+ if ( isset( $instance[ 'form_id' ] ) ) {
25
+ $form_id = $instance[ 'form_id' ];
26
+ }
27
+
28
+ if (!empty($form_id)) {
29
+ echo $args['before_widget'];
30
+ if ( ! empty( $instance['title'] ) ) {
31
+ echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ). $args['after_title'];
32
+ }
33
+ echo "<div class='mailmunch-wordpress-widget mailmunch-wordpress-widget-".$form_id."' style='display: none !important;'></div>";
34
+ echo $args['after_widget'];
35
+ }
36
+ }
37
+
38
+ /**
39
+ * Back-end widget form.
40
+ *
41
+ * @see WP_Widget::form()
42
+ *
43
+ * @param array $instance Previously saved values from database.
44
+ */
45
+ public function form( $instance ) {
46
+ if ( isset( $instance[ 'title' ] ) ) {
47
+ $title = $instance[ 'title' ];
48
+ }
49
+ else {
50
+ $title = __( 'Optin Form', 'text_domain' );
51
+ }
52
+
53
+ if ( isset( $instance[ 'form_id' ] ) ) {
54
+ $form_id = $instance[ 'form_id' ];
55
+ }
56
+
57
+ $mailmunch_data = unserialize(get_option("mailmunch_data"));
58
+ $mailmunch_user_email = get_option("mailmunch_user_email");
59
+ $mailmunch_user_password = get_option("mailmunch_user_password");
60
+ if (!empty($mailmunch_user_email) && !empty($mailmunch_user_password) && !empty($mailmunch_data["site_id"])) {
61
+ $mailmunch_site_id = $mailmunch_data["site_id"];
62
+ $mm = new MailmunchApi($mailmunch_user_email, $mailmunch_user_password, "http://".MAILMUNCH_URL);
63
+ $result = $mm->widgets($mailmunch_site_id, "Sidebar");
64
+ if ( !is_wp_error( $result ) ) {
65
+ $widgets = json_decode($result['body']);
66
+ }
67
+ } else {
68
+ ?>
69
+ <p>No MailMunch account found. <a href="<?php echo admin_url( 'admin.php?page='.MAILMUNCH_SLUG ); ?>">Go Here First</a></p>
70
+ <?php
71
+ return;
72
+ }
73
+ ?>
74
+ <script type="text/javascript">
75
+ window.onmessage = function (e) {
76
+ if (e.data === 'refresh') {
77
+ top.location.reload();
78
+ }
79
+ };
80
+ </script>
81
+ <?php
82
+ if (sizeof($widgets) > 0) {
83
+ ?>
84
+ <p>
85
+ <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label>
86
+ <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>">
87
+ </p>
88
+
89
+ <p>
90
+ <label for="<?php echo $this->get_field_id( 'form_id' ); ?>"><?php _e( 'Optin Form:' ); ?></label>
91
+ <select class="widefat" id="<?php echo $this->get_field_id( 'form_id' ); ?>" name="<?php echo $this->get_field_name( 'form_id' ); ?>">
92
+ <option value="">None</option>
93
+ <?php
94
+ foreach ($widgets as $widget) {
95
+ echo "<option value='".$widget->id."'";
96
+ if ($form_id == $widget->id) { echo " selected"; };
97
+ echo ">".$widget->name."</option>";
98
+ }
99
+ ?>
100
+ </select>
101
+ </p>
102
+
103
+ <p><a href="//<?php echo MAILMUNCH_URL ?>/sso?email=<?php echo $mailmunch_user_email ?>&password=<?php echo $mailmunch_user_password ?>&next_url=<?php echo urlencode("/sites/".$mailmunch_data["site_id"]."/widgets/new?wp_layout=1&widget_type=Sidebar") ?>" target="_blank">Create New Sidebar Form</a></p>
104
+ <?php
105
+ } else {
106
+ ?>
107
+ <p>No sidebar forms found. <a href="//<?php echo MAILMUNCH_URL ?>/sso?email=<?php echo $mailmunch_user_email ?>&password=<?php echo $mailmunch_user_password ?>&next_url=<?php echo urlencode("/sites/".$mailmunch_data["site_id"]."/widgets/new?wp_layout=1&widget_type=Sidebar") ?>" target="_blank">Create Your First One</a></p>
108
+ <?php
109
+ }
110
+
111
+ }
112
+
113
+ /**
114
+ * Sanitize widget form values as they are saved.
115
+ *
116
+ * @see WP_Widget::update()
117
+ *
118
+ * @param array $new_instance Values just sent to be saved.
119
+ * @param array $old_instance Previously saved values from database.
120
+ *
121
+ * @return array Updated safe values to be saved.
122
+ */
123
+ public function update( $new_instance, $old_instance ) {
124
+ $instance = array();
125
+ $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
126
+ $instance['form_id'] = ( ! empty( $new_instance['form_id'] ) ) ? strip_tags( $new_instance['form_id'] ) : '';
127
+
128
+ return $instance;
129
+ }
130
+
131
+ }
js/admin.js CHANGED
@@ -33,4 +33,15 @@ function showSignInForm() {
33
  function showSignUpForm() {
34
  document.getElementById("sign-in-form").style.display = 'none';
35
  document.getElementById("sign-up-form").style.display = 'block';
 
 
 
 
 
 
 
 
 
 
 
36
  }
33
  function showSignUpForm() {
34
  document.getElementById("sign-in-form").style.display = 'none';
35
  document.getElementById("sign-up-form").style.display = 'block';
36
+ }
37
+
38
+ function showSignupBox() {
39
+ document.getElementById('why-account').style.display = 'none';
40
+ tb_show("Create Account","#TB_inline?width=550&height=450&inlineId=signup-signin-box",null);
41
+ return false;
42
+ }
43
+
44
+ function showWhyAccount() {
45
+ document.getElementById('why-account').style.display = 'block';
46
+ tb_show("Create Account","#TB_inline?width=550&height=500&inlineId=signup-signin-box",null);
47
  }
mailmunch.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: MailMunch
4
  Plugin URI: http://www.mailmunch.co
5
  Description: Collect email addresses from website visitors and grow your subscribers with our attention grabbing optin-forms, entry/exit intent technology, and other effective lead-generation forms.
6
- Version: 1.3.4
7
  Author: MailMunch
8
  Author URI: http://www.mailmunch.co
9
  License: GPL2
@@ -11,35 +11,52 @@
11
 
12
  require_once( plugin_dir_path( __FILE__ ) . 'inc/mailmunchapi.php' );
13
  require_once( plugin_dir_path( __FILE__ ) . 'inc/common.php' );
 
14
 
15
  define( 'MAILMUNCH_SLUG', "mailmunch");
16
- define( 'MAILMUNCH_VER', "1.3.4");
17
  define( 'MAILMUNCH_URL', "www.mailmunch.co");
18
 
 
 
 
 
 
19
  // Adding Admin Menu
20
- add_action( 'admin_menu', 'register_mailmunch_page' );
21
 
22
- function register_mailmunch_page(){
 
23
  $menu_page = add_menu_page( 'MailMunch Settings', 'MailMunch', 'manage_options', MAILMUNCH_SLUG, 'mailmunch_setup', plugins_url( 'img/icon.png', __FILE__ ), 102.786 );
24
  // If successful, load admin assets only on that page.
25
- if ($menu_page) add_action('load-' . $menu_page, 'load_plugin_assets');
 
 
 
 
 
 
 
26
  }
27
 
28
- function load_plugin_assets() {
29
- add_action( 'admin_enqueue_scripts', 'enqueue_admin_styles' );
30
- add_action( 'admin_enqueue_scripts', 'enqueue_admin_scripts' );
 
 
 
31
  }
32
 
33
- function enqueue_admin_styles() {
34
  wp_enqueue_style(MAILMUNCH_SLUG . '-admin-styles', plugins_url( 'css/admin.css', __FILE__ ), array(), MAILMUNCH_VER );
35
  }
36
 
37
- function enqueue_admin_scripts() {
38
  wp_enqueue_script(MAILMUNCH_SLUG . '-admin-script', plugins_url( 'js/admin.js', __FILE__ ), array( 'jquery' ), MAILMUNCH_VER );
39
  }
40
 
41
  // Adding MailMunch Asset Files (JS + CSS)
42
- function load_mailmunch_asset_code() {
43
  $mailmunch_data = unserialize(get_option("mailmunch_data"));
44
  if (!$mailmunch_data["script_src"]) return;
45
 
@@ -71,26 +88,31 @@
71
 
72
  if (function_exists('wp_footer')) {
73
  if (!$_POST['mailmunch_data']) {
74
- add_action( 'wp_footer', 'load_mailmunch_asset_code' );
75
  }
76
  }
77
  elseif (function_exists('wp_head')) {
78
  if (!$_POST['mailmunch_data']) {
79
- add_action( 'wp_head', 'load_mailmunch_asset_code' );
80
  }
81
  }
82
  }
83
 
84
- function add_post_containers($content) {
85
  if (is_single() || is_page()) {
86
- $content = insert_form_after_paragraph("<div class='mailmunch-forms-in-post-middle' style='display: none !important;'></div>", "middle", $content);
87
  $content = "<div class='mailmunch-forms-before-post' style='display: none !important;'></div>" . $content . "<div class='mailmunch-forms-after-post' style='display: none !important;'></div>";
88
  }
89
 
90
  return $content;
91
  }
92
 
93
- function insert_form_after_paragraph($insertion, $paragraph_id, $content) {
 
 
 
 
 
94
  $closing_p = '</p>';
95
  $paragraphs = explode($closing_p, $content);
96
  if ($paragraph_id == "middle") {
@@ -109,15 +131,16 @@
109
  return implode('', $paragraphs);
110
  }
111
 
112
- add_filter( 'the_content', 'add_post_containers' );
113
 
114
- function shortcode_form($atts) {
115
  return "<div class='mailmunch-forms-short-code mailmunch-forms-widget-".$atts['id']."' style='display: none !important;'></div>";
116
  }
117
 
118
- add_shortcode('mailmunch-form', 'shortcode_form');
119
 
120
  function mailmunch_setup() {
 
121
  $mailmunch_data = unserialize(get_option("mailmunch_data"));
122
  $mailmunch_data["site_url"] = home_url();
123
  $mailmunch_data["site_name"] = get_bloginfo();
@@ -137,29 +160,47 @@
137
 
138
  $mm = new MailmunchApi($_POST["email"], $_POST["password"], "http://".MAILMUNCH_URL);
139
  if ($mm->validPassword()) {
 
 
 
 
 
 
 
 
 
 
140
  update_option("mailmunch_user_email", $_POST["email"]);
141
  update_option("mailmunch_user_password", $_POST["password"]);
 
142
  }
143
 
144
  } else if ($post_action == "sign_up") {
145
 
146
- if (empty($_POST["email"]) || empty($_POST["password"])) {
147
- $invalid_email_password = true;
148
  } else {
149
- update_option("mailmunch_user_email", $_POST["email"]);
150
- update_option("mailmunch_user_password", $_POST["password"]);
151
- $mailmunch_data = unserialize(get_option("mailmunch_data"));
152
- $mailmunch_data["site_url"] = $_POST["site_url"];
153
- $mailmunch_data["site_name"] = $_POST["site_name"];
154
- update_option("mailmunch_data", serialize($mailmunch_data));
155
-
156
- $account_info = getEmailPassword();
157
  $mailmunch_email = $account_info['email'];
158
  $mailmunch_password = $account_info['password'];
159
 
160
  $mm = new MailmunchApi($mailmunch_email, $mailmunch_password, "http://".MAILMUNCH_URL);
161
- if ($mm->isNewUser()) {
162
- $mm->signUp();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
163
  } else {
164
  $user_exists = true;
165
  }
@@ -171,13 +212,13 @@
171
  $mailmunch_data["site_url"] = home_url();
172
  $mailmunch_data["site_name"] = get_bloginfo();
173
  update_option("mailmunch_data", serialize($mailmunch_data));
174
- delete_option("mailmunch_user_email", "");
175
- delete_option("mailmunch_user_password", "");
176
 
177
  } else if ($post_action == "delete_widget") {
178
 
179
  if ($_POST["site_id"] && $_POST["widget_id"]) {
180
- $account_info = getEmailPassword();
181
  $mailmunch_email = $account_info['email'];
182
  $mailmunch_password = $account_info['password'];
183
  $mm = new MailmunchApi($account_info['email'], $account_info["password"], "http://".MAILMUNCH_URL);
@@ -187,127 +228,57 @@
187
  }
188
  }
189
 
 
 
 
 
 
 
 
 
 
 
 
190
  // If we already have the user's email stored, let's create the API instance
191
  // If we don't have it yet, make sure NOT to phone home any user data
192
  if (get_option("mailmunch_user_email") != "") {
193
- $account_info = getEmailPassword();
194
  $mailmunch_email = $account_info['email'];
195
  $mailmunch_password = $account_info['password'];
196
 
197
  $mm = new MailmunchApi($mailmunch_email, $mailmunch_password, "http://".MAILMUNCH_URL);
198
- $valid_password = $mm->validPassword();
199
- }
200
-
201
- // If we don't already have the user's email, show the sign up / sign in form to the user
202
- if (get_option("mailmunch_user_email") == "" || !$valid_password || $invalid_email_password) {
203
- $current_user = wp_get_current_user();
204
- ?>
205
- <div id="sign-up-form" class="container<?php if (!$_POST || ($_POST["action"] != "sign_in" && $_POST["action"] != "unlink_account")) { ?> active<?php } ?>">
206
- <div class="page-header">
207
- <h1>Create Account</h1>
208
- </div>
209
-
210
- <?php add_thickbox(); ?>
211
-
212
- <div id="why-account" style="display:none;">
213
- <p>
214
- There are a few reasons we require you to create an account to use MailMunch:
215
- </p>
216
-
217
- <ol>
218
- <li>MailMunch is a not just a Wordpress plugin but also a standalone service. You can later use the same account on your other non-Wordpress websites too.</li>
219
- <li>Creating an account helps us better serve you, and provide you with better customer support.</li>
220
- <li>It gives us the ability to fix bugs and improve performance faster, and without you having to update the plugin yourself.</li>
221
- </ol>
222
-
223
- <p><strong>We have a strict no-spam policy. We will never spam you or share your information with any third-party.</strong> If you have any questions, please <a href="http://www.mailmunch.co/contact" target="_blank">contact us</a>.</p>
224
- </div>
225
-
226
- <p>We will now create your account on MailMunch (<a href="#TB_inline?width=500&height=250&inlineId=why-account" title="Why do I need an account to use the MailMunch plugin?" class="thickbox">Why?</a>). Make sure the following information is correct:</p>
227
-
228
- <?php if ($user_exists) { ?>
229
- <div id="invalid-alert" class="alert alert-danger" role="alert">Account with this email already exists. Please sign in using your password.</div>
230
- <?php } else if ($invalid_email_password) { ?>
231
- <div id="invalid-alert" class="alert alert-danger" role="alert">Invalid email or password. Please enter valid information below.</div>
232
- <?php } ?>
233
-
234
- <div class="form-container">
235
- <form action="" method="POST">
236
- <input type="hidden" name="action" value="sign_up" />
237
-
238
- <div class="form-group">
239
- <label>Wordpress Name</label>
240
- <input type="text" placeholder="Site Name" name="site_name" value="<?php echo $mailmunch_data["site_name"] ?>" class="form-control">
241
- </div>
242
-
243
- <div class="form-group">
244
- <label>Wordpress URL</label>
245
- <input type="text" placeholder="Site URL" name="site_url" value="<?php echo $mailmunch_data["site_url"] ?>" class="form-control">
246
- </div>
247
-
248
- <div class="form-group">
249
- <label>Email Address</label>
250
- <input type="email" placeholder="Email Address" name="email" value="<?php echo $current_user->user_email ?>" class="form-control">
251
- </div>
252
-
253
- <div class="form-group">
254
- <label>Password</label>
255
- <input type="password" placeholder="Password" name="password" class="form-control">
256
- </div>
257
-
258
- <div class="form-group">
259
- <input type="submit" value="Sign Up &raquo;" class="btn btn-success btn-lg" />
260
- </div>
261
- </form>
262
- </div>
263
 
264
- <p>Already have an account? <a id="show-sign-in" onclick="showSignInForm();">Sign In</a></p>
265
- </div>
266
-
267
- <div id="sign-in-form" class="container<?php if ($_POST && ($_POST["action"] == "sign_in" || $_POST["action"] == "unlink_account")) { ?> active<?php } ?>">
268
- <div class="page-header">
269
- <h1>Sign In</h1>
270
- </div>
271
-
272
- <p>Sign in using your email and password below.</p>
273
-
274
- <?php if ($_POST && $_POST["action"] == "sign_in") { ?>
275
- <div id="invalid-alert" class="alert alert-danger" role="alert">Invalid Email or Password. Please try again.</div>
276
- <?php } ?>
277
-
278
- <div class="form-container">
279
- <form action="" method="POST">
280
- <input type="hidden" name="action" value="sign_in" />
281
 
282
- <div class="form-group">
283
- <label>Email Address</label>
284
- <input type="email" placeholder="Email Address" name="email" class="form-control" value="<?php echo $_POST["email"] ?>" />
285
- </div>
286
- <div class="form-group">
287
- <label>Password</label>
288
- <input type="password" placeholder="Password" name="password" class="form-control" />
289
- </div>
 
 
 
290
 
291
- <div class="form-group">
292
- <input type="submit" value="Sign In &raquo;" class="btn btn-success btn-lg" />
293
- </div>
294
- </form>
295
- </div>
296
 
297
- <p>Forgot your password? <a href="http://<?php echo MAILMUNCH_URL; ?>/users/password/new" target="_blank">Click here</a> to retrieve it.</p>
298
- <p>Don't have an account? <a id="show-sign-up" onclick="showSignUpForm();">Sign Up</a></p>
299
- </div>
300
- <?php
301
 
302
- // Do NOT move beyond this until the user has granted permissions to sign up or signed in
303
- return;
 
 
 
304
  }
305
 
306
- $sites = createAndGetSites($mm);
307
-
308
  if ($mailmunch_data["site_id"]) {
309
  // If there's a site already chosen, we need to get and save it's script_src in WordPress
310
- $site = getSite($sites, $mailmunch_data["site_id"]);
311
 
312
  if ($site) {
313
  $mailmunch_data = array_merge(unserialize(get_option('mailmunch_data')), array("script_src" => $site->javascript_url));
@@ -325,7 +296,7 @@
325
  if (!$mailmunch_data["site_id"]) {
326
  // If there's NO chosen site yet
327
 
328
- if (sizeof($sites) == 1 && $sites[0]->name == get_bloginfo()) {
329
  // If this mailmunch account only has 1 site and its name matches this WordPress blogs
330
 
331
  $site = $sites[0];
@@ -366,9 +337,106 @@
366
  }
367
 
368
  $request = $mm->getWidgetsHtml($mailmunch_data["site_id"]);
369
- $widgets = $request->body;
370
  $widgets = str_replace("{{EMAIL}}", $mailmunch_email, $widgets);
371
  $widgets = str_replace("{{PASSWORD}}", $mailmunch_password, $widgets);
372
  echo $widgets;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
373
  }
374
  ?>
3
  Plugin Name: MailMunch
4
  Plugin URI: http://www.mailmunch.co
5
  Description: Collect email addresses from website visitors and grow your subscribers with our attention grabbing optin-forms, entry/exit intent technology, and other effective lead-generation forms.
6
+ Version: 1.3.9
7
  Author: MailMunch
8
  Author URI: http://www.mailmunch.co
9
  License: GPL2
11
 
12
  require_once( plugin_dir_path( __FILE__ ) . 'inc/mailmunchapi.php' );
13
  require_once( plugin_dir_path( __FILE__ ) . 'inc/common.php' );
14
+ require_once( plugin_dir_path( __FILE__ ) . 'inc/sidebar_widget.php' );
15
 
16
  define( 'MAILMUNCH_SLUG', "mailmunch");
17
+ define( 'MAILMUNCH_VER', "1.3.9");
18
  define( 'MAILMUNCH_URL', "www.mailmunch.co");
19
 
20
+ // Create unique WordPress instance ID
21
+ if (get_option("mailmunch_wordpress_instance_id") == "") {
22
+ update_option("mailmunch_wordpress_instance_id", uniqid());
23
+ }
24
+
25
  // Adding Admin Menu
26
+ add_action( 'admin_menu', 'mailmunch_register_page' );
27
 
28
+ function mailmunch_register_page(){
29
+ add_options_page('MailMunch', 'MailMunch', 'manage_options', MAILMUNCH_SLUG, 'mailmunch_setup');
30
  $menu_page = add_menu_page( 'MailMunch Settings', 'MailMunch', 'manage_options', MAILMUNCH_SLUG, 'mailmunch_setup', plugins_url( 'img/icon.png', __FILE__ ), 102.786 );
31
  // If successful, load admin assets only on that page.
32
+ if ($menu_page) add_action('load-' . $menu_page, 'mailmunch_load_plugin_assets');
33
+ }
34
+
35
+ function mailmunch_plugin_settings_link($links)
36
+ {
37
+ $settings_link = '<a href="options-general.php?page='.MAILMUNCH_SLUG.'">Settings</a>';
38
+ array_unshift($links, $settings_link);
39
+ return $links;
40
  }
41
 
42
+ $plugin = plugin_basename(__FILE__);
43
+ add_filter('plugin_action_links_'.$plugin, 'mailmunch_plugin_settings_link');
44
+
45
+ function mailmunch_load_plugin_assets() {
46
+ add_action( 'admin_enqueue_scripts', 'mailmunch_enqueue_admin_styles' );
47
+ add_action( 'admin_enqueue_scripts', 'mailmunch_enqueue_admin_scripts' );
48
  }
49
 
50
+ function mailmunch_enqueue_admin_styles() {
51
  wp_enqueue_style(MAILMUNCH_SLUG . '-admin-styles', plugins_url( 'css/admin.css', __FILE__ ), array(), MAILMUNCH_VER );
52
  }
53
 
54
+ function mailmunch_enqueue_admin_scripts() {
55
  wp_enqueue_script(MAILMUNCH_SLUG . '-admin-script', plugins_url( 'js/admin.js', __FILE__ ), array( 'jquery' ), MAILMUNCH_VER );
56
  }
57
 
58
  // Adding MailMunch Asset Files (JS + CSS)
59
+ function mailmunch_load_asset_code() {
60
  $mailmunch_data = unserialize(get_option("mailmunch_data"));
61
  if (!$mailmunch_data["script_src"]) return;
62
 
88
 
89
  if (function_exists('wp_footer')) {
90
  if (!$_POST['mailmunch_data']) {
91
+ add_action( 'wp_footer', 'mailmunch_load_asset_code' );
92
  }
93
  }
94
  elseif (function_exists('wp_head')) {
95
  if (!$_POST['mailmunch_data']) {
96
+ add_action( 'wp_head', 'mailmunch_load_asset_code' );
97
  }
98
  }
99
  }
100
 
101
+ function mailmunch_add_post_containers($content) {
102
  if (is_single() || is_page()) {
103
+ $content = mailmunch_insert_form_after_paragraph("<div class='mailmunch-forms-in-post-middle' style='display: none !important;'></div>", "middle", $content);
104
  $content = "<div class='mailmunch-forms-before-post' style='display: none !important;'></div>" . $content . "<div class='mailmunch-forms-after-post' style='display: none !important;'></div>";
105
  }
106
 
107
  return $content;
108
  }
109
 
110
+ function mailmunch_register_sidebar_widget() {
111
+ register_widget( 'Mailmunch_Sidebar_Widget' );
112
+ }
113
+ add_action( 'widgets_init', 'mailmunch_register_sidebar_widget' );
114
+
115
+ function mailmunch_insert_form_after_paragraph($insertion, $paragraph_id, $content) {
116
  $closing_p = '</p>';
117
  $paragraphs = explode($closing_p, $content);
118
  if ($paragraph_id == "middle") {
131
  return implode('', $paragraphs);
132
  }
133
 
134
+ add_filter( 'the_content', 'mailmunch_add_post_containers' );
135
 
136
+ function mailmunch_shortcode_form($atts) {
137
  return "<div class='mailmunch-forms-short-code mailmunch-forms-widget-".$atts['id']."' style='display: none !important;'></div>";
138
  }
139
 
140
+ add_shortcode('mailmunch-form', 'mailmunch_shortcode_form');
141
 
142
  function mailmunch_setup() {
143
+ $mm_helpers = new MailmunchHelpers();
144
  $mailmunch_data = unserialize(get_option("mailmunch_data"));
145
  $mailmunch_data["site_url"] = home_url();
146
  $mailmunch_data["site_name"] = get_bloginfo();
160
 
161
  $mm = new MailmunchApi($_POST["email"], $_POST["password"], "http://".MAILMUNCH_URL);
162
  if ($mm->validPassword()) {
163
+ if (get_option("mailmunch_guest_user")) {
164
+ // User exists and credentials are correct
165
+ // Let's move optin forms from guest user to real user
166
+ $account_info = $mm_helpers->getEmailPassword();
167
+ $mailmunch_email = $account_info['email'];
168
+ $mailmunch_password = $account_info['password'];
169
+ $mm = new MailmunchApi($mailmunch_email, $mailmunch_password, "http://".MAILMUNCH_URL);
170
+ $result = $mm->importWidgets($_POST["email"], $_POST["password"]);
171
+ }
172
+
173
  update_option("mailmunch_user_email", $_POST["email"]);
174
  update_option("mailmunch_user_password", $_POST["password"]);
175
+ delete_option("mailmunch_guest_user");
176
  }
177
 
178
  } else if ($post_action == "sign_up") {
179
 
180
+ if (empty($_POST["email"])) {
181
+ $invalid_email = true;
182
  } else {
183
+ $account_info = $mm_helpers->getEmailPassword();
 
 
 
 
 
 
 
184
  $mailmunch_email = $account_info['email'];
185
  $mailmunch_password = $account_info['password'];
186
 
187
  $mm = new MailmunchApi($mailmunch_email, $mailmunch_password, "http://".MAILMUNCH_URL);
188
+ if ($mm->isNewUser($_POST['email'])) {
189
+ $update_result = $mm->updateGuest($_POST['email']);
190
+ $result = json_decode($update_result['body']);
191
+ update_option("mailmunch_user_email", $result->email);
192
+ if (!$result->guest_user) { delete_option("mailmunch_guest_user"); }
193
+ $mailmunch_email = $result->email;
194
+
195
+ // We have update the guest with real email address, let's create a site now
196
+ $mm = new MailmunchApi($mailmunch_email, $mailmunch_password, "http://".MAILMUNCH_URL);
197
+
198
+ $update_result = $mm->updateSite($mailmunch_data["site_name"], $mailmunch_data["site_url"]);
199
+ $result = json_decode($update_result['body']);
200
+ $mailmunch_data = unserialize(get_option("mailmunch_data"));
201
+ $mailmunch_data["site_url"] = $result->domain;
202
+ $mailmunch_data["site_name"] = $result->name;
203
+ update_option("mailmunch_data", serialize($mailmunch_data));
204
  } else {
205
  $user_exists = true;
206
  }
212
  $mailmunch_data["site_url"] = home_url();
213
  $mailmunch_data["site_name"] = get_bloginfo();
214
  update_option("mailmunch_data", serialize($mailmunch_data));
215
+ delete_option("mailmunch_user_email");
216
+ delete_option("mailmunch_user_password");
217
 
218
  } else if ($post_action == "delete_widget") {
219
 
220
  if ($_POST["site_id"] && $_POST["widget_id"]) {
221
+ $account_info = $mm_helpers->getEmailPassword();
222
  $mailmunch_email = $account_info['email'];
223
  $mailmunch_password = $account_info['password'];
224
  $mm = new MailmunchApi($account_info['email'], $account_info["password"], "http://".MAILMUNCH_URL);
228
  }
229
  }
230
 
231
+ // If the user does not exists, create a GUEST user
232
+ if (get_option("mailmunch_user_email") == "") {
233
+ $mailmunch_email = "guest_".uniqid()."@mailmunch.co";
234
+ $mailmunch_password = uniqid();
235
+ $mm = new MailmunchApi($mailmunch_email, $mailmunch_password, "http://".MAILMUNCH_URL);
236
+ $mm->createGuestUser();
237
+ update_option("mailmunch_user_email", $mailmunch_email);
238
+ update_option("mailmunch_user_password", $mailmunch_password);
239
+ update_option("mailmunch_guest_user", true);
240
+ }
241
+
242
  // If we already have the user's email stored, let's create the API instance
243
  // If we don't have it yet, make sure NOT to phone home any user data
244
  if (get_option("mailmunch_user_email") != "") {
245
+ $account_info = $mm_helpers->getEmailPassword();
246
  $mailmunch_email = $account_info['email'];
247
  $mailmunch_password = $account_info['password'];
248
 
249
  $mm = new MailmunchApi($mailmunch_email, $mailmunch_password, "http://".MAILMUNCH_URL);
250
+ $pass_check = $mm->validPassword();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
251
 
252
+ if( is_wp_error( $pass_check ) ) {
253
+ echo $pass_check->get_error_message();
254
+ return;
255
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
256
 
257
+ if (!$pass_check) {
258
+ // Invalid user, create a GUEST user
259
+ $mailmunch_email = "guest_".uniqid()."@mailmunch.co";
260
+ $mailmunch_password = uniqid();
261
+ $mm = new MailmunchApi($mailmunch_email, $mailmunch_password, "http://".MAILMUNCH_URL);
262
+ $mm->createGuestUser();
263
+ update_option("mailmunch_user_email", $mailmunch_email);
264
+ update_option("mailmunch_user_password", $mailmunch_password);
265
+ update_option("mailmunch_guest_user", true);
266
+ }
267
+ }
268
 
269
+ $mailmunch_guest_user = get_option("mailmunch_guest_user");
 
 
 
 
270
 
 
 
 
 
271
 
272
+ if ($mailmunch_guest_user) {
273
+ // This is a Guest USER. Do not collect any user data.
274
+ $sites = $mm_helpers->createAndGetGuestSites($mm);
275
+ } else {
276
+ $sites = $mm_helpers->createAndGetSites($mm);
277
  }
278
 
 
 
279
  if ($mailmunch_data["site_id"]) {
280
  // If there's a site already chosen, we need to get and save it's script_src in WordPress
281
+ $site = $mm_helpers->getSite($sites, $mailmunch_data["site_id"]);
282
 
283
  if ($site) {
284
  $mailmunch_data = array_merge(unserialize(get_option('mailmunch_data')), array("script_src" => $site->javascript_url));
296
  if (!$mailmunch_data["site_id"]) {
297
  // If there's NO chosen site yet
298
 
299
+ if (sizeof($sites) == 1 && ($sites[0]->name == get_bloginfo() || $sites[0]->name == "WordPress")) {
300
  // If this mailmunch account only has 1 site and its name matches this WordPress blogs
301
 
302
  $site = $sites[0];
337
  }
338
 
339
  $request = $mm->getWidgetsHtml($mailmunch_data["site_id"]);
340
+ $widgets = $request['body'];
341
  $widgets = str_replace("{{EMAIL}}", $mailmunch_email, $widgets);
342
  $widgets = str_replace("{{PASSWORD}}", $mailmunch_password, $widgets);
343
  echo $widgets;
344
+
345
+ if ($mailmunch_guest_user) {
346
+ $current_user = wp_get_current_user();
347
+ ?>
348
+
349
+ <?php add_thickbox(); ?>
350
+
351
+ <a id="signup-box-btn" href="#TB_inline?width=450&height=450&inlineId=signup-signin-box" title="Create Account" class="thickbox" style="display: none;">Sign Up</a>
352
+
353
+ <div id="signup-signin-box" style="display:none;">
354
+ <div id="sign-up-form" class="<?php if (!$_POST || ($_POST["action"] != "sign_in" && $_POST["action"] != "unlink_account")) { ?> active<?php } ?>">
355
+ <div class="form-container">
356
+ <p style="margin-bottom: 0px;">To activate your optin forms, we will now create your account on MailMunch (<a onclick="showWhyAccount();" id="why-account-btn">Why?</a>).</p>
357
+
358
+ <div id="why-account" class="alert alert-warning" style="display: none;">
359
+ <h4>Why do I need a MailMunch account?</h4>
360
+
361
+ <p>
362
+ MailMunch is a not just a WordPress plugin but a standalone service. An account is required to identify your WordPress and serve your optin forms.
363
+ </p>
364
+ </div>
365
+
366
+ <?php if ($user_exists) { ?>
367
+ <div id="invalid-alert" class="alert alert-danger" role="alert">Account with this email already exists. Please sign in using your password.</div>
368
+ <?php } else if ($invalid_email) { ?>
369
+ <div id="invalid-alert" class="alert alert-danger" role="alert">Invalid email. Please enter a valid email below.</div>
370
+ <?php } ?>
371
+
372
+ <form action="" method="POST">
373
+ <input type="hidden" name="action" value="sign_up" />
374
+
375
+ <div class="form-group">
376
+ <label>Wordpress Name</label>
377
+ <input type="text" placeholder="Site Name" name="site_name" value="<?php echo $mailmunch_data["site_name"] ?>" class="form-control">
378
+ </div>
379
+
380
+ <div class="form-group">
381
+ <label>Wordpress URL</label>
382
+ <input type="text" placeholder="Site URL" name="site_url" value="<?php echo $mailmunch_data["site_url"] ?>" class="form-control">
383
+ </div>
384
+
385
+ <div class="form-group">
386
+ <label>Email Address</label>
387
+ <input type="email" placeholder="Email Address" name="email" value="<?php echo $current_user->user_email ?>" class="form-control">
388
+ </div>
389
+
390
+ <div class="form-group">
391
+ <input type="submit" value="Sign Up &raquo;" class="btn btn-success btn-lg" />
392
+ </div>
393
+ </form>
394
+ </div>
395
+
396
+ <p>Already have an account? <a id="show-sign-in" onclick="showSignInForm();">Sign In</a></p>
397
+ </div>
398
+
399
+ <div id="sign-in-form" class="<?php if ($_POST && ($_POST["action"] == "sign_in" || $_POST["action"] == "unlink_account")) { ?> active<?php } ?>">
400
+ <p>Sign in using your email and password below.</p>
401
+
402
+ <?php if ($_POST && $_POST["action"] == "sign_in") { ?>
403
+ <div id="invalid-alert" class="alert alert-danger" role="alert">Invalid Email or Password. Please try again.</div>
404
+ <?php } ?>
405
+
406
+ <div class="form-container">
407
+ <form action="" method="POST">
408
+ <input type="hidden" name="action" value="sign_in" />
409
+
410
+ <div class="form-group">
411
+ <label>Email Address</label>
412
+ <input type="email" placeholder="Email Address" name="email" class="form-control" value="<?php echo $_POST["email"] ?>" />
413
+ </div>
414
+ <div class="form-group">
415
+ <label>Password</label>
416
+ <input type="password" placeholder="Password" name="password" class="form-control" />
417
+ </div>
418
+
419
+ <div class="form-group">
420
+ <input type="submit" value="Sign In &raquo;" class="btn btn-success btn-lg" />
421
+ </div>
422
+ </form>
423
+ </div>
424
+
425
+ <p>Forgot your password? <a href="http://<?php echo MAILMUNCH_URL; ?>/users/password/new" target="_blank">Click here</a> to retrieve it.</p>
426
+ <p>Don't have an account? <a id="show-sign-up" onclick="showSignUpForm();">Sign Up</a></p>
427
+ </div>
428
+ </div>
429
+
430
+ <?php
431
+ if ($_POST) {
432
+ ?>
433
+ <script>
434
+ jQuery(window).load(function() {
435
+ showSignupBox();
436
+ });
437
+ </script>
438
+ <?php
439
+ }
440
+ }
441
  }
442
  ?>
readme.txt CHANGED
@@ -1,9 +1,9 @@
1
  === MailMunch - Increase your Email Subscribers by over 500% ===
2
  Contributors: mailmunch
3
- Tags: widget, MailChimp, newsletter, newsletters, MailChimp plugin, Aweber,subscribe, popup, exit popup, exit intent, growth, subscribers, subscription, hellobar, email, posts, sharing, links, popover, analytics , newsletter, automatic , mail, lightbox, analytics, newsletter, getresponse, collect email, optin, optin forms, double optin, popover, optin monster, popup domination, sumome, list builder, mailchimp, popupdomination, optin revolution
4
  Requires at least: 3.0.1
5
  Tested up to: 4.0
6
- Stable tag: 1.3.4
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
@@ -131,6 +131,12 @@ Why people use Aweber
131
 
132
  == Changelog ==
133
 
 
 
 
 
 
 
134
  = 1.3.4 =
135
  * Fixed plugin activation bug
136
 
1
  === MailMunch - Increase your Email Subscribers by over 500% ===
2
  Contributors: mailmunch
3
+ Tags: widget, MailChimp, newsletter, newsletters, MailChimp plugin, Aweber,subscribe, popup, exit popup, exit intent, growth, subscribers, subscription, hellobar, email, posts, sharing, links, popover, analytics , newsletter, automatic , mail, lightbox, analytics, newsletter, getresponse, collect email, optin, optin forms, double optin, popover, list builder, mailchimp
4
  Requires at least: 3.0.1
5
  Tested up to: 4.0
6
+ Stable tag: 1.3.9
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
131
 
132
  == Changelog ==
133
 
134
+ = 1.3.6 =
135
+ * Fatal activation bug fix
136
+
137
+ = 1.3.5 =
138
+ * Improved sign up flow
139
+
140
  = 1.3.4 =
141
  * Fixed plugin activation bug
142
 
uninstall.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( !defined( 'WP_UNINSTALL_PLUGIN' ) )
3
+ exit();
4
+
5
+ delete_option("mailmunch_data");
6
+ delete_option("mailmunch_user_email");
7
+ delete_option("mailmunch_user_password");
8
+ delete_option("mailmunch_guest_user");
9
+ ?>