httpi 1.1.1 → 2.0.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,6 +4,19 @@ require "httpi/adapter"
4
4
  describe HTTPI::Adapter do
5
5
  let(:adapter) { HTTPI::Adapter }
6
6
 
7
+ describe ".register" do
8
+ it "registers a new adapter" do
9
+ name = :custom
10
+ klass = Class.new
11
+ deps = %w(some_dependency)
12
+
13
+ adapter.register(name, klass, deps)
14
+
15
+ HTTPI::Adapter::ADAPTERS[:custom].should include(:class => klass, :deps => deps)
16
+ HTTPI::Adapter::ADAPTER_CLASS_MAP[klass].should be(name)
17
+ end
18
+ end
19
+
7
20
  describe ".use" do
8
21
  around do |example|
9
22
  adapter.use = nil
@@ -35,13 +48,13 @@ describe HTTPI::Adapter do
35
48
  describe ".load" do
36
49
  context "called with a valid adapter" do
37
50
  it "returns the adapter's name and class" do
38
- adapter.load(:curb).should == [:curb, HTTPI::Adapter::Curb]
51
+ adapter.load(:net_http).should == HTTPI::Adapter::NetHTTP
39
52
  end
40
53
  end
41
54
 
42
55
  context "called with nil" do
43
56
  it "returns the default adapter's name and class" do
44
- adapter.load(nil).should == [:httpclient, HTTPI::Adapter::HTTPClient]
57
+ adapter.load(nil).should == HTTPI::Adapter::HTTPClient
45
58
  end
46
59
  end
47
60
 
@@ -53,7 +53,9 @@ describe HTTPI::Auth::SSL do
53
53
  end
54
54
 
55
55
  it "raises an ArgumentError if the given mode is not supported" do
56
- expect { ssl.verify_mode = :invalid }.to raise_error(ArgumentError)
56
+ expect { ssl.verify_mode = :invalid }.
57
+ to raise_error(ArgumentError, "Invalid SSL verify mode :invalid\n" +
58
+ "Please specify one of [:none, :peer, :fail_if_no_peer_cert, :client_once]")
57
59
  end
58
60
  end
59
61
 
@@ -132,6 +134,37 @@ describe HTTPI::Auth::SSL do
132
134
  end
133
135
  end
134
136
 
137
+ describe "SSL_VERSIONS" do
138
+ it "contains the supported SSL versions" do
139
+ HTTPI::Auth::SSL::SSL_VERSIONS.should == [:TLSv1, :SSLv2, :SSLv3]
140
+ end
141
+ end
142
+
143
+ describe "#ssl_version" do
144
+ subject { HTTPI::Auth::SSL.new }
145
+
146
+ it 'returns the SSL version for :TLSv1' do
147
+ subject.ssl_version = :TLSv1
148
+ subject.ssl_version.should eq(:TLSv1)
149
+ end
150
+
151
+ it 'returns the SSL version for :SSLv2' do
152
+ subject.ssl_version = :SSLv2
153
+ subject.ssl_version.should eq(:SSLv2)
154
+ end
155
+
156
+ it 'returns the SSL version for :SSLv3' do
157
+ subject.ssl_version = :SSLv3
158
+ subject.ssl_version.should eq(:SSLv3)
159
+ end
160
+
161
+ it 'raises ArgumentError if the version is unsupported' do
162
+ expect { ssl.ssl_version = :ssl_fail }.
163
+ to raise_error(ArgumentError, "Invalid SSL version :ssl_fail\n" +
164
+ "Please specify one of [:TLSv1, :SSLv2, :SSLv3]")
165
+ end
166
+ end
167
+
135
168
  def ssl
136
169
  ssl = HTTPI::Auth::SSL.new
137
170
  ssl.cert_key_file = "spec/fixtures/client_key.pem"
@@ -3,243 +3,208 @@ require "httpi"
3
3
 
