riak-client 2.3.0 → 2.3.1

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.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/.document +5 -5
  3. data/Gemfile +17 -17
  4. data/Guardfile +20 -20
  5. data/LICENSE.md +16 -16
  6. data/README.markdown +1 -1
  7. data/RELEASE_NOTES.md +9 -0
  8. data/lib/riak/client/beefcake/crdt/counter_loader.rb +18 -18
  9. data/lib/riak/client/beefcake/crdt/map_loader.rb +64 -64
  10. data/lib/riak/client/beefcake/footer +4 -4
  11. data/lib/riak/client/beefcake/header +6 -6
  12. data/lib/riak/client/beefcake/messages.rb +0 -16
  13. data/lib/riak/client/decaying.rb +36 -36
  14. data/lib/riak/client/feature_detection.rb +120 -120
  15. data/lib/riak/client/instrumentation.rb +19 -19
  16. data/lib/riak/client/node.rb +49 -49
  17. data/lib/riak/client/search.rb +27 -27
  18. data/lib/riak/conflict.rb +13 -13
  19. data/lib/riak/core_ext.rb +7 -7
  20. data/lib/riak/core_ext/blank.rb +53 -53
  21. data/lib/riak/core_ext/extract_options.rb +7 -7
  22. data/lib/riak/core_ext/json.rb +15 -15
  23. data/lib/riak/core_ext/slice.rb +18 -18
  24. data/lib/riak/core_ext/stringify_keys.rb +10 -10
  25. data/lib/riak/core_ext/symbolize_keys.rb +10 -10
  26. data/lib/riak/core_ext/to_param.rb +31 -31
  27. data/lib/riak/crdt.rb +21 -21
  28. data/lib/riak/crdt/operation.rb +19 -19
  29. data/lib/riak/encoding.rb +6 -6
  30. data/lib/riak/errors/backend_creation.rb +9 -9
  31. data/lib/riak/errors/connection_error.rb +50 -50
  32. data/lib/riak/errors/protobuffs_error.rb +11 -11
  33. data/lib/riak/i18n.rb +7 -7
  34. data/lib/riak/instrumentation.rb +6 -6
  35. data/lib/riak/json.rb +52 -52
  36. data/lib/riak/list_buckets.rb +28 -28
  37. data/lib/riak/locale/fr.yml +51 -51
  38. data/lib/riak/map_reduce/results.rb +49 -49
  39. data/lib/riak/map_reduce_error.rb +7 -7
  40. data/lib/riak/multiget.rb +122 -122
  41. data/lib/riak/stamp.rb +77 -77
  42. data/lib/riak/util/tcp_socket_extensions.rb +58 -58
  43. data/lib/riak/version.rb +1 -1
  44. data/spec/failover/failover.rb +59 -59
  45. data/spec/fixtures/bitcask.txt +25 -25
  46. data/spec/fixtures/multipart-basic-conflict.txt +15 -15
  47. data/spec/fixtures/multipart-blank.txt +7 -7
  48. data/spec/fixtures/multipart-mapreduce.txt +10 -10
  49. data/spec/fixtures/multipart-with-body.txt +16 -16
  50. data/spec/fixtures/multipart-with-marked-tombstones.txt +17 -17
  51. data/spec/fixtures/multipart-with-unmarked-tombstone.txt +16 -16
  52. data/spec/fixtures/server.cert.crt +15 -15
  53. data/spec/fixtures/server.cert.key +15 -15
  54. data/spec/fixtures/test.pem +1 -1
  55. data/spec/integration/riak/threading_spec.rb +150 -150
  56. data/spec/integration/yokozuna/index_spec.rb +61 -61
  57. data/spec/integration/yokozuna/schema_spec.rb +49 -49
  58. data/spec/riak/core_ext/to_param_spec.rb +15 -15
  59. data/spec/riak/crdt/inner_counter_spec.rb +21 -21
  60. data/spec/riak/crdt/inner_set_spec.rb +33 -33
  61. data/spec/riak/crdt/set_spec.rb +61 -61
  62. data/spec/riak/escape_spec.rb +72 -72
  63. data/spec/riak/feature_detection_spec.rb +77 -77
  64. data/spec/riak/index_collection_spec.rb +53 -53
  65. data/spec/riak/instrumentation_spec.rb +124 -124
  66. data/spec/riak/link_spec.rb +85 -85
  67. data/spec/riak/list_buckets_spec.rb +41 -41
  68. data/spec/riak/node_spec.rb +26 -26
  69. data/spec/riak/stamp_spec.rb +54 -54
  70. data/spec/support/certs/README.md +12 -12
  71. data/spec/support/certs/ca.crt +21 -21
  72. data/spec/support/certs/client.crl +13 -13
  73. data/spec/support/certs/client.crt +94 -94
  74. data/spec/support/certs/client.csr +18 -18
  75. data/spec/support/certs/client.key +27 -27
  76. data/spec/support/certs/empty_ca.crt +21 -21
  77. data/spec/support/certs/server.crl +13 -13
  78. data/spec/support/certs/server.crt +94 -94
  79. data/spec/support/certs/server.key +27 -27
  80. data/spec/support/integration_setup.rb +10 -10
  81. data/spec/support/test_client.yml.example +9 -9
  82. metadata +3 -3
