feedx 0.12.6 → 0.14.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.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +2 -49
  3. data/.golangci.yml +13 -0
  4. data/.rubocop.yml +8 -14
  5. data/.tool-versions +1 -0
  6. data/Gemfile +8 -0
  7. data/Gemfile.lock +54 -69
  8. data/Makefile +3 -3
  9. data/README.md +3 -1
  10. data/compression.go +29 -0
  11. data/compression_test.go +73 -61
  12. data/consumer.go +96 -152
  13. data/consumer_test.go +124 -59
  14. data/example_test.go +140 -0
  15. data/feedx.gemspec +3 -10
  16. data/feedx.go +16 -31
  17. data/feedx_ext_test.go +13 -3
  18. data/feedx_test.go +24 -24
  19. data/format.go +29 -19
  20. data/format_test.go +84 -56
  21. data/go.mod +12 -10
  22. data/go.sum +18 -142
  23. data/incremental.go +122 -0
  24. data/incremental_test.go +62 -0
  25. data/lib/feedx/cache/abstract.rb +3 -3
  26. data/lib/feedx/cache/value.rb +6 -6
  27. data/lib/feedx/compression/abstract.rb +2 -2
  28. data/lib/feedx/compression/gzip.rb +4 -4
  29. data/lib/feedx/consumer.rb +8 -8
  30. data/lib/feedx/format/abstract.rb +6 -6
  31. data/lib/feedx/format/json.rb +2 -2
  32. data/lib/feedx/format/protobuf.rb +6 -6
  33. data/lib/feedx/format.rb +1 -3
  34. data/lib/feedx/producer.rb +11 -11
  35. data/lib/feedx/stream.rb +2 -2
  36. data/lib/feedx.rb +2 -3
  37. data/manifest.go +65 -0
  38. data/producer.go +34 -137
  39. data/producer_test.go +46 -60
  40. data/reader.go +142 -41
  41. data/reader_test.go +86 -35
  42. data/scheduler.go +176 -0
  43. data/scheduler_test.go +128 -0
  44. data/writer.go +13 -13
  45. data/writer_test.go +61 -44
  46. metadata +15 -137
  47. data/ext/parquet/decoder.go +0 -170
  48. data/ext/parquet/decoder_test.go +0 -88
  49. data/ext/parquet/go.mod +0 -10
  50. data/ext/parquet/go.sum +0 -154
  51. data/ext/parquet/parquet.go +0 -78
  52. data/ext/parquet/parquet_test.go +0 -28
  53. data/ext/parquet/reader.go +0 -89
  54. data/ext/parquet/testdata/alltypes_plain.parquet +0 -0
  55. data/ext/parquet/types.go +0 -51
  56. data/lib/feedx/format/parquet.rb +0 -102
  57. data/spec/feedx/cache/memory_spec.rb +0 -23
  58. data/spec/feedx/cache/value_spec.rb +0 -19
  59. data/spec/feedx/compression/gzip_spec.rb +0 -17
  60. data/spec/feedx/compression/none_spec.rb +0 -15
  61. data/spec/feedx/compression_spec.rb +0 -19
  62. data/spec/feedx/consumer_spec.rb +0 -49
  63. data/spec/feedx/format/abstract_spec.rb +0 -21
  64. data/spec/feedx/format/json_spec.rb +0 -27
  65. data/spec/feedx/format/parquet_spec.rb +0 -30
  66. data/spec/feedx/format/protobuf_spec.rb +0 -23
  67. data/spec/feedx/format_spec.rb +0 -21
  68. data/spec/feedx/producer_spec.rb +0 -74
  69. data/spec/feedx/stream_spec.rb +0 -109
  70. data/spec/spec_helper.rb +0 -57
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: feedx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.6
4
+ version: 0.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Black Square Media Ltd
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2021-06-18 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: bfs
@@ -24,96 +23,6 @@ dependencies:
24
23
  - - ">="
25
24
  - !ruby/object:Gem::Version