4
4
  describe HTTPI do
5
5
  let(:client) { HTTPI }
6
- let(:httpclient) { HTTPI::Adapter.load(:httpclient)[1] }
7
- let(:curb) { HTTPI::Adapter.load(:curb)[1] }
6
+ let(:httpclient) { HTTPI::Adapter.load(:httpclient) }
7
+ let(:net_http) { HTTPI::Adapter.load(:net_http) }
8
+
9
+ describe ".adapter=" do
10
+ it "sets the default adapter to use" do
11
+ HTTPI::Adapter.expects(:use=).with(:net_http)
12
+ HTTPI.adapter = :net_http
13
+ end
14
+ end
8
15
 
9
16
  describe ".get(request)" do
10
17
  it "executes a GET request using the default adapter" do
11
- request = HTTPI::Request.new
12
- httpclient.any_instance.expects(:get).with(request)
18
+ request = HTTPI::Request.new("http://example.com")
19
+ httpclient.any_instance.expects(:request).with(:get)
13
20
 
14
- client.get request
21
+ client.get(request)
15
22
  end
16
23
  end
17
24
 
18
25
  describe ".get(request, adapter)" do
19
26
  it "executes a GET request using the given adapter" do
20
- request = HTTPI::Request.new
21
- curb.any_instance.expects(:get).with(request)
27
+ request = HTTPI::Request.new("http://example.com")
28
+ net_http.any_instance.expects(:request).with(:get)
22
29
 
23
- client.get request, :curb
30
+ client.get(request, :net_http)
24
31
  end
25
32
  end
26
33
 
27
34
  describe ".get(url)" do
28
35
  it "executes a GET request using the default adapter" do
29
- HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
30
- httpclient.any_instance.expects(:get).with(instance_of(HTTPI::Request))
31
-
32
- client.get "http://example.com"
36
+ httpclient.any_instance.expects(:request).with(:get)
37
+ client.get("http://example.com")
33
38
  end
34
39
  end
35
40
 
36
41
  describe ".get(url, adapter)" do
37
42
  it "executes a GET request using the given adapter" do
38
- HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
39
- curb.any_instance.expects(:get).with(instance_of(HTTPI::Request))
40
-
41
- client.get "http://example.com", :curb
43
+ net_http.any_instance.expects(:request).with(:get)
44
+ client.get("http://example.com", :net_http)
42
45
  end
43
46
  end
44
47
 
45
48
  describe ".post(request)" do
46
49
  it "executes a POST request using the default adapter" do
47
- request = HTTPI::Request.new
48
- httpclient.any_instance.expects(:post).with(request)
50
+ request = HTTPI::Request.new("http://example.com")
51
+ httpclient.any_instance.expects(:request).with(:post)
49
52
 
50
- client.post request
53
+ client.post(request)
51
54
  end
52
55
  end
53
56
 
54
57
  describe ".post(request, adapter)" do
55
58
  it "executes a POST request using the given adapter" do
56
- request = HTTPI::Request.new
57
- curb.any_instance.expects(:post).with(request)
59
+ request = HTTPI::Request.new("http://example.com")
60
+ net_http.any_instance.expects(:request).with(:post, anything)
58
61
 
59
- client.post request, :curb
62
+ client.post(request, :net_http)
60
63
  end
61
64
  end
62
65
 
63
66
  describe ".post(url, body)" do
64
67
  it "executes a POST request using the default adapter" do
65
- HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
66
- HTTPI::Request.any_instance.expects(:body=).with("<some>xml</some>")
67
- httpclient.any_instance.expects(:post).with(instance_of(HTTPI::Request))
68
-
69
- client.post "http://example.com", "<some>xml</some>"
68
+ httpclient.any_instance.expects(:request).with(:post)
69
+ client.post("http://example.com", "<some>xml</some>")
70
70
  end
71
71
  end
72
72
 
