friendly_id 5.5.1 → 5.6.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5fd869be5d6d4518b4928f41284ec56c4eca0162a3d0683369ed6789b87206ed
4
- data.tar.gz: b349d6f8cbb6d1289c768cf6d38c55ad864b472fc39f08e98baf2389af96e85d
3
+ metadata.gz: 41f8cc1c8668551a87b0537b5a30b812ec635755c7b1d0bfda678bc4be23b84c
4
+ data.tar.gz: 7cc6753a1f56537561558134ceae5c796b2e1296fa5230b0b734ddebd17be789
5
5
  SHA512:
6
- metadata.gz: 07ca31c8fc194a8a3b336a8e2fdf63cb69f2ac84f1e8cb3781e35beabd392c8b8100495b9fc07e42a548d4e91d1bbf35aed2f9b51c5d5f65cf59d32cb4f25732
7
- data.tar.gz: 776d4a15ae8c7144dbff2b9bc2b9d8f745f22858db397617a58af1bc61bacbdb9cc6e52477dfa7ee88e5457f9bda775a892292c3fe51b49060743e783b74e317
6
+ metadata.gz: cbfde34d6b2cd2347ab9837101824e65504fa226d51e4820e87b5cc7f2546c3e55decb2c7d0df4f8d1d899ef517f8177a5f63543a5577194071b7388f10cb5cf
7
+ data.tar.gz: f13c197800451a77c86092fa15fcd730ae669dca4486856ddf1dce21be7ad6ee8bbed41590f0a3afb1d72d804c343e4b5050f6c906090a7c951fb54b46c1d936
@@ -0,0 +1,29 @@
1
+ name: Release to rubygems.org
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*.*.*'
7
+
8
+ jobs:
9
+ push:
10
+ runs-on: ubuntu-latest
11
+
12
+ permissions:
13
+ contents: write
14
+ id-token: write
15
+
16
+ environment: release
17
+
18
+ steps:
19
+ - uses: actions/checkout@v6
20
+ with:
21
+ persist-credentials: false
22
+
23
+ - name: Set up Ruby
24
+ uses: ruby/setup-ruby@v1
25
+ with:
26
+ bundler-cache: true
27
+ ruby-version: ruby
28
+
29
+ - uses: rubygems/release-gem@v1
@@ -10,15 +10,39 @@ jobs:
10
10
  strategy:
11
11
  matrix:
12
12
  database: [ mysql, postgresql ]
13
- gemfile: [ '7.0', '6.1', '6.0' ]
14
- ruby: [ '2.6', '2.7', '3.0', '3.1', '3.2' ]
13
+ gemfile: [ '8.0', '7.2', '7.1', '7.0', '6.1', '6.0' ]
14
+ ruby: [ '2.7', '3.0', '3.1', '3.2', '3.3', '3.4' ]
15
15
  exclude:
16
- - ruby: '2.6'
17
- gemfile: '7.0'
18
- - ruby: '3.2'
19
- gemfile: '6.0'
20
- - ruby: '3.2'
21
- gemfile: '6.1'
16
+ - gemfile: '6.0'
17
+ ruby: '3.2'
18
+ - gemfile: '6.0'
19
+ ruby: '3.3'
20
+ - gemfile: '6.0'
21
+ ruby: '3.4'
22
+ - gemfile: '6.1'
23
+ ruby: '3.2'
24
+ - gemfile: '6.1'
25
+ ruby: '3.3'
26
+ - gemfile: '6.1'
27
+ ruby: '3.4'
28
+ - gemfile: '7.0'
29
+ ruby: '3.3'
30
+ - gemfile: '7.0'
31
+ ruby: '3.4'
32
+ - gemfile: '7.1'
33
+ ruby: '3.3'
34
+ - gemfile: '7.1'
35
+ ruby: '3.4'
36
+ - gemfile: '7.2'
37
+ ruby: '2.7'
38
+ - gemfile: '7.2'
39
+ ruby: '3.0'
40
+ - gemfile: '8.0'
41
+ ruby: '2.7'
42
+ - gemfile: '8.0'
43
+ ruby: '3.0'
44
+ - gemfile: '8.0'
45
+ ruby: '3.1'
22
46
  fail-fast: false