26
25
  version: 0.8.0
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: pbio
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: rake
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: red-parquet
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '3.0'
76
- - - "<"
77
- - !ruby/object:Gem::Version
78
- version: '4.0'
79
- type: :development
80
- prerelease: false
81
- version_requirements: !ruby/object:Gem::Requirement
82
- requirements:
83
- - - ">="
84
- - !ruby/object:Gem::Version
85
- version: '3.0'
86
- - - "<"
87
- - !ruby/object:Gem::Version
88
- version: '4.0'
89
- - !ruby/object:Gem::Dependency
90
- name: rspec
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - ">="
94
- - !ruby/object:Gem::Version
95
- version: '0'
96
- type: :development
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - ">="
101
- - !ruby/object:Gem::Version
102
- version: '0'
103
- - !ruby/object:Gem::Dependency
104
- name: rubocop-bsm
105
- requirement: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - ">="
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
- type: :development
111
- prerelease: false
112
- version_requirements: !ruby/object:Gem::Requirement
113
- requirements:
114
- - - ">="
115
- - !ruby/object:Gem::Version
116
- version: '0'
117
26
  description: Use feeds to exchange data between (micro-)services.
118
27
  email:
119
28
  - info@blacksquaremedia.com
@@ -124,7 +33,9 @@ files:
124
33
  - ".editorconfig"
125
34
  - ".github/workflows/test.yml"
126
35
  - ".gitignore"
36
+ - ".golangci.yml"
127
37
  - ".rubocop.yml"
38
+ - ".tool-versions"
128
39
  - Gemfile
129
40
  - Gemfile.lock
130
41
  - LICENSE
@@ -135,15 +46,7 @@ files:
135
46
  - compression_test.go
136
47
  - consumer.go
137
48
  - consumer_test.go
138
- - ext/parquet/decoder.go
139
- - ext/parquet/decoder_test.go
140
- - ext/parquet/go.mod
141
- - ext/parquet/go.sum
142
- - ext/parquet/parquet.go
143
- - ext/parquet/parquet_test.go
144
- - ext/parquet/reader.go
145
- - ext/parquet/testdata/alltypes_plain.parquet
146
- - ext/parquet/types.go
49
+ - example_test.go
147
50
  - feedx.gemspec
148
51
  - feedx.go
149
52
  - feedx_ext_test.go
@@ -152,6 +55,8 @@ files:
152
55
  - format_test.go
153
56
  - go.mod
154
57
  - go.sum
58
+ - incremental.go
59
+ - incremental_test.go
155
60
  - internal/testdata/testdata.pb.go
156
61
  - internal/testdata/testdata.proto
157
62
  - lib/feedx.rb
@@ -167,36 +72,24 @@ files:
167
72
  - lib/feedx/format.rb
168
73
  - lib/feedx/format/abstract.rb
169
74
  - lib/feedx/format/json.rb
170
- - lib/feedx/format/parquet.rb
171
75
  - lib/feedx/format/protobuf.rb
172
76
  - lib/feedx/producer.rb
173
77
  - lib/feedx/pusher.rb
174
78
  - lib/feedx/stream.rb
79
+ - manifest.go
175
80
  - producer.go
176
81
  - producer_test.go
177
82
  - reader.go
178
83
  - reader_test.go
179
- - spec/feedx/cache/memory_spec.rb
180
- - spec/feedx/cache/value_spec.rb
181
- - spec/feedx/compression/gzip_spec.rb
182
- - spec/feedx/compression/none_spec.rb
183
- - spec/feedx/compression_spec.rb
184
- - spec/feedx/consumer_spec.rb
185
- - spec/feedx/format/abstract_spec.rb
186
- - spec/feedx/format/json_spec.rb
187
- - spec/feedx/format/parquet_spec.rb
188
- - spec/feedx/format/protobuf_spec.rb
189
- - spec/feedx/format_spec.rb
190
- - spec/feedx/producer_spec.rb
191
- - spec/feedx/stream_spec.rb
192
- - spec/spec_helper.rb
84
+ - scheduler.go
85
+ - scheduler_test.go
193
86
  - writer.go
194
87
  - writer_test.go
195
88
  homepage: https://github.com/bsm/feedx
196
89
  licenses:
197
90
  - Apache-2.0
198
- metadata: {}
199
- post_install_message:
91
+ metadata:
92
+ rubygems_mfa_required: 'true'
200
93
  rdoc_options: []