73
73
  describe ".post(url, body, adapter)" do
74
74
  it "executes a POST request using the given adapter" do
75
- HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
76
- HTTPI::Request.any_instance.expects(:body=).with("<some>xml</some>")
77
- curb.any_instance.expects(:post).with(instance_of(HTTPI::Request))
78
-
79
- client.post "http://example.com", "<some>xml</some>", :curb
75
+ net_http.any_instance.expects(:request).with(:post)
76
+ client.post("http://example.com", "<some>xml</some>", :net_http)
80
77
  end
81
78
  end
82
79
 
83
80
  describe ".head(request)" do
84
81
  it "executes a HEAD request using the default adapter" do
85
- request = HTTPI::Request.new
86
- httpclient.any_instance.expects(:head).with(request)
82
+ request = HTTPI::Request.new("http://example.com")
83
+ httpclient.any_instance.expects(:request).with(:head, anything)
87
84
 
88
- client.head request
85
+ client.head(request)
89
86
  end
90
87
  end
91
88
 
92
89
  describe ".head(request, adapter)" do
93
90
  it "executes a HEAD request using the given adapter" do
94
- request = HTTPI::Request.new
95
- curb.any_instance.expects(:head).with(request)
91
+ request = HTTPI::Request.new("http://example.com")
92
+ net_http.any_instance.expects(:request).with(:head, anything)
96
93
 
97
- client.head request, :curb
94
+ client.head(request, :net_http)
98
95
  end
99
96
  end
100
97
 
101
98
  describe ".head(url)" do
102
99
  it "executes a HEAD request using the default adapter" do
103
- HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
104
- httpclient.any_instance.expects(:head).with(instance_of(HTTPI::Request))
105
-
106
- client.head "http://example.com"
100
+ httpclient.any_instance.expects(:request).with(:head)
101
+ client.head("http://example.com")
107
102
  end
108
103
  end
109
104
 
110
105
  describe ".head(url, adapter)" do
111
106
  it "executes a HEAD request using the given adapter" do
112
- HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
113
- curb.any_instance.expects(:head).with(instance_of(HTTPI::Request))
114
-
115
- client.head "http://example.com", :curb
107
+ net_http.any_instance.expects(:request).with(:head)
108
+ client.head("http://example.com", :net_http)
116
109
  end
117
110
  end
118
111
 
119
112
  describe ".put(request)" do
120
113
  it "executes a PUT request using the default adapter" do
121
- request = HTTPI::Request.new
122
- httpclient.any_instance.expects(:put).with(request)
114
+ request = HTTPI::Request.new("http://example.com")
115
+ httpclient.any_instance.expects(:request).with(:put, anything)
123
116
 
124
- client.put request
117
+ client.put(request)
125
118
  end
126
119
  end
127
120
 
128
121
  describe ".put(request, adapter)" do
129
122
  it "executes a PUT request using the given adapter" do
130
- request = HTTPI::Request.new
131
- curb.any_instance.expects(:put).with(request)
123
+ request = HTTPI::Request.new("http://example.com")
124
+ net_http.any_instance.expects(:request).with(:put, anything)
132
125
 
133
- client.put request, :curb
126
+ client.put(request, :net_http)
134
127
  end
135
128
  end
136
129
 
137
130
  describe ".put(url, body)" do
138
131
  it "executes a PUT request using the default adapter" do
139
- HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
140
- HTTPI::Request.any_instance.expects(:body=).with("<some>xml</some>")
141
- httpclient.any_instance.expects(:put).with(instance_of(HTTPI::Request))
142
-
143
- client.put "http://example.com", "<some>xml</some>"
132
+ httpclient.any_instance.expects(:request).with(:put)
133
+ client.put("http://example.com", "<some>xml</some>")
144
134
  end
145
135
  end
146
136
 
147
137
  describe ".put(url, body, adapter)" do
148
138
  it "executes a PUT request using the given adapter" do
