chore(deps): remove unused Go dependencies
Removed direct dependencies such as github.com/cockroachdb/pebble, github.com/go-chi/chi/v5, and github.com/gosuda/relaydns/sdk/go. Also pruned numerous indirect dependencies (e.g., prometheus, cockroachdb-related libs). Added golang.org/x/crypto to direct requires. This simplifies the module by eliminating unused packages.
lemon-mint committed
Oct 27, 2025 at 00:04 UTC
067d258f74cc4ca076eebc6a9b8e44f592d5ff70
3 files changed
+527
-242
RELAYSERVER.md
new
+525
@@ -0,0 +1,525 @@
1
+# RelayServer 상세 동작 문서
2
+
3
+## 개요
4
+
5
+RelayServer는 DNS 기반 P2P 프록시 레이어로, libp2p 위에 구축된 경량 서비스입니다. 이 서버는 클라이언트 간의 안전한 연결을 중개하고, 리스(lease) 관리, 암호화된 통신, 다양한 프로토콜 지원 등의 기능을 제공합니다.
6
+
7
+## 핵심 구성 요소
8
+
9
+### 1. RelayServer 구조체
10
+
11
+RelayServer는 시스템의 핵심 구조체로, 다음과 같은 주요 필드를 포함합니다:
12
+
13
+```go
14
+type RelayServer struct {
15
+ credential *cryptoops.Credential // 암호화 자격 증명
16
+ identity *rdsec.Identity // 서버 신원 정보
17
+ address []string // 서버 주소 목록
18
+
19
+ connidCounter int64 // 연결 ID 카운터
20
+ connections map[int64]*Connection // 활성 연결 맵
21
+ connectionsLock sync.RWMutex // 연결 맵 락
22
+
23
+ leaseConnections map[string]*Connection // 리스-연결 맵
24
+ leaseConnectionsLock sync.RWMutex // 리스-연결 맵 락
25
+
26
+ relayedConnections map[string][]*yamux.Stream // 릴레이된 연결 맵
27
+ relayedConnectionsLock sync.RWMutex // 릴레이된 연결 맵 락
28
+
29
+ leaseManager *LeaseManager // 리스 관리자
30
+
31
+ stopch chan struct{} // 종료 신호 채널
32
+ waitgroup sync.WaitGroup // 대기 그룹
33
+}
34
+```
35
+
36
+### 2. Connection 구조체
37
+
38
+각 클라이언트 연결을 나타내는 구조체입니다:
39
+
40
+```go
41
+type Connection struct {
42
+ conn io.ReadWriteCloser // 기본 연결
43
+ sess *yamux.Session // 다중화 세션
44
+
45
+ streams map[uint32]*yamux.Stream // 스트림 맵
46
+ streamsLock sync.Mutex // 스트림 맵 락
47
+}
48
+```
49
+
50
+### 3. LeaseManager
51
+
52
+리스(임대) 정보를 관리하는 컴포넌트로, 만료된 리스를 정리하고 리스 수명을 관리합니다:
53
+
54
+```go
55
+type LeaseManager struct {
56
+ leases map[string]*LeaseEntry // 리스 맵 (키: 신원 ID)
57
+ leasesLock sync.RWMutex // 리스 맵 락
58
+ stopCh chan struct{} // 종료 신호 채널
59
+ ttlInterval time.Duration // TTL 확인 간격
60
+}
61
+```
62
+
63
+## 주요 동작
64
+
65
+### 1. 서버 초기화
66
+
67
+서버는 `NewRelayServer` 함수로 초기화됩니다:
68
+
69
+```go
70
+func NewRelayServer(credential *cryptoops.Credential, address []string) *RelayServer
71
+```
72
+
73
+- 암호화 자격 증명과 주소 목록을 받아 RelayServer 인스턴스를 생성
74
+- 내부 맵들과 리스 관리자를 초기화
75
+- 30초 간격의 TTL 확인을 위한 리스 관리자 생성
76
+
77
+### 2. 연결 처리
78
+
79
+#### 2.1 새 연결 수락
80
+
81
+`HandleConnection` 메서드는 새로운 클라이언트 연결을 처리합니다:
82
+
83
+1. yamux 서버 세션을 생성
84
+2. 고유 연결 ID를 할당하고 연결 맵에 저장
85
+3. `handleConn` 고루틴을 시작하여 연결을 비동기적으로 처리
86
+
87
+#### 2.2 연결 관리
88
+
89
+`handleConn` 메서드는 연결의 수명 주기를 관리합니다:
90
+
91
+1. 세션에서 들어오는 스트림을 계속해서 수락
92
+2. 각 스트림에 대해 `handleStream` 고루틴을 시작
93
+3. 연결이 종료될 때 관련 리스를 정리하고 자원을 해제
94
+
95
+### 3. 스트림 처리
96
+
97
+`handleStream` 메서드는 개별 스트림의 요청을 처리합니다:
98
+
99
+1. 스트림에서 패킷을 읽음
100
+2. 패킷 타입에 따라 적절한 핸들러로 분기:
101
+ - `PACKET_TYPE_RELAY_INFO_REQUEST`: `handleRelayInfoRequest`
102
+ - `PACKET_TYPE_LEASE_UPDATE_REQUEST`: `handleLeaseUpdateRequest`
103
+ - `PACKET_TYPE_LEASE_DELETE_REQUEST`: `handleLeaseDeleteRequest`
104
+ - `PACKET_TYPE_CONNECTION_REQUEST`: `handleConnectionRequest`
105
+
106
+### 4. 리스 관리
107
+
108
+#### 4.1 리스 업데이트
109
+
110
+`handleLeaseUpdateRequest` 메서드는 리스 업데이트 요청을 처리합니다:
111
+
112
+1. 서명된 페이로드를 검증
113
+2. 리스 만료 시간을 확인
114
+3. 유효한 경우 리스를 업데이트하고 연결 맵에 등록
115
+4. 응답 코드를 반환
116
+
117
+#### 4.2 리스 삭제
118
+
119
+`handleLeaseDeleteRequest` 메서드는 리스 삭제 요청을 처리합니다:
120
+
121
+1. 서명된 페이로드를 검증
122
+2. 해당 리스를 리스 관리자에서 삭제
123
+3. 리스-연결 맵에서도 제거
124
+4. 응답 코드를 반환
125
+
126
+#### 4.3 리스 만료 관리
127
+
128
+LeaseManager는 백그라운드에서 만료된 리스를 정리합니다:
129
+
130
+1. `ttlWorker` 고루틴이 주기적으로 실행
131
+2. 만료된 리스를 자동으로 제거
132
+3. 특정 연결 ID와 관련된 모든 리스를 정리하는 기능 제공
133
+
134
+### 5. 연결 릴레이
135
+
136
+#### 5.1 연결 요청 처리
137
+
138
+`handleConnectionRequest` 메서드는 클라이언트 간의 연결 요청을 처리합니다:
139
+
140
+1. 대상 클라이언트의 리스가 존재하는지 확인
141
+2. 리스 소유자에게 연결 요청을 전달
142
+3. 요청이 수락되면 양방향 포워딩을 설정
143
+
144
+#### 5.2 양방향 포워딩 설정
145
+
146
+`setupBidirectionalForwarding` 메서드는 클라이언트 간의 데이터 포워딩을 설정합니다:
147
+
148
+1. 리스 소유자에게 새 데이터 스트림을 열고 초기화
149
+2. 클라이언트와 리스 소유자 간의 양방향 데이터 복사를 설정
150
+3. 연결이 종료될 때 관련 자원을 정리
151
+
152
+### 6. 암호화 및 보안
153
+
154
+#### 6.1 핸드셰이크 프로토콜
155
+
156
+X25519-ChaCha20Poly1305 기반의 핸드셰이크 프로토콜을 사용합니다:
157
+
158
+1. 클라이언트와 서버가 각각 임시 키 쌍 생성
159
+2. Ed25519로 서명된 초기화 메시지 교환
160
+3. 공유 비밀을 계산하고 세션 키를 파생
161
+4. ChaCha20Poly1305 AEAD 암호화 설정
162
+
163
+#### 6.2 서명 검증
164
+
165
+모든 인증된 요청은 Ed25519 서명을 통해 검증됩니다:
166
+
167
+1. `VerifySignedPayload` 함수로 서명 검증
168
+2. 신원 정보의 유효성 확인
169
+3. 타임스탬프 검증으로 리플레이 공격 방지
170
+
171
+### 7. 프로토콜 메시지
172
+
173
+#### 7.1 패킷 구조
174
+
175
+모든 통신은 다음과 같은 패킷 구조를 사용합니다:
176
+
177
+```protobuf
178
+message Packet {
179
+ PacketType type = 1; // 패킷 타입
180
+ bytes payload = 2; // 페이로드
181
+}
182
+```
183
+
184
+#### 7.2 패킷 타입
185
+
186
+- `PACKET_TYPE_RELAY_INFO_REQUEST/RESPONSE`: 릴레이 서버 정보 요청
187
+- `PACKET_TYPE_LEASE_UPDATE_REQUEST/RESPONSE`: 리스 업데이트 요청
188
+- `PACKET_TYPE_LEASE_DELETE_REQUEST/RESPONSE`: 리스 삭제 요청
189
+- `PACKET_TYPE_CONNECTION_REQUEST/RESPONSE`: 연결 요청
190
+
191
+#### 7.3 응답 코드
192
+
193
+- `RESPONSE_CODE_ACCEPTED`: 요청 수락
194
+- `RESPONSE_CODE_INVALID_EXPIRES`: 유효하지 않은 만료 시간
195
+- `RESPONSE_CODE_INVALID_IDENTITY`: 유효하지 않은 신원
196
+- `RESPONSE_CODE_INVALID_NAME`: 유효하지 않은 이름
197
+- `RESPONSE_CODE_INVALID_ALPN`: 유효하지 않은 ALPN
198
+- `RESPONSE_CODE_REJECTED`: 요청 거부
199
+
200
+### 8. HTTP 관리 인터페이스
201
+
202
+#### 8.1 관리 UI
203
+
204
+웹 기반 관리 인터페이스를 제공합니다:
205
+
206
+1. `/`: 서버 상태와 연결된 클라이언트 목록 표시
207
+2. `/peer/{peerID}/`: 특정 피어로의 HTTP 프록시
208
+3. `/hosts`: 연결된 호스트 목록 (JSON)
209
+4. `/health`: 서버 상태 확인 (JSON)
210
+
211
+#### 8.2 TCP 프록시
212
+
213
+선택적으로 원시 TCP 연결을 지원합니다:
214
+
215
+1. 지정된 포트에서 수신 대기
216
+2. 들어오는 연결을 선택된 피어로 프록시
217
+3. SSH 등의 TCP 기반 프로토콜 지원
218
+
219
+### 9. 서버 수명 주기
220
+
221
+#### 9.1 시작
222
+
223
+1. `Start` 메서드로 리스 관리자 시작
224
+2. 백그라운드 TTL 확인 고루틴 시작
225
+
226
+#### 9.2 종료
227
+
228
+1. `Stop` 메서드로 종료 신호 전송
229
+2. 리스 관리자 중지
230
+3. 모든 백그라운드 고루틴이 완료될 때까지 대기
231
+
232
+## 동작 흐름 예시
233
+
234
+### 1. 클라이언트 연결 및 리스 등록
235
+
236
+1. 클라이언트가 RelayServer에 연결
237
+2. yamux 세션이 설정되고 연결이 등록됨
238
+3. 클라이언트가 리스 업데이트 요청을 보냄
239
+4. 서버가 서명을 검증하고 리스를 등록
240
+5. 리스-연결 맵이 업데이트됨
241
+
242
+### 2. 클라이언트 간 연결 설정
243
+
244
+1. 클라이언트 A가 클라이언트 B로의 연결을 요청
245
+2. 서버가 클라이언트 B의 리스를 확인
246
+3. 서버가 클라이언트 B에게 연결 요청을 전달
247
+4. 클라이언트 B가 요청을 수락
248
+5. 서버가 양방향 포워딩을 설정
249
+6. 클라이언트 A와 B가 데이터를 교환
250
+
251
+### 3. 연결 종료 및 정리
252
+
253
+1. 클라이언트 연결이 종료됨
254
+2. 관련 리스가 자동으로 정리됨
255
+3. 릴레이된 연결이 모두 닫힘
256
+4. 연결 맵에서 항목이 제거됨
257
+
258
+## 보안 고려사항
259
+
260
+1. **암호화**: 모든 통신은 X25519-ChaCha20Poly1305로 암호화됨
261
+2. **인증**: Ed25519 서명으로 모든 요청의 출처를 검증
262
+3. **리플레이 방지**: 타임스탬프 검증으로 오래된 메시지 거부
263
+4. **신원 검증**: 공개 키에서 파생된 ID와 제공된 ID 일치 확인
264
+5. **세션 키**: 각 연결마다 고유한 세션 키를 사용
265
+
266
+## 암호화 상세
267
+
268
+### 1. 자격 증명(Credential) 시스템
269
+
270
+#### 1.1 자격 증명 생성
271
+
272
+```go
273
+type Credential struct {
274
+ privateKey ed25519.PrivateKey // Ed25519 개인 키
275
+ publicKey ed25519.PublicKey // Ed25519 공개 키
276
+ id string // 파생된 ID
277
+}
278
+```
279
+
280
+- `NewCredential()`: 새로운 Ed25519 키 쌍을 생성하고 자격 증명을 반환
281
+- `NewCredentialFromPrivateKey()`: 기존 개인 키로부터 자격 증명 생성
282
+
283
+#### 1.2 ID 파생
284
+
285
+```go
286
+func DeriveID(publickey ed25519.PublicKey) string
287
+```
288
+
289
+- HMAC-SHA256을 사용하여 공개 키로부터 고유 ID를 파생
290
+- 매직 문자열 "RDVERB_PROTOCOL_VER_01_SHA256_ID" 사용
291
+- Base32 인코딩으로 최종 ID 생성
292
+
293
+#### 1.3 서명 및 검증
294
+
295
+- `Sign(data []byte)`: Ed25519로 데이터에 서명
296
+- `Verify(data, sig []byte)`: Ed25519 서명 검증
297
+- 모든 인증된 메시지는 이 서명 메커니즘을 통해 검증됨
298
+
299
+### 2. 핸드셰이크 프로토콜 상세
300
+
301
+#### 2.1 클라이언트 핸드셰이크
302
+
303
+1. **임시 키 생성**: X25519 임시 키 쌍 생성
304
+2. **ClientInitPayload 생성**:
305
+ - 프로토콜 버전, nonce, 타임스탬프
306
+ - 클라이언트 신원 정보
307
+ - ALPN(Application-Layer Protocol Negotiation) 문자열
308
+ - 임시 공개 키
309
+3. **서명 및 전송**: 페이로드를 서명하여 서버로 전송
310
+4. **서버 응답 수신**: ServerInitPayload 수신 및 검증
311
+5. **세션 키 파생**: 클라이언트 암호화/복호화 키 파생
312
+6. **SecureConnection 생성**: 암호화된 연결 설정
313
+
314
+#### 2.2 서버 핸드셰이크
315
+
316
+1. **클라이언트 요청 수신**: ClientInitPayload 수신
317
+2. **클라이언트 검증**:
318
+ - 프로토콜 버전 확인
319
+ - 타임스탬프 유효성 검증 (30초 이내)
320
+ - ALPN 일치 확인
321
+ - 신원 정보 유효성 검증
322
+ - Ed25519 서명 검증
323
+3. **임시 키 생성**: X25519 임시 키 쌍 생성
324
+4. **ServerInitPayload 생성**: 클라이언트와 유사한 구조로 서버 정보 생성
325
+5. **세션 키 파생**: 서버 암호화/복호화 키 파생
326
+6. **응답 전송 및 SecureConnection 생성**
327
+
328
+#### 2.3 세션 키 파생
329
+
330
+```go
331
+// 클라이언트 측
332
+clientEncryptKey, clientDecryptKey, err := h.deriveClientSessionKeys(
333
+ clientPriv, clientPub, serverPub, clientNonce, serverNonce)
334
+
335
+// 서버 측
336
+serverEncryptKey, serverDecryptKey, err := h.deriveServerSessionKeys(
337
+ serverPriv, serverPub, clientPub, clientNonce, serverNonce)
338
+```
339
+
340
+- X25519를 사용하여 공유 비밀 계산
341
+- HKDF-SHA256을 사용하여 세션 키 파생
342
+- 클라이언트 암호화 키 = 서버 복호화 키
343
+- 서버 암호화 키 = 클라이언트 복호화 키
344
+- 솔트(salt)로 nonce 조합 사용:
345
+ - 클라이언트 암호화: `clientNonce + serverNonce`
346
+ - 서버 암호화: `serverNonce + clientNonce`
347
+- 정보 문자열(info): "RDSEC_KEY_CLIENT" / "RDSEC_KEY_SERVER"
348
+
349
+#### 2.4 암호화된 통신
350
+
351
+```go
352
+type SecureConnection struct {
353
+ conn io.ReadWriteCloser // 기본 연결
354
+ encryptor cipher.AEAD // 암호화기 (ChaCha20Poly1305)
355
+ decryptor cipher.AEAD // 복호화기 (ChaCha20Poly1305)
356
+ encryptNonce []byte // 암호화용 nonce
357
+ decryptNonce []byte // 복호화용 nonce
358
+}
359
+```
360
+
361
+- 각 메시지마다 nonce 증가 (간단한 바이트 단위 증가)
362
+- 길이 접두사가 있는 메시지 형식 사용:
363
+ ```
364
+ [4바이트 길이][데이터]
365
+ ```
366
+- 최대 패킷 크기: 64MB
367
+- EncryptedData protobuf 메시지로 암호화된 데이터 전송:
368
+ ```protobuf
369
+ message EncryptedData {
370
+ bytes nonce = 1; // 12바이트 nonce
371
+ bytes payload = 2; // 암호화된 페이로드
372
+ }
373
+ ```
374
+
375
+#### 2.5 길이 접두사 메시지 처리
376
+
377
+핸드셰이크와 암호화된 통신에서 사용되는 공통 메시지 형식:
378
+
379
+```go
380
+// 쓰기: [4바이트 길이][데이터]
381
+func writeLengthPrefixed(conn io.Writer, data []byte) error
382
+
383
+// 읽기: [4바이트 길이][데이터]
384
+func readLengthPrefixed(conn io.Reader) ([]byte, error)
385
+```
386
+
387
+- 빅 엔디안 형식으로 길이 인코딩
388
+- 패킷 크기 제한으로 메모리 과사용 방지
389
+- 전송 계층에서의 메시지 경계 명확화
390
+
391
+### 3. WebSocket 스트림 지원
392
+
393
+#### 3.1 wsStream 구조체
394
+
395
+```go
396
+type wsStream struct {
397
+ c *websocket.Conn // WebSocket 연결
398
+ currentReader io.Reader // 현재 읽기 리더
399
+}
400
+```
401
+
402
+#### 3.2 WebSocket 스트림 동작
403
+
404
+1. **읽기 동작**:
405
+ - WebSocket 메시지 리더를 가져옴
406
+ - 데이터를 버퍼로 읽음
407
+ - EOF 발생 시 다음 메시지를 위해 리더 재설정
408
+
409
+2. **쓰기 동작**:
410
+ - 바이너리 메시지 타입으로 데이터 전송
411
+ - WebSocket 프레이밍 자동 처리
412
+
413
+3. **닫기 동작**:
414
+ - WebSocket 연결 종료
415
+
416
+## 프로토콜 상세
417
+
418
+### 1. 패킷 형식
419
+
420
+모든 통신은 다음과 같은 구조를 따릅니다:
421
+
422
+```
423
+[4바이트 길이][패킷 데이터]
424
+```
425
+
426
+패킷 데이터는 protobuf로 직렬화된 `Packet` 메시지:
427
+
428
+```protobuf
429
+message Packet {
430
+ PacketType type = 1; // 패킷 타입
431
+ bytes payload = 2; // 페이로드
432
+}
433
+```
434
+
435
+### 2. 메시지 타입별 상세
436
+
437
+#### 2.1 릴레이 정보 요청/응답
438
+
439
+- **요청**: `RelayInfoRequest` (빈 메시지)
440
+- **응답**: `RelayInfoResponse`
441
+ ```protobuf
442
+ message RelayInfo {
443
+ rdsec.Identity identity = 1; // 서버 신원
444
+ repeated string address = 2; // 서버 주소 목록
445
+ repeated string leases = 3; // 활성 리스 ID 목록
446
+ }
447
+ ```
448
+
449
+#### 2.2 리스 업데이트 요청/응답
450
+
451
+- **요청**: `LeaseUpdateRequest` (SignedPayload로 래핑)
452
+ ```protobuf
453
+ message LeaseUpdateRequest {
454
+ Lease lease = 1; // 리스 정보
455
+ bytes nonce = 2; // nonce
456
+ int64 timestamp = 3; // 타임스탬프
457
+ }
458
+
459
+ message Lease {
460
+ rdsec.Identity identity = 1; // 클라이언트 신원
461
+ int64 expires = 2; // 만료 시간 (Unix 타임스탬프)
462
+ string name = 3; // 리스 이름
463
+ repeated string alpn = 4; // 지원 ALPN 목록
464
+ }
465
+ ```
466
+
467
+- **응답**: `LeaseUpdateResponse`
468
+ ```protobuf
469
+ message LeaseUpdateResponse {
470
+ ResponseCode code = 1; // 응답 코드
471
+ }
472
+ ```
473
+
474
+#### 2.3 리스 삭제 요청/응답
475
+
476
+- **요청**: `LeaseDeleteRequest` (SignedPayload로 래핑)
477
+ ```protobuf
478
+ message LeaseDeleteRequest {
479
+ rdsec.Identity identity = 1; // 삭제할 신원
480
+ bytes nonce = 2; // nonce
481
+ int64 timestamp = 3; // 타임스탬프
482
+ }
483
+ ```
484
+
485
+- **응답**: `LeaseDeleteResponse`
486
+ ```protobuf
487
+ message LeaseDeleteResponse {
488
+ ResponseCode code = 1; // 응답 코드
489
+ }
490
+ ```
491
+
492
+#### 2.4 연결 요청/응답
493
+
494
+- **요청**: `ConnectionRequest`
495
+ ```protobuf
496
+ message ConnectionRequest {
497
+ string lease_id = 1; // 대상 리스 ID
498
+ rdsec.Identity client_identity = 2; // 클라이언트 신원
499
+ }
500
+ ```
501
+
502
+- **응답**: `ConnectionResponse`
503
+ ```protobuf
504
+ message ConnectionResponse {
505
+ ResponseCode code = 1; // 응답 코드
506
+ }
507
+ ```
508
+
509
+## 성능 최적화
510
+
511
+1. **다중화**: yamux를 사용한 단일 연결 위의 다중 스트림
512
+2. **동시성**: 각 스트림과 연결을 독립적인 고루틴으로 처리
513
+3. **버퍼 풀**: bytebufferpool을 사용한 메모리 할당 최적화
514
+4. **락 최적화**: 읽기/쓰기 락을 사용한 동시 접근 최적화
515
+5. **암호화 최적화**: ChaCha20Poly1305를 사용한 고성능 암호화
516
+6. **네트워크 최적화**: 길이 접두사가 있는 바이너리 프로토콜 사용
517
+
518
+## 확장성 고려사항
519
+
520
+1. **프로토콜 버전 관리**: protobuf를 사용한 안전한 프로토콜 진화
521
+2. **ALPN 지원**: 다양한 애플리케이션 프로토콜 지원
522
+3. **플러그인 아키텍처**: 핸들러 기반의 확장 가능한 요청 처리
523
+4. **모듈형 설계**: 암호화, 리스 관리, 연결 관리의 분리
524
+
525
+이 문서는 RelayServer의 핵심 동작과 구조를 상세하게 설명하며, 시스템의 이해와 유지보수에 도움을 제공합니다.
\ No newline at end of file
go.mod
+2
-30
@@ -3,42 +3,24 @@ module github.com/gosuda/relaydns
3
go 1.25.3
4
5
require (
6
- github.com/cockroachdb/pebble v1.1.5
7
- github.com/go-chi/chi/v5 v5.2.3
6
github.com/gorilla/websocket v1.5.3
9
- github.com/gosuda/relaydns/sdk/go v0.0.0-20251022064639-15f1536463b4
7
github.com/hashicorp/yamux v0.1.2
8
github.com/libp2p/go-libp2p v0.44.0
9
github.com/planetscale/vtprotobuf v0.6.0
10
github.com/rs/zerolog v1.34.0
11
github.com/spf13/cobra v1.10.1
12
github.com/valyala/bytebufferpool v1.0.0
13
+ golang.org/x/crypto v0.41.0
14
google.golang.org/protobuf v1.36.6
15
)
16
17
require (
20
- github.com/DataDog/zstd v1.4.5 // indirect
21
- github.com/beorn7/perks v1.0.1 // indirect
22
- github.com/cespare/xxhash/v2 v2.3.0 // indirect
23
- github.com/cockroachdb/errors v1.11.3 // indirect
24
- github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect
25
- github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect
26
- github.com/cockroachdb/redact v1.1.5 // indirect
27
- github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect
18
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 // indirect
29
- github.com/getsentry/sentry-go v0.27.0 // indirect
30
- github.com/gogo/protobuf v1.3.2 // indirect
31
- github.com/golang/snappy v0.0.4 // indirect
32
- github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
19
+ github.com/google/go-cmp v0.7.0 // indirect
20
github.com/inconshreveable/mousetrap v1.1.0 // indirect
21
github.com/ipfs/go-cid v0.5.0 // indirect
35
- github.com/klauspost/compress v1.18.0 // indirect
22
github.com/klauspost/cpuid/v2 v2.2.10 // indirect
37
- github.com/kr/pretty v0.3.1 // indirect
38
- github.com/kr/text v0.2.0 // indirect
23
github.com/libp2p/go-buffer-pool v0.1.0 // indirect
40
- github.com/libp2p/go-libp2p-pubsub v0.15.0 // indirect
41
- github.com/libp2p/go-msgio v0.3.0 // indirect
24
github.com/mattn/go-colorable v0.1.13 // indirect
25
github.com/mattn/go-isatty v0.0.20 // indirect
26
github.com/minio/sha256-simd v1.0.1 // indirect
@@ -46,24 +28,14 @@ require (
28
github.com/multiformats/go-base32 v0.1.0 // indirect
29
github.com/multiformats/go-base36 v0.2.0 // indirect
30
github.com/multiformats/go-multiaddr v0.16.0 // indirect
49
- github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect
31
github.com/multiformats/go-multibase v0.2.0 // indirect
32
github.com/multiformats/go-multicodec v0.9.1 // indirect
33
github.com/multiformats/go-multihash v0.2.3 // indirect
34
github.com/multiformats/go-multistream v0.6.1 // indirect
35
github.com/multiformats/go-varint v0.0.7 // indirect
55
- github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
56
- github.com/pkg/errors v0.9.1 // indirect
57
- github.com/prometheus/client_golang v1.22.0 // indirect
58
- github.com/prometheus/client_model v0.6.2 // indirect
59
- github.com/prometheus/common v0.64.0 // indirect
60
- github.com/prometheus/procfs v0.16.1 // indirect
61
- github.com/rogpeppe/go-internal v1.10.0 // indirect
36
github.com/spaolacci/murmur3 v1.1.0 // indirect
37
github.com/spf13/pflag v1.0.9 // indirect
64
- golang.org/x/crypto v0.41.0 // indirect
38
golang.org/x/exp v0.0.0-20250606033433-dcc06ee1d476 // indirect
39
golang.org/x/sys v0.35.0 // indirect
67
- golang.org/x/text v0.28.0 // indirect
40
lukechampine.com/blake3 v1.4.1 // indirect
41
)
go.sum
-212
@@ -1,217 +1,59 @@
1
-github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ=
2
-github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo=
3
-github.com/benbjohnson/clock v1.3.5 h1:VvXlSJBzZpA/zum6Sj74hxwYI2DIxRWuNIoXAzHZz5o=
4
-github.com/benbjohnson/clock v1.3.5/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
5
-github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
6
-github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
7
-github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
8
-github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
9
-github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4=
10
-github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU=
11
-github.com/cockroachdb/errors v1.11.3 h1:5bA+k2Y6r+oz/6Z/RFlNeVCesGARKuC6YymtcDrbC/I=
12
-github.com/cockroachdb/errors v1.11.3/go.mod h1:m4UIW4CDjx+R5cybPsNrRbreomiFqt8o1h1wUVazSd8=
13
-github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce h1:giXvy4KSc/6g/esnpM7Geqxka4WSqI1SZc7sMJFd3y4=
14
-github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce/go.mod h1:9/y3cnZ5GKakj/H4y9r9GTjCvAFta7KLgSHPJJYc52M=
15
-github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE=
16
-github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs=
17
-github.com/cockroachdb/pebble v1.1.5 h1:5AAWCBWbat0uE0blr8qzufZP5tBjkRyy/jWe1QWLnvw=
18
-github.com/cockroachdb/pebble v1.1.5/go.mod h1:17wO9el1YEigxkP/YtV8NtCivQDgoCyBg5c4VR/eOWo=
19
-github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30=
20
-github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg=
21
-github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo=
22
-github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ=
1
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
2
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
25
-github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
3
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
4
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
28
-github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU=
29
-github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U=
5
github.com/decred/dcrd/crypto/blake256 v1.1.0 h1:zPMNGQCm0g4QTY27fOCorQW7EryeQ/U0x++OzVrdms8=
6
github.com/decred/dcrd/crypto/blake256 v1.1.0/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo=
7
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 h1:NMZiJj8QnKe1LgsbDayM4UoHwbvwDRwnI3hwNaAHRnc=
8
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0/go.mod h1:ZXNYxsqcloTdSy/rNShjYzMhyjf0LaoftYK0p+A3h40=
34
-github.com/flynn/noise v1.1.0 h1:KjPQoQCEFdZDiP03phOvGi11+SVVhBG2wOWAorLsstg=
35
-github.com/flynn/noise v1.1.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag=
36
-github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk=
37
-github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY=
38
-github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps=
39
-github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY=
40
-github.com/go-chi/chi/v5 v5.2.3 h1:WQIt9uxdsAbgIYgid+BpYc+liqQZGMHRaUwp0JUcvdE=
41
-github.com/go-chi/chi/v5 v5.2.3/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops=
42
-github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
43
-github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
9
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
45
-github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
46
-github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
47
-github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
48
-github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
10
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
11
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
51
-github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
52
-github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
12
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
13
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
55
-github.com/gosuda/relaydns/sdk/go v0.0.0-20251022064639-15f1536463b4 h1:6Gmf+J6VuKE9DObZnviKL3AldnZROMecDpq/8g9kDTM=
56
-github.com/gosuda/relaydns/sdk/go v0.0.0-20251022064639-15f1536463b4/go.mod h1:NSKO/60gyDV/dOQlPNCB1fZbTehHVu2YcnUfWKSELpk=
57
-github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
58
-github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
14
github.com/hashicorp/yamux v0.1.2 h1:XtB8kyFOyHXYVFnwT5C3+Bdo8gArse7j2AQ0DA0Uey8=
15
github.com/hashicorp/yamux v0.1.2/go.mod h1:C+zze2n6e/7wshOZep2A70/aQU6QBRWJO/G6FT1wIns=
61
-github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc=
62
-github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8=
16
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
17
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
18
github.com/ipfs/go-cid v0.5.0 h1:goEKKhaGm0ul11IHA7I6p1GmKz8kEYniqFopaB5Otwg=
19
github.com/ipfs/go-cid v0.5.0/go.mod h1:0L7vmeNXpQpUS9vt+yEARkJ8rOg43DF3iPgn4GIN0mk=
67
-github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus=
68
-github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc=
69
-github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk=
70
-github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk=
71
-github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
72
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
73
-github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
74
-github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
20
github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE=
21
github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
77
-github.com/koron/go-ssdp v0.0.6 h1:Jb0h04599eq/CY7rB5YEqPS83HmRfHP2azkxMN2rFtU=
78
-github.com/koron/go-ssdp v0.0.6/go.mod h1:0R9LfRJGek1zWTjN3JUNlm5INCDYGpRDfAptnct63fI=
79
-github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
80
-github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
81
-github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
82
-github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
22
github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8=
23
github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg=
85
-github.com/libp2p/go-flow-metrics v0.2.0 h1:EIZzjmeOE6c8Dav0sNv35vhZxATIXWZg6j/C08XmmDw=
86
-github.com/libp2p/go-flow-metrics v0.2.0/go.mod h1:st3qqfu8+pMfh+9Mzqb2GTiwrAGjIPszEjZmtksN8Jc=
24
github.com/libp2p/go-libp2p v0.44.0 h1:5Gtt8OrF8yiXmH+Mx4+/iBeFRMK1TY3a8OrEBDEqAvs=
25
github.com/libp2p/go-libp2p v0.44.0/go.mod h1:NovCojezAt4dnDd4fH048K7PKEqH0UFYYqJRjIIu8zc=
89
-github.com/libp2p/go-libp2p-asn-util v0.4.1 h1:xqL7++IKD9TBFMgnLPZR6/6iYhawHKHl950SO9L6n94=
90
-github.com/libp2p/go-libp2p-asn-util v0.4.1/go.mod h1:d/NI6XZ9qxw67b4e+NgpQexCIiFYJjErASrYW4PFDN8=
91
-github.com/libp2p/go-libp2p-pubsub v0.15.0 h1:cG7Cng2BT82WttmPFMi50gDNV+58K626m/wR00vGL1o=
92
-github.com/libp2p/go-libp2p-pubsub v0.15.0/go.mod h1:lr4oE8bFgQaifRcoc2uWhWWiK6tPdOEKpUuR408GFN4=
93
-github.com/libp2p/go-libp2p-testing v0.12.0 h1:EPvBb4kKMWO29qP4mZGyhVzUyR25dvfUIK5WDu6iPUA=
94
-github.com/libp2p/go-libp2p-testing v0.12.0/go.mod h1:KcGDRXyN7sQCllucn1cOOS+Dmm7ujhfEyXQL5lvkcPg=
95
-github.com/libp2p/go-msgio v0.3.0 h1:mf3Z8B1xcFN314sWX+2vOTShIE0Mmn2TXn3YCUQGNj0=
96
-github.com/libp2p/go-msgio v0.3.0/go.mod h1:nyRM819GmVaF9LX3l03RMh10QdOroF++NBbxAb0mmDM=
97
-github.com/libp2p/go-netroute v0.3.0 h1:nqPCXHmeNmgTJnktosJ/sIef9hvwYCrsLxXmfNks/oc=
98
-github.com/libp2p/go-netroute v0.3.0/go.mod h1:Nkd5ShYgSMS5MUKy/MU2T57xFoOKvvLR92Lic48LEyA=
99
-github.com/libp2p/go-reuseport v0.4.0 h1:nR5KU7hD0WxXCJbmw7r2rhRYruNRl2koHw8fQscQm2s=
100
-github.com/libp2p/go-reuseport v0.4.0/go.mod h1:ZtI03j/wO5hZVDFo2jKywN6bYKWLOy8Se6DrI2E1cLU=
101
-github.com/libp2p/go-yamux/v5 v5.0.1 h1:f0WoX/bEF2E8SbE4c/k1Mo+/9z0O4oC/hWEA+nfYRSg=
102
-github.com/libp2p/go-yamux/v5 v5.0.1/go.mod h1:en+3cdX51U0ZslwRdRLrvQsdayFt3TSUKvBGErzpWbU=
103
-github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk=
104
-github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU=
26
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
27
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
28
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
29
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
30
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
31
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
111
-github.com/miekg/dns v1.1.66 h1:FeZXOS3VCVsKnEAd+wBkjMC3D2K+ww66Cq3VnCINuJE=
112
-github.com/miekg/dns v1.1.66/go.mod h1:jGFzBsSNbJw6z1HYut1RKBKHA9PBdxeHrZG8J+gC2WE=
113
-github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc=
114
-github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b/go.mod h1:lxPUiZwKoFL8DUUmalo2yJJUCxbPKtm8OKfqr2/FTNU=
115
-github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc=
116
-github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc/go.mod h1:cGKTAVKx4SxOuR/czcZ/E2RSJ3sfHs8FpHhQ5CWMf9s=
117
-github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ=
118
-github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=
32
github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM=
33
github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8=
121
-github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
34
github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o=
35
github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
36
github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE=
37
github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI=
38
github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0=
39
github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4=
128
-github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo=
40
github.com/multiformats/go-multiaddr v0.16.0 h1:oGWEVKioVQcdIOBlYM8BH1rZDWOGJSqr9/BKl6zQ4qc=
41
github.com/multiformats/go-multiaddr v0.16.0/go.mod h1:JSVUmXDjsVFiW7RjIFMP7+Ev+h1DTbiJgVeTV/tcmP0=
131
-github.com/multiformats/go-multiaddr-dns v0.4.1 h1:whi/uCLbDS3mSEUMb1MsoT4uzUeZB0N32yzufqS0i5M=
132
-github.com/multiformats/go-multiaddr-dns v0.4.1/go.mod h1:7hfthtB4E4pQwirrz+J0CcDUfbWzTqEzVyYKKIKpgkc=
133
-github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E=
134
-github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo=
42
github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g=
43
github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk=
44
github.com/multiformats/go-multicodec v0.9.1 h1:x/Fuxr7ZuR4jJV4Os5g444F7xC4XmyUaT/FWtE+9Zjo=
45
github.com/multiformats/go-multicodec v0.9.1/go.mod h1:LLWNMtyV5ithSBUo3vFIMaeDy+h3EbkMTek1m+Fybbo=
139
-github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew=
46
github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7BFvVU9RSh+U=
47
github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM=
48
github.com/multiformats/go-multistream v0.6.1 h1:4aoX5v6T+yWmc2raBHsTvzmFhOI8WVOer28DeBBEYdQ=
49
github.com/multiformats/go-multistream v0.6.1/go.mod h1:ksQf6kqHAb6zIsyw7Zm+gAuVo57Qbq84E27YlYqavqw=
50
github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8=
51
github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU=
146
-github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
147
-github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
148
-github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0=
149
-github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y=
150
-github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4=
151
-github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
152
-github.com/pion/datachannel v1.5.10 h1:ly0Q26K1i6ZkGf42W7D4hQYR90pZwzFOjTq5AuCKk4o=
153
-github.com/pion/datachannel v1.5.10/go.mod h1:p/jJfC9arb29W7WrxyKbepTU20CFgyx5oLo8Rs4Py/M=
154
-github.com/pion/dtls/v2 v2.2.12 h1:KP7H5/c1EiVAAKUmXyCzPiQe5+bCJrpOeKg/L05dunk=
155
-github.com/pion/dtls/v2 v2.2.12/go.mod h1:d9SYc9fch0CqK90mRk1dC7AkzzpwJj6u2GU3u+9pqFE=
156
-github.com/pion/dtls/v3 v3.0.6 h1:7Hkd8WhAJNbRgq9RgdNh1aaWlZlGpYTzdqjy9x9sK2E=
157
-github.com/pion/dtls/v3 v3.0.6/go.mod h1:iJxNQ3Uhn1NZWOMWlLxEEHAN5yX7GyPvvKw04v9bzYU=
158
-github.com/pion/ice/v4 v4.0.10 h1:P59w1iauC/wPk9PdY8Vjl4fOFL5B+USq1+xbDcN6gT4=
159
-github.com/pion/ice/v4 v4.0.10/go.mod h1:y3M18aPhIxLlcO/4dn9X8LzLLSma84cx6emMSu14FGw=
160
-github.com/pion/interceptor v0.1.40 h1:e0BjnPcGpr2CFQgKhrQisBU7V3GXK6wrfYrGYaU6Jq4=
161
-github.com/pion/interceptor v0.1.40/go.mod h1:Z6kqH7M/FYirg3frjGJ21VLSRJGBXB/KqaTIrdqnOic=
162
-github.com/pion/logging v0.2.3 h1:gHuf0zpoh1GW67Nr6Gj4cv5Z9ZscU7g/EaoC/Ke/igI=
163
-github.com/pion/logging v0.2.3/go.mod h1:z8YfknkquMe1csOrxK5kc+5/ZPAzMxbKLX5aXpbpC90=
164
-github.com/pion/mdns v0.0.12 h1:CiMYlY+O0azojWDmxdNr7ADGrnZ+V6Ilfner+6mSVK8=
165
-github.com/pion/mdns/v2 v2.0.7 h1:c9kM8ewCgjslaAmicYMFQIde2H9/lrZpjBkN8VwoVtM=
166
-github.com/pion/mdns/v2 v2.0.7/go.mod h1:vAdSYNAT0Jy3Ru0zl2YiW3Rm/fJCwIeM0nToenfOJKA=
167
-github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA=
168
-github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8=
169
-github.com/pion/rtcp v1.2.15 h1:LZQi2JbdipLOj4eBjK4wlVoQWfrZbh3Q6eHtWtJBZBo=
170
-github.com/pion/rtcp v1.2.15/go.mod h1:jlGuAjHMEXwMUHK78RgX0UmEJFV4zUKOFHR7OP+D3D0=
171
-github.com/pion/rtp v1.8.19 h1:jhdO/3XhL/aKm/wARFVmvTfq0lC/CvN1xwYKmduly3c=
172
-github.com/pion/rtp v1.8.19/go.mod h1:bAu2UFKScgzyFqvUKmbvzSdPr+NGbZtv6UB2hesqXBk=
173
-github.com/pion/sctp v1.8.39 h1:PJma40vRHa3UTO3C4MyeJDQ+KIobVYRZQZ0Nt7SjQnE=
174
-github.com/pion/sctp v1.8.39/go.mod h1:cNiLdchXra8fHQwmIoqw0MbLLMs+f7uQ+dGMG2gWebE=
175
-github.com/pion/sdp/v3 v3.0.13 h1:uN3SS2b+QDZnWXgdr69SM8KB4EbcnPnPf2Laxhty/l4=
176
-github.com/pion/sdp/v3 v3.0.13/go.mod h1:88GMahN5xnScv1hIMTqLdu/cOcUkj6a9ytbncwMCq2E=
177
-github.com/pion/srtp/v3 v3.0.6 h1:E2gyj1f5X10sB/qILUGIkL4C2CqK269Xq167PbGCc/4=
178
-github.com/pion/srtp/v3 v3.0.6/go.mod h1:BxvziG3v/armJHAaJ87euvkhHqWe9I7iiOy50K2QkhY=
179
-github.com/pion/stun v0.6.1 h1:8lp6YejULeHBF8NmV8e2787BogQhduZugh5PdhDyyN4=
180
-github.com/pion/stun v0.6.1/go.mod h1:/hO7APkX4hZKu/D0f2lHzNyvdkTGtIy3NDmLR7kSz/8=
181
-github.com/pion/stun/v3 v3.0.0 h1:4h1gwhWLWuZWOJIJR9s2ferRO+W3zA/b6ijOI6mKzUw=
182
-github.com/pion/stun/v3 v3.0.0/go.mod h1:HvCN8txt8mwi4FBvS3EmDghW6aQJ24T+y+1TKjB5jyU=
183
-github.com/pion/transport/v2 v2.2.10 h1:ucLBLE8nuxiHfvkFKnkDQRYWYfp8ejf4YBOPfaQpw6Q=
184
-github.com/pion/transport/v2 v2.2.10/go.mod h1:sq1kSLWs+cHW9E+2fJP95QudkzbK7wscs8yYgQToO5E=
185
-github.com/pion/transport/v3 v3.0.7 h1:iRbMH05BzSNwhILHoBoAPxoB9xQgOaJk+591KC9P1o0=
186
-github.com/pion/transport/v3 v3.0.7/go.mod h1:YleKiTZ4vqNxVwh77Z0zytYi7rXHl7j6uPLGhhz9rwo=
187
-github.com/pion/turn/v4 v4.0.2 h1:ZqgQ3+MjP32ug30xAbD6Mn+/K4Sxi3SdNOTFf+7mpps=
188
-github.com/pion/turn/v4 v4.0.2/go.mod h1:pMMKP/ieNAG/fN5cZiN4SDuyKsXtNTr0ccN7IToA1zs=
189
-github.com/pion/webrtc/v4 v4.1.2 h1:mpuUo/EJ1zMNKGE79fAdYNFZBX790KE7kQQpLMjjR54=
190
-github.com/pion/webrtc/v4 v4.1.2/go.mod h1:xsCXiNAmMEjIdFxAYU0MbB3RwRieJsegSB2JZsGN+8U=
191
-github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
192
-github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
52
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
53
github.com/planetscale/vtprotobuf v0.6.0 h1:nBeETjudeJ5ZgBHUz1fVHvbqUKnYOXNhsIEabROxmNA=
54
github.com/planetscale/vtprotobuf v0.6.0/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
55
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
56
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
198
-github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q=
199
-github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0=
200
-github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=
201
-github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE=
202
-github.com/prometheus/common v0.64.0 h1:pdZeA+g617P7oGv1CzdTzyeShxAGrTBsolKNOLQPGO4=
203
-github.com/prometheus/common v0.64.0/go.mod h1:0gZns+BLRQ3V6NdaerOhMbwwRbNh9hkGINtQAsP5GS8=
204
-github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg=
205
-github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is=
206
-github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI=
207
-github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg=
208
-github.com/quic-go/quic-go v0.55.0 h1:zccPQIqYCXDt5NmcEabyYvOnomjs8Tlwl7tISjJh9Mk=
209
-github.com/quic-go/quic-go v0.55.0/go.mod h1:DR51ilwU1uE164KuWXhinFcKWGlEjzys2l8zUl5Ss1U=
210
-github.com/quic-go/webtransport-go v0.9.0 h1:jgys+7/wm6JarGDrW+lD/r9BGqBAmqY/ssklE09bA70=
211
-github.com/quic-go/webtransport-go v0.9.0/go.mod h1:4FUYIiUc75XSsF6HShcLeXXYZJ9AGwo/xh3L8M/P1ao=
212
-github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
213
-github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
214
-github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
57
github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0=
58
github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY=
59
github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ=
@@ -226,69 +68,15 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf
68
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
69
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
70
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
229
-github.com/wlynxg/anet v0.0.5 h1:J3VJGi1gvo0JwZ/P1/Yc/8p63SoW98B5dHkYDmpgvvU=
230
-github.com/wlynxg/anet v0.0.5/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA=
231
-github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
232
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
233
-go.uber.org/dig v1.19.0 h1:BACLhebsYdpQ7IROQ1AGPjrXcP5dF80U3gKoFzbaq/4=
234
-go.uber.org/dig v1.19.0/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE=
235
-go.uber.org/fx v1.24.0 h1:wE8mruvpg2kiiL1Vqd0CC+tr0/24XIB10Iwp2lLWzkg=
236
-go.uber.org/fx v1.24.0/go.mod h1:AmDeGyS+ZARGKM4tlH4FY2Jr63VjbEDJHtqXTGP5hbo=
237
-go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
238
-go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
239
-go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko=
240
-go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o=
241
-go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
242
-go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
243
-go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
244
-go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
245
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
246
-golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
247
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
248
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
71
golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
72
golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
73
golang.org/x/exp v0.0.0-20250606033433-dcc06ee1d476 h1:bsqhLWFR6G6xiQcb+JoGqdKdRU6WzPWmK8E0jxTjzo4=
74
golang.org/x/exp v0.0.0-20250606033433-dcc06ee1d476/go.mod h1:3//PLf8L/X+8b4vuAfHzxeRUl04Adcb341+IGKfnqS8=
253
-golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
254
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
255
-golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ=
256
-golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc=
257
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
258
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
259
-golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
260
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
261
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
262
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
263
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
264
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
265
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
266
-golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
267
-golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
268
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
269
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
270
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
75
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
76
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
77
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
78
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
79
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
276
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
277
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
278
-golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
279
-golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
280
-golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
281
-golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
282
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
283
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
284
-golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
285
-golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
286
-golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
287
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
288
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
289
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
290
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
291
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
80
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
81
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
82
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=