23
47
  runs-on: ubuntu-latest
24
48
 
@@ -35,7 +59,7 @@ jobs:
35
59
 
36
60
  name: ${{ matrix.ruby }} ${{ matrix.database }} rails-${{ matrix.gemfile }}
37
61
  steps:
38
- - uses: actions/checkout@v3
62
+ - uses: actions/checkout@v6
39
63
 
40
64
  - run: sudo apt-get update && sudo apt-get install libsqlite3-dev -y
41
65
 
data/Changelog.md CHANGED
@@ -3,7 +3,10 @@
3
3
  We would like to think our many [contributors](https://github.com/norman/friendly_id/graphs/contributors) for
4
4
  suggestions, ideas and improvements to FriendlyId.
5
5
 
6
- ## Unreleased
6
+ ## 5.6.0 (2025-12-07)
7
+
8
+ * Add: `treat_numeric_as_conflict` option to prevent ambiguous numeric slugs. ([#1037](https://github.com/norman/friendly_id/pull/1037))
9
+ * Fix: history not using `parse_friendly_id`. ([#1020](https://github.com/norman/friendly_id/pull/1020))
7
10
 
8
11
  ## 5.5.1 (2023-11-13)
9
12
 
data/README.md CHANGED
@@ -39,7 +39,7 @@ FriendlyId offers many advanced features, including:
39
39
  Add this line to your application's Gemfile:
40
40
 
41
41
  ```ruby
42
- gem 'friendly_id', '~> 5.4.0'
42
+ gem 'friendly_id', '~> 5.5.0'
43
43
  ```
44
44
 
45
45
  Note: You MUST use 5.0.0 or greater for Rails 4.0+.
@@ -108,8 +108,8 @@ User.find_each(&:save)
108
108
 
109
109
  ### `:allow_nil`
110
110
 
111
- You can pass `allow_nil: true` to the `friendly.find()` method if you're want to
112
- avoid raising `ActiveRecord::RecordNotFound` and accept a `nil`.
111
+ You can pass `allow_nil: true` to the `friendly.find()` method if you want to
112
+ avoid raising `ActiveRecord::RecordNotFound` and accept `nil`.
113
113
 
114
114
  #### Example
115
115
 
data/Rakefile CHANGED
@@ -1,4 +1,5 @@
1
1
  require "rubygems"
2
+ require "bundler/gem_tasks"
2
3
  require "rake/testtask"
3
4
 
4
5
  task default: :test
@@ -21,11 +22,6 @@ task :clean do
21
22
  %x(rm -f `find . -name '*.rbc'`)
22
23
  end
23
24
 
24
- desc "Build the gem"
25
- task :gem do
26
- `gem build friendly_id.gemspec`
27
- end
28
-
29
25
  desc "Build YARD documentation"
30
26
  task :yard do
31
27
  puts `bundle exec yard`
data/friendly_id.gemspec CHANGED
@@ -4,7 +4,7 @@ Gem::Specification.new do |s|
4
4
  s.name = "friendly_id"
5
5
  s.version = FriendlyId::VERSION
6
6
  s.authors = ["Norman Clarke", "Philip Arndt"]
7
- s.email = ["norman@njclarke.com", "p@arndt.io"]
7
+ s.email = ["norman@njclarke.com", "gems@p.arndt.io"]
8
8
  s.homepage = "https://github.com/norman/friendly_id"
9
9
  s.summary = "A comprehensive slugging and pretty-URL plugin."
10
10
  s.files = `git ls-files`.split("\n")
@@ -28,9 +28,4 @@ Gem::Specification.new do |s|
28
28
  s.description = "FriendlyId is the \"Swiss Army bulldozer\" of slugging " \
29
29
  "and permalink plugins for Active Record. It lets you create pretty URLs " \
30
30
  "and work with human-friendly strings as if they were numeric ids."
31
-
32
- s.cert_chain = [File.expand_path("certs/parndt.pem", __dir__)]
33
- if $PROGRAM_NAME.end_with?("gem") && ARGV.include?("build") && ARGV.include?(__FILE__)
34
- s.signing_key = File.expand_path("~/.ssh/gem-private_key.pem")
35
- end
36
31
  end
@@ -2,14 +2,14 @@ source "https://rubygems.org"
2
2
 
3
3
  gemspec path: "../"
4
4
 
5
- gem "activerecord", "~> 5.2.0"
6
- gem "railties", "~> 5.2.0"
5
+ gem "activerecord", "~> 7.1.0"
6
+ gem "railties", "~> 7.1.0"
7
7
 
8
8
  # Database Configuration
9
9
  group :development, :test do
10
10
  platforms :jruby do
11
- gem "activerecord-jdbcmysql-adapter", "~> 51.1"
12
- gem "activerecord-jdbcpostgresql-adapter", "~> 51.1"
11
+ gem "activerecord-jdbcmysql-adapter", "~> 61.0"
12
+ gem "activerecord-jdbcpostgresql-adapter", "~> 61.0"
13
13
  gem "kramdown"
14
14
  end
15
15
 
@@ -0,0 +1,22 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec path: "../"
4
+
5
+ gem "activerecord", "~> 7.2.0"
6
+ gem "railties", "~> 7.2.0"
7
+
8
+ # Database Configuration
9
+ group :development, :test do
10
+ platforms :jruby do
11
+ gem "activerecord-jdbcmysql-adapter", "~> 61.0"
12
+ gem "activerecord-jdbcpostgresql-adapter", "~> 61.0"
13
+ gem "kramdown"
14
+ end
15
+
16
+ platforms :ruby, :rbx do
17
+ gem "sqlite3"
18
+ gem "mysql2"
19
+ gem "pg"
20
+ gem "redcarpet"
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec path: "../"
4
+
5
+ gem "activerecord", "~> 8.0.0"
6
+ gem "railties", "~> 8.0.0"
7
+
8
+ # Database Configuration
9
+ group :development, :test do
10
+ platforms :jruby do
11
+ gem "activerecord-jdbcmysql-adapter", "~> 61.0"
12
+ gem "activerecord-jdbcpostgresql-adapter", "~> 61.0"
13
+ gem "kramdown"
14
+ end
15
+
16
+ platforms :ruby, :rbx do
17
+ gem "sqlite3"
18
+ gem "mysql2"
19
+ gem "pg"
20
+ gem "redcarpet"
21
+ end
22
+ end
@@ -85,13 +85,13 @@ module FriendlyId
85
85
  include ::FriendlyId::FinderMethods
86
86
 
87
87
  def exists_by_friendly_id?(id)
88
- super || joins(:slugs).where(slug_history_clause(id)).exists?
88
+ super || joins(:slugs).where(slug_history_clause(parse_friendly_id(id))).exists?
89
89
  end
90
90
 
91
91
  private
92
92
 
93
93
  def first_by_friendly_id(id)
94
- super || slug_table_record(id)
94
+ super || slug_table_record(parse_friendly_id(id))
95
95
  end
96
96
 
97
97
  def slug_table_record(id)
@@ -12,6 +12,10 @@ module FriendlyId
12
12
  return false if @config.reserved_words.include?(slug)
13
13
  end
14
14
 
15
+ if @config.treat_numeric_as_conflict && purely_numeric_slug?(slug)
16
+ return false
17
+ end
18
+
15
19
  !@scope.exists_by_friendly_id?(slug)
16
20
  end
17
21
 
@@ -19,5 +23,16 @@ module FriendlyId
19
23
  candidates.each { |c| return c if available?(c) }
20
24
  nil
21
25
  end
26
+
27
+ private
28
+
29
+ def purely_numeric_slug?(slug)
30
+ return false unless slug
31
+ begin
32
+ Integer(slug, 10).to_s == slug.to_s
33
+ rescue ArgumentError, TypeError
34
+ false
35
+ end
36
+ end
22
37
  end
23
38
  end
@@ -155,6 +155,24 @@ module FriendlyId
155
155
  # You can change this with the {FriendlyId::Slugged::Configuration#sequence_separator
156
156
  # sequence_separator} configuration option.
157
157
  #
158
+ # #### Avoiding Numeric Slugs
159
+ #
160
+ # Purely numeric slugs like "123" can create ambiguity in Rails routing - they could
161
+ # be interpreted as either a friendly slug or a database ID. To prevent this, you can
162
+ # configure FriendlyId to treat numeric slugs as conflicts and add a UUID suffix:
163
+ #
164
+ # class Product < ActiveRecord::Base
165
+ # extend FriendlyId
166
+ # friendly_id :sku, use: :slugged
167
+ # friendly_id_config.treat_numeric_as_conflict = true
168
+ # end
169
+ #
170
+ # product = Product.create! sku: "123"
171
+ # product.slug #=> "123-f9f3789a-daec-4156-af1d-fab81aa16ee5"
172
+ #
173
+ # This only affects purely numeric slugs. Alphanumeric slugs like "product-123"
174
+ # or "abc123" will work normally.
175
+ #
158
176
  # #### Providing Your Own Slug Processing Method
159
177
  #
160
178
  # You can override {FriendlyId::Slugged#normalize_friendly_id} in your model for
@@ -386,7 +404,7 @@ module FriendlyId
386
404
  # {FriendlyId::Configuration FriendlyId::Configuration}.
387
405
  module Configuration
388
406
  attr_writer :slug_column, :slug_limit, :sequence_separator
389
- attr_accessor :slug_generator_class
407
+ attr_accessor :slug_generator_class, :treat_numeric_as_conflict
390
408
 
391
409
  # Makes FriendlyId use the slug column for querying.
392
410
  # @return String The slug column.
@@ -1,3 +1,3 @@
1
1
  module FriendlyId
2
- VERSION = "5.5.1".freeze
2
+ VERSION = "5.6.0".freeze
3
3
  end
@@ -1,5 +1,17 @@
1
1
  require "helper"
2
2
 
3
+ class Article < ActiveRecord::Base
4
+ extend FriendlyId
5
+ friendly_id :name, use: :slugged
6
+ end
7
+
8
+ class ArticleWithNumericPrevention < ActiveRecord::Base
9
+ self.table_name = "articles"
10
+ extend FriendlyId
11
+ friendly_id :name, use: :slugged
12
+ friendly_id_config.treat_numeric_as_conflict = true
13
+ end
14
+
3
15
  class NumericSlugTest < TestCaseClass
4
16
  include FriendlyId::Test
5
17
  include FriendlyId::Test::Shared::Core
@@ -28,4 +40,61 @@ class NumericSlugTest < TestCaseClass
28
40
  assert model_class.friendly.exists?("123")
29
41
  end
30
42
  end
43
+
44
+ test "should prevent purely numeric slugs when treat_numeric_as_conflict is enabled" do
45
+ transaction do
46
+ record = ArticleWithNumericPrevention.create! name: "123"
47
+ refute_equal "123", record.slug
48
+ assert_match(/\A123-[0-9a-f-]{36}\z/, record.slug)
49
+ end
50
+ end
51
+
52
+ test "should allow non-numeric slugs when treat_numeric_as_conflict is enabled" do
53
+ transaction do
54
+ record = ArticleWithNumericPrevention.create! name: "abc123"
55
+ assert_equal "abc123", record.slug
56
+ end
57
+ end
58
+
59
+ test "should allow alphanumeric slugs when treat_numeric_as_conflict is enabled" do
60
+ transaction do
61
+ record = ArticleWithNumericPrevention.create! name: "product-123"
62
+ assert_equal "product-123", record.slug
63
+ end
64
+ end
65
+
66
+ test "should handle zero as numeric when treat_numeric_as_conflict is enabled" do
67
+ transaction do
68
+ record = ArticleWithNumericPrevention.create! name: "0"
69
+ refute_equal "0", record.slug
70
+ assert_match(/\A0-[0-9a-f-]{36}\z/, record.slug)
71
+ end
72
+ end
73
+
74
+ test "should handle large numbers as numeric when treat_numeric_as_conflict is enabled" do
75
+ transaction do
76
+ record = ArticleWithNumericPrevention.create! name: "999999999"
77
+ refute_equal "999999999", record.slug
78
+ assert_match(/\A999999999-[0-9a-f-]{36}\z/, record.slug)
79
+ end
80
+ end
81
+
82
+ test "should find records with UUID-suffixed numeric slugs when treat_numeric_as_conflict is enabled" do
83
+ transaction do
84
+ record = ArticleWithNumericPrevention.create! name: "123"
85
+ found = ArticleWithNumericPrevention.friendly.find(record.slug)
86
+ assert_equal record.id, found.id
87
+ end
88
+ end
89
+
90
+ test "should resolve conflicts between multiple numeric slugs when treat_numeric_as_conflict is enabled" do
91
+ transaction do
92
+ record1 = ArticleWithNumericPrevention.create! name: "456"
93
+ record2 = ArticleWithNumericPrevention.create! name: "456"
94
+
95
+ refute_equal record1.slug, record2.slug
96
+ assert_match(/\A456-[0-9a-f-]{36}\z/, record1.slug)
97
+ assert_match(/\A456-[0-9a-f-]{36}\z/, record2.slug)
98
+ end
99
+ end
31
100
  end
metadata CHANGED
@@ -1,43 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: friendly_id
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.5.1
4
+ version: 5.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Norman Clarke
8
8
  - Philip Arndt
9
- autorequire:
10
9
  bindir: bin
11
- cert_chain:
12
- - |
13
- -----BEGIN CERTIFICATE-----
14
- MIIEljCCAv6gAwIBAgIBATANBgkqhkiG9w0BAQsFADBRMREwDwYDVQQDDAhydWJ5
15
- Z2VtczERMA8GCgmSJomT8ixkARkWAXAxFTATBgoJkiaJk/IsZAEZFgVhcm5kdDES
16
- MBAGCgmSJomT8ixkARkWAmlvMB4XDTIyMTExNTIyMjQzMFoXDTIzMTExNTIyMjQz
17
- MFowUTERMA8GA1UEAwwIcnVieWdlbXMxETAPBgoJkiaJk/IsZAEZFgFwMRUwEwYK
18
- CZImiZPyLGQBGRYFYXJuZHQxEjAQBgoJkiaJk/IsZAEZFgJpbzCCAaIwDQYJKoZI
19
- hvcNAQEBBQADggGPADCCAYoCggGBAMPq2bIEO+BmmBeuidSySK7xlL/LWBHzyDxw
20
- EMgWsHqJMDZYCZI4WoWbSTSSLrp5zPXLWN0hB23u3dxFp4RVygTTZkc8k05mteab
21
- fdREGgdcP+mY8/ASQSvb1VW6IM51Srgjy1SK0S5Qf3HAiQafFvRsxRkY0SWyth24
22
- ne/7HG667vHQ1+t0VFl8twupJE9S8p2zgX3eZBl2yRNm/kE5reUsOLvmS58Iri/X
23
- 9tnz0SGkzrKkim9OIByq7XkFLL3oaIyfbBVgOWilM5pvxj/xNuRH7EIM6aE3q0UZ
24
- xo7o9u9Iz2zApDEjejByPjxWAhLuP3v3bJyinRFE1rO47lEM/s6KM/6YooxvgYIN
25
- miYYFRtTj9nmKEMv6+h1mZ1/ZwqStTTRh/T90T65dcgsoqRd0JNvpNRjFrYH5cuj
26
- QZWMl/FE6AADm0GXa34ZiTQx3Wx2ctqJLFak8+imPwes90nCpiYmgaZpwBI+shjU
27
- AddbPDNq+EoxPMWTh0Er3w76fywOWQIDAQABo3kwdzAJBgNVHRMEAjAAMAsGA1Ud
28
- DwQEAwIEsDAdBgNVHQ4EFgQUxRJaTQZmtkN8FKUWVHKc2riND18wHgYDVR0RBBcw
29
- FYETcnVieWdlbXNAcC5hcm5kdC5pbzAeBgNVHRIEFzAVgRNydWJ5Z2Vtc0BwLmFy
30
- bmR0LmlvMA0GCSqGSIb3DQEBCwUAA4IBgQBSRGMkZ2dvJ0LSjFz+rIt3G3AZMbKD
31
- tjaaQRuC9rOkrl3Rml6h9j7cHYiM0wkTjXneFNySc8jWmM/jKnxiiUfUK9r1XL4n
32
- 71tz39+MD2lIpLVVEQ69MIoUseppNUTCg0mNghSDYNwISMD/hoWwbJudBi56DbhE
33
- xkulLbw8qtcEE+iilIKibe+eJF4platKScsOA7d1AuilR1/S245UzeqwwyI52/xK
34
- dfoP928X9Tb/48+83lWUgAgCQOd6WdfCpgQ5H6R90lc8L7OfuDR/vgcmSOTsNVgG
35
- 1TC3b2FISS0p0qfZsiS7BXh+ARoBKLXsV1a7WR36X0dUpajvk+zzBGrFCdbW43Gx
36
- wmJzIksYnf9Ktg8Ux+FLcRBGw4qEIyWvqmS0obB1Hke68rTg0uNTFcKXsNw33XF5
37
- fw1cbj95g7OPe0feGK8+afXh/L38vx/hIIOGlUEZ+HaWL2Dki/7vRGvda8dfOpG5
38
- bJfaoyKbVsrK+gGKFJv860zsO8lg6BGLsUw=
39
- -----END CERTIFICATE-----
40
- date: 2023-11-12 00:00:00.000000000 Z
10
+ cert_chain: []
11
+ date: 1980-01-02 00:00:00.000000000 Z
41
12
  dependencies:
42
13
  - !ruby/object:Gem::Dependency
43
14
  name: activerecord
@@ -170,7 +141,7 @@ description: FriendlyId is the "Swiss Army bulldozer" of slugging and permalink
170
141
  as if they were numeric ids.
171
142
  email:
172
143
  - norman@njclarke.com
173
- - p@arndt.io
144
+ - gems@p.arndt.io
174
145
  executables: []
175
146
  extensions: []
176
147
  extra_rdoc_files: []
@@ -179,6 +150,7 @@ files:
179
150
  - ".github/FUNDING.yml"
180
151
  - ".github/dependabot.yml"
181
152
  - ".github/stale.yml"
153
+ - ".github/workflows/release.yml"
182
154
  - ".github/workflows/test.yml"
183
155
  - ".gitignore"
184
156
  - ".yardopts"
@@ -190,12 +162,13 @@ files:
190
162
  - Rakefile
191
163
  - UPGRADING.md
192
164
  - bench.rb
193
- - certs/parndt.pem
194
165
  - friendly_id.gemspec
195
- - gemfiles/Gemfile.rails-5.2.rb
196
166
  - gemfiles/Gemfile.rails-6.0.rb
197
167
  - gemfiles/Gemfile.rails-6.1.rb
198
168
  - gemfiles/Gemfile.rails-7.0.rb
169
+ - gemfiles/Gemfile.rails-7.1.rb
170
+ - gemfiles/Gemfile.rails-7.2.rb
171
+ - gemfiles/Gemfile.rails-8.0.rb
199
172
  - guide.rb
200
173
  - lib/friendly_id.rb
201
174
  - lib/friendly_id/.gitattributes
@@ -243,7 +216,6 @@ homepage: https://github.com/norman/friendly_id
243
216
  licenses:
244
217
  - MIT
245
218
  metadata: {}
246
- post_install_message:
247
219
  rdoc_options: []
248
220
  require_paths:
249
221
  - lib
@@ -258,8 +230,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
258
230
  - !ruby/object:Gem::Version
259
231
  version: '0'
260
232
  requirements: []
261
- rubygems_version: 3.4.22
262
- signing_key:
233
+ rubygems_version: 3.6.9
263
234
  specification_version: 4
264
235
  summary: A comprehensive slugging and pretty-URL plugin.
265
236
  test_files: []
checksums.yaml.gz.sig DELETED
Binary file
data/certs/parndt.pem DELETED
@@ -1,27 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIEljCCAv6gAwIBAgIBATANBgkqhkiG9w0BAQsFADBRMREwDwYDVQQDDAhydWJ5
3
- Z2VtczERMA8GCgmSJomT8ixkARkWAXAxFTATBgoJkiaJk/IsZAEZFgVhcm5kdDES
4
- MBAGCgmSJomT8ixkARkWAmlvMB4XDTIyMTExNTIyMjQzMFoXDTIzMTExNTIyMjQz
5
- MFowUTERMA8GA1UEAwwIcnVieWdlbXMxETAPBgoJkiaJk/IsZAEZFgFwMRUwEwYK
6
- CZImiZPyLGQBGRYFYXJuZHQxEjAQBgoJkiaJk/IsZAEZFgJpbzCCAaIwDQYJKoZI
7
- hvcNAQEBBQADggGPADCCAYoCggGBAMPq2bIEO+BmmBeuidSySK7xlL/LWBHzyDxw
8
- EMgWsHqJMDZYCZI4WoWbSTSSLrp5zPXLWN0hB23u3dxFp4RVygTTZkc8k05mteab
9
- fdREGgdcP+mY8/ASQSvb1VW6IM51Srgjy1SK0S5Qf3HAiQafFvRsxRkY0SWyth24
10
- ne/7HG667vHQ1+t0VFl8twupJE9S8p2zgX3eZBl2yRNm/kE5reUsOLvmS58Iri/X
11
- 9tnz0SGkzrKkim9OIByq7XkFLL3oaIyfbBVgOWilM5pvxj/xNuRH7EIM6aE3q0UZ
12
- xo7o9u9Iz2zApDEjejByPjxWAhLuP3v3bJyinRFE1rO47lEM/s6KM/6YooxvgYIN
13
- miYYFRtTj9nmKEMv6+h1mZ1/ZwqStTTRh/T90T65dcgsoqRd0JNvpNRjFrYH5cuj
14
- QZWMl/FE6AADm0GXa34ZiTQx3Wx2ctqJLFak8+imPwes90nCpiYmgaZpwBI+shjU
15
- AddbPDNq+EoxPMWTh0Er3w76fywOWQIDAQABo3kwdzAJBgNVHRMEAjAAMAsGA1Ud
16
- DwQEAwIEsDAdBgNVHQ4EFgQUxRJaTQZmtkN8FKUWVHKc2riND18wHgYDVR0RBBcw
17
- FYETcnVieWdlbXNAcC5hcm5kdC5pbzAeBgNVHRIEFzAVgRNydWJ5Z2Vtc0BwLmFy
18
- bmR0LmlvMA0GCSqGSIb3DQEBCwUAA4IBgQBSRGMkZ2dvJ0LSjFz+rIt3G3AZMbKD
19
- tjaaQRuC9rOkrl3Rml6h9j7cHYiM0wkTjXneFNySc8jWmM/jKnxiiUfUK9r1XL4n
20
- 71tz39+MD2lIpLVVEQ69MIoUseppNUTCg0mNghSDYNwISMD/hoWwbJudBi56DbhE
21
- xkulLbw8qtcEE+iilIKibe+eJF4platKScsOA7d1AuilR1/S245UzeqwwyI52/xK
22
- dfoP928X9Tb/48+83lWUgAgCQOd6WdfCpgQ5H6R90lc8L7OfuDR/vgcmSOTsNVgG
23
- 1TC3b2FISS0p0qfZsiS7BXh+ARoBKLXsV1a7WR36X0dUpajvk+zzBGrFCdbW43Gx
24
- wmJzIksYnf9Ktg8Ux+FLcRBGw4qEIyWvqmS0obB1Hke68rTg0uNTFcKXsNw33XF5
25
- fw1cbj95g7OPe0feGK8+afXh/L38vx/hIIOGlUEZ+HaWL2Dki/7vRGvda8dfOpG5
26
- bJfaoyKbVsrK+gGKFJv860zsO8lg6BGLsUw=
27
- -----END CERTIFICATE-----
data.tar.gz.sig DELETED
Binary file
metadata.gz.sig DELETED
Binary file