149
- HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
150
- HTTPI::Request.any_instance.expects(:body=).with("<some>xml</some>")
151
- curb.any_instance.expects(:put).with(instance_of(HTTPI::Request))
152
-
153
- client.put "http://example.com", "<some>xml</some>", :curb
139
+ net_http.any_instance.expects(:request).with(:put)
140
+ client.put("http://example.com", "<some>xml</some>", :net_http)
154
141
  end
155
142
  end
156
143
 
157
144
  describe ".delete(request)" do
158
145
  it "executes a DELETE request using the default adapter" do
159
- request = HTTPI::Request.new
160
- httpclient.any_instance.expects(:delete).with(request)
146
+ request = HTTPI::Request.new("http://example.com")
147
+ httpclient.any_instance.expects(:request).with(:delete, anything)
161
148
 
162
- client.delete request
149
+ client.delete(request)
163
150
  end
164
151
  end
165
152
 
166
153
  describe ".delete(request, adapter)" do
167
154
  it "executes a DELETE request using the given adapter" do
168
- request = HTTPI::Request.new
169
- curb.any_instance.expects(:delete).with(request)
155
+ request = HTTPI::Request.new("http://example.com")
156
+ net_http.any_instance.expects(:request).with(:delete, anything)
170
157
 
171
- client.delete request, :curb
158
+ client.delete(request, :net_http)
172
159
  end
173
160
  end
174
161
 
175
162
  describe ".delete(url)" do
176
163
  it "executes a DELETE request using the default adapter" do
177
- HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
178
- httpclient.any_instance.expects(:delete).with(instance_of(HTTPI::Request))
179
-
180
- client.delete "http://example.com"
164
+ httpclient.any_instance.expects(:request).with(:delete)
165
+ client.delete("http://example.com")
181
166
  end
182
167
  end
183
168
 
184
169
  describe ".delete(url, adapter)" do
185
170
  it "executes a DELETE request using the given adapter" do
186
- HTTPI::Request.any_instance.expects(:url=).with("http://example.com")
187
- curb.any_instance.expects(:delete).with(instance_of(HTTPI::Request))
188
-
189
- client.delete "http://example.com", :curb
171
+ net_http.any_instance.expects(:request).with(:delete)
172
+ client.delete("http://example.com", :net_http)
190
173
  end
191
174
  end
192
175
 
193
176
  describe ".request" do
194
- it "raises an ArgumentError in case of an invalid request method" do
195
- expect { client.request :invalid, HTTPI::Request.new }.to raise_error(ArgumentError)
196
- end
197
- end
177
+ it "allows custom HTTP methods" do
178
+ request = HTTPI::Request.new("http://example.com")
179
+ httpclient.any_instance.expects(:request).with(:custom)
198
180
 
199
- describe ".adapter=" do
200
- it "sets the default adapter to use" do
201
- HTTPI::Adapter.expects(:use=).with(:net_http)
202
- HTTPI.adapter = :net_http
181
+ client.request(:custom, request, :httpclient)
203
182
  end
204
183
  end
205
184
 
206
185
  HTTPI::REQUEST_METHODS.each do |method|
207
- describe ".request(#{method}, request, adapter)" do
208
- it "delegates to the .#{method} method" do
209
- HTTPI.expects(method)
210
- client.request method, HTTPI::Request.new
211
- end
212
- end
213
-
214
186
  describe ".#{method}" do
215
- let(:request) { HTTPI::Request.new :url => "http://example.com" }
187
+ let(:request) { HTTPI::Request.new("http://example.com") }
216
188
 
217
189
  it "raises an ArgumentError in case of an invalid adapter" do
218
190
  expect { client.request method, request, :invalid }.to raise_error(ArgumentError)
219
191
  end
220
192
 
