@peerbit/pubsub 4.1.4 → 5.0.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 (46) hide show
  1. package/README.md +23 -20
  2. package/dist/benchmark/fanout-tree-sim-lib.d.ts +201 -0
  3. package/dist/benchmark/fanout-tree-sim-lib.d.ts.map +1 -0
  4. package/dist/benchmark/fanout-tree-sim-lib.js +1225 -0
  5. package/dist/benchmark/fanout-tree-sim-lib.js.map +1 -0
  6. package/dist/benchmark/fanout-tree-sim.d.ts +11 -0
  7. package/dist/benchmark/fanout-tree-sim.d.ts.map +1 -0
  8. package/dist/benchmark/fanout-tree-sim.js +521 -0
  9. package/dist/benchmark/fanout-tree-sim.js.map +1 -0
  10. package/dist/benchmark/index.d.ts +6 -0
  11. package/dist/benchmark/index.d.ts.map +1 -1
  12. package/dist/benchmark/index.js +38 -80
  13. package/dist/benchmark/index.js.map +1 -1
  14. package/dist/benchmark/pubsub-topic-sim-lib.d.ts +82 -0
  15. package/dist/benchmark/pubsub-topic-sim-lib.d.ts.map +1 -0
  16. package/dist/benchmark/pubsub-topic-sim-lib.js +625 -0
  17. package/dist/benchmark/pubsub-topic-sim-lib.js.map +1 -0
  18. package/dist/benchmark/pubsub-topic-sim.d.ts +9 -0
  19. package/dist/benchmark/pubsub-topic-sim.d.ts.map +1 -0
  20. package/dist/benchmark/pubsub-topic-sim.js +116 -0
  21. package/dist/benchmark/pubsub-topic-sim.js.map +1 -0
  22. package/dist/benchmark/sim/bench-utils.d.ts +25 -0
  23. package/dist/benchmark/sim/bench-utils.d.ts.map +1 -0
  24. package/dist/benchmark/sim/bench-utils.js +141 -0
  25. package/dist/benchmark/sim/bench-utils.js.map +1 -0
  26. package/dist/src/fanout-channel.d.ts +62 -0
  27. package/dist/src/fanout-channel.d.ts.map +1 -0
  28. package/dist/src/fanout-channel.js +114 -0
  29. package/dist/src/fanout-channel.js.map +1 -0
  30. package/dist/src/fanout-tree.d.ts +551 -0
  31. package/dist/src/fanout-tree.d.ts.map +1 -0
  32. package/dist/src/fanout-tree.js +4980 -0
  33. package/dist/src/fanout-tree.js.map +1 -0
  34. package/dist/src/index.d.ts +168 -39
  35. package/dist/src/index.d.ts.map +1 -1
  36. package/dist/src/index.js +1416 -457
  37. package/dist/src/index.js.map +1 -1
  38. package/dist/src/topic-root-control-plane.d.ts +43 -0
  39. package/dist/src/topic-root-control-plane.d.ts.map +1 -0
  40. package/dist/src/topic-root-control-plane.js +120 -0
  41. package/dist/src/topic-root-control-plane.js.map +1 -0
  42. package/package.json +8 -7
  43. package/src/fanout-channel.ts +150 -0
  44. package/src/fanout-tree.ts +6346 -0
  45. package/src/index.ts +1693 -591
  46. package/src/topic-root-control-plane.ts +160 -0
