chef-vault 2.2.1 → 2.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +28 -2
- data/Changelog.md +5 -0
- data/DEMO.md +53 -0
- data/KNIFE_EXAMPLES.md +5 -0
- data/README.md +6 -2
- data/Rakefile +2 -1
- data/bin/chef-vault +0 -0
- data/chef-vault.gemspec +15 -14
- data/lib/chef-vault/exceptions.rb +2 -1
- data/lib/chef-vault/version.rb +1 -1
- data/lib/chef/knife/vault_admins.rb +40 -0
- data/lib/chef/knife/vault_create.rb +4 -3
- data/lib/chef/knife/vault_refresh.rb +60 -0
- data/lib/chef/knife/vault_update.rb +4 -3
- metadata +39 -12
- checksums.yaml +0 -15
data/.gitignore
CHANGED
@@ -1,4 +1,30 @@
|
|
1
|
+
" from https://github.com/github/gitignore/blob/master/Ruby.gitignore
|
1
2
|
*.gem
|
3
|
+
*.rbc
|
4
|
+
/.config
|
5
|
+
/coverage/
|
6
|
+
/InstalledFiles
|
7
|
+
/pkg/
|
8
|
+
/spec/reports/
|
9
|
+
/test/tmp/
|
10
|
+
/test/version_tmp/
|
11
|
+
/tmp/
|
12
|
+
|
13
|
+
## Documentation cache and generated files:
|
14
|
+
/.yardoc/
|
15
|
+
/_yardoc/
|
16
|
+
/doc/
|
17
|
+
/rdoc/
|
18
|
+
|
19
|
+
## Environment normalisation:
|
20
|
+
/.bundle/
|
21
|
+
/lib/bundler/man/
|
22
|
+
|
23
|
+
# for a library or gem, you might want to ignore these files since the code is
|
24
|
+
# intended to run in multiple environments; otherwise, check them in:
|
2
25
|
Gemfile.lock
|
3
|
-
|
4
|
-
.
|
26
|
+
.ruby-version
|
27
|
+
.ruby-gemset
|
28
|
+
|
29
|
+
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
30
|
+
.rvmrc
|
data/Changelog.md
CHANGED
data/DEMO.md
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# A Short Demo of the Magic of Chef-Vault
|
2
|
+
|
3
|
+
##Set up the magic show from a shell on your own workstation
|
4
|
+
|
5
|
+
###Put the bunny in the hat
|
6
|
+
|
7
|
+
echo "bunny" > tophat
|
8
|
+
|
9
|
+
###Put the hat in the magic show
|
10
|
+
|
11
|
+
export assistant=aug24 #Change this to your chef id
|
12
|
+
export role=magician #Change this to the role you need to pass the secret to
|
13
|
+
|
14
|
+
knife vault create magicshow hat \ #Create a hat object in a data bag called magicshow
|
15
|
+
--mode client \ #Talk to the chef server rather than local
|
16
|
+
--file tophat \ #Use the hat (file) we put the bunny in
|
17
|
+
--search "role:${role}" \ #Encrypted for all *current* nodes with the magician role
|
18
|
+
--admins "${assistant}" #Encrypted for the assistant
|
19
|
+
|
20
|
+
###Check the magic show is on the chef server
|
21
|
+
|
22
|
+
knife data bag list
|
23
|
+
|
24
|
+
###Check the hat is there (and that nobody can see what's in it)
|
25
|
+
knife data bag show magicshow hat
|
26
|
+
|
27
|
+
###Check you can see what's in it
|
28
|
+
knife vault show magicshow hat file-content --mode client
|
29
|
+
|
30
|
+
##'Hop' on to a node with a role of 'magician'
|
31
|
+
|
32
|
+
###Install required software
|
33
|
+
sudo apt-get install ruby-dev --yes
|
34
|
+
sudo gem install chef-vault --no-ri --no-rdoc
|
35
|
+
|
36
|
+
###Get the bunny back out of the hat!
|
37
|
+
sudo chef-shell --client <<EOF
|
38
|
+
require 'chef-vault'
|
39
|
+
puts ChefVault::Item.load('magicshow', 'hat')['file-content']
|
40
|
+
EOF
|
41
|
+
|
42
|
+
If you are on a node which is not a magician, an exception will be thrown,
|
43
|
+
and the node cannot see what is in the hat.
|
44
|
+
|
45
|
+
#Finally, do a disappearing act.
|
46
|
+
|
47
|
+
###Make the hat disappear...
|
48
|
+
knife vault delete magicshow hat --mode client
|
49
|
+
|
50
|
+
###Make the entire magic show disappear...
|
51
|
+
knife data bag delete magicshow
|
52
|
+
|
53
|
+
###Thank you!
|
data/KNIFE_EXAMPLES.md
CHANGED
@@ -142,6 +142,11 @@ Rotate the shared key for all vaults and items. The shared key is that which is
|
|
142
142
|
|
143
143
|
knife vault rotate all keys
|
144
144
|
|
145
|
+
### refresh
|
146
|
+
This command reads the search_query in the vault item, performs the search, and reapplies the results.
|
147
|
+
|
148
|
+
knife vault refresh VAULT ITEM
|
149
|
+
|
145
150
|
### global options
|
146
151
|
<table>
|
147
152
|
<tr>
|
data/README.md
CHANGED
@@ -24,10 +24,13 @@ See KNIFE_EXAMPLES.md for examples of commands
|
|
24
24
|
|
25
25
|
### knife.rb
|
26
26
|
To set 'client' as the default mode, add the following line to the knife.rb file.
|
27
|
-
|
27
|
+
|
28
|
+
```knife[:vault_mode] = 'client'```
|
28
29
|
|
29
30
|
To set the default list of admins for creating and updating vaults, add the following line to the knife.rb file.
|
30
|
-
|
31
|
+
|
32
|
+
```knife[:vault_admins] = [ 'example-alice', 'example-bob', 'example-carol' ]```
|
33
|
+
|
31
34
|
(These values can be overridden on the command line by using -A)
|
32
35
|
|
33
36
|
NOTE: chef-vault 1.0 knife commands are not supported! Please use chef-vault 2.0 commands.
|
@@ -36,6 +39,7 @@ NOTE: chef-vault 1.0 knife commands are not supported! Please use chef-vault 2.
|
|
36
39
|
|
37
40
|
knife vault create VAULT ITEM VALUES
|
38
41
|
knife vault edit VAULT ITEM
|
42
|
+
knife vault refresh VAULT ITEM
|
39
43
|
knife vault update VAULT ITEM VALUES
|
40
44
|
knife vault remove VAULT ITEM VALUES
|
41
45
|
knife vault delete VAULT ITEM
|
data/Rakefile
CHANGED
data/bin/chef-vault
CHANGED
File without changes
|
data/chef-vault.gemspec
CHANGED
@@ -14,28 +14,29 @@
|
|
14
14
|
# See the License for the specific language governing permissions and
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
|
-
$:.push File.expand_path(
|
18
|
-
require
|
17
|
+
$:.push File.expand_path('../lib', __FILE__)
|
18
|
+
require 'chef-vault/version'
|
19
19
|
|
20
20
|
Gem::Specification.new do |s|
|
21
|
-
s.name =
|
21
|
+
s.name = 'chef-vault'
|
22
22
|
s.version = ChefVault::VERSION
|
23
23
|
s.has_rdoc = true
|
24
|
-
s.authors = [
|
25
|
-
s.email = [
|
26
|
-
s.summary =
|
24
|
+
s.authors = ['Kevin Moser']
|
25
|
+
s.email = ['kevin.moser@nordstrom.com']
|
26
|
+
s.summary = 'Data encryption support for Chef using data bags'
|
27
27
|
s.description = s.summary
|
28
|
+
s.homepage = 'https://github.com/Nordstrom/chef-vault'
|
29
|
+
|
28
30
|
s.license = 'Apache License, v2.0'
|
29
31
|
|
30
32
|
s.files = `git ls-files`.split("\n")
|
31
|
-
s.
|
32
|
-
|
33
|
-
|
34
|
-
s.add_development_dependency 'rake'
|
35
|
-
s.add_development_dependency 'rspec'
|
33
|
+
s.require_paths = ['lib']
|
34
|
+
s.bindir = 'bin'
|
35
|
+
s.executables = %w( chef-vault )
|
36
36
|
|
37
|
-
s.
|
37
|
+
s.add_dependency 'chef', '>= 0.10.10'
|
38
38
|
|
39
|
-
s.
|
40
|
-
s.
|
39
|
+
s.add_development_dependency 'bundler', '~> 1.3'
|
40
|
+
s.add_development_dependency 'rake'
|
41
|
+
s.add_development_dependency 'rspec', '~> 2.14'
|
41
42
|
end
|
data/lib/chef-vault/version.rb
CHANGED
@@ -0,0 +1,40 @@
|
|
1
|
+
# Description: Chef-Vault VaultAdmins module
|
2
|
+
# Copyright 2014, Nordstrom, Inc.
|
3
|
+
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
|
16
|
+
require 'chef/knife'
|
17
|
+
require 'chef-vault'
|
18
|
+
|
19
|
+
class Chef
|
20
|
+
class Knife
|
21
|
+
module VaultAdmins
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def admins
|
26
|
+
config_admins = config[:admins]
|
27
|
+
vault_admins = Chef::Config[:knife][:vault_admins]
|
28
|
+
admin_array = [Chef::Config[:node_name]]
|
29
|
+
|
30
|
+
if config_admins
|
31
|
+
admin_array += [config_admins]
|
32
|
+
elsif vault_admins
|
33
|
+
admin_array += vault_admins
|
34
|
+
end
|
35
|
+
|
36
|
+
admin_array.join(',')
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# Description: Chef-Vault VaultCreate class
|
2
|
-
# Copyright
|
2
|
+
# Copyright 2014, Nordstrom, Inc.
|
3
3
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
5
|
# you may not use this file except in compliance with the License.
|
@@ -14,12 +14,14 @@
|
|
14
14
|
# limitations under the License.
|
15
15
|
|
16
16
|
require 'chef/knife/vault_base'
|
17
|
+
require 'chef/knife/vault_admins'
|
17
18
|
|
18
19
|
class Chef
|
19
20
|
class Knife
|
20
21
|
class VaultCreate < Knife
|
21
22
|
|
22
23
|
include Chef::Knife::VaultBase
|
24
|
+
include Chef::Knife::VaultAdmins
|
23
25
|
|
24
26
|
banner "knife vault create VAULT ITEM VALUES (options)"
|
25
27
|
|
@@ -47,7 +49,6 @@ class Chef
|
|
47
49
|
item = @name_args[1]
|
48
50
|
values = @name_args[2]
|
49
51
|
search = config[:search]
|
50
|
-
admins = config[:admins] || Chef::Config[:knife][:vault_admins].join(',')
|
51
52
|
json_file = config[:json]
|
52
53
|
file = config[:file]
|
53
54
|
|
@@ -71,7 +72,7 @@ class Chef
|
|
71
72
|
|
72
73
|
if file
|
73
74
|
vault_item["file-name"] = File.basename(file)
|
74
|
-
vault_item["file-content"] = File.open(file){ |
|
75
|
+
vault_item["file-content"] = File.open(file) { |f| f.read() }
|
75
76
|
end
|
76
77
|
else
|
77
78
|
vault_json = edit_data(Hash.new)
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# Description: Chef-Vault VaultReapply class
|
2
|
+
# Copyright 2013, Nordstrom, Inc.
|
3
|
+
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
|
16
|
+
require 'chef/knife/vault_base'
|
17
|
+
|
18
|
+
class Chef
|
19
|
+
class Knife
|
20
|
+
class VaultRefresh < Knife
|
21
|
+
|
22
|
+
include Chef::Knife::VaultBase
|
23
|
+
|
24
|
+
banner "knife vault refresh VAULT ITEM"
|
25
|
+
|
26
|
+
def run
|
27
|
+
vault = @name_args[0]
|
28
|
+
item = @name_args[1]
|
29
|
+
|
30
|
+
set_mode(config[:vault_mode])
|
31
|
+
|
32
|
+
if vault && item
|
33
|
+
begin
|
34
|
+
vault_item = ChefVault::Item.load(vault, item)
|
35
|
+
search = vault_item.search
|
36
|
+
|
37
|
+
unless search
|
38
|
+
raise ChefVault::Exceptions::SearchNotFound,
|
39
|
+
"#{vault}/#{item} does not have a stored search_query, "\
|
40
|
+
"probably because it was created with an older version "\
|
41
|
+
"of chef-vault. Use 'knife vault update' to update the "\
|
42
|
+
"databag with the search query."
|
43
|
+
end
|
44
|
+
|
45
|
+
vault_item.clients(search)
|
46
|
+
vault_item.save
|
47
|
+
rescue ChefVault::Exceptions::KeysNotFound,
|
48
|
+
ChefVault::Exceptions::ItemNotFound
|
49
|
+
|
50
|
+
raise ChefVault::Exceptions::ItemNotFound,
|
51
|
+
"#{vault}/#{item} does not exist, "\
|
52
|
+
"use 'knife vault create' to create."
|
53
|
+
end
|
54
|
+
else
|
55
|
+
show_usage
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# Description: Chef-Vault VaultUpdate class
|
2
|
-
# Copyright
|
2
|
+
# Copyright 2014, Nordstrom, Inc.
|
3
3
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
5
|
# you may not use this file except in compliance with the License.
|
@@ -14,12 +14,14 @@
|
|
14
14
|
# limitations under the License.
|
15
15
|
|
16
16
|
require 'chef/knife/vault_base'
|
17
|
+
require 'chef/knife/vault_admins'
|
17
18
|
|
18
19
|
class Chef
|
19
20
|
class Knife
|
20
21
|
class VaultUpdate < Knife
|
21
22
|
|
22
23
|
include Chef::Knife::VaultBase
|
24
|
+
include Chef::Knife::VaultAdmins
|
23
25
|
|
24
26
|
banner "knife vault update VAULT ITEM VALUES (options)"
|
25
27
|
|
@@ -47,7 +49,6 @@ class Chef
|
|
47
49
|
item = @name_args[1]
|
48
50
|
values = @name_args[2]
|
49
51
|
search = config[:search]
|
50
|
-
admins = config[:admins] || Chef::Config[:knife][:vault_admins].join(',')
|
51
52
|
json_file = config[:json]
|
52
53
|
file = config[:file]
|
53
54
|
|
@@ -63,7 +64,7 @@ class Chef
|
|
63
64
|
|
64
65
|
if file
|
65
66
|
vault_item["file-name"] = File.basename(file)
|
66
|
-
vault_item["file-content"] = File.open(file){ |
|
67
|
+
vault_item["file-content"] = File.open(file) { |f| f.read() }
|
67
68
|
end
|
68
69
|
|
69
70
|
vault_item.search(search) if search
|
metadata
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chef-vault
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.2
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Kevin Moser
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2014-
|
12
|
+
date: 2014-06-03 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: chef
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ! '>='
|
18
20
|
- !ruby/object:Gem::Version
|
@@ -20,13 +22,31 @@ dependencies:
|
|
20
22
|
type: :runtime
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
27
|
- - ! '>='
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: 0.10.10
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: bundler
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '1.3'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '1.3'
|
27
46
|
- !ruby/object:Gem::Dependency
|
28
47
|
name: rake
|
29
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
30
50
|
requirements:
|
31
51
|
- - ! '>='
|
32
52
|
- !ruby/object:Gem::Version
|
@@ -34,6 +54,7 @@ dependencies:
|
|
34
54
|
type: :development
|
35
55
|
prerelease: false
|
36
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
37
58
|
requirements:
|
38
59
|
- - ! '>='
|
39
60
|
- !ruby/object:Gem::Version
|
@@ -41,18 +62,20 @@ dependencies:
|
|
41
62
|
- !ruby/object:Gem::Dependency
|
42
63
|
name: rspec
|
43
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
44
66
|
requirements:
|
45
|
-
- -
|
67
|
+
- - ~>
|
46
68
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
69
|
+
version: '2.14'
|
48
70
|
type: :development
|
49
71
|
prerelease: false
|
50
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
51
74
|
requirements:
|
52
|
-
- -
|
75
|
+
- - ~>
|
53
76
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
55
|
-
description: Data encryption support for
|
77
|
+
version: '2.14'
|
78
|
+
description: Data encryption support for Chef using data bags
|
56
79
|
email:
|
57
80
|
- kevin.moser@nordstrom.com
|
58
81
|
executables:
|
@@ -65,6 +88,7 @@ files:
|
|
65
88
|
- .travis.yml
|
66
89
|
- CONTRIBUTING.md
|
67
90
|
- Changelog.md
|
91
|
+
- DEMO.md
|
68
92
|
- Gemfile
|
69
93
|
- KNIFE_EXAMPLES.md
|
70
94
|
- LICENSE
|
@@ -89,11 +113,13 @@ files:
|
|
89
113
|
- lib/chef/knife/encrypt_update.rb
|
90
114
|
- lib/chef/knife/mixin/compat.rb
|
91
115
|
- lib/chef/knife/mixin/helper.rb
|
116
|
+
- lib/chef/knife/vault_admins.rb
|
92
117
|
- lib/chef/knife/vault_base.rb
|
93
118
|
- lib/chef/knife/vault_create.rb
|
94
119
|
- lib/chef/knife/vault_decrypt.rb
|
95
120
|
- lib/chef/knife/vault_delete.rb
|
96
121
|
- lib/chef/knife/vault_edit.rb
|
122
|
+
- lib/chef/knife/vault_refresh.rb
|
97
123
|
- lib/chef/knife/vault_remove.rb
|
98
124
|
- lib/chef/knife/vault_rotate_all_keys.rb
|
99
125
|
- lib/chef/knife/vault_rotate_keys.rb
|
@@ -103,28 +129,29 @@ files:
|
|
103
129
|
- spec/item_keys_spec.rb
|
104
130
|
- spec/item_spec.rb
|
105
131
|
- spec/spec_helper.rb
|
106
|
-
homepage:
|
132
|
+
homepage: https://github.com/Nordstrom/chef-vault
|
107
133
|
licenses:
|
108
134
|
- Apache License, v2.0
|
109
|
-
metadata: {}
|
110
135
|
post_install_message:
|
111
136
|
rdoc_options: []
|
112
137
|
require_paths:
|
113
138
|
- lib
|
114
139
|
required_ruby_version: !ruby/object:Gem::Requirement
|
140
|
+
none: false
|
115
141
|
requirements:
|
116
142
|
- - ! '>='
|
117
143
|
- !ruby/object:Gem::Version
|
118
144
|
version: '0'
|
119
145
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
|
+
none: false
|
120
147
|
requirements:
|
121
148
|
- - ! '>='
|
122
149
|
- !ruby/object:Gem::Version
|
123
150
|
version: '0'
|
124
151
|
requirements: []
|
125
152
|
rubyforge_project:
|
126
|
-
rubygems_version:
|
153
|
+
rubygems_version: 1.8.23.2
|
127
154
|
signing_key:
|
128
|
-
specification_version:
|
129
|
-
summary: Data encryption support for
|
155
|
+
specification_version: 3
|
156
|
+
summary: Data encryption support for Chef using data bags
|
130
157
|
test_files: []
|
checksums.yaml
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
---
|
2
|
-
!binary "U0hBMQ==":
|
3
|
-
metadata.gz: !binary |-
|
4
|
-
ZGZkNTFmZjk4NGQxY2UwMjViZDI1MGM0NTczYWMxMDcyMWUxMGEwZQ==
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
MjA3MGY0OWY1N2NkMzA2MTNkOWY4OGUzZGQ2YmZmN2NhZDhlYjIwMg==
|
7
|
-
!binary "U0hBNTEy":
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
Y2Q2MTI4NGZhN2Y3ZDM0Y2JlNWFkZGQxMzEyMGQ2ZmI3NjU2N2I0MDE1NmRj
|
10
|
-
NzlhNGY2ODIyNmU4YjI2NDg5YjkxYTgxMzIwMzEzOWI2YWZhYzY5YTg5YWJj
|
11
|
-
ZGI4NTA3MGVjNGIyYzU0MzI5ZjE0N2EyZjhiNzgwNGIzY2FlNTE=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
YTVmMzRlNTY3NGE5YWY4NzNmMTkyYWRhYjRhNTY5NjQ4YjkwNTc1NzFkYmU2
|
14
|
-
MGY2OTM2ZjE1N2E1YzM0ZjkwOTM4MDFmZjIxOWU5ZWMwZGIyNDRkNTI3Mjlm
|
15
|
-
N2M4MWEzODIwZmE1YmY4NmQzNjhkNmE4OGIxNjg2NDc1MjEyNTk=
|