221
- it "raises an ArgumentError in case of an invalid request" do
222
- expect { client.request method, "invalid" }.to raise_error(ArgumentError)
223
- end
224
-
225
193
  HTTPI::Adapter::ADAPTERS.each do |adapter, opts|
226
- client_class = {
227
- :httpclient => lambda { HTTPClient },
228
- :curb => lambda { Curl::Easy },
229
- :net_http => lambda { Net::HTTP }
230
- }
231
-
232
- context "using #{adapter}" do
233
- before { opts[:class].any_instance.expects(method) }
234
-
235
- it "logs that we're executing a request" do
236
- HTTPI.expects(:log).with("HTTPI executes HTTP #{method.to_s.upcase} using the #{adapter} adapter")
237
- client.request method, request, adapter
238
- end
239
-
240
- it "yields the HTTP client instance used for the request" do
241
- block = lambda { |http| http.be_a(client_class[adapter].call) }
242
- client.request(method, request, adapter, &block)
194
+ unless (adapter == :em_http && RUBY_VERSION =~ /1\.8/) || (adapter == :curb && RUBY_PLATFORM =~ /java/)
195
+ client_class = {
196
+ :httpclient => lambda { HTTPClient },
197
+ :curb => lambda { Curl::Easy },
198
+ :net_http => lambda { Net::HTTP },
199
+ :em_http => lambda { EventMachine::WebMockHttpConnection } # in real life: EventMachine::HttpRequest
200
+ }
201
+
202
+ context "using #{adapter}" do
203
+ before { opts[:class].any_instance.expects(:request).with(method) }
204
+
205
+ it "yields the HTTP client instance used for the request" do
206
+ expect { |b| client.request(method, request, adapter, &b) }.to yield_with_args(client_class[adapter].call)
207
+ end
243
208
  end
244
209
  end
245
210
  end
@@ -267,8 +232,8 @@ describe HTTPI do
267
232
  end
268
233
 
269
234
  describe ".log_level" do
270
- it "defaults to :warn" do
271
- HTTPI.log_level.should == :warn
235
+ it "defaults to :debug" do
236
+ HTTPI.log_level.should == :debug
272
237
  end
273
238
  end
274
239
 