@@ -0,0 +1,551 @@
1
+ import { type Multiaddr } from "@multiformats/multiaddr";
2
+ import { DirectStream, type DirectStreamComponents, type DirectStreamOptions, type PeerStreams } from "@peerbit/stream";
3
+ import { DataMessage, type FanoutRouteTokenHint, type StreamEvents } from "@peerbit/stream-interface";
4
+ import { TopicRootControlPlane } from "./topic-root-control-plane.js";
5
+ export type FanoutTreeChannelId = {
6
+ root: string;
7
+ topic: string;
8
+ key: Uint8Array;
9
+ suffixKey: string;
10
+ };
11
+ export type FanoutTreeChannelRole = "root" | "node";
12
+ export type FanoutTreeStreamOptions = DirectStreamOptions & {
13
+ /**
14
+ * Optional RNG hook used for shuffling/join request ids.
15
+ *
16
+ * This is primarily intended for deterministic simulation harnesses.
17
+ */
18
+ random?: () => number;
19
+ /**
20
+ * Optional topic-root resolver for consumers (e.g. shared-log) that need to
21
+ * resolve a root when joining a channel without an explicit root.
22
+ *
23
+ * FanoutTree does not currently use this internally, but we expose it as a
24
+ * shared control-plane hook so applications do not need to hang root
25
+ * resolution off of a separate pubsub implementation.
26
+ */
27
+ topicRootControlPlane?: TopicRootControlPlane;
28
+ };
29
+ export type FanoutTreeChannelOptions = {
30
+ role: FanoutTreeChannelRole;
31
+ msgRate: number;
32
+ msgSize: number;
33
+ uploadLimitBps: number;
34
+ maxChildren: number;
35
+ /**
36
+ * Extra per-child overhead (bytes) to include when estimating upload usage.
37
+ *
38
+ * This should include stream/protocol overhead and any framing/signature/etc
39
+ * that is not part of `msgSize`.
40
+ */
41
+ uploadOverheadBytes?: number;
42
+ /**
43
+ * Token bucket burst window for upload shaping.
44
+ *
45
+ * Capacity = `uploadLimitBps * (uploadBurstMs/1000)`.
46
+ */
47
+ uploadBurstMs?: number;
48
+ bidPerByte?: number;
49
+ allowKick?: boolean;
50
+ /**
51
+ * Enable bounded pull-repair (tree-first delivery, parent-based backfill).
52
+ *
53
+ * Defaults to `true`. Set to `false` to disable caching/repair logic for the channel.
54
+ */
55
+ repair?: boolean;
56
+ repairWindowMessages?: number;
57
+ /**
58
+ * How far back (in messages) we will attempt to repair missing sequences.
59
+ *
60
+ * Defaults to `repairWindowMessages` (no extra pruning). For "live" workloads you
61
+ * may want to set this lower so repair doesn't waste work on stale data.
62
+ */
63
+ repairMaxBackfillMessages?: number;
64
+ repairIntervalMs?: number;
65
+ repairMaxPerReq?: number;
66
+ /**
67
+ * If enabled, try to repair missing sequences by querying a small number of
68
+ * additional peers (not only the current parent). This is a stepping stone
69
+ * towards Plumtree-style neighbor-assisted repair.
70
+ */
71
+ neighborRepair?: boolean;
72
+ neighborRepairPeers?: number;
73
+ /**
74
+ * Target number of "lazy" mesh peers to keep connected for neighbor-assisted repair.
75
+ * These peers are discovered via trackers and are not part of the parent/child tree.
76
+ */
77
+ neighborMeshPeers?: number;
78
+ /**
79
+ * How often to send an IHAVE-style cache summary to mesh peers.
80
+ * This is throttled and sent only when the node has seen new data.
81
+ */
82
+ neighborAnnounceIntervalMs?: number;
83
+ /**
84
+ * How often to refresh mesh peers via tracker queries.
85
+ */
86
+ neighborMeshRefreshIntervalMs?: number;
87
+ /**
88
+ * How long to trust an IHAVE summary from a peer when choosing fetch targets.
89
+ */
90
+ neighborHaveTtlMs?: number;
91
+ /**
92
+ * Optional budget (token bucket) for neighbor-assisted repair `FETCH_REQ` control traffic.
93
+ *
94
+ * If `<= 0`, no budget is applied.
95
+ */
96
+ neighborRepairBudgetBps?: number;
97
+ neighborRepairBurstMs?: number;
98
+ /**
99
+ * Optional ingress budget (token bucket) for proxy publishes (`MSG_PUBLISH_PROXY`).
100
+ *
101
+ * This is enforced per established child link to cap amplification/DoS at the root
102
+ * and on intermediate relays. Cost is measured in payload bytes.
103
+ *
104
+ * If `<= 0`, no budget is applied.
105
+ */
106
+ proxyPublishBudgetBps?: number;
107
+ proxyPublishBurstMs?: number;
108
+ /**
109
+ * Optional ingress budget (token bucket) for relaying unicast control traffic
110
+ * (`MSG_UNICAST`, `MSG_UNICAST_ACK`).
111
+ *
112
+ * This is enforced per established child link. Cost is measured in payload bytes.
113
+ *
114
+ * If `<= 0`, no budget is applied.
115
+ */
116
+ unicastBudgetBps?: number;
117
+ unicastBurstMs?: number;
118
+ /**
119
+ * If set (>0), do not forward data that is older than this many milliseconds,
120
+ * based on the message header timestamp (origin publish time, when forwarding
121
+ * without re-signing).
122
+ *
123
+ * This is primarily intended for "live" workloads where late data is worse
124
+ * than missing data.
125
+ */
126
+ maxDataAgeMs?: number;
127
+ /**
128
+ * Max number of cached route tokens kept per channel for targeted unicast.
129
+ *
130
+ * `0` disables route caching.
131
+ */
132
+ routeCacheMaxEntries?: number;
133
+ /**
134
+ * TTL for cached route tokens (milliseconds).
135
+ *
136
+ * `0` disables expiry.
137
+ */
138
+ routeCacheTtlMs?: number;
139
+ /**
140
+ * Best-effort "peer hints" cache size bound (per channel).
141
+ *
142
+ * This tracks peer hashes observed on the channel control-plane and is used
143
+ * for route proxy fanout and neighbor-assisted repair. It is intentionally
144
+ * bounded so it cannot grow toward channel size at large scale.
145
+ *
146
+ * `0` disables peer hint tracking.
147
+ */
148
+ peerHintMaxEntries?: number;
149
+ /**
150
+ * TTL for peer hint entries (milliseconds).
151
+ *
152
+ * `0` disables expiry.
153
+ */
154
+ peerHintTtlMs?: number;
155
+ };
156
+ export type FanoutTreeJoinOptions = {
157
+ timeoutMs?: number;
158
+ retryMs?: number;
159
+ signal?: AbortSignal;
160
+ staleAfterMs?: number;
161
+ /**
162
+ * How long to wait for a JOIN_ACCEPT/JOIN_REJECT after sending a JOIN_REQ.
163
+ */
164
+ joinReqTimeoutMs?: number;
165
+ /**
166
+ * Optional bootstrap nodes used as rendezvous/tracker servers for joining.
167
+ * If omitted, `FanoutTree.setBootstraps()` (if configured) is used.
168
+ */
169
+ bootstrap?: Array<string | Multiaddr>;
170
+ /**
171
+ * Max time to wait for a bootstrapped peer to become a `@peerbit/stream`
172
+ * neighbor (protocol streams established) after dialing.
173
+ */
174
+ bootstrapDialTimeoutMs?: number;
175
+ /**
176
+ * Max number of bootstrap peers to dial and keep as tracker candidates while joining.
177
+ *
178
+ * Set to `0` to use all provided bootstraps.
179
+ */
180
+ bootstrapMaxPeers?: number;
181
+ /**
182
+ * How many candidate parents to request per tracker query.
183
+ */
184
+ trackerCandidates?: number;
185
+ /**
186
+ * Shuffle only within the first K ranked candidates to spread load without
187
+ * destroying the bias towards low-level/high-capacity parents.
188
+ *
189
+ * Set to `0` to disable shuffling.
190
+ */
191
+ candidateShuffleTopK?: number;
192
+ /**
193
+ * How long to wait for a tracker reply before proceeding.
194
+ */
195
+ trackerQueryTimeoutMs?: number;
196
+ /**
197
+ * How often to announce parent capacity to trackers (keep-alive).
198
+ */
199
+ announceIntervalMs?: number;
200
+ /**
201
+ * TTL for announcements stored by trackers.
202
+ * Trackers should treat entries as stale after this.
203
+ */
204
+ announceTtlMs?: number;
205
+ /**
206
+ * Min interval between re-dial attempts to bootstrap peers when joining.
207
+ */
208
+ bootstrapEnsureIntervalMs?: number;
209
+ /**
210
+ * Min interval between tracker queries while joining.
211
+ */
212
+ trackerQueryIntervalMs?: number;
213
+ /**
214
+ * Max number of join candidates to try per retry "round".
215
+ *
216
+ * This prevents a long tail of sequential JOIN_REQ timeouts from blocking
217
+ * the join loop for tens of seconds under overload.
218
+ */
219
+ joinAttemptsPerRound?: number;
220
+ /**
221
+ * Cooldown applied to a candidate parent after dial/join failures.
222
+ *
223
+ * This reduces hot-spotting (everyone hammering the same few parents) and
224
+ * keeps control-plane traffic bounded at large scale.
225
+ */
226
+ candidateCooldownMs?: number;
227
+ /**
228
+ * Candidate scoring mode for selecting parent join targets.
229
+ *
230
+ * - `ranked-shuffle` (default): rank by (level, freeSlots, bid, source) and
231
+ * shuffle within `candidateShuffleTopK` to spread load.
232
+ * - `ranked-strict`: try ranked candidates in order (no shuffle).
233
+ * - `weighted`: weighted shuffle within `candidateShuffleTopK` using
234
+ * `candidateScoringWeights` (defaults bias low level + free slots).
235
+ */
236
+ candidateScoringMode?: "ranked-shuffle" | "ranked-strict" | "weighted";
237
+ /**
238
+ * Weights used when `candidateScoringMode="weighted"`.
239
+ *
240
+ * Larger values increase the influence of that signal.
241
+ */
242
+ candidateScoringWeights?: {
243
+ level?: number;
244
+ freeSlots?: number;
245
+ connected?: number;
246
+ bidPerByte?: number;
247
+ source?: number;
248
+ };
249
+ };
250
+ /**
251
+ * Tracker-backed provider discovery for targeted pulls (blocks/RPC).
252
+ *
253
+ * Providers announce under a bounded namespace key, and consumers query for K candidates.
254
+ * This avoids any search/flood behaviors at large scale.
255
+ */
256
+ export type FanoutProviderCandidate = {
257
+ hash: string;
258
+ addrs: Multiaddr[];
259
+ };
260
+ export type FanoutProviderAnnounceOptions = {
261
+ ttlMs?: number;
262
+ announceIntervalMs?: number;
263
+ bootstrap?: Array<string | Multiaddr>;
264
+ bootstrapDialTimeoutMs?: number;
265
+ bootstrapMaxPeers?: number;
266
+ };
267
+ export type FanoutProviderQueryOptions = {
268
+ want?: number;
269
+ seed?: number;
270
+ timeoutMs?: number;
271
+ queryTimeoutMs?: number;
272
+ cacheTtlMs?: number;
273
+ signal?: AbortSignal;
274
+ bootstrap?: Array<string | Multiaddr>;
275
+ bootstrapDialTimeoutMs?: number;
276
+ bootstrapMaxPeers?: number;
277
+ };
278
+ export type FanoutProviderHandle = {
279
+ close: () => void;
280
+ };
281
+ export type FanoutTreeDataEvent = {
282
+ topic: string;
283
+ root: string;
284
+ seq: number;
285
+ payload: Uint8Array;
286
+ from: string;
287
+ origin: string;
288
+ timestamp: bigint;
289
+ message: DataMessage;
290
+ };
291
+ export type FanoutTreeUnicastEvent = {
292
+ topic: string;
293
+ root: string;
294
+ route: string[];
295
+ payload: Uint8Array;
296
+ from: string;
297
+ origin: string;
298
+ to: string;
299
+ timestamp: bigint;
300
+ message: DataMessage;
301
+ };
302
+ export type FanoutTreeChannelMetrics = {
303
+ controlSends: number;
304
+ controlBytesSent: number;
305
+ controlReceives: number;
306
+ controlBytesReceived: number;
307
+ /**
308
+ * Control-plane byte breakdown by purpose.
309
+ *
310
+ * These include the full encoded control message bytes and are counted per transmission.
311
+ */
312
+ controlBytesSentJoin: number;
313
+ controlBytesSentRepair: number;
314
+ controlBytesSentTracker: number;
315
+ controlBytesReceivedJoin: number;
316
+ controlBytesReceivedRepair: number;
317
+ controlBytesReceivedTracker: number;
318
+ dataSends: number;
319
+ dataPayloadBytesSent: number;
320
+ dataReceives: number;
321
+ dataPayloadBytesReceived: number;
322
+ staleForwardsDropped: number;
323
+ dataWriteDrops: number;
324
+ /**
325
+ * Proxy publish frames dropped due to local rate limiting.
326
+ *
327
+ * This is an abuse-resistance knob: it caps how much a single child can
328
+ * amplify traffic via the root.
329
+ */
330
+ proxyPublishDrops: number;
331
+ /**
332
+ * Unicast frames dropped due to local rate limiting.
333
+ */
334
+ unicastDrops: number;
335
+ joinReqSent: number;
336
+ joinReqReceived: number;
337
+ joinAcceptSent: number;
338
+ joinAcceptReceived: number;
339
+ joinRejectSent: number;
340
+ joinRejectReceived: number;
341
+ kickSent: number;
342
+ kickReceived: number;
343
+ reparentDisconnect: number;
344
+ reparentStale: number;
345
+ reparentKicked: number;
346
+ endSent: number;
347
+ endReceived: number;
348
+ repairReqSent: number;
349
+ repairReqReceived: number;
350
+ fetchReqSent: number;
351
+ fetchReqReceived: number;
352
+ ihaveSent: number;
353
+ ihaveReceived: number;
354
+ trackerAnnounceSent: number;
355
+ trackerAnnounceReceived: number;
356
+ trackerQuerySent: number;
357
+ trackerQueryReceived: number;
358
+ trackerReplySent: number;
359
+ trackerReplyReceived: number;
360
+ trackerFeedbackSent: number;
361
+ trackerFeedbackReceived: number;
362
+ cacheHitsServed: number;
363
+ cacheMissesServed: number;
364
+ holeFillsFromNeighbor: number;
365
+ earnings: number;
366
+ routeCacheHits: number;
367
+ routeCacheMisses: number;
368
+ routeCacheExpirations: number;
369
+ routeCacheEvictions: number;
370
+ routeProxyQueries: number;
371
+ routeProxyTimeouts: number;
372
+ routeProxyFanout: number;
373
+ };
374
+ export interface FanoutTreeEvents extends StreamEvents {
375
+ "fanout:data": CustomEvent<FanoutTreeDataEvent>;
376
+ "fanout:unicast": CustomEvent<FanoutTreeUnicastEvent>;
377
+ "fanout:joined": CustomEvent<{
378
+ topic: string;
379
+ root: string;
380
+ parent: string;
381
+ }>;
382
+ "fanout:kicked": CustomEvent<{
383
+ topic: string;
384
+ root: string;
385
+ from: string;
386
+ }>;
387
+ }
388
+ export declare class FanoutTree extends DirectStream<FanoutTreeEvents> {
389
+ private channelsBySuffixKey;
390
+ private readonly cachedSuffixKey;
391
+ private readonly metricsBySuffixKey;
392
+ private bootstraps;
393
+ private trackerBySuffixKey;
394
+ private trackerNamespaceLru;
395
+ private providerBySuffixKey;
396
+ private providerNamespaceLru;
397
+ private underlayPeerDisconnectHandler?;
398
+ private pendingProviderQueryBySuffixKey;
399
+ private providerAnnounceBySuffixKey;
400
+ private readonly defaultUploadOverheadBytes;
401
+ private readonly random;
402
+ private readonly unicastAckNodeTag32;
403
+ private unicastAckSeq;
404
+ readonly topicRootControlPlane: TopicRootControlPlane;
405
+ constructor(components: DirectStreamComponents, opts?: FanoutTreeStreamOptions);
406
+ stop(): Promise<void>;
407
+ setBootstraps(addrs: Array<string | Multiaddr>): void;
408
+ private touchTrackerNamespace;
409
+ private pruneTrackerNamespaceIfEmpty;
410
+ private touchProviderNamespace;
411
+ private pruneProviderNamespaceIfEmpty;
412
+ private getProviderNamespaceId;
413
+ provide(namespace: string, options?: FanoutProviderAnnounceOptions): FanoutProviderHandle;
414
+ /**
415
+ * Announce provider presence once (no background loop).
416
+ *
417
+ * This is useful for "on-demand" discovery where the caller wants to publish a
418
+ * short-lived provider hint (e.g. after putting a block) without keeping a
419
+ * per-namespace timer alive.
420
+ */
421
+ announceProvider(namespace: string, options?: Omit<FanoutProviderAnnounceOptions, "announceIntervalMs">): Promise<void>;
422
+ private _providerAnnounceLoop;
423
+ private announceProviderOnce;
424
+ private nextProviderReqId;
425
+ queryProviderCandidates(namespace: string, options?: FanoutProviderQueryOptions): Promise<FanoutProviderCandidate[]>;
426
+ queryProviders(namespace: string, options?: FanoutProviderQueryOptions): Promise<string[]>;
427
+ getChannelId(topic: string, root: string): FanoutTreeChannelId;
428
+ openChannel(topic: string, root: string, opts: FanoutTreeChannelOptions): FanoutTreeChannelId;
429
+ private abortPendingUnicastAcks;
430
+ private detachFromParent;
431
+ private onPeerDisconnectedFromUnderlay;
432
+ closeChannel(topic: string, root: string, options?: {
433
+ notifyParent?: boolean;
434
+ kickChildren?: boolean;
435
+ }): Promise<void>;
436
+ getChannelStats(topic: string, root: string): {
437
+ topic: string;
438
+ root: string;
439
+ parent?: string;
440
+ level: number;
441
+ children: number;
442
+ effectiveMaxChildren: number;
443
+ uploadLimitBps: number;
444
+ droppedForwards: number;
445
+ peerHintEntries: number;
446
+ peerHintMaxEntries: number;
447
+ routeCacheEntries: number;
448
+ routeCacheMaxEntries: number;
449
+ } | undefined;
450
+ getChannelMetrics(topic: string, root: string): FanoutTreeChannelMetrics;
451
+ getChannelPeerHashes(topic: string, root: string, options?: {
452
+ includeSelf?: boolean;
453
+ }): string[];
454
+ joinChannel(topic: string, root: string, channelOpts: Omit<FanoutTreeChannelOptions, "role">, joinOpts?: FanoutTreeJoinOptions): Promise<void>;
455
+ /**
456
+ * Returns this node's current route token for a channel, if attached.
457
+ *
458
+ * The token is a source-route path `[root, ..., self]` and can be shared
459
+ * out-of-band to allow economical unicast within the channel.
460
+ */
461
+ getRouteToken(topic: string, root: string): string[] | undefined;
462
+ getRouteHint(topic: string, root: string, targetHash: string): FanoutRouteTokenHint | undefined;
463
+ private cacheRoute;
464
+ private cacheKnownCandidateAddrs;
465
+ private touchPeerHint;
466
+ private prunePeerHints;
467
+ private pruneRouteCache;
468
+ private getCachedRoute;
469
+ private isRouteValidForChannel;
470
+ private nextReqId;
471
+ private completeRouteProxy;
472
+ private proxyRouteQuery;
473
+ resolveRouteToken(topic: string, root: string, targetHash: string, options?: {
474
+ timeoutMs?: number;
475
+ signal?: AbortSignal;
476
+ }): Promise<string[] | undefined>;
477
+ private nextUnicastAckToken;
478
+ unicastTo(topic: string, root: string, targetHash: string, payload: Uint8Array, options?: {
479
+ timeoutMs?: number;
480
+ signal?: AbortSignal;
481
+ }): Promise<void>;
482
+ unicastToAck(topic: string, root: string, targetHash: string, payload: Uint8Array, options?: {
483
+ timeoutMs?: number;
484
+ signal?: AbortSignal;
485
+ }): Promise<void>;
486
+ unicastAck(topic: string, root: string, toRoute: string[], targetHash: string, payload: Uint8Array, options?: {
487
+ timeoutMs?: number;
488
+ signal?: AbortSignal;
489
+ }): Promise<void>;
490
+ /**
491
+ * Economical unicast within an existing fanout channel.
492
+ *
493
+ * Any sender can send to `toRoute` by forwarding the message *up* to the root,
494
+ * and then letting the root forward it *down* the provided route.
495
+ *
496
+ * `toRoute` must be a route token `[root, ..., target]`.
497
+ */
498
+ unicast(topic: string, root: string, toRoute: string[], payload: Uint8Array): Promise<void>;
499
+ publishData(topic: string, root: string, payload: Uint8Array): Promise<void>;
500
+ /**
501
+ * Publishes payload to all channel members.
502
+ *
503
+ * Root publishes directly on the data-plane. Non-root members proxy the publish
504
+ * upstream to the root, which assigns a sequence number and broadcasts.
505
+ */
506
+ publishToChannel(topic: string, root: string, payload: Uint8Array): Promise<void>;
507
+ private waitForChannelAttachment;
508
+ publishEnd(topic: string, root: string, lastSeqExclusive: number): Promise<void>;
509
+ private makeDataId;
510
+ private getSuffixKeyFromId;
511
+ private getMetricsForSuffixKey;
512
+ private recordControlSend;
513
+ private recordControlReceive;
514
+ private markCached;
515
+ private getCached;
516
+ private _sendControl;
517
+ private _sendControlMany;
518
+ private refillUploadTokens;
519
+ private refillNeighborRepairTokens;
520
+ private takeIngressBudget;
521
+ private _sendData;
522
+ private _forwardDataMessage;
523
+ private noteReceivedSeq;
524
+ private noteEnd;
525
+ private tickRepair;
526
+ private getBootstrapsForChannel;
527
+ private getSelfAnnounceAddrs;
528
+ private ensureBootstrapPeers;
529
+ private announceToTrackers;
530
+ private _announceLoop;
531
+ private _repairLoop;
532
+ private pruneLazyPeers;
533
+ private pruneDisconnectedChildren;
534
+ private pruneHaveByPeer;
535
+ private getHaveRange;
536
+ private maybeSendIHave;
537
+ private ensureMeshPeers;
538
+ private refreshMeshCandidates;
539
+ private _meshLoop;
540
+ private queryTrackers;
541
+ private ensurePeerConnection;
542
+ private getPeerAddrsBytes;
543
+ private pickJoinRejectRedirects;
544
+ private sendJoinReject;
545
+ private sendTrackerFeedback;
546
+ private _joinLoop;
547
+ private tryJoinOnce;
548
+ private kickChildren;
549
+ onDataMessage(from: any, peerStream: PeerStreams, message: DataMessage, seenBefore: number): Promise<boolean>;
550
+ }
551
+ //# sourceMappingURL=fanout-tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fanout-tree.d.ts","sourceRoot":"","sources":["../../src/fanout-tree.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,yBAAyB,CAAC;AACpE,OAAO,EACN,YAAY,EACZ,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAEhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEN,WAAW,EACX,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,MAAM,2BAA2B,CAAC;AAInC,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,MAAM,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,UAAU,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpD,MAAM,MAAM,uBAAuB,GAAG,mBAAmB,GAAG;IAC3D;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;IACtB;;;;;;;OAOG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACtC,IAAI,EAAE,qBAAqB,CAAC;IAK5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAEhB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;OAKG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAC;IAEpC;;OAEG;IACH,6BAA6B,CAAC,EAAE,MAAM,CAAC;IAEvC;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B;;;;;;;OAOG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAEtC;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC;IAEnC;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;;;;;;;OAQG;IACH,oBAAoB,CAAC,EAAE,gBAAgB,GAAG,eAAe,GAAG,UAAU,CAAC;IAEvE;;;;OAIG;IACH,uBAAuB,CAAC,EAAE;QACzB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACF,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,EAAE,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACtC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACtC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAClC,KAAK,EAAE,MAAM,IAAI,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,UAAU,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,WAAW,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,UAAU,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,WAAW,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAE7B;;;;OAIG;IACH,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,uBAAuB,EAAE,MAAM,CAAC;IAChC,wBAAwB,EAAE,MAAM,CAAC;IACjC,0BAA0B,EAAE,MAAM,CAAC;IACnC,2BAA2B,EAAE,MAAM,CAAC;IAEpC,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,wBAAwB,EAAE,MAAM,CAAC;IACjC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IAEpB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IAEtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,uBAAuB,EAAE,MAAM,CAAC;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,uBAAuB,EAAE,MAAM,CAAC;IAEhC,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IAEjB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,WAAW,gBAAiB,SAAQ,YAAY;IACrD,aAAa,EAAE,WAAW,CAAC,mBAAmB,CAAC,CAAC;IAChD,gBAAgB,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC;IACtD,eAAe,EAAE,WAAW,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9E,eAAe,EAAE,WAAW,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5E;AA48BD,qBAAa,UAAW,SAAQ,YAAY,CAAC,gBAAgB,CAAC;IAC7D,OAAO,CAAC,mBAAmB,CAAmC;IAC9D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqC;IACrE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA+C;IAClF,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,kBAAkB,CAAgD;IAC1E,OAAO,CAAC,mBAAmB,CAA6B;IACxD,OAAO,CAAC,mBAAmB,CAAiD;IAC5E,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,6BAA6B,CAAC,CAAoB;IAC1D,OAAO,CAAC,+BAA+B,CAGnC;IACJ,OAAO,CAAC,2BAA2B,CAA4C;IAC/E,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAO;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,aAAa,CAAK;IAC1B,SAAgB,qBAAqB,EAAE,qBAAqB,CAAC;gBAG5D,UAAU,EAAE,sBAAsB,EAClC,IAAI,CAAC,EAAE,uBAAuB;IA6BR,IAAI;IAWpB,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;IAMrD,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,4BAA4B;IAQpC,OAAO,CAAC,sBAAsB;IAc9B,OAAO,CAAC,6BAA6B;IASrC,OAAO,CAAC,sBAAsB;IAMvB,OAAO,CACb,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,6BAAkC,GACzC,oBAAoB;IA+DvB;;;;;;OAMG;IACU,gBAAgB,CAC5B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,IAAI,CAAC,6BAA6B,EAAE,oBAAoB,CAAM,GACrE,OAAO,CAAC,IAAI,CAAC;YAuCF,qBAAqB;YAarB,oBAAoB;IAsBlC,OAAO,CAAC,iBAAiB;IASZ,uBAAuB,CACnC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,0BAA+B,GACtC,OAAO,CAAC,uBAAuB,EAAE,CAAC;IA8LxB,cAAc,CAC1B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,0BAA+B,GACtC,OAAO,CAAC,MAAM,EAAE,CAAC;IAKb,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,mBAAmB;IAM9D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB;IA8O9E,OAAO,CAAC,uBAAuB;IAuB/B,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,8BAA8B;IAgCzB,YAAY,CACxB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GAC1D,OAAO,CAAC,IAAI,CAAC;IAoDT,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAC/C;QACA,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,oBAAoB,EAAE,MAAM,CAAC;QAC5B,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,eAAe,EAAE,MAAM,CAAC;QACxB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,oBAAoB,EAAE,MAAM,CAAC;KAC5B,GACD,SAAS;IAoBN,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,wBAAwB;IAKxE,oBAAoB,CAC1B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GACjC,MAAM,EAAE;IAwBE,WAAW,CACvB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,EACnD,QAAQ,GAAE,qBAA0B,GAClC,OAAO,CAAC,IAAI,CAAC;IAkDhB;;;;;OAKG;IACI,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS;IAOhE,YAAY,CAClB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GAChB,oBAAoB,GAAG,SAAS;IAwCnC,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,wBAAwB;IAsBhC,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,eAAe;IAkCvB,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,eAAe;IA6CV,iBAAiB,CAC7B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACpD,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC;IAiJhC,OAAO,CAAC,mBAAmB;IAMd,SAAS,CACrB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,UAAU,EACnB,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE;IAS1C,YAAY,CACxB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,UAAU,EACnB,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACpD,OAAO,CAAC,IAAI,CAAC;IAQH,UAAU,CACtB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EAAE,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,UAAU,EACnB,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACpD,OAAO,CAAC,IAAI,CAAC;IAiJhB;;;;;;;OAOG;IACU,OAAO,CACnB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,UAAU,GACjB,OAAO,CAAC,IAAI,CAAC;IAsDH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBzF;;;;;OAKG;IACU,gBAAgB,CAC5B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,UAAU,GACjB,OAAO,CAAC,IAAI,CAAC;IAqBhB,OAAO,CAAC,wBAAwB;IAyDnB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ7F,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,iBAAiB;IAoEzB,OAAO,CAAC,oBAAoB;IA+D5B,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,SAAS;YAOH,YAAY;YAWZ,gBAAgB;IAc9B,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,0BAA0B;IAYlC,OAAO,CAAC,iBAAiB;YA2CX,SAAS;YAkMT,mBAAmB;IAgLhC,OAAO,CAAC,eAAe;IAwCxB,OAAO,CAAC,OAAO;YAwBD,UAAU;IAwIxB,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,oBAAoB;YAwBd,oBAAoB;YAgCpB,kBAAkB;YAmClB,aAAa;YAmBb,WAAW;IAezB,OAAO,CAAC,cAAc;IAqCtB,OAAO,CAAC,yBAAyB;IAwBjC,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,YAAY;YAiBN,cAAc;YAqBd,eAAe;YAsCf,qBAAqB;YAoBpB,SAAS;YA+BV,aAAa;YAuCb,oBAAoB;YAoBpB,iBAAiB;YAoBjB,uBAAuB;YA0EvB,cAAc;YAUd,mBAAmB;YAcnB,SAAS;YAgkBT,WAAW;YAwBX,YAAY;IAQb,aAAa,CACzB,IAAI,EAAE,GAAG,EACT,UAAU,EAAE,WAAW,EACvB,OAAO,EAAE,WAAW,EACpB,UAAU,EAAE,MAAM;CAqrCnB"}