201
94
  require_paths:
202
95
  - lib
@@ -204,29 +97,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
204
97
  requirements:
205
98
  - - ">="
206
99
  - !ruby/object:Gem::Version
207
- version: '2.6'
100
+ version: '3.2'
208
101
  required_rubygems_version: !ruby/object:Gem::Requirement
209
102
  requirements:
210
103
  - - ">="
211
104
  - !ruby/object:Gem::Version
212
105
  version: '0'
213
106
  requirements: []
214
- rubygems_version: 3.1.4
215
- signing_key:
107
+ rubygems_version: 3.7.2
216
108
  specification_version: 4
217
109
  summary: Exchange data between components via feeds
218
- test_files:
219
- - spec/feedx/cache/memory_spec.rb
220
- - spec/feedx/cache/value_spec.rb
221
- - spec/feedx/compression/gzip_spec.rb
222
- - spec/feedx/compression/none_spec.rb
223
- - spec/feedx/compression_spec.rb
224
- - spec/feedx/consumer_spec.rb
225
- - spec/feedx/format/abstract_spec.rb
226
- - spec/feedx/format/json_spec.rb
227
- - spec/feedx/format/parquet_spec.rb
228
- - spec/feedx/format/protobuf_spec.rb
229
- - spec/feedx/format_spec.rb
230
- - spec/feedx/producer_spec.rb
231
- - spec/feedx/stream_spec.rb
232
- - spec/spec_helper.rb
110
+ test_files: []
@@ -1,170 +0,0 @@
1
- package parquet
2
-
3
- import (
4
- "encoding/binary"
5
- "fmt"
6
- "io"
7
- "reflect"
8
- "time"
9
-
10
- kpq "github.com/bsm/parquet-go/parquet"
11
- )
12
-
13
- type decoder struct {
14
- cols []*columnReader
15
- closers []io.Closer
16
- }
17
-
18
- func newDecoder(rs io.ReadSeeker, names []string, batchSize int) (*decoder, error) {
19
- file, err := kpq.FileFromReader(rs)
20
- if err != nil {
21
- return nil, err
22
- }
23
-
24
- // normalise column names
25
- if len(names) == 0 {
26
- for _, c := range file.Schema.Columns() {
27
- names = append(names, c.String())
28
- }
29
- }
30
-
31
- // normalise batch size
32
- if batchSize < 1 {
33
- batchSize = 1000
34
- }
35
-
36
- // initialise column buffers
37
- cols := make([]*columnReader, 0, len(names))
38
- for _, name := range names {
39
- col, ok := file.Schema.ColumnByName(name)
40
- if !ok {
41
- _ = file.Close()
42
- return nil, fmt.Errorf("column %q does not exist", name)
43
- }
44
- cols = append(cols, newColumnReader(file, col, batchSize))
45
- }
46
-
47
- return &decoder{cols: cols, closers: []io.Closer{file}}, nil
48
- }
49
-
50
- func (w *decoder) Decode(v interface{}) error {
51
- rv := reflect.ValueOf(v)
52
- rt := rv.Type()
53
- if rt.Kind() != reflect.Ptr {
54
- return fmt.Errorf("cannot decode non-pointer %s type", rt.String())
55
- }
56
-
57
- // field index by name
58
- fidx := cachedTypeFields(rt.Elem())
59
- elem := rv.Elem()
60
-
61
- for _, r := range w.cols {
62
- // next column value
63
- val, err := r.Next()
64
- if err != nil {
65
- return err
66
- }
67
-
68
- // skip if value is NULL
69
- if val == nil {
70
- continue
71
- }
72
-
73
- // set field if exists
74
- if fi, ok := fidx[r.Name()]; ok {
75
- fv := elem.Field(fi)
76
- if ok := setValue(fv, val); !ok {
77
- return fmt.Errorf("cannot assign value of type %T to %s", val, fv.Type())
78
- }
79
- }
80
- }
81
-
82
- return nil
83
- }
84
-
85
- func (w *decoder) Close() (err error) {
86
- for _, c := range w.closers {
87
- if e := c.Close(); e != nil {
88
- err = e
89
- }
90
- }
91
- return
92
- }
93
-
94
- // --------------------------------------------------------------------
95
-
96
- func setValue(rv reflect.Value, v interface{}) bool {
97
- if rv.Kind() == reflect.Ptr {
98
- if rv.IsNil() {
99
- if ev := reflect.New(rv.Type().Elem()); setValue(ev, v) {
100
- rv.Set(ev)
101
- return true
102
- }
103
- return false
104
- }
105
- return setValue(rv.Elem(), v)
106
- }
107
-
108
- switch vv := v.(type) {
109
- case bool:
110
- switch rv.Kind() {
111
- case reflect.Bool:
112
- rv.SetBool(vv)
113
- return true
114
- }
115
- case []byte:
116
- switch rv.Kind() {
117
- case reflect.String:
118
- rv.SetString(string(vv))
119
- return true
120
- case reflect.Slice:
121
- if rv.Type() == byteSliceType {
122
- rv.SetBytes(vv)
123
- return true
124
- }
125
- }
126
- case int, int8, int16, int32, int64:
127
- switch rv.Kind() {
128
- case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
129
- rv.SetInt(reflect.ValueOf(v).Int())
130
- return true
131
- case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
132
- rv.SetUint(uint64(reflect.ValueOf(v).Int()))
133
- return true
134
- }
135
- case uint, uint8, uint16, uint32, uint64:
136
- switch rv.Kind() {
137
- case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
138
- rv.SetInt(int64(reflect.ValueOf(v).Uint()))
139
- return true
140
- case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
141
- rv.SetUint(reflect.ValueOf(v).Uint())
142
- return true
143
- }
144
- case float32, float64:
145
- switch rv.Kind() {
146
- case reflect.Float32, reflect.Float64:
147
- rv.SetFloat(reflect.ValueOf(v).Float())
148
- return true
149
- }
150
- case kpq.Int96:
151
- if rt := rv.Type(); rt == timeType {
152
- ns := int64(binary.LittleEndian.Uint64(vv[:8]))
153
- jd := int64(binary.LittleEndian.Uint32(vv[8:]))
154
- ts := time.Unix((jd-2440588)*86400, ns)
155
- rv.Set(reflect.ValueOf(ts))
156
- return true
157
- } else if rt == int96Type {
158
- rv.Set(reflect.ValueOf(v))
159
- return true
160
- }
161
- }
162
-
163
- return false
164
- }
165
-
166
- var (
167
- byteSliceType = reflect.TypeOf(([]byte)(nil))
168
- int96Type = reflect.TypeOf(kpq.Int96{})
169
- timeType = reflect.TypeOf(time.Time{})
170
- )
@@ -1,88 +0,0 @@
1
- package parquet_test
2
-
3
- import (
4
- "bytes"
5
- "io"
6
- "io/ioutil"
7
- "os"
8
- "time"
9
-
10
- "github.com/bsm/feedx"
11
- "github.com/bsm/feedx/ext/parquet"
12
- . "github.com/bsm/ginkgo"
13
- . "github.com/bsm/gomega"
14
- )
15
-
16
- var _ = Describe("Decoder", func() {
17
- var subject feedx.FormatDecoder
18
- var fixture *os.File
19
-
20
- f32ptr := func(f float32) *float32 { return &f }
21
-
22
- BeforeEach(func() {
23
- var err error
24
- fixture, err = os.Open("testdata/alltypes_plain.parquet")
25
- Expect(err).NotTo(HaveOccurred())
26
-
27
- format := &parquet.Format{BatchSize: 3}
28
- subject, err = format.NewDecoder(fixture)
29
- Expect(err).NotTo(HaveOccurred())
30
- })
31
-
32
- AfterEach(func() {
33
- Expect(subject.Close()).To(Succeed())
34
- Expect(fixture.Close()).To(Succeed())
35
- })
36
-
37
- It("decodes", func() {
38
- v1 := new(mockStruct)
39
- Expect(subject.Decode(v1)).To(Succeed())
40
- Expect(v1).To(Equal(&mockStruct{
41
- ID: 4,
42
- Bool: true,
43
- Float: f32ptr(0),
44
- DateString: "03/01/09", ByteString: []byte("0"),
45
- Timestamp: time.Unix(1235865600, 0),
46
- }))
47
-
48
- v2 := new(mockStruct)
49
- Expect(subject.Decode(v2)).To(Succeed())
50
- Expect(v2).To(Equal(&mockStruct{
51
- ID: 5,
52
- TinyInt: 1, SmallUint: 1, StdInt: 1, BigInt: 10,
53
- Float: f32ptr(1.1), Double: 10.1,
54
- DateString: "03/01/09", ByteString: []byte("1"),
55
- Timestamp: time.Unix(1235865660, 0),
56
- }))
57
-
58
- Expect(subject.Decode(new(mockStruct))).To(Succeed()) // v3
59
- Expect(subject.Decode(new(mockStruct))).To(Succeed()) // v4
60
- Expect(subject.Decode(new(mockStruct))).To(Succeed()) // v5
61
-
62
- v6 := new(mockStruct)
63
- Expect(subject.Decode(v6)).To(Succeed())
64
- Expect(v6).To(Equal(&mockStruct{
65
- ID: 3,
66
- Bool: false,
67
- TinyInt: 1, SmallUint: 1, StdInt: 1, BigInt: 10,
68
- Float: f32ptr(1.1), Double: 10.1,
69
- DateString: "02/01/09", ByteString: []byte("1"),
70
- Timestamp: time.Unix(1233446460, 0),
71
- }))
72
-
73
- Expect(subject.Decode(new(mockStruct))).To(Succeed()) // v7
74
- Expect(subject.Decode(new(mockStruct))).To(Succeed()) // v8
75
-
76
- v9 := new(mockStruct)
77
- Expect(subject.Decode(v9)).To(MatchError(io.EOF))
78
- })
79
-
80
- It("opens from non-file readers", func() {
81
- bin, err := ioutil.ReadFile("testdata/alltypes_plain.parquet")
82
- Expect(err).NotTo(HaveOccurred())
83
-
84
- dec, err := new(parquet.Format).NewDecoder(bytes.NewReader(bin))
85
- Expect(err).NotTo(HaveOccurred())
86
- Expect(dec.Close()).To(Succeed())
87
- })
88
- })
data/ext/parquet/go.mod DELETED
@@ -1,10 +0,0 @@
1
- module github.com/bsm/feedx/ext/parquet
2
-
3
- go 1.15
4
-
5
- require (
6
- github.com/bsm/feedx v0.12.5
7
- github.com/bsm/ginkgo v1.16.1
8
- github.com/bsm/gomega v1.11.0
9
- github.com/bsm/parquet-go v0.0.0-20200904113737-792434824f00
10
- )
data/ext/parquet/go.sum DELETED
@@ -1,154 +0,0 @@
1
- cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
2
- github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
3
- github.com/bmatcuk/doublestar/v3 v3.0.0 h1:TQtVPlDnAYwcrVNB2JiGuMc++H5qzWZd9PhkNo5WyHI=
4
- github.com/bmatcuk/doublestar/v3 v3.0.0/go.mod h1:6PcTVMw80pCY1RVuoqu3V++99uQB3vsSYKPTd8AWA0k=
5
- github.com/bsm/bfs v0.11.3 h1:BTFCftgmuVZwwu6vyjhyKr/Pg1E+cZ5tLodj3wKxr94=
6
- github.com/bsm/bfs v0.11.3/go.mod h1:sUhBrbc9g0XThRRrT9hiinMhhKbkKIdhLkFljk4fuzM=
7
- github.com/bsm/feedx v0.12.5 h1:N751MFTRKRgoP5eG1S30EoUuHsI7aAxJ0aQZg+7xf/Y=
8
- github.com/bsm/feedx v0.12.5/go.mod h1:l5YNhFomuWy9du+8+hznXMH8Hug2qSMik7b5Vipcy58=
9
- github.com/bsm/ginkgo v1.16.0/go.mod h1:RabIZLzOCPghgHJKUqHZpqrQETA5AnF4aCSIYy5C1bk=
10
- github.com/bsm/ginkgo v1.16.1 h1:jp1v1dbmbGZDWmnGXDTN+XK3U1fTTNja9xYa7VBI0l0=
11
- github.com/bsm/ginkgo v1.16.1/go.mod h1:RabIZLzOCPghgHJKUqHZpqrQETA5AnF4aCSIYy5C1bk=
12
- github.com/bsm/gomega v1.11.0 h1:wg9DVGPETNZLIbMsseneMV1a7uo/x+wsCyNXdEcifDI=
13
- github.com/bsm/gomega v1.11.0/go.mod h1:JifAceMQ4crZIWYUKrlGcmbN3bqHogVTADMD2ATsbwk=
14
- github.com/bsm/parquet-go v0.0.0-20200904113737-792434824f00 h1:seSUCN95Kgv0mxmBUxx99faZYYQB4+TbE1Do6E5ZwI4=
15
- github.com/bsm/parquet-go v0.0.0-20200904113737-792434824f00/go.mod h1:7EU1rAae6Y67NlxAbr+Mbxxxc5AFGcxZCSW/vbybDLs=
16
- github.com/bsm/pbio v0.2.2 h1:Xdj5hQkS0K3kKc1NY6hoSWMvzpq0Mk5j8vcc7irslno=
17
- github.com/bsm/pbio v0.2.2/go.mod h1:3O4XQFoarlYalkGd+zMFfEUyalP8NBKkQ0Ta4IwhN4w=
18
- github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
19
- github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
20
- github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
21
- github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
22
- github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
23
- github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
24
- github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
25
- github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
26
- github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
27
- github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
28
- github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
29
- github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
30
- github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
31
- github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
32
- github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
33
- github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
34
- github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
35
- github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
36
- github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
37
- github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
38
- github.com/golang/protobuf v1.5.0 h1:LUVKkCeviFUMKqHa4tXIIij/lbhnMbP7Fn5wKdKkRh4=
39
- github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
40
- github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
41
- github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
42
- github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
43
- github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
44
- github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
45
- github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
46
- github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
47
- github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
48
- github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
49
- github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
50
- github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
51
- github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
52
- github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
53
- github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
54
- github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
55
- github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
56
- github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
57
- github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
58
- github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
59
- github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
60
- github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
61
- github.com/onsi/ginkgo v1.14.1 h1:jMU0WaQrP0a/YAEq8eJmJKjBoMs+pClEr1vDMlM/Do4=
62
- github.com/onsi/ginkgo v1.14.1/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
63
- github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
64
- github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
65
- github.com/onsi/gomega v1.10.2 h1:aY/nuoWlKJud2J6U0E3NWsjlg+0GtwXxgEqthRdzlcs=
66
- github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
67
- github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
68
- github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
69
- github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
70
- golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
71
- golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
72
- golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
73
- golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
74
- golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
75
- golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
76
- golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
77
- golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
78
- golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
79
- golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
80
- golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
81
- golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
82
- golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
83
- golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
84
- golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
85
- golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
86
- golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
87
- golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
88
- golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI=
89
- golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
90
- golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
91
- golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
92
- golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
93
- golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
94
- golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
95
- golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
96
- golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
97
- golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
98
- golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
99
- golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
100
- golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
101
- golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
102
- golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
103
- golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
104
- golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
105
- golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA=
106
- golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
107
- golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
108
- golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
109
- golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
110
- golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
111
- golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
112
- golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
113
- golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
114
- golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
115
- golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
116
- golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
117
- golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
118
- golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
119
- golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
120
- golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
121
- golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
122
- golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
123
- golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
124
- google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
125
- google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
126
- google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
127
- google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
128
- google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
129
- google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
130
- google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
131
- google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
132
- google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
133
- google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
134
- google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
135
- google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
136
- google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
137
- google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
138
- google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
139
- google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
140
- google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
141
- google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
142
- google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
143
- google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
144
- gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
145
- gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
146
- gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
147
- gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
148
- gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
149
- gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
150
- gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
151
- gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
152
- gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
153
- honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
154
- honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=