@@ -0,0 +1,23 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIID0DCCArigAwIBAgIBADANBgkqhkiG9w0BAQUFADA8MQswCQYDVQQGDAJKUDES
3
+ MBAGA1UECgwJSklOLkdSLkpQMQwwCgYDVQQLDANSUlIxCzAJBgNVBAMMAkNBMB4X
4
+ DTA0MDEzMDAwNDIzMloXDTM2MDEyMjAwNDIzMlowPDELMAkGA1UEBgwCSlAxEjAQ
5
+ BgNVBAoMCUpJTi5HUi5KUDEMMAoGA1UECwwDUlJSMQswCQYDVQQDDAJDQTCCASIw
6
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANbv0x42BTKFEQOE+KJ2XmiSdZpR
7
+ wjzQLAkPLRnLB98tlzs4xo+y4RyY/rd5TT9UzBJTIhP8CJi5GbS1oXEerQXB3P0d
8
+ L5oSSMwGGyuIzgZe5+vZ1kgzQxMEKMMKlzA73rbMd4Jx3u5+jdbP0EDrPYfXSvLY
9
+ bS04n2aX7zrN3x5KdDrNBfwBio2/qeaaj4+9OxnwRvYP3WOvqdW0h329eMfHw0pi
10
+ JI0drIVdsEqClUV4pebT/F+CPUPkEh/weySgo9wANockkYu5ujw2GbLFcO5LXxxm
11
+ dEfcVr3r6t6zOA4bJwL0W/e6LBcrwiG/qPDFErhwtgTLYf6Er67SzLyA66UCAwEA
12
+ AaOB3DCB2TAPBgNVHRMBAf8EBTADAQH/MDEGCWCGSAGG+EIBDQQkFiJSdWJ5L09w
13
+ ZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBRJ7Xd380KzBV7f
14
+ USKIQ+O/vKbhDzAOBgNVHQ8BAf8EBAMCAQYwZAYDVR0jBF0wW4AUSe13d/NCswVe
15
+ 31EiiEPjv7ym4Q+hQKQ+MDwxCzAJBgNVBAYMAkpQMRIwEAYDVQQKDAlKSU4uR1Iu
16
+ SlAxDDAKBgNVBAsMA1JSUjELMAkGA1UEAwwCQ0GCAQAwDQYJKoZIhvcNAQEFBQAD
17
+ ggEBAIu/mfiez5XN5tn2jScgShPgHEFJBR0BTJBZF6xCk0jyqNx/g9HMj2ELCuK+
18
+ r/Y7KFW5c5M3AQ+xWW0ZSc4kvzyTcV7yTVIwj2jZ9ddYMN3nupZFgBK1GB4Y05GY
19
+ MJJFRkSu6d/Ph5ypzBVw2YMT/nsOo5VwMUGLgS7YVjU+u/HNWz80J3oO17mNZllj
20
+ PvORJcnjwlroDnS58KoJ7GDgejv3ESWADvX1OHLE4cRkiQGeLoEU4pxdCxXRqX0U
21
+ PbwIkZN9mXVcrmPHq8MWi4eC/V7hnbZETMHuWhUoiNdOEfsAXr3iP4KjyyRdwc7a
22
+ d/xgcK06UVQRL/HbEYGiQL056mc=
23
+ -----END CERTIFICATE-----
@@ -0,0 +1,44 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIID0DCCArigAwIBAgIBADANBgkqhkiG9w0BAQUFADA8MQswCQYDVQQGDAJKUDES
3
+ MBAGA1UECgwJSklOLkdSLkpQMQwwCgYDVQQLDANSUlIxCzAJBgNVBAMMAkNBMB4X
4
+ DTA0MDEzMDAwNDIzMloXDTM2MDEyMjAwNDIzMlowPDELMAkGA1UEBgwCSlAxEjAQ
5
+ BgNVBAoMCUpJTi5HUi5KUDEMMAoGA1UECwwDUlJSMQswCQYDVQQDDAJDQTCCASIw
6
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANbv0x42BTKFEQOE+KJ2XmiSdZpR
7
+ wjzQLAkPLRnLB98tlzs4xo+y4RyY/rd5TT9UzBJTIhP8CJi5GbS1oXEerQXB3P0d
8
+ L5oSSMwGGyuIzgZe5+vZ1kgzQxMEKMMKlzA73rbMd4Jx3u5+jdbP0EDrPYfXSvLY
9
+ bS04n2aX7zrN3x5KdDrNBfwBio2/qeaaj4+9OxnwRvYP3WOvqdW0h329eMfHw0pi
10
+ JI0drIVdsEqClUV4pebT/F+CPUPkEh/weySgo9wANockkYu5ujw2GbLFcO5LXxxm
11
+ dEfcVr3r6t6zOA4bJwL0W/e6LBcrwiG/qPDFErhwtgTLYf6Er67SzLyA66UCAwEA
12
+ AaOB3DCB2TAPBgNVHRMBAf8EBTADAQH/MDEGCWCGSAGG+EIBDQQkFiJSdWJ5L09w
13
+ ZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBRJ7Xd380KzBV7f
14
+ USKIQ+O/vKbhDzAOBgNVHQ8BAf8EBAMCAQYwZAYDVR0jBF0wW4AUSe13d/NCswVe
15
+ 31EiiEPjv7ym4Q+hQKQ+MDwxCzAJBgNVBAYMAkpQMRIwEAYDVQQKDAlKSU4uR1Iu
16
+ SlAxDDAKBgNVBAsMA1JSUjELMAkGA1UEAwwCQ0GCAQAwDQYJKoZIhvcNAQEFBQAD
17
+ ggEBAIu/mfiez5XN5tn2jScgShPgHEFJBR0BTJBZF6xCk0jyqNx/g9HMj2ELCuK+
18
+ r/Y7KFW5c5M3AQ+xWW0ZSc4kvzyTcV7yTVIwj2jZ9ddYMN3nupZFgBK1GB4Y05GY
19
+ MJJFRkSu6d/Ph5ypzBVw2YMT/nsOo5VwMUGLgS7YVjU+u/HNWz80J3oO17mNZllj
20
+ PvORJcnjwlroDnS58KoJ7GDgejv3ESWADvX1OHLE4cRkiQGeLoEU4pxdCxXRqX0U
21
+ PbwIkZN9mXVcrmPHq8MWi4eC/V7hnbZETMHuWhUoiNdOEfsAXr3iP4KjyyRdwc7a
22
+ d/xgcK06UVQRL/HbEYGiQL056mc=
23
+ -----END CERTIFICATE-----
24
+ -----BEGIN CERTIFICATE-----
25
+ MIIDaDCCAlCgAwIBAgIBATANBgkqhkiG9w0BAQUFADA8MQswCQYDVQQGDAJKUDES
26
+ MBAGA1UECgwJSklOLkdSLkpQMQwwCgYDVQQLDANSUlIxCzAJBgNVBAMMAkNBMB4X
27
+ DTA0MDEzMDAwNDMyN1oXDTM1MDEyMjAwNDMyN1owPzELMAkGA1UEBgwCSlAxEjAQ
28
+ BgNVBAoMCUpJTi5HUi5KUDEMMAoGA1UECwwDUlJSMQ4wDAYDVQQDDAVTdWJDQTCC
29
+ ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ0Ou7AyRcRXnB/kVHv/6kwe
30
+ ANzgg/DyJfsAUqW90m7Lu1nqyug8gK0RBd77yU0w5HOAMHTVSdpjZK0g2sgx4Mb1
31
+ d/213eL9TTl5MRVEChTvQr8q5DVG/8fxPPE7fMI8eOAzd98/NOAChk+80r4Sx7fC
32
+ kGVEE1bKwY1MrUsUNjOY2d6t3M4HHV3HX1V8ShuKfsHxgCmLzdI8U+5CnQedFgkm
33
+ 3e+8tr8IX5RR1wA1Ifw9VadF7OdI/bGMzog/Q8XCLf+WPFjnK7Gcx6JFtzF6Gi4x
34
+ 4dp1Xl45JYiVvi9zQ132wu8A1pDHhiNgQviyzbP+UjcB/tsOpzBQF8abYzgEkWEC
35
+ AwEAAaNyMHAwDwYDVR0TAQH/BAUwAwEB/zAxBglghkgBhvhCAQ0EJBYiUnVieS9P
36
+ cGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUlCjXWLsReYzH
37
+ LzsxwVnCXmKoB/owCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCJ/OyN
38
+ rT8Cq2Y+G2yA/L1EMRvvxwFBqxavqaqHl/6rwsIBFlB3zbqGA/0oec6MAVnYynq4
39
+ c4AcHTjx3bQ/S4r2sNTZq0DH4SYbQzIobx/YW8PjQUJt8KQdKMcwwi7arHP7A/Ha
40
+ LKu8eIC2nsUBnP4NhkYSGhbmpJK+PFD0FVtD0ZIRlY/wsnaZNjWWcnWF1/FNuQ4H
41
+ ySjIblqVQkPuzebv3Ror6ZnVDukn96Mg7kP4u6zgxOeqlJGRe1M949SS9Vudjl8X
42
+ SF4aZUUB9pQGhsqQJVqaz2OlhGOp9D0q54xko/rekjAIcuDjl1mdX4F2WRrzpUmZ
43
+ uY/bPeOBYiVsOYVe
44
+ -----END CERTIFICATE-----