@@ -1,85 +1,85 @@
1
- require 'spec_helper'
2
-
3
- describe Riak::Link do
4
- describe "parsing a link header" do
5
- it "creates Link objects from the data" do
6
- result = Riak::Link.parse('</riak/foo/bar>; rel="tag", </riak/foo>; rel="up"')
7
- expect(result).to be_kind_of(Array)
8
- expect(result).to be_all {|i| Riak::Link === i }
9
- end
10
-
11
- it "sets the bucket, key, url and rel parameters properly" do
12
- result = Riak::Link.parse('</riak/foo/bar>; riaktag="tag", </riak/foo>; rel="up"')
13
- expect(result[0].url).to eq("/riak/foo/bar")
14
- expect(result[0].bucket).to eq("foo")
15
- expect(result[0].key).to eq("bar")
16
- expect(result[0].rel).to eq("tag")
17
- expect(result[1].url).to eq("/riak/foo")
18
- expect(result[1].bucket).to eq("foo")
19
- expect(result[1].key).to eq(nil)
20
- expect(result[1].rel).to eq("up")
21
- end
22
-
23
- it "keeps the url intact if it does not point to a bucket or bucket/key" do
24
- result = Riak::Link.parse('</mapred>; rel="riak_kv_wm_mapred"')
25
- expect(result[0].url).to eq("/mapred")
26
- expect(result[0].bucket).to be_nil
27
- expect(result[0].key).to be_nil
28
- end
29
-
30
- it "parses the Riak 1.0 URL scheme" do
31
- result = Riak::Link.parse('</buckets/b/keys/k>; riaktag="tag"').first
32
- expect(result.bucket).to eq('b')
33
- expect(result.key).to eq('k')
34
- expect(result.tag).to eq('tag')
35
- end
36
- end
37
-
38
- context "converting to a string" do
39
- it "to a string appropriate for use in the Link header" do
40
- expect(Riak::Link.new("/riak/foo", "up").to_s).to eq('</riak/foo>; riaktag="up"')
41
- expect(Riak::Link.new("/riak/foo/bar", "next").to_s).to eq('</riak/foo/bar>; riaktag="next"')
42
- expect(Riak::Link.new("/riak", "riak_kv_wm_raw").to_s).to eq('</riak>; riaktag="riak_kv_wm_raw"')
43
- end
44
-
45
- it "converts to a string using the new URL scheme" do
46
- expect(Riak::Link.new("bucket", "key", "tag").to_s(true)).to eq('</buckets/bucket/keys/key>; riaktag="tag"')
47
- expect(Riak::Link.parse('</riak/bucket/key>; riaktag="tag"').first.to_s(true)).to eq('</buckets/bucket/keys/key>; riaktag="tag"')
48
- end
49
- end
50
-
51
- it "converts to a walk spec when pointing to an object" do
52
- expect(Riak::Link.new("/riak/foo/bar", "next").to_walk_spec.to_s).to eq("foo,next,_")
53
- expect { Riak::Link.new("/riak/foo", "up").to_walk_spec }.to raise_error
54
- end
55
-
56
- it "is equivalent to a link with the same url and rel" do
57
- one = Riak::Link.new("/riak/foo/bar", "next")
58
- two = Riak::Link.new("/riak/foo/bar", "next")
59
- expect(one).to eq(two)
60
- expect([one]).to include(two)
61
- expect([two]).to include(one)
62
- end
63
-
64
- it "unescapes the bucket name" do
65
- expect(Riak::Link.new("/riak/bucket%20spaces/key", "foo").bucket).to eq("bucket spaces")
66
- end
67
-
68
- it "unescapes the key name" do
69
- expect(Riak::Link.new("/riak/bucket/key%2Fname", "foo").key).to eq("key/name")
70
- end
71
-
72
- it "doesn't rely on the prefix to equal /riak/ when extracting the bucket and key" do
73
- link = Riak::Link.new("/raw/bucket/key", "foo")
74
- expect(link.bucket).to eq("bucket")
75
- expect(link.key).to eq("key")
76
- end
77
-
78
- it "constructs from bucket, key and tag" do
79
- link = Riak::Link.new("bucket", "key", "tag")
80
- expect(link.bucket).to eq("bucket")
81
- expect(link.key).to eq("key")
82
- expect(link.tag).to eq("tag")
83
- expect(link.url).to eq("/riak/bucket/key")
84
- end
85
- end
1
+ require 'spec_helper'
2
+
3
+ describe Riak::Link do
4
+ describe "parsing a link header" do
5
+ it "creates Link objects from the data" do
6
+ result = Riak::Link.parse('</riak/foo/bar>; rel="tag", </riak/foo>; rel="up"')
7
+ expect(result).to be_kind_of(Array)
8
+ expect(result).to be_all {|i| Riak::Link === i }
9
+ end
10
+
11
+ it "sets the bucket, key, url and rel parameters properly" do
12
+ result = Riak::Link.parse('</riak/foo/bar>; riaktag="tag", </riak/foo>; rel="up"')
13
+ expect(result[0].url).to eq("/riak/foo/bar")
14
+ expect(result[0].bucket).to eq("foo")
15
+ expect(result[0].key).to eq("bar")
16
+ expect(result[0].rel).to eq("tag")
17
+ expect(result[1].url).to eq("/riak/foo")
18
+ expect(result[1].bucket).to eq("foo")
19
+ expect(result[1].key).to eq(nil)
20
+ expect(result[1].rel).to eq("up")
21
+ end
22
+
23
+ it "keeps the url intact if it does not point to a bucket or bucket/key" do
24
+ result = Riak::Link.parse('</mapred>; rel="riak_kv_wm_mapred"')
25
+ expect(result[0].url).to eq("/mapred")
26
+ expect(result[0].bucket).to be_nil
27
+ expect(result[0].key).to be_nil
28
+ end
29
+
30
+ it "parses the Riak 1.0 URL scheme" do
31
+ result = Riak::Link.parse('</buckets/b/keys/k>; riaktag="tag"').first
32
+ expect(result.bucket).to eq('b')
33
+ expect(result.key).to eq('k')
34
+ expect(result.tag).to eq('tag')
35
+ end
36
+ end
37
+
38
+ context "converting to a string" do
39
+ it "to a string appropriate for use in the Link header" do
40
+ expect(Riak::Link.new("/riak/foo", "up").to_s).to eq('</riak/foo>; riaktag="up"')
41
+ expect(Riak::Link.new("/riak/foo/bar", "next").to_s).to eq('</riak/foo/bar>; riaktag="next"')
42
+ expect(Riak::Link.new("/riak", "riak_kv_wm_raw").to_s).to eq('</riak>; riaktag="riak_kv_wm_raw"')
43
+ end
44
+
45
+ it "converts to a string using the new URL scheme" do
46
+ expect(Riak::Link.new("bucket", "key", "tag").to_s(true)).to eq('</buckets/bucket/keys/key>; riaktag="tag"')
47
+ expect(Riak::Link.parse('</riak/bucket/key>; riaktag="tag"').first.to_s(true)).to eq('</buckets/bucket/keys/key>; riaktag="tag"')
48
+ end
49
+ end
50
+
51
+ it "converts to a walk spec when pointing to an object" do
52
+ expect(Riak::Link.new("/riak/foo/bar", "next").to_walk_spec.to_s).to eq("foo,next,_")
53
+ expect { Riak::Link.new("/riak/foo", "up").to_walk_spec }.to raise_error
54
+ end
55
+
56
+ it "is equivalent to a link with the same url and rel" do
57
+ one = Riak::Link.new("/riak/foo/bar", "next")
58
+ two = Riak::Link.new("/riak/foo/bar", "next")
59
+ expect(one).to eq(two)
60
+ expect([one]).to include(two)
61
+ expect([two]).to include(one)
62
+ end
63
+
64
+ it "unescapes the bucket name" do
65
+ expect(Riak::Link.new("/riak/bucket%20spaces/key", "foo").bucket).to eq("bucket spaces")
66
+ end
67
+
68
+ it "unescapes the key name" do
69
+ expect(Riak::Link.new("/riak/bucket/key%2Fname", "foo").key).to eq("key/name")
70
+ end
71
+
72
+ it "doesn't rely on the prefix to equal /riak/ when extracting the bucket and key" do
73
+ link = Riak::Link.new("/raw/bucket/key", "foo")
74
+ expect(link.bucket).to eq("bucket")
75
+ expect(link.key).to eq("key")
76
+ end
77
+
78
+ it "constructs from bucket, key and tag" do
79
+ link = Riak::Link.new("bucket", "key", "tag")
80
+ expect(link.bucket).to eq("bucket")
81
+ expect(link.key).to eq("key")
82
+ expect(link.tag).to eq("tag")
83
+ expect(link.url).to eq("/riak/bucket/key")
84
+ end
85
+ end
@@ -1,41 +1,41 @@
1
- require 'spec_helper'
2
-
3
- describe Riak::ListBuckets do
4
- before :each do
5
- @client = Riak::Client.new
6
- @backend = double 'backend'
7
- @fake_pool = double 'connection pool'
8
- allow(@fake_pool).to receive(:take).and_yield(@backend)
9
-
10
- @expect_list = expect(@backend).to receive(:list_buckets)
11
-
12
- @client.instance_variable_set :@protobuffs_pool, @fake_pool
13
- end
14
-
15
- describe "non-streaming" do
16
- it 'calls the backend without a block' do
17
- @expect_list.with({}).and_return(%w{a b c d})
18
-
19
- @client.list_buckets
20
- end
21
- end
22
-
23
- describe "streaming" do
24
- it 'calls the backend with a block' do
25
- @expect_list.
26
- and_yield(%w{abc abd abe}).
27
- and_yield(%w{bbb ccc ddd})
28
-
29
- @yielded = []
30
-
31
- @client.list_buckets do |bucket|
32
- @yielded << bucket
33
- end
34
-
35
- @yielded.each do |b|
36
- expect(b).to be_a Riak::Bucket
37
- end
38
- expect(@yielded.map(&:name)).to eq(%w{abc abd abe bbb ccc ddd})
39
- end
40
- end
41
- end
1
+ require 'spec_helper'
2
+
3
+ describe Riak::ListBuckets do
4
+ before :each do
5
+ @client = Riak::Client.new
6
+ @backend = double 'backend'
7
+ @fake_pool = double 'connection pool'
8
+ allow(@fake_pool).to receive(:take).and_yield(@backend)
9
+
10
+ @expect_list = expect(@backend).to receive(:list_buckets)
11
+
12
+ @client.instance_variable_set :@protobuffs_pool, @fake_pool
13
+ end
14
+
15
+ describe "non-streaming" do
16
+ it 'calls the backend without a block' do
17
+ @expect_list.with({}).and_return(%w{a b c d})
18
+
19
+ @client.list_buckets
20
+ end
21
+ end
22
+
23
+ describe "streaming" do
24
+ it 'calls the backend with a block' do
25
+ @expect_list.
26
+ and_yield(%w{abc abd abe}).
27
+ and_yield(%w{bbb ccc ddd})
28
+
29
+ @yielded = []
30
+
31
+ @client.list_buckets do |bucket|
32
+ @yielded << bucket
33
+ end
34
+
35
+ @yielded.each do |b|
36
+ expect(b).to be_a Riak::Bucket
37
+ end
38
+ expect(@yielded.map(&:name)).to eq(%w{abc abd abe bbb ccc ddd})
39
+ end
40
+ end
41
+ end
@@ -1,26 +1,26 @@
1
- require 'spec_helper'
2
-
3
- describe Riak::Client::Node do
4
- before :each do
5
- @client = Riak::Client.new
6
- @node = Riak::Client::Node.new @client
7
- end
8
-
9
- describe 'when initializing' do
10
- it 'defaults to the local interface on port 8087' do
11
- node = Riak::Client::Node.new @client
12
- expect(node.host).to eq('127.0.0.1')
13
- expect(node.pb_port).to eq(8087)
14
- end
15
-
16
- it 'accepts a host' do
17
- node = Riak::Client::Node.new(@client, :host => 'riak.basho.com')
18
- expect(node.host).to eq("riak.basho.com")
19
- end
20
-
21
- it 'accepts a Protobuffs port' do
22
- node = Riak::Client::Node.new @client, :pb_port => 9000
23
- expect(node.pb_port).to eq(9000)
24
- end
25
- end
26
- end
1
+ require 'spec_helper'
2
+
3
+ describe Riak::Client::Node do
4
+ before :each do
5
+ @client = Riak::Client.new
6
+ @node = Riak::Client::Node.new @client
7
+ end
8
+
9
+ describe 'when initializing' do
10
+ it 'defaults to the local interface on port 8087' do
11
+ node = Riak::Client::Node.new @client
12
+ expect(node.host).to eq('127.0.0.1')
13
+ expect(node.pb_port).to eq(8087)
14
+ end
15
+
16
+ it 'accepts a host' do
17
+ node = Riak::Client::Node.new(@client, :host => 'riak.basho.com')
18
+ expect(node.host).to eq("riak.basho.com")
19
+ end
20
+
21
+ it 'accepts a Protobuffs port' do
22
+ node = Riak::Client::Node.new @client, :pb_port => 9000
23
+ expect(node.pb_port).to eq(9000)
24
+ end
25
+ end
26
+ end
@@ -1,54 +1,54 @@
1
- require 'spec_helper'
2
- require 'riak/stamp'
3
-
4
- describe Riak::Stamp, test_client: true do
5
- subject { described_class.new test_client }
6
- it "generates always increasing integer identifiers" do
7
- 1000.times do
8
- one = subject.next
9
- two = subject.next
10
- expect([one, two]).to be_all {|i| Integer === i }
11
- expect(two).to be > one
12
- end
13
- end
14
-
15
- it "delays until the next millisecond when the sequence overflows" do
16
- old = subject.instance_variable_get(:@timestamp) + 0
17
- subject.instance_variable_set(:@sequence, described_class::SEQUENCE_MASK)
18
- count = 0
19
- # Simulate the time_gen method returning the same thing multiple times
20
- allow(subject).to receive(:time_gen) do
21
- count += 1
22
- if count < 10
23
- old
24
- else
25
- old + 1
26
- end
27
- end
28
- expect((subject.next >> described_class::TIMESTAMP_SHIFT) & described_class::TIMESTAMP_MASK).to eq(old + 1)
29
- end
30
-
31
- it "raises an exception when the system clock moves backwards" do
32
- old = subject.instance_variable_get(:@timestamp)
33
- expect(subject).to receive(:time_gen).and_return(old - 10)
34
- expect {
35
- subject.next
36
- }.to raise_error(Riak::BackwardsClockError)
37
- end
38
-
39
- # The client/worker ID should be used for disambiguation, not for
40
- # primary ordering. This breaks from the Snowflake model where the
41
- # worker ID is in more significant bits.
42
- it "uses the client ID as the bottom component of the identifier" do
43
- expect(subject.next & described_class::CLIENT_ID_MASK).to eq(subject.client.client_id.hash & described_class::CLIENT_ID_MASK)
44
- end
45
-
46
- context "using a non-integer client ID" do
47
- subject { described_class.new(Riak::Client.new(:client_id => "ripple")) }
48
- let(:hash) { "ripple".hash }
49
-
50
- it "uses the hash of the client ID as the bottom component of the identifier" do
51
- expect(subject.next & described_class::CLIENT_ID_MASK).to eq(subject.client.client_id.hash & described_class::CLIENT_ID_MASK)
52
- end
53
- end
54
- end
1
+ require 'spec_helper'
2
+ require 'riak/stamp'
3
+
4
+ describe Riak::Stamp, test_client: true do
5
+ subject { described_class.new test_client }
6
+ it "generates always increasing integer identifiers" do
7
+ 1000.times do
8
+ one = subject.next
9
+ two = subject.next
10
+ expect([one, two]).to be_all {|i| Integer === i }
11
+ expect(two).to be > one
12
+ end
13
+ end
14
+
15
+ it "delays until the next millisecond when the sequence overflows" do
16
+ old = subject.instance_variable_get(:@timestamp) + 0
17
+ subject.instance_variable_set(:@sequence, described_class::SEQUENCE_MASK)
18
+ count = 0
19
+ # Simulate the time_gen method returning the same thing multiple times
20
+ allow(subject).to receive(:time_gen) do
21
+ count += 1
22
+ if count < 10
23
+ old
24
+ else
25
+ old + 1
26
+ end
27
+ end
28
+ expect((subject.next >> described_class::TIMESTAMP_SHIFT) & described_class::TIMESTAMP_MASK).to eq(old + 1)
29
+ end
30
+
31
+ it "raises an exception when the system clock moves backwards" do
32
+ old = subject.instance_variable_get(:@timestamp)
33
+ expect(subject).to receive(:time_gen).and_return(old - 10)
34
+ expect {
35
+ subject.next
36
+ }.to raise_error(Riak::BackwardsClockError)
37
+ end
38
+
39
+ # The client/worker ID should be used for disambiguation, not for
40
+ # primary ordering. This breaks from the Snowflake model where the
41
+ # worker ID is in more significant bits.
42
+ it "uses the client ID as the bottom component of the identifier" do
43
+ expect(subject.next & described_class::CLIENT_ID_MASK).to eq(subject.client.client_id.hash & described_class::CLIENT_ID_MASK)
44
+ end
45
+
46
+ context "using a non-integer client ID" do
47
+ subject { described_class.new(Riak::Client.new(:client_id => "ripple")) }
48
+ let(:hash) { "ripple".hash }
49
+
50
+ it "uses the hash of the client ID as the bottom component of the identifier" do
51
+ expect(subject.next & described_class::CLIENT_ID_MASK).to eq(subject.client.client_id.hash & described_class::CLIENT_ID_MASK)
52
+ end
53
+ end
54
+ end
@@ -1,13 +1,13 @@
1
- **DO NOT USE THESE IN PRODUCTION**
2
-
3
- This directory has certificates and a key for testing Riak authentication.
4
-
5
- * server.key - a private key for a Riak server
6
- * server.crt - the certificate for server.key
7
- * ca.crt - a certificate for the CA that issued server.crt
8
- * empty_ca.crt - a certificate for a CA that has and cannot ever issue a
9
- certificate (I deleted its private key)
10
-
11
- **DO NOT USE THESE IN PRODUCTION**
12
-
1
+ **DO NOT USE THESE IN PRODUCTION**
2
+
3
+ This directory has certificates and a key for testing Riak authentication.
4
+
5
+ * server.key - a private key for a Riak server
6
+ * server.crt - the certificate for server.key
7
+ * ca.crt - a certificate for the CA that issued server.crt
8
+ * empty_ca.crt - a certificate for a CA that has and cannot ever issue a
9
+ certificate (I deleted its private key)
10
+
11
+ **DO NOT USE THESE IN PRODUCTION**
12
+
13
13
  These were generated using https://github.com/basho-labs/riak-ruby-ca .
@@ -1,21 +1,21 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIDjDCCAnQCCQDCaCbuH5N1HjANBgkqhkiG9w0BAQUFADCBhzELMAkGA1UEBhMC
3
- VVMxEDAOBgNVBAgMB0Zsb3JpZGExDjAMBgNVBAcMBU1pYW1pMQ4wDAYDVQQKDAVC
4
- YXNobzEZMBcGA1UECwwQUmlhayBSdWJ5IENsaWVudDELMAkGA1UEAwwCQ0ExHjAc
5
- BgkqhkiG9w0BCQEWD2JyeWNlQGJhc2hvLmNvbTAeFw0xNDA5MTgyMjU4MDJaFw0y
6
- NDA5MTUyMjU4MDJaMIGHMQswCQYDVQQGEwJVUzEQMA4GA1UECAwHRmxvcmlkYTEO
7
- MAwGA1UEBwwFTWlhbWkxDjAMBgNVBAoMBUJhc2hvMRkwFwYDVQQLDBBSaWFrIFJ1
8
- YnkgQ2xpZW50MQswCQYDVQQDDAJDQTEeMBwGCSqGSIb3DQEJARYPYnJ5Y2VAYmFz
9
- aG8uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApLREjyW0bsMQ
10
- 2xZuZfXrTqndZdtmJrUaUdwLcTYXo/BLJq8mw/UoKBajzDJS1OsVutOT3l1mQZNk
11
- pE15lJbPo301RtkGOeYlTx6ptawutrvlMlACnWtYyuL9U8qqnMJAsdBEjTU3Xxao
12
- /vJTECBVaKtL9D5vEu2fOn4ZWvSuYG14ZXhltBPgon95SrJX+erXgHs0IH6l1ftW
13
- xZL9Uw/Tj/s8XEMK8n6FB+CYuj33fZMjswvdXABzhEAW8bCupJT42V/S9Zj4B0Z8
14
- iv6wgurc1yuU6yl0VDGZ6Ee++7ter3GZZrV4YC5A8UjW0+8sADUYKiZNYWTO6S+N
15
- Pu/sLRdykwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQBzcs/VIHHeyUWlS+Rx/s/m
16
- m54RK332r2+8Mywtwdz57kA6rsbYBrrlKVmEzjtgCIcpF/3hhEChYcSA4w0Aa+zd
17
- Zd6eNtUyicPFfm/8GycaLM3Ptj3duq4jHha2IzhomfACm8pkBj8IU8Y5q/YBV+3L
18
- hJxderphbz6lqrH6USkt/aaFzu+1onYlxzGZDyiFPOxUbRPXN12y3XCeFSfuHBej
19
- ifFRSHGR8HU++g4VYnOi/1YXSDFh7yRvA2qBlz+kYprBS2GggXIrfCgT+FnMALlg
20
- 6TrfsWQiI3pyGKUsNjdaQckdLMWr8jvutb7vPZ1WdMdgKxbE0Swo1HBbkCAe5JjG
21
- -----END CERTIFICATE-----
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDjDCCAnQCCQDCaCbuH5N1HjANBgkqhkiG9w0BAQUFADCBhzELMAkGA1UEBhMC
3
+ VVMxEDAOBgNVBAgMB0Zsb3JpZGExDjAMBgNVBAcMBU1pYW1pMQ4wDAYDVQQKDAVC
4
+ YXNobzEZMBcGA1UECwwQUmlhayBSdWJ5IENsaWVudDELMAkGA1UEAwwCQ0ExHjAc
5
+ BgkqhkiG9w0BCQEWD2JyeWNlQGJhc2hvLmNvbTAeFw0xNDA5MTgyMjU4MDJaFw0y
6
+ NDA5MTUyMjU4MDJaMIGHMQswCQYDVQQGEwJVUzEQMA4GA1UECAwHRmxvcmlkYTEO
7
+ MAwGA1UEBwwFTWlhbWkxDjAMBgNVBAoMBUJhc2hvMRkwFwYDVQQLDBBSaWFrIFJ1
8
+ YnkgQ2xpZW50MQswCQYDVQQDDAJDQTEeMBwGCSqGSIb3DQEJARYPYnJ5Y2VAYmFz
9
+ aG8uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApLREjyW0bsMQ
10
+ 2xZuZfXrTqndZdtmJrUaUdwLcTYXo/BLJq8mw/UoKBajzDJS1OsVutOT3l1mQZNk
11
+ pE15lJbPo301RtkGOeYlTx6ptawutrvlMlACnWtYyuL9U8qqnMJAsdBEjTU3Xxao
12
+ /vJTECBVaKtL9D5vEu2fOn4ZWvSuYG14ZXhltBPgon95SrJX+erXgHs0IH6l1ftW
13
+ xZL9Uw/Tj/s8XEMK8n6FB+CYuj33fZMjswvdXABzhEAW8bCupJT42V/S9Zj4B0Z8
14
+ iv6wgurc1yuU6yl0VDGZ6Ee++7ter3GZZrV4YC5A8UjW0+8sADUYKiZNYWTO6S+N
15
+ Pu/sLRdykwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQBzcs/VIHHeyUWlS+Rx/s/m
16
+ m54RK332r2+8Mywtwdz57kA6rsbYBrrlKVmEzjtgCIcpF/3hhEChYcSA4w0Aa+zd
17
+ Zd6eNtUyicPFfm/8GycaLM3Ptj3duq4jHha2IzhomfACm8pkBj8IU8Y5q/YBV+3L
18
+ hJxderphbz6lqrH6USkt/aaFzu+1onYlxzGZDyiFPOxUbRPXN12y3XCeFSfuHBej
19
+ ifFRSHGR8HU++g4VYnOi/1YXSDFh7yRvA2qBlz+kYprBS2GggXIrfCgT+FnMALlg
20
+ 6TrfsWQiI3pyGKUsNjdaQckdLMWr8jvutb7vPZ1WdMdgKxbE0Swo1HBbkCAe5JjG
21
+ -----END CERTIFICATE-----